The New Smashing Mystery Riddle: Have You Figured It Out Yet?


  

Remember the Smashing Book Mystery riddle from a couple of months ago? Guess what: the Mystery continues! To celebrate the launch of the SmashingConf NYC and our lovely book, we’ve prepared a new riddle, and this time it’s not going to be any easier, but the reward is definitely worth the effort.

How does it work? Below you’ll find an animated GIF that contains a hidden message. Once you resolved the mystery, you’ll see a Twitter hashtag displayed in plain text.

Are you ready? Action! (Hint: watch out for the file name).

Smashing Book Mystery
A hint: watch out for the file name.

What Can You Win?

Among the first readers who tweet us with the hidden hashtag, we’ll raffle a quite extraordinary, smashing prize (and a couple of other Smashing extras):

  • a roundtrip flight to New York, USA,
  • full accommodation in a fancy hotel,
  • a ticket to the Smashing Conference New York 2014,
  • any Smashing workshop ticket of your choice,
  • full access to the Smashing eBook Library,
  • a signed edition of the Smashing Book #4,
  • a truly Smashing laptop bag,
  • your very own Smashing caricature, designed just for you.

Please notice that to avoid spoilers, comments are closed for this post. And sorry, we aren’t going to make it too easy for you.

Alright. Let’s get to work. Or have you already figured it out? 😉


© Vitaly Friedman for Smashing Magazine, 2014.



The New Smashing Mystery Riddle: Have You Figured It Out Yet?
http://feedproxy.google.com/~r/SmashingMagazine/~3/4L4fkPoivzQ/
http://feeds.feedburner.com/SmashingMagazine
Smashing Magazine Feed
For Professional Web Designers and Developers

Powered by WPeMatico

How Targeting Influencers Can Sky Rocket Your Blog

This is a guest contribution from Rebecca Price, marketing specialist currently working for Davpack.

Have you ever sat in front of your computer, looking at other people’s blogs, and thought: “How the hell have you managed to be so successful so quickly?”

I know I have.

For a long time, I just couldn’t figure out the secret; it often seemed like I was close, but it was always just out of reach.

Then I stumbled on a book called ‘Influence Marketing’ by Danny Brown and Sam Fiorella.

That was the answer – market influencers.

Why is this so powerful?

Instead of starting off from scratch with no blog readers, traffic or any sign of engagement, you put a strategy in place to connect with influencers and get them to promote and share your content to their already established audience.

Of course, there is a bit more to it than that…

In this post I’m going to show you how to expand your reach, increase your audience, get more social shares, become an industry influencer and attract more traffic to your blog.

Finding industry influencers

If you have been operating within your niche/industry for a while, then you will probably have a good idea who the key influencers are and, while they should certainly be on your list of targets, don’t forget the ‘new rising stars’.

These people can potentially carry a lot of weight and your list should never be limited to just a few influencers. This works best at scale.

You will need to put together a list of your target influencers and there are some key pieces of information about them that you should keep track of:

  • Their name
  • Their contact information
  • Their location (potentially a good conversation starter!)
  • Links to their social profiles
  • Links to their blog and any other sites they own
  • What topics they like to blog about
  • What topics they like to share

You could use a CRM or, alternatively, an OpenOffice or Microsoft Excel spreadsheet will also do the trick.

I could write an entire post on finding influencers alone, and a lot have. There are also some awesome presentations floating around on Slideshare, like this one by Wishpond:

Influence Marketing Part 1: How to Find Your Industry Leaders from Wishpond

Tools to help you

I won’t go into too much depth now about individual tools, as the subject has already been covered in some depth; you can find all of the tools to help you right here.

Don’t rely entirely on tools to do all of the work for you, for while there are some extremely powerful tools that can give you most of the answers – the human element is important.

Computers are getting smarter and so are the algorithms that they use, but there are opportunities that they can miss.

A few things to remember

This entire strategy hinges on building a positive relationship with influencers and, if you go about things in the wrong way, then you could just end up wasting your time.

And your time is valuable. Don’t waste it.

Be helpful and courteous when you are dealing with anyone, not just influencers. There will always be people that waste your time and take the wet, but give them a chance; but know when it’s time to walk away.

Whatever you do, NEVER email someone or ask them via social to do something for you out of the blue.

You will eventually need to ask an influencer to do something for you, but there needs to be a clear benefit, and you must have done something awesome for them beforehand (and they need to know about it).

So, before you ask anyone to do something for you, you need to ask yourself – “what’s in it for them?”

You have to come across as authentic and credible – being real is your greatest asset.

Avoid burning bridges at all costs. Relationships are difficult to repair once you have destroyed them.

Building the relationship

Now that we’ve laid the ground rules, it’s time to start building your relationship with influencers in your niche:

Making things easy for yourself

You’ve got your list of your target influencers and their social profiles, so now it’s time to go ahead and follow them across as many as possible.

Another way to make things easy for yourself is to keep right up to date with what’s happening on your target influencers’ blogs.

So make sure you subscribe to their mailing lists if they have them and subscribe to their RSS feeds too. After Google Reader closed, I started using Feedly but recently switched to Netvibes in favour of their iGoogle style RSS reader – either are solid RSS readers that will help you keep on top of things. 

Commenting works wonders

Try commenting on the blog of an influencer you’re targeting and do it regularly – it works wonders, especially if they respond to comments. You may find that commenting on Facebook statuses and Google+ updates can work equally well, if not even better.

Drop them an email

At this early stage, you could also drop them an email, but if you do, don’t ask them to help you out at all. You need to warm up to that.

Instead, say something awesome and highlight something awesome you have done for them, like share a piece of content etc.

Connect through multiple social platforms

Facebook

Make sure you have the same display picture throughout all of your social profiles – consistency is important and it makes you easier to recognise.

Start off by following the influencers on Twitter, Google Plus, Facebook and whatever other social networks they are active on.

Create a separate circle on Google+ for influencers and a list on Twitter, too – people love it when they’re referred to as a market influencer. It’s quite flattering and great for grabbing their attention, because a lot of influencers don’t actually think of themselves as influencers.

Your next step is to start sharing their content, but there is an important part of the process that a lot of people forget – tell them about it!

The idea of this is that when you do something awesome for someone, they know about it, or at least you do whatever you can to let them know.

So, when you Tweet their content, @mention them and add some positive commentary. Do a similar thing with Google+ and Facebook too.

You can also take things a step further by sharing quotes and making sure the influencer you have quoted knows about it.

Involve influencers in your content

Grab the attention of your target influencers by involving them in the content that you create.

This can be as simple as linking out to them and saying some awesome stuff about them in a regular blog post or an industry round-up – or it could go so far as to involve them directly in a group interview.

The point here is that when influencers are involved directly in a blog post, they are more invested and therefore more likely to share.

Here are a few examples:

Kikolani

In September, Kristi Hines published a group interview which involved 32 experts who shared their best blog post promotion tips. This post featured 600+ Tweets, 245+ FB likes, 448+ Google+1’s and 180+ Linkedin shares. The post also earned links from over 50 referring domains.

Earlier this year, Blurbpoint.com published a roundup of over 101 SEO experts which also did rather well and received 375+ Tweets, 438+ Google+1’s, 230+ FB Likes and 145+ Linkedin shares. This group interview also earned links from over 30 domains.

These are examples of influencer marketing at scale – these types of posts do take a lot of time to produce, but they attract a lot of eyeballs to your blog, and the fact you have included these participants in an ‘expert round-up’ is quite flattering. Doing great things for people can make great things happen.

The use of social media is a big part of this whole influencer marketing thing, and there are a number of things you can do to get more results using social that I talk about here.

Write for influencers

I guess we could call this guest posting, but there are certain connotations that come along with that word and some people do assume that the focus is on the SEO benefit, but here’s where it’s different.

Sure, you could go around guest posting to build links to your site, people do it and it’s fine, because it will still help you at least from an SEO perspective if you do it right, although you do need to do a lot of it.

The SEO benefit here is a secondary consideration, because the whole idea of writing for influencers within your niche is to expand your audience and reach.

It’s also to get your name out there and help to position yourself as an authority.

Your ultimate goal should be to join the ranks of influencers within your niche, but why? Well, having influence is a great thing and then other bloggers will do awesome stuff for you too.

It all starts off with blogger outreach, which is an extensive topic itself; there are plenty of courses out there, like Jon Morrow’s guest blogging course, while Ian Cleary wrote a great guide that you can find here.

Summary

Marketing your content to influencers within your niche can be a powerful way to not only get more traffic to your blog, but you will also get more social shares, expand your audience and increase your own influence too – you will soon find you’re on your way to becoming an authority.

You can do it, I believe in you.

What other tactics do you use to get traffic to your blog?

Rebecca Price is a marketing specialist currently working for Davpack. Rebecca’s specialty is helping businesses become more visible online.

Photo Credit: Spencer E Holtaway via Compfight cc

Originally at: Blog Tips at ProBlogger
Build a Better Blog in 31 Days

How Targeting Influencers Can Sky Rocket Your Blog

How Targeting Influencers Can Sky Rocket Your Blog
http://www.problogger.net/archives/2013/12/10/how-targeting-influencers-can-sky-rocket-your-blog/
http://www.problogger.net/archives/category/blog-promotion/feed/
@ProBlogger» Blog Promotion
Blog Tips to Help You Make Money Blogging – ProBlogger
http://www.problogger.net/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg

Powered by WPeMatico

Writing A Better JavaScript Library For The DOM


  

At present, jQuery is the de facto library for working with the document object model (DOM). It can be used with popular client-side MV* frameworks (such as Backbone), and it has a ton of plugins and a very large community. As developers’ interest in JavaScript increases by the minute, a lot of people are becoming curious about how native APIs really work and about when we can just use them instead of including an extra library.

