Blog

Digital experiences are powerful. They can defy the imagination create wonder and inspire endless possibilities. That’s why we love digital — and we want to share those experiences with you.

Weird Eye Syndrome - The Curious Case of Cover Images

Cover images are images that automatically size and crop themselves to display over the whole area an element. In the design phase, these images are cropped to the breakpoints as designed, but then problems arise in responsive layouts due to multiple variables. This creates what 6d has deemed Weird Eye Syndrome. Explanation of the problem This 1260px width and 750px height (1.68 ratio) image will be used in some code examples below. This HTML example creates a 750px min-height cover image: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Weird Eye Syndrome</title> <style> * { box-sizing: border-box; } body, html { font-size: 16px; margin: 0; padding: 0; } .container { ... READ MORE

The Industry’s Take on Conversion Rate Optimization

The Industry’s Take on Conversion Rate Optimization: What Works, What to Expect, and How to Maximize your Testing Efforts Earlier this year Econsultancy conducted a survey related to conversion rate optimization (CRO), which we at 6D Global took part in, and which was published in the Econsultancy Conversion Rate Optimization 2016 Report. Firstly, if you’re not familiar with conversion rate optimization (CRO), here’s a brief overview; alternatively, if you are already familiar with CRO, skip this paragraph. CRO has many names – A/B testing, website experimentation and so on – all with the same concept - to run controlled experiments on your website with actual website visitor participants, tracking the differences between original and variation(s) to determine if those changes you’ve made have a statistically significant impact on site performance. Below are some insights and findings from the Econsultancy Conversion Rate Optimization 2016 Report with our own ... READ MORE

6D Global welcomes new client, Herschel Supply Company

6D Global’s Chief Executive Officer, Tejune Kang, welcomes new client, Herschel Supply Company! Continuing its market leadership in Adobe Experience Manager (AEM) design, development, implementation and integration services, 6D Global has added Herschel Supply Co. to its portfolio of expanding AEM clients across the globe. 6D Global will provide Herschel with development expertise to assist in their AEM content management system implementation in support of the company’s main website, www.herschelsupply.com.ABOUT HERSCHEL SUPPLY CO.Founded in 2009, Herschel Supply Co. is a Canadian manufacturer of design driven global accessories, producing quality products with a fine regard for detail. Herschel Supply designs and manufactures the finest quality backpacks, bags, travel goods and accessories for everyday explorers around the world. The company was ... READ MORE

6D Global and Lingotek continue evolving translation management

6D Global and Lingotek continue evolving translation management capabilities.As an extension of its leading platform integrations services within the digital marketing technology sphere, 6D Global continues to partner with Lingotek to provide extended marketing integration capabilities in support of the globalization of enterprises’ websites. 6D Global and Lingotek have built a connector between the Adobe Experience Manager (AEM) Content Management System and the Lingotek Translation Management System (TMS) that allows the sharing and reusability of content already resident within an organization’s CMS to be translated in an automated manner into dozens of foreign languages. To continue to evolve these capabilities, 6D Global and Lingotek have worked on maintaining the currency of the connector with the latest versions of the AEM software through enhanced devel ... READ MORE

Magical Mystery Script

It may be strange that a person who makes their living adding tracking scripts to web sites (me) is asking you to limit adding tracking scripts to your sites. Analytics provides fantastic insights into how your digital marketing and website are working. What I am asking you to do is be careful in putting magical mystery scripts on your site that claim to be doing limited tracking. You should be the only one benefiting from your site data!You know the scripts I am talking about, Marketing, by request of your consulting partner, working with a third-party ad company, getting a script off a service provider’s site, has handed you a small piece of code they call a “pixel”. This will, according to someone in the email thread, enable you to optimize your ad spend while significantly increase conversions. They may even throw in a few more buzz works about synergizing the ROI of the collaboration."Pixel" - a cute term that makes you think of a pixie, what could be evil abo ... READ MORE

6D Global’s CEO wishes to thank Ariat for its long standing partnership

6D Global enters its eighth year of delivering Paid Media, Earned Media (SEO) and digital Analytics services to Ariat International! 6D Global’s Chief Executive Officer, Tejune Kang, wishes to thank Ariat for its continued, long standing partnership with 6D Global.By optimizing their digital footprint and through the close partnership starting in 2010 with the 6D Global Analytics team, Ariat continues to see year over year growth and returns across their digital channels. With a focus on improving brand awareness, increasing online sales revenue through enhanced e-commerce initiatives, and deepening their relationship with their customer base, 6D Global continues to evolve Ariat’s paid search and pay-per-click advertising strategies as consumer demands change, and Ariat’s product lines continue to expand. 6D Global has employed innovative search engine optimization (SEO) t ... READ MORE

10 things you need to know to survive Adobe Summit

Adobe Summit can be an overwhelming experience for even the most seasoned marketer. Here's 10 things you need to know to help you survive.Vendors and Suppliers will always have their “A Game” on. Be wary about the dialog you hear and ask to go deep on the conversations before you believe them to be. Keep asking the deeper and deeper questions until they cry mercy.Wear the right shoes. This particular conference is about your shoe game.Have a friend or trusted advisor with you. It’s easy to miss important info and perspective and differing opinions can help you receive the info.Pace yourself and plan. Everything is big in Vegas. The content is rich and deep and the venues are large and confusing. Give yourself time to get from A to B.Don’t be afraid to ask. It’s easy to be lost in the conversation. If you don’t know how something works or even what products are being used in a solution… ask. Don’t be surprised if you get multiple answers. Have ... READ MORE

Google Penguin 4.0 Update - The Good, The Bad, The Penguiny | ˈpeNGɡwinē/

Last Friday (September 23rd) Google announced the release of their latest Penguin algorithm update, Penguin 4.0. Read on for 6D’s overview and POV on what the change means for you, our clients, and the SEO industry at large. What Is The Penguin Algorithm? Short Story ... READ MORE

Add Optimizely with Google Tag Manager

This is an update of the article “Add Optimizely with Universal Analytics via Tag Manager” previously from our organization.  Some things have changed with improvements to code from both Optimizely and Google Tag Manager (GTM).  Some issues remain and we’ll expand on the issues. First, let’s cover some basics of how site testing tools like Optimizely work with your site content. The tools work with your site code to swap out content elements.  You identify the elements and Optimizely makes that dynamic content. For example, let’s say your site has a button element: Defined by this html and CSS: <div class=pink> <a href="/solution.html" class="solid-button">Find a solution< ... READ MORE

A primer on programmatic tagging in AEM

The purpose of this blog is to introduce the AEM developer to writing tags in AEM Applications via the Tagging API. This post assumes that the reader is familiar with basic tagging in AEM, but here and there, things will be explained for the ease of the reader. For the sake of simplicity, the links to the local AEM console in the post assumes the port number where the author AEM instance is running in the reader's machine to be 4502. Overview What is Tagging? Adobe says: "Tagging allows content to be categorized and organized". Basically tagging is assigning one or more keywords to a piece of Content so that it can be identified whenever necessary based on its categorization. That piece of content could be a page, an asset etc. The entire Adobe guide on tagging is here. Tags are generally assigned to Pages and Assets. You can create tags via the ... READ MORE

AEM DTM Integration: Step-by-Step Process

The purpose of this blog is to go over AEM DTM Integration process step by step, using the recommended configuration options. There is documentation available for integration by Adobe here. Although, for someone who is integrating AEM DTM for the first time or with limited knowledge of one or the other, it is quite overwhelming to be exposed to the technicalities of all the available options at once. This post will also elaborate and expand on embedding DTM code on various experiences built within a single AEM instance. I hope this blog helps in simplifying the process for you. Assuming you have an author instance of AEM running, there are the three majors steps you need to perform to add the DTM code on your site via the cloud-hosted services integration: Create web property in DTM Configure AEM DTM Integration Embed DTM code in a specific AEM site ... READ MORE

Sightly/HTL Javascript Use Class Logging, Where's my log statements dude?

Recently on an engagement I was given the stipulations that the client could use Sightly, but not in Java Use class bundles. If any helper classes are used, they need to be in Javascript and live at the same location as the component. With these stipulations on development I took off converting their codebase to Sightly, with Sightly Javascript Use classes for any heavy lifting that couldn't be accomplished in Sightly/HTL alone. During development on their codebase I continuously relied on console.log(someVar); as a way of logging what was going on in my Javascript Use class (sure I could have setup a big boy logger using the log global variable, but due to time constraints, I just relied on console.log). One of the issues with using this kind of logging in a Javascript Use class is that your log messages get dumped into the error.log by default, not some pretty log file that contains log messages only belonging to your code. After a work day of scrolling through useless log messages r ... READ MORE

The Issue with Updating Inherited Groups in AEM 6.2 Using the Classic User Admin Interface

If you still prefer to use the classic UI for user administration for whatever reason (easier to get to/shorter URL to type/whatever), then there’s a new "feature" to be aware of in AEM 6.2 which has to do with modifying groups to which users belong. As all AEM documentation suggests, the best way to maintain user access rights is by maintaining a carefully structured set of groups whose members are other groups (and/or users). When you have a user belonging to a group which inherits from other groups, all the inherited group names get listed explicitly when viewing the groups to which a user belongs. This has the unfortunate consequence of updating everything that’s visible in the list upon save. In order to illustrate this behavior, navigating to the Classic User Admin interface at http://localhost:4502/useradmin, I set up a semi-arbitrary structure of groups where each have their own specific increased or decreased permissions. Th ... READ MORE

Kick Start your UI tests using Hobbes.js in AEM

This post will discuss a quick way to write automated UI tests in AEM using Hobbes.js and execute them from within the browser. Introduction This blog will discuss the usage of the Hobbes.js testing library available in AEM 6.0 and above, to run UI tests from within the browser. This framework technically relies on clientlibs, and the dependencies and categories settings of the clientlibs differentiates them from regular clientlibs. The 4 quick setup steps: Create a Client Library Folder in the desired location, say, in a component as apps/myProject/components/myComponent/tests. Create Test Suite(s), w ... READ MORE

Logging in Operations Dashboard in AEM 6.0 and beyond

This post will discuss logging via the Operations Dashboard in AEM 6.0 and beyond, and will also include a short tutorial to set it up for quick troubleshooting for developers and system operators alike. Introduction Have you ever wondered how some developers find the root cause of a lot of AEM problems faster than you can think of ? Yes, you guessed it right. Reading the logs! This blog is going to discuss in brief an alternative way to read logs in AEM 6.0 and above. This method utilizes the Operations Dashboard. Please note that this is NOT a tutorial to set up regular logging in AEM. For that you may want to read ... READ MORE

Using Grunt in an AEM Maven build

This post is a guide on how to establish a functional Maven build for AEM that includes Bower front-end dependency management and Grunt task management. The Grunt build will download Bower dependencies, move them to a client library, then create their respective .content.xml, css.txt, and js.txt to be used at the AEM component level. Prerequisites for this post: AEM instance (requires Java SDK) Maven (Link) NodeJS w/ npm (Link) Grunt (Link) Bower (Link) Optional reference file packet (Link) After installing above dependencies, set up a mvn project using the below code in a terminal or command prompt: mvn archetype:generate -DarchetypeRepository=http://repo.adobe.com/nexus/content/groups/public/ -DarchetypeGrou ... READ MORE

Good Code: Promises in JavaScript

Good Code is inspired by the television program Good Eats where the host covers a particular food subject in detail--often covering the history, usage, advice, and personal opinions about a particular ingredient, cuisine, or dish. Humans value synchronicity--in dance, music, cooking, business, transportation, and more. Being in sync with others is valuable, and when we build systems for computers, they need to be in sync as well. Devices interacting with the CPU, the kernel with programs, and programs with various APIs--computers are always operating as orchestras. Imagine though, if no more than one section of an orchestra could play at once. The violins would play, then stop, and then the horns would play. The violins would not be able to play again until the horns stopped. That wouldn't make for the best use ... READ MORE

Tracking Conversation Sites - Messy but Important

Many sites have a community section to facilitate conversations between your customers, with you, or even internal communication in your company. It may be a forum, wiki, or just comment section on your blog. They are messy—as direct unstructured human communications tends to be. These sites are sometimes not tracked by your site analytics—often because trying to visualize tracking multiple different conversations seems overwhelming. Think of the largest forum type site, Reddit, with over 300,000 sub-categories and uncountable number of subject threads. Visualize trying to track something like that. ... READ MORE

Bulk file transfers with WebDAV

Bulk asset transfers to a JCR are sometimes tedious especially when using AEM's Assets Manager or Site Admin. Adobe has tutorials on how to upload to the DAM and accessing AEM via WebDAV. This tutorial will make accessing AEM's JCR via WebDAV clear for current versions of Windows and OSX, and provide an alternate solution to the upload to the DAM article. WebDav stands for Web-based Distributed Authoring and Versioning. All tutorial examples will need an instance to connect to, for the examples below a local author server will be used (http://localhost:4502). WebDAV on Windows (Windows 10) Specific to Win ... READ MORE

Adding to the Create Page Wizard in Touch UI

In this blog post, I will describe how you can add a new property to the Page dialog and make it available in the Create Page wizard and Touch UI Dialog in AEM 6.1. It is common to add new properties to dialogs whenever you need to give authors additional options for configuring components or pages. Whenever you need to add a new property into the Page dialog, it typically will not be required by authors at the time of Page creation. For those rare cases when you need some detail specified about a page upon page creation, you will need to add properties into the Create Page wizard. Below is what the out-of-the-box Create Page wizard looks like. Adding an existing page level property into the Create Page wizard is very simple. The only additional node property you need to add into your Touch UI Dialog is cq:showOnCreate. Add this inside /apps/projectName/components/page/pa ... READ MORE

Fragile Analytics

In the early days of digital analytics we chipped custom tracking code into stone pages using flint JavaScript knives. As long as you had the code on the page the tracking worked. Analytics carved in stone--unbreakable. Then developers forgot to put the code on pages so it failed anyway. Tag managers simplified the task of getting more complex code on every page. But as tracking gets even more complex it becomes more fragile. Our stone tablet is now a thin sheet of glass. Ok, I’ve stretched this analogy as far as I should. I could go further but for the sake of humanity I won’t. ... READ MORE

Analytics - Track Everything! Not.

More data is usually better. But sometimes you get so much random data that what really matters gets lost in the noise. Badly formatted data can be worse than too little data − you have it but can’t figure out what it means. Modern digital analytics can track almost any action on a web site or app. Basic tracking is easily done by following simple instructions on a wide variety of tools. Going further, skilled analytics developers − such as the technical analysts at 6D − can implement code to track just about anything. Let’s talk about how the way in which you implement analytics affects the data quality. A typical an ... READ MORE

The JCR Installer Pause Issue

On a recent client we found ourselves battling what became known as JCR installer hell. No, it wasn't quite as bad as whatever hell you might imagine. Yes, it was quite the inconvenience. If you've experienced yourself, you'll immediately start nodding your head. Let me know if you've heard this one: You make some updates to a bundle or three locally. Your pull request is merged or the watched branch is updated via push and your CI box kicks off the build. You get notified of build success (or just keep Jenkins open and auto-refreshing if you're OCD like me) and anxiously hop onto the relevant environment to take a look at your changes. After 10 minutes of furiously clicking around you begin scratching that spot on your head you always scratch when the code you know was just built out and succeeded locally doesn't seem to be working anymore. You quietly contemplate your own existence... As a good developer you paired your updates with some prope ... READ MORE

Thunder Mag

Download the App Thunder Mag The Thunder Magazine app isn’t just an epub but a completely interactive reimagining of the quarterly magazine that Oklahoma City Thunder releases. The app includes everything from stories and player stats to games and inst ... READ MORE

How to Create an Analytics Dashboard and Publish Live to a Website

Google is cool, let’s get that out of the way. I love that Google shares all these beautifully-designed, well-documented resources for free. But wait, are they really free? The answer is no — Google is constantly collecting data. They have become the Federal Reserve of digital data. They have created their own ecosystem and all they ask for is data — which in turn is used to develop targeted advertising and build out applications to corner the market from email to navigation. All that being said, without that data I couldn’t do my job — nor could many businesses. There’s nothing more exciting than unveiling the power of data to a business and showing them how they can not only discover the type of users on their site, but target them across digital media, and even properly credit sales or le ... READ MORE

Granite UI: Empowering the Select Field

There have been vast improvements to the new touch ui interface since its inception back with version 5.6. Some of the authoring form fields however are still catching up to their extjs predecessors. One such field that lacks some helpful functionality is the select field(or /libs/granite/ui/components/foundation/form/select). Let's take a look at what is missing and how we can enhance the granite ui select field. What's missing? Let's start with an example. Say we are attempting to create a dropdown selection from a list of holidays authored elsewhere in the repository. For this example we are making the assumption that each holiday has been authored as a resource. First let's take a look at how we would achieve generating the dropdown with the old xtype="selection" and type="select: <holidays jcr:primaryType="cq:Widget" fieldLabel="Holiday" name="./holiday" type="select" options="path/to/holidays.-1.json." optionsTextFie ... READ MORE

6D Global Technologies, Inc. Hires Leading Digital Marketing Team, Geary LSF

 6D Global Technologies, Inc. officially signed on a core group of talented individuals from the digital marketing agency, Geary LSF. Geary specialized in creating custom omni-channel marketing strategies for their clients. Several key members of Geary’s management and specialist teams joined 6D Global ensuring continuation of work and expanding 6D’s capabilities and expertise in digital marketing.   The expanded team specializes in strategic planning and omni-channel execution of Owned Media, Paid Media, and Earned Media channels with focus in PPC, Display Advertising, SEO, Social Media, digital creative, and front end web development. The new addition will increase 6D’s ability to better serve clients with best- ... READ MORE

Google Analytics – Universal Analytics Cheat Sheet

If you couldn’t tell by now, I’m a big fan of simplifying and automating processes. As we’ve been starting to implement Universal Analytics alongside our clients’ current ga.js implementations, I’ve been spending a lot of time looking at Google’s analytics.js Dev Guide and Reference pages. Naturally, I wanted to have the analytics.js methods and fields closer and easier to find, so I thought it’d be helpful to create a Google spreadsheet cheat sheet for Universal Analytics. ... READ MORE

How to Prepare for the Google Analytics Individual Qualification Test

It’s almost that time again. In just a few short months, I will have to retake the Google Analytics Individual Qualification (GAIQ) test to renew my certification. While I feel overly confident I won’t need to do much preparation this time around, I will want to be sure to give myself a quick refresh, just to be absolutely sure I can fly through the test and continue to be Google Analytics IQ certified. A lot has changed in Google Analytics since I took the test almost 18 months ago, including the recent release of the new Analytics Academy, so let me walk you through how to prepare for this test and some best practices I can give having taken the exam before. ... READ MORE

Responsive Web Design, Mobile SEO, & the Future of Search Marketing

Last night, SwellPath kicked off our brand new series of talks, SwellPath Presents, with a session on responsive design and mobile SEO. Today’s blog post is a long-form blog post version of that talk. Check out the slide deck posted at the end. UPDATE: We now have video of the event! Watch it below or read the blog post version that follows.     ... READ MORE

SEO Solutions for eCommerce Duplicate Content Issues

Got an eCommerce site? If you do, I’m willing to bet you sell more than a few products. If you’re anything like the hundreds of eCom operations I’ve had the pleasure of working with over the years, you likely have some products that are pretty similar to each other. Depending on how similar those products are you could be setting yourself back in organic search. So, I’d like to take the time to show you how to avoid being hamstrung by duplicate content on eCommerce sites. Defining eCommerce Duplicate Product Content First, let’s flesh out what could make a set of produ ... READ MORE

Do Branded PPC Ads Cannibalize Organic Search?

“Should we be bidding on our branded terms?”   – Every client ever It is the most common question I get asked as a PPC manager, and one that I have always had to rely on anecdotal evidence, and case studies from major data providers to answer. “Of course you should,” I’d say, “synergy and all that. The sum of the parts is greater than the whole. Bidding on your Branded terms should bring a 40% lift in clicks from those branded keywords.” Truth be told, it’s a widely accepted truth among those managing PPC campaigns that bidding on branded keywords is the right thing to do, and a widely questioned practice by those skeptical brands that pa ... READ MORE

Semantic Markup Is Virtuous

    Some of the most fevered chatter in SEO circles these days concerns semantic markup, specifically the newish toolkit called “schemas” that leverages a structured data vocabulary in order to deliver unprecedentedly rich and informative search results on results pages. This is universally considered one of the great emerging frontiers in search. And while from every halfway-progressive SEO person in the world you will hear something like: “everyone is going to be playing the semantic markup game soon enough; jump ... READ MORE

AuthorRank for Brands

AuthorRank is one of the hottest topics in SEO for 2013. The potential is huge and the advent of AuthorRank as a major factor in Google search ranking seems imminent. There’s one big unanswered question here, though. What about AuthorRank for brands? I wrote an extensive post about How to Prepare for AuthorRank on SEOmoz last year and, by far, the most common question was “can my business or brand get AuthorRank?”. In this post, we’ll explore the idea of AuthorRank for brands, whether it’s real, what we can expect in the near future, and what we can or can’t do to prepare for something like it. ... READ MORE

Structured Data & Semantic SEO – The New Frontier

  Mike Arnesen on November 12, 2013 Ever since I’ve started speaking about SEO, I’ve always put up a blog post version of my talk so that people who were there can go back and reference it later and get a bit more detail than they would with just the slide deck alone. Today I’m keeping this tradition going with the blog post version of my SMX East 2013 talk on “Why Structured Data & Semantic SEO Are Important”. Sure it’s about a month late, but it was a crazy October. Enjoy! A little over a year ago, I’d never done any speaking or presenting, I’d never ... READ MORE

Adobe Summit 2016: 6D Global Sponsors

Deep Insights. Focused Learning. Endless Network. Summit is the digital marketing conference that offers it all. 6D Global will be there to share in the excitement and offer insights on how Adobe technologies can enable better storytelling and customer experience. Join 6D at our booth for a unique handcrafted experience in today’s digital world. Read More... ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

AEM With Freemarker Templating Language

Not every developer in the AEM space is overwhelmed by enthusiasm when choosing between sightly or jsp. While the masses argue about the advantages of one over the other, everyone can agree neither is perfect. Whether turned off by the adolescence of Sightly or the rampant use of scriptlet that can make JSPs unreadable (and difficult to maintain), you might be looking for something new to implement. Fortunately, AEM gives us the power to leverage different templating languages with just a few custom java classes. Freemarker? While these steps can be replicated for any type of script rendering, I will be making references specifically the Freemarker Templating Language. If it is something you are unfamiliar with, I highly recommended reading about what it has to offer. I think you will be pleasantly surprised by how robust of a templating language it is. Part I: Creating a Custom Script Engine Step 1 - ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

Adobe Experience Manager (AEM) vs Open Source Options

Introduction One of the more important decisions for a CMO or CTO is deciding what type of content management system (CMS) to use for the web. The last decade has brought about a wave of changes to the complexity, capabilities and expectations of web content management (WCM). WCM has now transformed into the backbone and front end technology to interact with customers online. Recent evolutions have required WCM to integrate and work with many other systems: commerce, analytics, customer relationship management, lead nurture, reputation management, enterprise search and more. Although the impo ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

Vaulting to AEM

.post-content > ul { margin-bottom: 20px; } ul li img { margin: 10px 0; } Image Credit: "DK Vault" By Dinoenthusiastguy Licensed under CC BY-SA via Wikia Using the CRX (Content Repository eXtreme) via CRXDE can be cumbersome especially for testing, the following are easier ways to interact with the CRX via common IDEs. The basic concept is similar to git where as to pull and push from the content repository using an IDE as a catalyst. Note: This post assumes a standard jcr_root structure is being used ex:[repository-base]\content\src\main\content\jcr_root\... Warning: Transfe ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

Installing AEM 6.1 Hotfixes

This post details a technique and a proper sequence for installing hotfixes on top of AEM 6.1 General Availability (GA) which is version 6.1.0.20150507. Until the Service Pack 1 for AEM 6.1 drops, with a target of Q1 2016, this is a good method for quickly deploying all relevant hotfixes on top of the GA version. Your instance is now up to date, with the latest security patches, bug fixes, and feature packs added on. The source data is this article on the Adobe CQ Help site. There's some work involved in understanding the list of hotfixes on that article, and correctly ordering them for installation. What I have done is order the hotfixes chronologically, while also taking into consideration the dependencies for the Touch UI Feature Pack. Note that we're excluding hotfixes for AEM Forms. Here's the same data, but reprinted chronologically: May 28th, 2015 - ... READ MORE

Resizing Touch UI component dialogs

In this blog post I lay out a technique that I've recently put together to have more control over component dialog "windows" or modals in AEM 6.1's Touch UI interface. This user-interface is set to replace Classic UI. It's thus a good idea to get acquainted with the way it works. The good news is that by ditching the monolithic ExtJS framework and embracing more modern web technologies (jQuery, HTML5, CSS3), Coral UI and Granite UI offer the web developer a wider entry into customizability. Moreover, the web developer, in my experience, is better equipped in these technologies. The problem One of the things that we had in Classic UI was the ability to set custom heights and widths on dialog xtypes. With the concept of xtypes gone, we have to find an alternative way to resize dialogs in Touch UI. We can accomplish this with jQuery and Granite. The default size of component dialogs ... READ MORE

CSS Vertical Center with Bootstrap & Slick Slider

After working with Bootstrap for the last year I’ve come across a common problem: vertical alignment. In responsive design it would be nice to vertically center an element inside its parent, even if the height of the element or its parent varies across screen sizes. This seems like it should be straightforward with the CSS vertical-alignment property. However, if you try to use the vertical-alignment property in Bootstrap you will find that it has no effect. This has to do with the floats and positioning that Bootstrap uses for its grid system. In the past I’ve gotten around the vertical alignment issue with padding. But the results are imperfect, especially if you want text to center vertically no matter how many lines it takes up. For the OKC Thunder Plus app we needed to implement a ... READ MORE

Upcoming Webinar: Upgrading to AEM 6.1: A Moderated Panel Webinar

UPGRADING TO AEM 6.1: A MODERATED PANEL WEBINAR Tuesday, January 19, 2015 12:00pm - 1:00pm EST Keeping up with the major releases from Adobe can seem daunting. Indeed, upgrading requires careful analysis, planning, and an understanding of all the moving pieces. Join us for a 1-hour webinar on Tuesday, January 19, 2015 where we will dive into the various considerations, technical and otherwise, of how to go about a successful upgrade to the latest and greatest version of the award-winning and industry-leading web CMS. ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

Adobe Edge Animate Tips & Tricks

*note that this works for both Digital Publishing Suite and .folio articles in Digital Publishing Solution. Adobe Edge Animate is an amazing piece of software that allows you to easily create interactive or non interactive motion graphics and animations. Along with Adobe After Effects, Edge is one of the most fun applications I get to use at work. Here I’ll go over how to put your Edge Animate content into DPS articles using InDesign, and some tips and tricks that I’ve found with my time using Edge Animate. This is Part 2 of my Tips & Tricks section. Y ... READ MORE

Adobe Digital Marketing Symposium - 6D is Exclusive Sponsor

Adobe Digital Marketing Symposium – 6D is Exclusive Sponsor 6D is excited to partner with Adobe to sponsor the Adobe Digital Marketing Symposium in Atlanta on Feb. 10, 2016. Experience is the new brand. And marketing today is about delivering amazing experiences. At Adobe Symposium 2016, you’ll hear from some of marketing’s leading experts—including industry luminary Ray Wang of Constellation Research—on the biggest challenges, trends and opportunities facing digital marketers today. You’ll hear stories about how to keep up with your customers across mobile, web, ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

Author Rich Snippets for YouTube Video Content

We’re moving beyond text-based content; Google Authorship is now for YouTube videos as well! In this post, I’ll take you through everything you need to know about Author Rich Snippets for YouTube content. The ability to get your picture in Google search results was the big thing last year. With the rollout of Google+, the world’s leading search engine started promoting a simple(r) way for people to link their online identity to their digital content. This lead to the rise of Author Rich Snippets! A Wild Rich Snippet Appears! I’ve been a huge proponent of using Google+ and setting up Author Rich Snippets, but up until now, I’d only seen them on traditional website content; that is, text-based web pages. Well, today I had my first sighting of a YouTube Author Rich Snippet. & ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

Download the podcast Download--> A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and finan ... READ MORE

Adobe Edge Animate Tips & Tricks

*note that this works for both Digital Publishing Suite and InDesign created .articles in Digital Publishing Solution. Adobe Edge Animate is an amazing piece of software that allows you to easily create interactive or non interactive motion graphics and animations. Along with Adobe After Effects, Edge is one of the most fun applications I get to use at work. Here I’ll go over how to put your Edge Animate content into DPS articles using InDesign and some tips and tricks that I’ve found with my time using edge animate. How to insert HTML Content into DPS It’s a fairly simple process to put your edge content into adobe Digital Publishing Solution (DPS). When you save ou ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

Download the podcast Download--> A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and finan ... READ MORE

Introduction to Apache Camel

In a recent AEM project I was introduced to Apache Camel, a solution for migrating content from one endpoint/platform to another. As it applies to an AEM migration, a Camel implementation may be vital to saving time and resources, particularly in cases where the amount of content to migrate is enormous, where it would be prohibitively tedious for authors to attempt recreating pages by hand in AEM’s Site Author mode. Camel uses abstraction and uniformity to bring content from one area to another, in a repeatable way without over-customization. The goal is all about not reinventing the wheel, allowing developers to 1)write simple statements and 2)avoid having to build lower-level functionality such as XML parsing and retry logic. Basic themes I will discuss are EIPs, DSLs, Routes, Processors, Components, and automated testing. Enterprise Integration Patterns ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

Download the podcast Download--> A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and finan ... READ MORE

6D Reveals the New Thunder Plus app - Designed for the NBA basketball team, the Oklahoma City Thunder

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

6D Podcast: Where we talk about the marriage of technology and design

A firm believer that strong design drives readership, extends brands and just plain makes a difference, Kat Topaz has redesigned hundreds of publications nationwide and repositioned countless brands to huge critical, and financial success. At 6D, Kat applies those same principles to the mobile space, working closely with UX and UI teams to design for every type of mobile strategy. With Kat’s large network of clients and ability to attract top tier talent, design is not an afterthought at 6D. It’s a driving force in the mobile experiences we create. ... READ MORE

Designing for Mobile: Making the Jump from Print Designer - Part 3

Part 3 of 3: Quick Rules for Mobile Design Whenever I hear rules, I can’t help it, I want to break them. So I hesitate calling these rules. However, in our office, these are known as “Kat’s rules” Buttons: the actual touchable area must be 100 pixels by 100 pixels or larger. You can design it to be as small as you want, as long as the active button is 100 x 100. Type size: never smaller than 18pt. Consistency: Don’t use an arrow that means swipe on one page, but means tap on another page. Use icons and other visual cues to mean the same thing each time ... READ MORE

Designing for Mobile: Making the Jump from Print Designer - Part 2

Part 2 of 3: The Process After discovery with the client, the design process begins when Scott Landis and I sit down together. Our combo of designer and developer is key. Not because either one of us couldn’t do it solo, but because it is always stronger when we do it together. By mapping out the navigation together (wire framing), the designer/developer combo is a great way to have checks and balances. It is always helpful to have multiple points of view. In our case, we have very different perspectives. His is more as a digital native, and I am more of an immigrant. We are constantly battling/discussing how not to dumb down the app which insults the natives, while being ... READ MORE

Designing for Mobile: Making the Jump from Print Designer - Part 1

Part 1 of 3: Starting a Mobile Design Project I love publication design. I love the short timelines, small budgets, and all the elements that have to come together. I hate a blank canvas—too many possibilities. But the more restrictions, the more obvious the solution becomes. And when I do my job well, I can prove it. I can show my value, because there are measurable results. Proof. More magazines are sold, more readers, more advertisers. Even the velocity of pick up points to the success of the design. Designing for mobile is a publication designer’s dream. All the things I love are there: ... READ MORE

Enterprise Digital Analytics: Partner Expertise Extends the Value of Data

We often are introduced to stakeholders at organizations that are deciding between working directly with an enterprise analytics vendor (Google or Adobe usually) to handle their implementation or consulting needs. Or maybe they’ve been working directly with the vendor and are wondering if continuing that relationship is the best option for them as they attempt to take their analytics program to a higher level. I thought it’d be good to outline what we see as the core benefits of working with a partner like 6D for implementation and consulting needs, versus working solely with your digital analytics vendor’s services team. If you aren’t aware already, 6D is a Google Analytics Premiu ... READ MORE

Using your iPad to deliver content to Adobe DPS

I’ve been at Adobe MAX meeting with clients and working with Adobe’s new Digital Publishing Solution (DPS). One of my favorite features of the new DPS is the special attention that has been given to mobile use-cases for publishing content and maintaining application content. This is just a really fancy way of saying that you can now use your iPad to deliver content to DPS, publish in DPS, edit cards and layouts, and even manage users. No longer does app content have to be delivered by someone sitting at a powerful desktop computer. You can do all of the content management for an app right from your tablet anywhere there is WiFi. During the conference, ... READ MORE

AEM 6.1 - Filter RequestDispatcher Forward breaks i18n

I just noticed that on AEM 6, in my Filter, when I call RequestDispatcher forward, i.e. request.getRequestDispatcher(...).forward(req, res);, it cause i18n to break. Here's a snippet of my codes: ... boolean filtered = false; SlingHttpServletRequest request = req instanceof SlingHttpServletRequest ? (SlingHttpServletRequest) req : null; SlingHttpServletResponse response = res instanceof SlingHttpServletResponse ? (SlingHttpServletResponse) res : null; if (request != null && response != null) { // block of codes to resolve the request uri and get the new desired URI if (this.resolvedUriResource != null) { String uri = this.resolvedUriResource.getPath() + ".html"; RequestDispatcherOptions options = new RequestDispatcherOptions(); options.setAddSelectors(uriSelectors); this.filterConfig.getServletContext().getRequestDispatcher(uri).forward(req, res); // OR //request.getRequestDispatcher(this.resolvedUriResource, options ... READ MORE

Decompile AEM: How to get a jar from AEM

AEM development is sometimes difficult to get started due to limited documentation. By having some code examples or a clearer understanding of what is under the hood, this could be the difference from good code to great code. Having the ability to decompile a jar can be very helpful in the development process. Decompiling the jar is the easy part. Finding and getting the jar in AEM can be more difficult. There are two ways that this can be accomplished in AEM, with Vault or without Vault. Check it out! With Vault (vlt) Go to http://localhost:4502/system/console/bundles Search for webservice, click Day Communique 5 WCM Webservice Support Notice Bundle Location copy the path after jcrinstall: (If you don't see jcrinstall, go to without vlt section) Open ... READ MORE

Apache Felix SCR Plugin Compatibility Chart

One of the issues I've run into during the past when setting up AEM / CQ5 projects is incompatibility between the various versions of the Apache Felix SCR Annotations and the Apache Felix Maven SCR Plugin. Usually, when this occurs, you will see an error like this when building the project: [ERROR] Failed to execute goal org.apache.felix:maven-scr-plugin:1.20.0:scr (generate-scr-descriptor) on project felix-annotation-test-bundle: Please use org.apache.felix:org.apache.felix.scr.annotations version 1.9.0 or newer. -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.felix:maven-scr-plugin:1.20.0:scr (generate-scr-descriptor) on project felix-annotation-test-bundle: Please use org.apache.felix ... READ MORE

Debugging AEM Webinar

Thought Leader: Dan Klco (AEM Architect and Lead) This webinar is the seventh in our series of CQ5 webinars and provides an introduction to debugging in AEM. This webinar is intended for technical audiences, and will be especially helpful for developers who are experienced with OSGI and CQ development. In the webinar, AEM Technical Architect Developer Dan Klco, explores: Custom logging for your App Starting AEM in Debug Mode Debugging AEM in your ... READ MORE

Chrome Console Magic

Chrome has many timesaving and neat tools built into it, many of these tools are not necessarily obvious on the surface. This post is a deeper dive into what is available. If you are not familiar with Chrome Dev Tools at all, this post is probably not for you. $ selectors Chrome has built-in selectors much like jquery. Open selectors example file in Chrome Open dev tools, console On this page you will see 3 divs, two with a selector-test class and one with selector-test id. There are 4 useful types of $ selectors in Chrome. $() $() selects the first matching element. (If jquery is active on the page, it will select all matching elements). It will match classes prefaced with ‘.’, IDs prefaced w ... READ MORE

Breaking Through

Approximately 4 years ago, a senior developer at the company I was working for responded to a feedback request for my annual review. While the phrasing of this particular piece of feedback made it immediately apparent who authored it, I'll forgo sharing his name. The feedback itself left an immediate impression and remains with me to this day, as vibrant as when I first received it: "CoE asks a lot of good questions and, often, his questions have the effect of bringing everyone to a uniform level of understanding." While I pride myself on finding the right questions to ask, I'm not sharing the above to sound my own trumpet. Instead, I'm sharing it as there's a powerful message within. Before I attempt to convey it, however, allow me to paint a rather plausible picture for you. You're on a project and a developer on your team is tasked with the troubleshooting and resolution of a particular defect. Further, the project manager informs this devel ... READ MORE

CQ 5.6 Tipping Point

Image Credit: "Woodwards building Vancouver demolition 1" by Tannoy at English Wikipedia. Licensed under CC BY-SA 3.0 via Wikimedia Commons. Recently, I spent a bit of time running performance tests against various versions of CQ5/AEM to understand the performance characteristics of the different versions. ... READ MORE

Installing Bundles by Runmode

If I had a dollar for every bundle configuration I've looked at where there was a little checkbox titled "Enabled", I'd have, like, maybe $31 dollars and I could afford a new Indie Steam game or perhaps 12 of them if I waited for the summer or holiday sales... In reality, I've been on countless projects where the prevailing approach for ensuring a bundle only runs for a specific runmode is to make it configurable via the aformentioned checkbox. While this approach certainly works, there's a much easier and, in my opinion, cleaner and better way to handle this that I think gets overlooked For starters, consider that you can provide runmode-specific configurations for your bundles via simple naming convention. I'd cover this myself, but Krtisian Wright does an excellent job of doing so here. In short, you'll typically see structures along the following lines: ... READ MORE

Sign Up for the Webinar: OSGi v. JSPs

Six Dimensions and 6D-Labs are pleased to announce the 3rd in their series of CQ5 webinars: “OSGi v. JSPs”  This webinar will cover best practices in developing and organizing Adobe CQ5 Components and Applications. This Webinar is intended for technical audiences, i.e., developers and architects who have existing experience with CQ5.  This webinar will be especially helpful for developers who are experienced with JSP component development, but are not very experienced with OSGi Service development. When: Thursday, August 23, 2012 Time: 11:00 – 12:00 PST (1:00 – 2:00 CST 2:00 – 3:00 EST) Where: You’ll be sent a Webinar registration upon completing the signup. Topics: The th ... READ MORE

Seeking Sales Representative to Join Our Team

We are currently seeking a Sales Representative who is self-motivated, competitive and goal oriented to join our team. The Sales Representative role is a regionally-based sales and business development position. A Sales Representative may cover a single large market, or multiple smaller markets within the region. The primary responsibilities of the role are to help grow Six Dimensions sales through prospecting, marketing, presenting, closing and retention. Submit Resume ... READ MORE

Sales Reps Should Avoid Customers Who Are Ready to Buy

The phone rings at your desk — it’s a big potential customer and they want you to come in and make a presentation. They have budget approval and consensus, up to the highest levels of the organization, to move forward on a major purchase. Their specs line up perfectly with what your company can deliver.  And, you’re on the customer’s shortlist — they’ve narrowed it down to you and two of your biggest competitors. Sounds great, right? The customer’s put the ball on the tee and all you need to do is make a good swing. But ask a star-performing salesperson what she thinks of this and you’ll find that she doesn’t see it as a good opportunity at all.  As we discuss in our recent ... READ MORE

RIM's Blackberry Isn't Dead Yet

By Scott Anthony  Asian Operations Leader, Innosight. Via Harvard Business Review It has been a rough few years for Research in Motion, the maker of the Blackberry line of mobile devices. Since Apple entered the mobile phone market, RIM’s financial situation has deteriorated and its market capitalization has plummeted by almost 95 percent since its mid-2008 peak of more than $100 billion. The company has brought in new leaders, but most pundits assume that the game is already over, and that it’s just a matter of time before we write RIM’s obituary. Yet in September RIM reported that its subscriber base had grown to 80 million from 78 million. The company’s market share is still decreasing, but companies on death’s d ... READ MORE

Register for CQ Deep Dive for Devs 005: Personalization

Six Dimensions and 6D-Labs are pleased to announce the 5th in their series of CQ5 webinars: “Personalization”  This webinar will cover best practices in creating and deploying personalization strategies in Adobe CQ5. This webinar is intended for anyone with experience and exposure to CQ5 or another Web Content Management System.  This webinar will be especially helpful for teams who are planning on deploying personalized content in Adobe CQ5. When: Thursday, December 12, 2012 Time: 1:00 – 2:00 PM EST (12:00 – 1:00 PM CST 10:00 – 11:0 AM PST) Where: You’ll be sent a Webinar registration upon completing the signup. Topics: The fifth of ten webinar series, will explore: ... READ MORE

4 Reasons Why The Mobile Sector isn’t Dying

By Gerard Casazza, Senior Analyst of Corp Development and Strategy for 6D I’ve recently heard many times that the mobile (apps and app development) industry is a dying sector, but through observing the industry I could not see to be even close to a true statement. After hearing this I had no choice but to do some research and put some facts to paper to support that mobile is actually hitting new highs every day. 1. Mobile Application Development Platforms is expected to grow at a CAGR of 38.7% over the period of 2013 – 2018 The mobile application development platform (MADP) market offers tools, technologies, components and services that together constitute the critical elements of a platform. The MADP enables an enterprise to design, develop, deploy, distribute and man ... READ MORE

Military enlists Invincea to beef up Android security

The military is beefing up security on Android based smart devices and has even issued a grant for $21 million dollars this enhances security around data as it sits at rest on these devices. A few things that need to be considered that I have not seen mentioned in these efforts is how the integrity of data from these devices will be managed in transit. It’s one thing to secure data once it’s on a device it’s another thing to ensure and validate data once it leaves the device. One must consider the critical nature of this content especially as it is being used in a military setting. Are the proper protocols in place to secure encrypt and encapsulate data as it being delivered from one device to another? Other things to consider is what if these devices are lost in battle or perhaps during a trip home by a military personal to v ... READ MORE

Looking for an opportunity to lead and innovate? Have a passion for all things technology?

Six Dimensions is a team of hard-working professionals and industry experts who put their hearts into their work. We cultivate an entrepreneurial environment where ideas are valued, respected, and implemented quickly. We hold each other to a high bar and we never settle for second best…. and we have fun doing it too! Immediate Needs for Oracle/PeopleSoft, HRIS, and Taleo Experts. 6 to 12 Month Engagements. Current Openings ... READ MORE

Local Sr. Epic PM/BA Coming Available in Minneapolis Area

From initial implementation and training through ongoing support and optimization, our approach is process focused and IT-rooted. We provide support on Epic software for mid-size and large medical groups, hospitals and integrated healthcare organizations. Our consultants have the software expertise and experience including ICD-10 (International Classification of Diseases, Tenth Revision, Clinical Modification) implementation, Epic system upgrades, and module implementation. Currently we have a local Sr. Epic system PM/BA coming available in the Minneapolis Area. Learn More ... READ MORE

Live App Security Webinar Tomorrow Featuring 6D’s Charles Highsmith

Do you have existing applications or are you building a new one? Attend this technical webinar and learn how to protect your applications from today’s vulnerabilities so they are hack-resilient. Charles is a leading industry expert with over 17 years experience in information warfare, with specialties in cybersecurity threats, and advanced attack methodologies…More or Register ... READ MORE

How to Build a Risk-Driven Information Security Management Program

An ever-changing threat landscape, intellectual property theft, critical data loss, malware issues—the list goes on and on. There are so many repeat security deficiencies and world events like hactivism and cyberwarefare prevalent today that compromise the security and integrity of your business. How can you ensure that your data is protected? How do you decide which controls are relevant to your business and how do you manage those security controls? Where do you start? Download Recording Now ... READ MORE

Heroes of the U.S. Economy: Six Dimensions Recognized with Inc. Magazine’s Hire Power Award

Six Dimensions announced today it is featured in the 2nd annual Inc. Hire Power Awards,recognizing the private businesses that have generated the most jobs in the past three years. Six Dimensions generated over 50 jobs from January 1st, 2012 to June 30th 2013, ranking the company #8 in the top company size category. More ... READ MORE

Hackers obtain 3.6 million Social Security numbers & Unencrypted Credit Cards

Hackers were not only able to steal 3.6 million social security numbers, but they managed to steal an additional 16000 unencrypted credit card numbers. The hacker first attacked the system in August. This goes to show that many enterprises out there can be compromised for months and not even know it yet. This is why we always recommend a full recognizance of an enterprises network, and resources including all applications, and 3rd party connections. The fact that the credit card numbers on the server were in the clear shows a huge lack of security insight and potentially means that there are many other major security issues within that particular environment. Encrypting sensitive data properly is application security 101 and the fact that these things happen all the time shows exactly why enterprises like these need to proactively monitor ... READ MORE

Got Insights? Real-Time HR and Financial Dashboards and Metrics

New HR and Financial OBIEE Dashboards and metrics allow State of Minnesota staff to have visibility into KPIs, insights in near real-time. Real-World Challenge: The State of Minnesota government is the gateway for providing direct government-to-citizen public service provision and interaction. The State needed assistance in replacing a legacy data warehouse built in the early 1990′s. This project operated out of Minnesota’s Management and Budget office. Many agencies depended on the data from MMB office —over five thousand users. The State of Minnesota decided to implement PeopleSoft Financial Supply Chain Management (FSCM) v9.1 and also do an upgrade of their PeopleSoft HCM ERP systems. While implementing these solutions, the data warehouse was also being replaced with PeopleSoft EPM v9.1 and OBI ... READ MORE

Cincinnati Location Opening

To better serve our East Coast and Midwest customers Six Dimensions has announced the opening of a Cincinnati, Ohio location. This location will be centered around emerging web technologies and web content management with a focus on Adobe ADEP / WEM (formally CQ5). This location can be reached at: (513)289-5944 or info@sixdimensions.com ... READ MORE

Dealing with DNS Changer

DNS Changer is a malware that attackers use to modify a users DNS settings to a separate set of rouge DNS servers this is critical because an attacker that controls your DNS server also controls the content that is served to the user this makes it possible for attackers to use your sessions to unintentionally surf sites that contain other malicious content. One major issue that can occur is web-masking which could potentially allow an attacker to route websites that you browse on a daily basis to their own mock sites for example online banking sites, email, social network sites. Prior to this being used for malicious use it was primarily used by attackers to control the ad settings for search sessions. Controlling your search session would allow an attacker to embed ad network affiliate id’s that would allow them to earn money off o ... READ MORE

What Core Components are Involved in a Data Solution?

Author: Nicholas Varner, Big Data Senior Solution Architect As I mentioned in the “Kicking Off a BI Project – Who is involved?” post, some of the key personnel of a BI project are: Data Architect, ETL engineers, Business Analysts, Report Developers, Application Developers, Data Governance, and a Project Manager, which all have the common goal of providing stakeholders with the right information at the right time. The goal of this blog post is to get you thinking about the strategies that can provide the best Data Solutions for your company at the best price. The Data Solutions strategies we will detail include Data Integration, Data Storage, Web Analytics, Reporting, and Database as a Service (DaaS) solutions, also re ... READ MORE

Creating a Column Control in Adobe CQ

Column Controls in Adobe CQ allow authors to easily create and configure column-based layouts.  This guide shows advanced users and developers how to create and configure a column control.   Step 1: Add a Parsys to a Component JSP Include a Paragraph System into the page’s component JSP.  You can use any node name for the path, the resource type is ‘foundation/components/parsys’ &lt;cq:includepath="par"resourceType="foundation/components/parsys "/> Step 2: Configure the Paragraph System To add a Column Control to the Paragraph System, you will first need to update the design.  Select design mode on the sidekick. Design mode allows you to configure the Paragraph System for all pages with the same template.  Onc ... READ MORE

Adobe CQ5 Service Level Agreement

  Looking to implement Adobe CQ5? Are you maximizing Adobe CQ5 with its complementary products and integration capabilities? With an Adobe CQ5 SLA from Six Dimensions, you gain access to an Adobe partner with a proven best-in-breed CQ5 certified team who knows how to implement quickly and take advantage of the additional WCM capabilities Adobe continues to add on. Participate now and your business will gain the expertise you need to support an expanding, multichannel digital world – quickly, efficiently and cost effectively.   Accelerate deployment of enterprise integrated applications and products Eliminate recruitment costs and time to acquire experienced CQ5 developers Leverage the Adobe broad offering like S ... READ MORE

CQ5 Project Start-Up Package

Six Dimensions will be offering a two week hands-on “CQ5 Project Start-Up Package”. Package engages a CQ Project Manager / Solutions Architect as well as a CQ Developer over video and screen sharing. Package can be customized as needed. Week 1: On-Boarding with CQ Licensing and Product Overview Intro to Daycare, Ticketing and CQ Documentation Project Planning and Scoping Technology Solutions Strategy Basic Architecture and Configuration Content Editing Strategy Week 2: Getting Inside CQ CQ Author Training (Hands-on), CQ Developer Training (Hands-on), Code Promotion and Team Strategy, AGILE/SCRUM Coaching, Infrastructure and Technical Environment Building ... READ MORE

CQ Project Planning: Development Strategy

Several questions come up to me consistently while I move from client to client as a technical PM or solution architect. I felt compelled to list my responses to these questions so that you ask yourself the same questions every time you approach a new CQ5 project. MY response questions often lead to longer brainstorming sessions. Here are a few situations. Components Initial Topic: What gets “componentized” versus consumed, integrated or remain separated with regard to CQ5? My Response: How reusable is this functionality? What is the current life-cycle of this development? How frequently is it changed? How modular does this need to be? Will this functionality be replaced by another ... READ MORE

CQ5 Expert Available for Engagements

CQ5.x Senior developers available! Matthew.sullivan@sixdimensions.com We have two Senior Adobe/Day CQ developers available for direct clients only! Expertise in CQ Customizations, Tags, OSGI Bundles, JSR-170, CRX, Templates, Authoring, Publishing, Workflows, Sling, Java, REST, JavaScript, JSP, CSS, Apache, Sling, CRX, batch content importing, project management, technical leadership and solutions design. Matthew Sullivan, Sr. CMS Practice Director  Six Dimensions San Ramon, CA. Cell (408) 771-3543 Phone (925) 365-1457 ... READ MORE

CQ5 Development Setup: Maven Build and Deployment

Six Dimensions and 6D-Labs are pleased to announce its 2nd CQ webinar “CQ5 Development Setup: Maven Build and Deployment” The second of ten webinar series, will explore: • Project Structure • Creating a Maven Reactor • Creating Bundles • Multi-Project Setups • IDEs and Tools • Maven Plugins • Eclipse Plugins • Continuous Integration • Creating a Single Package • Deploying to CQ This webinar is complete, click here to download the video! ... READ MORE

CQ Scheduling Basics

In CQ there are a few ways to perform a scheduled action.  I will go over basics for the easiest way to achieve this, a custom class running a cron expressions to fire off a run() method. An alternative to this tutorial would be to create a scheduled or event workflow that is triggered at a specific time, I won’t go over this but as with most things there is usually more than one way to reach your goal. Scheduling in CQ uses the open source Quartz library, part Sling Commons:‘org.apache.sling.commons.scheduler.Scheduler’.  The scheduler can be used in two ways, by registering a job method or even more simply by using the scheduler’s whiteboard pattern supported by scheduler’s API. Let’s begin, we will start with the more simple of the two ways to use scheduler in a ... READ MORE

CQ 5.5 Webinar Registration

THIS WEBINAR HAS ENDED, check out our resources page for the video and recap. Six Dimensions is pleased to announce Developers “Fast Track” to Adobe CQ5.5.  “An insider’s look at CQ 5.5” with Bryce Acer! The first in the 10 webinar series, will address some of the technical advantages and challenges associated with upgrading from 5.4 to 5.5. This Webinar is intended for technical audiences, I.e., developers and architects who have existing experience with 5.4. When?             May 17, 2012 Time?       &nb ... READ MORE

Creating a Better Web User Experience for Intranets & Portals

Author: Travis Estell is a content management system (CMS) web developer and consultant at Six Dimensions. He has led complex content management integrations and implementations using the Adobe Experience Manager platform for over five years.   6D White Paper: The paper identifies ways to create a better user experience for the visitor and author, and  5 key considerations when moving to a new CMS for Intranets and Portals. Moving to a Content Management System Websites are usually moved into a content management system (CMS) for a couple of reasons. The new CMS usually provides a much better user experience for the person editing the site, often called the si ... READ MORE

Building a Risk-Driven Information Security Management Program

Over the past few years, external threats have increased significantly through the birth of hacktivism, a rise in Cyberwarfare activities, increases in computer theft, and spread of malicious software.  In the same span of time, we have experienced a boom in new technologies like social media, mobile devices, and cloud services.  Although these technologies provide great promise for reduced costs, increased productivity, and new business functionality, they also introduce serious vulnerabilities that must be mitigated.  All of these threats, and the security controls used to mitigate these threats, must be managed through an Information Security Management Program (ISMP); otherwise, the impact of security controls to the overall security posture of the organization may be diminished.  A good ISMP ensures the most optimum use ... READ MORE

6 Core Competencies You Need When Starting a Business Intelligence (BI) Solution

Author: Nicholas Varner, Big Data Senior Solution Architect If your company stores large amounts of data, it surely would benefit from implementing a BI solution. BI solutions, when implemented properly, provide your business with meaningful and accurate insights by retrieving the data you want in a timely manner. That is all fine and good in theory, but where should your business begin? Can you report off of your current billing source, ad server, or any other source of data? What is the best way to store data and what tools should we use to produce reports? How do we know the data we are getting is accurate? Does our solution scale? The questions can ... READ MORE

Be the next great Senior Adobe CQ Hire! $10k signing bonus!

Are you an innovator? Are you a leader? Are you passionate about integrating business needs and technology solutions? Do you know someone? At Six Dimensions, you can cultivate your expertise, use your Adobe platform knowledge to the fullest extent on exciting projects, or re-invent yourself, without ever having to leave the company. Contact Todd Davis, CMS Technical Resource Director at (480) 347-6277 or email todd.davis@sixdimensions.com. ... READ MORE

AppSec Threats and Mitigation Webinar

What you DON’T do about application security WILL harm you! Free Live Webinar: April 23, 2013 10:00 a.m PST Hosted By: Six Dimensions Do you have existing applications or are you building a new one? What you DON’T do about application security WILL harm you. Attend this information packed webinar and learn how to protect your applications from today’s vulnerabilities so they are hack-resilient. During this webinar, you will learn about: Why application security is a must in every development shop The most recent application security trends and threats Open Web Application Security Project (OWSAP) top ten application attacks and threat classifications The top mobile risks ... READ MORE

Approaching the Mobile Experience in a CMS Project (CQ5)

Two main points: It’s not about what the CMS is capable of doing; its more about what the business wants to achieve. A good CMS Technical Architect (TA) can draw that out early. If you don’t plan for mobile delivery upfront you might pay for it in the long run. Commentary: I have had several project managers and in-house technical architects ask mobile objective questions relatively late in the project life-cycle. First off, it is difficult to retroactively adhere to some of these mobile techniques in CQ5 that are outlined by Adobe in their documentation and presentations. The key word is retroactively. Typically these are foundational business objectives to “mobilize the CQ site”. There are 2 dominant ... READ MORE

Apple Security Team at Blackhat

Apple had a ninja like appearance at Blackhat and I say ninja because they left almost as quick as they came. They have managed to avoid the security conference for 15 years and when they finally decided to attend their briefings seemed to be nothing more than regurgitated snip-lets from old documents and RFC’s the talk itself compared to the other Blackhat talks like “Owning bad guys {and mafia} with javascript botnets” was uninspired and did not go into any real deep detail on iOS security, and the future of how iOs will handle different security issues with that being said the Apple security team did not even stay for the after lecture Q&A session they side shuffled out a side door n ... READ MORE

6D Global Technologies, Inc. Advances in Adobe Digital Marketing Solution Partner Program

New York, NY – January 29, 2015 – Six Dimensions, Inc., a 6D Global Technologies, Inc.(NASDAQ: SIXD) company serving enterprise-class organizations worldwide with premier digital marketing solutions, announced today its promotion to Business Partner within the Adobe Digital Marketing Solution Partner Program, a partner program for companies that provide digital marketing solutions or technology. With its strong advisory, consulting and delivery capabilities in the digital marketing space, Six Dimensions will expand its partnership with Adobe in creating integrated marketing, commerce, analytics and customer experience solutions. These solutions will help large organizations to better understand and win new customers, increase share and differentiate through targeted, relevant and con ... READ MORE

Adobe Enterprise Solution | Community Partner

Six Dimensions has entered the Adobe Enterprise Solution Partnership Program at the Community level. We are looking to expand within ADEP / WEM / CQ5 and FLEX development space and continue to build our relationship with Adobe. Six Dimensions has delivered success in CQ5 for large organizations from initial build-out to staff augmentation. More about our WCM Services. More information about Adobe Digital Enterprise Platform (ADEP) andWeb Experience Management (WEM) /CQ5. ... READ MORE

New Pleasanton Office

Six Dimensions announced today that the company has moved its San Ramon, CA. office to Pleasanton, CA. The Pleasanton office will allow Six Dimensions to expand its California location to accommodate the mobile applications team, the web content management architects and developers—as well as its finance and human resources professionals. The location will also serve as a home office to the company’s virtual team when collaborating with clients and partners in the Bay Area. The new Pleasanton office neighbors some of the world’s most innovative technology leaders including Oracle, Cisco Systems and Workday. With employees in the US and Canada, Six Dimensions also has regional offices in New York, N.Y., and in Cincinnati, OH. The Cincinnati location operates as the regional office for the company’s Digit ... READ MORE

6D Labs “Center of Excellence” Announces Adobe/Day CQ5 Service Level Agreements (SLA)

6D Labs “Center of Excellence” is proud to announce the availability of short and long term service level agreements for its Adobe/Day CQ5 clients starting August 01, 2012.   6D Labs, Based in Cincinnati, Ohio, and a division of Six Dimensions, headquartered in San Ramon, California, has invested in a new state of the art facility where it will locate 12 certified CQ developers and architects who’ll remotely serve and provide remedial maintenance for the CQ Platform. As an Adobe Partner, Tejune Kang, President of Six Dimensions said 6D Labs supports many CQ clients who often require component development, workflows, template design and re-design, localization, and migration. Hiring outside consultants to accomplish these tasks can be costly, sometimes in the tens of thousands. But, 6D Labs has developed an SL ... READ MORE

6D is Following Adobe's Transition

Source: Investopedia “Even if the worst does not come to pass for Flash and the rest of Digital Media, Digital Marketing looks like the growth engine for Adobe – particularly as there hasn’t been all that much organic growth at Adobe in a while. Lucky for Adobe, there should be real opportunities here in providing tools to allow companies to optimize content (and ads) for their audience/customers. Analytics and optimization are increasingly important to developers, particularly with the transition to mobile devices (what works/looks good on a big screen doesn’t necessarily translate to a smaller device).” Read more:  ... READ MORE

6D Global Technologies, Inc. Wins Mobile Marketing Contract from NBA’s Oklahoma City Thunder

New York, NY – May 18, 2015 – 6D Global Technologies, Inc. (NASDAQ: SIXD), a premier digital business solutions company listed on NASDAQ, announced that the Company has been appointed by the Oklahoma City Thunder, a National Basketball Association (NBA) team, to create an interactive, mobile edition of the team’s quarterly Thunder Magazine to expand engagement with fans, accelerate media advertising ROI, and immediately reduce operational costs. Under the terms of the contract, 6D Global has created an iPad version of the Thunder’s quarterly magazine, available on iTunes today. 6D Global will also develop and launch a mobile application of the magazine for smartphones, tablets, and other mobile devices in June of this year. Services will inc ... READ MORE

6D Welcomes David S. Slovina, Vice President of Recruiting

Six Dimensions is pleased to welcome David S. Slovina as Six Dimensions’ Vice President of Recruiting. He is a 20 year veteran of the US Navy, retired as a Master Chief Navy Counselor,  responsible for as many as 230 recruiters throughout the continental US. Prior to joining the 6D team, Mr. Slovina served as Vice President of Recruiting for Mission Essential, since April 2008. Through his guidance and leadership, Mission Essential attained 3.3 billion in sales in less than 10 years, recruited over 12,000 professionals in over 20 countries, and was one of the INC 500 fastest growing companies in America. Mr. Slovina receive ... READ MORE

6d Blogs 6D Global Technologies, Inc. to Join Russell 2000(R), Russell 3000(R), Russell Global, and Russell Microcap(R) Indexes

NEW YORK, June 15, 2015 (GLOBE NEWSWIRE) — 6D Global Technologies, Inc. (Nasdaq:SIXD), a premier digital business solutions company listed on NASDAQ under stock symbol “SIXD,” today announced that the Company is set to simultaneously join four Russell indexes including the Russell 2000®, Russell 3000®, Russell Global, and Russell Microcap® at the conclusion of the Russell indexes annual reconstitution on June 26, 2015, according to a preliminary list of additions posted June 12 on Russel ... READ MORE

6D Global Technologies, Inc. Announces Partnership with Elastic Path Software Inc., E-Commerce Software Leader

New York, NY – April 22, 2015 – 6D Global Technologies, Inc. (NASDAQ: SIXD), a premier digital business solutions company, today announced a partnership agreement with Elastic Path Software Inc., an e-commerce software company helping the world’s biggest brands generate more revenue. Under terms of the agreement, 6D Global will deliver innovative solutions based on Elastic Path Commerce and Elastic Path for Adobe Marketing Cloud. Elastic Path technology will enable 6D Global customers to maximize revenue from their goods, services, and content with solutions that drive outstanding customer experiences, engagement, and conversion. “6D Global is excited to offer customers an e-commerce solution that integrates seamlessly with any web content and marketing cloud ... READ MORE

6D Global Technologies, Inc. Recognized on Fast 100 List for Exceptional Growth Companies by San Francisco Business Times

Annual list features the fastest-growing 100 Bay Area Companies for 2014 Pleasanton, CA – October 20, 2014 – Six Dimensions, Inc., a 6D Global Technologies, Inc.(NASDAQ: SIXD) company, announced today that it has been recognized for the second year in a row for exceptional revenue growth among Bay Area Companies by the San Francisco Business Times. The San Francisco Business Times’ Fast 100 is an annual ranking of the fastest-growing private companies in the Bay Area. For over a decade, Six Dimensions has been providing digital marketing and digital technology consulting services to the world’s leading enterprises. Working collaboratively with enterprise marketing, sa ... READ MORE

6D Global Technologies, Inc. Initiates Trading on the NASDAQ Stock Market, Stock Symbol “SIXD”

New York, NY – December 9, 2014 – 6D Global Technologies, Inc. (NASDAQ: SIXD), a premier digital business solutions company serving the digital marketing and technology needs of enterprise-class organizations worldwide, today announced that 6D Global Technologies Inc.’s common stock will initiate trading on the NASDAQ Stock Market on Friday, December 12, 2014, under the stock symbol “SIXD.” “For many years, 6D Global Technologies, Inc. has provided a full suite of digital business solutions to a long list of satisfied Fortune 1000 companies, as well as other marquee customers. As a NASDAQ listed company with rapid growth in sales and earnings, 6D Global Technologies is well positioned to continue to execute consistently and deliver technical excellence to ... READ MORE

6D Global Technologies, Inc. Hosted Digital Marketing Event for Bay Area Marketing Leaders

Six Dimensions, Inc., a 6D Global Technologies, Inc. (NASDAQ: SIXD) company serving enterprise-class organizations worldwide with premier digital marketing solutions, held a digital marketing event with Adobe Systems Incorporated, Exploring Digital Transformation, on February 11, 2015 at the San Francisco 49er’s new Levi’s Stadium in Santa Clara, California, host to Super Bowl 50 in 2016. The event focused on trends in the digital marketing space and cloud specific marketing solutions that help marketing leaders measure and optimize digital experiences to accelerate marketing performance and ROI. Adobe Solution Architects guided attendees through a complete end-to-end digital marketing solution using Adobe Marketing Cloud and Six Dimensions’ consulting and de ... READ MORE

6D Global Technologies, Inc. Becomes Business Plus Partner Within Adobe Digital Marketing Solution Partner Program

NEW YORK, May 7, 2015 (GLOBE NEWSWIRE) — 6D Global Technologies, Inc. (Nasdaq:SIXD), a premier digital business solutions company, today announced its advancement to Business Plus partner within the Adobe Digital Marketing Solution Partner Program, a partner program for companies that provide digital marketing solutions or technology. 6D Global will continue to expand its partnership with Adobe in creating integrated marketing, commerce, analytics, social, and customer experience solutions. These solutions help large organizations gain insight into their customers, build personalized campaigns, and manage their content and assets. The Adobe Digital Marketing Solution Partner Program is designed to create a successful relationship between Adobe and technology integration companies to help build customer s ... READ MORE

6D Global Technologies, Inc. Appoints Chief Financial Officer

New York, NY – December 23, 2014 – 6D Global Technologies, Inc. (NASDAQ: SIXD), a premier digital business solutions company serving the digital marketing and technology needs of enterprise-class organizations worldwide, is pleased to announce that Mark Szynkowski has been appointed Chief Financial Officer. In his role, Mr. Szynkowski will report to Tejune Kang, CEO for 6D Global Technologies, Inc. and will have overall responsibility for leading all aspects of corporate finance for the company. Mr. Szynkowski will be based in the Company’s executive office in New York. Mr. Szynkowski has over 24 years of experience with 18 plus years in managerial roles for private and publically held companies in diverse industries with domestic and international locations. Most recently ... READ MORE

6D Global Technologies, Inc. Announces Partnership with Elastic Path Software Inc., E-Commerce Software Leader

New York, NY – April 22, 2015 – 6D Global Technologies, Inc. (NASDAQ: SIXD), a premier digital business solutions company, today announced a partnership agreement with Elastic Path Software Inc., an e-commerce software company helping the world’s biggest brands generate more revenue. Under terms of the agreement, 6D Global will deliver innovative solutions based on Elastic Path Commerce and Elastic Path for Adobe Marketing Cloud. Elastic Path technology will enable 6D Global customers to maximize revenue from their goods, services, and content with solutions that drive outstanding customer experiences, engagement, and conversion. “6D Global is excited to offer customers an e-commerce solution that integrates seamlessly with any web content and marketing cloud ... READ MORE

6D Global Technologies, Inc. Announces Exclusive North America Reseller Partnership Agreement With I-ON Communications Co., Ltd.

NEW YORK, April 15, 2015 (GLOBE NEWSWIRE) — 6D Global Technologies, Inc.(Nasdaq:SIXD), a premier digital business solutions company, today announced that it has signed a reseller partnership agreement with I-ON Communications Co., Ltd., a leading provider of cloud content management solutions in South Korea. Through this agreement, 6D Global will be the exclusive I-ON reseller partner in North America I-ON Communications Co., Ltd. is the number one provider of content management solutions for businesses in South Korea including Hitachi, Samsung Card, Samsung Insurance, Samsung Electro-Mechanics, Toyota City, SK Telecom, Korea Telecom, LG U+, Bank of Korea, ING, Hana Bank, Shinhan Card, B ... READ MORE

6D Global Technologies Announces Partnership with Google

6D Global Technologies, Inc. (NASDAQ: SIXD), a premier digital business solutions company, today announced its partnership with Google as a Google Analytics Premium Reseller and Certified Partner. The partnership is a result of the Company’s recent acquisition of SwellPath, a web analytics and digital marketing services provider based in Portland, Oregon. Google Analytics Premium is designed to meet the needs of large clients with high-volume data needs. With dedicated support, increased monthly limits, greater processing power, fresher data, and the ability to add more custom variables, Google Analytics Premium offers a powerful analytics solution for enterprise clients. “6D Global is excited to provide our customers with the ability to collect customer insight, and look holistically at how they are engaging audiences ... READ MORE

6D Global “SIXD” ranks #5, Biggest Percentage Gainers in US Market, WSJ

6D Global “SIXD” ranks #5, Biggest Percentage Gainers in US Market, as published in the Wall Street Journal today, up 27% in its initial debut on the NASDAQ on Dec. 12 See: http://quotes.wsj.com/SIXD ... READ MORE

Future-Proof Your Google Analytics Implementation with Google Tag Manager

There has been a lot of talk about Google Tag Manager (GTM) lately, Google even said that Google Tag Manager is serving twice the amount of traffic since April 2013, so I think it’s safe to say that GTM isn’t going anywhere. If you don’t know what Google Tag Manager is, I’ll let Google explain what it does: “Google Tag Manager lets you add or update your website tags and mobile applications, easily and for free, whenever you want, without bugging the IT folks.” Yes, that’s right, without bugging the IT folks. There are plenty of excellent resources for describing the functionality and features of  ... READ MORE

7 Steps to Pushing JSON Structured Data using Google Tag Manager

Semantic markup and structured data, tools that were once a secret weapon of cutting edge marketers, are fast becoming requirements for modern SEO. Algorithm updates like Hummingbird and ever-evolving features like the Knowledge Graph have made this stuff mission critical for many of SwellPath’s clients. Yet, if that’s the case, why do so few of my clients actually have functional structured data on their sites? One simple reason: implementing inline microdata is hard! The few who have been able to execute have had plenty of guidance and multiple rounds of QA to get things in ship shape. Unfortunately, most marketers don’t have the time for that! Thank goodness that’s all changed. Earlier this year, Google announced that it was going to start to support JSON-LD as ... READ MORE

Get Up and Running with Google+ Interactive Posts

If you’ve ignored Google+ for this long or consider it anything other than a legitimate inbound marketing channel, your opinion is about to change. The age of Google+ Interactive Posts was quietly ushered in months ago, with little fanfare. In fact, barely anyone seems to have noticed. So allow me to introduce you to Google+ Interactive Posts! Interactive Posts, meet Marketers. Marketers, meet Interactive posts. Before I leave you two to get to know each other better, let me tell you a bit about Google+ Interactive Posts, their background, and why they’re so dang awesome. What Google+ Interactive Posts Are All About Interactive posts on plus allow you to enhance your existing sharing by embedding a clickable Call to Action in your post. They’re pretty easy t ... READ MORE

Author Rich Snippets Tutorial – 2013 Edition

Note: This is a revamped, rewritten, and updated version of our original 2012 article & tutorial on Author Rich Snippets. All information is now current for 2013. Happy reading! Contents What are Author Rich Snippets? Why are Author Rich Snippets important? Setting up Author Rich Snippets On-Page Link Option Head Link Option Let the Magic Happen What are Author Rich Snippets? An author rich snippet is an enhanced result in Google’s SERPs that features a person’s photo/headshot, their byline (i.e. name), and a link to their Google+ profile. Google pulls this information into their results for one simple reason: users tr ... READ MORE

Tutorial: Google Analytics Core Reporting API using Magic Script

Recently, I’ve had the opportunity to use the Google Analytics Core Reporting API, Nick Mihailovsk’s Google Analytics Report Automation (Magic) script, and Google Spreadsheets to automate a few of our clients’ monthly reports. Wow. What a time saver. Sure, the initial setup and configuration of the queries takes a little time, but it’s time that is recouped instantly when you go to run the report for the first time, and subsequent times, thereafter. In this blog tutorial, I’m going to cover the configuration of the Google Analytics Core API Report Automation Script, and how to run a query using it. In my next blog post, I’ll show you different tricks to clean up the data and automate you ... READ MORE

Universal Analytics: When You Should Be Using hitCallback

How do you know that your tracking beacon i.e. your event, virtual pageview, social interaction, is making it into Universal Analytics? You can look at real-time reports, and/or use a tool like HTTPFox (Firefox) or Google Analytics Debugger (Chrome) to monitor the request. In this blog post, I want to show you what the errors look like when a request doesn’t have enough time to make it to Universal Analytics and how we can GUARANTEE the request makes it to Universal Analytics every time. The Issue Once upon a time, I would see the request getting sent with NS_BINDING_ABORTED: ... READ MORE

7 Strategies For Remarketing Lists for Search Ads (RLSA)

Google AdWords has recently released out of beta their newest product feature, Remarketing Lists for Search Ads (RLSA). RLSA allows advertisers to combine their current Remarketing lists with search ads to bring intent, context, and audience together.   Bingo! I win What exactly does that mean? Until now we’ve had to play a guessing game based on search behavior to not only identify our audience, but also determine when and where they intend to take action. Sometimes we nail it on the head, bu ... READ MORE

Google Tag Manager – Inspecting and Configuring Auto Event Tracking

At the Google Analytics Summit 2013, Google announced that Google Tag Manager can now track event automatically. Whoop, my work here is done! This has been probably the largest feature push out to Google Tag Managers since GTM itself, so I to advance your understanding of Google Tag Managers auto event tracking, and provide you with a few tips on how you can navigate the GTM dataLayer. If you’re new to Google Tag Manager, specifically Auto Event Tracking, Justin Cutroni published an excellent article titled “Bye Bye JavaScript! Auto Event Tracking with Google Tag Manager“. It’s a grand article and all; however, I was a bit taken back by the title as for a lot of Google Tag Manager implementations, espe ... READ MORE

Google Analytics Virtual Pageviews a la Google Tag Manager

It seems that everybody has an itch to jump on the Google Tag Manager bandwagon lately, which means learning yet another way to implement Google Analytic. We’ve been doing lots of Google Tag Manager analytics implementations, and although they are fun (yes I’m sick) and challenging, GTM is still relatively new, and documentation is sparse. So in an effort to increase the available resources for developers and implementors, I’ve put together a quick post on implementing Google Analytics Virtual Pageviews through Google Tag Manager. It’s a piece of cake. If you’re absolutely new to Google Tag Manager, I recommend watching the Google Tag Manager video or checking out any of these other excellent blo ... READ MORE

7 Steps to Own the Search Results for Your Name

Auditing & optimizing search results for your personal brand If you’re online, you have a personal brand. This is a lot like a company’s brand but for people; you don’t have to be a huge corporation to have a “brand”. So, what makes up your personal brand online? The social profiles you’ve created. What people are saying about you on social networks, on news websites, and elsewhere. Content you’ve written like articles and blog posts.   These things create your pers ... READ MORE

6D DPS Entitlement System

Increase sales team performance with the industry’s best and easiest-to-use Adobe Digital Publishing Suite (DPS) entitlement solution The 6D DPS Entitlement System product integrates with Adobe’s DPS platform and allows non-technical administrators to easily manage user and group entitlement for multiple apps in the organization. This product sets itself apart from the competition with its intuitive and easy to use web interface that is accessible on any device (mobile and desktop). 6D’s product is available in SaaS, Private Cloud or On-Premises options. The 6D DPS Entitlement System makes managing use ... READ MORE

8 Simple yet Powerful RegEx Concepts for Google Analytics

In this post, I’m going to introduce you to eight powerful RegEx concepts that you can use in Google Analytics to create better advanced segments and filters. These were chosen based on things that we at SwellPath use most to get actionable data that drives decisions. At the end of this, you should be ready to harness the power of RegEx to get that high-value site data from your GA profiles. “Everybody stand back! I know regular expressions!” Last week, I had the pleasure join the Portland Google Analytics User Group as a “Subject Matter Expert” teaching peo ... READ MORE

How to Conduct a Social Media Competitive Analysis

As marketers, we are now living in a world where social media is fully integrated in our brand strategy and communication plan. We’re all using social and have a presence on the various social sites; it’s now time to start really analyzing what type of social communication is effective and what’s not. Because of its low cost, many times brands jump into social media without setting tactical goals or developing a strategic plan. This can be extremely harmful as social media is at its core, one of the most effective media vehicles to influence and engage with your customers. It’s also a valuable source of information for brands as it’s ... READ MORE

New Title Tag and Meta Description Character Lengths

For SEOs, its rare to see best practices remain the same year over year. Desktop title tag and meta description best practices have somewhat remained steady over the past five years. Not anymore! We’re seeing that Google is starting to decrease the number of characters being shown in desktop SERPs, preparing for the convergence of the desktop and mobile experience. Back in January, 6D Global's SEO Team Manager, Mike Arnesen, wrote a post on Optimizing Mobile Page Title and Meta Description Length, and we’re seeing these character limit recommendations for mobile also be true for desktop. Based on what we’re seeing in Google SERPs, title tag and meta description character limits have decreased 21% and 23%, respectively. You n ... READ MORE

Code Corner: Spice Up DPS with HTML Overlays

The typical Adobe DPS app workflow involves having a designer create beautiful, largely static layouts in InDesign, which get packaged up into folios to distribute through Adobe’s publication system. This allows us to produce new content for apps without necessarily needing to submit a new version of the app to stores. InDesign has some pretty impressive tools for animating, transitioning between and laying out your content, but it assumes you have all your content at the time you’re creating your layouts. If you want to have new content in the app every day, someone is going to need to spend time in InDesign laying it all out and publishing new folios each day.  Then when users ... READ MORE

Can’t get your DPS app to talk to your Entitlement Server? Check your SSL Config

When verifying your Entitlement setup during the whitelist process, Adobe does NOT verify that your SSL configuration is functioning properly. If SSL is misconfigured, authorization requests from within the app will fail, saying that the connection could not be established. If you’ve gotten through the whole Entitlement setup process, yet your app is displaying an error like ‘problem establishing connection to host,’ checking out your SSL configuration should be the first place you look. Most web browsers are a lot more forgiving of ‘partially configured’ SSL setups than DPS is, so it’s likely that your config has been wro ... READ MORE

Code Corner: Example Technique for Randomizing Ads in a DPS HTML Overlay

One of the DPS apps we’ve worked on recently was a digitally reimagined take on a print magazine. At the 11th hour, the client decided that they needed to include the ads they’d already sold for the print edition into the app version of the magazine, but didn’t really provide any requirements for how they should display. Ordinarily, we’d design the experience of the app around the fact that there’d be ads in it, but because the app had already been architected and laid out without ads in mind — and there wasn’t any time to rethink everything — we had to get a little bit creative to get these print ads into the app. ... READ MORE

Code Corner: Adventures in DPS Entitlement

Here at Storycode, we’ve been in the process of implementing some neat things that take advantage of Adobe’s DPS Direct Entitlement Server.  The first step of this was to set up the Direct Entitlement Server in the first place, which can be a pretty drawn-out ordeal if you don’t understand what to expect at each stage of the process. I’m documenting everything I went through here in hopes that someone else may have an easier time getting up and running than I did. Here’s a very brief list of steps: ensure you have a place on the internet to host your server ensure that you have a working S ... READ MORE

Code Corner: A Word Search for DPS

It first showed up in Fast Company’s March 2012 iPad edition and designers everywhere salivated. The scratch off, or what many call the “wipe away effect,” because of it’s widely recognized use by Fast Company. But as much as designers and developers love the effect, how many truly good uses are there for the effect? After three years of looking at the Fast Company cover, we found one. A word search. As a general rule, we at Storycode have found that instead of forcing an effect into a folio where it might not fit, or where it might just be a little bit of sparkle without much usefulness, we hold on to these effects until a use-case appears. And when a client ... READ MORE

Storycode Acquired

On March, 5 2015 6D Global Technologies, Inc, a premier digital business solutions company, acquired Storycode. 6D Global Technologies, Inc. (NASDAQ: SIXD) serves the digital marketing and technology needs of enterprise-class organizations worldwide. 6D Global Technologies offers a full suite of services and solutions to help large organizations optimize digital business channels and create better experiences for their customers, resulting in increased revenue growth and market share. 6D Global Technologies’ services include web content management, web analytics, marketing automation, mobile applications, business intelligence, mark ... READ MORE

Stop Swiping

The Digital Publishing Suite (DPS) was first created as a way for magazine publishers to get their content onto the iPad. So it’s not a surprise, that swiping was built in as a way to get from article to article. Whether it was done to mimic flipping a page, or because it made it easy for publications to take their existing pages and port them over to the iPad, the end result is the same: bad user experience. The examples are everywhere. Arrows pointing down, pointing right. Don’t swipe back or you’ll find yourself at the end of an article, instead of the beginning. Or worse, you will find yourself in the middle of an article, making it difficult to know where you are. No ... READ MORE

Adobe DPS 101: For Print Designers Transitioning to Digital

Using the Adobe DPS (Digital Publishing Suite) to make a phone or tablet app is just like using any other product, it’s a tool. Strong creatives will be successful regardless of the tool they use. It is about how you use the tool. If you are not familiar with DPS, print designers love it because it allows you to create apps in InDesign. It allows designers to create and update apps without needing developers. That said html code can be added, as well as integrating a range of other programs and plugins, i.e. Edge Animate, After Effects, Salesforce . .  . Storycode began as a platform agnostic shop. A few years ago we made the d ... READ MORE

Designing in Different Languages

I am not a multilingual designing professional. In fact I would call myself a neophyte when it comes to designing for languages other than my native english. However, In the time I have spent designing across multiple languages I have observed some interesting challenges and solutions that brought up discussions around the office. While working on the Sotheby’s Anthology app we created an overview section for the entire app in seven different languages. We initially laid out each page in English, utilizing the majority of the page space with lots of breathing room for the text and images. This was all great until we started dropping in the text in different languages. Some languag ... READ MORE

Featured App: Durocher

Client: Artist Louise Durocher Use case: Portfolio Device: iPad Platform: Adobe DPS Folio size: 127MB Background: Trying to put Louise Durocher’s incredibly powerful work into words does not do it justice, yet the way she begins each sculpture is by doing just that. She writes a poem, the story of the piece, and then she begins. On the surface her work seems so varied, from marble to steel to plexiglass to pencil and paper. However, each piece, large or small, shares a deep emotion that is undeniable. Louise is much like that too. Working ... READ MORE

Featured App: Semicon

Client: Greater Portland Inc Use case: Trade Show Tool Device: iPad Platform: Adobe DPS Folio size: 4MB Background: This summer Storycode helped Greater Portland Inc (GPI) add another folio to their growing list of digital sales enablement and marketing tools. The latest piece was used to inform computer and electronics manufacturers about the Greater Portland region during the Semicon trade show in San Francisco. This was the first time GPI used iPads at a trade show to help them sell the strengths of the region. Their driving force: the overwhelmi ... READ MORE

What we learned at PePcon

Last month Scott and I spoke at PePcon in Chicago. It was our first time attending this Publishing and e-Publishing conference. Anne-Marie Concepción and David Blatner have done an amazing job creating this completely sold out InDesign specific conference. A constant theme we heard was how many creatives have been charged with turning their print material into engaging and interactive digital publications. It was exciting to see just how wide the use cases are spreading. We saw many examples of corporate communication, catalogues, presentation tools, programs and portfolios from all sizes of businesses. However, seeing how many creatives were expe ... READ MORE

Adobe Ink & Slide: Workplace Toys

A little over a year ago the Storycode team was at the Adobe MAX conference when Adobe announced their first foray into hardware development with Project Mighty and Napoleon. Now, after waiting over a year for the public release, a name change, and an excruciating week waiting for delivery, I finally received a well designed package with Ink and Slide inside. Unboxing the package is a treat. It really feels like you are being presented with an exclusive piece of technology. The stylus (Ink) and the ruler (slide) are on top when you open the box. Below are the charging case, charging cable, getting started book and a little Creative Cloud branded screen cleaning cloth (reminding the owner t ... READ MORE

What to do with all your paper prototypes?

When we first started Storycode, we decided our time would always be split into three buckets:     Agency - Digital publishing projects (client work) Studio - Original content and products (our own pet projects) Lab - Pushing the frontier (transmedia solutions) the next thing coming, multi-screen publishing We knew that to be really effective, we needed to be constantly exploring, playing, making mistakes. And that why the Studio and Lab buckets were so important to us.   Unfortunately or luc ... READ MORE

What’s New with DPS Version 31

V31 was recently released and we are pretty excited about the new changes. With each release comes new functionality and features that improve the overall platform. We are very lucky to work on a platform that is consistently improving. Here are some of the new features that have been added in v31: Scheduled background downloads Until now, background downloads had to be triggered manually. But now, you can schedule your background downloads. Giving your users new content while their device is asleep. This is going to help your workflow because now you will be able to schedule your folio publish, background download and notification to readers. Required Folio Updated ... READ MORE

4 Things to Think About Before Building an App

Determine Your Goals The very first thing you need to do is determine your goals for your app. Do you want to increase brand awareness? Increase sales? Train your sales team? Create a more effective presentation tool? Narrow your list down to one primary goal and one secondary goal. Keep this within reach at all times. Maybe print it out and put it on the wall. Or even consider a tattoo. Whatever it is, you need to constantly refer back to these goals throughout the entire development process. Having a goal in mind is going to help you narrow your expectations, organize your content, and measure success. Whenever you come across a tough decision to make on ... READ MORE

The One Quality that Will Make or Break your Mobile Apps: Empathy

At Storycode, much of the work we do with our clients and the Adobe DPS Enterprise platform is changing their mindset from print and web to mobile. Often, we find that of all the experiential possibilities the Adobe DPS platform enables, most fall back on a reflexive strategy to reuse print collateral, add some interactive elements and call it a day. This approach does follow the path of least resistance, but it results in the app of least engagement. As I’ve mentioned in  ... READ MORE

What does Applinks mean for your app?

On Wednesday at Facebook’s yearly F8 conference, they announced Applinks, a new initiative to make deep-linking between apps easier for developers and a better experience for users. Unlike on the web, there is not an easy way to navigate and link between applications. For example, if a friend sends you an awesome show they just found on Hulu it will open in a browser instead of opening the app. Most likely you will not be signed-in so to view the show you have to find the Hulu app and search for the recommended show.  How frustrating. ... READ MORE

Q&A with Kat Topaz

Excerpts from PNCA design students asking Kat Topaz how she made the transition from Print to Mobile, March 2014   Describe your change from print design to mobile? I wasn’t looking to change. I love publication design. My entire career has been about publication design one way or another – either as an art director, or creating/redesigning magazines, newspapers, annual reports or setting up templates and production processes to be successful. I love working with writers, photographers, illustrators and printers. Some of it is the rush of the short deadlines and small budgets which can produce some of the most creative solutions. But a big part is ... READ MORE

Making the Most of your Analytics

Adobe analytics tracks users while they are interacting with your app. This includes both on and offline usage. Adobe provides base-line analytic that will allow you to view important data such issues downloaded, total viewing time, article views, and more. This data will help to paint a picture of the way your users are interacting with your app. Analytics look a little intimidating when you first open it and start diving in. Sure you can easily see how many times the app has been downloaded and how long a user is spending with the app but to really understand the metrics, start by asking yourself a few important questions. Not all of these will be relevant to your app. It will depend o ... READ MORE

Limitations to Video on Android Devices

While most things are possible and supported on Android devices, there are some major limitations to video within an app. These limitations include: Inline videos An inline video is a video that plays within your app and does not open to full screen. These are very useful and we have used them to add interactive elements without acting like a full video. However, currently this is not possible for Android devices. Consider using a still image or an animation in Edge Animate instead. Stop video on last image Because the video will play full screen instead of inline, the image within your page will always show the im ... READ MORE

Sales Material: 10 Reasons to Consider Mobile Over Print

We compiled the following list based on feedback from our clients. This list refers specifically to apps built using the Professional or Enterprise level of the Adobe DPS platform for smartphones and tablets.   1. Be Green  Not only can you add saving money for printing and shipping to the obviously benefits of not using trees, but you are also not limited by a page count. Run as much content as you want, while you’re at it, run as much color as you want too.   2. Extend/Protect Your Brand Whether your sales material is for internal purposes or customer facing, having the ability ... READ MORE

DPS Use Up with Continued Growth on iPhone

Adobe recently announced new user metrics for their Digital Publishing Suite products, including average time spend with issues and preferred operating systems. These numbers, released by Adobe, are a result of the new user-side analytics that are available as part of version 28 of DPS. It is unsurprising that iOS leads Android and Kindle Fire downloads, due to DPS Single Edition only being available for iPad. But it is still s ... READ MORE

Best Practices for Button Sizes

Recently, I started a discussion in the Adobe Digital Publishing group on LinkedIn about best practices for button size for all mobile devices. This stemmed from a project we are currently working on where we are taking an existing tablet app and recreating it for iPhon ... READ MORE

Power of Design

Today there was a lot of talk around our office about the look of iOS7.  It leaves me with the same feeling of overstimulation as I feel in a mall  —  with too many bright colors, too many sounds, too many flashing lights, all fighting for you attention. As we debated iOS7′s design success, I kept hearing the argument that I’d “get used to it”. In contrast, tonight I treated myself to reading the latest issue of National Geographic on the iPad. It was a treat to enjoy a magazine when I wasn’t distracted. As I went through the issue (from front to back, something else I don’t do often) a tear ran down my face. I had become so deeply engaged, that ... READ MORE

DPS Seminar with Storycode’s Kat and Scott

Join Storycode’s Kat Topaz and Scott Landis on April 26th for a seminar at Portland’s Pacific Northwest College of Art where they’ll share their experiences and accomplishments using Adobe’s Digital Publishing Suite. Register Here. From PNCA’s website: *** With Adobe DPS, designers can step directly into mobile publishing and deliver impactful stories and products for interactive, multi-media platforms. Working on the DPS platform will engage your design skills, passion for story-telling and professional proficiency with Adobe InDesign. Rather than learning new software or code, Adobe DPS will leverage your design experi ... READ MORE

New Art at the Storycode Office

Thanks to our new interns we have new artwork up around the office. ... READ MORE

New DPS Version Released

This morning I was on the Adobe Digital Publishing Suite Version 28 release webinar. Along with the expected UI changes for iOS 7, Adobe surprised us with a few new features that makes DPS an even stronger platform for app development, especially for sales enablement and brand engagement apps. Here are my first thoughts about my favorite new features. As we play with them, we’ll be sure to post with examples of the new features. My favorite new feature is the n ... READ MORE

Reinventing the Retail Experience

We’ve all used iPads to sign our credit card receipts. And most of us have ordered food on an iPad in a restaurant as well. But this week Nike is rolling out the first of two new in-store apps on the iPad. This is a significant event, similar to the installation of that first ATM — which forever changed our habits.   Now when you walk into a Nike flagship store, you will find an iPad mounted to the wall among a dozen sports bra choices. Tap its screen and it will help you determine exactly which sports bra will fit and support you best. And while this seems like a natural use for the iPad, it signals the beginning of a new retail experience that will rev ... READ MORE

Top Five Reasons to Rethink the Mobile Experience of Your Corporate Magazines

Content consumption habits have radically shifted in the last few years, as well as content strategies for corporate publications. Magazine editors must keep in lock-step with how readers prefer to engage with content in print, online and on mobile devices. Preferences can be further differentiated for readers who consume content on smartphones vs. tablets that also must be taken into consideration. As readers shift from one medium to another, they expect more than the availability of content on their devices. They also expect the experience of that content to be contextually relevant to the medium. In our analysis of Fortune 500 companies that publish B2B and B2C corporate magazines, over 75% have ch ... READ MORE

Building Brands with DPS

Recently Storycode attended Adobe’s Digital Publishing Summit in New York City. The first day focused on publications, the second on brands. What really struck a cord with me, was how in the course of a year, a platform that had been designed to help publications create digital editions was almost overshadowed by companies seeking an edge against their competition. Fortune 500 companies have embraced tablets in staggering numbers, with 94 percent having deployed or in the process of deploying a tablet strategy. And the majority of those companies have identified that they need to have separate strategies for mobile and web. While publications continue to have what every brand wants (content and an ... READ MORE

Innovation in Tablet Publishing

I’ve been speaking a lot lately about what’s possible with DPS. Last week, after one of my presentations a designer came up to me and said that before seeing some of Storycode’s apps, he had never considered designing two different layouts for portrait and landscape viewing in a single app. I’ve been thinking about this all weekend. And it has left me with a rather dramatic realization.   Everyone has their own process they go through when beginning a project. Some people spend a lot of time looking at what’s out there before beginning a project. I do not. And like how I prefer to work in a white room with no music (so that the color and tone of t ... READ MORE

DPS Publishing Tips: Fighting Android Fragmentation

A growing challenge for any tablet app, but especially for a magazine apps, is delivering the same quality content to a variety of devices. Android tablets presents the greatest challenge, having multiple screen dimensions, including three different sizes in the Kindle Fire family alone. This problem is compounded by the differing system bars device manufactures bake into their customized versions of the Android OS. System bars vary as large as 75 pixels down to as small as zero pixels, meaning two devices with 1280×800 dimensions (the most popular Android tablet screen dimension) from different manufactures can actually require different renditions of an app. This can equate to dozens of different renditions. ... READ MORE

Tablet Ownership Growing, Not Stopping

A survey by the Pew Internet and American Life Project, conducted in November 2012 and released in late December 2012, reports that 33 percent of Americans over the age of 16 now own a tablet or e-reader. This represents a 15 point jump from the December 2011 survey. While the overall statistics are interesting, it is the breakdown between tablet and e-reader ownership increases that are most important.  The December 2011 survey was the f ... READ MORE

A Storycode Experiment: How to treat book-length copy in an app

Here at Storycode, we take pride in re-imagining narratives with our apps. Our goal is to produce apps for mobile devices that truly live in the intersection of content and dynamic user experience. Sometimes this means thinking about the components of our stories in new ways. Since image-driven navigation is king on mobile devices, finding the right balance between a visual narrative and the written word is vital. While text is absolutely primary to the story, especially when adapting our apps from printed books, it can be secondary to the user experience, even when working within iBooks Author or InDesign DPS. One of our apps that we believe succeeds in balancing the relationship bet ... READ MORE

5 Tips for Successful App Design

1. Choosing the right platform -  It comes down to one simple question: how much utility vs. design interactivity are you shooting for? Unless you answer that, you’re letting the platform dictate what is possible.   2. It’s not a website -  The focus of an app is most successful when it is clear and narrow (think a pair of shoes, not a whole wardrobe). Recreating a website or trying to be all-inclusive makes no sense.    3. Leverage your site - In many cases a website/app combo can be the perfect compliment. For example, we recently created an app for an artist. Her work included both sculpture and print ... READ MORE

Storycode is Part of Design Week in Portland

Our very own Kat Topaz was invited to contribute to Portland’s first Design Week happening from Oct 9th through the 13th. If you are in town be sure to check out all the great stuff happening as part of Design Week and stop by our exhibit showing off our Stratford Shakespeare Festival App. ... READ MORE

Top 5 Learnings from Running a Mobile App “Startup”

On Sept 24th, I had the pleasure of speaking at the Mobile Portland meetup at Urban Airship. I took the time to share the most surprising lessons I learned in trying to reinvent our company into a startup this past year. In case you missed it, here is a link to the video of the presentation: http://www.ustream.tv/recorded/25689682 And if you want to view the slide deck, I posted it up to Slideshare here:  http://www.slide ... READ MORE

August Webinar-Stravaganza!

Tis the season for webinars! 6D will be presenting some great webinars in August.  6D DPS Entitlement System Webinar Tuesday, August 18, 201512:30-1:00pm EST / 9:30-10:00am PST First up, Jason Porath and Cecelia Wren will be leading a webinar introducing the new 6D DPS Entitlement System. This product integrates with Adobe’s DPS and Publish platforms and allows non-technical administrators to easily manage user and group entitlement for multiple apps in an organization. We focused on its intuitive and easy to use web interface that is accessible on any device. If you are using Adobe D ... READ MORE

Featured App - OKC Thunder Magazine

6D Mobile/Creative worked closely with OKC Thunder to create a game-changing iPad experience for their quarterly publication. Not simply a reimagined magazine, the app is a true mobile-first experience with player stats, HTML games, social media and great stories. See the case study here. Downl ... READ MORE

Proof of Concept and Success Criteria Agreements

Why do deals hit the skids after a POC is delivered? Shouldn’t a POC generate more traction, excite the business decision makers and accelerate a close? We have some tips to handle these situations when we’ve made all the right moves, but the deal stalls.   Tip 1: Who controls the deal? Typically, proof of concepts are delivered to influencers, and in the case of DPS deals, this means creatives. We call them “sirens of the sea,” because they’ll lure you in with genuine interest, but let you crash on the rocks when it comes to representing the value to business decision makers. Ultimately, you want to ask yourself the question, “Who is in control of this deal?” Influencers love and appreciate the platform ... READ MORE

Fiddle or Servlet?

Introduced by Adobe Consulting is an extremely useful set of tools for AEM. If you haven't installed them already, I'd highly recommend it: ACS Tools Of particular note herein is the AEM Fiddle tool. Whereas we have wonderful free tools on the web such as JSFiddle or Codepen wherein we can mock things up and sketch out some code before dropping it in our repo, there really wasn't a good solution for AEM-specific "fiddling" until now. The AEM Fiddle tool does exactly what you'd expect: Enter some JSP code Run said JSP code See result in real time That alone makes the tool worth having but why stop there? Adobe has also baked in the following features: Can run JSPs, Sightly templates, ECMAScript, Handlebars templates, Javascript Te ... READ MORE

Hooking up OAuth to DPS

One goal of pairing OAuth with an Adobe DPS app is to create a smooth transition between a 3rd party login (such as Salesforce, Twitter, or Facebook) and the private or subscriber-only folios in your DPS app. The reality is that the developer is often on the hook for a lot of work to make this happen. 6D's Entitlement Server for DPS provides normal login and registration functionality directly through DPS apps, but now it also supports OAuth login and registration. To make it easier on developers and clients, I've created an open source Javascript library to simplify the use of Adobe's OAuthRedirectService which drives OAuth functionality in DPS apps. First, some background on what Adobe gives us to handle OAuth requests from a DPS App. The OAuthRedirectService object's purpose is to start and stop listening for any requests to a cu ... READ MORE

Chinese HACKERS attack U.S

By now everyone has read the news about Chinese Hackers infiltrating U.S government websites. Unfortunately this has been happening for years.  Prior to these attacks there were instances where Chinese hackers attacked the U.S for fun and profit and U.S hackers have targeted China in the past due to their political stances on varying agendas primarily their views on human rights or lack there of. Why is this such news now?  The main reason is it seems that the attacks are more military targeted than any previous attacks.  The Chinese seem to blame the U.S for instigating these attacks because of the established United States Cyber Command Center.  They see this as an open invite it’s the you spy we spy mentality obviously whats good for us must also be good for the Chinese.  Ultimately what all this comes down to ... READ MORE

Starbucks Schools Other Retailers on Mobile Payments

By Olga Kharif on August 23, 2012 http://www.businessweek.com/articles/2012-08-23/starbucks-schools-other-retailers-on-mobile-payments Since May, Penn State student Sarah Espinoza has been hitting her local Starbucks (SBUX) in State College, Pa., for double-tall, no-water soy dirty chais two to three times a day, about double her usual rate. This spring she downloaded a Starbucks mobile app that lets her pay with an iPhone 4S and notifies her of special offers. “They send me daily specials, and that m ... READ MORE

6D Global Technologies, Inc. Acquires SwellPath, a Leading Analytics, Search Engine Optimization, and Digital Advertising Firm

New York, NY – March 23, 2015 – 6D Global Technologies, Inc. (NASDAQ: SIXD), a premier digital business solutions company has acquired SwellPath, a professional services firm that delivers digital analytics, search engine optimization (SEO), paid media, and digital advertising services to medium and large scale enterprises across North America. SwellPath is expected to be immediately accretive to 6D Global’s revenue and earnings in 2015 and beyond. SwellPath enables clients to align and maximize their digital marketing initiatives by tracking both online and offline marketing campaigns and performing more effective targeting to enhance return on investment. SwellPath complements 6D Global’s overall strategy to provide full-service digital marketing solutions to it ... READ MORE

6D Global Technologies, Inc. Appoints Tandy Harris as Vice President of Global Human Resources

6D Global Technologies, Inc. (NASDAQ: SIXD), a premier digital business solutions company, is pleased to announce that Tandy Harris has been appointed Vice President, Global Human Resources. In his role, Mr. Harris will report to Tejune Kang, CEO for 6D Global Technologies, Inc. and will lead all corporate human resources functions with a strong focus on talent management, company culture, and scalable processes. Mr. Harris will be based in the Company’s executive office in New York. Mr. Harris brings extensive executive leadership experience to 6D Global Technologies, Inc., along with a proven track record of leading and establishing fast-paced, team-oriented, and results-driven cultures that enable strong corporate performance. Mr. Harris has over 18 years of global HR strategy ... READ MORE

Tejune Kang, CEO, Featured on East Bay Connects Campaign to Bridge Digital Divide

Tejune Kang, CEO featured on East Bay Connects, a campaign to bridge the digital divide in the East Bay. Hear Tejune speak to why affordable broadband is essential to the East Bay, 6D’s headquarters, and starting and running a business. http://ow.ly/s1MzE ... READ MORE

Business Intelligence Guru

Drive better decision making through leadership leveraging technology such as Business Intelligence using Data Warehouse solutions such as OBIEE (Oracle Business Intelligence Enterprise Edition) with PeopleSoft EPM or other database platforms. Let me explain how this works. More about ERP ... READ MORE

Using XMLBeans in Adobe CQ

Apache XMLBeans is a powerful tool for reading, writing and updating XML files.  XMLBeans dynamically creates Java classes based on an XSD Schema.  This makes it powerful and easy to use, however can make it more complicated to integrate into OSGi based applications, such as Adobe CQ, as the XML Element to Java Class mapping uses the Java Classloader. This guide shows you how to integrate XMLBeans in your Adobe CQ application.   Step 1: Install XMLBeans Bundle Download and install  ... READ MORE

The Wall Street Analyzer Interview with CEO Tejune Kang

Listen to Tejune Kang, CEO for 6D Global speak with The Wall Street Analyzer. To listen to the interview, click here. ... READ MORE

Web Application Security & Your SDLC

Companies for years have neglected the importance of building security into their Software Development Life-cycle they always have had to deal with security matters once an intrusion happens. Over the years this has shown to cost enterprises billions of dollars in lost income, potential income as well as loss of client confidence. Data securitybreeches have impacted millions of users from having credit card, and social information security stolen to having their personal privacy exploited because of insecure passwords. It is important more so now than ever to look at security from an organic perspective, and to build security from within and not an after thought.  After thoughts are best saved for  missed attractions during a vacation trip not when dealing with ... READ MORE

Wells Fargo Disrupted by Cyber Attack

Wells Fargo was reportedly attacked in the efforts of making a political statement these attacks amounted to the average DDoS(Distributed Denial of Service) attack that have been going on for years. The attack usually originates from outside the country of the attacking systems and are carried on by a botnet. A botnet is hundreds, and some times thousands of systems configured to carry out the same trivial routines in hopes that the distributed efforts of these systems would disrupt access to the victims servers in the form of over utilized bandwidth or a concentrated attack to a particular server function or service.  Properly programmed firewalls typically play the first role of defense in these types of attacks, but now new problems arise that carry old consequences and this is due to the ever changing landscape of online self ser ... READ MORE

6D Global Technologies, Inc. Signs New Digital Marketing Service Contract with Global Technology Leader, Xilinx

New York, NY – February 3, 2015 – Six Dimensions, Inc., a 6D Global Technologies, Inc.(NASDAQ: SIXD) company, announced today that it has signed a new contract with Xilinx, Inc. (NASDAQ: XLNX), the world’s leading provider of All Programmable products. Under the terms of the agreement, Six Dimensions, a leading provider of digital marketing consulting solutions, will support Xilinx’s Global Web Strategy and e-Marketing Teams with strategic consulting and engineering services. The services performed will enable Xilinx to differentiate through targeted, relevant, and seamless customer experiences across multiple devices and channels. Six Dimensions’ Senior Architects and Engineers will build online marketing capabilities leveraging Adobe Experience Manager ... READ MORE

Yahoo Passwords Hacked

Yahoo fails to perform proper Application Security Auditing which leads to Yahoo Email being Hacked Yahoo email services was hacked by a group calling itself “D33D” over 450,000 emails were compromised. The hackers used an SQL injection attack to gain access an older password file on Yahoo’s system. The passwords in this file apparently were not salted just like Linked-In. SQL injection exploits the ability for an attacker to input SQL commands into a query and have them execute because there is no validation. I noticed no other content about this hack really shows how it was done so consider the following SQL query within the following URL http://mail.hackedsite.com/index.asp?id=10 UNION SELECT TOP 1 password FROM admin_login where login_name=’y@hoogle’— This will attempt to use an ... READ MORE

Six Dimensions Named on Inc. Magazine’s List of America’s Fastest Growing Companies

Six Dimensions announced today that it has been named to Inc. Magazine’s Annual Inc. 5000 ranking of America’s fastest-growing companies. Six Dimensions was ranked 651 on the 2013 list and among the elite group of firms representing America’s entrepreneurs. The company also ranked 73 in the top 100 IT services companies and 39 in the top 100 companies in the San Francisco metro area. Learn How ... READ MORE

Release of AEM6 presents need for new features and translation functionality training

Six Dimensions offers Adobe® Experience Manager 6.0 (AEM) Webinar   Six Dimensions will present a complimentary AEM6 (formerly CQ) webinar for developers seeking knowledge to incorporate the major changes and language translation functionality—among other valuable enhancements. The webinar isThursday, May 29, 2014, at 2 p.m. ET. The webinar will be led by Bryce Acer, Senior Solution Architect for Six Dimensions and one of the primary AEM6 architects working with Adobe’s international development team. Together with the Six Dimension’s team, he will share an insider’s guide into the new translation of theapplication programming i ... READ MORE

Three AEM / DPS Tips

I recently created a reference integration between Adobe Experience Manager (AEM) and Adobe Digital Pubishing Suite (DPS). AEM 6.1 ships with an integration between the two tools, along with a reference implementation, Geometrixx Media. This is a very exciting solution, as it allows non-technical authors to publish content to DPS apps. The AEM / DPS Integration provides organizations opportunities to reuse content, more frequent mobile updates and a more consistent, branded experience across web and mobile properties. But of course, this does not come without a few challenges. Hopefully, the following tips will help ease your journey in implementing and AEM / DPS integration: T ... READ MORE

The Communication Firehose

There is a dramatic increase of usage for the term “omni-channel” or “multichannel” marketing. It’s truly the hot button term today. Is it really good for your customers? And therefore your bottom-line? Wikipedia defines omni-channel as … …the use of a variety of channels in a customer's shopping experience including research before a purchase. Such channels include: retail stores, online stores, mobile stores, mobile app stores, telephone sales and any other method of transacting with a customer. Transacting includes browsing, buying, returning as well as pre-sale and after-sale service. [link] In the enterprise marketing space, this concept ... READ MORE

How to add AEM Dependency that is missing from public repository

So you just updated to the nice and shiny AEM 6.1, looking at new functionality and exploring around. Then you decide to tap into the new api documentation. Then reality comes back in, the boss wants to connect a new product into AEM 6.1. Too easy! I'll use a custom cloud configuration. Google to the rescue... Adobe documentation here I come. Oh no! The documentation is a CRXDE Lite tutorial. Following the tutorial and testing it out, the screen explodes into a torrent of letters and characters...stack trace! Who would of thought... Turns out ConfigurationManager is turned off by default for security reasons ... READ MORE

New in Apache Sling: FSClassLoader Console

In AEM 6.1, the default repository based ClassLoader was replaced with the new FSClassLoader (File System ClassLoader).  This ClassLoader offers higher performance and throughput, however it removes a valuable tool for developers to debug errors in JSP scripts. In previous versions of AEM, developers could navigate to /var/classes and drill down through the heirarchy to find the Java file generated from the JSP scripts. In AEM 6.1, as the class and java files are now stored in the filesystem, this is no longer possible. Surprised ! Since AEM 6.1 no more compiled JSP files in /var/classes https://t.co/JYJr7yPiZP #AEM6 — Przemo Pakulski (@pacoolsky) June 3, 2015 ... READ MORE

Changing User Passwords in AEM 6.1 via cURL

In AEM 6.1, there have been a number of changes make to the structure of users.  In older versions of AEM, users could be found under a directory structure based on thier user name.  For example the user admin, would be found at /home/users/a/admin, in AEM 6.1, this has been changed, likely to support a larger number of users without performance issues.  Unfortunately, the method used to create this path does not seem to be predictable, so the path for an individual user is not stable across different AEM instances. Users in AEM 6.0   Users in AEM 6.1 Normally, this isn't an issue.  However, if you want to change the password on a user through cURL, this is a big issue as ... READ MORE

Agile Best Practices Webinar

This webinar covers approaches and best practices in running projects in an Agile Methodology, including: Agile vs Waterfall Agile Terms Project Lifecycle User Story Cycle Lifecycle Retrospectives This webinar gives a great outline of how to run agile projects and the agile methodology, explaining the best practices and providing recommendations based on real world experience. Watch / Download the Webinar ... READ MORE

Whats New in 6.1: Layouting Mode

Responsive Design has been a must have since the web was accessible on the go.  Normally Responsive Design calls for many layers of CSS or a premade javascript based framework. In AEM 6.1, Adobe has added a new feature in an effort to reduce design induced headaches.  Layouting Mode is the proposed feature that allows authors to have control over the responsiveness of components and pages.  There are three pieces play an integral part in providing authors to easily design a responsive page; Layout Container, Layouting Mode, and the emulator. The Layout Container is a newly added component that can now be added to your pages through Design Mode. Simply put the Layout Container is a paragraph system, which can contain other components. When added to a page, the Layout Container provides a grid which can be used to position, and resize, components added into it. The Layout Container may also be used as the default container, taking place the place of the default parsys cont ... READ MORE

New in AEM 6.1: Human Translation API

When AEM 6.0 was introduced, we we were excited to present a webinar on Six Dimensions's contributions to the new Translation API in Adobe Experience Manager. Now, with the release of AEM 6.1, we're excited to introduce Six Dimension's latest contribution in supporting the new AEM Translation API with support for Human Translation. The version 1 of the AEM Translation API only supported machine translation such as the service provided by Google Translate or Microsoft Translate. The latest iteration of the API now supports professional, human translation through a new asynchronous API. This API works by sending the content to the translation connector for translation and polling for updates. Introducing the Lingotek AEM Connector Six Dimensions has partnered with Lingotek, a leading translation service provider to create the first, approved connector for the A ... READ MORE

Improvements to Touch UI in AEM 6.1

The latest version of Adobe Experience Manager, version 6.1, hits shelves today. In case you missed it, the last review I posted of a major release of this product was, shall we say, a bit troubling.  I’m happy to report that AEM 6.1, while not perfect, improves several key interactions in the now-default Touch UI (including how to turn it off). Let’s take a look! Selecting your preferred UI Here was the dialog for setting User Preferences in AEM 6:   AEM 6.0: Attempting to change the default Authoring Mode  I actually couldn’t figure out how to set my Authoring Mode to Classic UI until an Adobe engineer contacted me to follow up on the post (in case you were wondering, that drop-down ... READ MORE

Repository runmodes now tied to instance runmode.

In AEM/CQ versions past, as in prior to AEM 6.0 and 6.1, if a publish instance was to go down and time was of the essence, you could always shutdown the author and copy the author repository over top of the publish repository. Once you brought up the publish instance, it would behave like a publish instance and you'd have all the content of the author instance with no need for long and costly activation of basically everything. You could work out the finer details later right? Those days are long gone. It appears according to this documentation from Adobe and my real world testing the run mode is somehow embedded into the repository at first run of the instance. Subsequently, changing the run mode of the start script, will not change the run mode of the repository and the instance will behave as the instance it was cloned from. What this means is that even though the ... READ MORE

Welcome AEM 6.1!

Adobe just announced the release of the latest version of Adobe Experience Manager, AEM 6.1. 6D Welcomes AEM 6.1! In celebration of the release of AEM 6.1, 6D's Thought Leaders have contributed a number new posts. Improvements to Touch UI in AEM 6.1 ... READ MORE

Three New Time-Saving Features in AEM 6.1

At Adobe Summit 2015, Irina Guseva and Cedric Huesler hosted a session titled "What’s New in AEM Sites 6.1: Top 10 Hottest Features." The first feature on their list of 10 is “Are We There Yet?” and describes features that have been added to AEM’s Touch-Optimized UI.  The techniques available in 6.1 make it significantly faster and easier for content authors to navigate, search, and edit pages in their sites.  AEM’s Touch-Optimized UI was first introduced in AEM 5.6.0 and then extended in 6.0.  Here are the three new time-saving features in 6.1’s Touch-Optimized UI: 1. Use arrow keys to select pages in Siteadmin > Columns view In the Touch-Optimized UI, go to the siteadmin (http://localhost:4502/sites.html/content) and choose a site or page.  Click the area in the upper right-hand corner click wh ... READ MORE

AEM6.1 - Sync Users/Groups on Publishers

AEM6.1 comes with OSGi tools/services where we can easily sync users/groups between unclustered publish instances (Figure 1). This feature is especially useful for leveraging AEM communities capabilities. Figure 1. I find this feature is useful when We don't want to store users, which are supposed to reside on publish instances only, on author. In community site manager, on author instance, we want to be able to set permissions (i.e. moderators or group members) for those users/groups (which reside on publish instances only). On author instance, we want to assign access or ban users from accessing publish instances. Information and instances used for this exercise For the sake of this exercise, I have 1 author insta ... READ MORE

Emberjs.adaptTo(AEM)

Emberjs and AEM Emberjs is a popular framework for ambitious web applications. It can be used to create Single Page Applications or SPA. Emberjs can be used with AEM. Here is a simple approach to getting Emberjs working inside AEM. Getting Started Follow the tutorial from RequireJS and AEM 6. KISS. If you don't want to go through the complete Requirejs tutorial is is okay to just do the maven archetype portion, but will make this tutorial slightly more difficult to follow. If you do not want to follow the tutorial, checkout out github. Note: the github version is a working project and may not work by the time you view it. Getting Emberjs Download Emberjs and Template Compiler (I used debug ... READ MORE

CQ Haiku: Analytics

web leads submitted without any analytics trees fell silently I'm sure many of us in the Web Development world have run into this scenario: you're 70-85% of the way through a website implementation and someone says "oh, hey... we need to add analytics."  So a ticket is added into the backlog, a s_code.js file gets added into source control and some klugy JavaScript library gets cobbled together to track most (but not all) of what visitors do on the website. In the end, the business kind of gets what they want and after a couple iterations and some lost data, you're eventually pretty much tracking everything which needs to be tracked. This process gives one of the most important considerations in building a website a short shift. Without proper and complete analytics tracking how can the organization track and demonstrate the ROI on the (probably significant) investment in a new web platform? Detailed analytics tracking also allows analysts to derive inf ... READ MORE

Requirejs and AEM 6. Kiss.

Following the KISS principle, let's get requirejs working inside AEM. Table of Contents Getting Started with Requirejs and AEM Setup Create project using maven archetype Getting Requirejs Download Requirejs Setup Requirejs Setup jQuery ... READ MORE

Creating a site footer in AEM 6 using Sightly and Sling Models

The Adobe-developed and recently-donated-to-Apache-Sling project Sightly project has been out for a little under a year now, alongside Adobe Experience Manager 6, and has slowly been amassing documentation and gaining presence. The server-side templating language aims to give a facelift to the web development facet of Java-based software stacks, Adobe's AEM chief among them. This post will run the reader through a sample implementation of a site footer using Sightly, showcasing and describing a few of its features. It will also make use of Sling Models as the back-end tool to grab JCR data (nodes, properties) into useful class models. What we want is an authorable footer serving all pages of a language branch of a content tree. Let's assume ... READ MORE

CQ Haiku: JCR vs. Sling

Adapt to Node like Assembly inside Java Use Sling API Quite often I see code, especially from less experience developers, with something like this: Node node = resource.adaptTo(Node.class); String property = null; try{ property = node.getProperty("myProperty").getString(); } catch (RepositoryException re){ log.error("Exception accessing myProperty", re); } Or even scarier, there may be just a global exception handler for the particular method. Either way, this code is a lot more fragile than it needs to be. If the property myProperty does not exist this can throw a PathNotFoundException or if there's any other problem it will throw a RepositoryException. You also have to handle multiple null checks and ensuring the property value is the correct type. The Sling API on the other hand, handles most relevant exceptions by doing things like allowing default values or returning null if no val ... READ MORE

AEM-Lingotek Translation Connector Webinar

Are you using a custom or legacy integration for managing your translations in AEM?  Are you interested in supporting both machine and human translation? Do you want to make your translation process easier, cheaper and more reliable? If so the AEM-Lingotek Translation Connector Webinar is for you! Now it's easy to quickly translate your content directly from within Adobe Experience Manager (AEM) using the new Lingotek - Inside AEM Connector. Developed by Six Dimensions, an Adobe Business Partner and Lingotek Integration Partner, users will be able to access translated content, nominate content for translation, and even offer to translate content themselves, all without leaving their site! ABOUT THE WEBINAR Thought Leaders: Center of Excellence (AEM Technical Architect) Brian Warner (AEM Technical Architect) Calvin Scharffs (Lingotek Translation Expert) This webinar is the seventh in our  ... READ MORE

Invalid CEN Header (bad signature)? We can fix that.

Here recently I was tasked with grabbing content from a client's production systems to install in our dev system so the developers could test their code against real conent without worrying about damaging production content should things go wrong in testing. Everything went well until I tried to upload the package to our development instance of AEM, in which case I was met with this cryptic error message from CRX Package Manager: After almost an hour toiling around with this error and expecting it to be a corrupted zip file I finally discovered the cause. The development instance was running a 32 bit version of Java by some oversight probably on my behalf. The environment that originally packaged the package was running 64 bit Java. To correct this and allow my package to be uploaded to the CRXDE Package Manager, I simply upgraded the development instance to the same vers ... READ MORE

OSGi Fragments, Fragment Host and AEM 6. Where's the bundle?!

Recently, I had the opportunity to upgrade a project to AEM 6.0 sp2. I did the usual updating maven dependency versions, but no matter what I tried I could not get a Fragment to start. After further investigation, I discovered two important changes made to AEM 6 ... Important changes to AEM 6 Maven-bundle-plugin "wrap" goal I upgraded the maven-bundle-plugin to version 2.5.3. After doing so, the project would no longer build and kept telling me wrap goal is no longer supported. I removed the wrap goal and the build ran successfully. Fragment Host bundle name After the build was successful, I checked to ensure the fragment had been loaded in the system/console. Fragment was only installed. After some time and digging I found this: In CQ 5.6.1, looking ... READ MORE

Six Dimensions + Storycode = Mobile Success

Six Dimensions just announced the acquisition of Storycode, a leading Digital Publishing Suite (DPS) solution provider and creative agency.  I'm excited about this and you should be too! As a technologist, seeing the potential of bringing 6D's AEM expertise together with Storycode's creativity and expertise in DPS allows us to create scalable, connected and flexible DPS apps, powered by the content engine of AEM. DPS is a powerful tool for publishing content to multiple mobile apps across all of the major mobile platforms. When you combine this publication platform with the content management power of AEM enables enterprises to have non-technical users quickly and consistently publish content to ... READ MORE

Embedding Oak Index Configurations into a Package

AEM 6 ships with a new repository, CRX3 which is based on Apache Oak, a subproject of the Apache Jackrabbit project.  This repository promises significant performance increases over CRX2, however it does require a bit more work to setup.  Unlike CRX2, CRX3 requires you to explicitly declare which fields will be indexed.  If a field is not indexed, you will see an error like the one below in the error.log and significant performance degredation: 16.01.2015 13:56:45.206 *WARN* [0:0:0:0:0:0:0:1 [1421434528059] GET /content/client/en/products/product.3.json HTTP/1.1] org.apache.jackrabbit.oak.spi.query.Cursors$TraversingCursor Traversed 660000 nodes with filter Filter(query=SELECT * FROM [client:type] AS s WHERE ISCHILDNODE('/etc/catalog/products/PRODUCTID') UNION SELECT * FROM [client:type] AS s WHERE [client:id] = 'PRODUCTID', path=*, property=[client ... READ MORE

Taking Advantage of Git Branch Descriptions

If you're anything like me, you may accumulate a sizable number of branches locally over time. Based on old standards and what I'd consider some good practice, my branch names always follow the same format: myLDAPName/Issue# For example, jboyle/1641. While in my case this maps directly to a JIRA issue and is short and easy to type, it isn't very descriptive and after creating a number of branches, it becomes challenging to remember what branch contains what work without looking the issue numbers up in JIRA. Sure I could use more descriptive names for the branches themselves but there are limitations here. For example, you cannot have any spaces in your branch name so you might end up with a name like jboyle/1641-create-new-user-registration-flow. Further, you now have to type all of that each time you need to switch to that branch or perform many operations on it. Enter git descriptions. As of git 1.7, a new flag has been added for branches: ... READ MORE

ModifiableValueMap Not Found: Considerations in Using ModifiableValueMaps in an API

So let's just say you are designing an API which allows both reading and writing of attributes for a Resource.  Of course, you want to use consistent code to persist the values, so you use the (relatively) new CRUD features in the Sling API to both get and set the property values.  To save code, you might use a ModifiableValueMap for both operations, which works great in author as an administrative user.   The Problem At some point, you'll put your code in publish or test with a user with limited permissions and then: the dreaded null pointer. Of course, at this point, you need to track down the ... READ MORE

Accessing Request Variables in Sightly

You can implement some interesting stuff in Sightly, the newest templating language for Adobe Experience Manager, including Tower of Hanoi.  At the same time, there are a few practical applications which are not available in Sightly, including accessing request scoped variables in Sightly.  While Gabriel's suggested approaches in the Stack Overflow post are absolutely correct in this situation, there are still certain situations where request variables can be ... READ MORE

Adding non-string properties using Sling Testing Tools

Recently, I was creating integration test following this article. Everything was working out nicely but then I couldn't figure out how to create anything other than a String data type in the JCR. I was specifically trying to create a Date data type. I found a nice document about the sling post servlet and Date properties. This showed the proper format for Date String but all the examples where for HTML forms. I tried formatting the Date Strings accordingly but still only Strings where being saved.With help from Center of Excellence, he pointed out that I needed to use @TypeHint ... READ MORE

Escaping the Dreaded VerifyError

Recently (read early this afternoon) I was doing my best to beat my head against the desk until something useful spilled out.  The problem I was having was with a relatively old, but frequently updated codebase where recently certain random services would not start. The project had recently updated from Java 1.6 to Java 1.8 and at some point, the problem occurred but had not been noticed immediately as it only affected a small subset of the services.   When I checked in the OSGi console, it appeared the service was registered and all of the references were resolved and no errors were caught in the error.log. Even more oddly, other services which had the same @Component and @Service SCR annotations were not affected.   Finally, I checked the application specific logs and found an extremely puzzling message being lo ... READ MORE

Sling Models for Fun and Profit

Recently, I finally had a chance to leverage Sling Models for a new project.  If you are not familiar with Sling Models, they allow developers to inject methods and fields based on resource properties, other resources and OSGi services.  For those developing in AEM 6, Sling Models are available as part of the default installation, for those on older versions of AEM / CQ5, Sling Models are available as downloadable bundles on the Sling website.  Sling Models are a great way to do more with less code, thus you can "profit" by avoiding the costly technical debt from the large amount of boilerplate code required to access Sling content through POJOs or the spaghetti code when intermingling business logic for retrieving the same data directly ... READ MORE

6D Global Technologies, Inc. Named on 100 Most Promising Oracle Solution Providers List

Six Dimensions, Inc., a 6D Global Technologies, Inc. (NASDAQ: SIXD) company, announced today that it has been named as one of the “100 Most Promising Oracle Solution Providers for 2014” by CIOReview Magazine. Six Dimensions, a provider of digital business consulting services, has been transforming large organizations over the last decade by helping them make better decisions based on data insights, resulting in increased revenue and market share.CIOReview100 is an annual honor for the top 100 Oracle Solution Providers in the US. ... READ MORE

Creating Custom CQ/AEM Workflow Process Step

It's no secret that CQ/AEM Workflows are quite powerful, but what happens when the default process steps aren't what you need? In a case like this you need to create your own custom process step. In this article I will detail the steps you need to take in accomplishing this. 1) This tutorial is going to be completed in java, drill down into the Java portion of your code base and create a java file. 2) Anytime I create something that is going to appear in the Felix Console I like to label it properly. 3) Now implement "WorkflowProcess" and override the "execute" method. 4) As you can see the "execute" method gives you 3 different variab ... READ MORE

Six Dimensions Ranks 29, Bay Area’s 100 Fastest-Growing Private Companies 2013

We are excited to be recognized by the San Francisco Business Times for the Bay Area’s 100 Fastest-Growing Private Companies. Six Dimensions ranked 29 on the 2013 list, with revenue jumping 283.8 percent from 2010 to 2012.  When asked the question, “What was the decision that most influenced fast growth?” Tejune Kang, President and Founder of Six Dimensions said, “Never settle for mediocre results.”…  Read More San Francisco Business Times Article, October 15, 2013:  We live in what is arguably the center of the entrepreneurial universe. Sure, ... READ MORE

Inc. Magazine's Hire Power Awards recognizes Six Dimensions as a leading job creator

San Ramon, California (October 25, 2013) – Six Dimensions, a privately held provider of expert technology consulting services announced today it is featured in the 2nd annual Inc. Hire Power Awards, recognizing the private businesses that have generated the most jobs in the past three years. Six Dimensions generated over 50 jobs from January 1st, 2012 to June 30th 2013, ranking the company #8 in the top company size category. “We’re proud of the work we’re doing, and as a ... READ MORE

9 JCR-SQL2 Queries Every AEM Developer Should Know

JCR-SQL2 queries are useful items in every AEM Developer's toolbag.  They are relatively quick, aren't deprecated and have a familiar SQL like grammer. JCR-SQL2 queries can be invoked from the JCR API: Session session = ...QueryManager queryManager = session.getWorkspace.getQueryManager();Query query = queryManager.createQuery("{QUERY}", Query.JCR_SQL2);QueryResult result = query.execute(); or through the Sling API: ResourceResolver resolver = ...Iterator<Resource> result = resolver.findResources("{QUERY}", Query.JCR_SQL2); Although there is an official specification for JCR-SQL2, there aren't a ton of really good resources out there nor good references for finding examples of JCR-SQL2 queries.  Below are some queries I've found useful and I think every developer should have as a reference.   ... READ MORE

New from Apache Sling: JSP XSS Protection

Cross Site Scripting or XSS represents a serious threat to site owners and users and can be very difficult to properly prevent, especially given the weak tooling available in the JSP specification. Many times, developers depend on the <c:out /> tag from JSTL, however this tag does not provide robust XSS protection. On Friday, the Apache Sling Project released a new version of the Sling JSP Taglib, version 2.2.4 which contains new functionality help to developers thwart XSS attacks.   The new release contains one new Expression Language (EL) function and one new tag, both for encoding text to prevent XSS attacks.  The new features use the OWASP Enterprise Security API to ensure that th ... READ MORE

New Training Services: AEM Developer and Content Author Courses

Six Dimensions announced today that it has expanded its training services, My6D Training, to both potential and existing customers who are adopting the Adobe® Experience Manager (AEM) solution. AEM incorporates the web content management technology formally known as Adobe CQ.  The new My6D Training courses are designed to help enterprises maximize their return on their software investment. Training courses, descriptions, and registration information can be found at My6D Training at www.6dglobal.com/resources/training. Courses are offered at a competitive price for content authors and developers at Six Dimensions’ 6D Labs in Cincinnati, Ohi ... READ MORE

AEM6 Translation API Webinar Recording

AEM6 Translation API Webinar Recording:Do you want to learn more about the new changes to translations available in AEM 6? Are you interested in machine translation?  If so, the AEM6 Translation API Webinar is for you! Led by Bryce Acer, one of AEM6′s primary architects and a 6D Technical Solution Architect, this webinar is the sixth in our series of AEM webinars and will provide an insider insight into the new Translation API available in AEM6. This webinar is intended for technical audiences, and is helpful for develo ... READ MORE

Six Dimensions Named on CIO Review’s 100 Most Promising Technology Companies List for 2014

Six Dimensions Named on CIO Review’s 100 Most Promising Technology Companies List for 2014Annual list features US companies who provide innovative, next-gen technology solutions Six Dimensions, announced today that it has been named as one of the “100 Most Promising Technology Companies for 2014” by CIOReview Magazine. CIOReview100 is an annual honor for the top 100 technology companies in the US. The list is created to help simplify a CIO’s job role and to help them understand the latest technologies in the sector. A panel consisting of CEOs, CIOs, Analysts and the CIOReview editorial board researched and analyzed hundreds of US companies to finalize this year’s list. To read the entire article on Six Dimensions, ... READ MORE

Six Dimensions Recognized on Prestigious Inc. 500/5000 for the 3rd Time with 3-Year Sales Growth of 454%

Six Dimensions announced today it has been recognized by Inc. Magazine for the third time as one of the fastest-growing private companies in America. Demonstrating 454 percent growth over the last three years, Six Dimensions ranked #989 on the exclusive 2014 list which has become the hallmark of entrepreneurial success.The Inc. 500|5000 list spotlights the business leaders who have taken their companies to the top of the heap in terms of percentage of revenue growth over the past three years. Companies such as Zappos, Under Armour, Microsoft, Patagonia, Oracle, and many other well-known names gained early exposure as members of the Inc. 500|5000. As L ... READ MORE

Adobe Experience Manager 6.0 Translation API Webinar

Do you want to learn more about the new changes to translations available in AEM 6?  Are you interested in machine translation?  If so the AEM6 Translation API Webinar is for you! Thought Leader: Bryce Acer (AEM Technical Architect). This webinar is the sixth in our series of AEM webinars and provides an insider insight into the new Translation API available in AEM 6 from one of it's primary architects, Bryce Acer. This webinar is intended for technical audiences, and will be especially helpful for developers who are experienced with OSGI and AEM development. In the webinar, AEM Technical Architect Bryce Acer, explores: The new Translation API; How to configure machine translation in AEM6; Extending the Translation features in AEM6. To watch this webinar, ... READ MORE

An Insider's Look at Adobe Experience Manager Webinar

The first in the 10 webinar series, Bryce will address some of the technical advantages and challenges associated with upgrading from AEM 5.4 to 5.5. This Webinar is intended for technical audiences, I.e., developers and architects who have existing experience with AEM 5.4. Thought Leader: Bryce Acer, Senior Developer. To watch this webinar, click here. ... READ MORE

Adobe Experience Manager Development Setup, Maven Build and Deployment Webinar

Six Dimensions and 6D-Labs are pleased to distribute its 2nd AEM webinar "AEM Development Setup: Maven Build and Deployment"  This webinar covers best practices in building and deploying AEM applications.This Webinar is intended for technical audiences, i.e., developers and architects who have existing experience with AEM. Thought leader: Dan Klco, Senior Technical Lead. To watch this webinar, click here. ... READ MORE

Adobe Experience Manager OSGI vs JSPs Webinar

Six Dimensions and 6D-Labs are pleased to announce the 3rd in their series of AEM webinars: "OSGi v. JSPs"  This webinar will cover best practices in developing and organizing AEM Components and Applications. This Webinar is intended for technical audiences, i.e., developers and architects who have existing experience with AEM.  This webinar will be especially helpful for developers who are experienced with JSP component development, but are not very experienced with OSGi Service development. To watch this webinar, click here. ... READ MORE

Adobe Experience Manager Tips and Tricks

Six Dimensions and 6D-Labs are pleased to distribute the AEM webinar: 'Adobe AEM Tips & Tricks'  This webinar covers some tips and tricks which make using AEM easier and more efficient. Copy/Cut/Paste functionality can be critical to mass producing AEM pages. Use this video as a reference for perfecting this technique. Thought Leader: Nick Whittenburg (AEM Business Analyst). To watch the webinar, click here.   ... READ MORE

Business Intelligence (BI) Solutions

6 Core Competencies You Need When Starting a Business Intelligence (BI) Solution Varner, Big Data Senior Solution Architect If your company stores large amounts of data, it surely would benefit from implementing a BI solution. BI solutions, when implemented properly, provide your business with meaningful and accurate insights by retrieving the data you want in a timely manner. That is all fine and good in theory, but where should your business begin? Can you report off of your current billing source, ad server, or any other source of data? What is the best way to store data and what tools should we use to produce reports? How do we know the data we are getting is accurate? Does our solution scale? The questions can and will go on and on. One of the main goals of a BI project is ... READ MORE

CQ Users and Groups Permissions - Major Differences

In this article, I'll briefly illustrate a major difference between CQ 5.6.1 and AME6 when it comes to Users and Groups permissions. I am not fully aware the scale or the extent of the impact this might cause on upgrading from CQ 5.6.1 to AEM6, but I thought it's worth sharing.   CQ 5.6.1 AEM6 In CQ 5.6.1, users/groups permissions are stored in a JCR node called rep:policy under the node that was assigned right(s) to a group/user. See figure 1 below: Figure 1 In AEM6, users/groups permissions are stored in  ... READ MORE

Adobe Experience Manager Personalization Webinar Recording

Six Dimensions and 6D-Labs are pleased to distribute the AEM webinar: 'AEM Personalization'  This prerecorded webinar covers approaches and best practices in creating personalized experiences with Adobe Experience Manager. Thought Leader: Dan Klco (AEM Technical Lead). To watch the webinar, click here. ... READ MORE

Six Dimensions Recognized on Prestigious Inc. 500/5000 for the 3rd Time with 3-Year Sales Growth of 454%

Six Dimensions announced today it has been recognized by Inc. Magazine for the third time as one of the fastest-growing private companies in America. Demonstrating 454 percent growth over the last three years, Six Dimensions ranked #989 on the exclusive 2014 list which has become the hallmark of entrepreneurial success. The Inc. 500|5000 list spotlights the business leaders who have taken their companies to the top of the heap in terms of percentage of revenue growth over the past three years. Companies such as Zappos, Under Armour, Microsoft, Patagonia, Oracle, and many other well-known names ... READ MORE

Debugging Apache Axis 1.4 with SLF4J

In my previous blog post, I discussed getting Apache Axis 1.4 working in AEM. One of the more interesting things about Axis 1.4 is that it's not easy to log the actual request from the client and response from the server.  You can configure the LogHandler, however it is somewhat problematic in AEM to configure due to the classpath complexity in OSGi and it will only log to the system outputstream.  This is problematic in AEM as the stdout.log isn't setup by default when runnning in server mode and when running locally will not roll.  Intead of this, I would suggest registering a custom SLF4J Log Handler to log the request and response to the AEM SLF4J logs. To do this, first, add the SLF4JLogHandler to the project, which I ada ... READ MORE

Running Apache Axis 1.4 in AEM

Despite doing several Web Service implementations over the last couple years, I have successfully avoided using Apache Axis until now.  A client's Web Service implementation was incompatible with the code generation tools available in more modern Web Service clients, such as Apache CXF.  While there is documentation around using Axis 2 with AEM, there isn't really anything available for Axis 1 in AEM, which is what I needed to use.  So, I rolled up my sleeves and dug in. Challenge 1: Axis 1.4 as a Bundle The first challenge I ran into is that Apache Axis 1.4 is not created as a bundle.  Thanks to some googling (now simplified with 6D's Bundle Finder), I found that the Apache Geronimo project produced a bundled vers ... READ MORE

New from Apache Sling: Testing Tools 1.0.8

The Apache Sling Project just announced the release of Testing Tools 1.0.8.  This new release brings some great new features and fixes to anyone using Apache Sling Testing Tools for integration tests.  There are two fixes which are certainly worth highlighting. SLING-3328:  Simplify SlingTestBase usage with an already running instance This issue makes it easier to connect the Sling Testing Tools to a running Sling / AEM instance without requiring to set the jar.executor.jar.folder, jar.executor.jar.options, jar.executor.vm.options and jar.executor.jar.name.regexp properties which currently must be set and must contain reasonable values which resolve to a JAR file.  Now, with this fix, if the server specified in the test.server.url property as the server to connect to is running, these properties will n ... READ MORE

Handle form submission using AdapterFactory in Adobe CQ (AEM) OSGi Component

In this article, I will be addressing 2 issues: how to efficiently handle form submission map data in Java and how the AdapterFactory get implemented in Adobe CQ (AEM). How to efficiently handle form submission map data in Java You need 1 servlet, 1 service, and 2 classes: FormSubmissionHandlerServlet, FormSubmissionHandlerService, MyCustomClass, and MyCustomClassAdapterFactory FormSubmissionHandlerServlet is the main service that handles the HTTP request (AJAX request) and dispatches the work for the right candidate class that designed to handle individual form. Sameple codes of FormSubmissionHandlerServlet package ... // developer comments... // all the necessary imports import ... @SlingServlet(paths = "/apps/mycompany/forms", metatype = false) @Properties({ @Property(name = "service.pid", value = "mycompany.forms", propertyPrivate = false ... READ MORE

Git Tricks I Use

After developing on AEM for quite some time, I've come to rely on git for a lot of things. Whether it's maintaining several of my own branches at once, firing off pull requests to get my stories into master, or pulling down someone else's branch to take a look at their work, git has become an indispensable part of my AEM development lifestyle. And, as a developer, I'm always looking for ways to make things easier, cleaner, or simply more efficient. While there a lot of great GUI tools for working with git (I personally recommend Sourcetree), I primarily the command line out of habit. Maybe it's the ultra-granular control this gives me over the entire experience or perhaps it's the feeling that I'm refactoring code behind The Matrix as I'm slamming away in Total Terminal. Either way, I've found some tricks that make life easier and I'd like to share some with you now. 1. Deleting all branches except the one you're o ... READ MORE

Client-side custom form validation and submission in Adobe CQ

In this article, I'm going to discuss on how I integrated and implemented jQuery Form Validator and jQuery Form for handling form validation and submission with Adobe CQ5 (AEM). Assumption (for the sake of this example): Your CQ application/project name is: myapplication We have 3 different clientlibs categories: myapplication.jquery, myapplication.components (embeds myapplication.components.apps), and myapplication.components.apps (this category is for the clientlibs located in the apps level). The location for the 3 clientlibs are: /etc/designs/myapplication/jquery, /etc/designs/myapplication/components, /apps/myapplication/components/{component_n ... READ MORE

Using the cq:template file

Often when developing Components I find that I need to specify a default value that is set as soon as the component is dropped on the page. Today I want to show an easy and quick way to do this using cq:template. 1) In CRXDE navigate to the component that you need the default value for. 2) On the same level as the component dialog create a node titled "cq:template" of type "nt:unstructured". Your component should now look like this. 3)Now you can either add your values as properties using the CRXDE interface or you can vault your changes out into your favorite IDE and manually write the XML on your own. In this case I just used CRXDE since it is the quickest. 4) And that should do it. Feel free to now test your component! ... READ MORE

Tailing AEM Logs in Eclipse

My typical workflow for developing with AEM frequently involves reading from logs.  Whether it's for checking if bundles and services installed, following the logging of custom code or trying to get a full stack trace of an error, the logs provided by AEM are an invaluable tool.  Until now, this has meant switching back and forth between my IDE (Eclipse) and the terminal.  Dual monitors and Total Terminal help, but it's still not as efficient as it could be to keep switching back and forth. Last week, I decided to see if this was a way to make this better.  The most obvious solution was to make my logs visible inside Eclipse, so I started looking at the Eclipse Marketplace.  There are a number of plugins, and after some testing, I settled on LogV ... READ MORE

Creating a Custom Predicate for Querying by Version

Recently I found myself implementing a custom parametric search UI within CQ. The intent of this view was to allow a user to query for Resources based on any combination of parameters. For all but one of these parameters, I was able to leverage the OOTB predicates but for querying on version, however, I had to think outside the box a bit. While the other parameters could all, in some form or another, be evaluated against a property within a Resource's JCR "branch", version data is stored elsewhere in the repository: specifically jcr:root/jcr:system/versionStorage. Further, no predicate exists to do the legwork here. After first querying for version separately, sorting both result sets, and merging them by path, I came to the grim realization that I was going to have to wire up custom pagination with this approach as it was not acceptable to arbitrarily limit the number of results and scrolling was not an elegant solution either. QueryBuilder pr ... READ MORE

Follow Up to Integration Tests in Adobe CQ

In my previous post, I had introduced the idea of integrating testing AEM (CQ5) projects using Apache Sling Testing Framework.  After using the integration testing framework for a while and learning more about the framework, I have come up with some improvements to my original post. 1. Support Testing Existing AEM/CQ5 Instance This makes your tests a lot quicker and easier, instead of starting up a new CQ instance just to run your integration tests, you can hook into the CQ instance you are already using for development.  To do this, update your systemPropertyVariables parameter to have the following variables: <http.port>${crx.port}</http.port> <test.server.url>http://${crx.host}:${crx.port}</test.server.url> <jar.executor.jar.options>-p ${crx.port} -nobrowser -nofork</jar.executor.jar.options> <jar.executor.vm.options>-XX:MaxPermSize=512m -Xmx1g</ja ... READ MORE

6D Insight with Tejune Kang, CEO: One Interview Question That Reveals a Superstar Job Candidate

interview questions. (And every interviewee has questions, like the five great questions job candidates ask.) Yet we all wish we had better questions to ask, especially when hiring the perfect person is so critical. But is there one perfect question that can identify a true superstar for your business? Turns out there is. Tejune Kang, founder of Six Dimensions (No. 651 on the Inc. 5000 in 2013), an IT service firm that provides expert consultants and o ... READ MORE

AEM6 Self Service Monitoring

Adobe Experience Manager 6.0 is the latest release in the long line of CQ/Adobe Experience Manager products. AEM6 now has monitoring capability beyond what was included in previous releases, built-in to the WCMS out of the box. Navigating to "Tools"->"Operations"->"Dashboard"->"Health Reports" will present you with a screen containing multiple color-coded 'tiles' representing monitored parameters like the one below. As you can see, each tile is color-coded to provide an easy-to-view snapshot of the health of the AEM instance. Red indicates a failing healthcheck, yellow indicates an undesirable state of a parameter, while green indicates all items pass the health check. Each 'tile' can be clicked to dive into the status of the item the tile is reporting on: ... READ MORE

Issues with Touch UI in AEM 6

AEM 6 has been released, and with it comes an extension of the thin veneer known as “Touch-optimized UI.” In AEM 5.6, the Touch UI was limited to just the consoles; upon entering a page for content editing, one was greeted with the tried-and-true “Classic UI” interface. In AEM 6, Touch UI has been extended to provide an entire alternate user interface for authoring content. The “What’s New in AEM 6.0” video released by Adobe shows the ease of editing pages with a tablet thanks to this new UI. Let’s skip altogether the conversation around the merits of what benefits that may provide and just assume that you, the content author, will be performing your AEM content authoring on a desktop operating system. The implementation of Touch UI in AEM 6 is troublesome at best, and we’re calling it out so that those in search of help know that they are not alone and not misusing the tool.  Selecting your preferred UI Let’s begin by ... READ MORE

AEM6 Translation API Webinar

Do you want to learn more about the new changes to translations available in AEM 6?  Are you interested in machine translation?  If so the AEM6 Translation API Webinar is for you! About the Webinar Thought Leader: Bryce Acer (AEM Technical Architect) This webinar is the sixth in our series of AEM (formerly Day CQ) webinars and will provider an insider insight into the new Translation API available in AEM 6 from one of it's primary architects, Bryce Acer. This webinar is intended for technical audiences, and will be especially helpful for developers who are experienced with OSGI and CQ development. In the webinar, AEM Technical Architect Developer Bryce Acer, will explore: The new Translation API How to configure machine translation in AEM6 Extending the Translation features in AEM6 Time & Location Wh ... READ MORE

Sightly vs Handlebars vs JSP: Comparing Scripting Languages

The latest release of Adobe Experience Manager, version 6.0, introduces two new languages for front end scripting in CQ.   The two languages are both attempting to address the problems found in the existing foundation and Geometrixx reference code, namely the lack of separation of concerns between business and presentation logic and the sloppy use of scriplet.   The two new templating languages are: Sightly Sightly has come from Adobe user groups and seems to be trumpeted by the Adobe Professional Services team.  There is official documentation for Sightly and Adobe has produced a number of blog posts and webinars about it: http://cq-ops.tumblr.com/post/83123568521/aem-6-new-markup-language-called-sightly ... READ MORE

New in AEM 6: JSP TagLib 2.2.0

The latest release of Adobe Experience Manager, version 6.0, introduces a number of features which make developing on the platform easier and cleaner.  These include some different open source bundles and proprietary solutions from Adobe.  One of these new bundles is the Apache Sling JSP TagLib 2.2.0. This bundle is available in AEM6 by default, however it is not included in the global.jsp.  The Sling JSP Taglib 2.2.0 provides a number of new tags to make it easier to develop on AEM and other Sling-based applications without requiring the use of scriptlet.  Thse new taglib includes the following Expression Language functions: adaptTo findResources ... READ MORE

Creating a Better Web User Experience for Intranets and Portals

Author: Travis Estell is a content management system (CMS) web developer and consultant at 6D global. He has led complex content management integrations and implementations using the Adobe Experience Manager platform for over five years.6D White Paper: The paper identifies ways to create a better user experience for the visitor and author, and  5 key considerations when moving to a new CMS for Intranets and Portals. Moving to a Content Management System Websites are usually moved into a content management system (CMS) for a couple of reasons. The new CMS usually provides a much better user experience for the person editing the site, often called the site author. When it’s easier to add new pages, ... READ MORE

WhitePaper: Creating a Better Web User Experience for Intranets & Portals

6D White Paper: The white paper identifies ways to create a better user experience for the visitor and author, and 5 key considerations when moving to a new CMS for Intranets and Portals. Excerpt Moving to a Content Management System Websites are usually moved into a content management system (CMS) for a couple of reasons. The new CMS usually provides a much better user experience for the person editing the site, often called the site author. When it’s easier to add new pages, update text, and add photos, you get a more frequently updated site with better content. And usually, a move into a new CMS usually is accompanied by a new design and reorganization of the site’s content. This improved experience makes it easier for a visitor to find what need more quickly and easily. These days, most new designs are also responsive, providing a first-class exp ... READ MORE

Monitoring AEM with New Relic

I love New Relic.  Their server monitoring tools allow me to remotely monitor my various servers and development applications for free and their stuff just works.  Recently, we were running into an issue at Six Dimensions where a couple of our development servers were toppling over and without any real monitoring in place we couldn't tell why.  To address this, we've been rolling out New Relic on all of our development servers.   As part of this, I was curious about setting up monitoring of Adobe CQ / AEM with New Relic.  Out of the box, New Relic supports a number of application servers, however AEM is not one of them. Luckly, I found a pretty simple guide to setting up monitoring generic Java applications.  Here are the instructions for setting up basic montioring for AEM in New Relic: Step 1 - First login to New Relic, go to the A ... READ MORE

My AEM Development Setup

I'm pretty particular about how I like to lay out my computer for development.  Ideally a good setup would:  Exist within my user's home directory  Contain short but meaningful folder names  Allow for multiple versions of an application To support this I create three folders:  dev - contains some app data and development utilities  git - contains all of my GIT repositories  scripts - contains custom shell scripts The git and scripts folders are pretty straight forward.  The git folder contains all of the GIT repositories I have worked on while the scripts folder contains a number of shell scripts. The dev folder is where things get more interesting.  This folder contains a separate folder for each development application I use.  For example in the case of AEM, I have a folder called cq for all of my AEM ... READ MORE

Modify the OOTB LinkChecker Config

I've come into the issue recently of needing to modify the prefix and suffix for invalid links detected by the linkchecker. This seemingly simple task is unfortunately not as easy as overlaying the /libs/cq/linkchecker/config.author/invalid to /apps/cq/linkchecker/config.author/invalid. For reasons unknown (to me at least) the standard overlay does not work for this type of update. Instead, after digging into the code, I found this information: REQUEST_ATTRIBUTE_NAME = LinkCheckerSettings.class.getName(); LinkCheckerSettings settings = (LinkCheckerSettings)request.getAttribute(REQUEST_ATTRIBUTE_NAME); The above lines indicate that if we set a request attribute to the LinkCheckerSettings object we wish to use, we will use our custom settings instead of the OOTB ones defined in that node. Now that we have this goal, we can start creating a LinkCheckerSettings object to use. I would suggest to include these settings as a getter method in a custom OSGi Service, su ... READ MORE

Hide/Show parsys on the fly with JavaScript

It is relatively painful to deal with tabs, accordion, or carousel component. Especially when we want to enhance content author experience. Here’s a use case to illustrate to you what I meant: We need to build a tabs component. We want author to manage tabs’ content on the page (not via child page or a separate page). We want author to drag and drop any component into any tab’s content they wish. Bug The screenshots below show the bugs (visually) when we don’t implement the JavaScript solution: Tabs displayed on page load: Figure 1. Tabs displayed after clicking on “Tab 2”. As we can see that the parsys of the hidden element (tab 1’ content) is not disappeared, but instead they piled up on top of each other (Figure 2). ... READ MORE

CQ Dialog - Generate dynamic rootPath with ExtJS Plugin

This article will shows you how to: one write ExtJS plugin and calls it in CQ dialog and two generating rootPath with ExtJS plugin. We know that with xtype pathfield, we can set rootPath value to any location we want. The drawback is that it is static. If we set rootPath to /content, we fall into providing “no so good author experience” as content author needs to click through pages list to get to the desired page. The solution would be to dynamically generate the value of rootPath. In this example, we will show you how to generate a list of child pages dynamically. Using CQ Component Dialog In the pathfield node’s properties, we add a property named: plugins and set its value to the name of the ExtJS plugin (i.e. customRootPathPlugin) that we are going to create. ... READ MORE

How to Manage Field Dependencies in a CQ Dialog

I'm working on a front-end project with some relatively complex UI requirements for author dialog. The author UI requires field dependency. A set of fields is shown or hidden based on a certain selection author makes. After getting a working codes finalized, I thought that it is worth sharing with the community. Sample use case for field dependency: As a content author, I would like to be able to build a grid of maximum 12 columns. I would like to have 2 options: Default and Custom. When I choose Default, I would like to see a set of fields including: Dropdown list with predefined column formats like: 1 Column; 2 Columns (6, 6); 2 Columns (10, 2), etc. Dropdown list with predefined column's border styles. Dropdown list with predefined column's padding styles. When I choose Custom, I would like to see a set of fields including: Dropdown list with numbers of columns: 1, 2, 3, …, 12 ... READ MORE

How NOT to Generate HTML

Recently, I have been working on an integeration between Adobe's Search and Promote and CQ5/AEM.  This work has reminded me of one of my least favorite anti-patterns, embedding HTML markup in Java code.  You tend to see this 'technique' a lot in Servlets, Tags and other Java web technologies.  This is a bad idea for several reasons: It breaks the MVC model It's hard to understand the HTML code It's difficult, if not impossible, to modify the markup In the case of Search and Promote, the CQ integration classes are used to parse the XML responses from Search and Promote.  The unfortunate part is they also are used to generate the HTML for the forms to be displayed in CQ as well as some additional HTML markup.  While this makes for smaller scripts in CQ, it makes extending the Search and Promote func ... READ MORE

Expression Language, Tags and You

One of the things I've seen on many projects which makes code a lot more difficult to read and understand is scriptlet (aka Java inside JSPs). Especially now, there really isn't a good reason you need to ever use scriptlet inside your JSPs, but especially given the prevalence within CQ's codebase it's a common practice. Helpful tools Recently, myself and others have been contributing code to make it easier to develop JSPs in CQ without using scriptlet. All of these tools will need to be installed as bundles as part of your project. Some of these tools are: Sling JSP Taglib 2.2.0 These tags allow you to perform basic operations against Resources in Sling without any scriptlet. Sling Models 1.0.0 Created by Justin Edelson ... READ MORE

Creating and Configuring your Maven Project for AEM

The goal of this document is to have a maven project that builds a single asset (the package profile) to deploy all Servlets, Services, and JCR Code. In addition to this, for development purposes we want to be able to build each item listed above individually, such that we do not require a full build to test a simple JSP change. For starters, this is a fairly common project structure that we'll be basing this document off of: <master> |______vault |______services |______servlets |______package As mentioned above, our goal is to have the vault package contain all JCR code (CSS,JS,JSP, etc), services to include OSGi Services, servlets for OSGi Servlets, and package to be the "all-in-one" deploy. The first problem I found with many implementations was that building the master project would also build and install each child module. This obviously is not desired, but given the "install" goal is being sent from the master, it obviously would inher ... READ MORE

Simple Web Console Templates

Awhile back, I wrote a blog post about [creating Apache Felix Web Console Plugins]({% post_url 2013-09-11-service-boss-level-part-2-custom-web-console-plugins %}). It's a pretty great technique for creating a diagnostic configuration panel for complex services or applications, however the process for rendering HTML for the consoles is still somewhat stuck in the dark ages. Since servlets are used to render the HTML, you'll generally see HTML being written to the response in the Java code of the Web Console class. You can even see this in the plugins which come in Apache Sling, such as: TopologyWebConsolePlugin JobConsolePlugin Whil ... READ MORE

The Great and Powerful cq:EditConfig

One of the most under-appreciated features of AEM components, in my opinion, is the cq:EditConfig. This node allows developers to configure how a component is edited, add or remove functionality from the editor and generally tailor the authoring experience for component. The cq:EditConfig is simply a node with the primary type cq:EditConfig and the name cq:editConfig under the component root. The cq:EditConfig allows for configuring many important features of the component's editing experience including: Dialog display behavior Edit bar or hover appearance Editor items Listeners Advanced features such as: Drop targets Additional actions InPlace editing When to use cq:EditConfig Personally, I end up using cq:EditConfigs on many of the components I write. They are especially useful on components which: May not display content - After all how can you hover over some ... READ MORE

AEM Start/Stop Script Modification for a Cluster

When clustering AEM instances there is a required order for shutting down and starting the instances. This however can be very tricky in a shared nothing cluster as the master & slave can automatically swap places at any time for multiple reasons. This means in order to shut down an instance you typically need to identify the master instance first. Conversely in starting up an instance the slave can only be started after the master has become available. If they are started out of order the slave instance will retain its process but will never connect to the master and thus will be a dead process that must be stopped and restarted. This document will describe some changes that can be made to the start and stop scripts that will ensure the instances will be stopped in an acceptable order as well as prevent the slave node from starting up without a master. It does however have 2 requirements, an administrative password must be stored in the stop script, and this is designed only for a cluster of 2. ... READ MORE

AEM Restricted Backup User

The AEM backup curl command is often passed using admin credentials however for security reasons it may be undesirable to store the AEM admin user's credentials in plaintext form in a system script. To mitigate this instead a generic user can be created and be granted more specific access rights to the granite backup console. This will allow to restrict what this user has the ability to do by only having granted rights to start, stop, and view a list of backups. Limited User account To do this we first need to go into the AEM user manager interface and simple create a generic user to be used for backups. The name for this user is not important as long as it is identifiable to what its purpose is. Once created the screenshot below should illustrate exactly what permissions this user should be assigned in order to be able to kickoff backup jobs. Backup Sc ... READ MORE

AEM Live Backup Strategy

AEM has a built in live backup mechanism which works rather well at creating an extractable archive of the complete instance it can take an extremely long and unmanageable amount of time due to the nature of what all it is creating an archive of. By default this backup will consist of the original CQ jar file and everything at an equal level and anything contained in any child directories of that path. While this works, it's not ideal as a long term solution due to the size in which one can expect the environment to grow. The datastore will be the largest section within this backup and will consist entirely of binary or text "content" that will never change. Modifications and new files will generate new items in the datastore and thus nothing is ever deleted from this path unless datastore garbage collection is run. For this reason the datastore can be treated as a necessity of the AEM instance but may be treated separately in terms of backups. For this reason it is suggested to relocate the data ... READ MORE

Integration Tests in Adobe CQ

Awhile back I wrote a post on running integration tests in Apache Sling. This technique is useful for developers working directly on Apache Sling, but doesn't support downstream platforms like Adobe CQ/AEM.After some finagling and testing I was able to get a similar technique working using Adobe CQ / AEM instead of Apache Sling. To enable integration tests using Adobe CQ, add the following into your POM.DependenciesFirst, add plugins to copy required dependencies and the current project output into the CQ instance:<!-- Copy the required dependencies --> <plugin>   <groupId>org.apache.maven.plugins</groupId>   <artifactId>maven-dependency-plugin</artifactId>   <executions>    <execution>        ... READ MORE

Six Dimensions Supports the Apache Sling Project: Resource.hasChildren

Recently, I had the chance to shepherd a new feature into the Apache Sling API. This feature adds the method hasChildren to the Resource andResourceResolver. My colleague, Brian Warner suggested adding this method after struggling to do this in a clean, correct way.What's new? The hasChildren method is a convenient shortcut for developers to check whether or not a Resource has child resources. This method returns correctly across different Resource Providers unlike the lower-level API's such as Node.hasNodes(). ... READ MORE

The 5 Hardest AEM Concepts for New Developers

Even experienced developers struggle when trying to transition to the Adobe Experience Manager (AEM) platform (formerly Day CQ5). Once you fully grok AEM, it can be a joy to develop against; the APIs are generally straightforward and it makes presenting content easier than any other platform I have encountered. So why do so many developers have trouble ramping up on AEM?AEM turns traditional WCMS products on their head. No other CMS really works in a similar manner and developers usually struggle with getting over their pre-conceived notions of how a CMS should work.Here are some of the most common concepts in AEM which trip up many new developers.1 You are building static HTML...or at least you should be. Unlike most CMS systems, AEM comes with its own caching system, the Dispatcher. The dispatcher is an Apache Httpd ... READ MORE

6 Key Considerations in Web Content Migration

Author: Michael Kelleher, Senior CMS Lead Developer for 6D Global There will be many questions asked during a content management system (CMS) migration, but key among them is: How are we going to migrate content quickly and efficiently? This article will address some key considerations to help your content migration journey from “old” to “new” go smoother, quicker, and without loss of sleep. Shhh, I’m Hunting Content… If you don’t know what ... READ MORE

6 Key Considerations in Web Content Migration

Excerpt: There will be many questions asked during a content management system (CMS) migration, but key among them is: How are we going to migrate content quickly and efficiently? This article will address some key considerations to help your content migration journey from "old" to "new" go smoother, quicker, and without loss of sleep.Click here to read the full article on cmswire.com ... READ MORE

New in AEM 5.6.1: Workflow Purge Scheduler

In previous versions of Adobe CQ5/AEM in order to purge old completed workflows, you needed to either write a custom job or install an additional package provided by DayCare.  Now in AEM 5.6.1, this functionality comes out of the box with the product.Why Purge Completed Workflows?So why would you want to purge completed workflows?  Workflow instances are stored as nodes inside CQ.  Generally, this doesn't pose a problem for author-generated workflows, at least not over the short and medium term.  However, for very long running CQ instances or instances where website users or automated jobs can run workflows, this can quickly add up to large amounts of content accumulating in your repository.  This can lead to slow performance and growing disk usage.To avoid this, you can simply purge old workflows.Enabling the ... READ MORE

Request cq:Components with AJAX

It's quite evident CQ utilizes AJAX frequently.If you've ever opened your network tab while using CQ you'll see asynchronous request going off here and there. When authoring new components, navigating content, developing in CRXDE lite and much more. If you're unsure what it is, AJAX let's us make asynchronous server request to content without having to do a full page reload.As a CQ developers we create may cq:Component's that are rendered with a page request but what if we want to create one that is requested via AJAX.Well why do we need to do this in CQ?Sometimes we want a sleeker and more fluid user experience and not a full page reload every time for things like search or galleries.However in a lot of cases it has to do with our Dispatch ... READ MORE

Service Boss Level Part 2: Custom Web Console Plugins

You've got your awesome service.  It performs all sorts of complex tasks and maybe even uses a Sling Service Factory to provide multiple configurations.  But how do you know what it's doing?  Well, of course you need to have appropriate logging, but another tool you can leverage is the Apache Felix Web Console, by creating a custom Web Console Plugin.  Your plugin can be accessed through Adobe CQ and Apache Sling's Web Console and can display any information you can render in HTML.Apache Felix provides a really simple class you can extend for creating custom Web Console screens, the AbstractWebConsolePlugin.  This class will automatically leverage the look and fee ... READ MORE

Service Boss Level: Service Factories

I've always wondered how the Apache Sling Logging Logger Configuration worked.  I like the idea of being able to configure multiple configuration instances through the OSGi Console and could see how this would cut down on the UI code I'd need to write in many circumstances.Since working on the Apache Sling project, I have taken the time to peruse the code for the Sling logger.  Unfortunately, the Sling logging code uses a fairly arcane method for registering the service.  After looking around a bit, I took a look at the code for the Apache Sling Job Queue Configuration, which was much easier to follow.The Sling Logger Configuration ScreenIt turns out creating, factory was easier than I suspecte ... READ MORE

My CQ JSTL/EL Best Practises

In my last article My CQ JSP Development Best Practises we solely talked about JSP related issues, one of which was the use of JSTL/EL.  Not having a reasonable approach for dealing with JSTL/EL can land you in just as much trouble as a poorly constructed JSP.  These practises should help. Variables and MethodsComparison OperatorsTagfiles vs. Classic TagsScoped variables 1) Variable and MethodsThere are two operators to address JavaBean attribute's (getXXX), List and Map values, and scoped variables. For consistency/readability, I suggest the following: Addressing Map values : Use the pattern someVa ... READ MORE

