<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cognifide Blog &#187; Adobe</title>
	<atom:link href="http://www.cognifide.com/blogs/tag/adobe/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.cognifide.com/blogs</link>
	<description>The Cognifide.Com Tech Hub</description>
	<lastBuildDate>Mon, 17 Jun 2013 08:46:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Make your CQ life easier with Slice</title>
		<link>http://www.cognifide.com/blogs/cq/make-your-cq-life-easier-with-slice/</link>
		<comments>http://www.cognifide.com/blogs/cq/make-your-cq-life-easier-with-slice/#comments</comments>
		<pubDate>Thu, 01 Nov 2012 12:05:46 +0000</pubDate>
		<dc:creator>Maciej Majchrzak</dc:creator>
				<category><![CDATA[Adobe CQ]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[CQ5]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Sling]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=3402</guid>
		<description><![CDATA[Are you happy with your Sling/CQ development? If yes, you’re a lucky guy – you’ve just saved a couple of minutes because there’s no need for you to read this post. You’re still reading this, which means that you want to do your job better, write your CQ applications faster, produce better quality code; or [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cognifide.com/blogs/cq/make-your-cq-life-easier-with-slice/attachment/adobe_cq_logo/" rel="attachment wp-att-3572"><img class="size-full wp-image-3572 alignnone" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/10/Adobe_CQ_logo.png" alt="Adobe CQ" width="250" height="244" /></a></p>
<p>Are you happy with your Sling/CQ development? If yes, you’re a lucky guy – you’ve just saved a couple of minutes because there’s no need for you to read this post.</p>
<p>You’re still reading this, which means that you want to do your job better, write your CQ applications faster, produce better quality code; or have your code testable and reusable&#8230; or you’re just curious. Whatever your motivation is, you won’t regret reading this post because it will change the way you develop your CQ applications &#8211; exactly as Slice changed ours.</p>
<p>Slice has been developed internally in Cognifide and is now released to the public. It is a framework that makes Sling/CQ development much easier and more efficient. Take a while to read this short introduction to Slice and find out how you can benefit from using it.<br />
<span id="more-3402"></span></p>
<h2>So, why should I use it?</h2>
<p>I promised you in the title of this post that your life (your life as a CQ developer) will be easier when using Slice. Here’s a couple of benefits you can gain:</p>
<ul>
<li>No more scriptlets – writing business logic of your app in JSPs is generally not a good idea, there are plenty of reasons, and plenty of post/articles that discuss this topic (like <a href="http://stackoverflow.com/a/1832327">http://stackoverflow.com/a/1832327</a>). With Slice you write your business logic in Java; JSP is a presentation layer only.</li>
<li>Avoid re-inventing the wheel – think of how many times you have had to re-write your code, especially when starting a new project? The Slice framework makes it easier because it provides a lot of features you can reuse. You can also reuse your own modules and libraries.</li>
<li>Improve the testability of your code – you just write simple Java classes. Thanks to dependency injection (DI) they can be easily unit-tested.</li>
<li>Low cost of introduction of new developers into projects – Slice is easy to learn and if you use it in all your projects, your developers know exactly how to start.</li>
<li>Faster development – code reuse, dependency injection and simplicity make you more efficient than ever.</li>
<li>Reduce maintenance costs.</li>
</ul>
<h2>We’re taking off</h2>
<p>Slice is a framework designed having modularity in mind. We divided it into a couple of modules, and you can add yours if you want. Modularity of the framework is achieved using Guice. Hold on, what?! Not OSGi? Yes, you might be a little bit surprised. You will still use OSGi bundles but inside your application bundles there will be a dependency injection framework. It allows you to inject simple objects which don’t have to be OSGi components/services. You will see in a minute how powerful it is and how it simplifies your code.</p>
<p>The framework is based on the presentation model pattern which means that your views (JSP files) determine which presentation model to use (Java classes) to return underlying data (a Java class with repository data).</p>
<p>The core feature of Slice is the Mapper. If you’re familiar with Hibernate or any other object-relational mapping (ORM) solution, you can think of the Slice Mapper as a JCR equivalent of ORM. Basically, it maps your JCR content to POJOs. Thanks to this you have access to a repository in your Java objects.</p>
<h2>Show time!</h2>
<p>You&#8217;re already familiarised with the basics. Now it’s time for development. We will be writing a simple CQ component and extending it by adding new features, which will show you different aspects of the Slice framework.</p>
<p>You’re probably expecting to have some installation guide here. I have to upset you &#8211; I’ve decided not to write about it as it is covered in the Slice documentation and, basically, there are only some maven dependencies and a bundle activator.</p>
<p>Let’s create a simple text component which is responsible for rendering a piece of text. A JSP file of our text component looks like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@page pageEncoding=&quot;UTF-8&quot; contentType=&quot;text/html; charset=UTF-8&quot;
%&gt;&lt;%@include file=&quot;/apps/myapp/core/global.jsp&quot;
%&gt;&lt;slice:lookup var=&quot;model&quot; type=&quot;&lt;%=com.cognifide.myapp.TextModel.class%&gt;&quot;/&gt;
&lt;p&gt;${model.text}&lt;/p&gt;
</pre>
<p>Pay attention to the third line – this is how you define the model of data you expect to be returned by the framework. When you have your model of data to be rendered, you can just output it using JSTL (line 4). Simple as that.</p>
<p>A model class is more interesting:</p>
<pre class="brush: java; title: ; notranslate">
package com.cognifide.myapp;

import com.cognifide.slice.mapper.annotation.JcrProperty;
import com.cognifide.slice.mapper.annotation.SliceResource;

@SliceResource
public class TextModel {

	@JcrProperty
	private String text;

	public String getText() {
		return text;
	}

}
</pre>
<p>We’ve got here a simple POJO class annotated by <code>@SliceResource</code>. This is a key annotation in Slice which informs the framework that you want to have objects of this class to be mapped from the underlying resource.</p>
<div id="attachment_3579" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.cognifide.com/blogs/wp-content/uploads/2012/10/data-flow3.png"><img class="size-medium wp-image-3579" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/10/data-flow3-300x195.png" alt="Mapping resources in Slice" width="300" height="195" /></a><p class="wp-caption-text">Mapping resources in Slice</p></div>
<h2>How does the Mapper work?</h2>
<p>The Mapper reads the Sling resource provided by the framework (in our example it is a resource of the text component) and writes its properties to corresponding fields in a Java object. The matching between properties and fields is done by names.</p>
<p>All is needed to map an object is the <code>@SliceResource</code> annotation put at the class level. A class can define if all its fields should be mapped or only annotated. This can be done by specifying the <code>MappingStrategy</code> in <code>@SliceResource</code>:</p>
<ul>
<li><code>@SliceResource(MappingStrategy.ANNOTATED)</code> or just <code>@SliceResource</code> – only fields annotated by <code>@JcrProperty</code> are mapped,</li>
<li><code>@SliceResource(MappingStrategy.ALL)</code> – all fields are mapped. If there is no property in a resource which corresponds to a field, the field will be set to null.</li>
</ul>
<p>If a field is of a class annotated by <code>@SliceResource</code> – guess what – it will also be mapped recursively.</p>
<p>There are also other field-level annotations which can be used. They allow you to either define logic of mapping or transform the mapped value. These annotations include:</p>
<ul>
<li><code>@Unescaped</code> – unescape an html markup, so that an html value can be correctly displayed – especially useful in fields containing richtext.</li>
<li><code>@ImagePath</code> – transforms String into the CQ image path. Useful when a path to an image must be displayed (like in <code>&lt;img src="image_path"&gt;</code>)</li>
<li><code>@SliceReference</code> – my favourite one. It allows you to define a path in a repository where the SliceResource field will be mapped from.</li>
</ul>
<h2>Inject me!</h2>
<p>By now, you should understand how our simple <code>TextModel</code> class was populated by repository data and then rendered in a JSP script. So far, so good. Let’s play toys for big boys now.</p>
<p>We haven’t use Guice so far – or, actually, you couldn’t see that Slice made use of it. Let’s modify our text component to display text with a title of a random page.</p>
<p>The JSP file, again, is very simple and performs no business logic – it only displays data provided:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;%@page pageEncoding=&quot;UTF-8&quot; contentType=&quot;text/html; charset=UTF-8&quot;
%&gt;&lt;%@include file=&quot;/apps/myapp/core/global.jsp&quot;
%&gt;&lt;slice:lookup var=&quot;model&quot; type=&quot;&lt;%=com.cognifide.myapp.PageTextModel.class%&gt;&quot;/&gt;
&lt;p&gt;${model.text}, ${model.pageTitle}&lt;/p&gt;
</pre>
<p>To implement business logic we need the <code>PageManager</code> class and a path to the page. The path will be stored in the underlying resource (chosen by the author using component dialog) and <code>PageManger</code> will be injected. Take a look at the code below:</p>
<pre class="brush: java; title: ; notranslate">
package com.cognifide.myapp;

import com.cognifide.slice.mapper.annotation.JcrProperty;
import com.cognifide.slice.mapper.annotation.SliceResource;
import com.day.cq.wcm.api.PageManager;
import com.google.inject.Inject;

@SliceResource
public class PageTextModel {

	@JcrProperty
	private String text;

	@JcrProperty
	private String path;

	private final PageManager pageManager;

	@Inject
	public PageTextModel(PageManager pageManager) {
		this.pageManager = pageManager;
	}

	public String getText() {
		return text;
	}

	public String getPageTitle() {
		return pageManager.getPage(path).getTitle();
	}
}
</pre>
<p>If you want to display the title of a requested page instead of a specified one, you can&#8230; inject a requested page:</p>
<pre class="brush: java; title: ; notranslate">
package com.cognifide.myapp;

import com.cognifide.slice.cq.qualifier.RequestedPage;
import com.cognifide.slice.mapper.annotation.JcrProperty;
import com.cognifide.slice.mapper.annotation.SliceResource;
import com.day.cq.wcm.api.Page;
import com.google.inject.Inject;

@SliceResource
public class PageTextModel {

	@JcrProperty
	private String text;

	private final Page requestedPage;

	@Inject
	public PageTextModel(@RequestedPage Page requestedPage) {
		this.requestedPage = requestedPage;
	}

	public String getText() {
		return text;
	}

	public String getPageTitle() {
		return requestedPage.getTitle();
	}
}
</pre>
<p>You will probably wonder how the framework knows what the requested page is and how to create this page. The logic of building objects which are injected is implemented in the so called providers. Providers, in turn, are defined in modules. This is a basic Guice concept. Please find out more at <a href="http://code.google.com/p/google-guice/wiki/GettingStarted" target="_blank">Guice website</a>.</p>
<p>Thanks to this approach you don’t produce boiler-plate code &#8211; classes depend on classes they really need. This improves the testability of your classes, too.</p>
<h2>Become an expert</h2>
<p>This post is not aiming in comprehensive guide to Slice. However, there are some additional features which are worth mentioning before I type the final dot.</p>
<p><strong>Inject OSGi services easily</strong><br />
Thanks to use of <a href="http://code.google.com/p/peaberry/" target="_blank">Peaberry</a> you can inject OSGi services as if they were standard Java classes.</p>
<p><strong>Scoping of objects</strong><br />
You can define for how long your objects are available and how many instances of your objects Guice should create. There is the request scope provided by Slice &#8211; it allows you to have one instance of a class per request, which means that Guice will reuse this instance for all its clients within a single request. Effectively, it&#8217;s a kind of a very simple cache. You can also have a dedicated scope for using objects in CQ workflows or background asynchronous jobs which are not dependent on a request. Additionally, you can introduce your own scopes, if needed.</p>
<p><strong>Complex composition</strong><br />
Slice provides a number of useful objects which can be instantly injected into your models, e.g. <code>SlingHttpServletRequest</code>, <code>ResourceResolver</code> or <code>PageManager</code>. It also introduces <code>ModelProvider</code> and <code>ChildrenProvider</code> which allows you to obtain a model of data from a specified path (or resource) within a repository. Thanks to this, you can have a model of whatever repository data you need and use it inside your models, e.g.</p>
<pre class="brush: java; title: ; notranslate">
PageTextModel pageTextModel = modelProvider.get(PageTextModel.class, &quot;/content/mysite/mypage/jcr:content/component&quot;);
</pre>
<p><strong>Simple validation of your models</strong><br />
Slice supports the validation of models and integrates it with JSP views using dedicated JSP tags.</p>
<p><strong>Easy to mock</strong><br />
Thanks to testing the framework you can mock a repository easily and use it in your unit tests.</p>
<p><strong>Modularization</strong><br />
Thanks to the modular architecture you can divide your application into logically separated modules.</p>
<h2>Get it now</h2>
<p>Slice is a framework which made our day-to-day development much easier. Now you can try if it helps you because Slice is open-source! You can find it on Github: <a href="https://github.com/Cognifide/Slice" target="_blank">https://github.com/Cognifide/Slice</a>.</p>
<p>Enjoy!</p>
<p>P.S.<br />
Some useful links:<br />
Slice documentation: <a href="https://cognifide.atlassian.net/wiki/display/SLICE" target="_blank">https://cognifide.atlassian.net/wiki/display/SLICE</a><br />
Slice JIRA: <a href="https://cognifide.atlassian.net/browse/SLICE" target="_blank">https://cognifide.atlassian.net/browse/SLICE</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/cq/make-your-cq-life-easier-with-slice/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Adobe Summit 2012 &#8211; Salt Lake City report</title>
		<link>http://www.cognifide.com/blogs/cq/adobe-summit-2012-salt-lake-city-report/</link>
		<comments>http://www.cognifide.com/blogs/cq/adobe-summit-2012-salt-lake-city-report/#comments</comments>
		<pubDate>Thu, 10 May 2012 15:56:08 +0000</pubDate>
		<dc:creator>Stuart Dean</dc:creator>
				<category><![CDATA[Adobe CQ]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[adobe dms]]></category>
		<category><![CDATA[summit 2012]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=2285</guid>
		<description><![CDATA[Back in March, Miro, Ray and I flew out to Utah to attend the “Adobe Summit 2012”. This was the first time that I had been to a CQ event since the “Day Customer Summit” in Basel, way back in 2007 well before Adobe acquired Day so I was quite excited to see how things [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-2290" title="Adobe Digital Marketing Summit 2012" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/05/Screen-shot-2012-05-10-at-16.51.591.png" alt="Adobe Digital Marketing Summit 2012" width="471" height="279" /></p>
<p>Back in March, Miro, Ray and I flew out to Utah to attend the “Adobe Summit 2012”. This was the first time that I had been to a CQ event since the “Day Customer Summit” in Basel, way back in 2007 well before Adobe acquired Day so I was quite excited to see how things had changed.</p>
<p><span id="more-2285"></span></p>
<p>The first day was Adobe Partner Day that focused on delivering the Adobe vision to the partner community before the actual customer summit started whilst also giving an opportunity for some last minute rehearsals for the Digital Marketing Suite (DMS) presentations and demos. My first thought as I stepped into the venue was that attendance was larger than what I  remember of the whole customer summit in Basel!</p>
<p>Days 2 and 3 were the main customer conference with an attendance of 4500 customers and partners. The format was a few keynotes in the morning and late afternoon with a choice of breakout sessions across the tracks below in-between:</p>
<ul>
<li> Analytics and reporting</li>
<li> Multichannel campaigns</li>
<li> Personalized engagement</li>
<li> Mobile</li>
<li> Social</li>
<li> Tech track</li>
<li> Web experience management</li>
<li> Media monetisation</li>
</ul>
<p>I came away from the summit feeling inspired and even more convinced that our relationship with Adobe will be a great thing for Cognifide’s continued growth and success over the years to come. I have tried to summarise my thoughts/takeaway points from the 3 days below:</p>
<ul>
<li>With increasing marketing and advertising dollars being devoted to digital marketing initiatives, digital marketing is the next big investment for enterprises following in the footsteps of ERP.</li>
</ul>
<ul>
<li>Adobe recognises the opportunity that an end to end enterprise platform for digital marketing represents and has a vision with a laser focus on delivering it.</li>
</ul>
<ul>
<li>The scope of this vision encompasses the creation, targeting, optimisation/ measurement and now even, predictive modelling of digital marketing activity. You start on this joined up journey in the creative suite and travel through the technology and tools of the rebranded Adobe Digital Marketing Suite (DMS).</li>
</ul>
<ul>
<li>None of the traditional enterprise software players are doing this – Microsoft, Oracle, HP are all lagging behind with Adobe taking the lead..</li>
</ul>
<ul>
<li>The fact that Adobe killed Lifecycle last year was a really positive message, reaffirming the focus they have on making this a success. As the Adobe folks would say, “we’re betting the ranch on this”</li>
</ul>
<ul>
<li>The above obviously means a lot more ongoing work as new clients buy into the Adobe vision. Adobe stated clearly that they do not plan to increase the head count of their internal professional services team and that they will continue to rely on the partner Eco-system to deliver services to clients. So, basically, they are committed to our success and offered help in growth of skills and offerings.</li>
</ul>
<ul>
<li>Adobe has also done some rebranding (again) with the latest terms being</li>
</ul>
<ol>
<li>The platform &#8211; “Adobe DMS (Digital Marketing Suite).</li>
<li>The brand “Omniture” is retiring soon and the main products that continued to evince interest amongst the delegates and partners were:<br />
Adobe Sitecatalyst<br />
Adobe Test and target<br />
Adobe Search and promote<br />
Adobe Social</li>
</ol>
<ul>
<li>Various new acquisitions have been made and will be added to the DMS:</li>
</ul>
<ol>
<li>Demdex – Audience optimisation platform</li>
<li>Efficient frontier – Predictive modelling of different marketing mix and the effects on results.</li>
<li>Auditude – Video advertising platform.</li>
</ol>
<ul>
<li>Scene 7 &#8211; the SaaS asset management platform captivated the audience.</li>
</ul>
<ul>
<li>Traditionally, Adobe have been quite agnostic when it comes to e-commerce and the partner day was the first time I have seen Adobe do a retail demo/case study so this intrigued me.. Shortly afterwards on Day 2 they announced a strategic partnership with Hybris as the ecommerce platform of choice.</li>
</ul>
<ul>
<li>Adobe CQ is at the centre of the DMS so we certainly have a headstart as we have been working with CQ well before Adobe started thinking of the acquisition. We saw a very compelling demo of the Adobe CQ cloud manager running on AWS.</li>
</ul>
<ul>
<li>Over the coming year(s), the Adobe DMS will become better integrated and sold as a cohesive platform. With this, clients will expect partners to be able to deliver a full service across the platform. This will certainly influence our growth of capabilities over the coming years to ensure there is mutual benefit from our strategic partnership with Adobe.</li>
</ul>
<ul>
<li>In addition to the Adobe presentations, I particularly enjoyed keynote sessions with Biz Stone (Twitter), Arianna Huffington (Huffington Post), a futurology session with Blake Irving (Yahoo) and a very entertaining creative suite demo with chief geek Kevin Lynch (CTO, Adobe)</li>
</ul>
<p>As well as all the exciting presentations, we had some good fun, snowboarding on the Friday and got some valuable one-on-one time with some potential clients.</p>
<p>All in all, the conference was a great experience and I’m looking forward to the <a title="Adobe Digital Marketing Summit 2012 EMEA" href="http://www.google.com/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CIoBEBYwAA&amp;url=http%3A%2F%2Fsummit.adobe.com%2F&amp;ei=4-SrT6TlCoW3-wad5ZieCg&amp;usg=AFQjCNEJleB8rhY-khRafZII0Np41Cz6og&amp;sig2=VmGXpAzetHJ93IUDK0Tntw">Adobe EMEA Summit</a> in London next week where we’re sponsoring the Web Experience Management (WEM) track and the Adobe partner café in Poznan over the next couple of months.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/cq/adobe-summit-2012-salt-lake-city-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe CQ 5.5 &#8211; Mobile Improvements</title>
		<link>http://www.cognifide.com/blogs/cq/adobe-cq-5-5-mobile-improvements/</link>
		<comments>http://www.cognifide.com/blogs/cq/adobe-cq-5-5-mobile-improvements/#comments</comments>
		<pubDate>Thu, 22 Mar 2012 10:30:51 +0000</pubDate>
		<dc:creator>Jan Kuźniak</dc:creator>
				<category><![CDATA[Adobe CQ]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[CQ5]]></category>
		<category><![CDATA[mobile]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=784</guid>
		<description><![CDATA[I remember that gleam in the marketer&#8217;s eyes when Investec demoed the first CQ5 mobile microsite at the Day Ignite 2010 Conference in Berlin. Everyone&#8217;s minds were spinning somewhere along the lines of &#8220;I&#8217;ll flip a switch and get a mobile site! Me wants!&#8221;. The appetite and expectations were huge. But on the other side [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cognifide.com/blogs/cq/adobe-cq-5-5-mobile-improvements/attachment/iphone-emulator-cq5-login-small/" rel="attachment wp-att-1425"><img class="alignleft size-full wp-image-1425" style="float: right;" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/01/iphone-emulator-cq5-login-small.png" alt="" width="232" height="404" /></a> I remember that gleam in the marketer&#8217;s eyes when Investec demoed the first CQ5 mobile microsite at the Day Ignite 2010 Conference in Berlin. Everyone&#8217;s minds were spinning somewhere along the lines of &#8220;I&#8217;ll flip a switch and get a mobile site! Me wants!&#8221;. The appetite and expectations were huge.</p>
<p>But on the other side of this beautiful postcard was sweat, tears and blood of developers working on a beta version of the new platform. <del></del>That was a great challenge and thanks to the support of the Adobe guys (mostly <a href="http://ch.linkedin.com/pub/florian-schaulin/10/a45/a52">Florian</a> and <a href="http://grep.codeconsult.ch/">Bertrand</a>) &#8211; a great deal of fun. But then, a final version was released and while it all got tidied up, I was surprised to find some rough edges &#8211; mostly around the just added mobile module.</p>
<p><span id="more-784"></span></p>
<h2>Problems with mobile detection</h2>
<p>CQ5 uses the <a href="http://wurfl.sourceforge.net/">WURFL</a> database with over 17,000 devices defined. Each request is matched against this database and assigned to a device group and along with it &#8211; an appropriate mobile view of the requested page. The detection and mapping part is where it gets tricky. WURFL provides over 500 capabilities for each device from which five used downstream: screen size, device rotation, images, CSS and JavaScript. Sure, we&#8217;d have liked to extend this input set, but it&#8217;s hardcoded. One way around would be to specify a regular expression on user agent (there&#8217;s support for that), but good luck matching all the touch phones out there in the market with it. Unfortunately, there was no way to expand the built-in detection mechanism and fully leverage WURFL capabilities.</p>
<p><del></del>When we started working on a full-blown mobile site and engaged with a mobile agency, we hit a wall. <del></del>Did you know you need independent designs for devices with different input methods? Big buttons for touch phones, small for joystick based, and the list went on. To add to the fun, there are a lot of touch phones that don&#8217;t support JavaScript properly and that you should consider separate template for tablet devices &#8211; rich-like desktop, but then again touch-based? The mobile agency guys could talk about these differences for hours and we were quickly convinced that we will easily end up with <strong>23</strong> templates, and that we need some smarter device detection.</p>
<p>Adobe was challenged with those requirements, and it didn&#8217;t take long to convince their architects to include our case on the product strategy roadmap. We worked on that together and soon after feature pack #36363 was released.</p>
<h2>Salvation</h2>
<p>There are two important things you must know about the mentioned feature pack. </p>
<p>1 &#8211; it made it into the CQ 5.5 mobile module! </p>
<p>2 &#8211; it allows you to extend mobile detection and fully leverage the WURFL database. </p>
<p>In addition to the original 5 criteria, another filtering mechanism was added:</p>
<ul>
<li>You can register your own filter (as an OSGi component) that will either let a request be assigned to a given mobile group, or deny it.</li>
<li>You can assign many filters to a mobile group and a request will be assigned to it only when all filters pass.</li>
<li>Inside a filter you have access to WURFL-mapped capabilities of the device that made the request.</li>
</ul>
<p>That&#8217;s it in a nutshell. Now, how do you implement it?</p>
<h2>Step 1 &#8211; Implement the filter</h2>
<p>First step is to implement your filter. It&#8217;s done by exposing an OSGi component that implements the <tt>com.day.cq.wcm.mobile.api.device.DeviceGroupFilter</tt> interface. A key here is the <tt>matches</tt> method that provides the filter&#8217;s logic: returning true means a device passes the filter. This method is executed on every request from a mobile device, and a map of WURFL capabilities is passed in a parameter. All you have to do now is to check <a title="WURFL documentation" href="http://wurfl.sourceforge.net/help_doc.php">WURFL documentation</a> and find which WURFL capabilities you really need.</p>
<p>The real life example below implements a simple touch filter that matches only phones and tablets with a touch screen. I used <a title="Felix SCR Annotations" href="http://felix.apache.org/site/scr-annotations.html">Felix SCR Annotations</a> and <a title="maven-scr-plugin on felix.apache.org" href="http://felix.apache.org/site/apache-felix-maven-scr-plugin.html">maven-scr-plugin</a> to generate OSGi metadata for the component.</p>
<pre class="brush: java; title: ; notranslate">
package com.cognifide.simple.filters;

import java.util.Map;

import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Service;

import com.day.cq.wcm.mobile.api.device.DeviceGroup;
import com.day.cq.wcm.mobile.api.device.DeviceGroupFilter;

@Component
@Service
public class TouchFilter implements DeviceGroupFilter {

	@Override
	public String getDescription() {
		return &quot;Includes mobile phones and tablets with touch screens&quot;;
	}

	@Override
	public String getTitle() {
		return &quot;Touch screen devices&quot;;
	}

	@Override
	public boolean matches(DeviceGroup deviceGroup, String s,
			Map capabilities) {
		boolean isTouchScreen = isTouchScreen(capabilities);
		boolean isMobilePhone = isMobilePhone(capabilities);
		boolean isTablet = isTablet(capabilities);

		return isTouchScreen &amp;&amp; (isMobilePhone || isTablet);
	}

	private boolean isTouchScreen(Map capabilities) {
		return &quot;touchscreen&quot;.equals(capabilities.get(&quot;pointing_method&quot;));
	}

	public boolean isMobilePhone(Map capabilities) {
		return &quot;true&quot;.equals(capabilities.get(&quot;can_assign_phone_number&quot;));
	}

	public boolean isTablet(Map capabilities) {
		return &quot;true&quot;.equals(capabilities.get(&quot;is_tablet&quot;));
	}
}
</pre>
<h2>Step 2 &#8211; Assign the filter</h2>
<p>With the touch filter implemented, let&#8217;s use it in the pre-defined touch device group (<tt>/etc/mobile/groups/touch</tt>). Open the page, click the <strong>Edit</strong> button to fire the dialog and go to the <strong>Filters</strong> tab. Your filter should be already available in the drop-down &#8211; choose it instead of the default one and confirm. Since this filter implements all the touch-device logic you need, it&#8217;s safe to get rid of the legacy logic. Yes, you can uncheck all capabilities from the first tab of the dialog.</p>
<p><a href="http://www.cognifide.com/blogs/cq/adobe-cq-5-5-mobile-improvements/attachment/touch/" rel="attachment wp-att-1417"><img class="alignnone size-full wp-image-1417" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/01/touch.png" alt="CQ5 touch device group in WCM" width="541" height="326" /></a></p>
<p><a href="http://www.cognifide.com/blogs/cq/adobe-cq-5-5-mobile-improvements/attachment/touch2/" rel="attachment wp-att-1421"><img class="alignnone size-full wp-image-1421" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/01/touch2.png" alt="CQ5 device group filters dialog" width="528" height="245" /></a></p>
<p>If your filter is not there, double check how your bundle got installed in the OSGi console (<tt>/system/console/bundles</tt>). It should expose your filter as a service, and it should also be visible as a component of the same name (<tt>/system/console/components</tt>). If it&#8217;s not &#8211; check your build / maven-scr-plugin.</p>
<h2>Step 3 &#8211; Test and debug</h2>
<p>With all that set, time to test if it works. In order to do that you need a publish instance with your touch group there (activate it from author) and have your code deployed. Get a touch phone, or a browser with custom user agent (e.g. Firefox with <a title="User Agent Switcher addon on mozilla.org" href="https://addons.mozilla.org/en-US/firefox/addon/user-agent-switcher/">User Agent Switcher</a>), or simply use cURL and pass touch phone&#8217;s user agent as a parameter. Anything that makes a mobile request to your site works. Since we changed one of the default device groups, we can test it on the Geometrixx Mobile site: <tt>/content/geometrixx_mobile/en.html</tt>. If the filter works correctly, you should get redirected to <tt>en.touch.html</tt> for touch-device requests (e.g. iPhone, iPad), and to other group for non-touch devices (e.g. BlackBerry 9650).</p>
<p>If your device is not matching the desired group, don&#8217;t despair. The mobile module has a very verbose debug log. I recommend you <a title="CQ5 documentation: working with log files" href="http://dev.day.com/docs/en/cq/current/howto/logsaudits.html#Create%20a%20Custom%20Log%20File">create a separate log file</a> for that: just use com.day.cq.wcm.mobile for your filter. Hint: when debugging, we recommend using cURL, so that other requests (e.g. for .css) don&#8217;t pollute your log.</p>
<h2>Conclusion</h2>
<p>With CQ 5.5, the mobile module gets a great boost. From a toy to play with in microsites, it has transformed into an extensible mobile solution. It may not be ideal &#8211; integrating with the legacy solution (capabilities ticks) seems awkward, and filters cannot be joined in advanced logical expressions (e.g. touch and <strong>not</strong> tablet; tablet <strong>or</strong> desktop). But even with all that, we can finally satisfy the marketers&#8217; hunger for mobile sites with minimal effort on the development side. Since it&#8217;s no longer sweat and blood, I wouldn&#8217;t be surprised to find more and more CQ5 sites going mobile very soon.</p>
<p>Time to feed the marketeers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/cq/adobe-cq-5-5-mobile-improvements/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mobile in 2012 &#8211; Ignore at your own risk!</title>
		<link>http://www.cognifide.com/blogs/mobile/mobile-in-2012-ignore-at-your-own-risk/</link>
		<comments>http://www.cognifide.com/blogs/mobile/mobile-in-2012-ignore-at-your-own-risk/#comments</comments>
		<pubDate>Tue, 13 Mar 2012 14:30:59 +0000</pubDate>
		<dc:creator>Jabir Salam</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[bango]]></category>
		<category><![CDATA[flurry]]></category>
		<category><![CDATA[google analytics]]></category>
		<category><![CDATA[mobile analytics]]></category>
		<category><![CDATA[mobile marketing strategy]]></category>
		<category><![CDATA[sitecatalyst]]></category>
		<category><![CDATA[top mobile internet trends]]></category>
		<category><![CDATA[uk mobile statistics report 2012]]></category>
		<category><![CDATA[webtrends]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=1469</guid>
		<description><![CDATA[If there is one thing the board always wants to know from their CMO after the CEO heard Mary Meeker (KPCB) talk about Top Mobile Internet Trends at the Google Think Mobile event, early last year, is generally how the group&#8217;s mobile marketing strategy is measuring up and whether you&#8217;ve cracked the SoLoMo challenge yet. Now, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter  wp-image-1485" title="what's next in your mobile marketing strategy?" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/03/Screen-shot-2012-03-13-at-13.08.12.png" alt="what's next in your mobile marketing strategy" width="332" height="198" /></p>
<p>If there is one thing the board always wants to know from their CMO after the CEO heard Mary Meeker (KPCB) talk about Top Mobile Internet Trends at the Google Think Mobile event, early last year, is generally how the group&#8217;s mobile marketing strategy is measuring up and whether you&#8217;ve cracked the SoLoMo challenge yet.</p>
<p>Now, you engage users over Facebook, Twitter and Foursquare, have built your mobile version of your website and are about to launch your mobile app but the question doesn&#8217;t change. It&#8217;s always &#8211; &#8221; what next? &#8221;</p>
<p><span id="more-1469"></span></p>
<p>So&#8230; seriously, what&#8217;s next? Okay before you answer that, let&#8217;s take a step back and for those who are not so convinced about the mobile channel, answer  &#8211; </p>
<h2><strong>Why is mobile so important?</strong></h2>
<p>Well, if <a title="Mary Meeker slides on Top 10 Mobile Trends" href="http://www.slideshare.net/ceobroadband/mary-meeker-mobile-trends-11-feb-2011-6884244" target="_blank">Mary Meeker&#8217;s slides on the Top 10 Mobile Trends</a> or the latest <a title="Econsultancy UK Mobile Statistics report" href="http://econsultancy.com/uk/reports/uk-mobile-statistics" target="_blank">Econsultancy UK Mobile Statistics report</a> haven&#8217;t convinced you already, here&#8217;s a simple fact -</p>
<h4><em>                     Your mobile is always within arm&#8217;s length unless you are in the shower.</em></h4>
<p></p>
<p>In fact, it&#8217;s what some of us actually reach for, just as we wake up to check the latest news over the BBC (Facebook newsfeed for some, Twitter for others but news, all the same). You use Evernote to make your shopping list besides your work notes, listen to Spotify while playing Angry Birds on the way to work, use Skype to talk to your friends/ colleagues overseas,  check in with Foursquare at that new restaurant for dinner, frame that whacky shot using Hipstamatic before tweeting and finally, set the alarm on your mobile for that all important meeting the next day.</p>
<p><img class="aligncenter size-full wp-image-1488" title="popular mobile apps" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/03/Screen-shot-2012-03-13-at-13.26.53.png" alt="popular mobile apps" width="487" height="119" /><br />
<br />
Hmmm, I&#8217;d like to think that you now agree that the mobile channel offers unbeatable reach to engage users as Mary has illustrated while comparing it to the other advertising media -</p>
<p><img class="aligncenter size-full wp-image-1475" title="Relative efficacy of mobile vs other advertising channels" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/03/Screen-shot-2012-03-13-at-06.28.35.png" alt="Relative efficacy of mobile vs other advertising channels" width="487" height="285" /></p>
<h6><em>Source: Mary Meeker presentation on Top 10 Mobile Trends at Think Mobile &#8211; Google, USA</em></h6>
<p> <br />
Now, that we agree on the reach and efficacy of the mobile channel, I&#8217;m guessing you would like to know</p>
<h2><strong>What are the key challenges in optimising for mobile? </strong></h2>
<p></p>
<h3><strong>1 &#8211; Native website vs mobile app</strong></h3>
<p>This is always the first question when the digital marketing team is tasked with optimising the company website for mobile but I&#8217;d advise that you don&#8217;t fall prey to the argument. If you are a brand that is known to engage well, then your patrons expect a mobile app but if your mobile site doesn&#8217;t provide a consistent experience across platforms, the patrons feel you let them down! And let down by the brand not by the technology as one of our clients found out. You tell me &#8211; if you felt let down by a brand, would you still ask your friends and family to check out that brand, if your friends were likely to get a poor experience?</p>
<p>Surely, the savvy marketer in you doesn&#8217;t need any convincing regarding the potential ROI from a referral to friends or family, right? Just in case, there is a small doubt, remember F-Commerce is around the corner and if it&#8217;s half as successful as Facebook Photos, it&#8217;s a few billion that is likely to be up for grabs!</p>
<h3><strong>2 &#8211; It&#8217;s Mobile! </strong></h3>
<p>There is the initial rush to deliver mobile but then, at times with the onus to just deliver, there arises the tendency to forget users expect a streamlined mobile experience and not just the ability to access the site. It&#8217;s fatal to consider the mobile user to be the same as a desktop user, remember they have different needs; they access your site on their mobile for specific needs, generally triggered by a location based urge to either visit your store or understand price difference from an online enterprise such as Amazon or Zappos.</p>
<h3><strong>3 &#8211; Mobile Analytics</strong></h3>
<p>It&#8217;s taken a while for some to realise the merits of a data driven culture and fortunately, at least now, no one debates its value over being driven by the HiPPO or a committee but yet, we are often found answering how mobile analytics differs over traditional web analytics. Here are a couple of factors as to how mobile analytics differs:</p>
<h4><strong>- Phone type: Touch/ Feature/ Smart</strong></h4>
<p>Unless you know what type of phone the user is on, its difficult to provide them with a decent experience when browsing through your site. Sure, its easy to mix up the touch and smartphone but for clarity, the iPhone is a Touch phone and the Blackberry models without a touch interface are the smartphones. Feature phones may not be the choice of the upper class but remember the feature phone is what the masses tend to be on so you cannot afford to ignore this high <em>volume</em> segment.</p>
<h4><strong>- Screen sizes</strong></h4>
<p>Okay, you know what type of phone the user has but unless you know how much real estate you have when you have the user&#8217;s full attention, there is little you can do. So, in a nutshell, you need to know both the type of phone and what the device actually is in order to present them with the right experience.</p>
<h4><strong>- Javascript support</strong></h4>
<p>Phones differ in their ability to handle Javascript versions so you may not be able to get away with too many fancy AJAX calls if users demand an optimal mobile user experience. Check out how many retailers do not have a mobile site or app today and you will be surprised to see that there are some who aren&#8217;t on the mobile bandwagon yet.</p>
<h4><strong>- Online/ Offline data collection support</strong></h4>
<p>We&#8217;re all data junkies now and realise that there are times the user may be without internet connectivity but we still need to understand app usage so the smart developer always ensures that usage history is sent back when the user gets online next so that the marketing team is able to optimise accordingly. I&#8217;m proud to say that we&#8217;re doing some cutting edge stuff with some of our clients in the Pharmaceuticals and Financial services sector on this front.</p>
<h4><strong>- Monetisation challenges</strong></h4>
<p>eBay CEO, John Donahoe shared that GMV (gross merchandise value) has triped YoY and was expected to hit $4 billion last year. Clearly, its not that people shy away from making high value transactions over their mobile but generally, marketers are wary when it comes to tracking solutions as sales need to be attributed to the right channels. Of course, by now there are some pretty nifty tools out there in the market and call tracking is just another option to measure revenue from the mobile stream.</p>
<p>It&#8217;s imperative that you evaluate how your choice of an analytics platform caters to all of the above and ensure that the integration points between various systems are clarified before you sign on the dotted line as you may otherwise, be looking at some pretty long implementation timeframes which will imply the target ROI be reduced to a dream.</p>
<h2>Who are the mobile analytics vendors to consider?</h2>
<p><img class="aligncenter size-full wp-image-1494" title="Mobile analytics vendors" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/03/Screen-shot-2012-03-13-at-14.27.54.png" alt="mobile analytics vendors" width="404" height="124" /></p>
<p>I&#8217;d like to leave you with something to think about if you&#8217;re in the market evaluating mobile analytics vendors. I&#8217;d suggest you check out Bango, Adobe SiteCatalyst, Flurry and Webtrends to see how they stack up against your needs because</p>
<p>1 &#8211; Bango and Flurry are right on the money as specialists in the mobile analytics space</p>
<p>2 &#8211; Adobe SiteCatalyst and Webtrends Analytics 10 offer detailed mobile analytics reports and are what I&#8217;d consider as comprehensive analytics platforms across web and mobile channels.</p>
<p>If you want to check out the range of options that Adobe SiteCatalyst provides for mobile reports, have a look at my previous post <a title="Google acquires Motorola for ZMOT insights" href="http://www.cognifide.com/blogs/customer-insights/did-google-pay-12-5bn-for-motorola-or-more-zmot-insights/" target="_blank">Did Google pay $12.5 billion for Motorola or more ZMOT insights </a>where I&#8217;ve provided a screenshot of all the reporting options you can drill down on. Oh, the fact that you could plug in Adobe Social Analytics on top of the SiteCatalyst platform should also work as an added bonus to consider SiteCatalyst as you are otherwise looking at an additional social analytics monitoring service such as Radian6 for the social space.</p>
<p>Whoops, I almost forgot why Google Analytics was discarded from the list even though as I mentioned in my post on ZMOT, they are ramping up quite well (Google Analytics Premium hit the market a few weeks after the post so hey, I guess my foresight isn&#8217;t too bad). It&#8217;s discarded as it&#8217;s unfortunately quite limited with respect to the mobile reports and leaves you wanting more.</p>
<h6>Main image courtesy: Axiom Mobile Tech</h6>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/mobile/mobile-in-2012-ignore-at-your-own-risk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Integrating Adobe CQ with SiteCatalyst</title>
		<link>http://www.cognifide.com/blogs/cq/integrating-adobe-cq-with-sitecatalyst/</link>
		<comments>http://www.cognifide.com/blogs/cq/integrating-adobe-cq-with-sitecatalyst/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 15:16:57 +0000</pubDate>
		<dc:creator>Jabir Salam</dc:creator>
				<category><![CDATA[Adobe CQ]]></category>
		<category><![CDATA[Customer Insights]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[CQ5]]></category>
		<category><![CDATA[customer insight]]></category>
		<category><![CDATA[sitecatalyst]]></category>
		<category><![CDATA[wem]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=883</guid>
		<description><![CDATA[It&#8217;s old news that with the Adobe Digital Enterprise Platform(ADEP) CQ 5.4, you can easily connect from CQ to Adobe SiteCatalyst report suites by simply entering your SiteCatalyst login credentials and all your basic reports would be available in a jiffy. Plus, you could edit additional parameters using the Page Data tab, map parameters of interest using [...]]]></description>
			<content:encoded><![CDATA[<div><strong><br />
</strong></div>
<p>It&#8217;s old news that with the Adobe Digital Enterprise Platform(ADEP) CQ 5.4, you can easily <a href="http://dev.day.com/docs/en/cq/current/administering/sitecatalyst.html" target="_blank">connect from CQ to Adobe SiteCatalyst</a> report suites by simply entering your SiteCatalyst login credentials and all your basic reports would be available in a jiffy. Plus, you could edit additional parameters using the Page Data tab, map parameters of interest using the Clickstream cloud and even, set up Event Tracking. Sweet!</p>
<p>So, what more does ADEP WEM CQ 5.5 offer you with respect to web analytics?</p>
<p><span id="more-883"></span><br />
Well, with Adobe CQ 5.4 itself, you already have some pre-configured reports about page activity, components, workflows, content generation, consumption, etc and as is the norm with CRX, the ability to set up additional reports with parameters of interest; be it about authoring, versioning, etc. Now, the most interesting enhancement in terms of reports, in my humble opinion, (if you are a SiteCatalyst veteran and are on the verge of becoming an ADEP customer) is that you now get a report that details all the SiteCatalyst variables which are mapped on to the CQ components throughout the site.</p>
<div><a href="http://www.cognifide.com/blogs/wp-content/uploads/2012/01/Screen-shot-2012-01-10-at-14.43.58.png"><img class="aligncenter size-full wp-image-884" title="SiteCatalyst View of Mappings between CQ and SiteCatalyst" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/01/Screen-shot-2012-01-10-at-14.43.58.png" alt="SiteCatalyst View of Mappings between CQ and SiteCatalyst" width="672" height="369" /></a></div>
<p><em><b>If you&#8217;d like to take a closer look at the SiteCatalyst view, please click on the image for a high resolution image.</b></em></p>
<p></p>
<p>It gets even more exciting as you can now drag and drop pre-configured CQ components (which already have their SiteCatalyst variables mapped) on to new pages that are created. This has all been cunningly designed with an inheritance mechanism (note: the button right below the view selector entitled Configure Inheritance lets you either enable or disable Inheritance ) so that you can have a shared configuration for a group of sites and change only the parts you need to change for an individual site. Yes, this is certainly a god send that I am sure will help quite a few analysts and marketers from having to spend the time (that they really didn&#8217;t have) on figuring out where on the content management system, certain evars/ sprops are configured to.<br />
<br />
Oh, for the CQ veteran on the verge of integrating further into the Adobe Digital Marketing community, you can switch to the CQ view as well that provides you with the ability to drag and drop the required SiteCatalyst parameters on to the CQ components defined or just being defined.
</p>
<p><a href="http://www.cognifide.com/blogs/wp-content/uploads/2012/01/Screen-shot-2012-01-10-at-14.47.232.png"><img class="aligncenter size-large wp-image-889" title="CQ view of Mappings between CQ and SiteCatalyst" src="http://www.cognifide.com/blogs/wp-content/uploads/2012/01/Screen-shot-2012-01-10-at-14.47.232-1024x554.png" alt="CQ view of Mappings between CQ and SiteCatalyst" width="614" height="332" /></a></p>
<p><em><b>If you&#8217;d like to take a closer look at the CQ view, please click on the image for a high resolution image.</em></b><br />
<br />
If you enjoyed this post, join me in thanking Cognifide&#8217;s Technical Architect, David Friar, for his support with this post without which, it would not have been possible.</p>
<p>Of course, if you&#8217;d like to know more about the Adobe WEM/ CQ/ ADEP platform, don&#8217;t hesitate to get in touch or comment on this post with your questions!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/cq/integrating-adobe-cq-with-sitecatalyst/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adobe CQ 5.5 &#8211; Platform Architecture Refurbish</title>
		<link>http://www.cognifide.com/blogs/cq/cq-5-5-platform-architecture-refurbish/</link>
		<comments>http://www.cognifide.com/blogs/cq/cq-5-5-platform-architecture-refurbish/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 14:25:21 +0000</pubDate>
		<dc:creator>Jan Kuźniak</dc:creator>
				<category><![CDATA[Adobe CQ]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[CQ5]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=747</guid>
		<description><![CDATA[This year I got an early Christmas gift: a beta version of the upcoming Day CQ 5.5 &#8211; the newest incarnation of the Adobe Digital Enterprise Platform. The previous version was released soon after Adobe acquired the product and had but subtle touches made to it. This one seems more like the first stage in [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cognifide.com/blogs/cq/cq-5-5-platform-architecture-refurbish/"><img class="alignnone size-full wp-image-760" src="http://www.cognifide.com/blogs/wp-content/uploads/2011/12/logo-5.5-medium.png" alt="CQ 5.5 logo" width="273" height="132" /></a><br />
This year I got an early Christmas gift: a beta version of the upcoming Day CQ 5.5 &#8211; the newest incarnation of the Adobe Digital Enterprise Platform. The previous version was released soon after Adobe acquired the product and had but subtle touches made to it. This one seems more like the first stage in a major review of the whole architecture. Let&#8217;s see what changed and how it affects migration and future work on the platform.</p>
<h2>Everything is running in OSGi</h2>
<p>This has been rumoured about for quite a while and came more as a relief than a surprise. CQ 5.5 is finally a 100% <a href="http://www.osgi.org/About/Technology">OSGi</a> application. Now, what does that really mean?</p>
<p>For as long as I remember (and that dates back to the days of Communiqué 4), CQ has been a set of two webapps running in a standalone servlet engine (by default: CQSE). The first application was CRX, and the second WCM &#8211; in CQ5 called &#8220;Launchpad&#8221;. Launchpad is an OSGi application with <a href="http://sling.apache.org/">Sling</a>, WCM, DAM and the rest of the family. In the two-webapp setup, Sling is accessing CRX using <a href="http://pl.wikipedia.org/wiki/Java_Naming_and_Directory_Interface">JNDI</a> via an in-memory service provider. Well, it works, but feels awkward &#8211; we&#8217;ve got OSGi and yet, we use it only for a part of the application. Of course, one could argue that it is a sound failover – even when your OSGi goes wahoomi, you still have access to CRX over HTTP (so e.g. data backup is still an option), but I&#8217;ve always asked myself &#8211; is it really worth it?<span id="more-747"></span></p>
<p>It seems that it wasn&#8217;t &#8211; in CQ 5.5 everything lives inside OSGi. CQSE is an OSGi bundle (provides <tt>org.osgi.service.http</tt> and <tt>javax.servlet</tt>) and so is CRX that provides the repository as an OSGi service. RMI / JNDI are still available, but don&#8217;t seem to be used in the stack (client repository configuration is gone).</p>
<p>What does it mean migration-wise? Not much, really. All my applications are already working in OSGi, accessing CRX via Sling and not depending on JNDI, and even if yours did depend on JNDI &#8211; it&#8217;s still there as an option. The only scenario where something would have to be rewritten is when one had another webapp on CQSE &#8211; but I can&#8217;t imagine why would anyone want to do that. I&#8217;m not sure, though, what happens with deployments on different servlet engines (Tomcat, Weblogic, etc.). Maybe CQ5.5 will be available as a webapp too &#8211; I think we&#8217;ll have to wait for the official release notes and supported platforms to answer that.</p>
<h2>Consoles clean-up</h2>
<p>Another change that it brought is clean-up in consoles. <tt>/admin</tt> is now gone &#8211; CQSE is configured in Felix Configuration Manager. If you are looking for <tt>/crx</tt>, it is now <tt>/crx/explorer</tt>, and some CRX tools are exposed as separate OSGi servlets or are integrated into Felix Web Console. A very good side-effect is that now we can change instance&#8217;s admin password in a single place &#8211; CRX.</p>
<p>Package manager also got unified &#8211; there&#8217;s only one, and it&#8217;s the CRX one: <tt>/crx/packmgr</tt> (the WCM one &#8211; <tt>/etc/packages.list.html</tt> &#8211; is no more). Functionally nothing changed, but I&#8217;ll have to update one of my Maven plugins that was relying on the old console to deploy CQ packages.</p>
<h2>Next steps</h2>
<p>That&#8217;s more or less all I&#8217;ve figured out by now. Unfortunately, I didn&#8217;t get the updated documentation yet, so some areas leave me with more questions than answers. In the next few days I&#8217;ll be hunting API changes and testing feature compatibility to estimate the effort of upgrading our customers when this version is out. I&#8217;ll post my findings here as I go. Just bear in mind that it&#8217;s still beta, and everything is subject to change. Some features may not even make it into the final release. Having said that &#8211; I can&#8217;t imagine big changes like putting OSGi on the bottom of the stack being reverted. After all, it&#8217;s too good to throw it away.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/cq/cq-5-5-platform-architecture-refurbish/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Shared plugin configuration for RTE in components</title>
		<link>http://www.cognifide.com/blogs/cq/shared-plugin-configuration-for-rte-in-components/</link>
		<comments>http://www.cognifide.com/blogs/cq/shared-plugin-configuration-for-rte-in-components/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 16:51:16 +0000</pubDate>
		<dc:creator>Łukasz Mądrzak-Wecke</dc:creator>
				<category><![CDATA[Adobe CQ]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[CQ5]]></category>
		<category><![CDATA[rich Text]]></category>
		<category><![CDATA[Tips&Tricks]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=456</guid>
		<description><![CDATA[The rich text editor (RTE) is one of the most flexible out-of-the-box component widgets Adobe WEM/CQ delivers. It&#8217;s powerful, customisable, looks good and is easy to use. One issue CQ developers might have with it is its configuration. The amount of options available makes it rather complex. Although the widget is quite easy to integrate, [...]]]></description>
			<content:encoded><![CDATA[<p>The rich text editor (RTE) is one of the most flexible out-of-the-box component widgets Adobe WEM/CQ delivers. It&#8217;s powerful, customisable, looks good and is easy to use.</p>
<p>One issue CQ developers might have with it is its configuration. The amount of options available makes it rather complex. Although the widget is quite easy to integrate, if the project has more than a few components using RTE in dialogs and the client requests a global change in RTE plugin configuration, going through all the dialog files can be quite painful, not too mention it&#8217;s easy to miss a file.</p>
<p>There is a simple solution to that &#8211; to create a dedicated plugin configuration node and include it in widgets that want to share plugin configuration.</p>
<p>Let&#8217;s assume you want to have a common RTE plugins configuration, i.e. all descriptions share the same plugins.<br />
First create a node in your application code at <strong>/apps/myapp/components/text/description</strong> with following properties:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;jcr:root
    xmlns:cq=&quot;http://www.day.com/jcr/cq/1.0&quot;
    xmlns:jcr=&quot;http://www.jcp.org/jcr/1.0&quot;
    cq:isContainer=&quot;{Boolean}false&quot;
    jcr:primaryType=&quot;cq:Component&quot;
    componentGroup=&quot;.hidden&quot;/&gt;
</pre>
<p><span id="more-456"></span><br />
In the node itself create a <strong>rtePlugins </strong>childnode with the actual plugin configurations, i.e.:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;jcr:root xmlns:cq=&quot;http://www.day.com/jcr/cq/1.0&quot;
    xmlns:jcr=&quot;http://www.jcp.org/jcr/1.0&quot;
    jcr:primaryType=&quot;nt:unstructured&quot;&gt;
    &lt;paraformat jcr:primaryType=&quot;nt:unstructured&quot; features=&quot;*&quot;&gt;
    &lt;formats jcr:primaryType=&quot;cq:WidgetCollection&quot;&gt;
        &lt;p jcr:primaryType=&quot;nt:unstructured&quot; description=&quot;Paragraph&quot; tag=&quot;p&quot; /&gt;
        &lt;h2 jcr:primaryType=&quot;nt:unstructured&quot; description=&quot;Heading 2&quot; tag=&quot;h2&quot; /&gt;
        &lt;h3 jcr:primaryType=&quot;nt:unstructured&quot; description=&quot;Heading 3&quot; tag=&quot;h3&quot; /&gt;
    &lt;/formats&gt;
    &lt;/paraformat&gt;
    &lt;lists jcr:primaryType=&quot;nt:unstructured&quot;
        features=&quot;[ordered,unordered,indent,outdent]&quot; /&gt;
    &lt;undo jcr:primaryType=&quot;nt:unstructured&quot; features=&quot;*&quot; /&gt;
    &lt;subsuperscript jcr:primaryType=&quot;nt:unstructured&quot; features=&quot;*&quot; /&gt;
    &lt;image jcr:primaryType=&quot;nt:unstructured&quot; features=&quot;[]&quot; /&gt;
    &lt;misctools jcr:primaryType=&quot;nt:unstructured&quot; features=&quot;[]&quot; /&gt;
    &lt;format jcr:primaryType=&quot;nt:unstructured&quot; features=&quot;[bold,italic,underline]&quot; /&gt;
    &lt;justify jcr:primaryType=&quot;nt:unstructured&quot; features=&quot;[*]&quot; /&gt;
    &lt;links jcr:primaryType=&quot;nt:unstructured&quot;
        features=&quot;[anchor,modifylink,unlink]&quot; /&gt;
    &lt;edit jcr:primaryType=&quot;nt:unstructured&quot;
        defaultPasteMode=&quot;plaintext&quot;
        features=&quot;[cut,copy,paste-plaintext,paste-wordhtml]&quot; /&gt;
&lt;/jcr:root&gt;
</pre>
<p>Now you only need to include a link to that node in your RTE dialogs. Assuming you created your node at <strong>/apps/myapp/components/text/descriptionrtePlugins</strong> your RTE plugins entry in the dialog becomes</p>
<pre class="brush: xml; highlight: [3]; title: ; notranslate">
&lt;rtePlugins
    jcr:primaryType=&quot;cq:Widget&quot;
    path=&quot;/apps/myapp/components/text/rtePlugins.infinity.json&quot;
    xtype=&quot;cqinclude&quot; /&gt;
</pre>
<p>You can use this approach for other config nodes (i.e. <strong>htmlRules</strong>) or other components as well. This not only makes your code cleaner, but also easier to maintain and manage.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/cq/shared-plugin-configuration-for-rte-in-components/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Did Google pay $12.5bn for Motorola or more ZMOT insights?</title>
		<link>http://www.cognifide.com/blogs/customer-insights/did-google-pay-12-5bn-for-motorola-or-more-zmot-insights/</link>
		<comments>http://www.cognifide.com/blogs/customer-insights/did-google-pay-12-5bn-for-motorola-or-more-zmot-insights/#comments</comments>
		<pubDate>Mon, 05 Sep 2011 08:45:27 +0000</pubDate>
		<dc:creator>Jabir Salam</dc:creator>
				<category><![CDATA[Customer Insights]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[ga]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[omniture]]></category>
		<category><![CDATA[sitecatalyst]]></category>
		<category><![CDATA[zmot]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=290</guid>
		<description><![CDATA[   Even though news broke out two weeks ago, the press is still hot about Google’s biggest acquisition till date, i.e. Motorola Mobility. Speculation is rife that the search giant isn’t about to pay $12.5 billion for just the MMI patent vault but stands to benefit from considerable tax savings that will turn a “good [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="alignnone" src="http://www.cognifide.com/%7E/media/Images/Blog/JabirSalam/motorola.jpg" alt="Motorola" width="93" height="77" />  <img class="alignnone" src="http://www.cognifide.com/%7E/media/Images/Blog/JabirSalam/ZMOT.jpg" alt="ZMOT" width="153" height="61" /></p>
<p>Even though news broke out two weeks ago, the press is still hot about Google’s biggest acquisition till date, i.e. Motorola Mobility. Speculation is rife that the search giant isn’t about to pay $12.5 billion for just the MMI patent vault but stands to benefit from considerable tax savings that will turn a “good deal into a great deal”. Yes, I know Larry Page has divulged that the acquisition will strengthen the Android platform and just like you, I believe it certainly is a protective measure but not just of a platform as it obviously, safeguards a lot more future revenue through considerable ZMOT insights for Google Inc!<br />
<span id="more-290"></span><br />
<strong>What is ZMOT?</strong></p>
<p>ZMOT stands for the <a href="http://www.zeromomentoftruth.com/">Zero Moment of Truth</a>. You can thank Jim Lecinski, Google&#8217;s Managing Director of US &#8211; Sales &amp; Service for the acronym. Coincidentally, ZMOT is inspired by the discovery of FMOT from his time at Procter &amp; Gamble. Sorry, no prizes for guessing that FMOT stands for the First Moment of Truth. We all know that P&amp;G amongst many other reputed FMCG brands values the insights derived from analysing the first few instances of customer behaviour when a customer picks up one of their products from a store’s shelves. The benefactors confess they wouldn’t have their shiny sports cars if they couldn’t translate their analysis of consumer behaviour into actionable insights for the retail giants to cash in on by changing their labelling, descriptions, colours, messaging or positioning on the store’s shelves.</p>
<p>FMOT surfaced on the front page of the Wall Street Journal in 2005 but now it is definitely time for Lecinski’s ZMOT. Lecinski defines the Zero Moment of Truth as</p>
<p><em>“that moment when you grab your laptop, mobile phone or some other wired device and start learning about a product or service (or potential boyfriend) you’re thinking about trying or buying.”</em></p>
<p>The key here for me is “<strong>thinking about</strong>” and obviously, unless we all become mind readers, the only way an online marketer would know of prospective customers is by analysing the engagement with a digital property. Yes, in my books, you get brownie points if you are figuring out innovative ways to engage your audience while delivering a superior customer experience online. More points, if you are gamifying engagements!</p>
<p>Given that we understand the reasons for the “ Think Mobile First “ philosophy to be so well ingrained into the top marketing brains at Google, Adobe and other global giants, does it surprise you that Google Analytics doesn’t really offer much in terms of mobile analytics? No, I am not willing to make do with a basic devices report, as it really limits your understanding of the mobile user. Having said that, I do feel that only Google could provide so much for free in the amazing GA. However, at this point in time, Omniture’s SiteCatalyst takes the cake in providing detailed insights into how and by what devices, your mobile content is consumed.</p>
<p style="text-align: center;"><a href="http://www.cognifide.com/blogs/wp-content/uploads/2011/09/Mobile-Insights-omniture-sitecatalyst.jpg"><img class="aligncenter" src="http://www.cognifide.com/%7E/media/Images/Blog/JabirSalam/Omniture%20SiteCatalyst%20Mobile%20Insights.png" alt="Omniture SiteCatalyst Mobile Insights" width="342" height="451" /><br />
</a></p>
<p><em>Illustration: The options within Omniture SiteCatalyst for you to analyse mobile usage</em></p>
<p>I reckon Google will definitely invest more in developing a more comprehensive mobile analytics solution after this acquisition and will pave the way for a lot more publishers/ developers to benefit from comprehensive analysis of their So-Lo-Mo applications. I&#8217;m confident it will only be a matter of time before you get a lot more mobile insights from GA as Google Analytics v5 certainly is ramping up at an amazing pace and I&#8217;m sure you&#8217;re pleased that you can now <a href="http://analytics.blogspot.com/2011/08/introducing-multi-channel-funnels.html">analyse multi-channel funnels through Google Analytics</a>. Hmm, I feel that in due course, it may mean the Android marketplace will actually take on Apple’s Appstore (can&#8217;t say if the Sony fanboys will go really crazy about the new Sony Android powered tablet devices and build the case for Android powered gaming devices). Of course, if you ask me, how much I think Google will share with us in the near future, your guess is as good as mine: but given what they paid for MMI (even if it&#8217;s actually just $3.8 bn with all the Double Irish and Dutch sandwich benefits as the tax experts say), I can safely it is much more than a million dollar question!</p>
<p>Next, I’ll focus on the social media aspect of the ZMOT and how it seems to be catching up with the Financial Services world but till then, I&#8217;ll leave you to ponder over Dina Howell&#8217;s opinion on the ZMOT. For those who do not follow Saatchi &amp; Saatchi X, Dina Howell is the Chief Executive Officer at Saatchi &amp; Saatchi X and coincidentally, she was the first ever Director of FMOT at P&amp;G). Here is an excerpt from her Foreword on the ZMOT -</p>
<p>“ The Zero Moment of Truth influences which brands make the shopping list, where shoppers choose to buy and with whom they share the results. It’s up to us to join the conversation at this new moment where decisions are being made, and to provide the information that shoppers naturally crave, in all the ways that they crave it”.</p>
<p>If you are pursuing an optimal ROI, can you afford to ignore the ZMOT?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/customer-insights/did-google-pay-12-5bn-for-motorola-or-more-zmot-insights/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Maven: CRX Plugin automating deployments of CRX/CQ based applications</title>
		<link>http://www.cognifide.com/blogs/cq/maven-plugin-automating-deployments-of-crx-cq-applications/</link>
		<comments>http://www.cognifide.com/blogs/cq/maven-plugin-automating-deployments-of-crx-cq-applications/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 16:08:14 +0000</pubDate>
		<dc:creator>Jakub Przybytek</dc:creator>
				<category><![CDATA[Adobe CQ]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[CQ5]]></category>
		<category><![CDATA[crx]]></category>
		<category><![CDATA[day]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.cognifide.com/blogs/?p=244</guid>
		<description><![CDATA[For a couple of years now, here in Cognifide, we have been successfully using CQ5 from Adobe (formerly from Day Software) in most of our projects. We&#8217;ve benefited from its rich functionality, stability and general market oriented approach. During those years, we have also developed our own frameworks, practices and production cycles that suit us [...]]]></description>
			<content:encoded><![CDATA[<p>For a couple of years now, here in Cognifide, we have been successfully using <a href="http://www.day.com/" rel="nofollow">CQ5<sup><img src="https://confluence.cognifide.com/confluence/images/icons/linkext7.gif" alt="" width="7" height="7" align="absmiddle" border="0" /></sup></a> from Adobe (formerly from Day Software) in most of our projects. We&#8217;ve benefited from its rich functionality, stability and general market oriented approach. During those years, we have also developed our own frameworks, practices and production cycles that suit us best, but lacked an automatic deployment mechanism that would speed up our work. The main deployment process, which is a web form with a file upload mechanism, is perfect for live and integration environments, but it wasn&#8217;t a surprise that we needed something easier that we could plug in to existing procedures and use every few minutes without&#8230; forcing our fingers to do too much. As a result, we have a solution that we are quite proud of and have been using it for some time now. But before we go into the details, let us examine alternative approaches that we have tested:</p>
<p>1. <strong>FileVault</strong> &#8211; according to Adobe (who provide it with every CQ installation package), it :</p>
<blockquote><p>&#8230; provides your JCR repository with file system mapping and version control. It can be used to manage CQ development projects with full support for storing and versioning project code, content, configurations and so on, in standard version control systems (for example, Subversion).</p></blockquote>
<p>We had been using it for a while before we stopped, mainly because:</p>
<ul>
<li>It&#8217;s not as fast as we would like it to be. It is not only a matter of running time (which could be improved), but also the fact that it is purely a command line tool and as such requires additional effort to use it. We developed some batch scripts to automate some steps, but still&#8230; it wasn&#8217;t enough.</li>
<p><span id="more-244"></span></p>
<li>It was duplicating functionality of our other version control mechanism, which was SVN. Resolving conflicts in FileVault and then, in SVN was a nightmare&#8230;</li>
</ul>
<p>But we haven&#8217;t removed it completely from our tool box: FileVault is still providing us with some value while checking out or updating content from CRX repository to a local disk so we can prepare the final packages for an application.</p>
<p>2. <a href="http://dev.day.com/content/docs/en/crx/current/how_to/package_manager.html#Package%20Manager%20HTTP%20Service%20API" rel="nofollow">Package Manager HTTP Service API<sup><img src="https://confluence.cognifide.com/confluence/images/icons/linkext7.gif" alt="" width="7" height="7" align="absmiddle" border="0" /></sup></a> &#8211; which provides a few URLs to perform such actions as: upload, install, uninstall, create, delete package; and directly on CRX repository. It seemed to be exactly what we needed, it is very well documented, but:</p>
<ul>
<li>It is not easy to integrate it with Maven, it requires other tools like <tt>curl</tt> and again&#8230; batch scripting is inevitable.</li>
<li>It is not easy to understand the output of this tool. We noticed that <tt>json</tt> based requests often return successful responses even when the install command fails. It makes bug finding quite difficult. Fortunately, there are <tt>html</tt> based requests that are supported by this Api, but those simply produce too much output which cannot be understand without automated parsing tools.</li>
</ul>
<p>The API may not be perfect, but is good enough to propose some other solution based on it. And it is exactly what we did. Let me present to you the <strong>Maven-CRX-Plugin</strong> that my colleagues developed:</p>
<p><strong>Maven-CRX-Plugin</strong> is a plugin for Maven 2.x or higher builds that automates the very last step of the development process by providing you with the ability to upload and install CRX packages into the repository. It supports continuous integration processes in development, staging or integration environments.</p>
<p>The plugin simply integrates some of the functionality provided by CRX API with Maven builds with additional developer-friendly parsing mechanisms that report errors details.</p>
<p>Here&#8217;s how it can be configured:</p>
<div>
<div>
<pre>(...)
<span style="color: #3366ff;">&lt;plugin&gt;</span>
<span style="color: #3366ff;"> &lt;groupId&gt;</span>com.cognifide.maven.plugins<span style="color: #3366ff;">&lt;/groupId&gt;</span>
  <span style="color: #3366ff;">&lt;artifactId&gt;</span>maven-crx-plugin<span style="color: #3366ff;">&lt;/artifactId&gt;</span>
  <span style="color: #3366ff;">&lt;version&gt;</span>1.0.0<span style="color: #3366ff;">&lt;/version&gt;</span>
 <span style="color: #3366ff;"> &lt;configuration&gt;</span>
  <span style="color: #3366ff;"> &lt;url&gt;</span>http://crx-machine:5402<span style="color: #3366ff;">&lt;/url&gt;</span>
 <span style="color: #3366ff;"> &lt;user&gt;</span>${crx.username}<span style="color: #3366ff;">&lt;/user&gt;</span>
<span style="color: #3366ff;"> &lt;password&gt;</span>${crx.password}<span style="color: #3366ff;">&lt;/password&gt;</span>
<span style="color: #3366ff;"> &lt;/configuration&gt;</span>
<span style="color: #3366ff;">&lt;/plugin&gt;</span>
(...)</pre>
</div>
</div>
<p>And here&#8217;s how it can be used:</p>
<div>
<div>
<pre>mvn ... crx:install</pre>
</div>
</div>
<p>Please check the <a href="https://github.com/Cognifide/Maven-CRX-Plugin" rel="nofollow">Cognifide GitHub repository<sup><img src="https://confluence.cognifide.com/confluence/images/icons/linkext7.gif" alt="" width="7" height="7" align="absmiddle" border="0" /></sup></a> for more information (including configuration options). And please bear in mind that it is an early version and we appreciate all feedback received.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cognifide.com/blogs/cq/maven-plugin-automating-deployments-of-crx-cq-applications/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
