Archive for February, 2012

Time for Mail: Services That Improve Gmail Productivity


  

Gmail exploded onto the internet in 2004 (beta) offering users a whopping 1GB of storage. This was unheard of at the time with the largest email service Hotmail only offering a few megabytes of storage. Currently Gmail offers 7GB of free storage with competitors such as Hotmail offering 5GB of storage and Yahoo offering an unlimited amount.

Gmail is popular with business users due to how quick, reliable and customisable it is. In addition to the experimental add ons that Google offers through Google Labs, there are a lot of 3rd party tools and services that help you enhance gmail.

Today we would like to show you 25 great tools that will help you get more out of Googles pioneering email service, and ensure that your personal Gmail productivity rating remains high. Enjoy.

Let’s Get Productive

* Fun fact: Google purchased the Gmail domain from Garfield, who were using it as a free email service for their members.

1. Find Big Mail
Online Service

Find Big Mail is a fantastic free service that helps you locate large emails in your Gmail inbox. All you have to do is enter your Gmail email address and then grant access to the service to check your account.

Find Big Mail

Once you have done so, you will receive an email advising you that they are processing your request and will email you again after 5 to 60 minutes once their search is complete (depending on your volume of emails). The email details your top 3 and top 20 messages by size. It also shows you the number of emails over 1mb, over 5mb and over 10mb. Each large email is linked, making it easy to review the email and check whether you need to keep it or not (or save the file elsewhere).

Find Big Mail

Pie charts are also displayed in your email and online. These show you the number of messages by size (small, over 1mb, over 5mb and over 10mb) and the corresponding space by size these messages take up.

Find Big Mail

It also adds labels to your Gmail sidebar that lists messages that are over 1mb, 5mb and 10mb. Find Big Mail is useful if you are nearing your maximum amount of storage and don’t want to upgrade.

2. CloudMagic
Google Chrome

A search tool that lets you search Gmail, Google Apps, Google Docs, Google Docs and Twitter. Once you have installed CloudMagic and refreshed your Gmail page, you will see a search box at the top of the page. This box can be moved anywhere on the page (as you see fit).

CloudMagic

Search works in real time i.e. results appear as you type. You can view results from other services such as Google Docs instantly by simply changing the tab at the top of the box.

CloudMagic

It’s worth checking out if you search through your inbox on a regular basis.

3. Google Mail Checkers
Google Chrome and Firefox

Do you find yourself checking Gmail frequently to see if you have new mail? If so, you may find the Google Web Checker (Chrome) and Gmail Watcher (Firefox) add-ons useful. Once installed, the apps will show add a Gmail icon to the top of your browser. Whenever you receive a new email the icon will be updated to let you know that you have received mail. A simple add on that’s very useful.

Google Mail Checker

4. Better Gmail
Google Chrome and Firefox

Better Gmail for Chrome and Firefox are great add ons that add a lot of great features to Gmail.

Better Gmail

The exact features differ slightly between the Chrome and Firefox versions. Both versions highlight rows when you hover over messages, adds attachment icons to your Gmail page and help notify you of new messages using pop ups or sounds. The Chrome version also removes advertisements from your page.

Better Gmail

5. Google Redesigned
Google Chrome & Firefox

A great extension for Chrome and Firefox that gives Gmail, and other Google services, a complete redesign. Worth trying out if you are bored the default design of Gmail.

Google Redesigned

It works with Gmail, Google Calendar, Google Docs and Google Reader. You can disable or enable the design for each service individually.

Google Redesigned

6. Active Inbox
Google Chrome & Firefox

A productivity tool for Gmail that adds a lot of welcomed features. Active Inbox helps you prioritise tasks by allowing you to set which messages are top priority. Emails can be added to a to do list to help you plan what needs to be done.

Active Inbox

Emails can also be assigned to projects and notes can be added to conversations too. In the Active Inbox bar at the top of the page, all of your to do items and projects are listed. It also lists those emails that are defined as high priority, emails that need to be tracked until completion and emails you are awaiting a reply on. All of these filters can be applied to emails within each message at the top which makes organising your workload much easier.

7. Rapportive
Google Chrome, Firefox, Safari and Mailplane

Replaces advertisements at the right hand side of Gmail with an informative profile of the person who has emailed you. It shows you their photo and information about what they do. It helps make new connections via Facebook, Twitter and LinkedIn too.

Rapportive

8. Boomerang for Gmail
Google Chrome & Firefox

A wonderful application that adds a ‘Send Later’ button to your message compose area. You can send the email in an hour, 2 hours, 4 hours, tomorrow morning, tomorrow afternoon, 2 days, 4 days, one week, 2 weeks or one month. Alternatively, you can also set the exact time the message can be sent or ask for help by clicking on the random time link.

Boomerang for Gmail

You can also set reminders for important messages and if you don’t hear back from the contact, Boomerang will remind you to follow it up.

9. WiseStamp Email Signatures
Google Chrome, Firefox and Safari

This browser extension makes creating modern interactive signatures a breeze by enhancing your Gmail signature with social media icons and your latest tweets and Facebook posts. You can also add social icons, quotes, your latest ebay auctions, music and much more.

WiseStamp Email Signatures

You can create as many different signatures as you want (personal, business 1, business 2 etc). A link is placed discretely at the bottom of each email unless you upgrade to a paid account ($36 per year).

WiseStamp Email Signatures

Images can easily be inserted into signatures and you can place information in columns using tables. You can also edit the HTML source directly.