New from Apache Sling: Resource Access Tags

Recently, I had the chance to release a new version of the Sling JSP Taglib. This new version includes a large number of features and improvments which I hope will help developers in Sling-based platforms, including Adobe CQ, develop cleaner and more reusable JSP scripts. What's new? Well, the JSP Taglib allows for access to the Sling Repository without requring any Java code. With the previous version of the Sling Taglib, if you wanted to the get the property at the path jcr:content/jcr:title for all of the children of a particular resource given a path, you could do something like this: <ul> <% List<String> title = new ArrayList<String>(); Resource resource = resourceResolver.getPath(path); for(Resource child : resource.getChildren()){ if("jcr:content".equals(child.getName())){ continue; } Resource content = child.getChild("jcr:content"); if(content != null){ ValueMap contentProps = content. ... READ MORE

Six Dimensions Supports the Apache Sling Project: New Resource Access Tags

Recently, I had the chance to release a new version of the Sling JSP Taglib. This new version includes a large number of features and improvements which I hope will help developers in Sling-based platforms, including Adobe CQ, develop cleaner and more reusable JSP scripts.What's new? Well, the JSP Taglib allows for access to the Sling Repository without requiring any Java code.  With the previous version of the Sling Taglib, if you wanted to the get the property at the path jcr:content/jcr:title for all of the children of a particular resource given a path, you could do something like this:<ul> <%   List<String> title = new ArrayList<String>();   Resource resource = resourceResolver.getResource(path);   for(Resource child : resource.getChildren()){     if("jcr:content".equals(child.getName())){       continue; ... READ MORE

