Thursday, July 25, 2013

HOW TO SPARK AND SCALE ENTERPRISE CONTENT STRATEGY

Go to article

Colleen Jones Talks with Content Visionaries at Dell
Colleen JonesPOSTED BY
COLLEEN JONES
JUL 17 2013
Smart companies recognize the importance of smart content.
Diane Bunton, Marketing Director for Global Online Content Operations at Dell Inc., explains
“Dell has a practical, no-nonsense approach to helping customers do more. We want our content to be relevant for the decisions our customers are making.”
But how do you ensure a strategic approach for each and every piece of content across your entire organization, especially if it’s large? In other words, how do you make enterprise content strategy work? It’s a question facing enterprises across industries and around the world.
At the Fortune 50 technology leader Dell, the company’s portfolio of end-to-end  solutions demands compelling content for products, services and markets worldwide—from marketing all the way through technical support. Getting all of that content right is a massive, complex challenge.
So Dell’s leadership tackled the question head on. Their answer? Build a content strategy that scales.
Let’s take a closer look at the content challenges Dell faces and how content visionaries such as Diane are overcoming them by forging a united vision for content strategy and enabling global teams to implement that vision.

THE CHALLENGES THAT SPARKED A CONTENT STRATEGY SOLUTION

Because it covers an extensive range of products, services and markets, content creation at Dell involves hundreds of employees and takes place all over the world, from the company’s Round Rock, Texas, headquarters to the UK, Japan and beyond.
Until recently, operations had been segmented around business units, with content following as an extension of that segmentation. As is often the case in large enterprises, content at Dell was being produced in decentralized silos that didn’t always coordinate. What makes Dell different from many large companies? Thought leaders realized there had to be a better approach—and that approach involved content strategy.
Brennan Dell, the company’s Director of Marketing Education, explains that he and others came together and discussed a different philosophy…
“Let’s rein this back in, and not only decrease the number of people with the ability to create content, but sync up our approach and get more consistent about our strategy for content creation and maintenance.”
Of course, taking a content-first approach means more people have to collaborate across different teams. Aaron Burgess, Dell’s Senior Manager for Content Strategy, explains
“If we are building an interface that is just one company collecting content from all these different silos into one presentation layer, then holy cow, we need a plan for how we work together.”
Dell started to do things differently on key projects—with much success. One big win was the content strategy to support the launch of Dell’s 12th Generation PowerEdge Servers. The right promotional content in campaigns, through social media, and on the Dell.com home page drove people to in-depth content about the new PowerEdge launch on Dell.com.
sample content flow
This sample flow shows how Dell strategically planned the PowerEdge content that customers needed. Dell sought to repeat successes like this by scaling content strategy.
Why did this success happen? Because of content strategy. Instead of operating in silos, teams collaborated and coordinated with one another from start to finish.
“We realized this is the way we should be doing it in the future,” Brennan notes.
That realization raised a new question and a challenge: How do you scale a strategic approach for each and every content project or effort at a global enterprise? With so many people involved in the planning, creating, and building / publishing phases of content, the challenge is not small. That’s where my team and I collaborated with Aaron, Brennan, and Diane.
Let’s take a closer look at the approach and insights from our recent collaboration with Dell that might help your organization adopt content strategy.

TRAINING AND TOOLS: SECRETS TO SCALING CONTENT STRATEGY

After talking with stakeholders from several different Dell content teams, we realized that scaling content strategy would take alignment around two things:
  • A core vision for content strategy.
  • A practical framework and supporting tools for implementing content strategy.
As Diane notes
“We have multiple marketing organizations—search, video, product, and more—but we need our customers to have a similar experience, no matter where content is coming from. We wanted to get all of our content teams aligned on the basic goals.”
So, together, that’s what we did. The key? A two-part system of training and tools.

1. In-Person and Remote Training