10. Grexit
Online Service

A great application that businesses will find useful. The service lets you share emails in a common shared folder so that other colleagues can easily reference important discussions and information.

11. The Email Game
Online Service

Finding it hard to get motivated to clear your crowded inbox? You may find ‘The Email Game’ service useful. It times how long it takes you to address your unread emails. You can deal with emails right away by replying or forwarding them, boomerang posts or skip them and deal with them later, or archive or delete the email. Points are awarded for dealing with emails quicker, with 3 minutes being given to you for each reply.

The Email Game

12. 0Boxer
Chrome, Firefox, Safari and Mailplane

Another game that aims to help you be more productive. oBoxer rewards points for clearing emails and writing them. You can compete against friends and the site lists weekly and daily leader boards for other users.

0Boxer

Halfway Down

The post continues on page 2 here.


Collaging: Getting Answers To The Questions You Don’t Know To Ask


  

When conducting user research, we all know that asking the right questions is just as important as how you ask them, but how do you know exactly what questions to ask? What if the discussion topic is very personal? How do you get a complete stranger to open up? There is a better way to conduct an in-depth interview, and it doesn’t involve a clipboard. Just imagine what you could discover if the participant’s answers weren’t limited to a predetermined set of questions. This is where collaging can help.

Collaging is a projective technique by which participants select images that represent how they feel about a particular topic. The participants then explain to the moderator the reason they chose each image. The collage becomes an instrument through which participants are able to express needs and feelings that they might not otherwise have been able to articulate. This information enables us to better understand the user’s world and how to design for it.

A Picture Is Worth A Thousand Words

So, you might be asking yourself, “Why should I have people make collages, rather than just ask them point-blank questions about their needs and feelings?� It’s a great question, and the answer is, sometimes the most valuable answer is not in response to a direct question, but one that’s elicited. An image can be a powerful stimulus that evokes a strong response, triggers a memory and draws out feelings that exist below a person’s own level of awareness.

Gerald Zaltman, author of How Customers Think, states that “95% of our thoughts and feelings are unconscious.� There is just so much that we carry around in thought but never share until something triggers it. When we ask a participant a set of pre-defined questions, we are predetermining the scope of the interview. Instead, by presenting a visual stimulus, we are letting the participant start the conversation and bring up topics that are meaningful to them.

There are also times when you don’t know the right question to ask. Sometimes you do, but you don’t know how to ask it. Depending on what you’re researching, participants might have difficulty opening up to you. The research topic might be too personal, controversial or sensitive for the participant to just open up and start discussing with a complete stranger. The collage becomes a catalyst for discussion, an ice-breaker.

What You Can Learn

Collaging is a method of building empathy with your users. You gain an emotional understanding of the user’s feelings, problems, state of mind and so on, which is imperative to know when designing for them. Collaging can also help you better understand the user’s needs, in turn helping you to address them in your product.

The wonderful thing about this method is that participants might reveal stories that prompt a line of questioning about a topic that you never expected to explore (as we’ll see in the examples below). You honestly don’t know what you will learn from each participant’s collage.

A Brief History Of Projective Techniques

Collaging is not new. The method has been well used to conduct qualitative marketing research for at least 40 years. Its use in marketing has mainly been to assess feelings towards brands and products. Other projective techniques — tests such as the Rorschach, word and sentence completion, draw-a-person, and thematic apperception — date back to the early 19th century. All of these methods are rooted in psychology, but their application has expanded to other fields such as advertising, management, sociology, anthropology and, more recently, user experience (UX), to name a few. Collaging as a user research method has yet to be widely adopted in our industry, but I’ve seen a steady increase in its use and popularity over the past few years.

Conducting A Collaging Exercise

Listed below are all the steps necessary to conduct your own collaging study. Let’s walk through them together.

1. Choose Your Topic of Interest

The collaging exercise should focus on a specific topic. You will be asking participants to choose pictures that reflect how they feel about this topic. For example, if I were redesigning a website, I might ask the participant,

“Select pictures that reflect how you would and would not want the new website to greet you.�

You could word this in a lot of different ways, such as,

“Create a story about how you would want the website to communicate with you. What qualities should it have? What qualities should it not have?�

Or, to learn more about a participant’s day-to-day struggle with a problem, you could simply say,

“Select pictures that reflect your experience with using [x].�

2. Create a Collage Board and Get Pictures

You will need a board or a large piece of paper to which the participant can tape their pictures. It doesn’t need to be fancy. In the past, I have just used 11 × 17-inch ledger paper. If I were asking the participant to create two separate collages, I would divide the paper by drawing a line down the middle. I’ve seen other people put a target on a collage board and ask participants to stick pictures on the board according to how closely they “hit homeâ€� for them. Feel free to be creative here, and find what works best for you.

Example of a completed collage.
Example of a completed collage.

Participants will need to be able to choose from a pool of about 150 to 200 pictures. The pool of pictures must be a mixture of random pictures. They should not have a running theme (i.e. no pictures of just animals or people or medical scenes or nature, etc). The pool should be a good mixture of all sorts of pictures. You can use stock photography or even pictures clipped from magazines. Here are some online sources of free images:

Print the pictures small enough (approximately 3 × 3 inches) for participants to have plenty of room to put as many as they want in their collage. You’ll also want multiple copies of pictures to replace the ones used by participants. In the past, I’ve printed pictures on stickers, which worked well but was a little more expensive.