My CQ JSP Development Best Practises

I would guess that many or most developers in the CQ development space have their own set of development best practises they operate with.  This is a topic very near and dear to my heart.  It is something that I have spent significant personal time pursuing.  At the end of the day I want readable, maintainable, extensible, bug free code that is not a burden.I have deliberately kept the list short.  These have been primarily for personal consumption, and the key idea is that if I have to refer to a tome for my "best practises"...I won't.  So I wanted them practical, reasonable, and easy to remember.  Most of these I have operated with before I even realized that it was the way I was operating.  I believe that is what I want: I don't have to think about it.I will provide the list first, then the explanation for each.Be practical in their application.  Applying a rule for the sake of it is likely to have the reverse effect of what these best practis ... READ MORE

CQ Resource Inclusion from a Servlet

Including resources from a JSP is super simple due to the many facilities within Sling and CQ.  But what if you wanted to include a CQ resource from a custom Sling Servlet?  All of this nice JSP based inclusion is built on top of the JavaEE API.  Take a look at the class: javax.servlet.jsp.PageContext and two of it's methods: public abstract void include(String relativeUrlPath) and public JspWriter pushBody(Writer writer). These two method will form the basis for all of this inclusion business.  With a little bit of extra code, we can capture the included resource before it gets written to the current Servlets Outpu ... READ MORE