Lately, I have started to see more and more problems with jQuery, at least my use of it. Most of the problems are with jQuery’s core and can’t be fixed without breaking backwards compatibility — which is very important. I, like many others, continued using the library for a while, navigating all of the pesky quirks every day.

Then, Daniel Buchner created SelectorListener, and the idea of “live extensions” manifested. I started to think about creating a set of functions that would enable us to build unobtrusive DOM components using a better approach than what we have used so far. The objective was to review existing APIs and solutions and to build a clearer, testable and lightweight library.

Adding Useful Features To The Library

The idea of live extensions encouraged me to develop the better-dom project, although other interesting features make the library unique. Let’s review them quickly:

  • live extensions
  • native animations
  • embedded microtemplating
  • internationalization support

Live Extensions

jQuery has a concept called “live events.” Drawing on the idea of event delegation, it enables developers to handle existing and future elements. But more flexibility is required in a lot of cases. For example, delegated events fall short when the DOM needs to be mutated in order to initialize a widget. Hence, live extensions.

The goal is to define an extension once and have any future elements run through the initialization function, regardless of the widget’s complexity. This is important because it enables us to write Web pages declaratively; so, it works great with AJAX applications.

Live extensions make is easier to handle any future elements.
Live extensions enable you to handle any future elements without the need to invoke the initialization function. (Image credits)

Let’s look at a simple example. Let’s say our task is to implement a fully customizable tooltip. The :hover pseudo-selector won’t help us here because the position of the tooltip changes with the mouse cursor. Event delegation doesn’t fit well either; listening to mouseover and mouseleave for all elements in the document tree is very expensive. Live extensions to the rescue!


DOM.extend("[title]", {
  constructor: function() {
    var tooltip = DOM.create("span.custom-title");

    // set the title's textContent and hide it initially
    tooltip.set("textContent", this.get("title")).hide();

    this
      // remove legacy title
      .set("title", null)
      // store reference for quicker access
      .data("tooltip", tooltip)
      // register event handlers
      .on("mouseenter", this.onMouseEnter, ["clientX", "clientY"])
      .on("mouseleave", this.onMouseLeave)
      // insert the title element into DOM
      .append(tooltip);
  },
  onMouseEnter: function(x, y) {
    this.data("tooltip").style({left: x, top: y}).show();
  },
  onMouseLeave: function() {
    this.data("tooltip").hide();
  }
});

We can style the .custom-title element in CSS:


.custom-title {
  position: fixed; /* required */
  border: 1px solid #faebcc;
  background: #faf8f0;
}

The most interesting part happens when you insert a new element with a title attribute in the page. The custom tooltip will work without any initialization call.

Live extensions are self-contained; thus, they don’t require you to invoke an initialization function in order to work with future content. So, they can be combined with any DOM library and will simplify your application logic by separating the UI code into many small independent pieces.

Last but not least, a few words on Web components. A section of the specification, “Decorators,” aims to solve a similar problem. Currently, it uses a markup-based implementation with a special syntax for attaching event listeners to child elements. But it’s still an early draft:

“Decorators, unlike other parts of Web Components, do not have a specification yet.”

Native Animations

Thanks to Apple, CSS has good animation support now. In the past, animations were usually implemented in JavaScript via setInterval and setTimeout. It was a cool feature — but now it’s more like a bad practice. Native animations will always be smoother: They are usually faster, take less energy and degrade well if not supported by the browser.

In better-dom, there is no animate method: just show, hide and toggle. To capture a hidden element state in CSS, the library uses the standards-based aria-hidden attribute.

To illustrate how it works, let’s add a simple animation effect to the custom tooltip that we introduced earlier:


.custom-title {
  position: fixed; /* required */
  border: 1px solid #faebcc;
  background: #faf8f0;
  /* animation code */
  opacity: 1;
  -webkit-transition: opacity 0.5s;
  transition: opacity 0.5s;
}

.custom-title[aria-hidden=true] {
  display: block; /* have to override default "none" */
  opacity: 0;
}

Internally, show() and hide() just set the aria-hidden attribute value to be false and true. This is enough to enable the CSS to handle the animations and transitions.

You can see a demo with more animation examples that use better-dom.

Embedded Microtemplating

HTML strings are annoyingly verbose. Looking for a replacement, I found the excellent Emmet. Today, Emmet is quite a popular plugin for text editors, and it has a nice and compact syntax. Take this HTML:


body.append("<ul><li class='list-item'></li><li class='list-item'></li><li class='list-item'></li></ul>");

And compare it to the equivalent microtemplate:


body.append("ul>li.list-item*3");

In better-dom, any method that accepts HTML may use Emmet expressions as well. The abbreviation parser is fast, so no need to worry about a performance penalty. A template precompilation function also exists to be used on demand.

Internationalization Support

Developing a UI widget often requires localization — not an easy task. Over the years, many have tackled this in different ways. With better-dom, I believe that changing the state of a CSS selector is like switching languages.

Conceptually speaking, switching a language is like changing the “representation” of content. In CSS2, several pseudo-selectors help to describe such a model: :lang and :before. Take the code below:


[data-i18n="hello"]:before {
  content: "Hello Maksim!";
}

[data-i18n="hello"]:lang(ru):before {
  content: "Привет Максим!";
}

The trick is simple: The value of the content property changes according to the current language, which is determined by the lang attribute of the html element. By using data attributes such as data-i18n, we can maintain the textual content in HTML:


[data-i18n]:before {
  content: attr(data-i18n);
}

[data-i18n="Hello Maksim!"]:lang(ru):before {
  content: "Привет Максим!";
}

Of course, such CSS isn’t exactly attractive, so better-dom has two helpers: i18n and DOM.importStrings. The first is used to update the data-i18n attribute with the appropriate value, and the second localizes strings for a particular language.


label.i18n("Hello Maksim!");
// the label displays "Hello Maksim!"
DOM.importStrings("ru",  "Hello Maksim!", "Привет Максим!");
// now if the page is set to ru language,
// the label will display "Привет Максим!"
label.set("lang", "ru");
// now the label will display "Привет Максим!"
// despite the web page's language

Parameterized strings can be used as well. Just add ${param} variables to a key string:


label.i18n("Hello ${user}!", {user: "Maksim"});
// the label will display "Hello Maksim!"

Making Native APIs More Elegant

Generally, we want to stick to standards. But sometimes the standards aren’t exactly user-friendly. The DOM is a total mess, and to make it bearable, we have to wrap it in a convenient API. Despite all of the improvements made by open-source libraries, some parts could still be done better:

  • getter and setter,
  • event handling,
  • functional methods support.

Getter and Setter

The native DOM has the concept of attributes and properties of elements that could behave differently. Assume we have the markup below on a Web page:


<a href="/chemerisuk/better-dom" id="foo" data-test="test">better-dom</a>

To explain why “the DOM is a total mess,” let’s look at this:


var link = document.getElementById("foo");

link.href; // => "https://github.com/chemerisuk/better-dom"
link.getAttribute("href"); // => "/chemerisuk/better-dom"
link["data-test"]; // => undefined
link.getAttribute("data-test"); // => "test"

link.href = "abc";
link.href; // => "https://github.com/abc"
link.getAttribute("href"); // => "abc"

An attribute value is equal to the appropriate string in HTML, while the element property with the same name could have some special behavior, such as generating the fully qualified URL in the listing above. These differences can be confusing.

In practice, it’s hard to imagine a practical situation in which such a distinction would be useful. Moreover, the developer should always keep in mind which value (attribute or property) is being used that introduces unnecessary complexity.

In better-dom, things are clearer. Every element has only smart getters and setters.


var link = DOM.find("#foo");

link.get("href"); // => "https://github.com/chemerisuk/better-dom"
link.set("href", "abc");
link.get("href"); // => "https://github.com/abc"
link.get("data-attr"); // => "test"

In the first step, it does a property lookup, and if it’s defined, then it’s used for manipulation. Otherwise, getter and setter work with the appropriate attribute of the element. For booleans (checked, selected, etc.), you could just use true or false to update the value: Changing such a property on an element would trigger the appropriate attribute (native behavior) to be updated.

Improved Event Handling

Event handling is a big part of the DOM, however, I’ve discovered one fundamental problem: Having an event object in element listeners forces a developer who cares about testability to mock the first argument, or to create an extra function that passes only event properties used in the handler.


var button = document.getElementById("foo");

button.addEventListener("click", function(e) {
  handleButtonClick(e.button);
}, false);

This is really annoying. What if we extracted the changing part as an argument? This would allow us to get rid of the extra function:


var button = DOM.find("#foo");

button.on("click", handleButtonClick, ["button"]);

By default, the event handler passes the ["target", "defaultPrevented"] array, so no need to add the last argument to get access to these properties:


button.on("click", function(target, canceled) {
  // handle button click here
});

Late binding is supported as well (I’d recommend reading Peter Michaux’s review of the topic). It’s a more flexible alternative to the regular event handlers that exist in the W3C’s standard. It could be useful when you need frequent on and off method calls.


button._handleButtonClick = function() { alert("click!"); };

button.on("click", "_handleButtonClick");
button.fire("click"); // shows "clicked" message
button._handleButtonClick = null;
button.fire("click"); // shows nothing

Last but not least, better-dom has none of the shortcuts that exist in legacy APIs and that behave inconsistently across browsers, like click(), focus() and submit(). The only way to call them is to use the fire method, which executes the default action when no listener has returned false:


link.fire("click"); // clicks on the link
link.on("click", function() { return false; });
link.fire("click"); // triggers the handler above but doesn't do a click

Functional Methods Support