3. Moderate the Study

  1. Set up the room.
    Lay out all of the pictures on a big long table. Make sure they do not overlap so that the participant can see them all. Put the collage board, some tape and a pen on another table.
  2. Give the topic and instructions.
    Instruct the participant to pick out at least four or five pictures that reflect how they feel about the given topic. Then ask them to tape those pictures to the collage board, and add a caption to each one explaining why they chose it.
  3. Leave the room.
    I prefer to leave the room for five to ten minutes to give the participant time to peruse the pictures without feeling any pressure. When I reenter the room, I tell them to take as long as they need and to let me know when they have completed the collage.
  4. Discuss the collage.
    The collage is finished. Now comes the fun part! Have the participant explain to you why they chose each picture. This is your opportunity to learn as much as you can about how the participant feels about the topic. Let the collage and the participant guide the interview. Be sure to follow up with questions and to probe deeper when needed and appropriate. Keep in mind that the experience can be very personal and revealing for some participants, depending on the sensitivity of the topic. The collage might make it easy for a participant to open a door that they don’t necessarily want to walk through. Be mindful of the participant’s comfort level when probing deeper into something personal.

4. Conduct Analysis

When conducting your analysis, keep in mind that what’s really important is not the pictures they chose, but why they chose them. The analysis and report should focus on what the collage reveals about the participant, not the collage itself. It would be interesting if multiple participants chose the same pictures, but even more interesting if they chose them for the same reasons.

When to Conduct a Collaging Exercise

Consider collaging during the early stages of product development, when user requirements are being gathered. The method is also helpful at any time in the product’s development if you feel the design team is having trouble understanding and identifying with the users. Sometimes designers need to step back and remember exactly who they are designing for.

As mentioned, this method can be most useful if the topic is sensitive, but it’s great for impassive topics, too. Collaging can be used if you just need a fun activity to put the participant at ease and break the ice before a formal interview. For example, I have conducted collaging exercises with cancer patients, with people dealing with chronic pain and even with women about their menstrual cycles and feelings about birth control. On the other hand, I’ve conducted collages to learn more about people’s daily commutes and how they feel about public transportation — much lighter topics.

Collage Examples

The examples below are from collage exercises that I’ve moderated. Each one shows how a picture can change the line of questioning in an interview. The topics, which were discussed because of these images, might never have been brought up in a traditional interview.

Picture from a collage that was done for research on people suffering from chronic pain.
Picture from a collage done for research on people suffering from chronic pain.

The participant wrote the caption, “That’s my daughter consoling me when I’m in pain.� When discussing this picture, I was able to probe deeper into how the participant’s pain affects their family and how they deal with it. We were then able to discuss what role family plays in how they manage their pain.

Picture from a collage that was done for research on how people feel about their commute.
Picture from a collage done for research on how people feel about their commute.

The participant wrote the caption, “Wish my commute was this enjoyable.� I was able to follow up with questions about what their ideal commute to work would be like and what they wished they could change about their current commute.

Picture from a collage that was done for research on cancer patients.
Picture from a collage done for research on cancer patients.

The participant wrote the caption, “Vomiting!� This led to a line of questioning about the side effects of the participant’s cancer treatments and their coping mechanisms.

Pitfalls To Avoid

Sometimes a stimulus can be too strong and can disrupt a participant’s train of thought and be a distraction. The example below resulted from two participants choosing the same image for the same study:

Pitfalls to avoid

The participants wrote the captions “Disgusting� and “Gross.� Their captions and their reasons for choosing the image were similar, but in no way did they relate to the topic of interest, which was pain management. The participants couldn’t explain how the image related to what they felt about the topic, but they still chose it because they were drawn to it and it provoked a strong emotion. In this case, we decided to remove the image from the pool because it was obviously a distraction. When conducting a collaging exercise, remove any pictures that you find derail the participants.

Conclusion

Collaging is a great method for learning more about your end users. Depending on when the collaging study is conducted during the product’s development cycle, your findings could do any or all of the following:

  • Aid in persona development,
  • Be used in early ideation for creating new products,
  • Reveal how people feel about the experience of using an existing product,
  • Help to define new requirements or enhancements for features.

The method might not be right for every user research initiative, but try it if you feel something is lacking from your traditional interviews. You will be amazed at what you can learn when you throw away the clipboard and let participants direct the interview.

Resources

  • How Customers Think: Essential Insights Into the Mind of the Market, Gerald Zaltman
  • Customer Intimacy: Pick Your Partners, Shape Your Culture, Win Together, Fred Wiersema

(al) (il)


© Kyle Soucy for Smashing Magazine, 2012.


Gaining Perspective: A Showcase of 3D Digital Renders


  

With the design communities ever pressing pursuit of inspiration and the growing popularity of three dimensional digital renderings, we thought this was the perfect opportunity for these two paths to cross for Noupe’s readers. So we went out across the internet in search of some truly inspired pieces of art that have crossed into the third dimension to showcase for you here. Rendered to perfection by some wonderful digital artists.

So take a look below at the 3D digital renders we have collected for you, and see some breathtaking results. The rich fullness the artists manage to capture that allows the pieces to rise off from their virtual canvases leaving that flat feeling behind, and often feeling like a photograph.

Gaining Perspective

Selfillumination by kutsche

Gir by thekeyofE

Toxic Syringes – Colorful by Stianbl

coffee city by pushOK-12

The real you by Sha-X-doW

Mechanical Flower by coolscene

Subsurfacing Sushi by jeremyengleman

Heavy Mech Final Render by MikeJensen

