tag:blogger.com,1999:blog-8274078460773689082024-03-19T22:29:45.755+11:00The Real CQBayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.comBlogger56125tag:blogger.com,1999:blog-827407846077368908.post-60606715472078875382017-05-31T20:53:00.003+10:002017-05-31T20:53:23.727+10:00Bye bye classic interface<div dir="ltr" style="text-align: left;" trbidi="on">
<div class="p1">
<span class="s1">"</span><span class="s2">Adobe is planning to deprecate the Classic UI in AEM in April 2018. The 2018 release of AEM will still contain the Classic UI as it is part of current AEM release. Following that, Adobe is planning to remove the Classic UI from AEM in April 2019.”</span></div>
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px Helvetica; color: #4b4b4b; -webkit-text-stroke: #4b4b4b}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Calibri; color: #042eee; -webkit-text-stroke: #042eee}
span.s1 {font: 14.0px Calibri; font-kerning: none; color: #000000; -webkit-text-stroke: 0px #000000}
span.s2 {font-kerning: none}
span.s3 {text-decoration: underline ; font-kerning: none}
</style>
<br />
<div class="p2">
<span class="s3"><a href="https://docs.adobe.com/docs/en/aem/6-3/deploy/best-practices/ui-recommendations.html">https://docs.adobe.com/docs/en/aem/6-3/deploy/best-practices/ui-recommendations.html</a></span></div>
<div class="p2">
<br /></div>
<div class="p2">
<span style="color: black;">A very quiet and unceremonious announcement on what we all knew was coming. Now we have a date.</span></div>
<div class="p2">
<span style="color: black;"><br /></span></div>
<div class="p2">
<span style="color: black;">It's more important than ever to move to the Touch operating model, and to modernize all components.</span></div>
</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-63759274651764549672016-10-18T20:44:00.000+11:002016-10-18T20:44:09.543+11:00Adobe has rebranded Sightly<div dir="ltr" style="text-align: left;" trbidi="on">
If you hear the term HTML Templating Language, or HTL, this is the new name for Sightly.<br />
<br />
Nothing has changed in the language, nor has the philosophy or direction that the Adobe team are taking.<br />
<br /></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-63182280624065028252016-02-27T12:42:00.000+11:002016-03-02T08:43:36.610+11:00Bringing a Human Experience to Software<div dir="ltr" style="text-align: left;" trbidi="on">
Today, I'm sitting in the Singapore Airlines lounge at Changi airport, and I am compelled to share a story with you. I have been working for a bank for the past two years, charged with the responsibility of enabling and empowering the business with Adobe Experience Manager across the global enterprise.<br />
<br />
I have just returned from a week with our hub in India, and a stark observation has been haunting me for my entire plane flight. For a piece of software entitled Experience Manager, when we implement, we rarely Manage to Experience.<br />
<br />
AEM was and is currently in my opinion the right choice of platform due to its flexibility and configurability. Most implementations I have seen produce beautiful and engaging experiences to the customer, but we so often fail to tell our story well to the most important users within the system, the author.<br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"><i><br /></i></span>
<br />
<blockquote class="tr_bq">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"><i>The author is the writer of the story, but we are disempowering them with a bad experience</i></span></blockquote>
I am a big fan of Charles Bukowski. In his book, Postman: http://www.goodreads.com/book/show/51504.Post_Office<br />
<br />
Bukowski has many brilliant truths, but none strike more to me than his take on technology transforming how an author writes. He talks about how cumbersome it was to write on a typewriter. It was hard to write, as the keys were difficult to press, his ideas were constrained to be linear, as he couldn't go back a paragraph to insert a new idea into something he had written, or to enrich and improve a sentence. It was like trudging through the mud, cumbersome, tiring, making you focus on what you were doing, rather than on what you were saying.<br />
<br />
To him, the word processor changed his writing, as he could move freely through his prose, changing and nudging his words, moulding and shaping them freely without hindrance. It was no longer like trudging through the mud, but rather like ice skating. He could freely glide with grace, circling and gliding through his thoughts, carving out a reality from nothing to a complete and vivid suspension of disbelief. It empowered him to tell his story.<br />
<br />
<blockquote class="tr_bq">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"><i>People learn by stories... Tell me your story</i></span></blockquote>
<br />
Last year whilst on holiday in the States visiting my inlaws, I met a man who completely challenged my world. His name is Peter Balwyn. I remember sitting around a large spread of food around the table, the extended family from all parts of the states and the world had converged to see my two young children, my wife and myself.<br />
<br />
Surreptitiously, I had mentioned another man who had changed my life, Viktor Frankl. I spoke of his book, Man's search for meaning.<br />
<h3 class="r" style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 18px; font-weight: normal; margin: 0px; overflow: hidden; padding: 0px; text-overflow: ellipsis; white-space: nowrap;">
<a data-href="http://streetschool.co.za/wp-content/uploads/2014/07/Viktor-Emil-Frankl-Mans-Search-for-Meaning.pdf" href="https://www.google.com.sg/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0ahUKEwic6u-y1ZbLAhUBV44KHWz9BekQFggaMAA&url=http%3A%2F%2Fstreetschool.co.za%2Fwp-content%2Fuploads%2F2014%2F07%2FViktor-Emil-Frankl-Mans-Search-for-Meaning.pdf&usg=AFQjCNFixLkhXhi8baeMDTC9ZRbOC1Qltg&bvm=bv.115339255,d.c2E" style="color: #660099; cursor: pointer; text-decoration: none;">Man's Search for Meaning - Streetschool</a></h3>
<div>
<br /></div>
<div>
His theories were the antipodean of what I had understood to be Abraham Maslow's base needs heirarchy.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_NC5I4NuMzBcOovhM4zn5SJIzpzp2gXhQvCynGp1AoccVlfj3SgKpiHo1u_gOzNEOtiWbbaHqCd_WKX_p4_maTbLrm9T1LZtK-n8CXHCq2zOm0AXJwrXLG6H3VnlAWqlPM-PSDP-ONg_J/s1600/Abraham_Maslow-238x300.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_NC5I4NuMzBcOovhM4zn5SJIzpzp2gXhQvCynGp1AoccVlfj3SgKpiHo1u_gOzNEOtiWbbaHqCd_WKX_p4_maTbLrm9T1LZtK-n8CXHCq2zOm0AXJwrXLG6H3VnlAWqlPM-PSDP-ONg_J/s1600/Abraham_Maslow-238x300.jpg" /></a></div>
<br />
<br />
Maslow's thinking and theory to my understanding was so practical, so logical, so straightforward. </div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdEvqaQ8DkxhIGKbwSpS5e2U1B61ccNEBx6FnirFxYCa03Ox20bDsmc4rLLoOXpFVHz7atRUHoLYxWnJnV5usLauDegt2uTYlMQPiDyRQrjA9zgZzLLaq-7re6VKFosHCBMJNKC73rMKj0/s1600/maslow-pyramid.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdEvqaQ8DkxhIGKbwSpS5e2U1B61ccNEBx6FnirFxYCa03Ox20bDsmc4rLLoOXpFVHz7atRUHoLYxWnJnV5usLauDegt2uTYlMQPiDyRQrjA9zgZzLLaq-7re6VKFosHCBMJNKC73rMKj0/s1600/maslow-pyramid.jpg" /></a></div>
<br />
When I was studying Artificial Intelligence and Machine Learning at university over a decade ago, I first heard of Maslow and understood his theory to be that humans were driven to fulfill their needs from the bottom up. If they were dropped naked in the jungle, they would need to find food and water first, then shelter and safety. They would need to have some sort of social interaction, be that another human, a pet or a sock puppet and finally to fulfill their self worth and self esteem before they can self actualise.<br />
<br />
Only once your house built with a river running through it, a garden bed to grow your vegetables, a few pigs and cattle, and you could sit down with your friends behind your electric fence on a deck chair with your shotgun in one hand, and a martini glass in the other could you think about life, the universe and everything.<br />
<br />
Frankl's idea was born in the most harsh of crucibles of the 20th century, Auschwitz and Dachau. The first half of his book tells his story of how he came up with his revolutionary thinking, and how it empowered him to survive the camps, the second half dove into deep psychological theory.<br />
<br />
He survived not by fulfilling his physiological needs, safety, social fullfillment or esteem, as obviously the camps were specifically designed to erode and crush every soul that entered to dust, but rather his own higher purpose. To shape, define and tell his theory to the world.<br />
<br />
He observed those that lived and those that perished, and the differentiator in those that lived, is that they had a lighthouse to swim to. It was the hope of seeing their children, their wives, their parents. Often when the strongest who had held onto their family as their hope had discovered their loved ones had been extinguished, the light of their hope became a dark barren pit of despair, and lost, they were overcome and consumed by the machine.<br />
<br />
Peter rebooted my thinking, as it turns out Frankl was his supervisor, and he also knew Maslow personally, and as it happens, I had not understood Maslow's story correctly.<br />
<br />
<blockquote class="tr_bq">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"><i><span style="background-color: white; color: #333333; line-height: 20px;">If I were dropped out of a plane into the ocean and told the nearest land was a thousand miles away, I'd still swim. And I'd despise the one who gave up.</span></i></span>- Abraham Maslow</blockquote>
Hope, higher purpose, inspiration was the raw stuff of empowerment.<br />
<br />
Peter showed me by example in one day how playfulness and stories can burn memories instantaneously into one's ken. He had an aura about him that was infectious with energy, hope, grand visions, grand dreams and deep thoughts. Most of all, he made everyone feel safe. He never said no, or that you are wrong, always using positives to highlight gaps and inconsistencies in a safe, judgement free way.<br />
<br />
He taught me on so many levels through his stories, so stark, so simple, elegant and easy to understand, he changed my story forever. I still think back to our conversations and glean something new every now and again. All in a story's time to learn, and seemingly a lifetime to master.<br />
<br />
He pressed his book, gleanings, into my hands and asked if I would read it. I did.<br />
<br />
http://www.selfpublishingpress.com/content/Peter%20Baldwin<br />
<br />
I feel that us technical types are great at instructing machines. We tell them what to do, we give precise instructions, conditions and model everything mathematically with cold precision.<br />
<br />
Humans don't work that way. We need to be inspired. We don't like being told what to do, we don't like being led, read dragged, to the right answer. The great leaders don't lead at all, but inspire and empower through their stories. Amazing leaders make you invincible.<br />
<br />
<br />
And thus I come to what has been bothering me. So often in our implementations of this fine product known as AEM, we forget what the cornerstone of an amazing CMS actually is all about empowering the author to tell their story.<br />
<br />
We allow technology to get in the road of their thinking by allowing the Skeuomorphisms of previous implementations to bleed into the next generation. How often have you seen business requirements that demand that we make AEM act like IBM WCM, Fatwire, Vingette or OpenText. I understand completely that sometimes you want to put the cart in front of the horse because you don't want to smell the horse, but from a design perspective this is committing the same error as trying to make glass like wood or metal in construction design.<br />
<br />
We build beautiful customer experiences, and we disempower the author entirely.<br />
<br />
We build systems that suit the thinking of developers, not the thinking of the author.<br />
<br />
Let me share a story with you. When I first started with the bank 2 years ago, I was given a case from my boss, where a vendor was building a system for a division of the bank, and the division was not happy with what was being produced. Costs were huge, flexibility was low, and every time they wanted to make a change they had to re-engage the vendor.<br />
<br />
I sat with the authors, and immediately I noticed what was happening. There were over 120 components in the system. This was a simple web page. How can there be 120 separate components?<br />
<br />
In a nutshell, here are the examples of the components:<br />
<br />
<ol style="text-align: left;">
<li>Image on the right, text on the left.</li>
<li>Image on the left, text on the right.</li>
<li>Image on the right, text on the left, radio buttons underneath</li>
<li>Image on the right, text on the left, checkboxes underneath</li>
<li>Image on the left, text on the right, checkboxes underneath</li>
<li>....</li>
</ol>
<br />
Notice that Image on the left, text on the right, radio buttons underneath was somehow missed. I was to raise a Statement of Work with the vendor on behalf of the business unit to add this component.<br />
<br />
At this point, I pulled up stumps and demanded a reboot. This was crazy. The authors didn't know what to do. They were swarmed with 120 and counting components, not all components worked in all places. Call to Action components which were essentially an image with a button that linked off to another page. The problem was that this component couldn't be used everywhere, only within one particular parsys that was hard welded onto a particular area of the template. It went entirely against the axiom that AEM is a box of Lego's that the author can piece together to make whatever they want.<br />
<br />
I took charge of the project and we delivered what we could with the limited remaining budget. We couldn't entirely solve the problem, but we greatly simplified the authoring interface, pushing back on the minor and unimportant requirements that demanded a bespoke component be built for everything.<br />
<br />
Today, we are working on a common components toolkit that brings polymorphism to components, and the ability to paint with a simplified pallet.<br />
<br />
I will know when we are a success when our authors can paint masterpieces with the simplest of primary colours in our component pallet, the core lego set, the atomic components, layout and content:<br />
Column Container<br />
Grid<br />
Image<br />
Text<br />
Video<br />
Download<br />
etc.<br />
<br />
But how can we achieve custom functionality with so few components? When you drag an image onto the screen from the sidekick, you can refine the kind of component it is. An image can be a standard image, an adaptive image, a call to action, a hero, a header, whatever you want it to be.<br />
<br />
The dialogues are modeled in such a way that they transfer between each other, an image source is still an image source, no matter whether its a call to action, a hero banner or a header. It allows the author to ice skate around what they are doing. To change their mind, to alter what the image is saying and doing, without having them be distracted by deleting the component and retyping. Not to mention the cardinal sin of AEM, hard welding components onto a template. It is a template, not a prescribed method of operation.<br />
<br />
Furthermore, every component must be liquid in itself, stretching and shrinking to adapt to its parent container. This not only solves the "not in my parsys" problem, but also aids with responsive design, as the flexibility of the component on a mobile device is now no longer limited to its gridspan settings.<br />
<br />
Each of the dialogs are modelled in SlingModels, and given a version number. When we change the structure of a dialog, it breaks content. This is not acceptable. All content needs to be forward transformable. As in, we take the Sling Model in the particular version number, and we transform it to the new version dynamically, both in a big bang format by running a script to search for versions of data within the JCR that correspond to that model and need uplift, as well as intercepting the event when a dialogue loads, upgrading the version of the data to that of the component dialog with our Sling Model persistence extension.<br />
<br />
We must both allow the author to lead and to follow. When a new user gets into the system, there needs to be enough to suggest what they do next. There is quite a bit still left to do in the touch interface to achieve this without at least some basic training, but we should not be compounding the issue. Our components should easily tell their own story, to allow our authors to syncopate and ice skate through their thoughts. The technology must get out of the road.<br />
<br />
We also cannot forget that the experienced author will want to lead us, to command and imbue their thoughts succinctly with the least amount of effort. To be able to change their mind at a whim, to be empowered, to feel like a god able to walk on water and part the waves with a single gesticulation.<br />
<br />
Remember, you can always have your cake and eat it. Just buy two cakes.<br />
<br />
We also can never forget, we are here to empower our authors to write their story. The true value of a CMS is its content, not the ability to rejig the rejiggulator.<br />
<br />
Developers and designers need to keep in mind that the major actor in this system is not robotic, but human, and we must interact in a minimalistic way to get technology out of the road, to allow the author to be the genius, to tell their story in a transparent and elegant way. To allow their ideas to grow and flourish without being perverted by needless system constraints and ham fisted interfaces.<br />
<br />
We are evolving the way we interact with our technology, and I am excited to see what the next evolution of AEM will bring in the integration space.<br />
<br />
In the words of God in Futurama Series 3, Episode 20 - Godfellas:<br />
<blockquote class="tr_bq">
<span style="font-family: "courier new" , "courier" , monospace; font-size: large;"><i>When you do things right, people won't be sure that you've done anything at all.</i></span></blockquote>
</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-39898654689419336762014-07-22T17:34:00.001+10:002014-07-22T17:34:44.262+10:00CQ5/AEM Gotchya - When trying to fake a post request, you get the following error in the logs:<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
POST /my/post/url HTTP/1.1] org.apache.sling.security.impl.ReferrerFilter Rejected empty referrer header for POST request to /my/post/url<br />
<h2 style="text-align: left;">
The Solution</h2>
The problem here is that you are not correctly spoofing the Referer address. To avoid this problem when testing, you can disable Referer filter checking by going to localhost:/4502/system/console/components, go to Apache Sling Referrer Filter, and check the "Allow Empty" checkbox.<br />
<br />
This will disable the referrer security check in CQ5 for your developer instance.<br />
<br />
NOTE: DO NOT DO THIS FOR PUBLICLY ACCESSIBLE CQ5/AEM INSTANCES AS IT POSES A SECURITY RISK</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-58434048873535439472014-07-09T10:16:00.004+10:002014-07-09T10:16:53.677+10:00How to find the version number of CQ or AEM that you are running<div dir="ltr" style="text-align: left;" trbidi="on">
Go to http://<author>:<port>/system/console/status-productinfo<br />
<br />
And you can see the exact version and build number that has been installed.<br />
<br />
<pre style="background-color: white; font-size: 11px; padding: 0px;">Installed Products
Adobe Experience Manager <versionNumber></pre>
</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-67867086285243875782014-06-17T16:53:00.002+10:002014-06-17T16:53:21.700+10:00How to programatically design mode select a component to be included in the sidekick<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You want to have a component programatically available to authors without having to enter design mode and add a component for the template.<br />
<h2 style="text-align: left;">
The Solution</h2>
Go to your relevant template's design mode. For this example, we will use the Geometrixx site, located at:<br />
<br />
/etc/designs/geometrixx/jcr:content/contentpage/par<br />
<br />
Then edit the components property to contain the path to your component, for example:<br />
/apps/geometrixx/components/customcomponent<br />
<br />
Save, and reload the editor, and you should have the component added to your list.<br />
<br />
<br /></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com1tag:blogger.com,1999:blog-827407846077368908.post-68446401149524560352014-05-02T11:40:00.004+10:002014-05-02T11:40:58.498+10:00CQ5/AEM How do I detect from a SlingServlet whether it is running on the Master or Slave instance on an author cluster?<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You have a Sling Servlet performing a task on the author instance, and you are running as a cluster. The code is executing on both the master author and the slave author instance, when it should only be running on one.<br />
<br />
How do you detect whether the instance is the master instance?<br />
<h2 style="text-align: left;">
The Solution</h2>
<br />
<pre style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 17.804800033569336px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;">@Reference
private SlingRepository repository;
public boolean isMasterRepository(){
final String isMaster = repository.getDescriptor("crx.cluster.master");
return StringUtils.isNotBlank(isMaster) && Boolean.parseBoolean(isMaster);
}</code></pre>
<br />
With this code, we can detect whether the current instance is running as the master.<br />
<br />
In the execution function, the first conditional should be to detect whether it is running as the master instance or not, and if it is not, it should terminate the function call.</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com3tag:blogger.com,1999:blog-827407846077368908.post-19206332322120258452014-05-01T09:40:00.001+10:002014-05-01T09:40:59.170+10:00CQ 5.6.1 How to find the current run mode on an instance<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You suspect your instance is not running in publish mode, or is missing a custom run mode on startup and need to find out easily what runmode the instance is running under.<br />
<h2 style="text-align: left;">
The Solution</h2>
Go to:<br />
http://localhost:4502/system/console/status-slingsettings<br />
<br />
You will see the following line down the bottom:<br />
<br />
<pre style="background-color: white; font-size: 11px; padding: 0px;">Run Modes = [samplecontent, author, crx2, crx3mongo]</pre>
<br />
<br /></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com2tag:blogger.com,1999:blog-827407846077368908.post-44022537095732534462013-12-19T07:14:00.002+11:002013-12-19T07:31:14.350+11:00CQ5/AEM How do I find out exactly which maven dependency I need?<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You are writing a customization in Java for CQ5/AEM, but the class you need is not currently included in the project, but it is available in CQ5.<br />
<br />
You may know what dependency you need, but are unsure as to the version. What is the best way to find the right dependency to include in CQ5?<br />
<h2 style="text-align: left;">
The Solution</h2>
Go to:<br />
<span style="background-color: white; color: #4f5051; font-family: adobe-clean, 'Helvetica Neue', Arial, sans-serif; font-size: 14px;">http://localhost:4502/system/console/depfinder</span><br />
<span style="background-color: white; color: #4f5051; font-family: adobe-clean, 'Helvetica Neue', Arial, sans-serif; font-size: 14px;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMmHXfhV76ScIvWwpbKem5L6i4BTreJa93UY-ZzorKYbY2F9VQO6otn-jJRWpyJU5bSl52Y2lj3pSPqQ7cZ1wE1eatfBU9oNHxX-waqNfp9h4qW_o1jp62FXVbfa5E7OwD6E1MGISqc40m/s1600/Screen+Shot+2013-12-19+at+9.19.21+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMmHXfhV76ScIvWwpbKem5L6i4BTreJa93UY-ZzorKYbY2F9VQO6otn-jJRWpyJU5bSl52Y2lj3pSPqQ7cZ1wE1eatfBU9oNHxX-waqNfp9h4qW_o1jp62FXVbfa5E7OwD6E1MGISqc40m/s640/Screen+Shot+2013-12-19+at+9.19.21+AM.png" width="640" /></a></div>
<span style="background-color: white; color: #4f5051; font-family: adobe-clean, 'Helvetica Neue', Arial, sans-serif; font-size: 14px;"><br /></span>
<span style="background-color: white; color: #4f5051; font-family: adobe-clean, 'Helvetica Neue', Arial, sans-serif; font-size: 14px;"><br /></span>
This is the package dependency lookup service. If you type in the package/class you need in the field, and click on Find, you will get the dependency you need to include.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIMbEHQjxPA9lPWhSSkaQ4ubIOcgruI5SsxcwhBUdciHImIAxwsiSXny3fadCkFnRXK7weVYdHzSMPyG8jlfQut105NNn6fwmu0aXgW26zpfWfzll6xgiwE7-go95sQ4cH_cd3R3tIASfS/s1600/Screen+Shot+2013-12-19+at+9.23.11+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIMbEHQjxPA9lPWhSSkaQ4ubIOcgruI5SsxcwhBUdciHImIAxwsiSXny3fadCkFnRXK7weVYdHzSMPyG8jlfQut105NNn6fwmu0aXgW26zpfWfzll6xgiwE7-go95sQ4cH_cd3R3tIASfS/s640/Screen+Shot+2013-12-19+at+9.23.11+AM.png" width="640" /></a></div>
Just copy and paste the dependency into your pom file.</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com1tag:blogger.com,1999:blog-827407846077368908.post-12926427271994777192013-11-02T01:50:00.003+11:002013-11-02T01:50:47.558+11:00CQ5/AEM Dispatcher gotchya - dispatcher failed to map segment from shared object permission denied<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
<div>
Although your dispatcher mod file is there, you can't seem to load the mod_dispatcher file.</div>
<h2 style="text-align: left;">
The Solution</h2>
<div>
First, double check in your httpd.conf file that you are actually pointing to the right place. Remember that your ServerRoot is the prefix appended to the mod_dispatcher.so path file.<br />
<br />
If the file is where you would expect it to be, check that the user you are running apache under has the rights to see the file.<br />
ls -al<br />
will show full permissions of the directory listing.<br />
chown group:user will change the file ownership<br />
<br />
chmod 755 will give read and execute rights to the owner, the group and everyone.<br />
<br />
Finally, if you are running Red Hat Enterprise Linux (RHEL), it is possible you are running selinux, and don't even know it.<br />
<br />
Have a look under /etc/sysconfig/selinux.<br />
<br />
In the file, you may see selinux=enforcing.<br />
<br />
If this is the case, then selinux probably doesn't like the dispatcher mod, and is blocking it. You can drop the permissions down to permissive or disable to remove it entirely, but check with your systems administrator, as this will have other effects on the system.</div>
</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-46244670040566315282013-10-10T13:24:00.001+11:002013-10-10T13:24:19.106+11:00AEM/CQ5 How do I let users reset their own passwords?<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
How do you allow users to reset their own passwords in the admin interface?<br />
<h2 style="text-align: left;">
The Solution</h2>
I get asked this question so frequently, I thought I would make a blog post about it.<br />
<br />
Go to the classic interface, and in the top right hand corner, click on your user button.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV8eO3lPGSSWWHN_Jb8eweVYV7WvRlj0piDAG0-eIAupD1PnHIbInws4TFIc3Mwm-roVBU574QS7eNjSVp3hUTZe2vQyWXZ1ktkjSC7yb9CBZAZQzZ4s_INacnC4QiTFqbFIHudrH3GgpO/s1600/set+password+dialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV8eO3lPGSSWWHN_Jb8eweVYV7WvRlj0piDAG0-eIAupD1PnHIbInws4TFIc3Mwm-roVBU574QS7eNjSVp3hUTZe2vQyWXZ1ktkjSC7yb9CBZAZQzZ4s_INacnC4QiTFqbFIHudrH3GgpO/s1600/set+password+dialog.png" /></a></div>
<br />
<br />
If you are logged in as the administrator, you do not get the Set Password option.<br />
<br />
If you are logged in as administrator and impersonate a user, you will not see the option either.<br />
<br />
I believe that this is what causes the confusion. You actually have to log out, and log in as a different user in the admin interface, and you will see the set password option.</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-2498709920362035402013-09-24T22:22:00.000+10:002013-09-24T22:22:12.370+10:00AEM/CQ5 SQL2 How do I find all occurrences of a node by name <div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">The Problem</span></h2>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">You want to use a SQL2 query to retrieve all nodes that are named "nameofnode"</span><br />
<h2 style="text-align: left;">
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">The Solution</span></h2>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">SELECT * FROM [nt:base] AS s WHERE LOCALNAME() LIKE "nameofnode"</span><br />
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;"><br /></span>
<span style="background-color: white; color: #222222; font-family: arial, sans-serif; font-size: 13px;">The LOCALNAME() function returns the node name. </span></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-59790168243145214122013-06-04T12:18:00.003+10:002013-06-04T12:18:36.198+10:00How to create your own sling adapter<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
<div>
You want to create your own implementation of an adaptTo() class</div>
<h2 style="text-align: left;">
The Solution</h2>
<div>
Coming Soon</div>
</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-88855488074196782862013-06-04T12:18:00.002+10:002013-06-04T12:18:33.258+10:00CQ5/AEM What possibilities exist with adaptTo?<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You want to find out what you can adapt a particular object to, using the adaptTo(Object.class) method.<br />
<h2 style="text-align: left;">
The Solution</h2>
Go to <a href="http://localhost:4502/system/console/adapters">http://localhost:4502/system/console/adapters</a> and have a look for the class in the first column, Adaptable Class.<br />
<br />
The next column provides all of the classes that you can adapt the originating class to, any conditions that may be imposed, and the bundle that provides the information.<br />
<br />
So for example, if you look up <span style="background-color: white; color: #555555; font-family: Verdana, Arial, sans-serif; font-size: 10.909090995788574px;">org.apache.sling.api.resource.Resource </span>you will see that one of the listed adaptable classes is <span style="background-color: #e6e6e6; color: #555555; font-family: Verdana, Arial, sans-serif; font-size: 10.909090995788574px;">com.day.cq.wcm.api.Page</span><br />
<br />
Thus, if you start with a Resource resource, you can do:<br />
Page page = resource.adaptTo(Page.class)<br />
<br />
You could even create an adaption of your own. For example, if you have a Node object, you can create an AdaptTo mapping to map to MyCustomNode.<br />
<h2 style="text-align: left;">
Further items of interest</h2>
<a href="http://therealcq.blogspot.com/2013/06/how-to-create-your-own-sling-adapter.html">How to create your own sling adapter</a>.</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com1tag:blogger.com,1999:blog-827407846077368908.post-34171610947645726112013-05-28T16:19:00.000+10:002013-05-28T16:19:05.489+10:00CQ5/AEM how to create and use a custom taglib - part 3 use your tag<div dir="ltr" style="text-align: left;" trbidi="on">
If you have not already completed part II, <a href="http://therealcq.blogspot.com/2013/05/cq5aem-how-to-create-and-use-custom_28.html">click here</a><br />
<br />
The final step is to use your tag.<br />
<br />
In the component of your choice, add the following to a jspx file:<br />
<br />
<br />
<?xml version="1.0" encoding="UTF-8"?><br />
<jsp:root xmlns="http://www.w3.org/1999/xhtml"<br />
xmlns:jsp="http://java.sun.com/JSP/Page"<br />
xmlns:btes="http://btes.com.au/tagexample"<br />
version="2.1"><br />
<jsp:directive.include file="/apps/cqblueprints-example/components/global.jspx"/><br />
<p>No tag left behind!</p><br />
<btes:customTag content="Custom tag engaged" isHeading="true"/><br />
</jsp:root><br />
<br />
Now you should see the text "Custom tag engaged" rendered out as a heading. If you change the isHeading boolean to false, you should see it render as a paragraph.<br />
<br />
Note that code complete should be fully functional with this example.<br />
</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com1tag:blogger.com,1999:blog-827407846077368908.post-10770312173496458042013-05-28T16:18:00.001+10:002013-11-19T11:01:56.905+11:00CQ5/AEM how to create and use a custom taglib - part 2 create and set up your TLD<div dir="ltr" style="text-align: left;" trbidi="on">
If you have not already completed part I, <a href="http://therealcq.blogspot.com/2013/05/cq5aem-how-to-create-and-use-custom.html">click here</a>.<br />
<br />
The next step is to created your .tld directory.<br />
<br />
In the taglib project, you will see under src/main/resources, that you have a META-INF directory.<br />
<br />
In this directory, create a file named ProjectTaglib.tld<br />
<br />
Add the following to this file:<br />
<br />
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><br />
<taglib xmlns="http://java.sun.com/xml/ns/javaee" version="2.1"><br />
<tlib-version>5.4.0-SNAPSHOT</tlib-version><br />
<short-name>btes</short-name><br />
<uri>http://btes.com.au/tagexample</uri><br />
<tag><br />
<name>customTag</name><br />
<tag-class>au.com.btes.tagexample.CustomTag</tag-class><br />
<body-content>empty</body-content><br />
<attribute><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> <name>content</name><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> <required>true</required><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span></attribute><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><attribute><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> <name>isHeading</name><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> <required>true</required><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span></attribute><br />
</tag><br />
</taglib><br />
<br />
For Part III, click <a href="http://therealcq.blogspot.com/2013/05/cq5aem-how-to-create-and-use-custom_8715.html">here</a><br />
<br />
<br />
<br /></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com1tag:blogger.com,1999:blog-827407846077368908.post-85868015003176451762013-05-28T16:18:00.000+10:002013-11-19T11:01:42.201+11:00CQ5/AEM how to create and use a custom taglib - part 1 create a custom tag.<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You want to create a custom taglib, and to have code complete in your target JSP file.<br />
<h2 style="text-align: left;">
The Solution</h2>
In your taglib project, Add a new file called TestHeading.java, and include the following code:<br />
<br />
<br />
<br />
package au.com.btes.tagexample;<br />
<br />
import java.io.IOException;<br />
<br />
import javax.servlet.jsp.JspException;<br />
<br />
import com.cqblueprints.taglib.CqSimpleTagSupport;<br />
<br />
/**<br />
* Example custom tag to show either content wrapped within a heading, or content wrapped within<br />
* a paragraph<br />
* @author bportier<br />
*<br />
*/<br />
public class CustomTag extends CqSimpleTagSupport {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>private String content;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>private boolean isHeading;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>@Override<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>public void doTag() throws JspException, IOException {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>String tagString="";<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>if(isHeading) {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>tagString="h2";<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>else {<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>tagString="p";<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>String message="";<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>message=message.concat("<").concat(tagString).concat(">");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>message=message.concat(content);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>message=message.concat("</").concat(tagString).concat(">");<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>getJspWriter().write(message);<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>public String getContent(){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return content;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>/**<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> * Defines the content that the tag will display<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> * @param content<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> */<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>public void setContent(String content){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>this.content=content;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>public boolean getIsHeading(){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>return isHeading;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>/**<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> * Defines whether to display a heading (true) or a paragraph (false)<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> * @param isHeading<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span> */<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>public void setIsHeading(boolean isHeading){<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>this.isHeading=isHeading;<br />
<span class="Apple-tab-span" style="white-space: pre;"> </span>}<br />
}<br />
<div>
<br /></div>
<br />
<div>
<br /></div>
<div>
This has now created your custom tag.</div>
<div>
<br /></div>
<div>
<a href="http://therealcq.blogspot.com/2013/05/cq5aem-how-to-create-and-use-custom_28.html">Go to part II</a></div>
<br />
<br /></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-24731073692579571142013-05-28T13:23:00.000+10:002013-05-28T13:23:06.465+10:00CQ5/AEM how to get JSTL Code complete<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
After including <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> into your JSP, there is still no code complete for JSTL code, such as <c:set> or <c:out><br />
<h2 style="text-align: left;">
The Solution</h2>
You need to have the JSTL standard.jar library included in your project libraries.<br />
<br />
If you are not using maven, you can download the 1.2 JSTL package from <a href="http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/">http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/</a><br />
<br />
If you are using maven, include the following in your relevant pom files:<br />
<br />
<br />
<dependencies><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><dependency><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><groupId>taglibs</groupId><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><artifactId>standard</artifactId><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span><version>1.1.2</version><br />
<span class="Apple-tab-span" style="white-space: pre;"> </span></dependency><br />
</dependencies><br />
<br />
</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-89952755435321053772013-05-17T18:48:00.002+10:002013-05-17T18:48:45.563+10:00CQ5/AEM GOTCHYA - Why you should set all @Reference variables to null<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
What you should do</h2>
When writing sling servelets, all @Reference variables should be set to null<br />
<h2 style="text-align: left;">
Why</h2>
We experienced an issue where when changing pom, reference was still being kept between updates. It seems that if your running servelets have injected an @Reference variable, if a change causes the @Reference variable to not successfully be able to be injected, it will only happen when the instance has been destroyed.<br />
<br />
This is confusing as it makes it hard to narrow down which change has caused an @Reference variable to no longer be injected.</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-8226852714082239552013-05-17T10:59:00.002+10:002013-05-17T10:59:37.851+10:00<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
When using CQ Blueprints, we were getting a strange error coming up when a project was checked out by a new developer, but it was running on everyone elses machines.<br />
<br />
<br />
<div class="MsoNormal">
<span style="font-family: Consolas; font-size: 10pt;">Failed to execute goal
com.squeakysand.jsp:jsptld-maven-plugin:0.4.0:generate (default) on project taglib: Execution default of goal
com.squeakysand.jsp:jsptld-maven-plugin:0.4.0:generate failed: cannot generate
report -> [Help 1]</span></div>
<br />
<h2 style="text-align: left;">
The Solution</h2>
The problem was that the taglib project could not be generated, because at that stage of the project, we had no taglibs to include yet, and we deleted the GoodbyeWorld tag and Activator class. Hence, there was nothing to build in the project, and the target directory was left empty, which caused all dependant projects to not be able to compile.<br />
<br />
Hence, if the project was built once with at least the Activator class left in, the target build would be created, and there would be no error, only on new machines.<br />
<br />
So, if you leave at least the Activator class, or add a dummy tag/activator for the tag, your project should build successfully.<br />
<br /></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com2tag:blogger.com,1999:blog-827407846077368908.post-63752104325340450662013-04-30T00:03:00.005+10:002013-04-30T00:03:52.714+10:00CQ5/AEM How to skin the login page<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You want to customize the images displayed for the CQ5.5 login page<br />
<h2 style="text-align: left;">
The Solution</h2>
<div>
You need to take a copy of the libs/cq/core/content/login node, and copy it to apps/cq/core/content/login.</div>
<div>
<br /></div>
<div>
If you don't already have the following folder structure, create the following by going to localhost:4502/crxde </div>
<div>
<br /></div>
<div>
Right click on apps, create folder and call it:</div>
<div>
cq</div>
<div>
<br /></div>
<div>
right click on the newly created cq folder, and create a new folder named: </div>
<div>
core</div>
<div>
<br /></div>
<div>
right click on core, and create a content folder</div>
<div>
<br /></div>
<div>
go to /libs/cq/core/content/login, copy the folder, and paste it into your newly created core folder.</div>
<div>
<br /></div>
<div>
You should see the following:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikz-6goSWbzsHs3kZ1BxpVOrgXdgSbvVvSpphNM74bobAgerGx_NInSHJqHZT3xrwYUzC7kr4MkZYFxlMrzSF-m-3I3NOmVQIyEHDQy6zZAjI-LqMJUEI-6HCi8pPssh1WPsh9OWJpipiW/s1600/loginstructure.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikz-6goSWbzsHs3kZ1BxpVOrgXdgSbvVvSpphNM74bobAgerGx_NInSHJqHZT3xrwYUzC7kr4MkZYFxlMrzSF-m-3I3NOmVQIyEHDQy6zZAjI-LqMJUEI-6HCi8pPssh1WPsh9OWJpipiW/s400/loginstructure.PNG" width="173" /></a></div>
<div>
<br /></div>
<div>
To replace the background of the login page, replace background.png with an image of your choice.</div>
<div>
<br /></div>
<div>
Do the same for all of the relevant background screens.</div>
<div>
<br /></div>
<div>
The images folder contains all of the additional images for the login screen. You can go through these one by one to customize the page.</div>
<div>
<br /></div>
<div>
If your desired customization needs to go further than simply replacing images, you can change the login.css and login_ie.css style sheets.</div>
<h2 style="text-align: left;">
Further Reading</h2>
<div>
<a href="http://therealcq.blogspot.com/2013/04/cq56aem-how-to-customize-cq56-login-page.html">How to customize the CQ5.6 Login page</a></div>
<div>
<a href="http://therealcq.blogspot.com/2013/04/cqaem-how-to-customize-welcome-page.html">How to customize the welcome page</a></div>
</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com5tag:blogger.com,1999:blog-827407846077368908.post-23544083836233185812013-04-03T13:20:00.001+11:002013-04-03T13:20:28.984+11:00How to customize the default UI in CQ5.6<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You want to use the old style admin interface in CQ5.6 rather than the new touch style.<br />
<h2 style="text-align: left;">
The Solution</h2>
Go to the OSGi Console at:<br />
<a href="http://localhost::4502/system/console/configMgr">http://localhost::4502/system/console/configMgr</a><br />
<br />
Find the Day CQ Root Mapping component.<br />
<br />
Edit settings by clicking on the wrench or pencil (depending upon where you are).<br />
<br />
Change the Target Path to /welcome.html<br />
<br />
Click on OK, log out and login again.<br />
<br />
If you want the touch interface back, revert /welcome.html back to /projects.html</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-252170480613102412013-03-27T15:11:00.002+11:002013-03-27T15:11:17.010+11:00AEM/CQ5 contents of clientlibs on instance<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
You want to see what client libraries are running on your cq5 instance.<br />
<h2 style="text-align: left;">
The Solution</h2>
Go to:<br />
<a href="http://localhost:4502/libs/granite/ui/content/dumplibs.html">http://localhost:4502/libs/granite/ui/content/dumplibs.html</a><br />
<br />
<br /></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-57250684149778017912013-03-25T14:54:00.002+11:002013-03-25T14:54:51.728+11:00ERROR Failed to execute goal (install-package)<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2:exec (install-package) on project bigpondpoc-content: Command execution failed. Cannot run program "curl" (in directory "C:\Documents and Settings\username\workspace\myproject\content"): CreatePRocess error=2, The system cannot find the file specified -> [Help 1]<br />
<br />
<h2 style="text-align: left;">
The Solution</h2>
<div>
You have not installed cURL on your system.</div>
<div>
<br /></div>
<div>
Download cURL from http://curl.haxx.se/download.html and download the latest zip file.</div>
<div>
<br /></div>
<div>
If running under windows, unzip it to a folder of your behest and add a path variable to that folder using your windows environment variables.</div>
<div>
<br /></div>
<div>
(Windows Key + Break, to bring up Control Panel\System and Security\System.</div>
<div>
Advanced System Settings</div>
<div>
Environment variables</div>
<div>
Under system variables, find path, and add ;c:\myPathToCurl)</div>
<div>
<br /></div>
<div>
This should resolve the issue.</div>
<br /></div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0tag:blogger.com,1999:blog-827407846077368908.post-46941783010876040332013-03-25T14:20:00.001+11:002013-03-25T14:20:26.797+11:00How to change the root publish page from /content/geometrixx-outdoors/en.html to what you require<div dir="ltr" style="text-align: left;" trbidi="on">
<h2 style="text-align: left;">
The Problem</h2>
When you type in http://www.yourwebsite.com you get redirected to<br />
<br />
http://www.yourwebsite.com/content/geometrixx-outdoors/en.html<br />
<h2 style="text-align: left;">
The Solution</h2>
It is best to fix the core of the problem, which is the target redirect on the /content folder.<br />
<br />
A bit of mechanical sympathy first, however.<br />
<br />
When you type in the default / url, cq5 will look at the Target Path setting in the Day CQ Root Mapping component.<br />
<br />
This setting by default is set to /content.html<br />
<br />
You can change the url at this point, however, it is not advisable to do so, as if the url ever changes, you will need to make a configuration change, rather than a content change.<br />
<br />
So when you first hit the / directory, the Day CQ Root Mapping servlet changes the request to be /content<br />
<br />
Within the /content folder, which can be viewed by using CRXDE Lite/Explorer, you will see that the sling:target setting, is to /geohome.<br />
<br />
/geohome is set as the vanityPath for the geometrixx-outdoors site, which in turn has a redirectTarget set to /content/geomtetrixx/en<br />
<br />
So if we change the /content folder to have the next correct address, such as /mysite or the equivalent starting point coded into the author instance, this will then replicate seamlessly to the publisher, and means that you don't have to rely upon apache rewrite rules to serve up the correct website.</div>
Bayani Portierhttp://www.blogger.com/profile/11832031235737859561noreply@blogger.com0