ES5 standardized a couple of useful methods for arrays, including map, filter and some. They allow us to use common collection operations in a standards-based way. As a result, today we have projects like Underscore and Lo-Dash, which polyfill these methods for old browsers.

Each element (or collection) in better-dom has the methods below built in:

  • each (which differs from forEach by returning this instead of undefined)
  • some
  • every
  • map
  • filter
  • reduce[Right]

var urls, activeLi, linkText; 

urls = menu.findAll("a").map(function(el) {
  return el.get("href");
});
activeLi = menu.children().filter(function(el) {
  return el.hasClass("active");
});
linkText = menu.children().reduce(function(memo, el) {
  return memo || el.hasClass("active") && el.find("a").get()
}, false);

Avoiding jQuery Problems

Most of the following issues can’t be fixed in jQuery without breaking backwards compatibility. That’s why creating a new library seemed like the logical way out.

  • the “magical” $ function
  • the value of the [] operator
  • issues with return false
  • find and findAll

The “Magical” $ Function

Everyone has heard at some point that the $ (dollar) function is kind of like magic. A single-character name is not very descriptive, so it looks like a built-in language operator. That’s why inexperienced developers call it inline everywhere.

Behind the scenes, the dollar is quite a complex function. Executing it too often, especially in frequent events such as mousemove and scroll, could cause poor UI performance.

Despite so many articles recommending jQuery objects to be cached, developers continue to insert the dollar function inline, because the library’s syntax encourages them to use this coding style.

Another issue with the dollar function is that it allows us to do two completely different things. People have gotten used to such a syntax, but it’s a bad practice of a function design in general:


$("a"); // => searches all elements that match “a” selector
$("<a>"); // => creates a <a> element with jQuery wrapper

In better-dom, several methods cover the responsibilities of the dollar function in jQuery: find[All] and DOM.create. find[All] is used to search element(s) according to the CSS selector. DOM.create makes a new elements tree in memory. Their names make it very clear what they are responsible for.

Value of the [] Operator

Another reason for the problem of frequent dollar function calls is the brackets operator. When a new jQuery object is created, all associated nodes are stored in numeric properties. But note that the value of such a property contains a native element instance (not a jQuery wrapper):


var links = $("a");

links[0].on("click", function() { ... }); // throws an error
$(links[0]).on("click", function() { ... }); // works fine

Because of such a feature, every functional method in jQuery or another library (like Underscore) requires the current element to be wrapped with $() inside of a callback function. Therefore, developers must always keep in mind the type of object they are working with — a native element or a wrapper — despite the fact that they are using a library to work with the DOM.

In better-dom, the brackets operator returns a library’s object, so developers can forget about native elements. There is only one acceptable way to access them: by using a special legacy method.


var foo = DOM.find("#foo");

foo.legacy(function(node) {
  // use Hammer library to bind a swipe listener
  Hammer(node).on("swipe", function(e) {
    // handle swipe gesture here
  }); 
});

In reality, this method is required in very rare cases, such as to be compatible with a native function or with another DOM library (like Hammer in the example above).

Issues With return false

One thing that really blows my mind is the strange return false interception in jQuery’s event handlers. According to the W3C’s standards, it should in most cases cancel the default behavior. In jQuery, return false also stops event delegation.

Such interception creates problems:

  1. Invoking stopPropagation() by itself could lead to compatibility problems, because it prevents listeners that are related to some other task from doing their work.
  2. Most developers (even experienced ones) are not aware of such behavior.

It’s unclear why the jQuery community decided to go cross-standards. But better-dom is not going to repeat the same mistake. Thus, return false in an event handler only prevents the browser’s default action, without messing with event propagation, as everyone would expect.

find and findAll

Element search is one of the most expensive operations in the browser. Two native methods could be used to implement it: querySelector and querySelectorAll. The difference is that the first one stops searching on the first match.

This feature enables us to decrease the iterations count dramatically in certain cases. In my tests, the speed was up to 20 times faster! Also, you can expect that the improvement will grow according to the size of the document tree.

jQuery has a find method that uses querySelectorAll for general cases. Currently, no function uses querySelector to fetch only the first matched element.

The better-dom library has two separate methods: find and findAll. They allow us to use querySelector optimization. To estimate the potential improvement in performance, I searched for the usage of these methods in all of the source code of my last commercial project:

  • find
    103 matches across 11 files
  • findAll
    14 matches across 4 files

The find method is definitely much more popular. It means that querySelector optimization makes sense in most use cases and could give a major performance boost.

Conclusion

Live extensions really make solving front-end problems much easier. Splitting the UI in many small pieces leads to more independent and maintainable solutions. But as we’ve shown, a framework is not only about them (although it is the main goal).

One thing I’ve learned in the development process is that if you don’t like a standard or you have a different opinion of how things should work, then just implement it and prove that your approach works. It’s really fun, too!

More information about the better-dom project can be found on GitHub.

(al, il, ea)


© Maksim Chemerisuk for Smashing Magazine, 2014.



Writing A Better JavaScript Library For The DOM
http://feedproxy.google.com/~r/SmashingMagazine/~3/_wmuVdYK8s4/
http://feeds.feedburner.com/SmashingMagazine
Smashing Magazine Feed
For Professional Web Designers and Developers

Powered by WPeMatico

How Optimized Are Your Images? Meet ImageOptim-CLI, a Batch Compression Tool


  

Exporting images for the Web from one’s favorite graphics software is something many of us have done hundreds of times. Our eyes fixate on an image’s preview, carefully adjusting the quality and optimization settings until we’ve found that sweet spot, where the file size and quality are both the best they can possibly be.

After exporting the image — usually using a feature called “Save for the Web” — and having gone to all that care and effort, we would be forgiven for thinking that our image is in the best shape possible. That’s not always the case, of course.

In fact, much more data is usually left in such files, data that browsers have to download despite not requiring or even using it, data that keeps our users waiting just a bit longer than necessary.

Thankfully, a number of popular tools can help us optimize images even further, but which should we use? We assumed, for a time at least, that our graphics editing software properly optimized our files, but what do we really know about our image optimization tools?

Image Optimization Tools

If you’re not currently using any image optimization tool, I would urge you to choose one. Any is better than none. Regardless of which you choose, you will likely speed up your website and keep users happy.

To inform our work, I ran the most popular image optimization tools over a varied sample of images (kindly donated by Daan Jobsis via his “Retina Revolution” article), and I’ve published the results on GitHub.

The report shows us how much data each tool saves and how much quality was lost statistically. However, how great a loss in quality is noticeable and how much is acceptable will vary from person to person, project to project and image to image.

Aim For The Biggest Gains

I’ve been using ImageOptim for many years, with ImageAlpha and JPEGmini joining it more recently.

With this trio, we have a specialist in JPEGs, another in PNGs, and a great all-round application, ImageOptim, which also supports GIF and other formats. Each uses different techniques to deliver impressive savings, but they complement each other when combined to offer better savings still.

ImageOptim

ImageOptim beats any single lossless optimizer by bundling all of them. It works by finding the best combination of compression parameters and removes unnecessary comments and color profiles.

ImageAlpha

ImageAlpha is unique in its lossy conversion of PNG24 to PNG8, delivering savings many times bigger than popular PNG optimizers such as Smush.it and TinyPNG. The conversion even maintains alpha-transparency in all browsers, including on iOS and even in IE 6.

JPEGmini

JPEGmini is a “patent-pending photo recompression technology, which significantly reduces the size of photographs without affecting their perceptual quality.” The creators claim it reduces a file’s size by up to 80%, while maintaining quality that is visually identical to the original.

The savings are quite remarkable, but you will need to purchase the software to use it without restriction.

Prioritize Convenience

In terms of performance, the comparative data is reassuring, and to date I’ve been happy with my decisions. But there’s a real problem: all of these tools are GUI applications for OS X.

This has some benefits because everything is local. You don’t need to upload and download files to a Web server, so there’s no risk of the service being temporarily unavailable. This also means that your images don’t need to leave your machine either.

But at some point ahead of every launch, I had to remember to open each application, manually process new images, then wait for the tool to finish, before doing the same in the next application.

This soon gets tedious: We need to automate! This is why (with James Stout and Kornel Lesiński) I’ve created ImageOptim-CLI, automated image optimization from the command line interface (CLI).

ImageOptim-CLI

Though other image optimization tools are available from the command line, ImageOptim-CLI exists because the current benchmarks suggest that ImageOptim, ImageAlpha and JPEGmini currently outperform those alternatives over lossless and lossy optimizations.

I wanted to take advantage of this.

Given a folder or other set of images, ImageOptim-CLI automates the process of optimizing them with ImageAlpha, JPEGmini and ImageOptim. In one command, we can run our chosen images through all three optimizers — giving us automated, multi-stage image optimization right from the command line.

This gives us the levels of optimization of all three applications, with the convenience of the command line, opening up all kinds of possibilities for integration with other utilities:

  • Integrate it with Alfred workflows.
  • Extend OS X with folder actions and more using Automator.
  • Optimize images whenever they change with the Guard RubyGem.
  • Ensure that images are optimized when you Git commit.

Do you know of other ways to integrate image optimization in your workflow? If so, please share your ideas in the comments.

Installation and Usage

The CLI can be downloaded as a ZIP archive or cloned using Git, but the easiest way is by running this:

npm install -g imageoptim-cli

Running all three applications before closing them afterwards can be achieved with this:

imageoptim --image-alpha --jpeg-mini --quit --directory ~/Sites/MyProject

Or you can do it with the equivalent shorthand format:

imageoptim -a -j -q -d ~/Sites/MyProject

You will find more installation and usage examples on the project page on GitHub.

Case Study: Myspace