Automation by Almacan

Haiku by curious3d

Victory by geograpcics

Sewer Dwelling Monster by loden

Abandoned station by your1st

Plastic Series : Broken Marionette by SubversiveGirlArt

Siggraph Animation Mother by meats

Impulse by xelptic

Brain Tower by Almacan

The Sighting by steve-burg

Living behind the clouds by veprikov

Captivity by Ertugy

ShokeR_fireworks by AleksCG

Music: ambiance by ark4n

somewhere in the north by tredowski

undead wizard by bgx1

Color Symphony by k3-studio

Unformed by GrandPa

Rebirth by 00AngelicDevil00

Cybertron planet by JJasso

Big Electron by tredowski

Butterfly by Zjic

To You Who Finds This Letter by owen-c

Animation Mother New Orleans by meats

So,Commander,what is your plan by Suirebit

The traveller – dusty version by leticiakao

Fairy tale by linbrush

Hidden by sentimentalfreak

shoker by AleksCG

Other Worlds by RudolfHerczog

One Tree Hil by phaceless2

Pontiac by PionierUK

(rb)


How To Use Custom Post Types To Organize Online Marketing Campaigns


  

Custom post types add a level of flexibility to WordPress that makes this open-source Web development platform more useful on many levels. Whenever I have been faced with a Web-based task, especially one that involves organizing information, the first thing I do is examine WordPress to determine if it can handle the job. It usually can.

Making Dollars
Image Source

As an Internet marketer and analyst, I need to be able to organize online marketing campaigns in a way that is trackable in Google Analytics. This is the perfect task for WordPress custom post types.

In this article, we’ll explain how to create a WordPress plugin that enables you to organize Internet marketing campaigns using trackable URLs, shortened versions of those URLs, and trackable QR codes that you can also use for offline marketing activities.

We’ll show you how to create this plugin in a way that maximizes ease of use and functionality. If you have other methods that you have found useful, please share them in the comments. Also, let’s remember that we are standing on the shoulders of WordPress developers who have laid the foundation for easier coding.

Here are the criteria for our custom post type plugin:

  • It must provide a form in which users can specify a landing page to be tracked, the anchor text or content, the term (if this link is a PPC ad), and any additional information about this link.
  • It must provide three custom taxonomy types, so that users can select the URL variables for source, medium and campaign name. This is a taxonomy type because they will be reusable across campaigns and posts.
  • It must be organizable in the admin area and be displayed in the user interface.
  • The output must include a Google Analytics campaign-trackable URL, the information about the URL in human-readable format, a shortened version of the URL using a URL shortener, and a QR code of the shortened URL.

The File Structure

This plugin will use three files. To set up the structure, create a plugin folder named campaign-tracker. Inside the campaign-tracker folder, create the following three PHP files:

  • campaign-tracker.php
  • ga-functions.php
  • campaign-template.php

After you have created the files, we are ready to start adding the code.

The Plugin File