Beware of Export-Package

Quick - without checking the documentation, what does the Export-Package instruction do in the Maven Bundle Plugin?Did you say "sets what packages are exported by the bundle"?  If so, you're only half right.Recently, I was trying to diagnose some issues with a SOAP Web Services implementation in an existing code base.   Theoretically, everything was in place, however I was getting a ClassCastException when attempting to retrieve the OSGi Service for accessing the SOAP Web Service.  After staring at the logs and pulling out clumps of hair, I decided to find out where each class was coming from.  I executed the code below to get the source of the service interface class as well as the interface class implemented by the service implementation. log.info(Service.class.getProtectionDomain().getCodeSource().getLocation()); ... READ MORE

JVM Tuning for Mere Mortals..

.. Or:  Friends don't let friends Grok and DriveI will admit two personal things about JVM tuning: 1) I thought I was pretty hot stuff at JVM tuning 2) I was recently completely humbled and admit I was naive.On a long road trip recently driving up I95 (23 hours of driving to be exact) I listened to approximately 16+ hours of JVM tuning talks by: Gil Tene, Charlie Hunt, Attila Szegedi, and a few others.  These guys are the JVM tuning giants of the industry.  I learned a bunch from them in these terse talks - challenged by not getting lost or hitting stuff while driving.I will lay out here some practical things I learned while listening to them.  The talks I listened to ranged in time period from 2009 to present time.  What was interesting to "see" was the slow adaptation of theirs talks over time.  Mostly the same corpus of info, with slight tweaks as JVM technology has pro ... READ MORE