Earlier this week, I visited Myspace and found that 4.1 MB of data was transferred to my machine. With the home page’s beautiful magazine-style layout, it’s no surprise that roughly 76% (or 3.1 MB) of that were images.

I was curious whether any data could be saved by running the images through ImageOptim-CLI. So, I recorded the video below to show the tool being installed and then run over Myspace’s home page.

As you can see, the total size of images before running the command was 3,186 KB, and ImageOptim-CLI was able to remove 986 KB of data, while preserving 99.93% of image quality.

grunt-imageoptim

There is a companion Grunt plugin for ImageOptim-CLI, called grunt-imageoptim, which offers full support for the optimization of folders and collections of images. It can also be paired with grunt-contrib-watch to run whenever any images are modified in your project.

Smashing Magazine has a great article for those who want to get up and running with Grunt.

Summary

Image optimization is an essential step in a designer’s workflow, and with so many tools to choose from, there’s bound to be one that suits your needs.

Data should bear heavily in your decision, so that you reap bigger rewards, but choose one that is convenient — using a weak tool every time is better than using than a strong tool sometimes. You’ll rarely make a decision in your career that doesn’t have some kind of trade-off, and this is no different.

Resources

If you’ve made it this far, I thank you for reading and welcome your questions, comments and ideas.

(al, ea)


© Jamie for Smashing Magazine, 2013.



How Optimized Are Your Images? Meet ImageOptim-CLI, a Batch Compression Tool
http://feedproxy.google.com/~r/SmashingMagazine/~3/6AXkZ7Ka91c/
http://feeds.feedburner.com/SmashingMagazine
Smashing Magazine Feed
For Professional Web Designers and Developers

Powered by WPeMatico

How to Regroup and Keep Going After a Disappointing Launch

This is a guest contribution from Ernest Dempsey, fiction author.

life-unexpected.jpg

The big day has come and gone. You did all the prep work, created as much buzz as you could, and promoted from every angle.

You blew up social media. Networked with peers and strangers. Met new people and helped them promote their stuff through your small, but growing channels.

You spent countless hours getting your product ready to launch to the world, painstakingly covering all the bases so it would be as good as it could be when the release day arrived.

Zero hour arrived and you waited patiently as the sales began to trickle in; a good sign at first. Or so you thought.

But as the day went by, the small flurry of sales never became the avalanche you’d hoped for, and by the end, you were left wondering what the hell just happened.

Does your product suck? Did you do something wrong with your marketing and promotional plan? Should you give up and try something else or should you regroup and push forward?

You’re not alone in this maelstrom of confusion. There have been several big names that have seen that road. And there are some key lessons we can take away from their experiences.

Big Ideas

Light bulb with a great idea

Here’s the problem with people and ideas. We get them in our heads and inside that imagination of ours, they seem like the best thing since sliced bread. I can’t tell you how many times I’ve had ideas for books, movies, products, or services that took my excitement to the edge of the stratosphere.

Throw on top of that all the amazing success stories we see on blogs, Youtube videos, and online training courses. Yeah, you know what I’m talking about.

We see the articles about the guy who wrote a guest post for someone and got 10,000 visits to their website the next day. Or the girl who sent out a Tweet with the right hash tag and sold 5,000 units within six hours. Or the lady who had 1,000 subscribers before her blog even went live.

We see all of that, and think it can be us too. Why not? They were normal people just like you and I. All we needed to do was have a good idea, take action, and execute the exact same strategies.

Right?

Not so fast. And I mean that literally, not so fast.

Great Expectations

Dreaming goals

Mark Aplet – Fotolia.com

Let’s go back to the point where you just released your product. It’s day two and sales are barely doing anything. Maybe you’re moving a product or two every twenty-four hours. Or maybe you aren’t selling a damn thing.

That’s not going to cut it. And at that rate, if you haven’t already, don’t quit your day job.

But what is the problem? You did everything exactly like you were supposed to, following the blueprint of those who have gone before to the letter. Why did your launch suck?

It could be any number of things. But the first thing you need to examine is the expectations you set before the launch.

If you go back and look at it, what were those other people selling? Was it a product with a bigger market, a hungrier market, a more viralistic market? (I think I just invented the word viralistic)

Let’s assume that you have already done that and you have a really strong market that can produce lots of traffic to your site, and a market that is desperate for the solution that you provide. Sounds like a perfect scenario. Even with all of that, it is not a good idea to assume that your launch is going to go bonkers with sales.

What has worked for someone else in the ways of marketing, promotion, and the resulting sales or subscribers may not happen for you. Every single person is different. Every scenario is different.

Then what kind of results should we expect?

Realistic Expectations

You know people will pay for your product or service because you have already done that part of the process. You tested out a few prospects in your target market and they loved what you’re providing.

So, why hasn’t it gone viral? Why didn’t your launch go better?

The truth is, most product launches don’t go that way. In the normal world, those occurrences are the outliers in the statistical universe. For you, it’s probably going to take a little more time, a little more effort, and a lot more patience.

After all, there is a ton of behind-the-scenes work that goes into an overnight success.

These things take time to build up for most businesses. In the offline world, it can be as slow as networking with one person at a time. On the Internet, we have the opportunity to meet and interact with multiple people in small amounts of time, but it can still be a long process to build up trust.

And trust is crucial.

Would it be cool if your launch went viral? Sure. But don’t expect it. What you should expect is to need to keep working hard and constantly making connections, interacting, and helping others.

Like I said before, you’re not alone. There are lots of people who have been in your shoes. But it took a bit of regrouping, and rethinking to get them to the level of success they desired.

People with failed launches who pushed through to succeed

Self-Published Author- Me

Yeah, I thought I would start with my personal experience in the matter. I write action/adventure fiction and science fiction. When I released my first novel, I expected lots of people to buy it. Don’t get me wrong; I didn’t believe I could quit my job right away. I just wanted to write stories on the side.

But I figured I had 700+ Facebook friends and most of them would buy a copy since I had helped most of them in some way at some point in time.

I sold less than fifty copies in a year.

It sucked. And I was crushed by the lack of support. Moreover, I was riddled with doubt. Was my book horrible? Was I a terrible writer? What did I do wrong?

Actually, it is pretty simple. I set huge expectations, relatively speaking, and did very little ground work to get my book noticed. I didn’t understand the first thing about traffic or promotion or marketing.

I just figured I could put something out there and the people I knew would buy it, and word would spread.

Compare that strategy with the one I employed in December of 2012 when I re-released my first book along with the sequel. This time, I gave away thousands of copies of the books. I did a lot more online networking.

As a result, my book sales took off. I didn’t sell millions of copies, but so far in 2013, I’ve sold around 4000 copies of my books and novellas. Pretty cool, right?

The lesson here is that for many of us, slow growth is how we will get to where we want to be. And that is okay. Slow and steady wins the race, after all.

App Designer- Nathan Barry

When Nathan was getting ready to launch his book about creating apps, he wrote a bunch of guest posts and submitted them to various blogs. His hope was that he could get several of them published and the resulting traffic would help propel the launch of his book.

In the end, he only had five posts published, which is still a good number. But the traffic that came as a result was moderate at best; each yielding about a hundred visits.

He could have thrown in the towel at that point and just waited to see what would happen. But he didn’t. Nathan continued to build up his subscriber base until it was close to 800 when he launched his book.

On the day his book went live, he brought in over $12,000 dollars. That is an amazing day. Not life changing money, but awesome nonetheless.

What is better is that Nathan kept on pushing, sending emails, writing posts, grinding it out. The result was over six figures worth of sales in a year. Nice.

I realise that is not a disappointing launch, but it was certainly discouraging before he went ahead with the release. Nathan could have waited around until he reached what he thought was critical mass before putting his book out there, but he didn’t. Rather, he persevered and kept pushing slowly forward.

Restauranteur- Colonel Sanders (Founder of KFC)

Yeah, surprise name right? I know. But in 1955 when an interstate bypassed Corbin, Kentucky where Sanders had been cooking up fried chicken for almost twenty years, he was left broke and uncertain about his future.

He knew his chicken was good. But he’d been forced to sell everything he’d worked so hard to build over the course of two decades.

Then Sanders rethought the way he’d been doing business. He decided that instead of doing all the work himself, he would franchise his chicken business. And Kentucky Fried Chicken was born.

Within five years there were 190 franchisees and over 400 restaurants serving up the Colonel’s eleven herbs and spices.

The lesson from this one: A great idea is nothing without a great execution strategy. There could also be a better way to do what you’re doing. If so, find it!

Visionary, Author, Blogger- Seth Godin

The master of seemingly all things business has not gotten there by being immediately successful every time he launches something.

One of his earliest ideas was a video tape that produced the visual of a fireplace or an aquarium on a television screen. He figured lonely or lazy people would be interested in buying such a thing because they could pop the tape in the VCR and just let it go.

No fire stoking. No fish feeding. Simple.

He went to American Airlines magazine and ran an ad for it, telling himself if he sold 30 units, he would pursue production of the item.

The first week he ended up selling 24, so he thanked everyone who’d ordered the tape, and sent them a gift.

Since he didn’t meet his goal, he bailed on the idea. However, the next week he received another eight orders, which would have put him over his goal of thirty. But Godin had already abandoned the idea and moved on to the next thing.

What’s the lesson here? Patience. That is the lesson.

Sometimes, we set these goals in our minds and tell ourselves if we don’t reach them by a certain time we will just give up. Godin’s idea with the video tape might not have been a successful venture in the long run, but we need to give our products and services a fair chance at success.

That means giving them time to sink in while we work behind the scenes to get more eyeballs on the product.

Another Self-Published Author- John Locke

No, not the guy from the Lost television series. He’s an author. Actually, he’s a best-selling author.

Early on, though, he wasn’t.