The main plugin file will be campaign-tracker.php. The content of this file will begin the standard way, by providing WordPress with the information that it needs to recognize it is as plugin. We then dive into setting up the CampaignTracker10 class and functions. We will set up our campaign custom post type and register the taxonomies that we will need. We will also initiate our admin interface.

   <?php
   /*
   Plugin Name: Campaign Tracking 1.0
   Plugin URI: http://www.convergeconsulting.org
   Description: Google Analytics Campaign Tracking system for WordPress 3.0 and above.
   Author: Joshua Dodson
   Version: 1.0
   Author URI: http://www.convergeconsulting.org
   */

   // Include the ga-functions.php helper functions
   include_once('ga-functions.php');

   if(!class_exists('CampaignTracker10'))
   {

      class CampaignTracker10 {

         var $meta_fields = array("gaca10-gaurl","gaca10-gaterm","gaca10-gacontent","gaca10-gadescription");

         // This function will create the custom post type. Thanks to Konstantin Kovshenin's example for additional examples of how to construct custom post types (http://kovshenin.com/2010/03/custom-post-types-in-wordpress-3-0-2089/), which inspired much of this.
         function __construct(){
            // Register custom post types
            register_post_type('campaign', array(
            'label' => _x('Campaigns','campaigns label'), // We're labeling the custom posts as Campaigns and also accounting for gettext appropriately
            'singular_label' => _x('Campaign','campaign singular label'), // Each post will be called a Campaign
            'public' => true, // These will be public
            'show_ui' => true, // Show the UI in admin panel
            '_builtin' => false, // This is a custom post type, not a built in post type
            '_edit_link' => 'post.php?post=%d',
            'capability_type' => 'post',
            'hierarchical' => false,
            'rewrite' => array("slug" => "campaign"), // This is for the permalinks
            'query_var' => "campaign", // This goes to the WP_Query schema
            'supports' => array('title'/* We only need the default title field, but we could use others such as 'author', 'excerpt', 'editor' ,'custom-fields'*/)
            ));

            add_filter("manage_edit-campaign_columns", array(&$this, "edit_columns"));
            add_action("manage_posts_custom_column", array(&$this, "custom_columns"));

            // Register custom taxonomies gasource (for the Campaign Source), gamedium (for the Campaign Medium), and ganame (for Campaign Name)
            // Campaign Source
            register_taxonomy("gasource", array("campaign"), array("hierarchical" => true, "label" => _x( 'Campaign Sources', 'campaign sources taxonomy label' ), "singular_label" => "Campaign Source", "rewrite" => true));
            // Campaign Medium
            register_taxonomy("gamedium", array("campaign"), array("hierarchical" => true, "label" => _x( 'Campaign Mediums', 'campaign mediums taxonomy label' ), "singular_label" => "Campaign Medium", "rewrite" => true));
            // Campaign Name
            register_taxonomy("ganame", array("campaign"), array("hierarchical" => true, "label" => _x( 'Campaign Names', 'campaign names taxonomy label' ), "singular_label" => "Campaign Name", "rewrite" => true));

            add_action("admin_init", array(&$this, "admin_init"));
            add_action("template_redirect", array(&$this, 'template_redirect'));

            add_action("wp_insert_post", array(&$this, "wp_insert_post"), 10, 2);

         }

Let’s give the columns on the admin screen some headings:

   function edit_columns($columns)
   {
      $columns = array(
      'cb' => '<input type="checkbox" />',
      'title' => _x('Campaign Title','campaign title label for edit columns'),
      'gaca10_ganame' => _x('Campaign Name','campaign name label for edit columns'),
      'gaca10_gasources' => _x('Campaign Source','campaign source label for edit columns'),
      'gaca10_gasmedium' => _x('Campaign Medium','campaign medium label for edit columns'),
      );
      return $columns;
   }

Let’s specify which columns we would like to show up on the admin screen for this custom post type. We’ll have columns for campaign source, medium and name, in addition to the post’s title.

   function custom_columns($column)
   {
      global $post;
      switch ($column)
      {
         // The campaign source
         case "gaca10_gasources":
         $gasources = get_the_terms(0, "gasource");
         if ( $gasources && ! is_wp_error( $gasources ) ) :
         $gasources_html = array();
         foreach ($gasources as $gasource)
         array_push($gasources_html, '<a href="' . get_term_link($gasource->slug, "gasource") . '">' . $gasource->name . '</a>');

         echo implode($gasources_html, ", ");
         endif;
         break;

         // The campaign medium
         case "gaca10_gasmedium":
         $gamediums = get_the_terms(0, "gamedium");
         if ( $gamediums && ! is_wp_error( $gamediums ) ) :
         $gamediums_html = array();
         foreach ($gamediums as $gamedium)
         array_push($gamediums_html, '<a href="' . get_term_link($gamedium->slug, "gamedium") . '">' . $gamedium->name . '</a>');

         echo implode($gamediums_html, ", ");
         endif;
         break;

         // The campaign name
         case "gaca10_ganame":
         $ganames = get_the_terms(0, "ganame");
         if ( $ganames && ! is_wp_error( $ganames ) ) :
         $ganames_html = array();
         foreach ($ganames as $ganame)
         array_push($ganames_html, '<a href="' . get_term_link($ganame->slug, "ganame") . '">' . $ganame->name . '</a>');

         echo implode($ganames_html, ", ");
         endif;
         break;
      }
   }

Once our columns are set up appropriately, we should see the following columns (note that this example is with one campaign already added):

Campaigns in columns

The next section enables us to specify which template we would like to use to display this custom post type. We will be using the campaign-template.php template:

   function template_redirect()
   {
      global $wp;

      // If the post type is set and is campaign…
      if (isset($wp->query_vars["post_type"])) {
         if ($wp->query_vars["post_type"] == "campaign")
         {
            // Then use the campaign-template.php file from this plugin directory
            include WP_PLUGIN_DIR.'/campaign-tracker/campaign-template.php';
            die();
         }
      }
   }

If a post is inserted or updated, then loop through the array and update or add the post’s meta data.

   function wp_insert_post($post_id, $post = null)
   {
      if ($post->post_type == "campaign")
      {
         foreach ($this->meta_fields as $key)
         {
            $value = $_POST[$key];
            if (empty($value))
            {
               delete_post_meta($post_id, $key);
               continue;
            }

            if (!is_array($value))
            {
               if (!update_post_meta($post_id, $key, $value))
               {
                  add_post_meta($post_id, $key, $value);
               }
            }
            else
            {
               delete_post_meta($post_id, $key);

               foreach ($value as $entry){
                  add_post_meta($post_id, $key, $entry);
               }
            }
         }
      }
   }

With the following function, we can add custom meta boxes for the admin screen where we edit the campaign:

   function admin_init()
   {
      // Add custom meta boxes for the edit campaign screen
      add_meta_box("gaca10-meta", "Campaign Information", array(&$this, "meta_options"), "campaign", "normal", "core");
   }

The following function is for the admin post meta contents. This lets us create the form in which we specify some of the variables for our trackable URL (except for the taxonomies). It also provides a read-only field that shows the shortened URL after the URL variables have been saved.

   function meta_options()
   {
      global $post;
      $custom = get_post_custom($post->ID);
      if($custom["gaca10-gaurl"][0]){
         $gaurl = $custom["gaca10-gaurl"][0];
      }
      else{ $gaurl = ''; }
      if($custom["gaca10-gaterm"][0]) {
         $gaterm = $custom["gaca10-gaterm"][0];
      }
      else { $gaterm = ''; }
      if ($custom["gaca10-gacontent"][0]) {
         $gacontent = $custom["gaca10-gacontent"][0];
      }
      else { $gacontent = ''; }
      if ($custom["gaca10-gadescription"][0]) {
         $gadescription = $custom["gaca10-gadescription"][0];
      }
      else { $gadescription = ''; }

      $url = trackable_url();
      if ($custom["campaign_tinyurl"][0]) {
         if($gaurl == '') { $shortenedurl = ''; }
         else{ $shortenedurl = create_tiny_url($url); }
      }

      ?>
      <label><?php _ex('Website URL:','website url label'); ?></label><input name="gaca10-gaurl" value="<?php echo $gaurl; ?>" /><br />
      <em><?php _ex('(e.g., http://www.google.com)','website url example'); ?></em><br /><br />

      <label><?php _ex('Campaign Term:','campaign term label'); ?></label><input name="gaca10-gaterm" value="<?php echo $gaterm; ?>" /><br />
      <em><?php _ex('(identify the paid keywords)','campaign term information'); ?></em><br /><br />
      <label><?php _ex('Campaign Content:','campaign content label'); ?></label><input name="gaca10-gacontent" value="<?php echo $gacontent; ?>" /><br />
      <em><?php _ex('(use to differentiate ads)','campaign content information'); ?></em><br /><br />

      <label><?php _ex('Campaign Description:','campaign description label'); ?></label><input name="gaca10-gadescription" value="<?php echo $gadescription; ?>" /><br />
      <em><?php _ex('(use to remind yourself about this specific link)','campaign description information'); ?></em><br /><br />

      <label><?php _ex('Shortened URL:','shortened URL label'); ?></label><input name="gaca10-gashortened-url" value="<?php echo $shortenedurl; ?>" readonly="readonly" /><br />

      <?php
   }
}

}