Ask the Experts: CQ5 Inheritance Model

In this series of blog posts we pose a question to experts in the Adobe CQ5 platform about Adobe CQ5, Enterprise Content Management and Web Development.What's the difference in CQ5's inheritance model versus standard Java?The main difference that I can think of is that in standard Java, you will write a class which inherits all the methods of a previous class. These methods can be modified and overwritten, and new methods even added to enhance functionality. In CQ, the inheritance is much more basic. It is based on JSP's - I like to compare the two by thinking of the JSP's as methods, and the components as classes. Where by default, an empty component with nothing overridden will match exactly the super resource. However, if you add a JSP to your component matching the name of the super resource, that JSP will take precedence over the super resources, allowing you to override smaller portions. - ... READ MORE

EL Function Management

In my post Tagfile vs. Tag in a Sling or CQ5 Application we created the groundwork for developing Servlet artifacts: Tag files, Classic Tags, and EL Functions.  The definition of all these items require the file taglib.tld.  This defines the URL that identifies the library via the uri in a <%@taglib prefix=".." uri=".." %> JSP statement within a JSP.  Here we address creating EL functions and managing them.Additionally, I will provide some of my thoughts on a reply from Avi in my previous post related to storage of the tagfiles themselves.I use EL functions frequently for: property fetching, I18n translation, various kinds of String translation, handling/creating XSS encoded Strings, dealing with CQ tags, etc.  An important paradigm to adhere to is that execution of ... READ MORE