John had been a successful businessman, and had made his fortune long before he started writing books. No agents or publishers were interested in his stories so, he decided to self-publish his novel.

With loads of expendable money in his arsenal, he released the book and spent $25,000 over the course of a year trying to promote it. He hired one of the top publicists in the country to send out over 10,000 press releases, bought a kiosk in the mall just outside of Borders Books, advertised on billboards, and tried several other things to boost sales.

In the first twelve months after he released his book, all of those efforts netted him less than thirty sales. You read that right: thirty. Not a good return on investment for all that time and money.

John had written a few other books during that year-long process, and decided that he needed to take a step back and regroup. The marketer inside him told him to do things differently, the way he would if he was running his book business like a regular business.

He got on Twitter, built a simple WordPress blog, and began networking with the online community. At one point, after hundreds of hours interacting with people online, he wrote a blog post about two people he admired and sent out a tweet about it.

Because of all the work he put in behind the scenes, his tweet led to hundreds of retweets, and thousands of visits to his blog. Sales of his books went off the charts and within five months, John Locke had sold over a million ebooks on the Kindle platform.

He is one of only a handful of self-published authors to ever be on New York Times Best Seller list. And he is still one of the top best sellers on Amazon.

The lesson from John’s story is that you may have to take a step back from how you are doing things in your promotion and marketing strategy. It may even require a complete overhaul.

John will tell you up front that he is not the best writer in the world. I’ve read some of his stuff, and he’s right! Don’t get me wrong, it’s fun, edgy, witty, and a good read. But it will probably never win any awards. And that’s okay! He writes to his audience whether he’s writing a blog post or another chapter for a new book.

Because he has redesigned his marketing plan, he doesn’t have to be the best writer in the world. His product is good enough for the people it was created.

It’s On You

Do any of these stories fit into where you are or have been with a product launch? What did you do? And what are you going to do in the future?

Ernest Dempsey is a fiction author and writes about personal development and life observations on his blog.  He has also been a Master’s level counselor for the last decade.  Find out more about his books and check out his inspiring posts by visiting ernestdempsey.net or follow him on Twitter @ErnDempsey or Facebook.

Originally at: Blog Tips at ProBlogger
Build a Better Blog in 31 Days

How to Regroup and Keep Going After a Disappointing Launch

How to Regroup and Keep Going After a Disappointing Launch
http://www.problogger.net/archives/2013/12/14/how-to-regroup-and-keep-going-after-a-disappointing-launch/
http://www.problogger.net/archives/category/blog-promotion/feed/
@ProBlogger» Blog Promotion
Blog Tips to Help You Make Money Blogging – ProBlogger
http://www.problogger.net/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg

Powered by WPeMatico

A Glance over Depositphotos, the Fastest-Growing Microstock Agency

Image 1

Stock photography business has become trend. It could be seen from the number of stock photography providers or so called microstock agencies in the internet which is increasing. The number affects the effort of every microstock agency to survive and get much buyers as possible.

As a result, we can see so many microstock agencies racing for getting buyers. Various promos, features, and gifts are given to not just their customers but also the potential customers. Some real example to win the rivalry is giving affordable prices for buyers and tempting incentives for the contributors / artists.
One of the successful microstock agency found in the internet is Depositphotos. The fact is that Depositphotos is reputed as the fastest-growing microstock agency in the internet. Of course that title is not given without reason.

Working together
Working together From Depositphotos.com

Depositphotos was founded in 2009 by Dmitry Sergiev. At the beginning, with limited collection, the content was focused on photos, illustrations, and vectors images. Although this website faced so many obstacles at their beginning years, they managed to survive and become successful just like today. After two years since it was founded, Depositphotos even successfully increased its library with 5 million files and achieved rank 6 in Google Pagerank.

August 2012 was the month when they announced that Depositphotos had reached 9 million image files collection. Not just that, because this year they also allowed contributors to sell videos by uploading it into this website’s library. Other features and functions were also improved such as “smart search” and “lightbox”. All of the improvements were surely aimed to ease their customers and raise the sale at the same time.

In December 2012, they had 2 million more images added into their collection makes their library as large as 11 million files. From 2011, Depositphotos had successfully doubled the size of their collection. It is such an achievement for a website which at the beginning was not even counted for competing in microstock agencies’ race.

Image 3

Then, in less than two month, this website once again broke a new record for increasing the number of their files collection into 12 million. Finally, in the end of March, this website has nearly reached 13 million files collection consists of stock photos, vectors images, and videos. This collection is divided into several categories which will ease the users for finding images they need. Category with the highest number of stock images (until this article is created) is People Stock Photos with more than 3 million images. After that, there is Objects Stock Photos with more than 2 million images. Other categories’ average number is about 1 million files, such as in Food & Drink, Illustrations, Nature, Textures & Backgrounds, Vectors, and Abstract Stock Photos.

In conclusion, the title of “Fastest-Growing Microstock Agency” really suits Depositphotos well. Their intention to keep growing may even make them one of the biggest and strongest agencies in this business.



A Glance over Depositphotos, the Fastest-Growing Microstock Agency
http://feedproxy.google.com/~r/BlogPerfume/~3/LOP8PTBodrw/
http://feeds.feedburner.com/BlogPerfume
Blog Perfume
The Best WordPress Themes, WordPress Plugins and Blogging Resources

Powered by WPeMatico

Bootstrap Hornbook Interactive Infographic

As per scientists around 90% of all information we perceive comes through our eyes. The visual side always has been quite important for humanity, we can see it from the culture of writings and visual art having very long history.

The other suitable feature is laconism. We can experience the lack of time for finding useful knowledge in current period of high technology and internet. There is so much informational trash we have to flunk out the sphere of our interest.

And people have found the solution. Infographics. It’s meaningful though concise; it has a strong visual element that is convenient in a matter of better understanding. Let’s take an example of Bootstrap Hornbook, the fresh infographic about Bootstrap, which is helpful for web designers not just as a sample, but also as a piece of quite cognitive unit, because it’s telling about effective front-end framework. Bootstrap gives a lot of benefits for website owners and the infographics featured in this article offers all the needed definitions, features, advantages and practical potential.

bootstrap

As you can see, the infographic provides a wide range of information about the Bootstrap. Here you can find the definition of the Bootstrap and the description of the advantages together with breaking news about the framework. Additionally, there are links to useful textual and video tutorials which will guide you to the deeper understanding of Bootstrap functionality.

About the Author

Art Rivera is deeply interested in everything connected with Internet, I sincerely suppose the web is the only future reality for the humanity through its inevitable involving into every part of human life. And of course someone should make this future look nice: all hail to Web Design, the King of all my web-interests.



Bootstrap Hornbook Interactive Infographic
http://feedproxy.google.com/~r/BlogPerfume/~3/5mWJSrIKAu0/
http://feeds.feedburner.com/BlogPerfume
Blog Perfume
The Best WordPress Themes, WordPress Plugins and Blogging Resources

Powered by WPeMatico

Theme: A Beautiful Portfolio WordPress Theme

Agera is a beautiful portfolio. Easy to setup, enhanced with Massive Panel and custom shortcode wizard which makes adding shortcodes extremely easy. The main goal of Agera is to let photographers and designers showcase their work easily and in a beautiful and simple way. If you are a creative person this theme is for you.

responsive-theme

Pricing: $40
Requirements: WordPress
Source: Buy it Now



Theme: A Beautiful Portfolio WordPress Theme
http://feedproxy.google.com/~r/BlogPerfume/~3/uhyxXsdmKPs/
http://feeds.feedburner.com/BlogPerfume
Blog Perfume
The Best WordPress Themes, WordPress Plugins and Blogging Resources

Powered by WPeMatico

Theme: A Bold, Blog-Style WordPress Theme

Medium is a bold, blog-style WordPress theme featuring double sidebars, attention to typographic and design detail and plenty of white space. Use it as a personal blog or a minimal portfolio to show off your latest works.

Medium is responsive, all the way down to mobile. Images, videos and text will scale down gracefully to iPad, iPhone and all devices in-between. This theme looks just as great in your pocket as it does on the desktop!

medium-wordpress-theme

Pricing: $45
Requirements: WordPress
Source: Buy it Now



Theme: A Bold, Blog-Style WordPress Theme
http://feedproxy.google.com/~r/BlogPerfume/~3/WxSK11GaL_E/
http://feeds.feedburner.com/BlogPerfume
Blog Perfume
The Best WordPress Themes, WordPress Plugins and Blogging Resources

Powered by WPeMatico

The Line Of Least Resistance


  

In chess, the psychological dimension that springs from a dialogue between two brains, two ideas, two strategic conceptions that depend on the personality of each chess player has long been somewhat of a romantic mystery. How do Grandmasters think? What strategies do they use?

More often than not, the most successful strategies are rooted in our own very nature. And common to most Grandmasters is that they almost never take the easy way out. A different, better alternative is always available, and they go looking for it. That creativity, that compulsion, that drive to look beyond what comes instinctively is what fuels successful strategies and explains why so few Grandmasters are out there.

grandmaster-stratgey-opt
(Image credits: Mukumbura)

For most of us, however, things are simpler. We tend to favor the shortest path, the easy way out, the shortcut. We cut through the middle of the park if we have to.

We’re naturally lazy. When we think, we search for the nearest pattern, and when we find the pattern, we don’t need to think anymore — we just follow the pattern. Our brains have evolved to be — borrowing Edward de Bono’s expression — “brilliantly uncreative.”

This preference for shortcuts is what Grandmasters naturally exploit. Playing on well-known weaknesses, automatisms or unconscious actions has long been a common strategy in chess.

When it comes to using and interacting with technology, that underlying behavior seems to hold. Users unconsciously look for the line of least resistance — la loi du moindre effort, as psycholinguist François Richaudeau called it. Richaudeau’s work revolved around words, but considering how vital communication, language and words are to the design of interactions, the core principles still apply: The shortest words will be those emitted, understood and read with the minimum of effort, and also those most frequently employed due to their more profound presence — or incrustation — in our memory.

We remember shorter words better. That’s because, according to Kenneth S. Goodman, we process graphic, syntactic and semantic information simultaneously. In doing so, users carry out cycles of sampling, predicting, testing and confirming as strategies to bring in “the most reliable prediction with the minimum use of the information available.”

The process isn’t specific to words and reading, though. It underlies our behavior and interaction with the world around us.

Framing it in this way seems to suggest the generalized idea that behavioral patterns are linked to common causes — a concept expanded by behaviorism to the extent that it proposes a predictable and reliable link between a stimulus and the response it produces. That generalization is largely refuted by the cognitive revolution on the grounds that prior knowledge and mental processes intervene between a stimulus and response to reduce the predictability of human behavior — or the response — given a stimulus. Essentially, we can’t predict behavior.

While that may hold true at a micro level, there are still plenty of common paths of action in the way we work — stimulus, sensory organs, interneuron, brain, processing, motor neuron, response. It’s still safe to assume that if we design an environment in which even the subtlest of details is sympathetic to how we, as humans, work and think, and with the singular purpose of easing the experience, then users will always favor that line of least resistance.

brain-stimulus-500-opt
Is the environment we design sympathetic to the way we work? (Image credits: opensourceway)

Designing an experience from a perspective that is more closely related to how we naturally strategize, designing guidance through pattern prediction, as opposed to limit enforcement, might prove to be a more viable approach.

Let’s put that in perspective. Take decision fatigue.

We all make decisions every day. Some of them big, some of them small, some conscious and some so insignificant that they slip by us without our even realizing. And in a world in which we are constantly bombarded with information and media options, such as blogs, social networks, magazines and TV, the effects of so many decisions that we have to take day by day become increasingly obvious.

Our decisions, even those that are mere preferences between option A and B, gradually take their toll on our cognitive load. The mental processes of decision-making are strenuous; we have only a finite store of mental energy available to exert self-control.

Basically, we get tired if we make too many decisions. As a result, according to Barry Schwartz, one of three things is likely to happen: we end up making poor decisions, we become more dissatisfied with our choices, or we get paralyzed and don’t choose at all.

Interaction processes — regardless of the medium — are a prime example of decision fatigue in action. At a micro level, hundreds of small, subtle and, most of the time, unconscious decisions that we take every time we use an application, browse a website or even follow an ad can affect the way we experience the artefact that we’re interacting with.

At a macro level, thanks to what we know about decision fatigue, we can predict that users can be overwhelmed to the point of making a default choice or no choice at all, depending on the option they face. One example of this is Dan Ariely’s opt-in versus opt-out example for forms of the US Department of Motor Vehicles. It shows that we can basically predict how people will react in a very specific situation by controlling the design of the application form, paying close attention to the defaults.

This is a very specific prediction of behavior. We’re not normally used to thinking of behavior as being that predictable. But in a lot of situations, it is. Ariely calls it being predictably irrational.

Contextual cues — through signs or linguistic cues, because they have the potential to refer to a specific value system — can sometimes direct cognition in particular ways, either encouraging or discouraging certain patterns of behavior. Thus, it’s vital that user experience practitioners maintain complete control over and responsibly use all elements in an interface that could be used as contextual cues and predictors.

And one of the biggest cues at the disposal of designers is language.

We, as a species, have refined language through countless iterations over the span of millennia to such an extent that words are tied to complex experiences, rather than to singular instances, by way of symbolic representation.

The Power Of Words

In 1967, Paul Watzlawick described what later became a cornerstone of communication theory: meta communication. He postulated that every communication includes, apart from the plain meaning of words, more information: information on how the talker wants to be understood and how they see themselves in relation to the receiver of the information.

Language, as a clear manifestation of the cognitive capacity of the human mind, is only a medium to carry out acts of communication. That’s one of the reasons why H.F. Bradley once said that experience is basically incommunicable.

Still, there is always something to communicate — moods, annoyances, happiness, feelings, ideas. There is always something that we need to understand — a noise, a color, a sign, a danger, an emotion. There is always some medium that is familiar to us — a grammar, an artistic language, a chess board, an interface.

While context provides a window into how people behave, words have the power to steer people towards a particular pattern of behavior through frame manipulation.

Frame manipulation invariably affects users — admittedly, to different degrees. One prime example of how the context of options and the wording of a question affects behavior is Tversky and Kahneman’s famous experiment in 1981, which demonstrated systematic reversals of preference when the same problem was presented in different ways.

The experiment required participants to make a hypothetical decision, and the researchers tried to determine whether they could steer the participants towards an answer simply by wording the questions carefully.

The experiment proposed a hypothetical outbreak of disease with 60,000 predicted deaths, and participants had to choose between two programs:

  • Program A
    20,000 people would be saved.
  • Program B
    There is a 33% chance that all 60,000 would be saved, and a 66% chance that none of them would be saved.

Framing effect: second option

With these options, program A was a favorite among participants. But what happened when the same question was asked again, but this time, instead of counting the number of lives saved, counting the number of deaths? Here’s how the second option would have sounded:

  • Program A
    40,000 people would die.
  • Program B
    There is a 33% chance that none of them would die, and a 66% chance that all of them would die.

Framing effect: first option

This time around, the clear favorite was program B.

The interesting part is that the math is exactly the same for both: 40,000 out of 60,000 would die anyway. But with the first option, participants were given the choice of a gain: they were given the choice to save 20,000 people. So, the gamble was perceived as negative against the word “save.”

In the second option, participants were given the choice of a loss: 40,000 people would die, or they could gamble that none of them would die with a 30% chance.

Users were influenced simply by the wording. This later became known as the framing effect. The effect helps to explain why people are much more likely to buy meat when it’s labeled as 85% lean, instead of 15% fat. And it’s why twice as many patients opt for surgery when told they have an 80% chance of surviving, instead of a 20% chance of dying.

As the experiment demonstrates, words have the power to selectively influence a user’s perception of meaning. And, for most applications, words can also be used to elicit interactions.

Summing Up

Context is the barrier that makes or breaks a user’s experience. Those unconscious moments, every bit of information we discard on our way up an emotional peak, all of those fine details — they all could potentially lead to a sensible, sympathetic experience. A enjoyable experience is shaped only by context.

Some people use context and design great experiences, some don’t. Oliver Reichenstein calls it a continuum. That’s perfectly natural. We need to constantly make an effort to glance at the future once in a while — to permit ourselves educated dreams.

We need to permit ourselves to keep the vision going — from the ones whom we got it from, to the ones coming to get it. We all have the tools to do it. We just need to be responsible with them.

(al, ea, il)


© Sorin Pintilie for Smashing Magazine, 2013.



The Line Of Least Resistance
http://feedproxy.google.com/~r/SmashingMagazine/~3/57UtxHofKBo/
http://feeds.feedburner.com/SmashingMagazine
Smashing Magazine Feed
For Professional Web Designers and Developers

Powered by WPeMatico

Modifying Admin Post Lists In WordPress


  

Have you ever created a custom post type and then found that only the titles and dates of your posts are displayed in the admin lists? While WordPress will add taxonomies for you, that’s the most it can do. Adding relevant at-a-glance information is easy; in this article, we’ll look how to modify admin post lists with WordPress.

To make sure we’re on the same page, an admin list is the table of posts shown in the admin section when you click on “Posts,” “Pages” or another custom post type. Before we delve in, it is worth noting that admin tables are created using the WP_List_Table class. Jeremy Desvaux de Marigny has written a great article on native admin tables that explains how to make these from scratch.

We’ll focus in this article on how to extend existing tables. We’ll do this using an example from a theme that we recently built, named Rock Band. Rock Band includes event management, which means that we needed some custom event-specific interface elements and details to make the admin section more useful!

Creating A Custom Post Type

This process is fairly straightforward and is documented well in “The Complete Guide to Custom Post Types.” All we need is a definition of the labels that we’re going to use and a few settings. Open up your functions.php file and drop the following into it.

add_action( 'init', 'bs_post_types' );
function bs_post_types() {

	$labels = array(
		'name'                => __( 'Events', THEMENAME ),
		'singular_name'       => __( 'Event', THEMENAME ),
		'add_new'             => __( 'Add New', THEMENAME ),
		'add_new_item'        => __( 'Add New Event', THEMENAME ),
		'edit_item'           => __( 'Edit Event', THEMENAME ),
		'new_item'            => __( 'New Event', THEMENAME ),
		'all_items'           => __( 'All Event', THEMENAME ),
		'view_item'           => __( 'View Event', THEMENAME ),
		'search_items'        => __( 'Search Events', THEMENAME ),
		'not_found'           => __( 'No events found', THEMENAME ),
		'not_found_in_trash'  => __( 'No events found in Trash', THEMENAME ),
		'menu_name'           => __( 'Events', THEMENAME ),
	);

	$supports = array( 'title', 'editor' );

	$slug = get_theme_mod( 'event_permalink' );
	$slug = ( empty( $slug ) ) ? 'event' : $slug;

	$args = array(
		'labels'              => $labels,
		'public'              => true,
		'publicly_queryable'  => true,
		'show_ui'             => true,
		'show_in_menu'        => true,
		'query_var'           => true,
		'rewrite'             => array( 'slug' => $slug ),
		'capability_type'     => 'post',
		'has_archive'         => true,
		'hierarchical'        => false,
		'menu_position'       => null,
		'supports'            => $supports,
	);

	register_post_type( 'event', $args );

}

Quick Tip

By pulling the permalink from the theme settings, you can make sure that users of your theme are able to set their own permalinks. This is important for multilingual websites, on which administrators might want to make sure that URLs are readable by their users.

events_original

What we get is the post list above. It’s better than nothing, but it has no at-a-glance information at all. Event venue, start time and ticket status would be great additions, so let’s get cracking!

Adding Custom Table Headers

Throughout this whole process, we will never have to touch the WP_Lists_Table class directly. This is wonderful news! Because we’ll be doing everything with hooks, our code will be nice and modular, easily customizable.

Adding the header is as simple as modifying the value of an array. This sounds like a job for a filter!

add_filter('manage_event_posts_columns', 'bs_event_table_head');
function bs_event_table_head( $defaults ) {
    $defaults['event_date']  = 'Event Date';
    $defaults['ticket_status']    = 'Ticket Status';
    $defaults['venue']   = 'Venue';
    $defaults['author'] = 'Added By';
    return $defaults;
}

Note the name of the filter: It corresponds to the name of the post type we have created. This means you can modify the table of any post type, not only your custom ones. Just use manage_post_posts_columns to modify the columns for the table of regular posts.

Once this code has been placed in our functions file, you should see the four new table headers. The fields don’t have any content yet; it is for us to decide what goes in them.

Fill ’er Up!

Adding data for each column is about as “complex” as it was to create the columns.

add_action( 'manage_event_posts_custom_column', 'bs_event_table_content', 10, 2 );

function bs_event_table_content( $column_name, $post_id ) {
    if ($column_name == 'event_date') {
		$event_date = get_post_meta( $post_id, '_bs_meta_event_date', true );
			echo  date( _x( 'F d, Y', 'Event date format', 'textdomain' ), strtotime( $event_date ) );
    }
    if ($column_name == 'ticket_status') {
		$status = get_post_meta( $post_id, '_bs_meta_event_ticket_status', true );
		echo $status;
    }

    if ($column_name == 'venue') {
		echo get_post_meta( $post_id, '_bs_meta_event_venue', true );
    }

}

As is obvious from the structure of this function, it gets called separately for each column. Because of this, we need to check which column is currently being displayed and then spit out the corresponding data.

The data we need for this is stored in the postmeta table. Here’s how to do it:

  • The event’s date is stored using the _bs_meta_event_date key.
  • The ticket’s status uses the _bs_meta_event_ticket_status key.
  • The venue is stored using the _bs_meta_event_venue meta key.

Because these are all postmeta values, we just need to use the get_post_meta() function to retrieve them. With the exception of the date, we can echo these values right away.

This brings us to an important point. You are not restricted to showing individual snippets of data or showing links. Whatever you output will be shown. With sufficient time, you could attach a calendar to the dates, which would be shown on hover. You could create flyout menus that open up on click, and so on.

events_data

As you can see, this is much better. The event’s date, ticket status, venue and author can be seen, which makes this table actually informative, rather than just a way to get to edit pages. However, we can do more.

Ordering Columns

Enabling column ordering takes two steps but is fairly straightforward. First, use a filter to specify which of your columns should be sortable by adding it to an array. Then, create a filter for each column to modify the query when a user clicks to sorts the column.

add_filter( 'manage_edit-event_sortable_columns', 'bs_event_table_sorting' );
function bs_event_table_sorting( $columns ) {
	$columns['event_date'] = 'event_date';
	$columns['ticket_status'] = 'ticket_status';
	$columns['venue'] = 'venue';
	return $columns;
}

add_filter( 'request', 'bs_event_date_column_orderby' );
function bs_event_date_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'event_date' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => '_bs_meta_event_date',
            'orderby' => 'meta_value'
        ) );
    }

    return $vars;
}

add_filter( 'request', 'bs_ticket_status_column_orderby' );
function bs_ticket_status_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'ticket_status' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => '_bs_meta_event_ticket_status',
            'orderby' => 'meta_value'
        ) );
    }

    return $vars;
}

add_filter( 'request', 'bs_venue_column_orderby' );
function bs_venue_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'venue' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => '_bs_meta_event_venue',
            'orderby' => 'meta_value'
        ) );
    }

    return $vars;
}

Here is what’s happening in each of these cases. Whenever posts are listed, an array of arguments is passed that determines what is shown — things like how many to show per page, which post type to display, and so on. WordPress knows how to construct the array of arguments for each of its built-in features.

When we say, “order by venue,” WordPress doesn’t know what this means. Results are ordered before they are displayed, not after the fact. Therefore, WordPress needs to know what order to pull posts in before it actually retrieves them. Thus, we tell WordPress which meta_key to filter by and how to treat the values (meta_value for strings, meta_value_num for integers).

As with displaying data, you can go nuts here. You can use all of the arguments that WP_Query takes to perform taxonomy filtering, meta field queries and so on.

By adding the code above, we can now click to order based on date, status and venue. We’re almost there. One more thing would help out a lot, especially when dealing with hundreds of events.

Data Filtering

Setting up the filters is analogous to setting up ordering. First, we tell WordPress which controls we want to use. Then, we need to make sure those controls actually do something. Let’s get started.

add_action( 'restrict_manage_posts', 'bs_event_table_filtering' );
function bs_event_table_filtering() {
	global $wpdb;
	if ( $screen->post_type == 'event' ) {

		$dates = $wpdb->get_results( "SELECT EXTRACT(YEAR FROM meta_value) as year,  EXTRACT( MONTH FROM meta_value ) as month FROM $wpdb->postmeta WHERE meta_key = '_bs_meta_event_date' AND post_id IN ( SELECT ID FROM $wpdb->posts WHERE post_type = 'event' AND post_status != 'trash' ) GROUP BY year, month " ) ;

		echo '';
			echo '' . __( 'Show all event dates', 'textdomain' ) . '';
		foreach( $dates as $date ) {
			$month = ( strlen( $date->month ) == 1 ) ? 0 . $date->month : $date->month;
			$value = $date->year . '-' . $month . '-' . '01 00:00:00';
			$name = date( 'F Y', strtotime( $value ) );

			$selected = ( !empty( $_GET['event_date'] ) AND $_GET['event_date'] == $value ) ? 'selected="select"' : '';
			echo '' . $name . '';
		}
		echo '';

		$ticket_statuses = get_ticket_statuses();
		echo '';
			echo '' . __( 'Show all ticket statuses', 'textdomain' ) . '';
		foreach( $ticket_statuses as $value => $name ) {
			$selected = ( !empty( $_GET['ticket_status'] ) AND $_GET['ticket_status'] == $value ) ? 'selected="selected"' : '';
			echo '' . $name . '';
		}
		echo '';

	}
}

I know, this is a bit scarier! Initially, all we are doing is making sure that we add filters to the right page. As you can see from the hook, this is not specific to the post’s type, so we need to check manually.

Once we’re sure that we’re on the events page, we add two controls: a selector for event dates and a selector for ticket statuses.

We have one custom function in there, get_ticket_statuses(), which is used to retrieve a list of ticket statuses. These are all defined by the user, so describing how it works would be overkill. Suffice it to say that it contains an array with the key-value pairs that we need for the selector.

events_final

Once this is done, the table will reach its final form. We now have our filters along the top, but they don’t work yet. Let’s fix that, shall we?

Filtering data is simply a matter of adding arguments to the query again. This time, instead of ordering our data, we’ll add parameters to narrow down or broaden our returned list of posts.

add_filter( 'parse_query','bs_event_table_filter' );
function bs_event_table_filter( $query ) {
	if( is_admin() AND $query->query['post_type'] == 'event' ) {
		$qv = &$query->query_vars;
		$qv['meta_query'] = array();


		if( !empty( $_GET['event_date'] ) ) {
			$start_time = strtotime( $_GET['event_date'] );
			$end_time = mktime( 0, 0, 0, date( 'n', $start_time ) + 1, date( 'j', $start_time ), date( 'Y', $start_time ) );
			$end_date = date( 'Y-m-d H:i:s', $end_time );
			$qv['meta_query'][] = array(
				'field' => '_bs_meta_event_date',
				'value' => array( $_GET['event_date'], $end_date ),
				'compare' => 'BETWEEN',
				'type' => 'DATETIME'
			);

		}

		if( !empty( $_GET['ticket_status'] ) ) {
			$qv['meta_query'][] = array(
				'field' => '_bs_meta_event_ticket_status',
				'value' => $_GET['ticket_status'],
				'compare' => '=',
				'type' => 'CHAR'
			);
		}

		if( !empty( $_GET['orderby'] ) AND $_GET['orderby'] == 'event_date' ) {
			$qv['orderby'] = 'meta_value';
			$qv['meta_key'] = '_bs_meta_event_date';
			$qv['order'] = strtoupper( $_GET['order'] );
		}

	}
}

For each filter, we need to add rules to the query. When we’re filtering for events, we need to add a meta_query. This will return only results for which the custom field key is _bs_meta_event_ticket_status and the value is the given ticket’s status.

Once this final piece of the puzzle is added, we will have a customized WordPress admin list, complete with filtering, ordering and custom data. Well done!

Overview

Adding custom data to a table is a great way to draw information to the attention of users. Plugin developers can hook their functionality into posts without touching any other functionality, and theme authors can add advanced information about custom post types and other things to relevant places.

Showing the right information in the right place can make a huge difference in the salability and likability of any product. That being said, don’t overexploit your newfound power. Don’t add fields just because you can, especially to WordPress’ main tables.

Don’t forget that others know about this, too, and many developers of SEO plugins and similar products already add their own columns to posts. If you’re going to add things to the default post types, I suggest including settings to enable and disable them.

If you’ve used these techniques in one of your products or are wondering how to show some tidbit of information in a table, let us know in the comments!

(al, il)


© Daniel Pataki for Smashing Magazine, 2013.



Modifying Admin Post Lists In WordPress
http://feedproxy.google.com/~r/SmashingMagazine/~3/twbNXBBasXA/
http://feeds.feedburner.com/SmashingMagazine
Smashing Magazine Feed
For Professional Web Designers and Developers

Powered by WPeMatico

The Smashing Book Mystery: Have You Figured It Out Yet?


  

To celebrate the long-awaited release of our new Smashing Book (yaaaay!), we’ve prepared a little mystery for you. Below you’ll find an animated GIF that contains a hidden message. Once you resolved the mystery, you’ll see a Twitter hashtag displayed in plain text.

Are you ready? Action! (Hint: watch out for the file name).

Smashing Book Mystery
A hint: watch out for the file name.

What Can You Win?

Among the first readers who tweet us with the hashtag we’ll raffle a quite extraordinary, smashing prize (and a couple of other Smashing extras):

  • a ticket to the Smashing Conference Oxford 2014,
  • a roundtrip flight to Oxford, UK,
  • full accommodation in a fancy hotel,
  • full access to the Smashing eBook Library,
  • any Smashing workshop ticket of your choice,
  • a signed edition of the Smashing Book #4,
  • a truly Smashing laptop bag,
  • your very own Smashing caricature, designed just for you.

Please notice that to avoid spoilers, comments are closed for this post. And sorry, we aren’t going to make it too easy for you. Alright. Let’s get to work. Have you figured it out yet? 😉


© Vitaly Friedman for Smashing Magazine, 2013.



The Smashing Book Mystery: Have You Figured It Out Yet?
http://feedproxy.google.com/~r/SmashingMagazine/~3/p00tVth2S78/
http://feeds.feedburner.com/SmashingMagazine
Smashing Magazine Feed
For Professional Web Designers and Developers

Powered by WPeMatico

Blogging, and Twitter, and Readers…Oh My!

This is a guest contribution from Courtney Gordner.

If you want to maximise the potential of your blog, it’s essential that you interact with your followers. And if you want to interact with your followers, you need to know where to find them.

When they’re online and not reading through your latest post, odds are, they’re engaging with social media.  This is exactly why if you have a blog, you should be interacting with your readers on Twitter.

But hang on just a second.  Before you jump right into linking your blog with Twitter, you should take some time to make your blog “Twitter friendly.”  Here’s how this is done:

Creating a Twitter-Friendly Blog

Be Familiar with Your Target Audience and What Interests Them

It’s tempting to think that your blog should be all about your interests, but in reality, if you want to accrue a consistent readership, it’s essential that you write for your audience.

With this in mind, you should develop a marketing persona to understand the needs and priorities of your audience and a social media persona to know where they gather and interact on social media.

Use a Featured Image

Pictures, infographics, and visual aids draw readers in and grab their interest. Pictures should be properly formatted and appropriate for your content. Also, images of people are especially effective, so they should be used whenever possible.

Twitter Tools to Use with Your Blog

Use the Sidebar

Ask visitors to follow you on Twitter in your sidebar. Maximise the value of your blog by getting readers to interact with you on other social media sites.

It’s likely that visitors are already spending a lot of time on these platforms, and if you want to attract more readers, you need to go where the people go.

Incorporate Social Sharing Icons Above and Below Every Post

This is especially effective with your readers who are visually oriented.

Linking Twitter and Your Blog

Develop a Blog Profile

In your blog profile, you should give information about your blog, along with providing its URL, a current description, and gravatar.  The name you use on Twitter should be consistent with your blog.

Make Your Blog’s Brand Part of Your Twitter Image and Background

Since you’re using social media to enhance your blog’s brand, you should make sure that your Twitter profile uses brand elements that identify with your blog.

Enlist the Help of Your Friends

Share posts from your friends on your Twitter page, and have them return the favor by sharing your posts on theirs.

Keep Your Eye on the Competition

Use your personal account to follow and interact with your competition on Twitter.  The benefits of this are twofold:  first, it allows you to develop relationships with people who may be interested in your content; secondly, it gives you ideas for other topics to address on your blog.

Optimizing Your Blog’s Potential with Twitter

Tweet Each Blog Post Multiple Times 

Since people on social media live across the country in different time zones, this helps to ensure that your posts get noticed.

Condense Blog Posts into “Tweetable” Chunks

For more lengthy posts, roundups, and lists, make the most of your content by creating a set of tweets to be posted over an extended period of time.

For Reader Accessiblity, Pre-Format Tweets

This works especially well with quotes and data roundups.  To promote tweeting, use Clicktotweet.

Extend Your Blog’s Reach with Optimal Hashtags

Keep your audience in mind as you evaluate the relevance of the content for your hashtags.  You should use a maximum of three hashtags and keep them separate from the body of your message.

Publish Your Tweets With a Scheduling Tool

Scheduling tools allow you to set the time you want your tweets to appear.

Express Gratitude Towards People Who Share Your Blog Posts

They will appreciate the recognition, and by thanking people, you can develop and strengthen your social media relationships.

Join Pertinent Twitter Chats

Joining chats on Twitter is another great way to build social media relationships.  Consider joining #BlogChat on Sunday evenings to learn ways to optimise your blog and interact with other bloggers.

Interacting with your blog readers on Twitter shows readers that you care about them and value their input.  It helps you maintain your current readership and even allows you to draw in new readers.

So, if you want a widely followed blog that can’t be beat, the answer is clear:  you better start to tweet.

Courtney Gordner is a blogger with a passion for all things internet, social media and SEO! Read more from her on her own blog, www.talkviral.com

Blogging, and Twitter, and Readers…Oh My!
http://www.problogger.net/archives/2013/11/29/blogging-and-twitter-and-readersoh-my/
http://www.problogger.net/archives/category/blog-promotion/feed/
@ProBlogger» Blog Promotion
Blog Tips to Help You Make Money Blogging – ProBlogger
http://www.problogger.net/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg

My Top 5 Blogging Blunders You Can Avoid

This is a guest contribution from Gary Newell.

guest-post-mistakes.jpg

I started blogging almost two years ago and since then, my blog has grown considerably.

I have learned a lot in a relatively short period of time and I want to share five of my biggest mistakes so you can avoid falling into the same traps.

1. I didn’t link to my own articles

For well over a year, I would write articles and post them on various news sites and social media networks.

This isn’t a bad thing to do but I never linked to other articles I’d written so people bounced off my website very quickly.

For a while I couldn’t understand why people wouldn’t click on the menus at the top or click on the links in the “most popular posts” section in the side bar of my blog.

The truth is people clicked on my article in the first place because they may have been mildly interested in the title. I needed to give them a reason to stick around. And so do you.

It is up to you to sell your blog posts with great titles but then you need to try and sell other blog posts on your site. By not linking to your own articles you are just giving readers an excuse to leave.

2. I sold an outbound link to another site

There are various ways to make money from blogging but selling outbound links is not one of them.

There are a huge number of sites that provide lists of how to make money from your blog and some of them suggest selling links. I think this is bad advice.

Selling links is a sure fire way of annoying Google so selling one link for $10 isn’t worth plummeting to the bottom of Google’s rankings.

Another danger I discovered when I sold outbound links is other sites selling the same link, reducing the value of the link. I also realised the site I was linking to had a dozen pages of bad reviews. I quickly retracted the link and refunded the purchaser!

3. I spammed social networks with links

If you read the get-hits-quick guides for getting visitors to your blog, they will often say that you should embrace the social networks. I posted all my blog posts on social media before I realised the “trick”.

The “trick” behind getting value from social media is actually engaging with the people. You need to have conversations with people before they trust you enough to follow you and share your links with friends!

For many of you, this won’t be a surprise.

You have to get involved and comment on other people’s articles and build up a comment Karma. You also have to post not just your own links but link to other people’s articles.

4. I randomly posted affiliate adverts all over my site

For a while I became disillusioned with affiliate schemes. I placed adverts across my site but nobody was clicking them.

Then one day, I realised why. I was doing it wrong.

Placing an advert at the top of the page is just eye candy. Hardly anybody clicks through to them.

I found that if I provided an ad for something that was related to my content, that wasn’t easy to find elsewhere and was something people needed then they would click through and purchase goods. I’m not making millions but I am getting a good return now.

I also found that Amazon links don’t work when sporadically splashed around the site. If you link to content and write articles that link to items on Amazon without overly selling the item then people click through and buy goods.

5. I kept all the best articles for my own blog

This is a recent one really. I have only written a couple of guest articles because as a blogger I wanted to keep my best content for my own blog.

I thought that if I want people to visit my site then I need to have the best content on my site.

The truth is, however, that to get people to click through to my site I needed to have great content on other people’s sites as well. I also accept guest articles and they often attract a great number of new visitors.

Summary

Be careful about following advice on how to get rich quick from blogging or advice thats tell you how to grow your blog ridiculously fast. If it seems to good to be true, it probably is.

My five blogging blunders have helped me become a better blogger . I have learned that if I write good content and build relationships with other people in my niche area, my blog grows naturally. And it has.

I’d love to know…. what have your big blogging blunders been and what did you learn?

Gary Newell lives in Scotland with his wife Stephanie and three children. Gary runs the blog Everyday Linux User which provides news, reviews and technical how-to’s.

 

My Top 5 Blogging Blunders You Can Avoid
http://www.problogger.net/archives/2013/11/23/my-top-5-blogging-blunders-you-can-avoid/
http://www.problogger.net/archives/category/blog-promotion/feed/
@ProBlogger» Blog Promotion
Blog Tips to Help You Make Money Blogging – ProBlogger
http://www.problogger.net/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg