<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">

    <channel>
    
    <title>Pixelmatrix Design</title>
    <link>http://pixelmatrixdesign.com/blog/</link>
    <description></description>
    <dc:language>en</dc:language>
    <dc:creator>joshpyles@gmail.com</dc:creator>
    <dc:rights>Copyright 2008</dc:rights>
    <dc:date>2008-06-23T17:55:00-08:00</dc:date>
    <admin:generatorAgent rdf:resource="http://expressionengine.com/" />
    

    <item>
      <title>Progressive enhancement and why you should care</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/progressive_enhancement_and_why_you_should_care/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/progressive_enhancement_and_why_you_should_care/#When:17:55:00Z</guid>
      <description>You may or may not have heard of &#8220;progressive enhancement&#8221; before. It&#8217;s a farely simple philosophy when it comes to designing or styling documents for the web, and it takes a bit of an open mind to accept, but it&#8217;s something I&#8217;ve been really thinking about lately. Put simply, it&#8217;s creating a design that looks good in older browsers, but adding in additional touches that really make the design shine in newer browsers.

Note: This is not the same as &#8220;graceful degradation&#8221; which employs a similar technique. Graceful degradation is built around the opposite technique. Designing something for modern browsers and providing a way for it to degrade (still work) in older browsers. Similar result, but different thought process. This is also a good way to design/code for sites that have more of a modern audience.
We&#8217;re in a bit of a transitional period now, with CSS1 being supported by all browsers, CSS2 being supported by many browsers, and some CSS3 being supported by modern browsers. The simple fact that we have so many browsers to support can make things very difficult. We want to support new technology, but our ability is hindered by needing to support the older browsers as well.

Progressive enhancement offers an elegant solution. Keep in mind, this isn&#8217;t anything new. It&#8217;s been around at least since 2003. With progressive enhancement we&#8217;ll design a site that makes use of CSS supported in all major browsers, currently limited to CSS1 and portions of CSS2. Then, rather than go through all the work to code things the hard way (using hacks), we&#8217;ll make use of the advanced features of CSS2 &amp;amp; 3 to add to the design. Older browsers still see a nice design, but newer browsers&#8212;especially with Firefox 3 being recently released&#8212;will see a nicer design.

Of course, this isn&#8217;t always the best solution, but I think it&#8217;s a good way to think, design, and code.

I offer this example as a practical application of this philosophy:

I recently designed a site (note: I didn&apos;t code most of it, but these flags were one of the things I did code) that needed some error &#8220;flags&#8221;. I thought it would be nice to have a gradient on them, use rounded corners and give them a drop&#45;shadow, but I knew it would be pretty difficult to put rounded corners, and a drop shadow on these while still making it easily resizable and bullet&#45;proof. I used progressive enhancement to make the flag look nice in all major browsers, but look especially nice in modern browsers.

Here is my example HTML:
&amp;lt;div class=&amp;quot;error required&amp;quot;&amp;gt;&amp;lt;span&amp;gt;Required Field&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;

&#8230;and the CSS:

div.error.required {
	height: 1.7em;
	background: transparent url(pointer.png) no&#45;repeat left 51%;
	font: bold 90%/1.7em &quot;Helvetica Neue&quot;, Helvetica, Arial, sans&#45;serif;
	color: #fff;
	float: left;
	padding&#45;left: 1.3em;
	/* CSS3 */
	text&#45;shadow: #b52700 0 &#45;1px 0;
}

.error.required span {
	height: 1.7em;
	background: #e44205 url(gradient.png) repeat&#45;x 0 center;
	display: block;
	float: left;
	padding: 0 1em 0 .5em;
	/* CSS3 */
	&#45;webkit&#45;box&#45;shadow: 1px 1px 1px rgba(0,0,0,0.3);
	&#45;moz&#45;box&#45;shadow: 1px 1px 1px rgba(0,0,0,0.3);
	box&#45;shadow: 1px 1px 1px rgba(0,0,0,0.3);
	&#45;webkit&#45;border&#45;top&#45;right&#45;radius: 7px;
	&#45;webkit&#45;border&#45;bottom&#45;right&#45;radius: 7px;
	&#45;moz&#45;border&#45;radius&#45;topright: 7px;
	&#45;moz&#45;border&#45;radius&#45;bottomright: 7px;
	border&#45;top&#45;right&#45;radius: 7px;
	border&#45;bottom&#45;right&#45;radius: 7px;
}

Notice how I use CSS3 to apply some nice extras such as text&#45;shadow (for an embossed look on the text), box&#45;shadow (for a nice drop shadow), and border&#45;radius (for rounded corners). I used a gradient image for the background of the span that was intentionally taller than expected, in order to leave room for expansion. I also used a pointer triangle image with the same gradient on it that was the same height as the gradient image.

The final result looks like this:


div.error.required {
	height: 1.7em;
	background: transparent url(/images/weblog/pointer.png) no&#45;repeat left 51%;
	font: bold 90%/1.7em &quot;Helvetica Neue&quot;, Helvetica, Arial, sans&#45;serif;
	color: #fff;
	float: left;
	padding&#45;left: 1.3em;
	text&#45;shadow: #b52700 0 &#45;1px 0;
}

.error.required span {
	height: 1.7em;
	background: #e44205 url(/images/weblog/gradient.png) repeat&#45;x 0 center;
	display: block;
	float: left;
	padding&#45;left: .5em;
	padding&#45;right: 1em;
	&#45;webkit&#45;box&#45;shadow: 1px 1px 1px rgba(0,0,0,0.3);
	&#45;moz&#45;box&#45;shadow: 1px 1px 1px rgba(0,0,0,0.3);
	box&#45;shadow: 1px 1px 1px rgba(0,0,0,0.3);
	&#45;webkit&#45;border&#45;top&#45;right&#45;radius: 7px;
	&#45;webkit&#45;border&#45;bottom&#45;right&#45;radius: 7px;
	&#45;moz&#45;border&#45;radius&#45;topright: 7px;
	&#45;moz&#45;border&#45;radius&#45;bottomright: 7px;
	border&#45;top&#45;right&#45;radius: 7px;
	border&#45;bottom&#45;right&#45;radius: 7px;
}


Required Field


I hope if you weren&#8217;t already familiar with this philosophy that you&#8217;ll give it a try sometime. It&apos;s a different way to think, for sure. You have to give up some control over the design, but the reward is a solution that works well for everyone.

For more information on this check out the original SXSW presentation outlining this philosophy, and the Wikipedia entry.</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /><p>You may or may not have heard of &#8220;progressive enhancement&#8221; before. It&#8217;s a farely simple philosophy when it comes to designing or styling documents for the web, and it takes a bit of an open mind to accept, but it&#8217;s something I&#8217;ve been really thinking about lately. Put simply, it&#8217;s creating a design that looks good in older browsers, but adding in additional touches that really make the design shine in newer browsers.</p>

<p class="note"><strong>Note:</strong> This is not the same as &#8220;graceful degradation&#8221; which employs a similar technique. Graceful degradation is built around the opposite technique. Designing something for modern browsers and providing a way for it to degrade (still work) in older browsers. Similar result, but different thought process. This is also a good way to design/code for sites that have more of a modern audience.</p>
 <p>We&#8217;re in a bit of a transitional period now, with <abbr>CSS1</abbr> being supported by all browsers, <abbr>CSS2</abbr> being supported by many browsers, and some <abbr>CSS3</abbr> being supported by modern browsers. The simple fact that we have so many browsers to support can make things very difficult. We want to support new technology, but our ability is hindered by needing to support the older browsers as well.</p>

<p><em>Progressive enhancement</em> offers an elegant solution. Keep in mind, <em>this isn&#8217;t anything new</em>. It&#8217;s been around <em>at least</em> since 2003. With <em>progressive enhancement</em> we&#8217;ll design a site that makes use of <abbr>CSS</abbr> supported in all major browsers, currently limited to <abbr>CSS1</abbr> and portions of <abbr>CSS2</abbr>. Then, rather than go through all the work to code things the hard way (using hacks), we&#8217;ll make use of the advanced features of <abbr>CSS2</abbr> &amp; <abbr>3</abbr> to add to the design. Older browsers still see a <em>nice</em> design, but newer browsers&#8212;especially with Firefox 3 being recently released&#8212;will see a <em>nicer</em> design.</p>

<p>Of course, this isn&#8217;t <em>always</em> the best solution, but I think it&#8217;s a good way to think, design, and code.</p>

<p><em>I offer this example as a practical application of this philosophy:</em></p>

<p>I recently designed a <a href="http://emailtoid.com" title="Email To ID">site</a> (<em>note:</em> I didn't code most of it, but these flags were one of the things I did code) that needed some error &#8220;flags&#8221;. I thought it would be nice to have a gradient on them, use rounded corners and give them a drop-shadow, but I knew it would be pretty difficult to put rounded corners, and a drop shadow on these while still making it easily resizable and bullet-proof. I used progressive enhancement to make the flag look nice in all major browsers, but look <em>especially nice</em> in modern browsers.</p>

<p><em>Here is my example <abbr>HTML</abbr>:</em></p>
<code>&lt;div class=&quot;error required&quot;&gt;&lt;span&gt;Required Field&lt;/span&gt;&lt;/div&gt;</code>

<p><em>&#8230;and the <abbr>CSS</abbr>:</em></p>
<code>
<strong>div.error.required {</strong><br/>
	height: 1.7em;<br/>
	background: transparent url(pointer.png) no-repeat left 51%;<br/>
	font: bold 90%/1.7em "Helvetica Neue", Helvetica, Arial, sans-serif;<br/>
	color: #fff;<br/>
	float: left;<br/>
	padding-left: 1.3em;<br/>
	<em>/* CSS3 */</em><br/>
	text-shadow: #b52700 0 -1px 0;<br/>
<strong>}</strong><br/><br/>

<strong>.error.required span {</strong><br/>
	height: 1.7em;<br/>
	background: #e44205 url(gradient.png) repeat-x 0 center;<br/>
	display: block;<br/>
	float: left;<br/>
	padding: 0 1em 0 .5em;<br/>
	<em>/* CSS3 */</em><br/>
	-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.3);<br/>
	-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.3);<br/>
	box-shadow: 1px 1px 1px rgba(0,0,0,0.3);<br/>
	-webkit-border-top-right-radius: 7px;<br/>
	-webkit-border-bottom-right-radius: 7px;<br/>
	-moz-border-radius-topright: 7px;<br/>
	-moz-border-radius-bottomright: 7px;<br/>
	border-top-right-radius: 7px;<br/>
	border-bottom-right-radius: 7px;<br/>
<strong>}</strong></code>

<p>Notice how I use <abbr>CSS3</abbr> to apply some nice extras such as text-shadow (for an embossed look on the text), box-shadow (for a nice drop shadow), and border-radius (for rounded corners). I used a gradient image for the background of the span that was intentionally taller than expected, in order to leave room for expansion. I also used a pointer triangle image with the same gradient on it that was the same height as the gradient image.</p>

<p><em>The final result looks like this:</em></p>

<style type="text/css">
div.error.required {
	height: 1.7em;
	background: transparent url(/images/weblog/pointer.png) no-repeat left 51%;
	font: bold 90%/1.7em "Helvetica Neue", Helvetica, Arial, sans-serif;
	color: #fff;
	float: left;
	padding-left: 1.3em;
	text-shadow: #b52700 0 -1px 0;
}

.error.required span {
	height: 1.7em;
	background: #e44205 url(/images/weblog/gradient.png) repeat-x 0 center;
	display: block;
	float: left;
	padding-left: .5em;
	padding-right: 1em;
	-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.3);
	-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.3);
	box-shadow: 1px 1px 1px rgba(0,0,0,0.3);
	-webkit-border-top-right-radius: 7px;
	-webkit-border-bottom-right-radius: 7px;
	-moz-border-radius-topright: 7px;
	-moz-border-radius-bottomright: 7px;
	border-top-right-radius: 7px;
	border-bottom-right-radius: 7px;
}
</style>

<div class="error required"><span>Required Field</span></div>
<div class="clear"></div>

<p>I hope if you weren&#8217;t already familiar with this philosophy that you&#8217;ll give it a try sometime. It's a different way to think, for sure. You have to give up some control over the design, but the reward is a solution that works well for everyone.</p>

<p>For more information on this check out <a href="http://www.hesketh.com/publications/inclusive_web_design_for_the_future/" title="the original SXSW presentation outlining this philosophy">the original SXSW presentation outlining this philosophy</a>, and the <a href="http://en.wikipedia.org/wiki/Progressive_Enhancement" title="Wikipedia entry">Wikipedia entry</a>.</p> ]]>
</content:encoded>
      <dc:subject>my opinions</dc:subject>
      <dc:date>2008-06-23T17:55:00-08:00</dc:date>
    </item>

    <item>
      <title>Making resolution&#45;independent resources</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/making_resolution_independent_resources/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/making_resolution_independent_resources/#When:19:55:00Z</guid>
      <description>This is a guide for designers who want or need to make resolution&#45;independent glyphs or other resources for Mac apps. I must preface all this information with a note that much of this information was taught to me by Cabel Sasser and the guys at Panic. They&#8217;re way ahead in resolution&#45;independence.


You will need:

Adobe Illustrator
Icon design skills
Lots of patience


BASICS

Let&#8217;s go over some basics. &#8216;Resolution Independence&#8217; is essentially the vectorization of interface components so that they can be scaled to a number of PPI&#8217;s (pixels per inch). Standard screens use 72 PPI (also referred to as DPI, but PPI is more correct). Devices like the iPhone have next&#45;generation screens with a much higher PPI (160 PPI on the iPhone). As technology changes, we&#8217;re going to have screens that have higher and higher PPI, meaning that our interface elements will need to stretch to a number of different pixel values and still look nice (using vector). The format that we currently use is the PDF format.


Document settings for an icon that displays at 16px by 16px on a typical display&#65532;

GETTING STARTED

To get started, you need to open Illustrator and create a new document. You&#8217;ll want to enter the dimensions in pixels to exactly the size this image would normally be used at. Make sure you click the &#8216;Advanced&#8217; button and set the color mode to be RGB, &#8216;Raster effects&#8217; at &apos;Screen&apos; (72 ppi), and the &#8216;Preview mode&#8217; set to &#8216;Pixel&#8217;.


Grid settings to use when designing for resolution independent UI&apos;s

SETTING UP THE PIXEL GRID

In order to get any sort of idea where your pixels are in this document, you&#8217;ll need to set up a grid to snap to. Hit &#8984;&#45;K to open the settings, and go to the &#8216;Guides &amp; Grid&#8217; tab.
	
Set your grid measure and subdivisions both to &#8216;32px&#8217;, and make sure it&#8217;s a color that you can work with (such as the default gray). &#8220;Grids In Back&#8221; can be useful sometimes, and a hindrance other times. With this checked, any shape you make on the canvas will hide the grid. Press OK to save the changes and go back to your document. To turn on and off the grid you can use &#8984;&#45;&apos; or use the View menu.

WORKING IN ILLUSTRATOR

This can be tough if you&#8217;re not used to working in Illustrator, but you&#8217;ll want to create your component how you normally would. Sometimes it helps to copy and paste a raster version in first, and to trace it using Shapes or the Pen tool. Zoom in really far to work. Make sure you&#8217;re working with &#8216;Pixel Preview&#8217; on (View &amp;rarr; Pixel Preview), and zoom out to 100% every once and a while.
Note: Illustrator&#8217;s pixel rendering at 100% is very strange. Sometimes it can get quite off. The best way to see how it looks is to save your document as a PDF and drag the file into Text Edit. This will render it with Apple&#8217;s engine, showing you exactly how it will look in your app.

Sometimes if you work with the Pathfinder to merge shapes, you&#8217;ll find that the shape is lined up exactly to the grid and it will look as if it&#8217;s off. This is just Illustrator&apos;s faulty rendering.

Note: You can paste in vector shapes from Photoshop if you&apos;ve already designed your glyph or component using Photoshop&apos;s shape layers.


&#65532;Settings to use when exporting to PDF

EXPORTING YOUR FILE

So you&#8217;ve got your image all ready to be saved as a resource? We need to save this as a PDF. Go to the &#8216;File &amp;rarr; Save As&#8230;&#8217; window and choose Illustrator PDF as the format. When prompted for what PDF settings you want to use, just choose the &#8216;Illustrator Default&#8217; setting from the menu.

NOTES ON USAGE

Your file will appear to have a white background since it&#8217;s a PDF, but when you use it as a resource, the white background will be cut out. This is an important distinction to make because, if you do want a white background, you&#8217;ll need to draw it into the file itself.

You should be able to use the PDF file just like any other image resource file in your applications.

It may be a bit more work to create resolution&#45;independent resources, but it&#8217;s probably a pretty good investment for the future, when your app will likely be used on higher resolution displays.

ADDITIONAL READING

Want to learn more? Here&apos;s a couple links to get you started:

cabel.name: Apple&apos;s Next Generation Themes
Red Sweater Blog &#45; Resolution Independent Fever

If you&apos;ve got any thoughts to add, please let me know in the comments.</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /><p>This is a guide for designers who want or need to make resolution-independent glyphs or other resources for Mac apps. I must preface all this information with a note that much of this information was taught to me by <a href="http://cabel.name" title="Cabel Sasser" rel="friend met colleague">Cabel Sasser</a> and the guys at <a href="http://panic.com" title="Panic">Panic</a>. They&#8217;re way ahead in resolution-independence.
<br />

</p> <strong>You will need:</strong>
<ul>
<li>Adobe Illustrator</li>
<li>Icon design skills</li>
<li>Lots of patience</li>
</ul>

<h5>BASICS</h5>

<p>Let&#8217;s go over some basics. &#8216;Resolution Independence&#8217; is essentially the vectorization of interface components so that they can be scaled to a number of <abbr>PPI</abbr>&#8217;s (pixels per inch). Standard screens use 72 <abbr>PPI</abbr> (also referred to as <abbr>DPI</abbr>, but <abbr>PPI</abbr> is more correct). Devices like the iPhone have next-generation screens with a <em>much higher</em> <abbr>PPI</abbr> (160 <abbr>PPI</abbr> on the iPhone). As technology changes, we&#8217;re going to have screens that have higher and higher <abbr>PPI</abbr>, meaning that our interface elements will need to stretch to a number of different pixel values and still look nice (using vector). The format that we currently use is the <abbr>PDF</abbr> format.</p>

<p><img src="http://www.pixelmatrixdesign.com/images/weblog/doc_settings.png" width="500" height="298" /></p>
<p class="caption">Document settings for an icon that displays at 16px by 16px on a typical display</p>&#65532;

<h5>GETTING STARTED</h5>

<p>To get started, you need to open Illustrator and create a new document. You&#8217;ll want to enter the dimensions in pixels to <em>exactly</em> the size this image would normally be used at. Make sure you click the &#8216;Advanced&#8217; button and set the color mode to be <abbr>RGB</abbr>, &#8216;Raster effects&#8217; at 'Screen' (72 <abbr>ppi</abbr>), and the &#8216;Preview mode&#8217; set to &#8216;Pixel&#8217;.</p>

<p><img src="http://www.pixelmatrixdesign.com/images/weblog/grid_settings.png" width="500" height="329" /></p>
<p class="caption">Grid settings to use when designing for resolution independent UI's</p>

<h5>SETTING UP THE PIXEL GRID</h5>

<p>In order to get <em>any</em> sort of idea where your pixels are in this document, you&#8217;ll need to set up a grid to snap to. Hit &#8984;-K to open the settings, and go to the &#8216;Guides & Grid&#8217; tab.</p>
	
<p>Set your grid measure and subdivisions both to &#8216;32px&#8217;, and make sure it&#8217;s a color that you can work with (such as the default gray). &#8220;Grids In Back&#8221; can be useful sometimes, and a hindrance other times. With this checked, any shape you make on the canvas will hide the grid. Press <abbr>OK</abbr> to save the changes and go back to your document. To turn on and off the grid you can use &#8984;-' or use the View menu.</p>

<h5>WORKING IN ILLUSTRATOR</h5>

<p>This can be tough if you&#8217;re not used to working in Illustrator, but you&#8217;ll want to create your component how you normally would. Sometimes it helps to copy and paste a raster version in first, and to trace it using Shapes or the Pen tool. Zoom in really far to work. Make sure you&#8217;re working with &#8216;Pixel Preview&#8217; on (View &rarr; Pixel Preview), and zoom out to 100% every once and a while.</p>
<p class="note"><strong>Note:</strong> Illustrator&#8217;s pixel rendering at 100% is very strange. Sometimes it can get quite off. The best way to see how it looks is to save your document as a <abbr>PDF</abbr> and drag the file into Text Edit. This will render it with Apple&#8217;s engine, showing you exactly how it will look in your app.</p>

<p>Sometimes if you work with the Pathfinder to merge shapes, you&#8217;ll find that the shape is lined up exactly to the grid and it will look as if it&#8217;s off. This is just Illustrator's faulty rendering.</p>

<p class="note"><strong>Note:</strong> You can paste in vector shapes from Photoshop if you've already designed your glyph or component using Photoshop's shape layers.</p>

<p><img src="http://www.pixelmatrixdesign.com/images/weblog/pdf_settings.png" width="500" height="406" /></p>
&#65532;<p class="caption">Settings to use when exporting to <abbr>PDF</abbr></p>

<h5>EXPORTING YOUR FILE</h5>

<p>So you&#8217;ve got your image all ready to be saved as a resource? We need to save this as a <abbr>PDF</abbr>. Go to the &#8216;File &rarr; Save As&#8230;&#8217; window and choose Illustrator <abbr>PDF</abbr> as the format. When prompted for what <abbr>PDF</abbr> settings you want to use, just choose the &#8216;Illustrator Default&#8217; setting from the menu.</p>

<h5>NOTES ON USAGE</h5>

<p>Your file will appear to have a white background since it&#8217;s a <abbr>PDF</abbr>, but when you use it as a resource, the white background will be cut out. This is an important distinction to make because, if you do want a white background, you&#8217;ll need to draw it into the file itself.</p>

<p>You should be able to use the <abbr>PDF</abbr> file just like any other image resource file in your applications.</p>

<p>It may be a bit more work to create resolution-independent resources, but it&#8217;s probably a pretty good investment for the future, when your app will likely be used on higher resolution displays.</p>

<h5>ADDITIONAL READING</h5>

<p>Want to learn more? Here's a couple links to get you started:</p>
<ul class="links">
<li><a href="http://www.cabel.name/2007/01/apples-next-generation-themes.html">cabel.name: Apple's Next Generation Themes</a></li>
<li><a href="http://www.red-sweater.com/blog/223/resolution-independent-fever">Red Sweater Blog - Resolution Independent Fever</a></li>
</ul>
<p>If you've got any thoughts to add, please let me know in the comments.</p> ]]>
</content:encoded>
      <dc:subject>mac stuff</dc:subject>
      <dc:date>2008-06-12T19:55:00-08:00</dc:date>
    </item>

    <item>
      <title>Making a better reCAPTCHA</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/making_a_better_recaptcha/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/making_a_better_recaptcha/#When:19:38:00Z</guid>
      <description>I&#8217;ve noticed a lot of people using the reCAPTCHA widget lately. While it&#8217;s my belief that users shouldn&#8217;t have to pay the price for websites&#8217; spam issues, I think this is a neat service and idea overall. The only problem is that reCAPTCHA has an awful UI, and confused me the first 4 times I used it! I have a few ideas that will make this widget a lot more user&#45;friendly and usable.
PROBLEMS

So let&#8217;s talk about what&#8217;s making this widget suck. The biggest issue I see is that it&#8217;s not clear how you are supposed to type the two words. They are spaced out in the graphic, but for some reason, you&#8217;re not supposed to put a space in the input box. Even worse, it does not explain how it wants you to enter the words.


	There&#8217;s also an issue with spacing. The words are scattered above in the top area, and they don&#8217;t really relate to the field below. Optimally the text input would be directly under the words.


	For some reason, they&#8217;ve also decided to take up a lot of space with their branding and slogan (which doesn&#8217;t make a lot of sense to me). The logo could be a lot smaller, and we could easily remove the slogan: &#8220;stop spam. read books.&#8221; Let&#8217;s be honest. You&#8217;re not actually going to read any books like this, and it just serves to add to the confusion currently.


	Lastly, there&#8217;s no clear way to see if you&#8217;ve entered the information correctly. It seems like some feedback given to the user would be very helpful. If you misread a character you would know you&#8217;ve made an error right away, and if you entered everything correctly, you would be able to see that and know that when you click the &#8220;Submit&#8221; button that it will work.

SOLUTIONS

To solve the formatting issues I decided to split the text input into two separate fields. This makes it very clear that you need to enter both words, and that there should be one word per field.


	In order to solve the spacing issues, i&#8217;ve aligned the inputs with their corresponding text. This helps users instantly understand where they need to type and what goes in each box.


	I&#8217;ve reduced the size of the branding to better utilize the space, and also moved the function buttons to the top right corner to fit with the new layout.


	I added a new function to the widget which would really help the interaction a lot. It&#8217;s a submit button built right into the widget. Since this widget is really the gatekeeper of the submit button, it makes a lot of sense for that to be contained in the widget itself. Before the user is validated the button is disabled, and when they type in the correct values it enables the button. This wouldn&#8217;t be difficult for them to implement with javascript.


	Last but not least, I added some inline validation to better communicate with the user whether or not they are ready to submit the form, and where any errors are.

THE END RESULT

And here&#8217;s how my improved version of reCAPTCHA looks:





Got a better idea? Let me know in the comments.</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /><p><img src="http://www.pixelmatrixdesign.com/images/weblog/recaptcha_old.png" alt="recaptcha" />
</p>
<p>
I&#8217;ve noticed <em>a lot</em> of people using the <a href="http://recaptcha.com">reCAPTCHA widget</a> lately. While it&#8217;s my belief that users shouldn&#8217;t have to pay the price for websites&#8217; spam issues, I think this is a neat service and idea overall. The only problem is that reCAPTCHA has an <em>awful</em> UI, and confused me the first 4 times I used it! I have a few ideas that will make this widget <em>a lot</em> more user-friendly and usable.
</p> <h5>PROBLEMS</h5>
<p>
So let&#8217;s talk about what&#8217;s making this widget <em>suck</em>. The <em>biggest</em> issue I see is that it&#8217;s not clear how you are supposed to type the two words. They are spaced out in the graphic, but for some reason, you&#8217;re not supposed to put a space in the input box. Even worse, it does not explain how it wants you to enter the words.
</p>
<p>
	There&#8217;s also an issue with spacing. The words are scattered above in the top area, and they don&#8217;t really relate to the field below. Optimally the text input would be directly under the words.
</p>
<p>
	For some reason, they&#8217;ve also decided to take up a lot of space with their branding and slogan (which doesn&#8217;t make a lot of sense to me). The logo could be a lot smaller, and we could easily remove the slogan: &#8220;stop spam. read books.&#8221; Let&#8217;s be honest. You&#8217;re not <em>actually</em> going to read any books like this, and it just serves to add to the confusion currently.
</p>
<p>
	Lastly, there&#8217;s no clear way to see if you&#8217;ve entered the information correctly. It seems like some feedback given to the user would be <em>very</em> helpful. If you misread a character you would know you&#8217;ve made an error right away, and if you entered everything correctly, you would be able to see that and know that when you click the &#8220;Submit&#8221; button that it will work.
</p>
<h5>SOLUTIONS</h5>
<p>
To solve the formatting issues I decided to split the text input into two separate fields. This makes it very clear that you need to enter <em>both</em> words, and that there should be <em>one word</em> per field.
</p>
<p>
	In order to solve the spacing issues, i&#8217;ve aligned the inputs with their corresponding text. This helps users <em>instantly</em> understand where they need to type and what goes in each box.
</p>
<p>
	I&#8217;ve reduced the size of the branding to better utilize the space, and also moved the function buttons to the top right corner to fit with the new layout.
</p>
<p>
	I added a new function to the widget which would <em>really</em> help the interaction a lot. It&#8217;s a submit button built right into the widget. Since this widget is really the gatekeeper of the submit button, it makes a lot of sense for that to be contained in the widget itself. Before the user is validated the button is disabled, and when they type in the correct values it enables the button. This wouldn&#8217;t be difficult for them to implement with javascript.
</p>
<p>
	Last but not least, I added some inline validation to better communicate with the user whether or not they are ready to submit the form, and where any errors are.
</p>
<h5>THE END RESULT</h5>
<p>
And here&#8217;s how my improved version of reCAPTCHA looks:
</p>
<p>
<img src="http://www.pixelmatrixdesign.com/images/weblog/recaptcha.png" alt="redesigned recaptcha" />
</p>
<p>
Got a better idea? Let me know in the comments.
</p> ]]>
</content:encoded>
      <dc:subject>usability</dc:subject>
      <dc:date>2008-06-02T19:38:00-08:00</dc:date>
    </item>

    <item>
      <title>Thoughts on Distributed Twitter</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/thoughts_on_distributed_twitter/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/thoughts_on_distributed_twitter/#When:00:30:00Z</guid>
      <description>Today at Beer and Blog we discussed the possibilities of distributed &#8220;micro&#45;blogging&#8221; services using an open standard, and blogging platforms. It&#8217;s certainly an interesting idea, and I would love to see it come to fruition, but I still have several doubts about it. There are several key components that may seem small overall, but they are the little nuances that make Twitter our favorite online service.
Big Fat Issue: No Community

Twitter has grown as large as it is because of the community behind it. The public profiles provide a way to see who people are, and who else they follow. This is a fundamental way that many people discover similar users on Twitter. You can see at a glance everything you need to know about people, without having to go anywhere. Another issue is with communicating with people across the service. With Twitter it&#8217;s beautiful and simple: Just use the &#8220;@&#8221; symbol and the user&#8217;s username, and everyone knows who you&#8217;re talking about. With no central service, there is no great way to do that unless you specify the user&#8217;s full name, which is much less convenient. There&#8217;s also no way to automatically show who you&#8217;re following because all that info is in the client application or website.

No history

The &#8220;distributed&#8221; form of Twitter would take away any sort of in depth history of a users posts. Right now pagination is gone on Twitter, and many people are really bummed about it. The method of using a feed reader removes any possibility of seeing what people were up to while you were gone on vacation, or without internet for a while. Only if you had your client going constantly to cache the data as it comes in would you have any sort of way to see history.

Barrier to entry

There is an enormous barrier to entry for something like this. A user would have to (at least for now) create a blog (or use their  current blog) configure it as needed, install a plugin and then search out all their friends&#8217; blogs to see if they are using the distributed service. Another service could provide some of the functionality that you need, but it can&#8217;t completely replace all of the missing features without becoming proprietary.

Duplicating functionality

The idea of creating a standard XML format for microblogging seems redundant to me because we already have services like XMPP that have all of the same components in place.


The other aspect of this is that it&#8217;s rewriting Twitter, Pownce, Jaiku, and Facebook status updates, to create the Twitter&#45;killer.

Communicating with the blog platforms

One of the other issues is that there isn&#8217;t a great way to post microblogs from the desktop that works on all the blogging platforms. I know that some platforms (like Wordpress) have great Metaweblog API support, but not all do. I have had a hard time getting that to work on ExpressionEngine, and it even has a built in plug&#45;in for that. To really take off there would have to be a plugin for every major blogging platform, and they would all need to be compatible.


No one wants to have to manually update from their blogging admin tool.

What&#8217;s the solution?

In my opinion, instead of looking to create our own Twitter/Pownce/Jaiku&#45;like service that&#8217;s open, we should find ways to get Twitter, Pownce, and Jaiku to all talk to each other. The idea of a protocol for this sort of communication is great, but it&#8217;s not going to take off with all the users who area already using these services unless we can get everyone involved on the same page. We need to get the companies themselves on board somehow.


In our lives today, we have a seemingly infinite amount of freedom and choice. The real killer feature would be to bring everything back together so my friends on Pownce and Jaiku can talk to me on Twitter, and those who want to set up a system with their blog could also get involved.


I am definitely proud of the guys who are behind this movement, and I think it&#8217;s great that they are exploring it, but let&#8217;s see if we can get around these problems! I am sure there are even more issues that I&#8217;m not thinking of as well. Feel free to discuss in the comments below.</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /><p>Today at <a href="http://beerandblog.com" title="Beer and Blog">Beer and Blog</a> we discussed the possibilities of distributed &#8220;micro-blogging&#8221; services using an open standard, and blogging platforms. It&#8217;s <em>certainly</em> an interesting idea, and I would love to see it come to fruition, but I still have several doubts about it. There are several <em>key</em> components that may seem <em>small</em> overall, but they are the little nuances that make <a href="http://twitter.com" title="Twitter">Twitter</a> our favorite online service.
</p> <h5>Big Fat Issue: No Community</h5>
<p>
Twitter has grown as large as it is because of the community behind it. The public profiles provide a way to see who people are, and who else they follow. This is a fundamental way that many people discover similar users on Twitter. You can see at a glance everything you need to know about people, without having to go anywhere. Another issue is with communicating with people across the service. With Twitter it&#8217;s beautiful and simple: Just use the &#8220;@&#8221; symbol and the user&#8217;s username, and everyone knows who you&#8217;re talking about. With <em>no</em> central service, there is no great way to do that unless you specify the user&#8217;s full name, which is much less convenient. There&#8217;s also no way to automatically show who you&#8217;re following because all that info is in the client application or website.
</p>
<h5>No history</h5>
<p>
The <em>&#8220;distributed&#8221;</em> form of Twitter would take away any sort of in depth history of a users posts. Right now pagination is gone on Twitter, and many people are really bummed about it. The method of using a feed reader removes any possibility of seeing what people were up to while you were gone on vacation, or without internet for a while. Only if you had your client going <em>constantly</em> to cache the data as it comes in would you have any sort of way to see history.
</p>
<h5>Barrier to entry</h5>
<p>
There is an enormous barrier to entry for something like this. A user would have to (at least for now) create a blog (or use their  current blog) configure it as needed, install a plugin and <em>then</em> search out all their friends&#8217; blogs to see if they are using the distributed service. Another service could provide some of the functionality that you need, but it can&#8217;t completely replace all of the missing features without becoming proprietary.
</p>
<h5>Duplicating functionality</h5>
<p>
The idea of creating a standard <abbr>XML</abbr> format for microblogging seems redundant to me because we already have services like <abbr>XMPP</abbr> that have all of the same components in place.
</p>
<p>
The other aspect of this is that it&#8217;s rewriting Twitter, Pownce, Jaiku, and Facebook status updates, to create the Twitter-killer.
</p>
<h5>Communicating with the blog platforms</h5>
<p>
One of the other issues is that there isn&#8217;t a great way to post microblogs from the desktop that works on all the blogging platforms. I know that some platforms (like Wordpress) have great Metaweblog API support, but not all do. I have had a hard time getting that to work on ExpressionEngine, and it even has a built in plug-in for that. To really take off there would have to be a plugin for every major blogging platform, and they would all need to be compatible.
</p>
<p>
No one wants to have to manually update from their blogging admin tool.
</p>
<h5>What&#8217;s the solution?</h5>
<p>
In my opinion, instead of looking to create <em>our own</em> Twitter/Pownce/Jaiku-like service that&#8217;s open, we should find ways to get Twitter, Pownce, and Jaiku to all talk to each other. The idea of a protocol for this sort of communication is great, but it&#8217;s not going to take off with all the users who area already using these services unless we can get everyone involved on the same page. We need to get the companies themselves on board somehow.
</p>
<p>
In our lives today, we have a seemingly infinite amount of freedom and choice. The real killer feature would be to bring everything back together so my friends on Pownce and Jaiku can talk to me on Twitter, and those who want to set up a system with their blog could also get involved.
</p>
<p>
I am definitely proud of the guys who are behind this movement, and I think it&#8217;s great that they are exploring it, but let&#8217;s see if we can get around these problems! I am sure there are even more issues that I&#8217;m not thinking of as well. Feel free to discuss in the comments below.
</p> ]]>
</content:encoded>
      <dc:subject>my opinions</dc:subject>
      <dc:date>2008-05-31T00:30:00-08:00</dc:date>
    </item>

    <item>
      <title>The Future of the Web</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/the_future_of_the_web/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/the_future_of_the_web/#When:20:30:01Z</guid>
      <description>My WebVisions name badge. Click to view on Flickr

WebVisions is a local conference for web professionals that&#8217;s been going on for a number of years. This year was the first year that I had heard of it, and I was very excited that it was right here in Portland. This year&#8217;s topic was about the &#8220;future of the web&#8221;, and there was a lot of great talks around this topic. I just want to take a few minutes to go over a few cool things I learned and thought about.FUTURE OF INTERACTION
There was a lot of talk about interaction design at WebVisions, but one of the most notable presentations was about multi&#45;touch and gestural interfaces. After seeing this presentation, it really helped me realize how close we are to fully gesture&#45;based interfaces.


Right now the way we interact with devices is really strange. It doesn&#8217;t reflect our interactions with physical objects very well. A mouse and keyboard are not going to be around forever.


We are starting to see gesture&#45;based devices in the marketplace, and while they are still brand new, the technology is getting better and better and someday these devices will be common&#45;place.

FUTURE OF IDENTITY
Identity is a big issue on the web. We&#8217;ve been trained into this strange system of signing up with every single site and replicating the same information over and over. Think of how many accounts for websites you have. While it may not seem like a big deal to remember usernames and passwords for every site, why should we have to settle for such a hacked&#45;up solution?


	Enter OpenID. Actually, not just OpenID, but a whole host of technologies that are going to revolutionize the web (OAuth, and DiSo for example). In the real world we don&#8217;t have &#8220;accounts&#8221; that we create at every store before purchasing things. If someone needs to check our identity, they look at our drivers license or passport (trusted sources of identity). If we need to pay, we simply hand them a card from our wallet (trusted sources of financial data). On the web, we need a central protocol for identification, and that&#8217;s what OpenID is. It&#8217;s also important to distinguish that no one &#8220;owns&#8221; OpenID, which is what makes it work. If everyone stored their information with one specific entity (a la Passport), that entity would have too much power.


	There&#8217;s lots that will likely happen in the next few years to revolutionize this technology. It&#8217;s still brand&#45;new, and has not matured fully yet (which spurs most of the complaints) but there will come a day when this technology is sorted out, and it just works. Feel free to comment with (or without) OpenID on this blog.

FUTURE OF MEDIA
Lynne Johnson from FastCompany spoke about the future of print media, something that I&#8217;ve been thinking a lot about lately. While her views on it are a little different than mine, I think we both agree that the places we go to get our media are changing dramatically.


	I first became aware of this concept as I worked in different coffee shops and observed the older generation reading newspapers. It made me think about how rarely I see people in my generation (or even my parents&#8217; generations) reading a newspaper. Then, I realized the only time I ever read any news is from the internet. It really seems wasteful now to print newspaper. Printing millions of copies of the news for one day, when it&#8217;s only going to be discarded (hopefully recycled) at the end of the day. It can be argued that the design quality of the daily news is usually not very high either, because the amount of time spent on the design and layout is very limited.


	Where Lynne and I disagree is in the medium of books. She believes that this shift from print to digital includes books as well, and I think that books are likely to be preserved in some way or another. Books are prized by loyal readers, and the amount of time that has gone into the design, typesetting and printing of books is a fine quality that cannot be appreciated in a digital format.


	There is also a huge issue with the technology. There is no device that I currently feel comfortable reading for long periods of time with. The soothing qualities of books are not at all realized with devices. I have a few ebooks stored on my computer, and I just cannot bring myself to read them. Even with devices like the Kindle, books just don&#8217;t feel the same, and I still find it hard to read them.


	I can see &#8220;pulp fiction&#8221;, and other smaller, cheaper books moving to a digital format, where the format is shorter and the quality would not have been as high anyway, but I think we&#8217;ll always have some sort of printed books around.

WHERE IT&#8217;S ALL GOING
I can&#8217;t pretend to know everything about where we&#8217;re heading, but there are a lot of signs that we&#8217;re moving into a fundamental shift from learned computing behaviors to a more natural model that mimics how we interact in the physical world.


Only time will tell.</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /><p><a href="http://www.flickr.com/photos/pixelmatrix/2531476268/in/set-72157605201826236/" title="Name Badge by Josh Pyles, on Flickr"><img src="http://farm3.static.flickr.com/2408/2531476268_b25711ca37.jpg" width="500" height="375" alt="Name Badge" /></a></p>
<p class="caption">My WebVisions name badge. Click to view on Flickr</p>

<p><a href="http://webvisionsevent.com/" title="WebVisions">WebVisions</a> is a local conference for web professionals that&#8217;s been going on for a number of years. This year was the first year that I had heard of it, and I was very excited that it was right here in Portland. This year&#8217;s topic was about the &#8220;future of the web&#8221;, and there was a lot of great talks around this topic. I just want to take a few minutes to go over a few cool things I learned and thought about.</p> <h5>FUTURE OF INTERACTION</h5><p>
There was <em>a lot</em> of talk about interaction design at WebVisions, but one of the most notable presentations was about multi-touch and gestural interfaces. After seeing this presentation, it really helped me realize how close we are to <em>fully</em> gesture-based interfaces.
</p>
<p>
Right now the way we interact with devices is really strange. It doesn&#8217;t reflect our interactions with physical objects very well. A mouse and keyboard are not going to be around forever.
</p>
<p>
We are starting to see gesture-based devices in the marketplace, and while they are still brand new, the technology is getting better and better and someday these devices will be common-place.
</p>
<h5>FUTURE OF IDENTITY</h5><p>
Identity is a <em>big</em> issue on the web. We&#8217;ve been trained into this <em>strange</em> system of signing up with every single site and replicating the same information over and over. Think of how many accounts for websites you have. While it may not seem like a big deal to remember usernames and passwords for every site, why should we have to settle for such a hacked-up solution?
</p>
<p>
	Enter <a href="http://openid.net" title="OpenID">OpenID</a>. Actually, not <em>just</em> OpenID, but a whole host of technologies that are going to revolutionize the web (<a href="http://oauth.net/" title="OAuth">OAuth</a>, and <a href="http://diso-project.org/blog/" title="DiSo">DiSo</a> for example). In the real world we don&#8217;t have <em>&#8220;accounts&#8221;</em> that we create at every store before purchasing things. If someone needs to check our identity, they look at our drivers license <em>or</em> passport (trusted sources of identity). If we need to pay, we simply hand them a card from our wallet (trusted sources of financial data). On the web, we need a central protocol for identification, and that&#8217;s what OpenID is. It&#8217;s also important to distinguish that <em>no one &#8220;owns&#8221; OpenID</em>, which is what makes it work. If everyone stored their information with one specific entity (a la Passport), that entity would have too much power.
</p>
<p>
	There&#8217;s lots that will likely happen in the next few years to revolutionize this technology. It&#8217;s still <em>brand-new</em>, and has not matured <em>fully</em> yet (which spurs most of the complaints) but there will come a day when this technology is sorted out, and <em>it just works</em>. Feel free to comment with (or without) OpenID on this blog.
</p>
<h5>FUTURE OF MEDIA</h5><p>
<a href="http://www.lynnedjohnson.com/" title="Lynne Johnson">Lynne Johnson</a> from <a href="http://www.fastcompany.com/" title="FastCompany">FastCompany</a> spoke about the future of print media, something that I&#8217;ve been thinking a lot about lately. While her views on it are <em>a little different</em> than mine, I think we both agree that the places we go to get our media are changing <em>dramatically</em>.
</p>
<p>
	I first became aware of this concept as I worked in different coffee shops and observed the older generation reading newspapers. It made me think about how <em>rarely</em> I see people in my generation (or even my parents&#8217; generations) reading a newspaper. Then, I realized the only time I ever read any news is from the internet. It really seems wasteful now to print newspaper. Printing <em>millions</em> of copies of the news for one day, when it&#8217;s only going to be discarded (hopefully recycled) at the end of the day. It can be argued that the <em>design quality</em> of the daily news is usually not very high either, because the amount of time spent on the design and layout is very limited.
</p>
<p>
	Where Lynne and I disagree is in the medium of books. She believes that this shift from print to digital <em>includes</em> books as well, and I think that books are <em>likely to be preserved</em> in some way or another. Books are <em>prized</em> by loyal readers, and the amount of time that has gone into the design, typesetting and printing of books is a fine quality that <em>cannot be appreciated</em> in a digital format.
</p>
<p>
	There is also a <em>huge</em> issue with the technology. There is no device that I currently feel comfortable reading for long periods of time with. The soothing qualities of books are <em>not at all</em> realized with devices. I have a few ebooks stored on my computer, and I just cannot bring myself to read them. Even with devices like the Kindle, books just don&#8217;t feel the same, and I still find it hard to read them.
</p>
<p>
	I can see &#8220;pulp fiction&#8221;, and other smaller, cheaper books moving to a digital format, where the format is shorter and the quality would not have been as high anyway, but I think we&#8217;ll always have some sort of printed books around.
</p>
<h5>WHERE IT&#8217;S ALL GOING</h5><p>
I can&#8217;t pretend to know everything about where we&#8217;re heading, but there are a lot of signs that we&#8217;re moving into a fundamental shift from learned computing behaviors to a <em>more natural</em> model that mimics how we interact in the physical world.
</p>
<p>
Only time will tell.
</p> ]]>
</content:encoded>
      <dc:subject>conferences and travel</dc:subject>
      <dc:date>2008-05-29T20:30:01-08:00</dc:date>
    </item>

    <item>
      <title>Quick Tip: Opacity</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/quick_tip_opacity/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/quick_tip_opacity/#When:23:00:00Z</guid>
      <description>Did you know that while using the Move Tool (V) in Photoshop, you can press 1&#45;0 on your keyboard to control the opacity of the current layer?


1 = 10%, 2 = 20%, 0 = 100%, etc&#8230;. 


If you&#8217;re fast enough you can even type a specific number (like 23) and it will assign that opacity to the layer.


Thought i&#8217;d share this tip for anyone who doesn&#8217;t know.</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /> <p>Did you know that while using the Move Tool (V) in Photoshop, you can press 1-0 on your keyboard to control the opacity of the current layer?
</p>
<p>
1 = 10%, 2 = 20%, 0 = 100%, etc&#8230;. 
</p>
<p>
If you&#8217;re fast enough you can even type a specific number (like 23) and it will assign that opacity to the layer.
</p>
<p>
Thought i&#8217;d share this tip for anyone who doesn&#8217;t know.
</p> ]]>
</content:encoded>
      <dc:subject>tips and tricks</dc:subject>
      <dc:date>2008-05-27T23:00:00-08:00</dc:date>
    </item>

    <item>
      <title>Making beautiful, Apple&#45;style screenshot layouts</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/making_beautiful_apple_style_screenshot_layouts/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/making_beautiful_apple_style_screenshot_layouts/#When:22:53:00Z</guid>
      <description>As promised, here&#8217;s a walkthrough on the process that Michael Sigler and I came up with for making smooth screenshot layouts that are non&#45;destructive. It takes a bit of work, but it pays off with some amazingly beautiful screenshots.
Getting Started
You will need:


Photoshop CS2 or higher
Illustrator CS2 or higher
A few screenshots of your product
Patience
Basic Photoshop skills

If you don&#8217;t have a screenshot to play with, you can use these example screenshots:

Download example_screenshots.zipZIP Format, 360 kb

Now that we&#8217;ve got all our tools, make sure you&#8217;ve got both Illustrator and Photoshop open, and let&#8217;s dig in.

Prepping the screenshots in Photoshop


Masking out the the shadow and stroke from the original screenshot.

Open up both of your screenshots in Photoshop. We&#8217;re assuming you want your screenshots to be smaller in your design than what they are currently. I recommend taking a screenshot on a Mac with Command&#45;Shift&#45;4, hitting spacebar, and capturing the full window. Either way you do it, you&#8217;ll want to mask out the shadow, and background from your screenshot so you just have your window on a transparent background.

Important: There is usually a 1px stroke around the window that will really cause problems unless you mask it out of your screenshot image. You can add this back in the final step as a layer style.

Creating the layout in Illustrator

Here&#8217;s where we mix things up. Illustrator has some pretty powerful 3D effects that let you rotate objects in perspective, and change the values later on without destroying your work.


Placing the screenshots into Illustrator

First, create a canvas that&#8217;s roughly twice the size of the desired end result. Place your screenshots into Illustrator at full size (File &amp;rarr; Place&#8230;) and make sure that you check the &#8220;Link&#8221; box.


Example canvas with both screenshots at twice the size I want them. Click to view full sized.

Then, shrink down your screenshot to roughly twice the size you want it at (Zoom out to 50% to get an idea of what size it will be).


Setting up the 3D rotate effect

Next, lets apply some 3D effects. Go to Effect &amp;rarr; 3D &amp;rarr; Rotate&#8230;. You can use whatever settings make sense for you. You&#8217;re going to want to set the X and Z axis&#8217; to 0&#186;, and play with the Y axis, and Perspective values. It takes a lot of playing around to find the right angle for your screenshots.

Here are the settings I used for my example:
X: 0&#186; | Y: 30&#186; | Z: 0&#186; | Perspective: 25&#186;

To test the settings you&#8217;re playing with, you can turn on the Preview. Once you have your settings perfect, press OK, and repeat the process for your other screenshots.

Hint: To make screenshots face opposite directions, just change the Y value of one of them to a negative number and leave all the other settings the same.

Arrange your screenshots how you want them to get a good idea of how it will look.

Back to Photoshop again

Now, it&#8217;s time to put everything together in Photoshop and apply some nice effects. Create a new document that&#8217;s the size you&#8217;ll be using these screenshots at, or use an existing document you&#8217;ve got open (like a website design).



Copy your screenshots one at a time from Illustrator by selecting the screenshot, pressing Command&#45;C, and pasting (Command&#45;V ) it into your Photoshop document. 

You should be asked how you want to paste it in. Select &#8220;Pixels&#8221; for best results.

Once you&#8217;ve got your screenshots in (remember, they should be about twice the size you want to use them at), apply the filter &#8220;Unsharp Mask&#8221; (Filter &amp;rarr; Sharpen &amp;rarr; Unsharp Mask) to each of your screenshot layers. This helps the screenshots to be more readable.


The settings I used to sharpen the screenshots with Unsharp Mask

Then, select both of your screenshot layers and shrink them down to size. Pay attention to the toolbar where it says what size you&#8217;re shrinking it to in case you want to paste these in again in the future.


My screenshots shrunk down and aligned

Important: You&#8217;ll only want to resize these once because each resize you make blurs the layer more.

Finally, style these however you like. I suggest adding a 1px, black, ~10% transparent stroke to give it some definition, adding a very faint gradient in screen mode to give it some shading, adding surface and cast shadows, and reflections.


The final screenshot layout. Click to view larger.

You can download my sample PSD to see how I applied these effects into a complete screenshot layout.

Download example_layout.zipZIP Format, 1020 kb

If there is enough interest I may post a second part on how to style these screenshots. Let me know if that is something you&#8217;d like to see in the comments.</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /><p>As promised, here&#8217;s a walkthrough on the process that <a href="http://www.siglerdesign.com">Michael Sigler</a> and I came up with for making smooth screenshot layouts that are non-destructive. It takes a bit of work, but it pays off with some <a href="http://www.jivesoftware.com/products" title="amazingly">amazingly</a> <a href="http://www.jivesoftware.com/products/clearspace" title="beautiful">beautiful</a> <a href="http://www.jivesoftware.com/products/clearspace-community" title="screenshots">screenshots</a>.
</p> <h5>Getting Started</h5>
<p><strong>You will need:</strong></p>

<ul>
<li>Photoshop <abbr>CS2</abbr> or higher</li>
<li>Illustrator <abbr>CS2</abbr> or higher</li>
<li>A few screenshots of your product</li>
<li>Patience</li>
<li>Basic Photoshop skills</li>
</ul>
<p><em>If you don&#8217;t have a screenshot to play with, you can use these example screenshots:</em></p>

<div class="download"><a href="http://www.pixelmatrixdesign.com/images/weblog/example_screenshots.zip" class="filetype zip" title="Download example_screenshots.zip">Download example_screenshots.zip</a><p>ZIP Format, 360 kb</p></div>

<p>Now that we&#8217;ve got all our tools, make sure you&#8217;ve got <em>both</em> Illustrator and Photoshop open, and let&#8217;s dig in.</p>

<h5>Prepping the screenshots in Photoshop</h5>

<p><img src="http://www.pixelmatrixdesign.com/images/weblog/screenshots_step1.png" alt="Masking out the the shadow and stroke from the original screenshot." /></p>
<p class="caption">Masking out the the shadow and stroke from the original screenshot.</p>

<p>Open up both of your screenshots in Photoshop. We&#8217;re assuming you want your screenshots to be smaller in your design than what they are currently. I recommend taking a screenshot on a Mac with <em>Command-Shift-4</em>, hitting spacebar, and capturing the full window. Either way you do it, you&#8217;ll want to mask out the shadow, and background from your screenshot so you just have your window on a transparent background.</p>

<p class="note"><strong>Important:</strong> There is usually a 1px stroke around the window that will really cause problems unless you mask it out of your screenshot image. You can add this back in the final step as a layer style.</p>

<h5>Creating the layout in Illustrator</h5>

<p>Here&#8217;s where we mix things up. Illustrator has some pretty powerful <abbr>3D</abbr> effects that let you rotate objects in perspective, and change the values later on without destroying your work.</p>

<p><img src="http://www.pixelmatrixdesign.com/images/weblog/screenshots_step2.png" alt="Placing the screenshots into Illustrator" /></p>
<p class="caption">Placing the screenshots into Illustrator</p>

<p>First, create a canvas that&#8217;s roughly twice the size of the desired end result. Place your screenshots into Illustrator at full size (File &rarr; Place&#8230;) and make sure that you check the &#8220;Link&#8221; box.</p>

<p><a href="http://www.pixelmatrixdesign.com/images/weblog/screenshots_step3.png" class="thickbox" title="Example canvas with both screenshots at twice the size I want them."><img src="http://www.pixelmatrixdesign.com/images/weblog/screenshots_step3_thumb.png" alt="Example canvas with both screenshots at twice the size I want them" /></a></p>
<p class="caption">Example canvas with both screenshots at twice the size I want them. Click to view full sized.</p>

<p>Then, shrink down your screenshot to roughly twice the size you want it at (Zoom out to 50% to get an idea of what size it will be).</p>

<p><img src="http://www.pixelmatrixdesign.com/images/weblog/screenshots_step4.png" alt="Setting up the 3D rotate effect" /></p>
<p class="caption">Setting up the 3D rotate effect</p>

<p>Next, lets apply some <abbr>3D</abbr> effects. Go to Effect &rarr; <abbr>3D</abbr> &rarr; Rotate&#8230;. You can use whatever settings make sense for you. You&#8217;re going to want to set the X and Z axis&#8217; to 0&#186;, and play with the Y axis, and Perspective values. It takes a lot of playing around to find the right angle for your screenshots.</p>

<p><strong>Here are the settings I used for my example:</strong></p>
<p><strong>X:</strong> 0&#186; | <strong>Y:</strong> 30&#186; | <strong>Z:</strong> 0&#186; | <strong>Perspective:</strong> 25&#186;</p>

<p>To test the settings you&#8217;re playing with, you can turn on the Preview. Once you have your settings perfect, press OK, and repeat the process for your other screenshots.</p>

<p class="note"><strong>Hint:</strong> To make screenshots face opposite directions, just change the Y value of one of them to a negative number and leave all the other settings the same.</p>

<p>Arrange your screenshots how you want them to get a good idea of how it will look.</p>

<h5>Back to Photoshop again</h5>

<p>Now, it&#8217;s time to put everything together in Photoshop and apply some nice effects. Create a new document that&#8217;s the size you&#8217;ll be using these screenshots at, or use an existing document you&#8217;ve got open (like a website design).</p>

<p style="float:right; margin-left: 1.5em;" ><img src="http://www.pixelmatrixdesign.com/images/weblog/screenshots_step5.png" alt="Paste options" /></p>

<p>Copy your screenshots <em>one at a time</em> from Illustrator by selecting the screenshot, pressing <em>Command-C</em>, and pasting (<em>Command-V</em> ) it into your Photoshop document.</p> 

<p>You should be asked how you want to paste it in. Select &#8220;Pixels&#8221; for best results.</p>

<p>Once you&#8217;ve got your screenshots in (remember, they should be about twice the size you want to use them at), apply the filter &#8220;Unsharp Mask&#8221; (Filter &rarr; Sharpen &rarr; Unsharp Mask) to each of your screenshot layers. This helps the screenshots to be more readable.</p>

<p><img src="http://www.pixelmatrixdesign.com/images/weblog/screenshots_step6.png" alt="The settings I used to sharpen the screenshots with Unsharp Mask" /></p>
<p class="caption">The settings I used to sharpen the screenshots with Unsharp Mask</p>

<p>Then, select both of your screenshot layers and shrink them down to size. Pay attention to the toolbar where it says what size you&#8217;re shrinking it to in case you want to paste these in again in the future.</p>

<p><img src="http://www.pixelmatrixdesign.com/images/weblog/screenshots_step7.png" alt="My screenshots shrunk down and aligned" /></p>
<p class="caption">My screenshots shrunk down and aligned</p>

<p class="note"><strong>Important:</strong> You&#8217;ll only want to resize these once because each resize you make blurs the layer more.</p>

<p>Finally, style these however you like. I suggest adding a 1px, black, ~10% transparent stroke to give it some definition, adding a very faint gradient in screen mode to give it some shading, adding surface and cast shadows, and reflections.</p>

<p><a href="http://www.pixelmatrixdesign.com/images/weblog/screenshots_final.png" class="thickbox" title="The final screenshot layout"><img src="http://www.pixelmatrixdesign.com/images/weblog/screenshots_final_thumb.png" alt="The final screenshot layout" /></a></p>
<p class="caption">The final screenshot layout. Click to view larger.</p>

<p>You can download my sample <abbr>PSD</abbr> to see how I applied these effects into a complete screenshot layout.</p>

<div class="download"><a href="http://www.pixelmatrixdesign.com/images/weblog/example_layout.zip" class="filetype zip" title="Download example_layout.zip">Download example_layout.zip</a><p>ZIP Format, 1020 kb</p></div>

<p>If there is enough interest I may post a second part on how to style these screenshots. Let me know if that is something you&#8217;d like to see in the comments.</p> ]]>
</content:encoded>
      <dc:subject>tips and tricks</dc:subject>
      <dc:date>2008-05-16T22:53:00-08:00</dc:date>
    </item>

    <item>
      <title>Filling layers with mask</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/filling_layers_with_mask/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/filling_layers_with_mask/#When:18:56:00Z</guid>
      <description>Lets say you want to simply change the fill color of a layer in Photoshop from white to black. The typical process is not very effective:

Load the selection for the layer you want to change (option click on the layer)
Make sure you have the correct color in the foreground
Hit Option&#45;Delete to fill it with the foreground

Not only is this a slow process, but it also does not respect the transparency mask, leaving pixels that used to be 25% transparent to be 50% transparent now.


Fortunately there is a quick and easy method that does respect the transparency of your layer, and it&#8217;s also a lot quicker:


Simply select the layer you want to change colors for, make sure you&#8217;ve got the new color in the foreground and hit: Option&#45;Shift&#45;Delete. This tip also works for shape layers and text layers as well!


Thanks to Brian Zeitler for teaching me this trick a while back!</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /> <p>Lets say you want to simply change the fill color of a layer in Photoshop from white to black. The typical process is not very effective:
<br />
<ol><li>Load the selection for the layer you want to change (option click on the layer)</li>
<li>Make sure you have the correct color in the foreground</li>
<li>Hit Option-Delete to fill it with the foreground</li></ol>
<br />
Not only is this a slow process, but it also <em>does not</em> respect the transparency mask, leaving pixels that used to be 25% transparent to be 50% transparent now.
</p>
<p>
Fortunately there is a <em>quick</em> and <em>easy</em> method that <em>does</em> respect the transparency of your layer, and it&#8217;s also <em>a lot</em> quicker:
</p>
<p>
Simply select the layer you want to change colors for, make sure you&#8217;ve got the new color in the foreground and hit: Option-<strong>Shift</strong>-Delete. This tip also works for shape layers and text layers as well!
</p>
<p>
Thanks to <a href="http://www.pixelnetdesign.com/">Brian Zeitler</a> for teaching me this trick a while back!
</p> ]]>
</content:encoded>
      <dc:subject>tips and tricks</dc:subject>
      <dc:date>2008-05-12T18:56:00-08:00</dc:date>
    </item>

    <item>
      <title>Pixelmatrix Book Review</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/pixelmatrix_book_review/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/pixelmatrix_book_review/#When:17:24:01Z</guid>
      <description>I realized that I have read a bunch of great books lately and haven&#8217;t posted anything about them! I try to constantly be increasing my knowledge of design and the web by reading books, and I think these reviews might be helpful if you&#8217;re looking for a book to check out. I will try to make these reviews a semi&#45;regular occurrence. Without any further ado, here&#8217;s my take on two books i&#8217;ve read lately.
Designing the Obvious by Robert Hoekman Jr.

Designing the Obvious walks you through several techniques and principals to designing obvious interactions in your applications. As a UI geek myself, I really enjoy thinking about these sorts of challenges. Robert walks us through several different areas of UI / interaction design, including tips on how to plan out complicated interfaces. I really enjoyed his points on how to get users from being beginners to intermediates very quickly. If you are designing web applications, this book is a must read!

Check it out on Amazon &amp;rarr;
Robert Hoekman Jr&#8217;s website &amp;rarr;

Bulletproof Web Design by Dan Cederholm

While I&#8217;m sure many of my readers have already read this book, I have to recommend it to anyone who hasn&#8217;t. Never before have I cared so passionately about semantic code than after I read Dan Cederholm&#8217;s Bulletproof Web Design. Dan walks us through several examples of common website elements that are typically not bulletproof (meaning, indestructible). This book took me from a semantic code enthusiast to a semantic code evangelist! If you&#8217;re learning web design, or web development, this book is an absolute must read. The book is easy to read, and very nicely designed as well. It includes several examples and walks you through every step of the way. You won&#8217;t regret reading this book.

Check it out on Amazon &amp;rarr;
Dan Cederholm&#8217;s website &amp;rarr;</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /><p>I realized that I have read a bunch of great books lately and haven&#8217;t posted anything about them! I try to constantly be increasing my knowledge of design and the web by reading books, and I think these reviews might be helpful if you&#8217;re looking for a book to check out. I will try to make these reviews a semi-regular occurrence. Without any further ado, here&#8217;s my take on two books i&#8217;ve read lately.
</p> <h3>Designing the Obvious <span class="smaller">by Robert Hoekman Jr.</span></h3>
<img src="http://www.pixelmatrixdesign.com/images/weblog/book_designingobvious.jpg" alt="Designing the Obvious" style="float: right; margin-top: 1em; margin-bottom: 2em; margin-left: 2em;" />
<p>Designing the Obvious walks you through several techniques and principals to designing <em>obvious</em> interactions in your applications. As a UI geek myself, I really enjoy thinking about these sorts of challenges. Robert walks us through several different areas of UI / interaction design, including tips on how to plan out complicated interfaces. I really enjoyed his points on how to get users from being beginners to intermediates very quickly. If you are designing web applications, this book is a <strong>must read!</strong></p>

<p><a href="http://www.amazon.com/Designing-Obvious-Common-Approach-Application/dp/032145345X/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210009741&sr=8-1">Check it out on Amazon &rarr;</a><br/>
<a href="http://rhjr.net">Robert Hoekman Jr&#8217;s website &rarr;</a></p>

<h3>Bulletproof Web Design <span class="smaller">by Dan Cederholm</span></h3>
<img src="http://www.pixelmatrixdesign.com/images/weblog/book_bulletproof.jpg" alt="Bulletproof Web Design" style="float: right; margin-top: 1em; margin-bottom: 2em; margin-left: 2em;" />
<p>While I&#8217;m sure many of my readers have already read this book, I have to recommend it to anyone who hasn&#8217;t. Never before have I cared <em>so passionately</em> about semantic code than after I read Dan Cederholm&#8217;s Bulletproof Web Design. Dan walks us through several examples of common website elements that are typically <em>not</em> bulletproof (meaning, indestructible). This book took me from a semantic code enthusiast to a semantic code <em>evangelist!</em> If you&#8217;re learning web design, or web development, this book is an absolute must read. The book is easy to read, and very nicely designed as well. It includes several examples and walks you through every step of the way. You <em>won&#8217;t</em> regret reading this book.</p>

<p><a href="http://www.amazon.com/Bulletproof-Web-Design-flexibility-protecting/dp/0321509021/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1210009839&sr=1-1">Check it out on Amazon &rarr;</a><br/>
<a href="http://simplebits.com">Dan Cederholm&#8217;s website &rarr;</a></p> ]]>
</content:encoded>
      <dc:subject>what i&apos;m reading</dc:subject>
      <dc:date>2008-05-05T17:24:01-08:00</dc:date>
    </item>

    <item>
      <title>Inline Editing Controls in Expression Engine</title>
      <link>http://pixelmatrixdesign.com/weblog/comments/inline_editing_controls_in_expression_engine/</link>
      <guid>http://pixelmatrixdesign.com/weblog/comments/inline_editing_controls_in_expression_engine/#When:02:59:00Z</guid>
      <description>This is another post about interfacing with the control panel in Expression Engine and a number of people have requested it after my previous post (Creating an Admin Bar for Expression Engine).


It&#8217;s actually not too complicated. I&#8217;ll help you get set&#45;up with some syntax for the blog homepage and your blog comments page. Let&#8217;s get started.
Skip to syntax &amp;rarr;

First things first
In order to just show this to our Super Admin&#8217;s we need to get the logged_in_group_id variable that tells us what group the currently logged in user is in. You may remember we used a similar variable (group_id) in the previous example for the admin bar. Since we&#8217;re going to use this variable within other tags (the weblog:entries, and comment:entries tags) we need to specify that we want to learn about the logged in user.

Linking to the CP
Next, we need to figure out our link syntax. The control panel uses a pretty simple syntax that isn&#8217;t really documented anywhere, but easy to learn.


To edit a specific post, we need this URL:


/(name of your system folder)/index.php?C=edit&amp;amp;M=edit_entry&amp;amp;weblog_id=(weblog_id of the entry)&amp;amp;entry_id=(entry_id for the post)


To close a specific comment, we need this URL:


/(name of your system folder)/index.php?C=edit&amp;amp;M=change_status&amp;amp;weblog_id=(weblog_id of the entry)&amp;amp;entry_id=(entry_id for the post)&amp;amp;comment_id=(id of the comment you&#8217;re closing)&amp;amp;status=close

Generating the URL
Lastly, we need to find the variables to give us these URLs. Here&#8217;s what you&#8217;ll actually be using for your links.


For &#8220;Edit this post&#8221;:


&#123;weblog_id&#125; &#45; get the id of the weblog for the current post
&#123;entry_id&#125; &#45; get the entry id of the current post


For &#8220;Close this comment&#8221;:


&#123;weblog_id&#125; &#45; get the id of the weblog for the current post
&#123;entry_id&#125; &#45; get the entry id of the current post
&#123;comment_id&#125; &#45; get the id of the current comment


Final Syntax
Now let&#8217;s put it all together!


Edit this entry example:


&#123;exp:weblog:entries&#125;


&amp;hellip;


&#123;if logged_in_group_id == 1&#125;


&amp;lt;a href=&quot;/system/index.php?C=edit&amp;amp;M=edit_entry&amp;amp;weblog_id=&#123;weblog_id&#125;&amp;amp;entry_id=&#123;entry_id&#125;&quot;&amp;gt;Edit this entry&amp;lt;/a&amp;gt;


&#123;/if&#125;


&amp;hellip;


&#123;/exp:weblog:entries&#125;



Close this comment example:


&#123;exp:comment:entries&#125;


&amp;hellip;


&#123;if logged_in_group_id == 1&#125;


&amp;lt;a href=&quot;/system/index.php?C=edit&amp;amp;M=change_status&amp;amp;weblog_id=&#123;weblog_id&#125;&amp;amp;entry_id=&#123;entry_id&#125;&amp;amp;

comment_id=&#123;comment_id&#125;&amp;amp;status=close&quot;&amp;gt;Close comment&amp;lt;/a&amp;gt;


&#123;/if&#125;


&amp;hellip;


&#123;/exp:comment:entries&#125;



Make your own
The possibilities of inline editing are nearly infinite. To create your own custom solutions, here&#8217;s what I recommend.


Visit the area that you want to link to in the control panel
Analyze the URL of where you are in the CP
Determine which variables in the URL need to be filled in dynamically
Search the documentation for the variable you need. Hint: the CP&#8217;s variables are typically the same variable names you&#8217;ll use to generate the content (weblog_id = &#123;weblog_id&#125;).
Add conditionals that you need to limit access to these links. Generally, logged_in_group_id is what you&#8217;ll use, but there may be other functionality you need.
Assemble your URL and test it on an obscure page or a test template. If it works how you need it to, then push it live.


I hope this helps anyone who is looking to interface inline with the Expression Engine&#8217;s control panel. Leave your thoughts, comments, suggestions, and conspiracy theories in the comments below.</description>
<content:encoded>
<![CDATA[<img src="" align="left" style="margin: 10px;" /><p>This is another post about interfacing with the control panel in <a href="http://expressionengine.com/">Expression Engine</a> and a number of people have requested it after my previous post (<a href="http://pixelmatrixdesign.com/blog/comments/creating_an_admin_bar_for_expression_engine/">Creating an Admin Bar for Expression Engine</a>).
</p>
<p>
It&#8217;s actually not too complicated. I&#8217;ll help you get set-up with some syntax for the blog homepage and your blog comments page. Let&#8217;s get started.
</p> <p><a href="#syntax">Skip to syntax &rarr;</a>
</p>
<h3>First things first</h3><p>
In order to just show this to our Super Admin&#8217;s we need to get the <var>logged_in_group_id</var> variable that tells us what group the currently logged in user is in. You may remember we used a similar variable (<var>group_id</var>) in the previous example for the admin bar. Since we&#8217;re going to use this variable within other tags (the <var>weblog:entries</var>, and <var>comment:entries</var> tags) we need to specify that we want to learn about the <em>logged in</em> user.
</p>
<h3>Linking to the CP</h3><p>
Next, we need to figure out our link syntax. The control panel uses a pretty simple syntax that isn&#8217;t really documented anywhere, but easy to learn.
</p>
<p>
<strong>To edit a specific post, we need this <abbr>URL</abbr>:</strong>
</p>
<p>
<var>/(name of your system folder)/index.php?C=edit&amp;M=edit_entry&amp;weblog_id=(weblog_id of the entry)&amp;entry_id=(entry_id for the post)</var>
</p>
<p>
<strong>To close a specific comment, we need this <abbr>URL</abbr>:</strong>
</p>
<p>
<var>/(name of your system folder)/index.php?C=edit&amp;M=change_status&amp;weblog_id=(weblog_id of the entry)&amp;entry_id=(entry_id for the post)&amp;comment_id=(id of the comment you&#8217;re closing)&amp;status=close</var>
</p>
<h3>Generating the URL</h3><p>
Lastly, we need to find the variables to give us these URLs. Here&#8217;s what you&#8217;ll actually be using for your links.
</p>
<p>
<strong>For &#8220;Edit this post&#8221;:</strong>
<br />
<ul>
<li><var>&#123;weblog_id&#125;</var> - get the id of the weblog for the current post</li>
<li><var>&#123;entry_id&#125;</var> - get the entry id of the current post</li>
</ul>
<p>
<strong>For &#8220;Close this comment&#8221;:</strong>
<br />
<ul>
<li><var>&#123;weblog_id&#125;</var> - get the id of the weblog for the current post</li>
<li><var>&#123;entry_id&#125;</var> - get the entry id of the current post</li>
<li><var>&#123;comment_id&#125;</var> - get the id of the current comment</li>
</ul>
<p>
</p><h3 id="syntax">Final Syntax</h3><p>
Now let&#8217;s put it all together!
</p>
<p>
<strong>Edit this entry example:</strong>
</p>
<code><p>
&#123;exp:weblog:entries&#125;
</p>
<p>
&hellip;
</p>
<p>
&#123;if logged_in_group_id == 1&#125;
</p>
<p>
&lt;a href="/system/index.php?C=edit&amp;M=edit_entry&amp;weblog_id=&#123;weblog_id&#125;&amp;entry_id=&#123;entry_id&#125;"&gt;Edit this entry&lt;/a&gt;
</p>
<p>
&#123;/if&#125;
</p>
<p>
&hellip;
</p>
<p>
&#123;/exp:weblog:entries&#125;
<br />
</p></code>
<p>
<strong>Close this comment example:</strong>
</p>
<code><p>
&#123;exp:comment:entries&#125;
</p>
<p>
&hellip;
</p>
<p>
&#123;if logged_in_group_id == 1&#125;
</p>
<p>
&lt;a href="/system/index.php?C=edit&amp;M=change_status&amp;weblog_id=&#123;weblog_id&#125;&amp;entry_id=&#123;entry_id&#125;&amp;
<br />
comment_id=&#123;comment_id&#125;&amp;status=close"&gt;Close comment&lt;/a&gt;
</p>
<p>
&#123;/if&#125;
</p>
<p>
&hellip;
</p>
<p>
&#123;/exp:comment:entries&#125;
<br />
</p></code>
<p>
</p><h3>Make your own</h3><p>
The possibilities of inline editing are nearly infinite. To create your own custom solutions, here&#8217;s what I recommend.
<br />
<ol>
<li>Visit the area that you want to link to in the control panel</li>
<li>Analyze the <abbr>URL</abbr> of where you are in the CP</li>
<li>Determine which variables in the <abbr>URL</abbr> need to be filled in dynamically</li>
<li>Search the documentation for the variable you need. <em>Hint: the CP&#8217;s variables are typically the same variable names you&#8217;ll use to generate the content (weblog_id = <var>&#123;weblog_id&#125;</var>).</em></li>
<li>Add conditionals that you need to limit access to these links. Generally, <var>logged_in_group_id</var> is what you&#8217;ll use, but there may be other functionality you need.</li>
<li>Assemble your <abbr>URL</abbr> and test it on an obscure page or a test template. If it works how you need it to, then push it live.</li>
</ol>
<br />
I hope this helps anyone who is looking to interface inline with the Expression Engine&#8217;s control panel. Leave your thoughts, comments, suggestions, and conspiracy theories in the comments below.
<br />

</p> ]]>
</content:encoded>
      <dc:subject>expression engine, tips and tricks</dc:subject>
      <dc:date>2008-04-30T02:59:00-08:00</dc:date>
    </item>

    
    </channel>
</rss>