Custom PredicateEvaluators or: How I Learned to Stop Worrying and Love QueryBuilder

One client's AssetShare page contains a checkbox: Needs Meta-data. Checking this box is supposed to return all assets coming from the DAM that do not have metadata. Specifically in this case we check for a particular attribute (@dc:title) that's a child of the jcr:content/metadata node.Our story begins with the following problem: checking the box wouldn't return certain assets. Upon investigation, I discovered that the one asset not returning in the query HAD an @dc:title attribute, but that this attribute was blank. It had no value.  Out comes the toolbox:Chrome's Javascript debugger, to pull querybuilder http requestshttp://localhost:4502/libs/cq/search/content/querydebug.htmland http://localhost:4502/crx/explorer/ui/search.jsp Through the course of investigating I discovered that the followi ... READ MORE

Three Commonly Missed CQ Best Practices

Recently, I saw this thread on the Day Communique Google Group.  In the thread, a developer asks why he cannot use CRXDE in their production environment.  As it turns out, his employer followed the best practices for hardening CQ instances as recommended by Adobe which disables the WebDav servlet CRXDE uses.  This thread demonstrates three common problems I've seen on CQ installations.  Especially, when the implementers of the CQ installation are not familiar with CQ and Java Development best practices.1. QA Not Matching ProductionIn this case CRXDE shouldn't work in QA either.  If the Production and QA environments don't exactly match, you can't be 100% sure your code will work on ... READ MORE

Tagfile vs. Tag in a Sling or CQ5 Application

Custom tags are cool, I guess.  The first couple I wrote were fun to write.  Kind of like driving through a new city, or part of the country.  The landscape is vibrant, new, unfamiliar, exciting.  When I came back several months later, things were just unfamiliar, and not so exciting.If you are taking the OCEJWCD test, there is no avoiding them.  However, my recommendation is, unless you are writing a Servlet framework, avoid them.  Unless you are writing them with enough frequency to remember the necessary semantics to their creation, the API, it will be a constant battle to remember what all that "stuff" does and means.Even BEFORE I started using Sling, when still writing POWA (plain old web applications), I started to move away from custom tags to tag files to simplify my mainte ... READ MORE

Simple Container Component Start & End Bars

When creating a container component for Adobe CQ, you often run into an issue where the resulting page is difficult to author as there are too many parsys adjacent to each other.  As bad as this situation is for the component developer, imagine how confusing it must be to authors who don't have a detailed understanding of how the component works.  As you can see from the illustration below of a tab component, when you have multiple parsys in a single component it can get very confusing as to what each parsys does.   My first thought in handling this was to dynamically update the empty text for the parsys based on the component name, however this proved to be difficult if not imposs ... READ MORE

Changing a CQ Component's Design Path

Usually, the default location used by the CQ Designs configuration works, however there are cases where you may want to set the designs to exist at a different location. For example, you may want multiple components to share a configuration or have all of the instances of a component on a site share the same configuration.CQ provides the EditConfig object which can be used to configure how the edit dialog is loaded in CQ.To configure your design path in Adobe CQ, first set the edit context path in the Edit Config object when in design mode:String myComponentDesignPath = currentDesign.getPath() + "/jcr:content/mycomponent";if (WCMMode.fromRequest(request) == WCMMode.DESIGN) { log.debug("Setting content path to {}", myComponentDesignPath); editContext.setContentPath(myComponentDesignPath);}Next, you will need to retrieve the r ... READ MORE

Creating Integration Tests in Apache Sling

One of the lesser known features in Apache Sling Testing Tools framework is the SlingTestBase, this class can be extended to allow you to create tests against a Sling instance which will be automatically created, started and then shut down when the tests are complete.Why Test this Way?First, you should have some form of automatic testing on your Apache Sling and Adobe CQ5 projects.  Automatic testing gives you better coverage against regression and changes breaking code and ease the burden on the testers and quality assurance teams.  Additionally, by making your code testable, you are ensuring it follows coding best practices and is well structured.So now you understand the need for testing on Sling and CQ5 ... READ MORE

Ask the Experts: MVC in Adobe CQ5

In this series of blog posts we pose a question to experts in the Adobe CQ5 platform about Adobe CQ5, Enterprise Content Management and Web Development.How does CQ5's architecture compare to a standard MVC scenario?As we all know, MVC stands for Model, View, & Controller. This is the logical separation of work into those three buckets to allow for more modular and readable code. CQ follows this model (even if you may not notice you're doing it!). In CQ, we utilize JSP and the JCR for the model, a combination of JSP and Client libs for the view, and OSGi Services for the controller.-Center of Excellence, Staff EngineerTechnically speaking, CQ5 IS MVC, just a form that seems to be unfamiliar to most MVC developers. I think that most people find CQ5's architecture "too coupled" to call it MVC. Th ... READ MORE

Creating Detailed Packages with the CQ Deploy Plugin

Sometimes you may want to create a package with more descriptive information than the CQ Deploy Plugin provides out of the box.  You may want to customize the group or add a description or even add dependencies.   This article shows you how to include Package Metadata into your package and how to deploy the package with the CQ deploy plugin.Updating the PackageIn order to do this, first install the package into CQ and update it as you desire.Updating a package in CQ 5.4Once you have completed your updates, select Rewrap to update the package configuration and then download the package.Updating the Conf ... READ MORE

CQ Stats Broken: Careful with that Extension Eugene

Before I get into the details of the problem I want to discuss, I am going to give you my personal thoughts and opinion on what I think the current state of some of the "original" CQ tracking features are.  I also want to give a plug for CQ and Adobe's approach to CQ.  I am appreciative of both.I was the Technical Lead for the second rewrite (why do it once, when you can do it twice) of the Corporate website of the company that employed me.  I am still amazed at the progress we made: 4k-5k pages, digital assets, EVERYTHING rewritten, cool features written, migrated, tested, debugged, published and soft launched in a mere 12 weeks, 8 weeks EARLY.  As much as it is a testament to our technical abilities (and long days - I slept under my desk one night - which is another story altogether), I have to admit a portion of this success stems from the logical architecture of CQ, the ease of extending OOTB components, creation of Services, and customizing just about anything.  A stark ... READ MORE

JMeter, CQ SmokeTesting, and much much more

Sometimes when trying to solve one problem, I discover the answer to another yet undiscovered problem.My pet peeve with CQ development is detecting in a semi-automated painless fashion, when templates, components or client side functionality are broken.  While JUnit integration testing catches some issues, what about "client side" integration testing?  The question is, how do you make sure the build you just pushed with Jenkins, that was green, didn't break the functionality of a component, template, service, etc?.  The interaction of classes, JSP's (page and content components), and the client.  Yes, I know there are Sling bundles to allow server side JUnit testing, and I have found a few others as well.  When you don't have any of the foundation for this kind of testing, nor the time to create it and your timeline is tight with NO wiggle room, what do you do?If you view the pages in FireFox, IE, Chrome, whatever, the effect of the last build is obvious.  OK - l ... READ MORE

My CQ5 Bookmarks

I'm pretty sparing with bookmarks, however there are a few pages I use just about every day for my job developing for Adobe CQ5.  I have these daily use bookmarks in my bookmarks toolbar.  They are:CQ ToggleActually, this is a bookmarklet, but it allows me to easily switch between editing more and a more 'real' preview mode.CQ Widgets APIA must have for dialog development.  Documents the available dialog widgets as well as the CQ JavaScript API.  Combine this with firebug and you have everything you need to develop client side code for CQ.JSTL JavaDocI'm always forgetting the attribute names when using JSLT, ver ... READ MORE

Configuring CQ for a Shared-Everything Cluster

So recently I was tasked to set up a "Shared-All" or "Shared-Everything" cluster in CQ5.5 (SP 2.1).  I found out fairly quickly that the resources online do not describe this process very well, so I figured I would share my experience with the web!For those who are unaware, the "Shared-All" configuration of CQ5 is where both the datastore and file journal are on a NAS or shared mount between all clustered servers.  The reason we went with this configuration in my situation was due to some network issues when syncronizing after a rather large deployment.  I am going to assume you have a working node of an unclustered CQ instance for these instructions to work.  Please if you do not have this, it's as simple as double-clicking the jar (or java -jar cq5.5-author-4502.jar) and waiting for the welcome splashpage to appear.Once you have a base instance we can get started, please ensure the instance not running as we will be moving and modifying configuration files from within th ... READ MORE

What is my CQ Mode?

Figuring out what is the current authoring mode in components in Adobe CQ can sometimes be a tricky prospect.  Determining the current authoring mode is important for component development when you may want to display different HTML or controls to authors than will be displayed to the end users.  As a best practice, the same interface should display in Author and Design mode, as hiding or showing components may affect design.The most obvious solution is to determining the authoring mode is to use the com.day.cq.wcm.api.WCMMode Java class, which does a server-side check to see what mode is currently being used.  On new projects, I add a check for the WCMMode into the project's global.jsp and populate variables for testing if in design or author mode as such:<%b ... READ MORE

Six Dimensions' Contribution to CQ 5.6

The new version of CQ5, Adobe Experience Manager 5.6, includes a contribution by Six Dimensions to the Apache Sling project.  This contribution adds a new method, getChildren to the Resource interface.  Now getChildren() in the Resource-API, available in AEM5.6 thanks to @klcodanr #sling #cq5 #aem dev ... READ MORE

Consistent and Clean Rich Text and Images in CQ5

How can you improve on the humble TextImage component; the basis for most Adobe CQ5 website implementations?  This component (as one would imagine from the name) allows authors to put both text and an image on the page.  There are both Text and Image components which are suited for each separate task, however it has always seemed silly to me to have two components when one can do both jobs.Well, one of the first tasks most projects will do is customize the TextImage component to either enable plugins in the Rich Text Editor or add some custom editing features.  Once the developers are f ... READ MORE

Sling (sort of) Requires Javax Servlet

Recently I was refactoring some Maven POM's to reduce the number of dependencies and manage the dependency version from the reactor POM.   After I removed the duplicate dependencies I ran the build and almost immediately ran into this error:[ERROR] BUILD FAILURE[INFO] ------------------------------------------------------------------------[INFO] Compilation failure{...Class}.java:[178,50] cannot access javax.servlet.http.HttpServletRequest class file for javax.servlet.http.HttpServletRequest not found            RequestPathInfo requestInfo = httpRequest.getRequestPathInfo() ;Since the error was related to Java Servlets, I assumed it was an issue with the servlet project.  After spending time going down the rabbit hole, I noticed the error was actually coming out of another project, and being triggered by a ... READ MORE

SlingFilter Addendum

One thing to keep in mind about Filters, their removal should not render your system unusable. For example, the ICS Filter in my last article, if I remove or disable it, the ICalExportServlet continues to function (as well as the rest of CQ) without error. I would say if your application does not function without the functionality you are writing, then a Filter is probably the wrong animal for you.  You could write alot of things as Filters, but consider the last sentence when deciding.  Some good use cases for Filter usage:transforming output produced by a JSP or Servletinjecting additional request parameters or attributes into an HTTP requestinjecting additional HTTP headers or cookies into a HTTP response Another thing to consider is the amount of processing ti ... READ MORE

Sling Filter For Your Custom Calendar Event ics

Recently we added some new Calendar Event Form components.  The Author's required the ability to select a TimeZone for an event, and also and event "reminder".  Authoring these components only, don't give you the full implementation needed to have the additional content added to the ".ics" file that is generated when clicking on the "Download event as ICS file" link.This required something to be done on the back end.  My good old buddy recent requests helped me out again to identify what is fielding this request. Well, I looked at the ical stuff, and it's an embedded dependency within the bundle implementinmg the ICalExportServlet.  Thus, the ical API is not exposed to the OSGi container, and I am no fan of adding duplicate dependencies to a container.Besides, the Event Edit form already handles the TimeZone field for me, with a little help of some additional JavaScript in my component.  It adjusts the TimeZone information for me on the date fields.  Th ... READ MORE

Creating Flexible CQ5 Pages

One of Adobe's CQ5 Best Practices is to limit the number of Templates, I would suggest it is a best practice to limit the number of page components and create as many templates as necessary.Templates in Adobe CQ5 function differently than they do in many other CMS systems.  CQ Templates are placeholders for sample content and references to the component to render the sample content.  Often, projects create a 1:1 mapping between CQ Templates and the page components used to render the resulting page, but this does not need to be the case.Flexible Page ComponentsA more flexible way to create templates is to create multiple templates per page component, specifying the default components to be placed on the page.  This gives authors a sample to start with, without tying them to a particular structure.  At the sa ... READ MORE

Servlets in Sling - the case of the disappearing Servlet path

I have to admit, coming from a plain old JavaEE background, I was very dubious over the prospect of not using a Servlet path when creating custom Sling Servlets.  What - no Servlet path?  How will I access my Servlet?  New ideas always go down hard, but once I saw the light, it ALL made sense.Some folks have been evangelizing the use of Sling Servlets that are resource defined as opposed to path defined.  This idea is not new, nor was it invented or discovered by me.  What was discovered by me was why you would want to do that.  The light came on for me, and I hope this helps it turn on for you.Blinded by my JavaEE dogma, I initially failed to see the potential impact of defining a Servlet by resource rather than path.  I like familiar.  Its comfortable, predictable, I don't have to guess, it's like a close friend.  This is exactly the kind of state that Einstein described as a killer fo ... READ MORE

Protecting Packages and Replication Agents

By default, unless you are specifically blocking parts of CQ from your dispatcher, you could be exposing your Packages and Replication agents to the world.You can fix this by adding this snippet to the /filter section of your dispatcher.any file:      /0006     {         /glob "* /etc/*"         /type "deny" }     /0007     {         /glob "* /etc/clientlibs/*"         /type "allow"     }      /0008     {         /glob "* /etc/designs/*"         /type "allow"     }  It doesn't matter where ... READ MORE

END Form component is not delivered by the CQ elves...

I have long wondered how that stupid 'end' Form component shows up when you drop a 'start' Form component on a page.  Just like magic, that little bugger appears out of the ether.  The secret to this one is no longer a secret to you or me.Shame on me, and please forgive me, I did not write down the exact method I used to find this.  When I am "in the zone" hunting for something like this, shame on me, I rarely document what I did.  Maybe while writing it down here, some of it will come back.I frequently rely upon Recent Requests in the Sling console.   This one did not require my other blog post trick of increasing the recent request count.  Regardless, I cleared the recent requests, dropped the 'start' component on the page, and checked out what happened behind the scenes.  Try it yourself.You are going to see a "POST par".  Interesting.  What was it posting?  Click on that link.  About a thrid of the way down ... READ MORE

Configuring Telephone Tags within Rich Text components and the Link Checker

If you define a rich text field (xtype=richtext) in your componets dialog, if you try to enter a telephone link like<a href="tel:+13174562564">317-456-2564</a>when you try to save the content, the telephone link will be stripped out and not saved.You need to add the htmlRules and links node to your rich text field node <htmlRules jcr:primaryType="nt:unstructured">                             <links jcr:primaryType="nt:unstructured"                                     protocols="[http://,https://,ftp://,tel:,mailto:,file://]"    />              & ... READ MORE

Handling File Upload in Adobe CQ

You need to handle a file upload in Adobe CQ.  So, you notice CQ already has Apache Commons FileUpload installed, so you decide to use it to handle the file upload.You write your servlet code and end up with something like this:// Check that we have a file upload requestfinal boolean isMultipart = ServletFileUpload.isMultipartContent(request);PrintWriter out = null;try {  out = response.getWriter();  if (isMultipart) {    // Create a new file upload handler    final ServletFileUpload upload = new ServletFileUpload();    // Parse the request    final FileItemIterator iter = upload.getItemIterator(request);    while (iter.hasNext()) {      final ... READ MORE

Overriding the default damadmin or siteadmin pages in CQ5

Overriding foundation content in CQ5 was made fairly easy by our friends on the Adobe CQ team.  In the vast majority of cases, we can just replicate the path of the original code under libs to our apps folder.  In the case of siteadmin and damadmin, this would mean we need to copy the root node from the original path: /libs/wcm/core/content/damadmin or /libs/wcm/core/content/siteadmin to /apps/wcm/core/content/damadmin.  However, since these particular nodes are accessed through a vanityURL (/damadmin and /siteadmin respectively) instead of their path in the repository, there is a slightly different approach to overriding them.  Although it is still best practice to override in the same folder structure as the libs node (so you can default back to them for any un-overridden piece), there is an extra step to getting your content to actually appear when using vanity urls. This little gem of an property is called: vanityOrderOn both the damadmin and siteadmin nodes there ... READ MORE

Your Custom Namespace Retort

So - In my last article, I stuck my new Namespace in an OSGi bundle where it did not belong.  I wanted to verify the approach for adding the Namespace, and in my thinking at the time, it was the quickest location to do that.  It worked.  Great - now how do I put it in the "correct" location.You cannot simply remove the Sling Namespace metadata from the POM and redeploy.  Nope.  Still there.  What I could have done - because the Namespace would be defined somewhere - was simply define it in another OSGi bundle's POM.  But this got me thinking: what if I simply wanted to remove the Namespace altogether?  What then?  Hmmm.I actually figured this out backwards.  I identified the filesystem ... READ MORE

Fixing an out of sync CQ Cluster

Every so often a node in a CQ cluster will fall out of sync with its master.  This can happen due to a loss of network connectivity, power loss, or any number of other alternatives.  When the master and slave fall out of sync, it will be impossible to start both nodes (note start, if it was due to a network connectivity issue, it is possible that they can both remain running in a non-clustered state).  When this happens, as any server issue, first place to check is the logs.  Typically, a message like the following is displayed:*ERROR* RepositoryImpl: Failed to initialize workspace 'crx.default' (RepositoryImpl.java, line 540)javax.jcr.RepositoryException: Cannot instantiate persistence manager com.day.crx.persistence.tar.TarPersistenceManagerat com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.createPersistenceManager(CRXRepositoryImpl.java:1101)at com.day.crx.core.CRXRepositoryImpl$CRXWorkspaceInfo.doInitialize(CRXRepositoryImpl.j ... READ MORE

Note to self: This is Mike. BAD Idea to ...

... throw your laptop through the glass block window.Yes.  I'm back at it in spades on something that should be pretty simple.  Problem is there is lots of rhetoric on how it should/could/would be done, but honestly nothing of practical use.  This was not simply 10 minutes of Googling, throw my hand up and "Ach du lieber gott!"  No no no.  My most egregious sin is once I get it in my head that it should be simple and should be done a certain way, I'm not likely to give up any easier then my dog is to give up her chew toy.What was the issue?  I simply wanted to register a new Namespace programmatically.  Simply, right?  Well, this also related to registering new Nodetypes as well as I discovered.  Pretend I never wrote that last sentence.So my main man Center of Excellence has been slogging through the Sling source (say 10 times fast please) as of late,  When I pinged h ... READ MORE

Last Chance to Register for CQ5 Personalization Webinar

Today is the last chance to register for the CQ5 Personalization webinar.  The webinar will be held today, December 12th, 2012, at 1:00PM EST (12:00 - 1:00 PM CST 10:00 - 11:0 AM PST).The fifth of ten webinar series, will explore:Strategies for Personalization in CQ5Group vs Individual PersonalizationBlueprints/Live CopyCampaigns/TeasersClick here to download/watch the webinar! ... READ MORE

2 SlingHttpServletRequests walk up to a WhiteBoard...

Recently while creating a Servlet - which I have done hundreds of times on many a CQ based projects - the Default Get Servlet was getting resolved for my request.  I added logging, made sure the SCR name property was populated, round and round I go...  Unlike Stewart the GEICO mascot, I was not yelling "Weee!"  Quite the opposite.After bugging my compadre to have an extra set of eyes on the problem, and check to see if I was missing anything, a deep dark lurking memory started to surface.  Viola - I forgot there is a new CQ feature where you  "register" your servlet paths in CQ.  I am not talking about "allow" and "deny" statements in the Dispatcher - that is something completely different.  This is a new feature in CQ 5.5.Go to the Felix Console and search for "Apache Sling Servlet / Script Resolver and Error Handler".  In this little hidden mustard seed are the keys to the Servlet kingdom.  Add your new Servlet path here, and CQ will now resolve ... READ MORE

Gotcha: Sling Servlet Requires a Name

I recently had the opportunity to delve into the code for the Sling Resources to document the @SlingServlet annotation.  One of the more interesting things I discovered was that in addition to everything stated on the Sling documentation about what is required to register a servlet, there is one additional requirement.Each Servlet which is to be created and registered, must have an unique name.  The SlingServletResolver, which handles the resolution of Servlets, generates the name based on one of the following properties (in order):sling.core.servletNamecomponent.nameservice.pidservice.idThe value of this property m ... READ MORE

New in Apache Sling: getChildren

Recently I had the pleasure of contributing to the Apache Sling project.  Among other things, I contributed a suggested improvement to have Sling Resources return an Iterable<Resource> of the child resources.  Recently, the Apache Sling released an update to the Sling API,  including an implementation of this improvement.  With the new API change, developers will be able to leverage the enhanced for-each loops available in Java 6. This will allow developers to write code like:for(Resource child : resource.getChildren(){    [... do something ...]}Which is more consise and readable than the old style using an Iterator:Iterator<Resource> children = resource.listChildren();while(children.hasNext()){    Resource child = children.next();    [... do something ...]} ... READ MORE

Register for a Webinar on Personalizing Content with Adobe CQ5

Six Dimensions and 6D-Labs are pleased to announce the 5th in their series of CQ5 webinars: "Personalization"  This webinar will cover best practices in creating and deploying personalization strategies in Adobe CQ5.This webinar is intended for anyone with experience and exposure to CQ5 or another Web Content Management System.  This webinar will be especially helpful for teams who are planning on deploying personalized content in Adobe CQ5.When: Thursday, December 12, 2012 Time: 1:00 - 2:00 PM EST (12:00 - 1:00 PM CST 10:00 - 11:0 AM PST) Where: You'll be sent a Webinar registration upon completing the signup.Topics:The fifth of ten webinar series, will explore:Strategies for Personalization in CQ5Group vs Individual PersonalizationBlueprints/Live CopyCampaigns/Teasers ... READ MORE

Loading Classes in Adobe CQ

So you've got a problem.  You need to load a resource from the Classpath or you need to dynamically load a class and you're using Adobe CQ.  Since Adobe CQ uses an OSGi container, a regular ClassLoader will not be able to retrieve the class information from the OSGi Bundles.Never fear, Apache Sling provides the Dynamic ClassLoader Service.  This OSGi Service allows you to retrieve a ClassLoader which will allow you to interact with classes contained in OSGi Bundles.Using the ServiceUsing the service is easy, simply retrieve an instance of the service org.apache.sling.commons.classloader.DynamicClassLoaderManager and call the method ... READ MORE

You sunk my content path!

Juggling content from environment to environment is quite frankly a pain in the butt. PROD back to QA, QA back to DEV, DEV back to my personal CQ instance. The need to be concerned with overwriting content along the way. QA people will have their environment setup for regression testing, new testing, etc. Developers will have their tests and POC's setup on their own environments and DEV. You sometimes need to move content from QA to your local to test something that's broken on QA.Sound like a big hairy mess? Well, lemme give you the clippers.What I have done is create each environment with their own "sites". DEV will have a site: /content/DEV. QA will have a site: /content/QA, and may very well have sub-sites: UAT, REGRESSION, etc... capitalization optional of course. Within DEV each developer will have their own branch beneath that: FrankZappa, EdgarVarese, JohnCage, ElizabethFraser, you get the skinny.I would suggest that content can be promoted backwards but never forwa ... READ MORE

A CQ Dev Architecture on AWS Rejoinder

Why would you spend the time creating an AWS instance?DISASTER RECOVERY.When consulting on the projects that I am assigned to, I require the security of mind that if my CQ instance dies, I have a way to rebuild it in minutes not hours.  Not just the "base install" but all of my configurations as well.  I need the complete "environment" state preserved to be potentially reconstituted at a moments notice.  This keeps the client happy, and me from losing sleep or worse.Yes, there are many was to protect your precious CQ instance from the dangers of the development cycle.  I won't list them here, and I am sure if you have used CQ for any meaningful amount of time, you have destroyed your CQ instance at least once.  It seems to me that it happens at least once per project, and pretty much inevitable.  I will say as CQ has matured, the frequency of crippling my CQ instance has decreased.  Maybe its from more experience, although I am more i ... READ MORE

CQ Dev Architecture #02 Part 01 - Create Yourself an AWS AMI

I will attempt to explain the AWS tech we are using as best I can.  However, I am not an AWS expert nor do I play one on TV.  For things such as this, my main goal is typically: "make it work".  What I am showing you is what I have been able to make work.  Not too bad for a human if I do say so myself, and I just did.As you will soon see, there are a plethora of available pre-built machine images available.  Most of them are free, but there are just as many pay-for instances.  I suggest choosing a free one.I prefer using an "empty" image because I like knowing where everything is: where and what JDK version (Sun JDK 1.6.x), Tomcat (6.0.35), etc.  You get the idea.  There is nothing worse than having to go on an easter egg hunt looking for config files, log files, etc.  If I install it, I know where it is.  If you are using the pre-built AMI's you will have to figure out their install structure and locations.Feel free to u ... READ MORE

CQ Dev Architecture #01 - We're Building What?

In this blog post, and the subsequent 6 or so we will discuss one possible way of building a complete CQ development environment, "DevOps", development architecture, or whatever moniker you prefer.  To roughly outline this a bit for you:What we are building (this post)Create yourself an AWS AMINeeded Servers and their ConfigurationIDE Setup - EclipseMaven POM creation, organization, and CQ ProjectsCI / Jenkins Setup, configuration and build projectsWhat I don't like about my setupSome of the posts I may break up into smaller pieces in order to "release" the info to you quicker.  For example, I can see breaking #3, #5, and #6 into smaller bits.  We will see when we get there.I have spent a tremendous portion of my own personal and professional time attempting to reduce the burden of the development cycle as it relates to CQ.  The IDE environment, the management of dependencies (aka classpath ... READ MORE

Captains Log, Stardate 1210.9: Where the heck are my CQ Logs

The usual way for viewing remote CQ logs seem pretty barbaric and kludgy to me.  Cat, tail, VI, less, and a partridge in a pear tree.  They all require way too many steps, especially if I am in the heat of the development cycle.  If I am leisurely browsing through the park one day trying to look at my logs, and I'm not in a hurry, they will do.  But I like the solution below because of its lower "just in time" overhead for getting at those log files.  Plus there is also the issue of dealing with the huge amount of white noise in the logfile that it deals with as well.What this isWe are configuring ssh on the remote Unix side to allow us to automatically log into that server using Putty.  We are also configuring putty to automatically execute 2 commands to: cat the error.log and then tail it for the changes.  We are also configuring putty to log all printable output to a local file.  On our local system we will use a file tail-ing applic ... READ MORE

Why does my TextImage Resource Type Keep Changing!?

On my current project, we ran into a very weird issue where the dialog kept changing when user's dragged images into the TextImage component we overrode from the foundation TextImage component.  Specifically, this only seemed to happen when user's dragged images into the component inline. After doing some investigation, I found that the sling:resourceType on the nodes was changing when the image was dragged into the component.  The culprit is the CQ Edit Configuration in the foundation TextImage component.In CQ 5.5, the TextImage component includes the ability to drag images into the component without opening the dialog.  To enable this functionality, Adobe set the parameters to send to the server when an image is dropped into a TextImage component in the CQ Edit Configuration.  One of these parameters sets the sling:resourceType to 'foundation/components/textimage'.  Thi ... READ MORE

...and now for something completely different

This will be short and sweet, and if it saves your life even once, it will be well worth it in spite of the fact that it's not CQ related.Some background.My day to day work is done on an Ubuntu 12.04 LTS x64 using ext4 for my filesystem.  This detail is important, as you will see in a minute.I had been working on Maven POM's to be used as the foundation for the project I was working on.  I had likely been working for more than a day on them, with LOTS of changes not easily reproduced.  Because this was the first week or so of development, we were not yet using any SCM.  I was troubleshooting some kind of error, and I was quickly switching between a terminal window and Eclipse.  My terminal was setup so that I could page through my previous commands with the up-arrow.  I can't even remember WHY I was deleting files.I switched to my terminal, up-arrowed to recycle an 'rm' command - removed a portion of the filename on th ... READ MORE

Use the same JSON source to create a Dialog and JSP State Selection List

So I needed to create a selection list of all the US states, as a dialog control and also as a selection list in my components JSP.So rather than hard code values in my dialog or as html <option> values, I thought it would be cleaner to use a JSON array of US state objects.I found a JSON list of US states on the web, and I modifed it to have the following structure[   {text:"Alabama", label:"Alabama",value:"AL"},... ...    {text:"Wyoming", label:"Wyoming",value:"WY"} ]and I saved it to a file called states.json, and I uploaded this file into the CQ repository at  apps/myapp/resources/json/states.jsonTo create the state selection list in my dialogue I created a cq:widget node that had the following properties ... READ MORE

Why Aren't My Public Events Working?

Creating widgets with Public Events and other widget JavaScript functionality allows for the creation of extremely powerful and user friendly dialogs.  Unfortunately, it can be difficult and frustrating to figure out what is the cause when the functions fail to work.Often, Public Events won't fire and there will be no indication in the console or errors as to why.  Here are some tips which may make it easier to figure out why your Public Event or other widget function isn't working.Missing Listener?Adobe CQ's Widget's API is a great resource for finding information on the JavaScript widgets used for creating CQ Dialogs.  Unfortunately, one fact that does not seem to be documented is, to use the Public Events, you must add the events into a subnode to the widget called listener.  Its easy to forget this and add the Public Event method's into the widget node, thi ... READ MORE

Workflow Launcher Blues

When creating workflow launchers I recently thought it a good idea to organize them within the /etc/workflow/launcher/config node by creating sub-node's to contain the customized launcher's organized by company name. Given the fact that the models support this, I figured this would be similar.  The only need, I thought, similar to the model sub-nodes is that the subnode of config would have to be of the same type as the config node itself.  With the workflow model's, it works this way. SIDE NOTE:  If I were a betting man (which I am every third year or so) I would bet that in an upcoming release they would add the ability to organize your models from the workflow console.  Right now, this is not possible.  You MUST use CRXDE Lite to accomplish this, or build it into the maven project containing your customizations.   First, I would highly recommend that custom workflow models become assets that are part of your build. Thi ... READ MORE

WYSIWYG HTML Source Editor Considered Harmful

Most Web Content Management system's Rich Text or WYSIWYG editors have an optional feature to allow authors to directly edit the HTML instead of using the WYSIWYG.  Among one of the first decisions made on a WCMS implementation project is to enable or disable this feature.  Proponents of the HTML editor argue for author flexibility and for freedom to directly enter markup.  I would argue, however, the HTML editor should not be enabled.What's Wrong with the HTML Source Editor?Allowing authors to directly edit the HTML contents of a page is a dangerous proposal; it defeats the purpose of the templating features of the WCM system, increases the complexity of supporting the system and indicates a failure of the WYSIWYG or a failure to decompose the requirements for the site.Authors Not DesignersWhen authors and Content Administrators are allowed to directly update the markup for a section, they are no longer required to follow the standards created by the templati ... READ MORE

Increasing Recent Requests in the Felix Console

I argued with myself for some time before commiting to writing this post.  Part of me thought it kind of silly to post such a thing.  Then I reflected on the hour or so I wandered around trying to figure out how to get this darned thing to do what I needed it to.  So, now you won't have to wonder how the heck to get this to work properly.  This was tested on CQ 5.5 SP1, but that does not necessarily mean it wont work on other versions as well.When reverse engineering components, one of the native Felix tools I use is the "Recent Requests" (/system/console/requests) tool in the Felix console.  The issue is that the maximum of 20 requests is frequently not enough to capture - say a form post.  Twenty requests basically showed me all of the image requests, but none of the form field requests.The "Recent Requests" tool shows information that is gathered by the Sling Engine for each individual request that is made to Sling.  Wh ... READ MORE

Releasing an Adobe CQ5 Project with Apache Maven

Apache Maven's release plugin is a powerful tool for automatically incrementing version, tagging code and creating a release. Unfortunately, this plugin is not very forgiving and doesn't do a good job of telling you what you did wrong when it fails. Setting up Maven to release your CQ5 project can seem daunting, but if you follow a few simple rules it can be easy to set up and save you a ton of time in the long run.  The following steps should help you to get your project set up to be released through Apache Maven.1. Create the Correct Folder Structure (SVN Only)Inside your source control management (SCM) system, ensure that you have your folder structure configured correctly.  You must have a folder structure like this:{repo_root}/project/trunk/project               &n ... READ MORE

Dumping CQ Configuration

Often when providing remote support, you may want to send a complete snapshot of a CQ instance's configuration and state to others to help debugging.  Generating a report of the complete status of the OSGi configuration, environment state and logs is as easy as invoking a single url. The OSGi console will generate a report of the following items when you invoke: {SERVER}:{PORT}/system/console/config/configuration-status.zipAll Log FilesWire AdminThreadsSystem PropertiesSling Thread PoolsSling SettingsSling Servlet FiltersSling Scheduler JobsSling Resource Resolver Map EntriesSling Referrer FiltersSling PropertiesSling Eventing QueueAvailable Sling AdaptorsServices & their propertiesRegistered Script EnginesCRX ConfigurationProduct/Licensing InformationPreferences/Permissions (if Available)Java Package Admin ... READ MORE

CQ5.5 OSGi (/system/console) Permissions

In the past, I've had several clients requesting access to the OSGi console, or /system/console, for users other then the built in "admin" user.  This is a fairly straightforward configuration but there is limited information about it online.  Out of the box CQ permissions unfortunately do not handle the OSGi / Felix stack.  Because of this, assigning a user to the "administrators" group in CQ is not enough to grant them access to the OSGi console.  This has its upside, though, as typically the configurations found in the OSGi Console can greatly affect how the server runs/operates it is a best practice to limit access to a handful of knowledgable users.The bundle that we need to configure has the package name of: org.apache.sling.extensions.webconsolesecurityprovider.internal.SlingWebConsoleSecurityProvider.  In the OSGi console, you can set the users by doing the following:Navigate to /system/console/configMgrClick the "edit" button next to "Apac ... READ MORE

Building a dialogue to have 2 or more images

Most of time when I build a component I only require a single image so the dialog I build will look something like this<jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"    jcr:primaryType="cq:TabPanel"    activeTab="{Long}0"    helpPath="en/cq/current/wcm/default_components.html#Text Image"    xtype="tabpanel">    <items jcr:primaryType="cq:WidgetCollection">        <tab1            jcr:primaryType="cq:Widget"            ddGroups="[media]"            fileNameParameter="/fileName"            fileReferenceParameter="/fileReference"      & ... READ MORE

MessageGatewayService vs MessageGateway<HtmlEmail>

When creating services which use the CQ5's MessageGateway API to send emails, it can be tempting to use the following to directly reference the MessageGateway you need in your service: @ReferenceMessageGateway<HtmlEmail> messageGateway; Unfortunately, this can cause issues as the MessageGateway will not be available if the Day CQ Mail Service is not configured.   If the Day CQ Mail Service is not configured the MessageGateway service will not be registered in OSGi.  This will mean that your component will not register properly and may cause a cascade through any Services which use your original service. The worst part is that CQ5 will not log any error m ... READ MORE

Creating a CQ 5.5.x ClientContext Compatible JSONP Servlet

The bulk of what needs to be done for creating a JSONP servlet isn't much different than creating a POJEES - 'Plain Old JavaEE Servlet'.  In fact, the servlet I created ran under Tomcat 6.0.38. So we wont cover any of the Servlet method names implemented/overridden or configuration of the Servlet. The first problem I had was figuring out what the content type should be.  This took some digging, but the following header finally got the CQ ClientContext to recognize the JSONP response: response.setContentType('application/x-javascript'); The sources I found did not all agree on a value, but this value does work. Then what I found was that when the ClientCont ... READ MORE

JVM Remote JMX Monitoring - Part 2

The last post talked to the ability to connect to a "remote" JVM, that is, a JVM not running behind a firewall.  This could either be a home or corporate network.   The key point being that all TCP/IP ports on the machine running the JVM are accessible by another machine that will be running JConsole or JVisualVM.This post, however, covers accessing a JVM behind a firewall - specifically AWS.  This means that only certain ports will be open on the "Server" machine for the "Client" machine to attach to.The problem with running a RMI server is fairly well documented, so we won't cover it here in detail.  The 2 cent tour of the issue is that when configuring the RMI port for JMX it actually uses 2 RMI ports, one port is for the RMI registry, and the other is for the RMI Objects.  The problem is the second port is selected randomly at runtime, and without the ... READ MORE

Sending Email with the Adobe CQ API

Sending emails through Adobe CQ can be easy, however there really isn't an example which brings the entire process together.  This blog post will guide you through the process of configuring Adobe CQ to send email, creating a component for sending email, creating an email template and finally creating a servlet which will send the email.First, though, what are the benefits of the Adobe CQ Email API?  The Adobe CQ API provides a method for sending emails through a centrally configured service.  You can send emails of multiple types and you can even create authorable templates so developers do not need to be involved in creating and updating email templates.Configuring CQ Mail ServiceThe first step to sending emails through Adobe CQ is to configure the Day CQ Mail Service.  To do this, log into to the OSGi Console at {server}:{port}/system/console/configMgr and look for a service called Day CQ Mail Service. Select the s ... READ MORE

Toggle CQ Author and Preview Bookmarklet

When using Adobe CQ5, you often want to be able to switch between author and preview mode.  Unfortunately, the preview included in the Sidekick does not provide a complete preview as it does not remove the Sidekick or the Content Finder.I created a bookmarklet which will switch the page between authoring mode and a preview where the Sidekick and Content Finder are removed and the WCMMode is set to disabled.  This bookmarklet preserves query string and hash values.   It has been tested in CQ 5.5 and works in FireFox and Chome.  It does not work in Internet Explorer.Adding the BookmarkletFollow these procedures to add the bookmarklet depending on your current browser.  The bookmarklet is most useful when placed in your bookmark toolbar for quick access.In FireFoxRight click on the link below and select Bookmark This Link to add the bookmarklet.In ChromeRight click on the link be ... READ MORE

JVM Remote JMX Monitoring

Setting this up will allow the use of JConsole and JVisualVM to be used for remote monitoring.Benefits: First, running these tools remotely reduces the overall CPU and memory overhead on the remote box.  Second, you do not need physical access to the system to perform monitoring.You should be sensitive to the following: security issues around allowing remote access to a JVM, and governance with IT departments to prevent too many connections to the remote JVM.  We will address the first issue in this post.  The second issue for now can only be address ... READ MORE

Calling all CQ5 Developers: OSGi v. JSPs Webinar

Do you develop components for Adobe CQ5 and wish there were a better way of abstracting your commonly used Java code?  Have you heard of OSGi, but haven't had a chance to actually implement it on your project?  Six Dimensions and 6D Lab's upcoming webinar OSGi v. JSPs, might be just the thing you need!About the WebinarThis webinar is the third in our series of CQ5 webinars and will cover best practices in developing and organizing Adobe CQ5 Components and Applications. This webinar is intended for technical audiences, and will be especially helpful for developers who are experienced with JSP component development, but are not very experienced with OSGi Service development.In the webinar, Senior CQ5 Developer Bryce Acer, will explore:Strategies for component developmentCode organization When to use Java versus JSPTime & LocationWhen: Thu ... READ MORE

Select from Pages in a CQ5 Dialog

When constructing a dialog, you may want to present users with a list of pages to select from.  Browse and path fields work well for selecting from a tree, but often you may need to show just the pages from a single folder or from some discrete list.Using the optionsProviderOne way to do this is to create a selection field and populate the value through a JavaScript function in the optionsProvider field.  This field is supposed to contain a function which gets called when the dialog loads and returns a JavaScript Array of Objects containing the data to populate the selection.Each object can have the following attributes:value - the value to save into the repositorytext - the text to display to the userqtip - hover text, extra information for the userGetting the U ... READ MORE

Announcing the Release of CQ Deploy Version 0.1.4

The Six Dimensions Labs team is proud to introduce version 0.1.4 of CQ Deploy, an Apache Maven plugin for deploying Maven projects into Adobe CQ repositories.The CQ Deploy plugin allows developers deploy CQ projects using Maven in an easy and consistant manner.  The CQ Deploy Plugin is capable of deploying both packages and bundles and is compatible with CQ 5.2-5.5.The current release, version 0.1.4 brings:Added the ability to skip the installation of bundles.Added the ability to pull the CQ5 Application name from a property called app.name. This is then used to construct the upload path for the bundes.Fixed logging around the parsing of the Access Control Handling to not log to info if no value specified.You can read more about CQ Deploy on the documentation ... READ MORE

Good to Know: InheritanceValueMap

The InheritanceValueMap is a new interface introduced in CQ 5.4.  This interface is meant to make it much easier for developers to access properties inherited from parent pages.  To do this, the interface provides two methods, getInherited(String,Class) and getInherited(String, Object), each of these methods will check for a value on the current resource and then check up the page hierarchy for another page with a value on the same content attribute.  It will only attempt to retrieve values at the same page content path Unli ... READ MORE

Introducing CQ Deploy Version 0.1.3

The Six Dimensions Labs team is proud to introduce version 0.1.3 of CQ Deploy, an Apache Maven plugin for deploying Maven projects into Adobe CQ repositories.The CQ Deploy plugin allows developers deploy CQ projects using Maven in an easy and consistant manner.  The CQ Deploy Plugin is capable of deploying both packages and bundles and is compatible with CQ 5.2-5.5.The current release, version 0.1.3 brings:Added unit tests to test failure resultsAdded support for optional install properties.Fixed issues where the legacy installer required the user to set the path or it would upload, but not install the package.Improved handling of errors when the legacy package manager installs a bundle with invalid XML.You can read more about CQ Deploy on the docume ... READ MORE

Maven CQ5 Package Build: Updating Properties.xml

This article describes the process of adding and automatically updating a CQ5 Package properties.xml as a part of a Maven build.Why do I need a Properties.xml?Certain CQ5.4 Hotfixes are known to cause issues where packages without a properties.xml will not install properly.  If you attempt to install a package into a CQ instance with the affected Hotfix, you will see this error:java.lang.NullPointerException at com.day.jcr.vault.packaging.impl.InstallHookProcessor.registerHooks(InstallHookProcessor.java:80) at com.day.jcr.vault.packaging.impl.ZipVaultPackage.prepareExtract(ZipVaultPackage.java:303) at com.day.jcr.vault.packaging.impl.JcrPackageImpl.extract(JcrPackageImpl.java:341) at com.day.jcr.vault.packaging.impl.JcrPackageImpl.install(JcrPackageImpl.java:314) at com.day.crx.packaging.impl.J2EEPackageManager.consoleInstall(J2EEPackageManager.java:304) at com.day.crx.packaging.impl.J2EEPackageManager.doPost(J2EEPackageManager.java:152) ... READ MORE

Webinar: CQ5 Development Setup, Maven Build and Deployment

Six Dimensions and 6D-Labs are pleased to announce its 2nd CQ webinar "CQ5 Development Setup: Maven Build and Deployment"  This webinar will cover best practices in building and deploying CQ5 applications.This Webinar is intended for technical audiences, i.e., developers and architects who have existing experience with CQ5.When: Thursday, June 21, 2012 Time: 11:00 - 12:00 PST (1:00 - 2:00 CST 2:00 - 3:00 EST) Where: You'll be sent a Webinar registration upon completing the signup.Topics:The second of ten webinar series, will explore:Project StructureCreating a Maven ReactorCreating BundlesMulti-Project SetupsIDEs and ToolsMaven PluginsEclipse PluginsContinuous IntegrationCreating a Single PackageDeploying to CQ5 ... READ MORE

Introducing CQ Deploy Version 0.1.1

The Six Dimensions Labs team is proud to introduce version 0.1.1 of CQ Deploy, an Apache Maven plugin for deploying Maven projects into Adobe CQ repositories.The CQ Deploy plugin allows developers deploy CQ projects using Maven in an easy and consistant manner.  The CQ Deploy Plugin is capable of deploying both packages and bundles and is compatible with CQ 5.2-5.5.The current release, version 0.1.1 brings:Improved documentationImproved loggingA fix for an issue where creating new folders caused an error in CQ 5.5You can read more about CQ Deploy on the documentation website.To report any issues, or ask any questions, please create an issue. ... READ MORE

The Unofficial Guide to the Adobe CQ5 Translator

The Adobe CQ5 Translator is a powerful tool for managing and updating translations.  Using this tool you can create, update and remove i18n values across multiple languages in multiple translation dictionaries or groups of i18n keys.Using the CQ5 TranslatorTo use the CQ5 Translator access the URL http://{SERVER}:{PORT}/libs/cq/i18n/translator.html, replacing the server and port with the correct values for your environment.  This will pull up the CQ5 Translator as shown below.The CQ5 Translator The CQ5 translator allows you to manage multiple dictionaries, or sets of localized keys.  This allows you to separate out site or application level keys from system keys and keep the keys organized by function or use.  To chang ... READ MORE

CQ5 Upgrade Gotcha: Tag Localization

In CQ 5.4, Adobe added the ability to translate tags through the Tag Manager.  Unfortunately, due to the way this was implemented, it can cause issues when upgrading from CQ 5.3 or older.After performing the upgrade and importing the existing tags, you may find there are no languages available to translate the tags.  The Localization section will be visible, however no languages are available.Fortunately, the fix for this issue is easy.  Update the node at /etc/tags to have a repeating String attribute called languages with the languages in which you wish to localize the tags.  More information can be found on Adobe's documentation website: ... READ MORE

Introducing CQ Deploy: A Maven Plugin for Deploying CQ Projects

The Six Dimensions Labs team is proud to introduce CQ Deploy, an Apache Maven plugin for deploying Maven projects into Adobe CQ repositories.The CQ Deploy plugin provides two goals, to help developers deploy Maven projects:install-package This goal is used to install CQ Packages into CQ Repositories.install-bundle This gloal is used to install bundles into CQ Repositories.  This goal is different from the Maven Sling Plugin's deploy method.  Whereas the Maven Sling Plugin installs the bundle directly into the Felix application, the CQ Deploy plugin is used to upload the JAR into the CQ Application install folder and the path thereof can be configured.As the plugin deploys both Packages and Bundles in a consistant method, developers can use the CQ Deploy plugin to create a single, unified packa ... READ MORE

SCR JavaDoc Tags Deprecated in CQ 5.5

Teams migrating to Adobe CQ 5.5 have one more thing to check during the upgrade.  In CQ 5.5, the SCR JavaDoc tags are deprecated, because of this, you can no longer create bundles in CRXDE or CRXDE Lite when the code in the bundles contains SCR JavaDoc tags.  When Adobe ported CRX over to run inside of the OSGi Container, they created a bundle for the CRXDE functionality.  This includes the remote compiling and bundle builder used by CRXDE and CRXDELite.  In the bundle they set the bundle builder to create bundles using 'strict mode', this mode triggers an error when it encounters the deprecated SCR JavaDoc tags and prevents the building of the SCR Descriptor XML.  A JAR will be created, however it will not have the OSGi metadata needed to register services in OSGi. How can I tell if my project is affected?Neither C ... READ MORE

Good to Know: The Sling PersistableValueMap

The Sling ValueMap makes retrieving properties from CQ easy and removes a lot of the error-prone code you have to use when using the JCR APIs, however it does not allow setting of properties.  This unfortunately results in developers using the Sling ValueMap to retrieve properties and JCR Nodes and Properties to set properties.  This doesn't have to be the case though!  Sling also provides an interface which allows for retrieving properties like a ValueMap and an easy faculty for setting properties as well.  The PersistableValueMap differs from the ValueMap only in it's put method does not throw an exception and it offers two more methods.  The ... READ MORE

New in CQ 5.5: Sling Adapters Console

Adobe CQ 5.5 has a new, long overdue feature in the Felix Console.  The Sling Adapters Console lists all of the available Sling Adapter Factories as well as their Adapter Classes, Adaptable Classes, condition information and Providing bundle.  This information can be invaluable for developers to determine what classes can be adapted and what they can be adapted into as well as checking the functioning of custom adapters.  Developers can access this information by logging on to {CQ_SERVER}/system/console/bundles or selecting the Sling Adapters tab on the Felix Console.   The Sling Adapters Console does rely on additional metadata to retrieve the list of Adapters, so you may have to add some additional annotations to get existing cu ... READ MORE

New in CQ 5.5: Dependency Finder

Adobe just released CQ 5.5, the latest version of their flagship enterprise Web Experience Management product.  Along with a new UI, numerous speed and stability fixes and deeper integrations with Adobe's other products, CQ 5.5 comes with some new tools to make using and developing on CQ easier. One of the new tools is the Dependency Finder, which comes shipped in the Apache Felix console.  This tool can be very useful to developers to find the dependency information they need to add into their Maven POM or figure out which Bundle contains a particular class or package.  To load the Dependency Finder, login to: {HOST}/system/console/depfinder   The Dependency Finder has only one field.  In it, enter the packages or class names you want to find, separatin ... READ MORE