We developed an in-person and remote training course for Dell’s headquarters and key global markets. The goals included articulating the value of content strategy, offering a unique vision for it at Dell, and empowering people to apply it. Brennan confirms,
“It was a good level-set across Dell’s online division on the importance of content strategy, why we need to have a content strategy brief, and what goes into creating a good content environment and user experience.”
A few elements of the training made it work well: relevance, credibility, and case studies.
Relevance
At Dell, “content” often translates to “marketing,” so the training focused on content strategy from the perspective of marketers. As Aaron notes,
“The course was was speaking their [marketers'] language right from the start.”
Credibility
I personally led each session with a wide variety of professionals across different teams at Dell. Not only did I enjoy the insightful questions and diverse perspectives, but my background enhanced the training’s credibility. Diane points out,
“People appreciated meeting the author of Clout, a thought leader in the field.”
photo of Colleen Jones delivering enterprise content strategy training session at Dell headquarters in Round Rock, TX
Professionals from different teams and with different perspectives at Dell came together for training in content strategy.
Case Studies
Sometimes, the best way to learn something is by example. Diane explains,
“It was really helpful to see the case studies within technology and also in different industries.”
But, the training would not be complete without the right tools.

2. Practical Tools

We provided several tools to empower Dell employees to do more with their content. “These were great supplements to the delivered training,” Brennan notes.
sample from custom Content Strategy Brief for Dell
The Content Strategy Brief (sample shown) helps everyone involved in content ask the right planning questions.
  • The Content Strategy Quick Guide
    A concise recap of the training’s main takeaways that content planners, creators, and managers can refer to frequently.
  • Content Strategy Brief Template
    A custom template that promotes planning and communication before, during, and after content is created and launched.
  • Clout: The Art and Science of Influential Web Content
    My book, with even more tools, resources, and case studies.
So, what were the results?

THE RESULTS

The training and tools have fanned the spark of content strategy at Dell into more of a flame. Aaron notes
“The biggest success so far has been changing the conversation and getting people speaking with a similar vocabulary about content at Dell.”
The content strategy brief brings that conversation to life in actionable ways. Diane elaborates,
“I’m seeing people ask more questions like the ones in the Content Strategy Brief and do more planning at the front end of a content project.”
Dell has also set up a repository for the training resources and tools, which Burgess says has been active with people accessing and downloading them. He notes,
“Each of these things is a little seed that’s being planted, and I’m confident that we’ll see more good results as more people adopt and evangelize the lessons from the training.”

TAKEAWAYS FOR YOUR ENTERPRISE

If your organization suffers from silos or faces other scaling challenges like those at Dell, then you can learn from the technology giant’s example.
  • Reach out across teams and silos.
  • Talk through a more strategic approach to content.
  • Get a big content “win” to spark interest and support.
  • Scale the content strategy with relevant training and practical tools.
Change at this scale takes time, but it will happen. And, the results will be well worth the wait.

Introduction To Photoshop Scripting

By 

Automation is useful in the work of every designer. It saves precious time on repetitive tasks and helps us solve certain problems more quickly and easily.
You can automate your workflow in Photoshop with actions, which are pretty popular and which most of you already know about and use. Today, we’ll introduce you to an advanced automation technique: scripting. All you need for this is basic knowledge of JavaScript, which some of us Web designers already have.
I’ve known about Photoshop scripts for years but decided to really dive in a few months ago. I had avoided it because I thought it was the domain of smart math-minded programmers. I was wrong, and today I’ll show that, although it requires some basic programming skills, scriptingisn’t hard to grasp.
But first, we have to answer the obvious question.

Why Do We Need Scripts?

Why should we would learn to script if Photoshop already has pretty nice actions? The answer is interactivity. When you use an action, you can’t really control how it behaves in different situations; it is like a videotape that just keeps playing again and again without any change.
Why We Need Scripts?
A script is more dynamic; its behavior changes according to the parameters you input or the context of its application. Sounds useful, no?

Requirements

You don’t have to be an advanced programmer to be able to write scripts; I’m just a graphic designer, like most of you. But you should at least have a basic understanding of JavaScript and some experience with properties and methods to get the most out of this article.
Requirements
If you are not familiar with JavaScript at all, fear not! There are plenty of places to learn the basics of programming. Codecademy, for example, has pretty neat interactive lessons.
I work in Adobe Photoshop CS5, but everything we’ll cover applies to newer versions, too; Adobe hasn’t made any major updates to its scripting API since CS5. I will refer to the latest version of the scripting documentation, though, which is CS6.

Getting Started

When you record actions in Photoshop, you set the order of the steps to achieve a certain result — that’s your algorithm. Then, you press “Record” and replicate them in Photoshop one by one. Scripting is similar, but instead of doing these steps in Photoshop, you write them down as lines of code. Most actions that you do in Photoshop have their own script equivalent as a function.
Start here
Let’s say you are creating an action that scales a document to 150% of its original size. You’d go through these steps:
  1. Open Image → Image Size.
  2. Enter 150% in width and height.
  3. Hit “OK.”
The same process with a script would look like this:
  1. Call the application: app
  2. Target a document: activeDocument
  3. Call the function to resize the image: resizeImage(width, height)
And the code would look like this:
app.activeDocument.resizeImage("150%", "150%");

LANGUAGE

There are three ways to write scripts for Photoshop: using AppleScript on Mac, VBScript on Windows or JavaScript on either platform. I use the third because it is cross-platform and I already have some experience with it.

TOOLS

Adobe has its own utility for writing scripts, called ExtendedScript Toolkit.
Adobe ExtendedScript Toolkit
The main window for Adobe’s ExtendedScript Toolkit. (View large version.)
The toolkit comes with Photoshop, and you can find it in the following folder:
  • Mac OS X
    /Applications/Utilities/Adobe Utilities CS6/ExtendScript Toolkit CS6/
  • Windows
    C:\Program Files\Adobe\Adobe Utilities - CS6\ExtendScript Toolkit CS6
    (or Program Files (x86) for 64-bit machines)
The user interface of the ExtendedScript Toolkit is pretty straightforward. To start writing scripts, first select the target application in the drop-down menu. If Photoshop is running, then look for the green chain icon near the drop-down menu:
Application Select
Now you can write something like this:
alert("Hello Photoshop!");
Press cmd + R (or just hit the “Play” button in the toolbar) to run your script. ExtendedScript Toolkit should switch to Photoshop and show an alert box:
Hello Photoshop!
ExtendedScript Toolkit has some other neat features for debugging scripts, but this is enough for this article. You can learn more about how to use it by going to Help → JavaScript Tools Guide.
You can use any plain-text editor to write a script; just save it as a .jsx file. To run it, you’ll have to go to File → Scripts → Browse in Photoshop and select it. Alternatively, just open the script file with Photoshop. You can also add a line of code at the top of the script so that the file always opens in Photoshop:
#target photoshop
Save your scripts in the Photoshop/Presets/Scripts/ directory, and access them with File → Scripts. You can also set up a hotkey; just go to Edit → Keyboard Shortcuts, navigate to File → Scripts → [your script’s name], and set the shortcut you want.
ExtendedScript Toolkit can run and debug code from the integrated development environment, and it has an object model viewer built in, which is useful. So, I recommend using the toolkit to write your scripts. Unfortunately, the Mac version crashes sometimes, so keep that in mind.

PHOTOSHOP OBJECT MODEL

To make writing scripts easier, you should understand how things relate to each other in Photoshop’s Document Object Model (DOM). Understanding it is not so hard if you look at Photoshop itself. The main object in Photoshop’s DOM is the application. In the application, we have a collection of documents that are currently open in Photoshop.
Each document contains elements — such as layers (called ArtLayers), groups of layers (LayerSets), channels, history states and so on — just like in a regular PSD document.
A simplified visualization of Photoshop’s DOM is below. A more detailed containment hierarchy can be found on page 12 of “Adobe Photoshop CS6 Scripting Guide” (PDF).
Simplified visualization of Photoshop API
A simplified visualization of Photoshop’s DOM.
Each of these objects has its own properties and methods that you can work with. For example, to change the opacity of the selected layer in a document, you would go toApplication → Document → Layer → Opacity and set the desired value. The code would look like this:
app.activeDocument.activeLayer.opacity = 50;
As you may have guessed, activeDocument and activeLayer determine the currently selected document and layer.
You can find descriptions of most objects and their properties and methods in “Adobe Photoshop CS6 JavaScript Scripting Reference” (PDF), or in ExtendedScript Toolkit by going to Help → Object Model Viewer.
Let’s see how this works in a real-world example. In this next section, we’ll write our own script based on an action.

Remastering The RotateMe Action As A Script

A few years ago at Christmas time, I had an idea for an action to help me draw snowflakes.

DRAWING SNOWFLAKE 101

  1. Draw one stem of the snowflake with a pattern.
    Step One
  2. Duplicate the stem, and rotate it a few degrees.
    Step Two
  3. Repeat the second step until you have a full circle.
    Step Three
Duplicating and rotating each stem manually is tedious, so I came up with an action to automate it. The algorithm looks like this:
  1. Duplicate the stem.
  2. Rotate it by however many degrees you’ve chosen, using the Transform tool.
  3. Duplicate the layer.
  4. Use the “Repeat Transform” function.
  5. Repeat steps 4 and 5 until you have a full circle.
Pretty neat. But the action had a disadvantage: You can set only a certain number of stems for the snowflake, according to the number of degrees you set in third step of the algorithm.
Back when I wasn’t familiar with scripting, I just made a few versions of the action, each of which produced a snowflake with a different number of stems.
Today, we will remaster this action as a dynamic script that takes your input on the number of stems. Let’s get started!

ALGORITHM

When you start writing a script, defining the algorithm first before digging into the code itself is always a good idea. In our case, the algorithm will work like this:
  1. Ask the user to enter the number of stems.
  2. Calculate the rotation angle.
  3. Duplicate and rotate the layer by the number set in the first step.
Let’s start with saving the current or selected layer to a variable for further use:
// Save selected layer to variable:
var originalStem = app.activeDocument.activeLayer;
Note that in JavaScript, you can mark a line with double slashes (//) to make it a comment. Comments are used to describe parts of code for future reference and don’t affect the behavior of the script.
Let’s move on to our algorithm now.

1. ASK USER FOR INPUT

We can take input from the user with the prompt(message, default value[, title]) function. This function shows a dialog box with the message and an input field that contains thedefault value. When the user hits “OK,” the function returns the inputted value; so, we have to save it to the variable to be able to be used.
// Ask user for input by showing prompt box and save inputted value to variable:
var stemsAmount = prompt("Processing \""+originalStem.name+"\"\nHow many stems do you need?", 12);
Note that I used originalStem.name in the message, so the dialog box will show the name of selected layer.
On Mac OS X, the first line of the message is in bold and functions as the title. So, our main message should be on the second line. To make a new line, type \n.
In Windows, you can specify a third argument in the function to set the title:
// Ask user for input by showing prompt box and save inputted value to variable:
var stemsAmount = prompt("How many stems do you need?", 12, "Processing "+originalStem.name);
If we run the code in Photoshop, it will show this dialog box:
Prompt dialog
When the user hits “OK,” the inputted value will be saved to the stemsAmount variable. If the user clicks “Cancel,” then the function will return a null value. We’ll use this later.

2. CALCULATE THE ROTATION ANGLE

To calculate the rotation angle, we have to divide 360 degrees (a full circle) by the number of stems:
// Calculate the rotation angle
var angle = 360 / stemsAmount;

3. DUPLICATE AND ROTATE

Now we have everything we need to make duplicates of our stem. To do this, we’ll use thefor loop. It lets us repeatedly run lines of code as many times as we’d like. Our loop will look like this:
for(var i = 1; i < stemsAmount; i++){
 // This code will run "stemAmount - 1" of times
};
Note that the first instance of an object in programming has the value of 0, but because our first layer is already on the canvas, we’re starting the loop from 1 instead.
To duplicate and rotate our layer, we will use the duplicate() and rotate(angle, AnchorPosition) methods: the number of layers to be rotated in angle multiplied by the indexed number of duplicates. AnchorPosition determines the point around which the layer will rotate. You can see this point when you use the Transform tool in Photoshop — it looks like a small circle with a crosshair. In scripting, it has only 9 specified values — i.e. the 9 positions of the anchor point:
AnchorPosition visualization
In our case, it is the bottom center of the layer, BOTTOMCENTER. Photoshop uses a lot of other constants here and there in some of the functions, which you can find on page 197 of “Adobe Photoshop CS6 JavaScript Reference” (PDF).
So, our loop will look like this:
// Duplicate and rotate layers:
for(var i = 1; i < stemsAmount; i++){
 // Duplicate original layer and save it to the variable 
 var newStem = originalStem.duplicate();

 // Rotate new layer
 newStem.rotate(angle * i, AnchorPosition.BOTTOMCENTER);
};
And the completed code will look like the following. You can try to run it.
// Save selected layer to variable:
var originalStem = app.activeDocument.activeLayer;

// Ask user for input by showing prompt box and save inputted value to variable:
var stemsAmount = prompt("Processing \""+originalStem.name+"\"\nHow many stems do you need?", 12);

// Calculate the rotation angle:
var angle = 360 / stemsAmount;

// Duplicate and rotate layers:
for(var i = 1; i < stemsAmount; i++){
 // Duplicate original layer and save it to the variable
 var newStem = originalStem.duplicate();

 // Rotate new layer
 newStem.rotate(angle * i, AnchorPosition.BOTTOMCENTER); 
};

FINAL TOUCHES

I’ll usually try to achieve the main goal with a script, and when everything works correctly, I’ll start to refine the code. In our case, we have to make sure that the user inputs a valid number in the prompt box — i.e. a positive integer, greater than one.
Also, to prevent Photoshop from going crazy, we will restrict the number of stems — let’s say, to 100. To do this, we will use a while loop to show the user an error message in the event of an invalid submission, and the prompt box will continue to be shown until the user enters a valid value or hits the “Cancel” button (remember that the prompt returns null if the user hits “Cancel”).
The new code looks like this:
// Save selected layer to variable:
var originalStem = app.activeDocument.activeLayer;

// Ask user for input by showing prompt box and save inputted value to variable:
var stemsAmount = prompt ("Processing \""+originalStem.name+"\"\nHow many stems do you need? (From 2 to 100)", 12);

// Check that user entered a valid number and, if invalid, show error message and ask for input again
while(isNaN(stemsAmount) || stemsAmount <= 0 || stemsAmount > 100){
 // If user clicks "Cancel" button, then exit loop
 if(stemsAmount == null) break;

 // Show error message…
 alert("Please enter number in range from 2 to 100");
 // …and ask for input again
 stemsAmount = prompt("Processing \""+originalStem.name+"\"\nHow many stems do you need? (From 2 to 100)", 12);
};

// Run the copying process
if(stemsAmount != null){ 
 // Calculate the rotation angle
 var angle = 360 / parseInt(stemsAmount);

 // Duplicate and rotate layers:
 for(var i = 1; i < stemsAmount; i++){
  // Duplicate original layer and save it to the variable
  var newStem = originalStem.duplicate();

  // Rotate new layer
  newStem.rotate(angle * i, AnchorPosition.BOTTOMCENTER);
 };
};
As you may have noticed, we’re using the isNaN(value) function, which returns true if valueis “not a number” and parseInt(value) to convert the value to an integer when we calculate the rotation angle.
The next thing we will do is manage the layers, renaming our new layers by adding an index to them. Also to make sure that we do not mess up document’s layers, let’s place our stems in a group.
Renaming the layers is not a hard task. We will just use the name property of the layer and add an index number to it:
// Add index to new layers
newStem.name = originalStem.name + " " + (i+1);
A group in Photoshop’s API is called a LayerSet and we can access all groups of the document by calling the layerSets property. To add a new group to a document, we have to call the layerSets’ method add():
// Create a group for stems
var stemsGroup = app.activeDocument.layerSets.add();
 stemsGroup.name = originalStem.name + " ("+stemsAmount+" stems)";
Then, to add a layer to the group, we will use the move(relativeObject, ElementPlacement)function. Note that the move() function moves a layer in the layer stack, not on the canvas. (You can move a layer on the canvas with the translate(deltaX[, deltaY]) function.)
ElementPlacement is another constant, this one determining how we will place our layer relative to… well, relativeObject. In our case, we will use ElementPlacement.INSIDE to place the original layer inside a group:
// Place original layer in group
originalStem.move(stemsGroup, ElementPlacement.INSIDE);
We will place each new copy of the layer at the bottom of all layers in the group usingElementPlacement.PLACEATEND. The result is all of our layers arranged in ascending order, the first layer at the top and the last at the bottom:
// Place new layer inside stems group
newStem.move(stemsGroup, ElementPlacement.PLACEATEND);
You can read more about the ElementPlacement constant on page 202 of “Adobe Photoshop CS6 JavaScript Reference” (PDF).

Final Code

That’s it! RotateMe.jsx is done. Our final code looks like this:
// Save selected layer to variable:
var originalStem = app.activeDocument.activeLayer;

// Ask user for input by showing prompt box and save inputted value to variable: var stemsAmount = prompt ("Processing \""+originalStem.name+"\"\nHow many stems do you need? (From 2 to 100)", 12); // Check that user entered a valid number and, if invalid, show error message and ask for input again while(isNaN(stemsAmount) || stemsAmount <= 0 || stemsAmount > 100){ // If user clicks "Cancel" button, then exit loop if(stemsAmount == null) break; // Show error message… alert("Please enter number in range from 2 to 100"); // …and ask for input again stemsAmount = prompt("Processing \""+originalStem.name+"\"\nHow many stems do you need? (From 2 to 100)", 12); }; // Run the copying process if(stemsAmount != null){ // Calculate the rotation angle var angle = 360 / parseInt(stemsAmount); // Create a group for stems var stemsGroup = app.activeDocument.layerSets.add(); stemsGroup.name = originalStem.name + " ("+stemsAmount+" stems)"; // Place original layer in group originalStem.move(stemsGroup, ElementPlacement.INSIDE); // Duplicate and rotate layers: for(var i = 1; i < stemsAmount; i++){ // Duplicate original layer and save it to the variable var newStem = originalStem.duplicate(); // Rotate new layer newStem.rotate(angle * i, AnchorPosition.BOTTOMCENTER); // Add index to new layers newStem.name = originalStem.name + " " + (i+1); // Place new layer inside stems group newStem.move(stemsGroup, ElementPlacement.PLACEATEND); }; // Add index to the original layer originalStem.name += " 1"; };
That wasn’t too hard, was it?
Finish
Now you can put it in the Photoshop/Presets/Scripts/ folder and run it by going to File → Scripts in Photoshop. Using different shapes with different values can yield interesting results:

Conclusion

As you can see from the number of links in the resources section below, there’s much more to say about scripting than can fit in an introductory article. But I hope the little that we’ve described today piques your interest and shows how powerful and helpful scripting is.
Community Power!
If you decide to dive into it, let’s learn together and share our experience. Ask your questions and share what you’ve done in the comments. If you are not a coder, consider leaving an idea for a script; maybe another reader will make it happen.
Let’s make Photoshop more useful together!

RESOURCES

I’m still learning about Photoshop scripts, too, and here are some resources that are helping me along the way:
  • “Adobe Photoshop Scripting,” Adobe Developer Connection
    All of the documentation and utilities for scripting.
  • “Adobe Introduction to Scripting” (PDF), Adobe
    Here are the basics on scripting for Adobe applications. The nice thing about scripting for Photoshop is that you can apply your knowledge to other Adobe products; you just need to learn the application’s DOM, and you’ll be ready to go.
  • “Adobe Photoshop CS6 Scripting Guide” (PDF), Adobe
    In this introductory guide to scripting for Photoshop, you’ll find the basics on getting started with scripting.
  • “Photoshop CS6 JavaScript Reference” (PDF), Adobe
    This describes all of the objects and their functions and methods that you can use in scripting for Photoshop. This is one of the documents I use most when writing scripts.
  • “JavaScript,” Mozilla Developer Network
    Here are answers to all kinds of questions about general JavaScript functions and usage.
  • “JavaScript Tools Guide” (PDF), Adobe
    This has basic information about ExtendedScript Toolkit and some advanced techniques, such as file system access and ScriptUI and working with XML, sockets and more.
  • PS-Scripts
    An independent forum about scripting for Photoshop. I haven’t signed up to participate in discussions, but it has plenty of answered questions and solved problems to discover.
  • Photoshop Scripting, Adobe Community
    Adobe’s official forum for Photoshop scripting has some good discussion on problems encountered by users.
(al) (ea)



via Smashing Magazine Feed http://www.smashingmagazine.com/2013/07/25/introduction-to-photoshop-scripting/