Here is how the “Add/Edit Campaign� screen will appear:

Add new post

If CampaignTracker10 exists, then we initiate the plugin:

   if(class_exists('CampaignTracker10')){

      // Initiate the plugin
      add_action("init", "CampaignTracker10Init");

      function CampaignTracker10Init() {
         global $gaca10;
         $gaca10 = new CampaignTracker10();

      }
   }

Combine these functions into the campaign-tracker.php file.

The following taxonomy examples should also be on the “Add/Edit Campaign� screen after everything has been added. Here is the “Campaign Names� taxonomy:

Campaign Names

Here is the “Campaign Mediums� taxonomy:

Campaign Mediums

Here is the “Campaign Sources� taxonomy:

Campaign Sources

Similar to how traditional post categories are set up, you can create new categories or select previous categories.

A note on usage: When you begin to use the system, try to select only one category each from name, source and medium. One category per taxonomy type will prove to be most useful in your actual analysis in Google Analytics. So, as a general rule: one name, one source and one medium per URL.

The Helpful Display Functions

Each of the functions in this section is part of the ga-functions.php file. The functions have been separated from the other functions in order to keep the display functions together.

Our file will begin with the formatted_utm_taxonomy_terms function, which will display a URL-friendly version of the taxonomy terms:

   <?php
   /* Some Helpful Display Functions */

   function formatted_utm_taxonomy_terms($the_term) {
      global $post;
      $post_terms = get_the_terms( $post->ID, $the_term );
      if ( $post_terms && ! is_wp_error( $post_terms ) ) :
      $encoded_terms = array();
      foreach ($post_terms as $term ) {
         if(!$encoded_terms[] = $term->slug){
            $encoded_terms[] = urlencode($term->name);
         }
      }
      $return_terms = implode('+',$encoded_terms);
      return $return_terms;
      endif;
   }

The trackable_url function generates the trackable URL from the fields on the admin screen as well as the taxonomies. This appends the appropriate tracking criteria to the URL so that Google Analytics can use the variables and provide information based on these specific variables. To do this, we will use the add_query_arg WordPress function.

   function trackable_url() {
      global $post;
      $custom = get_post_custom($post->ID);

      // the url
      if ($custom["gaca10-gaurl"][0]) {
         $gaurl = $custom["gaca10-gaurl"][0];
      }
      else { $gaurl = ''; }

      // the term(s)
      if ($gaterm = $custom["gaca10-gaterm"][0]) {
         $gaterm = $custom["gaca10-gaterm"][0];
         $gaterm = urlencode($gaterm);
      }
      else { $gaterm = ''; }

      // the content(s)
      if ($custom["gaca10-gacontent"][0]) {
         $gacontent = $custom["gaca10-gacontent"][0];
         $gacontent = urlencode($gacontent);
      }
      else { $gacontent = ''; }
      $arr_params = array ( 'utm_campaign' => formatted_utm_taxonomy_terms('ganame'), 'utm_source' => formatted_utm_taxonomy_terms('gasource'), 'utm_medium' => formatted_utm_taxonomy_terms('gamedium'), 'utm_term' => $gaterm, 'utm_content' => $gacontent);
      return add_query_arg( $arr_params, $gaurl );

   }

The following functions take the campaign-trackable URL and shortens it with TinyURL. This method uses wp_remote_get to generate the shortened URL. It then saves the shortened URL to the post’s meta data when a post is saved. The trackable_url_tiny function enables us to retrieve the shortened URL in the template.

   // Save the shortened trackable URL to the post meta
   function save_shortened_meta($post_ID) {
      $url = trackable_url();
      $shortened_url = create_tiny_url($url);
      update_post_meta($post_ID, "campaign_tinyurl", $shortened_url);
      return $post_ID;
   }

   // Add an action to save it when the post is saved.
   add_action('save_post', 'save_shortened_meta');

   // Retrieve the shortened URL from post meta
   function trackable_url_tiny($url = null, $post_ID) {
      global $post;
      $custom_fields = get_post_custom($post->ID);
      $campaign_tinyurl = $custom_fields['campaign_tinyurl'][0];
      return $campaign_tinyurl;

      return $post_ID;
   }

   // Create shortened trackable URL through the wp_remote_get function
   function create_tiny_url($strURL) {
      $tinyurl = wp_remote_get( 'http://tinyurl.com/api-create.php?url='.$strURL );
      if( is_wp_error( $response ) ) {
         return 'Something went wrong!';
      } else {
         return $tinyurl['body'];

      }
   }

The trackable_url_report function is what provides the human-readable version of the variables. These are broken out by each section. The landing page, campaign name, source, medium, terms and content are all separated and displayed individually if they exist.

   function trackable_url_report() {
      global $post;
      $custom = get_post_custom($post->ID);

      // get the url
      if ($custom["gaca10-gaurl"][0]) {
         $gaurl = $custom["gaca10-gaurl"][0];
      }
      else { $gaurl = ''; }
      // get the term(s)
      if ($gaterm = $custom["gaca10-gaterm"][0]) {
         $gaterm = $custom["gaca10-gaterm"][0];
      }
      else { $gaterm = ''; }

      // get the content(s)
      if ($custom["gaca10-gacontent"][0]) {
         $gacontent = $custom["gaca10-gacontent"][0];
      }
      else { $gacontent = ''; }

      // The Landing page
      $url_info ='';
      $url_info.= "<strong>". _x( 'Landing Page:','landing page label') . "</strong> ";
      $url_info.= $gaurl;
      $url_info.= "<br />";

      // The campaign name
      $url_info.= "<strong>". _x( 'Campaign:','campaign label') . "</strong> ";
      $url_info.= formatted_utm_taxonomy_terms('ganame');
      $url_info.= "<br />";

      // The Source
      $url_info.= "<strong>". _x( 'Source:','source label') . "</strong> ";
      $url_info.= formatted_utm_taxonomy_terms('gasource');
      $url_info.= "<br />";

      // The medium
      $url_info.= "<strong>". _x( 'Medium:','medium label') . "</strong> ";
      $url_info.= formatted_utm_taxonomy_terms('gamedium');
      $url_info.= "<br />";

      // The term
      $url_info.= "<strong>". _x( 'Term:','term label') . "</strong> ";
      $url_info.= $gaterm;
      $url_info.= "<br />";

      // The content
      $url_info.= "<strong>". _x( 'Content:','content label') . "</strong> ";
      $url_info.= $gacontent;
      $url_info.= "<br />";

      return $url_info;
   }

The display_description function displays the description of the URL. We’ve broken this part out here in order to keep all of the pieces that are specific to the URL together. This is also the last function in the ga-functions.php file.

   function display_description(){
      global $post;
      $custom = get_post_custom($post->ID);
      $description = $custom["gaca10-gadescription"][0];
      return $description;
   }

   ?>

Combine these functions into the ga-functions.php file, and then we can move onto creating the template file.

The Template File

The final file that we will use to generate the view of the trackable URL is campaign-template.php. You will remember from the campaign-tracker.php file that we have a call in the template_redirect() function to redirect users to this template when viewing the custom post type of campaigns.

For display purposes, we will use the single.php file from the current default WordPress theme, TwentyEleven. You can, of course, use another theme and different styles.

First, we include the ga-functions.php file so that we can use some of our display functions. The campaign template also uses the Google Charts API to generate the QR code.

The following code will do all of the heavy lifting to display our campaign-trackable URL, the information about the URL, the shortened URL and the QR code. It will also allow us to edit the post if we need to change a variable. Simply drop this code into the loop.

   <h1 class="entry-title"><?php the_title() ?></h1><br />

   <?php
   echo "<strong>". _x( 'Description:','description label') . "</strong> ";
   echo display_description();
   echo "<br />";
   echo trackable_url_report();
   echo "<br />";
   echo "<strong>". _x('Trackable URL:','trackable URL label') . "</strong> ";
   echo "<a href=".trackable_url()." target='_blank'>".trackable_url()."</a><br />";

   echo "<strong>" . _x('Shortened Trackable URL:','shortened trackable URL label') . "</strong> ";
   echo "<a href=".trackable_url_tiny()." target='_blank'>".trackable_url_tiny()."</a><br />";
   ?>

   <br />
   <img src="https://chart.googleapis.com/chart?chs=150x150&amp;cht=qr&amp;chl=<?php trackable_url_tiny(); ?>" /><br />
   <?php edit_post_link( __( 'Edit', 'twentyeleven' ), '<span class="edit-link">', '</span>' ); ?>

When we combine the code, the campaign template will be as follows:

   <?php
   /**
   * The Template for displaying all single posts.
   *
   * @package WordPress
   * @subpackage Twenty_Eleven
   * @since Twenty Eleven 1.0
   */

   // Include the ga-functions.php file so that we can easily display the results
   include_once('ga-functions.php');

   get_header(); ?>

   <div id="primary">
   <div id="content" role="main">

   <?php while ( have_posts() ) : the_post(); ?>

   <nav id="nav-single">
   <h3 class="assistive-text"><?php _e( 'Post navigation', 'twentyeleven' ); ?></h3>
   <span class="nav-previous"><?php previous_post_link( '%link', __( '<span class="meta-nav">&larr;</span> Previous', 'twentyeleven' ) ); ?></span>
   <span class="nav-next"><?php next_post_link( '%link', __( 'Next <span class="meta-nav">&rarr;</span>', 'twentyeleven' ) ); ?></span>
   </nav><!-- #nav-single -->

   <h1 class="entry-title"><?php the_title() ?></h1><br />

   <?php
   echo "<strong>". _x( 'Description:','description label') . "</strong> ";
   echo display_description();
   echo "<br />";
   echo trackable_url_report();
   echo "<br />";
   echo "<strong>". _x('Trackable URL:','trackable URL label') . "</strong> ";
   echo "<a href=".trackable_url()." target='_blank'>".trackable_url()."</a><br />";

   echo "<strong>" . _x('Shortened Trackable URL:','shortened trackable URL label') . "</strong> ";
   echo "<a href=".trackable_url_tiny()." target='_blank'>".trackable_url_tiny()."</a><br />";
   ?>

   <br />
   <img src="https://chart.googleapis.com/chart?chs=150x150&amp;cht=qr&amp;chl=<?php trackable_url_tiny(); ?>" /><br />
   <?php edit_post_link( __( 'Edit', 'twentyeleven' ), '<span class="edit-link">', '</span>' ); ?>

   <?php comments_template( '', true ); ?>

   <?php endwhile; // end of the loop. ?>

   </div><!-- #content -->
   </div><!-- #primary -->

   <?php get_footer(); ?>

When the template is set up and a campaign has been added, then it should display the following page:

Display information

In Conclusion

By using WordPress custom post types in the method described, it is possible to organize marketing campaigns with the relevant Google Analytics campaign-tracking URL, shortened URL and QR code. This makes organizing marketing campaigns much simpler and more effective.

Custom post types make it very easy to set up a system by which to organize content. And we can get creative in how we use custom post types. They can be very useful when organizing content outside of the normal structure of WordPress and other content management systems (i.e. posts, pages, etc.).

Other possible uses of custom post types include the following:

  • Manage client contacts,
  • Create an employee directory,
  • Keep an inventory of items,
  • Organize other data.

Resources

You may be interested in the following resources and articles:

(al)


© Joshua Dodson for Smashing Magazine, 2012.


Incredible Hand-Drawn Works (With a Digital Twist)


  

Within the creative community there seems to be an ongoing divide between the realms of digital art, and traditional (non-digital) art. Often traditional art is viewed as somewhat archaic, conjuring images of the Mona Lisa or a Monet landscape. Whilst these masterpieces, and much of traditional art is of course pivotal to our conceptions of art and creativity, there still exists this divide in relation to the digital medium.

The smooth gloss of a photo manipulation has nothing to do with a beautiful oil painting. Or does it…?

Today I challenge the divide between old and new, and suggest that the varying mediums within ‘art’ as a whole are not only not unrelated, but inextricably linked. Digital art is of course directly influenced by the fundamental principles of traditional art. As graphic designers this is not a chicken egg scenario, digital art would simply not exist without traditional art.

The beauty of these varying mediums is that they can help one another. Whilst traditional art does have certain limitations (as does digital art), digital art can often take hand produced pieces to new dimensions. Digital techniques are often the best way to lift a piece of traditional art, giving it new life and substance.

Today I will show you three incredibly talented artists, who are each masters of both traditional, and digital mediums. What is especially interesting about their work is how they use digital techniques to enhance their already stunning traditional artworks. In fusing the two mediums their work takes on a new richness.

Incredible Hand-Drawn Works (With a Digital Twist)

Florian Nicolle’s Hand-Drawn Works

Florian Nicolle is very well known within the design community, and for good reason! His portfolio is a vast collection of mixed media masterpieces. Florian has clearly mastered traditional art, producing some incredibly realistic drawings.

What makes Florian’s work so intriguing is his treatment of his original drawings. It actually seems that some of his traditional techniques are influenced by the digital medium. For example his application of watercolor brush marks is reminiscent of the grungy, watercolor techniques used in many photo manipulations.

After he completes his original drawing he will typically scan it into Photoshop and proceed to color the image, often applying background textures and details. A common trait of his work is to use Photoshop to paste relevant words over his portraits (for example the lyrics to Billy Jean are laid over his portrait of Michael Jackson).

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

Andreas Preis’ Hand Drawn Works

Andreas Preis has one of the most unique styles I’ve come across, and a really wonderful portfolio of art to back it up. His work is typically produced using ink in the early stages. He is a true master of the cross-hatching method of shading, giving his works an incredibly detailed, precise look.

Often he will use Photoshop to digitally color his images, whilst retaining the precise, sharp lines of his original drawing. This is a prime example of how combining mediums can produce the best results possible.

The important thing to remember though is that no matter what effects are applied in Photoshop, it is the strength of Andreas’ original drawings that are the basis for such inspiring art.

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

Alexis Marcou’s Hand Drawn Works

Alexis Marcou is an awe inspiring mixed media artist with a very unique style. Alexis’ work will typically begin on paper, producing some fantastic drawings. He then uses a range of mixed media techniques to add depth and detail to his images. Some notable examples include using a make up applicator to powder his image with subtle color, and refracting light from a prism to lay over his drawing.

Whilst Alexis’ work doesn’t make tremendous use of digital techniques, he is widely respected within the digital art/design community. His art, whilst using traditional mediums seems to jump away from the typical constraints of non-digital art. His drawings often take on the appearance of epic photo manipulations, with subtle lighting, gradients and coloring. Amazing what you can achieve with a little creativity!

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

hand-drawn art

(rb)


  •   
  • Copyright © 1996-2010 BlogmyQuery - BMQ. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress