<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11804845</id><updated>2012-02-18T09:34:23.696-05:00</updated><category term='seo'/><category term='google docs'/><category term='mail'/><category term='iphone'/><category term='energy'/><category term='content management'/><category term='diy'/><category term='innovation'/><category term='technical writing'/><category term='design'/><category term='advertising'/><category term='search engine optimization'/><category term='social media'/><category term='magnolia'/><category term='usability'/><category term='taxonomy'/><title type='text'>Finnotype</title><subtitle type='html'>Information architecture and user-centered technology</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11804845.post-6818169849448672498</id><published>2012-01-25T04:40:00.001-05:00</published><updated>2012-01-25T04:50:16.044-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>iPhone ate my mail</title><content type='html'>Deleted mail was mysteriously disappearing from my email account. I could not find anything older than one week.&amp;nbsp;The culprit turned out to be iPhone. I use it to read the same account. A well-hidden setting removed deleted messages.&lt;br /&gt;&lt;br /&gt;To check your iPhone:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to &lt;b&gt;Settings &amp;gt; Mail, Contacts, Calendars&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Select the account from which deleted messages are disappearing.&lt;/li&gt;&lt;li&gt;Go to &lt;b&gt;Account Info &amp;gt; Advanced&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Under &lt;b&gt;Deleted Messages&lt;/b&gt;, change &lt;b&gt;Remove&lt;/b&gt; to &lt;b&gt;Never&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Go back to &lt;b&gt;Advanced&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Go back to &lt;b&gt;Account Info&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Click &lt;b&gt;Done&lt;/b&gt;. This is important to save the setting!&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-MdFZ5jlYAiI/Tx_K-v2zTGI/AAAAAAAAHE8/gWquPTohfQc/s1600/iphone.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/-MdFZ5jlYAiI/Tx_K-v2zTGI/AAAAAAAAHE8/gWquPTohfQc/s400/iphone.png" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;My removal interval was set to &lt;b&gt;After one week&lt;/b&gt;. Gotcha!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-6818169849448672498?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/6818169849448672498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=6818169849448672498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/6818169849448672498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/6818169849448672498'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2012/01/iphone-ate-my-mail.html' title='iPhone ate my mail'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-MdFZ5jlYAiI/Tx_K-v2zTGI/AAAAAAAAHE8/gWquPTohfQc/s72-c/iphone.png' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>Basle, Switzerland</georss:featurename><georss:point>47.557421 7.5925727</georss:point><georss:box>47.5145585 7.5136087 47.600283499999996 7.6715367</georss:box></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-4039063085424692306</id><published>2012-01-17T08:13:00.000-05:00</published><updated>2012-01-23T04:34:10.873-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technical writing'/><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Picnik for collaborative screenshots</title><content type='html'>&lt;b&gt;Update!&lt;/b&gt; Picnik &lt;a href="http://blog.picnik.com/2012/01/official-announcement-picnik-is-closing/"&gt;is closing on April 19, 2012&lt;/a&gt;. &amp;nbsp;This is sad news. I really liked working with the product. Please sign the&amp;nbsp;&lt;a href="http://signon.org/sign/dont-close-picnik"&gt;Don't Close Picnik petition&lt;/a&gt;! A subset of Picnik features is available in the Google+ Creative Kit but, crucially, the Photo Bucket is not. This means that the custom circles and arrows we use to annotate images are gone.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;At Magnolia, we recently started using &lt;a href="http://www.picnik.com/"&gt;Picnik&lt;/a&gt;&amp;nbsp;to annotate screenshots.&amp;nbsp;We wanted a casual but obvious way to draw the reader's attention to an image detail. In this post I explain why we chose Picnik and how it is working so far.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-xtuC31XRDQw/TxVHE6fOreI/AAAAAAAAHDg/kEtomOe-hDU/s1600/AdminCentral-search-box.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-xtuC31XRDQw/TxVHE6fOreI/AAAAAAAAHDg/kEtomOe-hDU/s1600/AdminCentral-search-box.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Picnik is a photo editor that runs in the browser. You may have seen it as the embedded photo editor in Picasa Web Albums.&amp;nbsp;The requirements that drove us to a Web-based tool were:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;No OS lock-in&lt;/b&gt;. We have technical writers working on Windows 7, Vista and Mac OSX. It is difficult to find a screenshot tool that works on all those platforms. &lt;a href="http://skitch.com/"&gt;Skitch&lt;/a&gt;&amp;nbsp;is awesome on the Mac but&amp;nbsp;a Windows version is&amp;nbsp;&lt;a href="http://techie-buzz.com/annoucements/skitch-now-free-for-all-users-coming-soon-to-a-all-platforms.html"&gt;still only hearsay&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Consistent annotations.&lt;/b&gt;&amp;nbsp;Annotations are the circles and arrows we add to screenshots to draw the reader's attention to whatever it is we write about. While any screenshot tool can take a plain screenshot, adding consistent annotation shapes is difficult unless everybody uses the same tool. Documentation ends up looking amateurish and poor if the shapes are not consistent.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Casual, hand-drawn look&lt;/b&gt;. We wanted a casual, edgy look. Straight lines and rectangles are difficult to see on a UI that already has lots of straight lines. They also look incredibly boring. If you annotated something on a piece of paper, you would grab a pen and circle it. &lt;i&gt;That's&lt;/i&gt; the look we wanted.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Shared storage&lt;/b&gt;. Web-based tools promise cloud storage. Why should everybody take the same screenshot when a perfectly good example exists in a shared library? Why draw your own arrows with a shaky mouse if there's a nice-looking arrow in the toolbox?&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;I must emphasize that Picnik really isn't a screenshoot tool. It's a photo editor whose features are clearly geared towards processing photos. It's great for assembling favorite shots into a Christmas card but for taking a screenshot you still need a local tool, which is fine for us.&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;Picnik features we love and curse&lt;/h2&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Uploading&lt;/b&gt; an image is a snap. The image is opened in the editor immediately so no unnecessary browsing is needed.&amp;nbsp;Besides upload, you can open an image from Flickr, Facebook and several other popular services.&amp;nbsp;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-OO0-D5PBPA8/Tw2Oqy9mOfI/AAAAAAAAHCk/NVCOs1N196Y/s1600/upload.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-OO0-D5PBPA8/Tw2Oqy9mOfI/AAAAAAAAHCk/NVCOs1N196Y/s1600/upload.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Resizing&lt;/b&gt; to new dimensions works as expected. The quality of the reduced image is not as good as if you used Photoshop. The image is fuzzier, which can be a problem. Text in a screenshot must stay sharp and readable in smaller size too. To get around the issue, we either crop to the relevant area or keep the shot full-size. Modern browsers do a very good job at resizing in the viewport, certainly no worse than Picnik.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-AViu0-Gz5DA/Tw2aQOQ1DfI/AAAAAAAAHCs/cQR_cK6OifE/s1600/resize.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-AViu0-Gz5DA/Tw2aQOQ1DfI/AAAAAAAAHCs/cQR_cK6OifE/s1600/resize.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Canvas&lt;/b&gt; as a concept&amp;nbsp;does not exist as in Picnik. When you need more room around the image, add a border. The border can be any color and width. Make it white and you effectively have a bigger canvas.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Dsfe-nKS-bk/Tw2worzgwjI/AAAAAAAAHC0/RLTvm0mulo4/s1600/border.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-Dsfe-nKS-bk/Tw2worzgwjI/AAAAAAAAHC0/RLTvm0mulo4/s1600/border.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Shapes&lt;/b&gt;. I drew a collection of annotation shapes by hand in Skitch and saved them as PNG files. Then I uploaded them into a Picasa Web Album that is visible in&amp;nbsp;the Photo Basket in Picnik. Now anybody in the team can drag-and-drop symbols onto an image. This solves the requirement that all writers use the same symbols to produce a consistent look and feel.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-sgnt1Q0IBA8/TxVyk0ak2II/AAAAAAAAHEI/qecJM9Qa3Nk/s1600/photo-basket-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-sgnt1Q0IBA8/TxVyk0ak2II/AAAAAAAAHEI/qecJM9Qa3Nk/s1600/photo-basket-3.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Text&lt;/b&gt;. Picnik has a huge variety of fonts to choose from. They are very hip and cool, which means they are perfect for a scary Halloween photo but not so great when you need readable text. We chose a font called &lt;i&gt;Just Me Again Down Here&lt;/i&gt; by Kimberly Geswein. It's a good compromise between hand-drawn look and readability. We matched the font size to the shape stroke width.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-WHnHTDNfvxU/TxVy2TFW6rI/AAAAAAAAHEQ/_ZnZju4rY2E/s1600/text-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-WHnHTDNfvxU/TxVy2TFW6rI/AAAAAAAAHEQ/_ZnZju4rY2E/s1600/text-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Sharing&amp;nbsp;and layers&lt;/b&gt; are my biggest grievance with Picnik. I&amp;nbsp;&lt;a href="https://groups.google.com/a/googleproductforums.com/forum/#!topic/picnik/0ya28aWCebc/discussion"&gt;asked on the help forum&lt;/a&gt;&amp;nbsp;why sharing is so weird. Bottom line: edits are stored on the image owner's Picnik account and are not accessible to other users. This means that while you can save an image to a Picasa Web Album, other team members won't be able to edit it. The image is flat to them. This is a shame because picking up from where another use left would be fantastic. As for the shapes, we put them in a common Picasa account which all technical writers register in their Picnik. So at least the shapes are available to everyone.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;So there you have it. Picnik works for us now. Drop a comment if you solved similar requirements in your team with something else.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-4039063085424692306?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/4039063085424692306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=4039063085424692306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/4039063085424692306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/4039063085424692306'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2012/01/picnik-for-collaborative-screenshots.html' title='Picnik for collaborative screenshots'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-xtuC31XRDQw/TxVHE6fOreI/AAAAAAAAHDg/kEtomOe-hDU/s72-c/AdminCentral-search-box.png' height='72' width='72'/><thr:total>0</thr:total><georss:featurename>Basle, Switzerland</georss:featurename><georss:point>47.557421 7.5925727</georss:point><georss:box>47.5145585 7.5136087 47.600283499999996 7.6715367</georss:box></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-4682955276519059390</id><published>2012-01-16T09:32:00.000-05:00</published><updated>2012-01-16T09:32:42.566-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Twitter-style character counter for textareas</title><content type='html'>In this post I show how to improve textarea usability with a Twitter-style character counter.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s1600/counter-complete.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s1600/counter-complete.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Validating form input length is a common strategy for reducing errors. So common in fact that&amp;nbsp;the&amp;nbsp;&lt;a href="http://reference.sitepoint.com/html/input/maxlength"&gt;HTML specification&lt;/a&gt;&amp;nbsp;provides&amp;nbsp;a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;maxlength&lt;/span&gt; attribute&amp;nbsp;for &lt;span class="Apple-style-span" style="font-family: inherit;"&gt;input&lt;/span&gt; fields. Starting with&amp;nbsp;&lt;a href="http://www.w3schools.com/html5/att_textarea_maxlength.asp"&gt;HTML5&lt;/a&gt;, multiline&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;textarea&lt;/span&gt; fields support the attribute too!&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;textarea id="message" rows=4 maxlength="100"&amp;nbsp;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Since it is always better to &lt;b&gt;prevent&lt;/b&gt; an error than catch one the user already made, here are two ways to improve textarea usability in &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt;, making sure the user knows how many characters are allowed.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Display the character limit&lt;/h2&gt;The obvious improvement is to display the character limit. In Magnolia CMS, you set the limit on the form field. The system saves it to a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;maxLength&lt;/span&gt; property in the repository.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-GQvhwWDy8vw/Tw1Owk4tElI/AAAAAAAAHBM/nhh4OCm5hTI/s1600/input-dialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="305" src="http://1.bp.blogspot.com/-GQvhwWDy8vw/Tw1Owk4tElI/AAAAAAAAHBM/nhh4OCm5hTI/s400/input-dialog.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Render the length on the page:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copy the &lt;a href="http://svn.magnolia-cms.com/svn/community/modules/magnolia-module-form/tags/magnolia-module-form-1.3.1/src/main/resources/form/paragraphs/formEdit.ftl"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;formEdit.ftl&lt;/span&gt;&lt;/a&gt;&amp;nbsp;script which renders input controls.&lt;/li&gt;&lt;li&gt;Create folder&amp;nbsp;&lt;b&gt;Templating Kit &amp;gt; Templates&lt;/b&gt;&amp;nbsp;&amp;gt;&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/form/paragraphs&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Create a new template script&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;formEdit&lt;/span&gt; and paste the copied script into it.&lt;/li&gt;&lt;li&gt;Render the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;maxLength&lt;/span&gt; property in the textarea element on line 21.&lt;/li&gt;&lt;li&gt;Render it visibly to the user:&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;${content.maxLength!'50'}&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Enable the script and refresh the&amp;nbsp;&lt;a href="http://demo.magnolia-cms.com/demo-project/service/contact.html"&gt;Contact form&lt;/a&gt;&amp;nbsp;page.&lt;/li&gt;&lt;/ol&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-iXHV8mR8RNw/Tw12s483VWI/AAAAAAAAHCM/BP13fZqFWBU/s1600/maxlength-rendered.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-iXHV8mR8RNw/Tw12s483VWI/AAAAAAAAHCM/BP13fZqFWBU/s1600/maxlength-rendered.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Twitter-style character counter&lt;/h2&gt;How does the user know they are approaching the limit? &lt;a href="http://cssglobe.com/post/7161/jquery-plugin-simplest-twitterlike-dynamic-character-count-for-textareas"&gt;jQuery Charcount plugin&lt;/a&gt;&amp;nbsp;adds a Twitter-style character counter. As the user types text, the plugin counts unused characters. When a limit is exceeded, the counter turns red.&lt;br /&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Start by &lt;a href="http://cssglobe.com/lab/charcount/charcount.zip"&gt;downloading&lt;/a&gt; the jQuery Charcount plugin kit:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;jQuery.js&lt;/b&gt; is the core jQuery script. Magnolia CMS already has it.&lt;/li&gt;&lt;li&gt;&lt;b&gt;charCount.js&lt;/b&gt;&amp;nbsp;counts the characters and draws the counter.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;CSS styles&lt;/b&gt;&amp;nbsp;sets the alarm color.&lt;/li&gt;&lt;li&gt;&lt;b&gt;01.html&lt;/b&gt;&amp;nbsp;is an example page.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;&lt;b&gt;Step 1: Add the Charcount script as a resource&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to &lt;b&gt;Templating Kit &amp;gt; Resources &amp;gt;&lt;/b&gt; &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/templating-kit/js/all&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Under &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;all&lt;/span&gt;, add a new JavaScript resource&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;In the &lt;b&gt;Advanced&lt;/b&gt; tab, set &lt;b&gt;Extension&lt;/b&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;js&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Paste the downloaded charCount.js script into the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt; item.&lt;/li&gt;&lt;li&gt;Change line 35 to read the textarea ID from the element:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;var available = $(obj).attr('maxlength') - count;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Step 2: Warn when 10 characters are left&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Copy the document.ready function from the example&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;01.html&lt;/span&gt; file.&lt;/li&gt;&lt;li&gt;Paste it in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt; script before the closing &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;})(jQuery);&lt;/span&gt; line.&lt;/li&gt;&lt;li&gt;Change &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;#message2&lt;/span&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;textarea&lt;/span&gt;. We are getting the IDs dynamically.&lt;/li&gt;&lt;li&gt;Set the warning to 10.&lt;/li&gt;&lt;/ol&gt;The end of your script should now look like this:&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; $(document).ready(function(){ &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; //custom usage&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; $("textarea").charCount({&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; warning: 10&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; counterText: 'Characters left: ' &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; });&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; }); &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;})(jQuery);&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Step 3: Make the counter red on warning&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/templating-kit/themes/pop/css&lt;/span&gt;, create a new sheet &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;On the &lt;b&gt;Advanced&lt;/b&gt; tab, set &lt;b&gt;Extension&lt;/b&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;css&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Set &lt;b&gt;Model Class&lt;/b&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;info.magnolia.module.templatingkit.resources.STKResourceModel&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Paste the following style in the &lt;b&gt;Content&lt;/b&gt; box:&lt;/li&gt;&lt;/ol&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.form-wrapper div span.warning {&lt;/span&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;color:red;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;font-weight:bold; !important&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Step 4: Include the new style in the theme&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;In&amp;nbsp;&lt;b&gt;Templating Kit &amp;gt; Themes &amp;gt;&lt;/b&gt; &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/pop/cssFiles&lt;/span&gt;, copy &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;styles&lt;/span&gt;&amp;nbsp;to&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;charCount&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Set &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;link&lt;/span&gt; property to&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/resources/templating-kit/themes/pop/css/charCount.css&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;Step 5: Try it!&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Reload the &lt;a href="http://demo.magnolia-cms.com/demo-project/service/contact.html"&gt;Contact&lt;/a&gt; page. Now the page has a counter that starts counting back from the limit.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ndG4ZzAK8OM/TxQbTFYrUSI/AAAAAAAAHDY/tZu_zyBb5YA/s1600/counter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-ndG4ZzAK8OM/TxQbTFYrUSI/AAAAAAAAHDY/tZu_zyBb5YA/s1600/counter.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Type some text into the box. When 10 characters are left, the counter turns red.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s1600/counter-complete.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s1600/counter-complete.png" style="cursor: move;" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-4682955276519059390?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/4682955276519059390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=4682955276519059390' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/4682955276519059390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/4682955276519059390'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/12/twitter-style-character-counter-for.html' title='Twitter-style character counter for textareas'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-x_OyCcXAVpc/TxQTSvDezsI/AAAAAAAAHDA/92VW0VmmtdE/s72-c/counter-complete.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-7090790916966443446</id><published>2011-07-20T14:39:00.001-04:00</published><updated>2011-07-20T14:59:55.107-04:00</updated><title type='text'>Are patents invisible art?</title><content type='html'>&lt;a href="http://www.npr.org/blogs/thetwo-way/2011/07/19/138513048/woman-pays-10-000-for-non-visible-work-of-art"&gt;NPR reported&lt;/a&gt; about a woman who paid $10,000 for a non-visible work of art:&lt;br /&gt;&lt;blockquote&gt;...the idea of the [Museum of Non-Visible Art] is that the works of art don't exist physically, instead they are imagined by the artist. So when you purchase the "work of art" you get a "card" to hang on an empty wall and you "describe it to your audience. Amazingly, the museum just made one big sale. A woman paid $10,000 for a piece titled Fresh Air.&lt;/blockquote&gt;When asked why she bought the non-visible piece, the woman explained:&lt;br /&gt;&lt;blockquote&gt;As a new media producer, I was inspired by the [artist's] sentence, "We exchange ideas and dreams as currency in the New Economy." I felt that the act of purchasing "Fresh Air" supported my thesis about a concept I term "you-commerce," which is the marketing and monetization of one's persona, skills, and products via the use of social media and self-broadcasting platforms.&lt;/blockquote&gt;Sounds crazy, eh? Why would anyone pay money for art they cannot see? I mean, it is not even a &lt;i&gt;sketch &lt;/i&gt;of an eventual visible piece. Just an idea in the artist's mind. She must have been off her rocker!&lt;br /&gt;&lt;br /&gt;But wait. Is it really that remarkable? Companies pay money for mere ideas all the time.&amp;nbsp;They buy rights to products just to keep them off the market. Drug makers file patents just to sit on them so competitors don't develop competing drugs.&lt;br /&gt;&lt;br /&gt;Last week we heard about an auction where Apple, RIM, Ericsson, EMC, Microsoft and Sony bought 6,000 patents and patent applications from&amp;nbsp;bankrupt Canadian telecom giant Nortel. The patents&amp;nbsp;cover wireless, Internet search and social-networking technologies. The winning bid was $4.5 billion.&lt;br /&gt;&lt;br /&gt;What do winners plan to do with the patents? Not sure.&amp;nbsp;&lt;a href="http://www.marketwatch.com/story/nortel-sale-is-biggest-in-booming-patent-market-2011-06-27"&gt;According to Dow Jones&lt;/a&gt; they "stock up their arsenals for raging legal battles over smartphones, Web advertising and &lt;i&gt;whatever comes next&lt;/i&gt; in the multitrillion-dollar technology wars."&lt;br /&gt;&lt;br /&gt;Which is crazier: $10k for fresh air or $4.5 billion for whatever comes next?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-7090790916966443446?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/7090790916966443446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=7090790916966443446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7090790916966443446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7090790916966443446'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/07/are-patents-invisible-art.html' title='Are patents invisible art?'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-7071480644012847057</id><published>2011-04-05T15:30:00.001-04:00</published><updated>2011-04-05T15:34:45.007-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><title type='text'>Coupons with Imaging module</title><content type='html'>In this post I show you how to create coupons using the &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html"&gt;Magnolia Imaging module&lt;/a&gt;. I start with a background image and overlay the special promotion text. Campaign specific details are managed in the Data module while static text is configured in the Imaging module.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s1600/finished-coupon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s1600/finished-coupon.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Let's start by registering an &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#Imagegenerator"&gt;image generator&lt;/a&gt;. For this purpose I use the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ImageOperationChain&lt;/span&gt; generator since it allows me to execute multiple image operations one after the other. My image operation chain will be called &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;coupon&lt;/span&gt; and it outputs PNG files.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-iqRybtjwpg8/TZsHRmWmUDI/AAAAAAAAGZI/Eu6zXD0fcSE/s1600/coupon-1-generator.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-iqRybtjwpg8/TZsHRmWmUDI/AAAAAAAAGZI/Eu6zXD0fcSE/s1600/coupon-1-generator.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The first image operation in the chain, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;loadImage&lt;/span&gt;, loads a background graphic. I am using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#Loadingimagefromclasspath"&gt;ClassPathImageLoader&lt;/a&gt;&lt;/span&gt; class which can retrieve an image from the classpath. (You can also load from &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#LoadinganimagefromDMSworkspace"&gt;DMS&lt;/a&gt;, &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#Loadinganimagefromwebsiteworkspace"&gt;website &lt;/a&gt;or &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#LoadinganimagefromURL"&gt;external URL&lt;/a&gt;.) By default, a Magnolia webapp's classpath includes any JARs in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/WEB-INF/lib&lt;/span&gt; and any classes and resources in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/WEB-INF/classes&lt;/span&gt;. I copied my background graphic into the latter and named it &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;coupon.png&lt;/span&gt;. Here's the operation configuration.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-PZRtZefbtpM/TZsLsNUTycI/AAAAAAAAGZM/OzMMXRGP2bs/s1600/operation-loadImage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-PZRtZefbtpM/TZsLsNUTycI/AAAAAAAAGZM/OzMMXRGP2bs/s1600/operation-loadImage.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When I request the image I need to pass an existing page in the URL. This is how the parameter provider factory works. I can see the image at &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://&amp;lt;host&amp;gt;/&amp;lt;instance&amp;gt;/.imaging/coupon/website.png&lt;/span&gt;. This is a Christmas coupon with some red lights and space for text below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-I7FyqHCsU3o/TZrrmJrqmQI/AAAAAAAAGY0/EeGXpYv1GpY/s1600/coupon.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-I7FyqHCsU3o/TZrrmJrqmQI/AAAAAAAAGY0/EeGXpYv1GpY/s1600/coupon.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Campaign management in Data module&lt;/h2&gt;For managing the campaigns I created a custom data type in the &lt;a href="http://documentation.magnolia-cms.com/modules/data.html"&gt;Data module&lt;/a&gt;. The campaign entry dialog allows editors to enter a discount percentage, product and validity period. I entered a Christmas campaign that offers 25% discount on a single in-store product.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-pDX-NXKCrOk/TZsNyy8XPwI/AAAAAAAAGZQ/ydDeV2Zxyic/s1600/dialog-campaign.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-pDX-NXKCrOk/TZsNyy8XPwI/AAAAAAAAGZQ/ydDeV2Zxyic/s1600/dialog-campaign.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The Data module stores the information in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;data&lt;/span&gt; workspace. The discount percentage, for example, is stored in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/campaign/Christmas/percentage&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Text overlay&lt;/h2&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;TextFromNode&lt;/span&gt; class can retrieve content from any workspace and overlay it on top of the image. In the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;percentage&lt;/span&gt; operation I fetch the discount percentage from the Data module. I need to pass the workspace name and path in the request URL, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://&amp;lt;host&amp;gt;/&amp;lt;instance&amp;gt;/.imaging/coupon/data/campaign/Christmas.png&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;percentSymbol&lt;/span&gt; operation overlays the % symbol using the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;FixedText&lt;/span&gt; class. The symbol is given in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;text&lt;/span&gt; property. This works fine for static strings that don't change often. See &lt;a href="http://documentation.magnolia-cms.com/modules/imaging.html#Textoverlay"&gt;Text overlay&lt;/a&gt; to learn about the nodes and valid values.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Yth4gEKuHY4/TZsYLK5EdRI/AAAAAAAAGZU/9oqxB-3_CdI/s1600/operation-percentage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-Yth4gEKuHY4/TZsYLK5EdRI/AAAAAAAAGZU/9oqxB-3_CdI/s1600/operation-percentage.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I added the text "off" also as fixed text and requested the image. Here's what is looks like at this point.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-kyy6N4WGNnk/TZsZybyBk9I/AAAAAAAAGZY/-5tNNIcm56o/s1600/coupon-3-percentage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-kyy6N4WGNnk/TZsZybyBk9I/AAAAAAAAGZY/-5tNNIcm56o/s1600/coupon-3-percentage.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Adding the product description, validity period and legal disclaimers works in a similar fashion. Changing typeface, font size and positioning I was able to make the design more interesting. Here's the final result.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s1600/finished-coupon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s1600/finished-coupon.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;When the next campaign kicks in, all you need to do is ask your graphic designer for a new background image and create a campaign data item in the Data module.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-C_2E_r2Cm08/TZtn4zeFVYI/AAAAAAAAGZc/VGxiOAbzEMc/s1600/Winter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-C_2E_r2Cm08/TZtn4zeFVYI/AAAAAAAAGZc/VGxiOAbzEMc/s1600/Winter.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Background image credit: &lt;a href="http://www.flickr.com/photos/macalicious/2094567877/"&gt;George Deputee&lt;/a&gt; and &lt;a href="http://www.flickr.com/photos/juliancolton/5360064817/"&gt;Juliancolton2 &lt;/a&gt;on Flickr.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-7071480644012847057?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/7071480644012847057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=7071480644012847057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7071480644012847057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7071480644012847057'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/04/coupons-with-imaging-module.html' title='Coupons with Imaging module'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-rlczkGneh_A/TZrr6JZQexI/AAAAAAAAGY4/D_hlhkHaZ7U/s72-c/finished-coupon.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-7216073080802532120</id><published>2011-03-31T04:14:00.002-04:00</published><updated>2011-03-31T04:39:56.167-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='taxonomy'/><title type='text'>Controlling AdminCentral access</title><content type='html'>AdminCentral is a Magnolia CMS user interface where administrators and editors work. In this post I show how to configure menu permissions for a custom user role.&lt;br /&gt;&lt;br /&gt;AdminCentral provides menus for common tasks. When you click a menu, workable items are displayed on the right.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_0bFzyM0mvs/TZQl7WILoqI/AAAAAAAAGYc/uY_Q-T-tNL8/s1600/AC-menus-440.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-_0bFzyM0mvs/TZQl7WILoqI/AAAAAAAAGYc/uY_Q-T-tNL8/s1600/AC-menus-440.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;You can hide menus and move them around to promote often-used items or deny permission to items that users should not be able to access. Magnolia CMS ships with typical roles such as superuser, editor and publisher. While a superuser can see everything, editors only see items that are relevant to their job.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;h2&gt;Permissions for custom roles&lt;/h2&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Suppose your organization has a very specialized editor role,&amp;nbsp;Category Editor,&amp;nbsp;who is responsible for maintaining a&amp;nbsp;taxonomy of categories. Categories are tags that help site visitors find related, interesting content.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Categories are managed in a custom data type under the &lt;b&gt;Data&lt;/b&gt; menu.&amp;nbsp;The&amp;nbsp;&lt;a href="http://demoauthor.magnolia-cms.com/.magnolia/pages/adminCentral.html"&gt;demo-project website&lt;/a&gt;&amp;nbsp;has&amp;nbsp;an example taxonomy consisting of categories such as Culture, Family and Finance. The Category Editor needs access to the &lt;b&gt;Data &amp;gt; Category&lt;/b&gt; menu only.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-usRrumOi8vI/TZQmE6ytWSI/AAAAAAAAGYg/5u8MHfQ1x8M/s1600/Category-menu-440.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-usRrumOi8vI/TZQmE6ytWSI/AAAAAAAAGYg/5u8MHfQ1x8M/s1600/Category-menu-440.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;You can approach setting permissions for this role in two ways:&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Top down&lt;/b&gt;: Start with a more powerful editor role and remove permissions until only the ability to edit categories is left.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Bottom up&lt;/b&gt;: Start with zero permissions and keep adding until the Category Editor can do their job.&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Magnolia CMS ships with a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;demo-project-base&lt;/span&gt; role that provides many basic permissions common to all users. It's a good starting point so let's choose the first option: top down.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;h2&gt;Create category-editor role&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;Create new role &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;category-editor&lt;/span&gt;&amp;nbsp;and new&amp;nbsp;user &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;jsmith&lt;/span&gt;.&amp;nbsp;Assign roles &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;demo-project-base&lt;/span&gt; and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;category-editor&lt;/span&gt;&amp;nbsp;to user &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;jsmith&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now open another browser instance and sign in as &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;jsmith&lt;/span&gt;. You should see three menus: &lt;b&gt;Website&lt;/b&gt;, &lt;b&gt;Documents &lt;/b&gt;and &lt;b&gt;Data&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CM__Gdlx7bQ/TZQnhFfz8TI/AAAAAAAAGYo/krsHprUSC6o/s1600/Category-too-many-440.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-CM__Gdlx7bQ/TZQnhFfz8TI/AAAAAAAAGYo/krsHprUSC6o/s1600/Category-too-many-440.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;The Category Editor doesn't need the first two menus or the &lt;b&gt;Contact&lt;/b&gt; submenu so let's remove them.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Hide menus&lt;/h2&gt;Edit the&amp;nbsp;&lt;a href="http://documentation.magnolia-cms.com/administration/security/accesscontrollists.html"&gt;access control lists (ACL)&lt;/a&gt;&amp;nbsp;attached to the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;category-editor&lt;/span&gt; role. Deny access to the following nodes in the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;config&lt;/span&gt;&amp;nbsp;workspace:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/adminInterface/config/menu/website$&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/adminInterface/config/menu/dms$&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/adminInterface/config/menu/data/Contact$&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;The &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;demo-project-base&lt;/span&gt; role already grants access to the same nodes so you need to make the deny rules "win". If a user has multiple ACLs through role and group assignment that specifically list the requested resource, the ACL with the &lt;b&gt;longest pattern&lt;/b&gt; determines the permission. The order of the rules is not considered. This is a critical point. Use the &lt;a href="http://documentation.magnolia-cms.com/administration/security/accesscontrollists.html#Markingtheendofapath"&gt;dollar sign ($) to mark the end of the path&lt;/a&gt;, which makes the deny rule longer.&lt;br /&gt;&lt;br /&gt;Here's what the Category Editor sees after the ACLs have been applied. Menus are now perfect but the editor cannot edit the data items. Categories have a crossed-out pen icon to indicate this.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ug--ZsQXCn8/TZQmqr6pTMI/AAAAAAAAGYk/xPU0Pl5BIRs/s1600/Category-uneditable-440.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-ug--ZsQXCn8/TZQmqr6pTMI/AAAAAAAAGYk/xPU0Pl5BIRs/s1600/Category-uneditable-440.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h2&gt;Grant access to data&lt;/h2&gt;&lt;/div&gt;&lt;div&gt;Add an ACL in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;data&lt;/span&gt; workspace that grants Read/Write permission to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/categorization&lt;/span&gt; node. Now the items are editable.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-XDcE_HL74Bw/TZQpC0w1vsI/AAAAAAAAGYs/PF4tt2d4rAg/s1600/Category-editable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-XDcE_HL74Bw/TZQpC0w1vsI/AAAAAAAAGYs/PF4tt2d4rAg/s1600/Category-editable.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Lock the backdoor!&lt;/h2&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Menus are not the only way to access content in AdminCentral. They just provide convenient access to often-used items. If you are restricting access per security, not just for convenience, make sure you lock down the content too:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Workspaces&lt;/b&gt; store the actual content. Make sure that any role you choose as a basis does not grant access to a workspace that users should not be able to access. In our example the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;demo-project-base&lt;/span&gt; role does not grant any unnecessary workspace permissions. You can control workspace access with an ACL. Select the workspace from the &lt;a href="http://documentation.magnolia-cms.com/administration/security/accesscontrollists.html#ACLstructure"&gt;controlled space dropdown&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Trees&lt;/b&gt; are customized views into specific data.&amp;nbsp;Users can view trees with a direct URL if they know the name of the tree, for example &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://[host]/[instance]/.magnolia&lt;span class="Apple-style-span" style="color: #3d85c6;"&gt;/trees/website&lt;/span&gt;&lt;/span&gt;. Each module can register its own trees. Look in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/adminInterface/trees&lt;/span&gt;&amp;nbsp;to get an idea. As long as you restrict permissions to workspaces correctly, trees will honor the permissions. &amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Pages&lt;/b&gt; provide specialized tools such as exporting, importing and querying.&amp;nbsp;Users can access pages with a direct URL too:&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://[host]/[instance]/.magnolia&lt;span class="Apple-style-span" style="color: #3d85c6;"&gt;/pages/jcrUtils&lt;/span&gt;&lt;/span&gt;. Like in trees, content cannot be accessed through pages as long as the workspace is locked down.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-7216073080802532120?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/7216073080802532120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=7216073080802532120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7216073080802532120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7216073080802532120'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/03/controlling-admincentral-access.html' title='Controlling AdminCentral access'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-_0bFzyM0mvs/TZQl7WILoqI/AAAAAAAAGYc/uY_Q-T-tNL8/s72-c/AC-menus-440.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-6240605082020526932</id><published>2011-03-18T04:11:00.002-04:00</published><updated>2011-03-31T04:41:40.358-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='taxonomy'/><title type='text'>Category cloud with images</title><content type='html'>This post was inspired by &lt;a href="http://old.nabble.com/Category-cloud-with-image-td31154527.html"&gt;Amit Patel's question&lt;/a&gt;&amp;nbsp;on how to add images in a Magnolia category cloud. Thanks Amit!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;What is a tag cloud?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Tags are words or short phrases that describe content such as articles or photos.&amp;nbsp;A tag cloud is a weighted lists of those tags displayed as a group where popular tags are given more visual weight than less popular tags. The visual weight is accomplished by making popular tags larger or bolder.&lt;br /&gt;&lt;br /&gt;Here's a tag cloud from&amp;nbsp;&lt;a href="http://www.flickr.com/photos/tags/"&gt;Flickr&lt;/a&gt;&amp;nbsp;with&amp;nbsp;tags that people use on their&amp;nbsp;photos.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-fF1J5g5sGoo/TYMRAXX59rI/AAAAAAAAGVU/82HAMGHeZHw/s1600/flickr-1-1-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh6.googleusercontent.com/-fF1J5g5sGoo/TYMRAXX59rI/AAAAAAAAGVU/82HAMGHeZHw/s1600/flickr-1-1-2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Another cloud with&amp;nbsp;trending Twitter topics.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-YZ7a4pHTGhY/TYMRQ60eh7I/AAAAAAAAGVY/TGfwSxT8tC8/s1600/twitter+trend+cloud-1-1-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-YZ7a4pHTGhY/TYMRQ60eh7I/AAAAAAAAGVY/TGfwSxT8tC8/s1600/twitter+trend+cloud-1-1-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Magnolia category cloud&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Magnolia's category cloud paragraph has the same principle. Articles on a website are tagged with categories to make it easier to find related content. Categories can be displayed in a cloud just like tags. The Magnolia category cloud is an editorial paragraph rather than compiled automatically from popularity statistics. This means that editors can set the weights to promote categories that are hot to give a boost to active campaigns or new content, for example.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-Kg3NIOHjz7s/TYMReZaUXBI/AAAAAAAAGVc/NBh_TodX1IU/s1600/mgnl+cloud-1-1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-Kg3NIOHjz7s/TYMReZaUXBI/AAAAAAAAGVc/NBh_TodX1IU/s1600/mgnl+cloud-1-1.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Add an image control to Category dialog&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;The quickest way to add images to each category is to&amp;nbsp;copy the photo upload mechanism from the Contacts data type. Both Contacts and Categories are managed in the Data module so repurposing elements is a snap.&lt;br /&gt;&lt;br /&gt;Add an image control in Category dialog:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to &lt;b&gt;Data &amp;gt; Config (Dialogs)&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;Copy &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/data/dialogs/contact/personalTab/photo&lt;/span&gt; to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/modules/data/dialogs/category/mainTab&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Rename the copied node to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;icon&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Change the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;label&lt;/span&gt; to "Icon".&lt;/li&gt;&lt;/ol&gt;Now you can add images. Get some nifty icons from the Web and add them to your categories.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-PWIz2GopVyc/TYMHgHsOw5I/AAAAAAAAGVM/836_u3MxDBk/s1600/editing-finance.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="254" src="https://lh6.googleusercontent.com/-PWIz2GopVyc/TYMHgHsOw5I/AAAAAAAAGVM/836_u3MxDBk/s320/editing-finance.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Render images next to category labels&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Edit the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;categoryCloud.ftl&lt;/span&gt; paragraph script. It's in the Categorization module JAR. You can also test this out by creating a script in &lt;b&gt;Templating Kit &amp;gt; Templates&lt;/b&gt;&amp;nbsp;and referencing it from the paragraph definition instead.&lt;/li&gt;&lt;li&gt;Assign images to categories.&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:xml;toolbar:false;first-line:12;highlight:19"&gt;[#-- Assigns: Macro for Item iteration --]&lt;br /&gt;[#macro assignItemValues item]&lt;br /&gt;    [#-- Assigns: Get Content from List Item--]&lt;br /&gt;    [#assign itemName = item.@name]&lt;br /&gt;    [#assign itemDisplayName = item.displayName!itemName]&lt;br /&gt;    [#assign itemLevel = item.level]&lt;br /&gt;    [#assign itemLink = model.getCategoryLink(itemName)!]&lt;br /&gt;    [#assign itemIcon = item.icon!]&lt;br /&gt;[/#macro]&lt;/pre&gt;&lt;ol start="3"&gt;&lt;li&gt;Render the icons.&lt;/li&gt;&lt;/ol&gt;&lt;pre class="brush:xml;toolbar:false;first-line:35;highlight:[36,37,38]"&gt;&amp;lt;li class="${itemLevel}"&amp;gt;&lt;br /&gt;  [#if item.icon?exists]&lt;br /&gt;    &amp;lt;img src="${stk.createImageLink(itemIcon)}" /&amp;gt;&lt;br /&gt;  [/#if]&lt;br /&gt;    &amp;lt;a href="${itemLink}" &amp;gt;${itemDisplayName}&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;/pre&gt;&lt;br /&gt;To finish off, add a category cloud paragraph on the page and admire your handywork!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-ezoiOqpkcis/TYMR0fwEZZI/AAAAAAAAGVg/1THcedgm4Co/s1600/cloud+with+images.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh5.googleusercontent.com/-ezoiOqpkcis/TYMR0fwEZZI/AAAAAAAAGVg/1THcedgm4Co/s1600/cloud+with+images.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-6240605082020526932?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/6240605082020526932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=6240605082020526932' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/6240605082020526932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/6240605082020526932'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/03/category-cloud-with-images.html' title='Category cloud with images'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-fF1J5g5sGoo/TYMRAXX59rI/AAAAAAAAGVU/82HAMGHeZHw/s72-c/flickr-1-1-2.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-8487692715383779947</id><published>2011-02-02T06:18:00.000-05:00</published><updated>2011-02-02T06:18:24.951-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Link popularity</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at increasing your site's link popularity.&lt;br /&gt;&lt;br /&gt;Search engines place strong emphasis on your site’s link popularity. Links from external sites, especially highly ranked ones, increase your site's rank. The more links targeting your site from external sources the better.&lt;br /&gt;&lt;br /&gt;There are countless ways to build links and a comprehensive discussion on this is beyond the scope of this paper. Some ways that Magnolia can help to build incoming links are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;By developing a blog on an external domain to promote your main site. The Templating Kit allows you to &lt;a href="http://www.magnolia-cms.com/magnolia-cms/magnolia-4-4/previous-versions/magnolia-4-3/enterprise-multi-site-cms.html"&gt;manage multiple sites in a single instance&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A forthcoming &lt;a href="http://wiki.magnolia-cms.com/display/WIKI/Magnolia+Twigs+Module"&gt;social media module&lt;/a&gt; will facilitate effortless integration with social media networks that have become a must for success on the Web.&lt;/li&gt;&lt;li&gt;Social bookmarking provided in many Magnolia templates.&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-friendly-urls.html"&gt;Friendly URLs&lt;/a&gt; make creating external links intuitive and easy to create.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-8487692715383779947?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/8487692715383779947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=8487692715383779947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8487692715383779947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8487692715383779947'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/02/link-popularity.html' title='Link popularity'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-764723442421270307</id><published>2011-02-01T04:40:00.000-05:00</published><updated>2011-02-01T04:40:59.402-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Keywords in page titles and meta elements</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at inserting keywords in page titles and meta elements.&lt;br /&gt;&lt;br /&gt;Page titles are an extremely important SEO factor. Search engines give titles considerable algorithmic weight and use them as headings on search results. Titles should include keywords and, where appropriate, your company name for branding purposes:&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;title&amp;gt;Magnolia - Finance, Insurance &amp;amp; Banking&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Description meta elements on the other hand do not add much to page relevance, but should not be neglected:&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;meta name="description" content="Magnolia's largest group of Enterprise Edition customers is from the..."&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Their content often appears below the title in search results:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_973hkdpdddm_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="47" src="https://docs.google.com/File?id=dgdxt33q_973hkdpdddm_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The relevance of keywords stipulated in the keyword tag once had great impact, but this is no longer true. Actual page content is now far more relevant. Still, a keyword tag should be included:&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;meta name="keywords" content="Finance, Insurance, Banking"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Magnolia produces the title element from the page title automatically, so this aspect is never overlooked. Inserting keywords and descriptions is done in the page info dialog:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1031fr8jh5xd_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" src="https://docs.google.com/File?id=dgdxt33q_1031fr8jh5xd_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;These fields can be made mandatory with a simple configuration change in AdminCentral. If an editor fails to provide the description, page abstract is used automatically as a fallback. Authors don't need to fill the field to be SEO compliant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-764723442421270307?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/764723442421270307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=764723442421270307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/764723442421270307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/764723442421270307'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/02/keywords-in-page-titles-and-meta.html' title='Keywords in page titles and meta elements'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-8830182953941088160</id><published>2011-01-31T07:45:00.001-05:00</published><updated>2011-01-31T07:45:46.839-05:00</updated><title type='text'>Managing multi-language and multi-regional sites</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at managing multi-language and multi-regional sites.&lt;br /&gt;&lt;br /&gt;Multi-language sites offer content in multiple languages, and allow you to extend your reach to a global audience. Estimates are that 73% of web users do not speak fluent English. Regional sites target specific geographic locations, and normally have a country-specific domains such as .de, .co, or .uk.&lt;br /&gt;&lt;br /&gt;For multilingual sites, best practice is to ensure that your content appears in search results for the appropriate language:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use the targeted language consistently throughout the page. Render all content and navigation in that language.&lt;/li&gt;&lt;li&gt;Serve language-specific content at a separate URL. Use Unicode encoding.&lt;/li&gt;&lt;li&gt;Avoid cookies to display translated versions.&lt;/li&gt;&lt;li&gt;Avoid automated redirection based on the user's perceived language, as this could prevent a crawler from viewing all language variations.&lt;/li&gt;&lt;/ul&gt;For multi-regional sites, best practice is to ensure that your site appears in search results for the targeted country:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use a country-code top-level domain name such as .de or .cn. This is a strong indicator to users and search engines that the site is intended for a specific country.&lt;/li&gt;&lt;li&gt;Include local contact details, currency, and language in the site's content.&lt;/li&gt;&lt;li&gt;Host the site on a server within the targeted country.&lt;/li&gt;&lt;/ul&gt;You can manage multi-language and multi-regional sites in a single Magnolia instance, while adhering to all best practices. A multisite configuration ensures that language is used consistently across multilingual sites. Redirection based on user's perceived language is not used.&lt;br /&gt;&lt;br /&gt;Individual sites are configured in site definitions. In the example below, demo-project is a multi-lingual site that serves content in English and German, while demo-project-de is a site targeted at a German speaking audience only. Internationalization (i18n) configuration accommodates multiple languages. Both of these sites &lt;a href="http://documentation.magnolia-cms.com/technical-guide/configuration-mechanisms.html#Extending_configuration"&gt;extend&lt;/a&gt; the default site, inheriting common elements, facilitating rapid site deployment.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1027fkc3vmcj_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="282" src="https://docs.google.com/File?id=dgdxt33q_1027fkc3vmcj_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;A language selection dropdown allows editors to select the content authoring language:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_698cvkpwdw5_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" src="https://docs.google.com/File?id=dgdxt33q_698cvkpwdw5_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Since navigation is generated from content, links display in the correct language, provided the content is translated:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_972chtc4jpp_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://docs.google.com/File?id=dgdxt33q_972chtc4jpp_b" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_970fzrx6cc6_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://docs.google.com/File?id=dgdxt33q_970fzrx6cc6_b" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Where built-in precautions fail due to editor error, a fallback language can be used to ensure that at least some of the content is rendered.&lt;br /&gt;&lt;br /&gt;From SEO perspective, it is best when a crawler finds all language-specific content in one directory. Magnolia accomplishes this by injecting a language identifier in the URL.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Locale&lt;/th&gt;&lt;th&gt;URL&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Fallback language &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.example.com/article.html&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;German&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.example.com/&lt;b&gt;de&lt;/b&gt;/article.html&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;French&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.example.com/&lt;b&gt;fr&lt;/b&gt;/article.html&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Spanish&lt;/td&gt;&lt;td&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.example.com/&lt;b&gt;es&lt;/b&gt;/article.html&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;With domain name mapping, this can be easily changed to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;de&lt;/b&gt;.example.com/article.html&lt;/span&gt; if needed.&lt;br /&gt;&lt;br /&gt;Content can also be exported into a CSV or Excel file and handed to translators. Other export formats are pluggable and can be written to support custom formats. The exported file includes context information and a link back to the original content to facilitate translation. Translated content can be imported back into the system with the same mechanism.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-8830182953941088160?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/8830182953941088160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=8830182953941088160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8830182953941088160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8830182953941088160'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/managing-multi-language-and-multi.html' title='Managing multi-language and multi-regional sites'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-3123267825148904020</id><published>2011-01-28T03:48:00.000-05:00</published><updated>2011-01-28T03:48:20.766-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Optimizing images</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at optimizing images.&lt;br /&gt;&lt;br /&gt;Great images enhance your site visually and enhance SEO rankings, provided they are properly optimized. Google and other search engines offer image-specific searches. A high rank in these searches increases your visibility. Search engines cannot read the content of images, and therefore must rely on accompanying text and tags.&lt;br /&gt;&lt;br /&gt;Best practices include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Image &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;alt&lt;/span&gt; attributes with a short description of the image, for example.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Keyword-rich image file names. &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yellow-roses.jpg&lt;/span&gt; is far more descriptive and relevant than &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;img003.jpg&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Size and quality optimized for quick loading. Crisp, sharp images look better in thumbnails displayed in search results, and are more likely to be linked to by other webmasters.&lt;/li&gt;&lt;li&gt;Captions that aptly describe the image assist vision-impaired users.&lt;/li&gt;&lt;li&gt;Width and height specified in the element. Many browsers render a page before images are downloaded. When dimensions are provided, other page elements wrap around them correctly, improving the initial user experience.&lt;/li&gt;&lt;/ul&gt;Images can be stored in Magnolia's built-in document management system or uploaded at editing time. When the DMS is used, a two-phase failsafe mechanism ensures that alt tags, appropriate file names, and captions are included:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;At upload time, details such as image source, copyright, subject line and size are captured. The fields provided for this purpose in the DMS are based on the &lt;a href="http://dublincore.org/"&gt;Dublin Core Metadata Standard&lt;/a&gt;. If the original file name contains spaces, Magnolia replaces them with hyphens. In the event that an editor fails to include the information requested in the dialog, the source and subject-line are used as fallback.&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1030hk4kxsfz_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="https://docs.google.com/File?id=dgdxt33q_1030hk4kxsfz_b" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When inserting an image to a page, the information read from the DMS can be changed once again. If the fields are configured as mandatory, an editor cannot insert an image without providing suitable alt attribute and caption. This enforces best practice compliance.&lt;/li&gt;&lt;/ol&gt;As a result, the page template renders crawler-accessible HTML code:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_969hc34ssd2_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="296" src="https://docs.google.com/File?id=dgdxt33q_969hc34ssd2_b" width="478" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Magnolia Imaging module ensures that high-quality, web-optimized images are used uniformly throughout the site. The module generates multiple variants from a single source image, resulting in considerable time-savings for editors. Sizing and cropping happens automatically, based on CSS rules. Built-in filters that scale and crop images can also be used for effects such as text overlays, which allow crawlers to read image text. It is possible to configure a standard output format and resolution for all images, and control the behavior of images in each area of a template.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-3123267825148904020?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/3123267825148904020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=3123267825148904020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/3123267825148904020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/3123267825148904020'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/optimizing-images.html' title='Optimizing images'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-7393464055394431372</id><published>2011-01-26T03:17:00.002-05:00</published><updated>2011-01-26T03:38:08.078-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Redirecting traffic</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at redirecting traffic.&lt;br /&gt;&lt;br /&gt;Redirecting is the practice of sending requests to alternative destinations. Typical reasons to redirect are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Pages have moved due to site re-organization but search engines and users still have the old URLs in their indexes and bookmarks. Without redirection traffic going to the moved pages is lost to 404 errors.&lt;/li&gt;&lt;li&gt;Identical URLs serving the same content lead to duplicate content issues as crawlers mistake each URL for a separate site. This is known as the "canonical URL issue" in SEO parlance. It is not uncommon to have &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;example.com&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.example.com&lt;/span&gt;, and &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;example.com/index.html&lt;/span&gt; deliver the same content. Sometimes there is a valid need to display the same content on multiple pages.&lt;/li&gt;&lt;/ul&gt;These factors adversely affect SEO but they can be corrected by redirecting the incoming request to an alternative URL. There are several ways to redirect, but the only search engine friendly way is a 301 permanent redirect, which ensures that your hard-earned page rank is transferred to the new location. Contrast this with a temporary 302 redirect which is disastrous for SEO as page rank is not applied towards the new location.&lt;br /&gt;&lt;br /&gt;Redirects are typically cumbersome to implement on a Web server. Responsibility over Web server configuration often falls to another team and is out of reach for authors and editors, even for technical CMS team members. Fortunately, Magnolia allows you to configure redirects directly in AdminCentral.&lt;br /&gt;&lt;br /&gt;A permanent 301 redirect is easy to do with virtual URI mapping. The request can be redirected to the same domain or another one. For example, when visitors request &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;winter2010.com&lt;/span&gt;, you can redirect them to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;example.com/marketing/campaigns/winter2010&lt;/span&gt;, the actual location of the content. Short addresses are easier to market and remember.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_990f464vnd3_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="103" src="https://docs.google.com/File?id=dgdxt33q_990f464vnd3_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In addition, the Templating Kit includes a Redirect template that allows authors to set up a redirect page and define where the incoming request should go. Both internal and external pages can be identified as redirection targets:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1029ft9fzbhj_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="165" src="https://docs.google.com/File?id=dgdxt33q_1029ft9fzbhj_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;If you read more about the &lt;a href="http://www.seomoz.org/blog/canonical-url-tag-the-most-important-advancement-in-seo-practices-since-sitemaps"&gt;canonical URL issue&lt;/a&gt; on SEO blogs you will come across the "canonical URL tag". It is a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;link&lt;/span&gt; element in the page HTML head that tells crawlers that the page is actually a copy of the page given in the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;href&lt;/span&gt; attribute, and that page rank should be attributed to that page instead.&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;link rel="canonical" href="http://www.example.com" /&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;The canonical URL is almost the same as 301 redirect in terms of SEO with the following exceptions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;301 redirect redirects all traffic (crawlers and visitors). The canonical meta element is just for crawlers.&lt;/li&gt;&lt;li&gt;301 is a stronger signal that multiple pages have a single, canonical source.&lt;/li&gt;&lt;li&gt;301 can redirect traffic to another domain, while still counting existing page rank towards the new location.&lt;/li&gt;&lt;li&gt;Canonical URL is sometimes favored over 301 because you don't need to ask developers to implement it. But as seen above, this is not an issue in Magnolia since editors can do their own virtual URI mapping in AdminCentral.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-7393464055394431372?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/7393464055394431372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=7393464055394431372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7393464055394431372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7393464055394431372'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/redirecting-traffic.html' title='Redirecting traffic'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-8219950030092895245</id><published>2011-01-24T03:40:00.000-05:00</published><updated>2011-01-24T03:40:41.275-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Categorizing content</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at categorizing content.&lt;br /&gt;&lt;br /&gt;Usability and SEO go hand-in-hand. Categorizing content allows visitors to find related and similar content with ease. Logical, keyword-rich categories provide intuitive navigation of a large collection of content. Categorization offers a range of opportunities to improve internal linking, visibility, and keyword density. Common uses of categories are tag clouds, and links to overview and landing pages.&lt;br /&gt;&lt;br /&gt;Although content tagging is an effective technique, tag clouds in particular have been abused. Bloggers saw them as a keyword-stuffing opportunity, and search engines have developed techniques to combat this trend.&lt;br /&gt;&lt;br /&gt;Magnolia allows you to create custom categorization taxonomies. You can tag articles with categories to support browsing of related content. This feature can be extended and adapted to suit your needs.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1019cfgjv8hr_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="185" src="https://docs.google.com/File?id=dgdxt33q_1019cfgjv8hr_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;By default, you can categorize any page based on the Article template. Categories are displayed as related links in the article header:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1021c2jjk3f4_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="https://docs.google.com/File?id=dgdxt33q_1021c2jjk3f4_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Magnolia provides an editorial Category Cloud which allows editors to assign weights to categories. The more weight a category has, the bigger it shows in the cloud:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1023d2f7bhf6_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="51" src="https://docs.google.com/File?id=dgdxt33q_1023d2f7bhf6_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The Category Overview template lists all articles within a category and suggests related categories:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1024fxrffrhq_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="https://docs.google.com/File?id=dgdxt33q_1024fxrffrhq_b" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-8219950030092895245?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/8219950030092895245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=8219950030092895245' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8219950030092895245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8219950030092895245'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/categorizing-content.html' title='Categorizing content'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-355096469880562040</id><published>2011-01-21T04:41:00.001-05:00</published><updated>2011-01-21T04:46:51.956-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Preventing broken links</title><content type='html'>This post belongs to a series about &lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt; (SEO) with Magnolia CMS. Today we look at preventing broken links.&lt;br /&gt;&lt;br /&gt;Broken links can lower your site's rankings. Google mentions this specifically in its &lt;a href="http://www.google.com/support/webmasters/bin/answer.py?answer=35769"&gt;SEO guidelines&lt;/a&gt;. Broken links are also a source of irritation for users.&lt;br /&gt;&lt;br /&gt;While you have little control over changes to external links, you can inadvertently break internal links in a variety of ways, such as when changing site structure or deleting content that has incoming links.&lt;br /&gt;&lt;br /&gt;A process should be in place to regularly validate all links on a site.&lt;br /&gt;&lt;br /&gt;Magnolia has safeguards to prevent broken links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A hierarchical content store ensures that there are no orphaned pages that have no incoming links. All pages belong to a hierarchy, and each page has at least one incoming link - from its parent.&lt;/li&gt;&lt;li&gt;Each page has a unique content ID for use as an internal link target. Dialogs provide a user-friendly browser for locating the target. Authors don't need to know the unique ID.&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1033c6jv7fcw_b" imageanchor="1"&gt;&lt;img border="0" height="310" src="https://docs.google.com/File?id=dgdxt33q_1033c6jv7fcw_b" style="margin: 1em 0px 1em 0px;" width="400" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The unique ID stays the same even when the target page is moved or renamed. This allows for flexible site reorganization without breaking the links. The same mechanism is used when linking to documents in the document management system (DMS). Internal links to non-existing pages and documents will not be rendered, avoiding broken links.&lt;/li&gt;&lt;li&gt;A reference view lists any incoming and outgoing links. A message on shows dependent content on deletion and deactivation.&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_993d8bbnsgq_b" imageanchor="1"&gt;&lt;img border="0" height="266" src="https://docs.google.com/File?id=dgdxt33q_993d8bbnsgq_b" style="margin: 1em 0px 1em 0px;" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;A custom 404 "not found" page can be displayed for broken incoming links. You can provide helpful alternatives such as sitemap tree or a search box to find the desired content:&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1018d6vv4xf3_b" imageanchor="1"&gt;&lt;img border="0" height="171" src="https://docs.google.com/File?id=dgdxt33q_1018d6vv4xf3_b" style="margin-bottom: 1em; margin-left: 0px; margin-right: 0px; margin-top: 1em;" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Magnolia does not check for outgoing broken links but third party link checker tools for this purpose exist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-355096469880562040?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/355096469880562040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=355096469880562040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/355096469880562040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/355096469880562040'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/preventing-broken-links.html' title='Preventing broken links'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-5667647608737475591</id><published>2011-01-19T10:42:00.001-05:00</published><updated>2011-01-21T04:40:30.853-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>HTML links</title><content type='html'>This post belongs to a series about &lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt; (SEO) with Magnolia CMS. Today we look at inserting HTML links.&lt;br /&gt;&lt;br /&gt;Navigation links should be rendered as HTML to make them easy for crawlers to read. Search engines take the anchor text of a link into consideration when indexing it. Graphics and Flash objects, used by many designers to control look and feel, normally cannot be crawled. Alternative text descriptions should be provided. Use of uncrawlable elements also hinders users who do not have the required browser plug-ins.&lt;br /&gt;&lt;br /&gt;Since the navigation system is a site-wide collection of links to topics, links should be consistent throughout the site. Navigation is also a perfect opportunity to include descriptive keywords.&lt;br /&gt;&lt;br /&gt;The Magnolia Templating Kit offers four navigation structures out-of-the-box: horizontal, vertical, breadcrumbs, and meta-navigation. All of them render links as HTML. Consistent navigation is enforced throughout the site using the same template.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_985jx9nwmhr_b" imageanchor="1"&gt;&lt;img border="0" height="345" src="https://docs.google.com/File?id=dgdxt33q_985jx9nwmhr_b" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-5667647608737475591?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/5667647608737475591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=5667647608737475591' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/5667647608737475591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/5667647608737475591'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/html-links.html' title='HTML links'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-1273659886456265953</id><published>2011-01-17T08:18:00.000-05:00</published><updated>2011-01-17T08:18:30.707-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Shallow site architecture</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at providing a shallow site architecture.&lt;br /&gt;&lt;br /&gt;Site architecture is critical to SEO. Many sites grow organically and their architecture becomes a maze-like, illogical complex. A clear structure provides both the user and web crawler with a positive navigational experience.&lt;br /&gt;&lt;br /&gt;As a rule of thumb, the flatter the structure, the better. The higher a page appears in the site structure, the more likely it will be ranked high by a crawler. Crawlers seem to determine the depth of a page by the number of directories present in the URL, giving more relevance, for example, to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/books/art&lt;/span&gt; than to &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/books/bestsellers/hardcover/art&lt;/span&gt;. A one or two layer limit is recommended, but for larger sites this is not always feasible.&lt;br /&gt;&lt;br /&gt;It is also important to maintain consistency throughout your site. All pages should follow the same format, and once established, you should endeavor to stick to the URL guidelines. Where possible, avoid the use of sub-domains as crawlers may view them as separate from your main domain.&lt;br /&gt;&lt;br /&gt;Magnolia stores content in a hierarchical content repository. Editors see the hierarchy as a tree where each page belongs to a branch and has a parent node:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1028cgzdwjgk_b" imageanchor="1"&gt;&lt;img border="0" height="200" src="https://docs.google.com/File?id=dgdxt33q_1028cgzdwjgk_b" width="482" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Organizing a site as a hierarchy enforces consistent structure. Pages and branches can be rearranged via drag-and-drop.&lt;br /&gt;&lt;br /&gt;Magnolia allows you to manage an unlimited number of sites in AdminCentral. Each site has its own site tree, to keep the hierarchy shallow. You can map unique domain names to each site, creating microsites for campaigns, for example. To a crawler, these appear either as unique sites (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.winter2010.com&lt;/span&gt;) or as parts of your domain (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;winter2010.example.com&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Sometimes it is difficult to avoid deeper structures. For example, you may want to create a campaign inside your main site at &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/example/marketing/campaigns/winter2010&lt;/span&gt;. Adhering to the shallow hierarchy principle is possible even in this case. Magnolia allows you to shorten the URL with URI mapping. Visitors and crawlers access the campaign site at &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;www.example.com/winter2010&lt;/span&gt; while the content is served from the true location deeper in the hierarchy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-1273659886456265953?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/1273659886456265953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=1273659886456265953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/1273659886456265953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/1273659886456265953'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/shallow-site-architecture.html' title='Shallow site architecture'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-2269160341264916236</id><published>2011-01-14T03:30:00.000-05:00</published><updated>2011-01-14T03:30:24.899-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Search-engine friendly URLs</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at creating search-engine friendly URLs.&lt;br /&gt;&lt;br /&gt;URLs are an important SEO element for search engines as well as users. Search engines are more likely to index static, short, clean URLs. Users appreciate their readability too. While most crawlers can follow dynamically generated URLs, there is evidence that when dynamic parameters are appended to a URL, the crawler only follows them to sites considered to have high importance. Request parameters should be avoided in the URL, as the crawler may view several URLs pointing to the same content as duplicates, lowering page rank.&lt;br /&gt;&lt;br /&gt;Good&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.yoursite.com/books/hardcover&lt;/span&gt;&lt;/blockquote&gt;Bad&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.yoursite.com?p=72&amp;amp;s=0&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Page URLs should:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Include important keywords, as keywords are highlighted in search results. Most SEO experts agree that including them in a URL is important. Keywords also increase the likelihood of a visitor clicking through to your site.&lt;br /&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1002ftht3jz3_b" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="96" src="https://docs.google.com/File?id=dgdxt33q_1002ftht3jz3_b" width="400" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Have short, case-insensitive words, separated with hyphens.&lt;/li&gt;&lt;li&gt;Be descriptive of page content. Both from the SEO and usability perspectives, an obvious URL is a good URL. URLs get pasted, shared and written down, so the more obvious the content, the better.&lt;/li&gt;&lt;li&gt;Avoid the use of meaningless numbers and extraneous information.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Magnolia produces clean, human-readable URLs by default. Dynamically generated URLs are converted to crawler-friendly static ones. Request parameters are not appended to URLs.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_983fg5569ds_b" imageanchor="1" style="margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="https://docs.google.com/File?id=dgdxt33q_983fg5569ds_b" width="480" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Some systems append session IDs to a URL. A session is typically needed when a user logs in. A user's shopping cart is an example of content that would be stored in a session. Appending session IDs to URLs is a security issue. A URL that contains an ID cannot be copied without the risk of inadvertently handing the session to another user.&lt;br /&gt;&lt;br /&gt;Good&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.yoursite.com/cart&lt;/span&gt;&lt;/blockquote&gt;Bad&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.yoursite.com/cart?jsessionid=undn2i50l4&lt;/span&gt;&lt;/blockquote&gt;Magnolia is session-less until the user logs in. At that point, a session ID is stored in a cookie instead of appending it to the URL. This avoids the duplicate content issue and makes URLs safe to copy and share.&lt;br /&gt;&lt;br /&gt;When creating internal links, Magnolia uses the title of the target page as anchor text by default. The title typically includes the most relevant keywords about the target page.&lt;br /&gt;&lt;br /&gt;Minimizing length and trailing slashes will make URLs easier to copy and paste, and fully visible in search results. A Magnolia URL is equally valid, regardless of whether you include an .html suffix or slash:&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.magnolia-cms.com/clients/references&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.magnolia-cms.com/clients/references.html&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;http://www.magnolia-cms.com/clients/references/&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-2269160341264916236?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/2269160341264916236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=2269160341264916236' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2269160341264916236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2269160341264916236'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/search-engine-friendly-urls.html' title='Search-engine friendly URLs'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-9146442047456933002</id><published>2011-01-12T04:38:00.000-05:00</published><updated>2011-01-12T04:38:52.615-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Restricting crawler access</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at restricting crawler access.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;While SEO is mostly about about enticing that crawlers to your content, there are some pages you may not want them to access. These include administrative, password protected, and paid access pages.&lt;/div&gt;&lt;br /&gt;A robots.txt file restricts crawler access on a site-wide basis. The file is typically placed in the root directory of your site. All legitimate crawlers it check fro the presence of a robots.txt file, and respect the directives it contains. Even if you do not want to restrict access, it is advisable to include a robots.txt file because the absence of one has been known to produce a 404 error, resulting in none of your pages being crawled. This can also be the case if the file is not constructed correctly. Specific crawlers can also be denied access by entering their names or IP addresses in the file.&lt;br /&gt;&lt;br /&gt;The following example instructs all crawlers to keep out of the private and temp directories and denies access to a specified crawler.&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;User-agent: BadBot # replace 'BadBot' with the actual user-agent of the bot&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Disallow: /private/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Disallow: /temp/&lt;/span&gt;&lt;/blockquote&gt;It is also possible to exclude individual pages with a robots meta element in the page HTML header.&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;title&amp;gt;...&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Relevant values for the robots meta element are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;NOINDEX prevents the page from being included in the index.&lt;/li&gt;&lt;li&gt;NOFOLLOW prevents the crawler from following any links on the page. Note that this is different from the link-level rel attribute which prevents the crawler from following an individual link. For anti-spam reasons, it is generally better to use the rel attribute with value NOFOLLOW for individual links.&lt;/li&gt;&lt;li&gt;NOARCHIVE instructs the crawler not to keep the page in the engine's public index. With Google, this prevents a cached copy of the page from being available in search results.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_996httw5cgf_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="https://docs.google.com/File?id=dgdxt33q_996httw5cgf_b" width="461" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Preventing crawlers from following undesirable links can help combat automated spam. This method is endorsed by all major engines. Adding a rel="nofollow" attribute to a link allows control on an individual link basis. It can be used to reference external content while not endorsing it, and overcomes the necessity to exclude the crawler from all links on a page.&lt;br /&gt;&lt;blockquote style="background-color: #f0f8fd; border: 1px dashed #c1d8df; margin-left: 10px; padding: 3px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;a href="http://www.badsite.com" rel="nofollow"&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;You can use all the above access restriction methods in Magnolia:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Editing a robots.txt file is vastly simplified in that Magnolia produces clean, human-readable URLs such as http://www.magnolia-cms.com/support-and-services.&lt;/li&gt;&lt;li&gt;At a single-page level, templates set the robots meta element in the HTML header to "all" by default, allowing full crawler access. Options to change this behavior can be offered to editors with minimal configuration directly in AdminCentral. Customization would involve adding a field in the Page Info dialog definition and a minor tweak to the paragraph template.&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_981h2bkctcs_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="325" src="https://docs.google.com/File?id=dgdxt33q_981h2bkctcs_b" width="478" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-9146442047456933002?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/9146442047456933002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=9146442047456933002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/9146442047456933002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/9146442047456933002'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/restricting-crawler-access.html' title='Restricting crawler access'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-2800764093422257212</id><published>2011-01-10T13:46:00.000-05:00</published><updated>2011-01-10T13:46:35.876-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Sitemaps</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt;&amp;nbsp;(SEO) with Magnolia CMS. Today we look at creating an XML sitemap.&lt;br /&gt;&lt;br /&gt;While most crawlers will find your site on their own, best practice is to keep them informed by providing an XML sitemap that lists your site's URLs. The document includes additional metadata about each page, such as when it was last updated, how often it changes, and its relative importance to other pages on your site.&lt;br /&gt;&lt;br /&gt;The Sitemaps XML protocol (&lt;a href="http://sitemaps.org/"&gt;sitemaps.org&lt;/a&gt;) is supported by all major search engines. You should include a reference to your sitemap's location in a robots.txt file.&lt;br /&gt;&lt;br /&gt;Magnolia's Google Sitemap module generates your sitemap XML document automatically. It finds all the pages on your site and allows you to easily set priority and change frequency in the user interface. No XML editing is necessary. Default values are provided should you prefer to tweak just the critical pages.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1040wx9tctfx_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="125" src="https://docs.google.com/File?id=dgdxt33q_1040wx9tctfx_b" width="459" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The generated XML is compliant with the Sitemaps protocol so that it is ready for submission. If you manage multiple sites in the same Magnolia instance, you have the option to create a separate sitemap for each site.&lt;br /&gt;&lt;br /&gt;Magnolia's Sitemap template is an additional component, unrelated to the XML sitemap. It allows you to include a sitemap page on your site without coding or configuration. It serves as a further navigational element, by offering an overview of content. This feature follows SEO best practices by assuring that each page is accessible by at least one static text link.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_10034bdsctg8_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://docs.google.com/File?id=dgdxt33q_10034bdsctg8_b" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-2800764093422257212?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/2800764093422257212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=2800764093422257212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2800764093422257212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2800764093422257212'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/sitemaps.html' title='Sitemaps'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-435584536227992978</id><published>2011-01-06T04:50:00.001-05:00</published><updated>2011-01-06T04:56:21.112-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>W3C compliant code</title><content type='html'>This post belongs to a series about&amp;nbsp;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-optimization.html"&gt;search engine optimization&lt;/a&gt; (SEO) with Magnolia CMS. Today we look at creating W3C compliant code.&lt;br /&gt;&lt;br /&gt;In order to crawl and index a website, a search engine has to be able to read and interpret its code. A page coded in compliance with standards developed by the World Wide Web Consortium (&lt;a href="http://www.w3.org/"&gt;W3C&lt;/a&gt;) is simpler for search engines to parse.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.w3.org/TR/"&gt;standards page at W3C&lt;/a&gt; lists more than 100 specifications, ranging from accessibility to XSLT. While this can seem overwhelming, four of the standards are key:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Valid code (HTML, XML, XHTML)&lt;/li&gt;&lt;li&gt;Semantically correct code&lt;/li&gt;&lt;li&gt;CSS&lt;/li&gt;&lt;li&gt;DOM and ECMAScript&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Valid code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The Magnolia Templating Kit is a best-practice framework that produces valid XHTML. The templates can be used to build compelling websites quickly and efficiently without the need for technical expertise.&lt;br /&gt;&lt;br /&gt;The use of XHTML markup is declared with a DOCTYPE element, as you can see in the source code of any page created using a Magnolia template.&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;img alt="" border="0" height="351" id="BLOGGER_PHOTO_ID_5558279575967019874" src="http://2.bp.blogspot.com/_loiRKg420pQ/TSL500fSs2I/AAAAAAAAGEA/rZOMFQR8_ys/s400/valid-code.png" style="display: block; margin-bottom: 10px; margin-left: auto; margin-right: auto; margin-top: 0px; text-align: center;" width="480" /&gt;&lt;/div&gt;&lt;br /&gt;The page validates against the Document Type Definition (DTD) declared in the same element. The structure of a Magnolia page conforms to the document type by having an html element with the XHTML namespace declared, a head element including the title element, and a body element. All elements and attribute names are written in lower case and attribute values are enclosed in quotes. All non-empty elements (e.g. &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;p&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;li&lt;/span&gt;) are properly terminated with a closing tag. All empty elements (e.g. &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;br&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;hr&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;img&lt;/span&gt;) are properly terminated with a trailing slash (&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;&amp;lt;br /&amp;gt;&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Semantically correct code&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Semantic markup describes the meaning of a page in terms of content, rather than the design.&lt;br /&gt;&lt;br /&gt;In Magnolia templates, heading elements (&lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;h1&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;h2&lt;/span&gt;, &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;h3&lt;/span&gt; etc.) are used in the correct order without skipping levels, lists are used to list items, and tables are only used to present tabular data, not to create page layouts. Try removing CSS, JavaScript and images from your code. Is the code still understandable? Does it make sense to a reader? If yes, then it is semantically good code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CSS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Cascading Style Sheets change the appearance of page elements by assigning styles to them. A style sheet gives a consistent appearance to an entire site. Semantic XHTML and CSS can improve your rankings, as it leads to better crawling, faster website response, and better accessibility and usability, which gives you higher conversions and increases your linking chances.&lt;br /&gt;&lt;br /&gt;The look and feel of a Magnolia-based website is controlled by a single CSS file. Since the XHTML structure is designed to be styled with CSS, appearances can be changed without touching templates. Designers working with CSS don't necessarily need to know anything about Magnolia in order to create a compatible site design. They can start with the static HTML prototype that ships with the system, pick an HTML structure that is a close match to their original design, and then modify it further.&lt;br /&gt;&lt;br /&gt;Magnolia CSS includes some browser-specific properties such as &lt;span class="Apple-style-span" style="font-family: 'courier new';"&gt;-moz-border-radius&lt;/span&gt; that are not part of the official CSS specification. Such properties are not used in areas critical to usability and fall back to standard properties gracefully.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;DOM and ECMAScript&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Document Object Model (DOM) provides a scripting language such as ECMAScript, the standardized version of JavaScript, easy access to the structure, content and presentation. DOM is future proof; it will allow any scripting language interact with the document. As long as you site has useful content, JavaScript code will plays virtually no role in SEO optimization. The only thing that matters is where the code resides.&lt;br /&gt;&lt;br /&gt;Magnolia uses jQuery, the most popular JavaScript library. jQuery is a cross-browser library designed to simplify client-side scripting of HTML. It supports DOM element selection, traversal and modification. The entire library is stored in single external JavaScript file rather than embedded in the page HTML. An external file saves bandwidth by reducing page length, yielding faster downloads.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1037dzxkdrg8_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://docs.google.com/File?id=dgdxt33q_1037dzxkdrg8_b" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-435584536227992978?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/435584536227992978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=435584536227992978' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/435584536227992978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/435584536227992978'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/w3c-compliant-code.html' title='W3C compliant code'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_loiRKg420pQ/TSL500fSs2I/AAAAAAAAGEA/rZOMFQR8_ys/s72-c/valid-code.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-5228575978044899793</id><published>2011-01-04T10:44:00.016-05:00</published><updated>2011-02-02T06:58:59.585-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><title type='text'>Search Engine Optimization</title><content type='html'>&lt;div&gt;This is the first post in a series on search engine optimization (SEO). I will be looking at key SEO factors identified by the &lt;a href="http://seomoz.org/"&gt;SEOmoz.org&lt;/a&gt; consulting group and pitting them against &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia CMS&lt;/a&gt;, a Web content management system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This series should be interesting to online marketers, people employing web communications, and anyone looking to increase their site rank. &lt;a href="http://www.magnolia-cms.com/magnolia-cms/tech-briefs/seo.html"&gt;Download all posts in a single PDF.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;What is SEO?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The purpose of SEO is to enhance the volume and quality of traffic directed to a website via search engine results. Search engines aim to provide users with the most relevant results, while webmasters attempt to tweak their sites in order to move it up in the rankings and attract profitable, organic traffic. SEO began in the early 1990s, and quickly degenerated into a tug of war between search engines and webmasters. For each new weighting factor introduced by the engines, crafty webmasters invented means to circumvent it. As a result, many undeserving sites achieved high rank at the expense of great sites providing valuable information. The Web became cluttered with content designed to satisfy the engines as opposed to users.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today, SEO is practiced in a more cooperative environment in which search engines provide advice to webmasters. The engines will probably never fully disclose the algorithms that drive their crawlers, but the fundamentals of SEO are firmly established.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Google is the dominant player, with more than 80% of the search market, followed by Bing, Yahoo, AOL and Ask, according to the findings of &lt;a href="http://www.statowl.com/"&gt;statowl.com&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://docs.google.com/File?id=dgdxt33q_1016fm967gfn_b" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="244" src="https://docs.google.com/File?id=dgdxt33q_1016fm967gfn_b" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Coming up next&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In subsequent posts I will cover the following SEO best practices:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/w3c-compliant-code.html"&gt;W3C compliant code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/sitemaps.html"&gt;Sitemaps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/restricting-crawler-access.html"&gt;Restricting crawler access&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/search-engine-friendly-urls.html"&gt;Search-engine friendly URLs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/shallow-site-architecture.html"&gt;Shallow site architecture&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/html-links.html"&gt;HTML links&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/preventing-broken-links.html"&gt;Preventing broken links&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/categorizing-content.html"&gt;Categorizing content&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/redirecting-traffic.html"&gt;Redirecting traffic&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/optimizing-images.html"&gt;Optimizing images&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/01/managing-multi-language-and-multi.html"&gt;Managing multi-language and multi-regional sites&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/02/keywords-in-page-titles-and-meta.html"&gt;Keywords in page titles and meta elements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://finnotype.blogspot.com/2011/02/link-popularity.html"&gt;Link popularity&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-5228575978044899793?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/5228575978044899793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=5228575978044899793' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/5228575978044899793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/5228575978044899793'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2011/01/search-engine-optimization.html' title='Search Engine Optimization'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-447764543384776435</id><published>2010-10-18T05:56:00.003-04:00</published><updated>2010-10-21T10:12:42.679-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><title type='text'>Magnolia Tech Briefs</title><content type='html'>We started publishing a new type of document this week: Tech Briefs. These are short technical articles on trends and hot topics we get asked about a lot. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The series starts with two Tech Briefs:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.magnolia-cms.com/home/magnolia-cms/tech-briefs/performance.html"&gt;&lt;b&gt;Performance and high availability&lt;/b&gt;&lt;/a&gt;. By good performance we understand the capability of a system to serve multiple simultaneous requests in reasonable time under heavy load. High availability refers to the degree of operational continuity in a system. In this brief we examine a Magnolia setup that focuses on performance.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.magnolia-cms.com/home/magnolia-cms/tech-briefs/cloud.html"&gt;&lt;b&gt;Cloud&lt;/b&gt;&lt;/a&gt;. Cloud computing is a hot trend. In a cloud, infrastructure services are provided like a utility - think water or electricity. CMS administrators benefit from simplicity as they no longer need to know all the details of the underlying technology. Can Magnolia run in a cloud?&lt;/li&gt;&lt;/ul&gt;The briefs are also available as PDF. Print and read on your way home.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-447764543384776435?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/447764543384776435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=447764543384776435' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/447764543384776435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/447764543384776435'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2010/10/magnolia-tech-briefs.html' title='Magnolia Tech Briefs'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-636083364257144046</id><published>2010-10-18T03:29:00.019-04:00</published><updated>2010-11-01T10:38:43.718-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><title type='text'>Sit, roll and start flow! Commands in Magnolia CMS</title><content type='html'>Commands are custom actions executed at pre-defined trigger points. Magnolia CMS uses them to send email, flush cache, take backups, import and export data and many other common duties.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A command can perform virtually any task you can write in Java like &lt;a href="http://www.java.net/blog/rah003/archive/2010/02/21/tweet-magnolia-tweet"&gt;send a Tweet&lt;/a&gt; or &lt;a href="http://www.flickr.com/services/api/upload.api.html"&gt;upload a photo to Flickr&lt;/a&gt;. You are not limited to features inside the CMS itself.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's how commands work. A command&lt;i&gt; definition&lt;/i&gt; makes the command available to the system. Below is a definition for the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;deactivate&lt;/span&gt; command. Its purpose is to pull a web page down from the public instance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="cursor:pointer; cursor:hand;max-width:480px;" src="http://1.bp.blogspot.com/_loiRKg420pQ/TLwN7YXVI9I/AAAAAAAAF_E/Cy0xIB3GoiE/s1600/deactivate.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5529309756307874770" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see, the command definition has just one property, &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;class&lt;/span&gt;, which identifies the Java class that should be executed when the command is called (&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/trunk/magnolia-module-admininterface/src/main/java/info/magnolia/module/admininterface/commands/DeactivationCommand.java"&gt;DeactivationCommand&lt;/a&gt;&lt;/span&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Its counterpart command &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;activate&lt;/span&gt; is a bit more complicated:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="cursor:pointer; cursor:hand;max-width:480px;" src="http://1.bp.blogspot.com/_loiRKg420pQ/TLwODjlADOI/AAAAAAAAF_M/bbuzaatPmkU/s1600/activate.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5529309896756956386" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;activate&lt;/span&gt; is actually a chain of three commands: &lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;version&lt;/span&gt; creates a new version of the page.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;startFlow&lt;/span&gt; starts an activation workflow.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;alert&lt;/span&gt; sends a workflow notification to the recipient's Magnolia inbox.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;When you call the parent command the children are executed one-by-one from top down.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Command definitions can contain other properties besides &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;class&lt;/span&gt;. The &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;startFlow&lt;/span&gt; command has a property &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;workflowName&lt;/span&gt; which identifies the workflow that should be launched. Defining properties rather than hard coding them gives content editors more flexibility. Editors can replace the default approval workflow with a custom one by simply assigning it to the activate command, without having to touch code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To find more examples of command definitions, sign into the &lt;a href="http://demoauthor.magnolia-cms.com/"&gt;demo&lt;/a&gt; (u/p: superuser/superuser) and execute this JCR query in the &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;config&lt;/span&gt; repository in &lt;b&gt;AdminCentral &gt; Tools &gt; JCR Queries&lt;/b&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;select * from nt:base where jcr:path like '%/commands/%'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;You will find the corresponding Java business logic in the SVN repository:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/trunk/magnolia-module-admininterface/src/main/java/info/magnolia/module/admininterface/commands/ActivationCommand.java"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ActivationCommand&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/trunk/magnolia-module-admininterface/src/main/java/info/magnolia/module/admininterface/commands/VersionCommand.java"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;VersionCommand&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/magnolia/trunk/magnolia-module-workflow/src/main/java/info/magnolia/module/workflow/commands/ActivationFlowCommand.java"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ActivationFlowCommand&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://svn.magnolia-cms.com/view/community/modules/magnolia-module-data/trunk/src/main/java/info/magnolia/module/data/commands/ImportCommand.java"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;ImportCommand&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;See also: &lt;a href="http://documentation.magnolia-cms.com/reference/commands.html"&gt;Commands&lt;/a&gt; in official documentation&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-636083364257144046?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/636083364257144046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=636083364257144046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/636083364257144046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/636083364257144046'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2010/10/sit-roll-and-start-flow-commanding.html' title='Sit, roll and start flow! Commands in Magnolia CMS'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_loiRKg420pQ/TLwN7YXVI9I/AAAAAAAAF_E/Cy0xIB3GoiE/s72-c/deactivate.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-607797179155505539</id><published>2010-10-07T03:18:00.020-04:00</published><updated>2010-10-14T03:47:30.328-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><title type='text'>Vanity URLs with Magnolia CMS</title><content type='html'>&lt;div&gt;Vanity URLs are short, easy to remember Web addresses used for campaigns, microsites and landing pages. They are a key Internet marketing tool. In this post I whip out my vanity cane, clip on my &lt;a href="http://en.wikipedia.org/wiki/Grill_(jewelry)"&gt;grill&lt;/a&gt; and show you how to get vain with Magnolia CMS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A vanity URL typically contains a word or phrase that describes a specific target such as a campaign slogan. When a user visits the vanity URL they are redirected to the actual target site. The URL can be constructed using a:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;trailing path: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.shell.com/&lt;b&gt;eco-marathon&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;domain prefix: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;b&gt;experience&lt;/b&gt;.virgin-atlantic.com&lt;/span&gt;&lt;/li&gt;&lt;li&gt;domain suffix: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.amazon.&lt;b&gt;de&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;entirely unique domain name: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;b&gt;mynavyfuture.com&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;The URL is often reproduced in print ads, hoping that the short and snappy look makes it easier to remember.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Magnolia CMS provides two approaches to creating vanity URLs:&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;1) Virtual URI mapping&lt;/b&gt; is used to create path-based vanity URLs. In this mechanism a trailing path is mapped to an actual page. In the configuration example below, &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.example.com/winter2010&lt;/span&gt; is forwarded to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.example.com/marketing/campaigns/winter&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;  &lt;/div&gt;&lt;img style="cursor:pointer; cursor:hand;border:1px solid #cccccc;" src="http://3.bp.blogspot.com/_loiRKg420pQ/TK2CIrYhldI/AAAAAAAAF-I/FPAb1EpKtsk/s1600/virtualurimapping.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5525215403449619922" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can choose from three types of redirecting actions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;forward&lt;/span&gt; hides the true target URL from the visitor. The typed URL remains in the address bar.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;redirect&lt;/span&gt; displays the true target URL in the address bar.&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;permanent&lt;/span&gt; 301 redirect is a &lt;a href="http://www.webconfs.com/how-to-redirect-a-webpage.php"&gt;search engine friendly&lt;/a&gt; option.&lt;div&gt;  &lt;/div&gt; &lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;2) &lt;a href="http://www.magnolia-cms.com/home/magnolia-cms/magnolia-4-3/enterprise-multi-site-cms.html"&gt;Multi-site support&lt;/a&gt;&lt;/b&gt; is used to create domain name based vanity URLs. This feature is available in Enterprise Edition Pro. It allows you to map complete domains, domain prefixes and suffixes to a site.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the example below, a user who enters &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.example.com&lt;/span&gt; is redirected to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;www.example.com/marketing/campaigns/winter&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_loiRKg420pQ/TK2DvioTObI/AAAAAAAAF-Y/o3o9NbIadRA/s1600/domain+prefix-1.png"&gt;&lt;img style="cursor:pointer; cursor:hand;border:1px solid #cccccc;" src="http://1.bp.blogspot.com/_loiRKg420pQ/TK2DvioTObI/AAAAAAAAF-Y/o3o9NbIadRA/s1600/domain+prefix-1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5525217170626394546" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unique domain names can be configured in a similar fashion. In the example below, both &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;example.com&lt;/span&gt; and &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.com&lt;/span&gt; point to the same site. However, &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.com&lt;/span&gt; is mapped to a special campaign section of the site. A user who enters &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.com&lt;/span&gt; is redirected to &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;winter2010.com/marketing/campaigns/winter&lt;/span&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_loiRKg420pQ/TK2CfTGpZiI/AAAAAAAAF-Q/LRy1TXQMw4k/s1600/unique+domain.png"&gt;&lt;img style="cursor:pointer; cursor:hand;border:1px solid #cccccc;" src="http://2.bp.blogspot.com/_loiRKg420pQ/TK2CfTGpZiI/AAAAAAAAF-Q/LRy1TXQMw4k/s1600/unique+domain.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5525215792069174818" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="color:#990000;"&gt;&lt;b&gt;Note!&lt;/b&gt;&lt;/span&gt; You must register domain names with a domain registrar first. Then make sure that DNS entries for the domain names you map point to the server hosting your Magnolia instance. Domain mapping in Magnolia AdminCentral alone is not enough.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-607797179155505539?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/607797179155505539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=607797179155505539' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/607797179155505539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/607797179155505539'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2010/10/vanity-urls-with-magnolia-cms.html' title='Vanity URLs with Magnolia CMS'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_loiRKg420pQ/TK2CIrYhldI/AAAAAAAAF-I/FPAb1EpKtsk/s72-c/virtualurimapping.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-1956985066510375454</id><published>2010-07-30T03:21:00.005-04:00</published><updated>2010-07-30T03:45:07.552-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='content management'/><title type='text'>Magnolia CMS Technical Guide now online</title><content type='html'>I started writing a white paper on Magnolia CMS architecture couple of months ago. I initially targeted analysts and CTOs, thinking 10 pages would be optimal. After reviewing drafts with &lt;a href="http://philipp-baerfuss-magnolia.blogspot.com/"&gt;Philipp&lt;/a&gt; we felt we had to cover more topics and match architectural features to business benefits. The paper turned into a book!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://documentation.magnolia-cms.com/technical-guide.html"&gt;Magnolia CMS Technical Guide&lt;/a&gt; has new architecture diagrams that make complex topics such as the templating mechanism and clustering easier to understand. I also talk about why we chose the JCR Java Content Repository, explain the module system and show internationalization examples.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Magnolia partners can download a PDF from the secure &lt;a href="http://www.magnolia-cms.com/home/our-company/partners/partner-login.html"&gt;partner site&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img style="cursor:pointer; cursor:hand;width: 399px; height: 237px;" src="http://1.bp.blogspot.com/_loiRKg420pQ/TFKC2B-kbYI/AAAAAAAAF1Q/XIlum9njjb0/s400/cluster.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5499601959728213378" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-1956985066510375454?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/1956985066510375454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=1956985066510375454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/1956985066510375454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/1956985066510375454'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2010/07/magnolia-cms-technical-guide-now-online.html' title='Magnolia CMS Technical Guide now online'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_loiRKg420pQ/TFKC2B-kbYI/AAAAAAAAF1Q/XIlum9njjb0/s72-c/cluster.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-2495109017586565650</id><published>2010-02-25T06:59:00.012-05:00</published><updated>2010-03-09T06:38:41.914-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='magnolia'/><category scheme='http://www.blogger.com/atom/ns#' term='google docs'/><title type='text'>RFP answer sharing</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_loiRKg420pQ/S5UPTWswj2I/AAAAAAAAFlw/1MtU7wrmvmg/s1600-h/RFPExample2.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 223px; height: 207px;" src="http://1.bp.blogspot.com/_loiRKg420pQ/S5UPTWswj2I/AAAAAAAAFlw/1MtU7wrmvmg/s320/RFPExample2.png" alt="" id="BLOGGER_PHOTO_ID_5446276149559725922" border="0" /&gt;&lt;/a&gt;Responding to &lt;span style="font-style: italic;"&gt;requests for proposal&lt;/span&gt; is hard work. An RFP is like a questionnaire. A prospective client looks for a solution to a particular problem and sends a request to several companies to find the best match.&lt;br /&gt;&lt;br /&gt;The RFP document contains product requirements, problem scenarios, questions about your company's ability to deliver a system in time and on budget, and inquiries about support options.&lt;br /&gt;&lt;br /&gt;At &lt;a href="http://www.magnolia-cms.com/"&gt;Magnolia&lt;/a&gt; we respond to quite a few RFPs. Writing comprehensive answers takes time and in-depth knowledge. The answers are out there but finding them at a moment's notice...well that's the hard part. Our partners who implement Magnolia Web content management around the globe face the same challenge. So we decided to give them a hand.&lt;br /&gt;&lt;br /&gt;I collected answers from past RFPs into a single knowledge base. I edited them for reuse and shared them with our partners on Google Docs. Partners can access the knowledge base over the web and copy text directly into their responses. Full-text Google search helps find content quickly. I further grouped answers in a particular subject area such as &lt;span&gt;"w&lt;/span&gt;&lt;span&gt;orkflow&lt;/span&gt;" together. This speeds the writing effort further since questions are bundled together the same way.&lt;br /&gt;&lt;br /&gt;To keep the content fresh and reliable, I go through it after each Magnolia release, write about new features, and weed out any phased-out content.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.magnolia-cms.com/home/partners/program.html"&gt;Want to become a Magnolia partner&lt;/a&gt; and grow with us?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-2495109017586565650?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/2495109017586565650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=2495109017586565650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2495109017586565650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2495109017586565650'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2010/02/rfp-answer-sharing.html' title='RFP answer sharing'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_loiRKg420pQ/S5UPTWswj2I/AAAAAAAAFlw/1MtU7wrmvmg/s72-c/RFPExample2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-2329497246870086349</id><published>2010-02-19T04:15:00.002-05:00</published><updated>2010-03-09T06:29:25.887-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='energy'/><title type='text'>Basel local builds an electric moped</title><content type='html'>&lt;a href="http://www.20min.ch/news/basel/story/23851682"&gt;20 Minuten report&lt;/a&gt; on a Basel local who built a electric-assisted moped. I dig the chopper-like looks. Groovy. &lt;a href="http://translate.google.com/translate?hl=en&amp;amp;sl=de&amp;amp;tl=en&amp;amp;u=http%3A%2F%2Fwww.20min.ch%2Fnews%2Fbasel%2Fstory%2F23851682"&gt;Google translation to English&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.20min.ch/images/content/2/3/8/23851682/1/topelement.jpg"&gt;&lt;img style="cursor: pointer; width: 507px; height: 301px;" src="http://www.20min.ch/images/content/2/3/8/23851682/1/topelement.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-2329497246870086349?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/2329497246870086349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=2329497246870086349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2329497246870086349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2329497246870086349'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2010/02/basel-local-builds-electric-moped.html' title='Basel local builds an electric moped'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-4552812995913136631</id><published>2010-02-16T05:17:00.005-05:00</published><updated>2011-06-17T02:43:18.338-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google docs'/><title type='text'>Indenting tables in Google Docs</title><content type='html'>&lt;b&gt;&lt;span class="Apple-style-span" style="color: #cc0000;"&gt;Outdated!&lt;/span&gt;&lt;/b&gt;&amp;nbsp;This method does not work in the new Google Docs editor. &lt;a href="http://www.google.com/support/forum/p/Google%20Docs/thread?tid=6168eeec3bbe40ce&amp;amp;hl=en"&gt;There is no way to indent tables with the new editor&lt;/a&gt;. If you have a document created with the old editor, create a copy of it.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;Indenting a table in Google Docs so that it is flush with list items can be tricky. If you select the table and click the Indent button on the toolbar, the contents of the table shift around and become a big mess. Here's a workaround.&lt;br /&gt;&lt;br /&gt;If you look at the HTML source (&lt;span style="font-weight: bold;"&gt;Edit &amp;gt; HTML&lt;/span&gt;) you will see that Google Docs creates indents by adding &lt;span style="font-family: 'courier new';"&gt;style="margin-left: 40px;"&lt;/span&gt; to the element. Further indents are done in increments of 40 pixels.&lt;br /&gt;&lt;br /&gt;To apply this method to a table without editing the HTML by hand:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add an extra paragraph before or after the table.&lt;/li&gt;&lt;li&gt;Select both the paragraph and the table.&lt;/li&gt;&lt;li&gt;Click the indent button on the toolbar.&lt;/li&gt;&lt;/ol&gt;The whole table is now indented. You can remove the extra paragraph later.&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" height="330" src="http://docs.google.com/View?id=dgdxt33q_288c7spbqdd" width="500"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-4552812995913136631?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/4552812995913136631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=4552812995913136631' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/4552812995913136631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/4552812995913136631'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2010/02/indenting-tables-in-google-docs.html' title='Indenting tables in Google Docs'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-9044108535393417911</id><published>2010-02-15T04:09:00.014-05:00</published><updated>2010-03-09T06:29:49.485-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google docs'/><title type='text'>Numbered headings in Google Docs</title><content type='html'>&lt;a href="http://pro-web.at/archives/css-counter-test-auto-numbering-your-google-docs-headlines-with-css"&gt;Pro-Web has a nifty post&lt;/a&gt; on how to add sequentially numbered headings to a Google Docs document. The technique takes advantages of CSS &lt;a href="http://www.w3schools.com/css/pr_gen_counter-reset.asp"&gt;&lt;span style="font-family:courier new;"&gt;counter-reset&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://www.w3schools.com/CSS/pr_gen_counter-increment.asp"&gt;&lt;span style="font-family:courier new;"&gt;counter-increment&lt;/span&gt;&lt;/a&gt; properties.&lt;br /&gt;&lt;br /&gt;I tested it on a simple document with multi-level headings:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://docs.google.com/View?id=dgdxt33q_267dm2b7bhm" width="500" frameborder="0" height="330"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;The heading numbering came out fantastic. The built-in table of contents feature works fine too but does not reflect the outline numbering (1, 1.2, 1.2.3) I used in my headings.&lt;br /&gt;&lt;br /&gt;Minor nag is TOC layout in the print view. Google Docs generates a PDF when you want to print your document. The left indent on the TOC is too big and there seems to be no way to adjust it. See for yourself:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open &lt;a href="https://docs.google.com/Doc?docid=0AbdnFchPQx8cZGdkeHQzM3FfMjY3ZG0yYjdiaG0&amp;amp;hl=en"&gt;&lt;span style="text-decoration: underline;"&gt;the document on Google Docs&lt;/span&gt;&lt;/a&gt;&lt;a href="https://docs.google.com/Doc?docid=0AbdnFchPQx8cZGdkeHQzM3FfMjY3ZG0yYjdiaG0&amp;amp;hl=en"&gt;&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Click &lt;span style="font-weight: bold;"&gt;File &gt; Print&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;Tip: &lt;a href="http://www.blogjer.com/2009/04/20/how-to-embed-google-docs-into-html-pages-or-blog-post/"&gt;How to embed Google Docs into a web page or blog post&lt;/a&gt; like above&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-9044108535393417911?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/9044108535393417911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=9044108535393417911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/9044108535393417911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/9044108535393417911'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2010/02/numbered-headings-in-google-docs.html' title='Numbered headings in Google Docs'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-6336776703994478316</id><published>2009-12-21T08:12:00.003-05:00</published><updated>2009-12-21T08:26:54.485-05:00</updated><title type='text'>Yahoo! Pipes for filtering news feeds</title><content type='html'>Here's how to filter annoying stuff out of a news feed. I used &lt;a href="http://pipes.yahoo.com/pipes/"&gt;Yahoo! Pipes&lt;/a&gt; to filter "steampunk", "Mario" or "Lego" out of the BoingBoing feed.&lt;div&gt;&lt;a href="http://feeds.boingboing.net/boingboing/iBag"&gt;Original RSS feed&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=65600e74261ff5a67309333a5d04a4e2"&gt;Modified feed with filter&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-6336776703994478316?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/6336776703994478316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=6336776703994478316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/6336776703994478316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/6336776703994478316'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2009/12/yahoo-pipes-for-filtering-news-feeds.html' title='Yahoo! Pipes for filtering news feeds'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-2274020036568600680</id><published>2009-11-29T17:06:00.003-05:00</published><updated>2010-03-09T06:30:05.192-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='energy'/><title type='text'>Robert Llewellyn on hydrogen</title><content type='html'>Robert Llewellyn of &lt;a href="http://www.llewtube.com/"&gt;CarPool&lt;/a&gt; fame rants about hydrogen in his usual entertaining way.&lt;div&gt;&lt;br /&gt;&lt;object width="560" height="340"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8AQAjyY6hMc&amp;amp;hl=en_GB&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/8AQAjyY6hMc&amp;amp;hl=en_GB&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-2274020036568600680?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/2274020036568600680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=2274020036568600680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2274020036568600680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/2274020036568600680'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2009/11/robert-llewellyn-on-hydrogen.html' title='Robert Llewellyn on hydrogen'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-9055860265559022154</id><published>2009-11-25T10:55:00.005-05:00</published><updated>2010-03-09T06:32:32.381-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='innovation'/><title type='text'>Tinkering with future tools</title><content type='html'>Listen to the &lt;i&gt;On Point&lt;/i&gt; episode on &lt;a href="http://www.onpointradio.org/2009/11/tinkering-and-innovation"&gt;Tinkering and American Innovation&lt;/a&gt;. Another wonderful podcast by Tom Ashbrook and great fun for anybody who likes to tinker in their garage.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;People working with hobby projects have tools at their disposal today that only a few years ago were way too expensive or only available in a professional setting. For example, you can buy or build your own  &lt;a href="http://en.wikipedia.org/wiki/Milling_machine#Computer_numerical_control"&gt;CNC milling machine&lt;/a&gt; to create 3D objects on your desktop. Specialized shop tools are now cheap enough for home use the same way personal computing became a mainstream commodity.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When will this trend reach the biotechnology field? The cost of genome sequencing has come down rapidly. The first decoding performed on Greg Venter's DNA in 2007 cost $70 million. Today &lt;a href="http://www.completegenomics.com/"&gt;Complete Genomics&lt;/a&gt; can sequence the human genome for $5,000 in a professional lab with unique equipment. Will this technology be available for hobbyists in a few years?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It would be interesting to decode the genome of garden vegetables and create your own carrot variety or &lt;a href="http://www.wired.com/medtech/genetics/magazine/17-02/ff_diygenetics?currentPage=all"&gt;find a genetic flaw to cure a disease&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-9055860265559022154?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/9055860265559022154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=9055860265559022154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/9055860265559022154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/9055860265559022154'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2009/11/tinkering-with-future-tools.html' title='Tinkering with future tools'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-8868321202362446928</id><published>2009-10-06T14:15:00.010-04:00</published><updated>2010-03-09T06:30:23.747-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='energy'/><title type='text'>Electric bike</title><content type='html'>&lt;div&gt;&lt;div&gt;I'm looking to turn my regular bicycle into an electric bike. There's a network of interesting but excruciatingly hilly bike trails behind my village. I think an electric-assisted bike would allow me to take them head-on.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I tested some ready-made ebikes by the Swiss manufacturer &lt;a href="http://www.flyer.ch/"&gt;Flyer&lt;/a&gt;. They are good packages but I don't think I need a completely new bike. I am putting together a kit that consist of an electric motor, battery and controller that I can install on my regular bike. At the moment I am reading forums and researching which motors are good for hilly terrain. I don't need high speed just loads of torque which a geared motor should provide. Light weight is also high on the list since my bike is already quite heavy.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;I am going with these components:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://apps.facebook.com/mycycle/bikes/20290"&gt;Univega Terreno 400&lt;/a&gt; - my existing bike that I will build on&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bmsbattery.com/product_info.php?cPath=37&amp;amp;products_id=140&amp;amp;osCsid=edc288f6db4f07aeae8ffc43a595f92a"&gt;350/500W Permanent Magnet Brushless Rear Hub Motor&lt;/a&gt; manufactured by&lt;a href="http://www.ecitypower.com/index.php?option=com_content&amp;amp;view=article&amp;amp;id=57&amp;amp;Itemid=101"&gt;Ecitypower&lt;/a&gt; and matching controller&lt;/li&gt;&lt;li&gt;&lt;a href="http://cgi.ebay.com/36V-15AH-LiFePO4-Electric-Scooter-E-Bike-Ping-Battery_W0QQitemZ320436907591QQcmdZViewItemQQptZLH_DefaultDomain_0?hash=item4a9b872e47#ht_2342wt_939"&gt;36V 15AH LiFePO4 battery&lt;/a&gt; from &lt;a href="http://stores.ebay.com/PingBattery"&gt;PingBattery&lt;/a&gt; on eBay&lt;/li&gt;&lt;li&gt;plus throttle and pedal sensor&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Lots of great info on this forum: &lt;a href="http://endless-sphere.com/forums/viewforum.php?f=21&amp;amp;sid=17e57f878005ca758d7ff57b1789bde1"&gt;endless-sphere.com&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-8868321202362446928?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/8868321202362446928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=8868321202362446928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8868321202362446928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8868321202362446928'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2009/10/electric-bike-kits.html' title='Electric bike'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-8295513055456801764</id><published>2009-09-09T07:43:00.009-04:00</published><updated>2010-03-09T06:30:41.569-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social media'/><title type='text'>Social Media Marketing</title><content type='html'>I started a new online training course in &lt;a href="http://www.socialmediamagicuniversity.com/"&gt;Social Media Marketing&lt;/a&gt;. The topic is not new as such; I have used the key social media tools for some time already. What the course is going to do, however, is put Facebook, Twitter, LinkedIn and other social networks into a business context and teach me how to use them strategically to grow business. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first session focused on top 10 keys to social media marketing success. The keynote speakers clearly know their area. Very insightful commentary on how to communicate with customers, how to portray your persona on forums, and where to draw the line between personal image and the company your represent. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The course is done completely online. Judging by the start it's going to be fun.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.socialmediamagicuniversity.com/images/conversation.jpg" style="cursor: pointer;" alt="" border="0" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-8295513055456801764?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/8295513055456801764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=8295513055456801764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8295513055456801764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/8295513055456801764'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2009/09/social-media-marketing.html' title='Social Media Marketing'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-5184243852457797091</id><published>2007-12-16T19:07:00.004-05:00</published><updated>2010-03-09T06:35:15.097-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='energy'/><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><title type='text'>DIY fireplace fan</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_loiRKg420pQ/R2XUruuN0-I/AAAAAAAAA4Q/YBcd0gBCRok/s1600-h/IMG_1957.JPG"&gt;&lt;img style="cursor: pointer; float: right;" src="http://3.bp.blogspot.com/_loiRKg420pQ/R2XUruuN0-I/AAAAAAAAA4Q/YBcd0gBCRok/s200/IMG_1957.JPG" alt="" id="BLOGGER_PHOTO_ID_5144751997081998306" border="0" /&gt;&lt;/a&gt;I recently installed a small &lt;a href="http://www.heatnglo.com/products/fireplaces/gasFireplaceDetail.asp?f=27125"&gt;gas fireplace&lt;/a&gt;. It's a great unit but it doesn't circulate heat very well without a fan. I wanted to improve the heat output and found &lt;a href="http://www.qtfpsfan.com/QFF-1802-F.htm"&gt;a fireplace fan&lt;/a&gt; on the web. While the fan looked very professional, the price ($140) put me off. So I decided to build my own.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;Update&lt;/span&gt;: This project was featured as Editor's Choice at &lt;a href="http://www.instructables.com/id/Fireplace-fan/"&gt;Instructables.com&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Materials&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_loiRKg420pQ/R2XQZuuN0vI/AAAAAAAAA2Y/SJ0NjILA1Ag/s1600-h/IMG_1909.JPG"&gt;&lt;img style="cursor: pointer; float: right;" src="http://3.bp.blogspot.com/_loiRKg420pQ/R2XQZuuN0vI/AAAAAAAAA2Y/SJ0NjILA1Ag/s200/IMG_1909.JPG" alt="" id="BLOGGER_PHOTO_ID_5144747289797841650" border="0" /&gt;&lt;/a&gt;Computer fans (2), $2.99 each, &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16811999963"&gt;Newegg.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Fan noise dampeners, $1.99 for a pack of two, &lt;a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16800999367"&gt;Newegg.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;AC adapter / power supply, 12v 500ma, Model TEAD-41-120500U, $2.99, &lt;a href="http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&amp;amp;ssPageName=ADME:B:EOIBSAA:US:31&amp;amp;Item=170170603569"&gt;eBay.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Panel-mount stereo 3/32" submini phone jack, $2.99, &lt;a href="http://www.radioshack.com/product/index.jsp?productId=2103450&amp;amp;cp"&gt;Radioshack.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Steel sheet, 26 gauge, 12"*12". You can find this near the roofing and sheathing materials at Home Depot but basically any sheet that you can cut will work.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Tools&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dremel&lt;/li&gt;&lt;li&gt;Soldering iron&lt;/li&gt;&lt;li&gt;Work bench&lt;/li&gt;&lt;li&gt;Drill and a drillbit slightly larger than the threaded part of the phone jack&lt;/li&gt;&lt;li&gt;Screwdriver&lt;/li&gt;&lt;li&gt;Ruler and pen&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Steps to build&lt;/span&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Using the dampeners as a template, mark the position of the fan screws on the steel sheet. Leave about 1/4" inch between. Drill the holes. This will give you two squares.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_loiRKg420pQ/R2XPPeuN0sI/AAAAAAAAA2A/M4-vH1DZPxo/s1600-h/IMG_1918.JPG"&gt;&lt;br /&gt;&lt;img style="cursor: pointer; float: none;" src="http://2.bp.blogspot.com/_loiRKg420pQ/R2XPPeuN0sI/AAAAAAAAA2A/M4-vH1DZPxo/s200/IMG_1918.JPG" alt="" id="BLOGGER_PHOTO_ID_5144746014192554690" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Find a round object such as a mug that has the same diameter as the fan blades. Use it to draw circles in the middle of the squares.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_loiRKg420pQ/R2XPgOuN0tI/AAAAAAAAA2I/tPoxGVfzJq4/s1600-h/IMG_1922.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://1.bp.blogspot.com/_loiRKg420pQ/R2XPgOuN0tI/AAAAAAAAA2I/tPoxGVfzJq4/s200/IMG_1922.JPG" alt="" id="BLOGGER_PHOTO_ID_5144746301955363538" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Install a metal cutting disc in your Dremel tool. Cut along the circles. Do this step outside as metal dust and sparks will fly everywhere. Wear gloves and eye and ear protection! The cut edges will be sharp. Use a sanding stone to finish them and round any other sharp corners.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_loiRKg420pQ/R2XRTeuN0yI/AAAAAAAAA2w/xVbGSeZE3b0/s1600-h/IMG_1929.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://2.bp.blogspot.com/_loiRKg420pQ/R2XRTeuN0yI/AAAAAAAAA2w/xVbGSeZE3b0/s200/IMG_1929.JPG" alt="" id="BLOGGER_PHOTO_ID_5144748281935287074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At this point you can cut the metal sheet to the correct width. It only needs to be as wide as the two fans.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Measure one fan thickness (25 mm) from the bottom of the squares down and draw a line.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_loiRKg420pQ/R2XSm-uN00I/AAAAAAAAA3A/92B7WLKxeOU/s1600-h/IMG_1938.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://4.bp.blogspot.com/_loiRKg420pQ/R2XSm-uN00I/AAAAAAAAA3A/92B7WLKxeOU/s200/IMG_1938.JPG" alt="" id="BLOGGER_PHOTO_ID_5144749716454363970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Measure one fan height (80 mm) from the first line and draw a second line.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_loiRKg420pQ/R2XSx-uN01I/AAAAAAAAA3I/m-2xm7xLEoY/s1600-h/IMG_1939.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://4.bp.blogspot.com/_loiRKg420pQ/R2XSx-uN01I/AAAAAAAAA3I/m-2xm7xLEoY/s200/IMG_1939.JPG" alt="" id="BLOGGER_PHOTO_ID_5144749905432925010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cut the sheet to the right height along the second line.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Secure the sheet into a workbench at the first line and bend it to 45° angle.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_loiRKg420pQ/R2XTKuuN02I/AAAAAAAAA3Q/RKQ_yxJ3Q-0/s1600-h/IMG_1942.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Then at the second line and bend it to 90° angle.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_loiRKg420pQ/R2XTR-uN03I/AAAAAAAAA3Y/oOVry9nQ_lY/s1600-h/IMG_1944.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://4.bp.blogspot.com/_loiRKg420pQ/R2XTR-uN03I/AAAAAAAAA3Y/oOVry9nQ_lY/s200/IMG_1944.JPG" alt="" id="BLOGGER_PHOTO_ID_5144750455188738930" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Attach the fans into to the case. Order of compilation from the front: screw, plastic grommet, blade shield, case, noise dampener, fan, rubber grommet, nut. The grommets are optional but help reduce vibration and noise.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_loiRKg420pQ/R2XTaOuN04I/AAAAAAAAA3g/xa82H7DgHKw/s1600-h/IMG_1950.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://1.bp.blogspot.com/_loiRKg420pQ/R2XTaOuN04I/AAAAAAAAA3g/xa82H7DgHKw/s200/IMG_1950.JPG" alt="" id="BLOGGER_PHOTO_ID_5144750596922659714" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_loiRKg420pQ/R2XTzeuN06I/AAAAAAAAA3w/nMJut7jxHww/s1600-h/IMG_1951.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Twist the positive (&lt;span style="color: rgb(255, 0, 0);"&gt;red&lt;/span&gt;) wires from each fan together and solder them into the positive leg of the phone jack.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Twist the negative (black) wires from each fan together and solder them into the negative leg of the phone jack.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_loiRKg420pQ/R2XUG-uN07I/AAAAAAAAA34/WzQt-Nsqbnw/s1600-h/IMG_1955.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://4.bp.blogspot.com/_loiRKg420pQ/R2XUG-uN07I/AAAAAAAAA34/WzQt-Nsqbnw/s200/IMG_1955.JPG" alt="" id="BLOGGER_PHOTO_ID_5144751365721805746" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Drill a hole somewhere on the case to mount the phone jack. Push the jack through and secure with the nut provided. Stash the cords inside the case so they don't come into contact with the spinning fans.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_loiRKg420pQ/R2XUR-uN08I/AAAAAAAAA4A/iR-vdcBIT0U/s1600-h/IMG_1956.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://4.bp.blogspot.com/_loiRKg420pQ/R2XUR-uN08I/AAAAAAAAA4A/iR-vdcBIT0U/s200/IMG_1956.JPG" alt="" id="BLOGGER_PHOTO_ID_5144751554700366786" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Glue furniture pads to the bottom of the case to eliminate vibration and noise further.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_loiRKg420pQ/R2XUkeuN09I/AAAAAAAAA4I/0hjEXj0xofA/s1600-h/IMG_1958.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Plug it in and test.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_loiRKg420pQ/R2XUruuN0-I/AAAAAAAAA4Q/YBcd0gBCRok/s1600-h/IMG_1957.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://3.bp.blogspot.com/_loiRKg420pQ/R2XUruuN0-I/AAAAAAAAA4Q/YBcd0gBCRok/s200/IMG_1957.JPG" alt="" id="BLOGGER_PHOTO_ID_5144751997081998306" border="0" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Position the fan near the back of the fireplace and plug it in.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_loiRKg420pQ/R2XU8-uN0_I/AAAAAAAAA4Y/qjEEA_EltN4/s1600-h/IMG_1972.JPG"&gt;&lt;img style="cursor: pointer; float: none;" src="http://4.bp.blogspot.com/_loiRKg420pQ/R2XU8-uN0_I/AAAAAAAAA4Y/qjEEA_EltN4/s200/IMG_1972.JPG" alt="" id="BLOGGER_PHOTO_ID_5144752293434741746" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_loiRKg420pQ/R2XVKeuN1BI/AAAAAAAAA4o/JUop-al2gHU/s1600-h/IMG_1970.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;Possible further enhancements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Adjustable fans. They come with a potentiometer that allows you to adjust the speed. The higher the speed, the noisier the fans so slowing them down makes sense.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fans with a temperature sensor. A sensor linked to the fan's motor automatically controls the speed, adjusting it up as the ambient temperature around the fireplace rises.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-5184243852457797091?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/5184243852457797091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=5184243852457797091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/5184243852457797091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/5184243852457797091'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2007/12/diy-fireplace-fan.html' title='DIY fireplace fan'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_loiRKg420pQ/R2XUruuN0-I/AAAAAAAAA4Q/YBcd0gBCRok/s72-c/IMG_1957.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-444754355635461025</id><published>2007-11-30T09:17:00.003-05:00</published><updated>2010-03-09T06:36:03.795-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Web navigation with a subway map</title><content type='html'>I saw a &lt;a href="http://www.bbc.co.uk/mediaselector/check/player/nol/newsid_7110000/newsid_7119900?redirect=7119929.stm&amp;amp;news=1&amp;amp;bbwm=1&amp;amp;bbram=1&amp;amp;nbram=1&amp;amp;nbwm=1"&gt;story on BBC News&lt;/a&gt; about the London subway map. The map is a classic 20th century design created by electrical engineer Harry Beck. It was a great hit with the public when first published and is still used today with few modifications. Beck's map was originally rejected by London Transport, however, because it was not geographically accurate. To make the complex map clearer, Beck had enlarged the central areas and compressed the outer areas.&lt;br /&gt;&lt;br /&gt;While Beck's ingenious design makes the subway network easy to comprehend, it is indeed difficult to tell how far apart the stations actually are. This can be a problem in the physical world; what seems like a short walk on the map may turn out to be quite a trek on the surface.&lt;br /&gt;&lt;br /&gt;In the virtual world where scale does not matter, a subway map can be an incredibly useful navigation metaphor.&lt;br /&gt;&lt;br /&gt;I am currently involved in commercializing a tool called &lt;a href="http://www.prosumer-solutions.com/"&gt;Prosumer&lt;/a&gt;. Prosumer allows you to create workflow-oriented Web applications without coding. With this tool you design the user's navigation path as if you were drawing a subway map, creating stations and connecting them with tracks.&lt;br /&gt;&lt;br /&gt;Here are some familiar subway concepts and what they represent in Prosumer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Station&lt;/span&gt;. In Prosumer, a station is a Web page. The user stops at the station to perform an action, for example to fill a form, and continues their journey to the next page.&lt;br /&gt;&lt;br /&gt;&lt;img style="border: 0px none ; float: none;" src="http://lh5.google.com/antti.hietala/R1Ar_8AZmcI/AAAAAAAAAz0/6l_3a03BbO8/station.gif" alt="" align="left" border="0" /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Track&lt;/span&gt;. Tracks are navigation paths from one station to the next, basically hyperlinks.&lt;br /&gt;&lt;br /&gt;&lt;img style="border: 0px none ; float: none;" src="http://lh5.google.com/antti.hietala/R1Ar_8AZmeI/AAAAAAAAA0E/7bcuY0FM4fc/track.gif" alt="" align="left" border="0" /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Railroad switch&lt;/span&gt;. Business rule that routes the user to a particular navigation path. Depending on what the business rule says, tracks split and merge to create alternative journeys.&lt;br /&gt;&lt;br /&gt;&lt;img style="border: 0px none ; float: none;" src="http://lh4.google.com/antti.hietala/R1AzEsAZmgI/AAAAAAAAA0c/yuabczya8xs/switch.gif" alt="" align="left" border="0" /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Departures and arrivals&lt;/span&gt;. Points in time when actions can be executed. For example, &lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;span style="font-style: italic;"&gt;On arrival to the Shopping Cart station, calculate the total of items the user has in her shopping cart&lt;/span&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;span style="font-style: italic;"&gt;On departure from the Flight Search station, save the user's home airport&lt;/span&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img style="border: 0px none ; float: none;" src="http://lh5.google.com/antti.hietala/R1AtF8AZmfI/AAAAAAAAA0Q/7zTef9dvHDs/script.gif" alt="" align="left" border="0" /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I think this is a very powerful way to visualize a Web application's navigation pattern. Even after a long time away from the design, looking at the map makes it immediately evident to you what happens where.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-444754355635461025?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/444754355635461025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=444754355635461025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/444754355635461025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/444754355635461025'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2007/11/web-navigation-with-subway-map.html' title='Web navigation with a subway map'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-7988114232502854782</id><published>2007-10-01T13:43:00.003-04:00</published><updated>2010-03-09T06:28:42.186-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='energy'/><title type='text'>Altwheels Festival</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_loiRKg420pQ/RwE8pUYUKEI/AAAAAAAAAm4/Q0rMieXEXHA/s1600-h/insight.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_loiRKg420pQ/RwE8pUYUKEI/AAAAAAAAAm4/Q0rMieXEXHA/s320/insight.jpg" alt="" id="BLOGGER_PHOTO_ID_5116437332212590658" border="0" /&gt;&lt;/a&gt;I visited the &lt;a href="http://www.altwheels.org/"&gt;Altwheels Festival&lt;/a&gt; in Boston last weekend and chatted with &lt;a href="http://www.99mpg.com/"&gt;Mike Dabrowski&lt;/a&gt; about his 100 mpg Honda Insight. Mike is a hobbyist and energy conservation enthusiast. His car has a manual electric drive control. It's a system that a skilled driver can use to increase miles per gallon by 10-20% and learn to better manage the mix of gas to electric.&lt;br /&gt;&lt;br /&gt;In a modern hybrid vehicle such as the Toyota Prius, the car makes the decision when to engage the electric motor. Mike's car works differently. It lets the driver control the mix. The car has a little joystick that you can push to make the electric motor turn on and assist in an uphill, or pull back to switch the car into charging mode in a downhill. The motor assists or charges in proportion to how far you push or pull.&lt;br /&gt;&lt;br /&gt;Mike has also added auxiliary batteries so the electric motor can be used without a need to get energy from gas or momentum. The batteries can be charged with solar or from the grid. The system can run for 1 hour boosting the mpg to 100. The really unique feature is a fifth wheel that provides an EV mode. The car can travel in this all-electric mode at 30 mph for over 35 miles, which is great in stop-and-go city traffic and mall parking lots.&lt;br /&gt;&lt;br /&gt;While the car is an amazing engineering sandbox, talking to man himself is the real treat. No matter what question we hurled at him, Mike had an answer. As he experiments and tweaks, he puts his brain to work. There is a huge difference between someone who just promotes a product at a stand and a true hobbyist like Mike.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-7988114232502854782?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/7988114232502854782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=7988114232502854782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7988114232502854782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/7988114232502854782'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2007/10/altwheels-festival.html' title='Altwheels Festival'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_loiRKg420pQ/RwE8pUYUKEI/AAAAAAAAAm4/Q0rMieXEXHA/s72-c/insight.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-116053143532961019</id><published>2006-10-10T20:50:00.002-04:00</published><updated>2010-03-09T06:31:28.921-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advertising'/><title type='text'>Defining relevance</title><content type='html'>&lt;img style="cursor: pointer; display: none;" src="http://photos1.blogger.com/blogger/4380/972/320/gmail_ads.0.png" alt="" border="0" /&gt;Relevance is a crucial factor in online advertising. Relevant ads stand a better chance of being clicked than random ads. The ads you see in your Gmail sidebar, for example, are not random. Google analyzes the message you are composing or reading, and displays ads that match the content. Consequently, the likelihood that you click an ad that has something in common with the email message is fairly high.&lt;br /&gt;&lt;br /&gt;But how do you define relevance?&lt;br /&gt;&lt;br /&gt;The relevance of an ad ultimately depends on the context where it appears. An ad's context is typically the text and images that surround it on the website. But the context can also cover the user.&lt;br /&gt;&lt;br /&gt;In linguistics, a quality known as &lt;span style="font-style: italic;"&gt;readability&lt;/span&gt; defines how easy a given piece of text is to understand. To make text easier to comprehend you can:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Keep complex words to a minimum&lt;/li&gt;&lt;li&gt;Simplify sentence structures&lt;/li&gt;&lt;li&gt;Avoid obscure literary devices&lt;/li&gt;&lt;/ul&gt;The problem with such measures is that they are not user specific. Readability can tell you whether People magazine is easier to read than the New York Times, but it cannot tell you how easy it is for a &lt;span style="font-weight: bold;"&gt;particular&lt;/span&gt; reader to understand. The magazine is not customized for you or me. It is aimed at a generic readership population, an approximation of the intended audience.&lt;br /&gt;&lt;br /&gt;The same problem applies to advertising. If you want to measure the desirability of an ad, it helps to know the reader's preferences, past purchase behavior, familiarity with the subject, and motivation.&lt;br /&gt;&lt;br /&gt;This is why Gmail appears to be the most advanced application of AdSense to date. It extends the context of an ad to cover the user. The email message that I am reading or composing is a good indicator of my personal preferences. I am likely to write about something that is relevant to me.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update 2007-10-08:&lt;/span&gt;&lt;br /&gt;Erick Schonfeld &lt;a href="http://www.techcrunch.com/2007/10/08/the-more-gphones-the-better/"&gt;analyzes Gphone rumors on Techcrunch&lt;/a&gt;. Same relevance principle as above, this time pairing AdSense with the phone.&lt;br /&gt;&lt;blockquote&gt;To the extent that such marketing messages can be targeted based on location or what the consumer is trying to achieve at that particular moment, the greater likelihood that those ads will be clicked on. So if I am looking at restaurant reviews on my Gphone, I might not mind seeing coupon offers for nearby restaurants, but a mortgage ad would be annoying. The individual developers have the best chance of making such ads a seamless part of the overall mobile experience rather than a distraction.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-116053143532961019?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/116053143532961019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=116053143532961019' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/116053143532961019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/116053143532961019'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2006/10/defining-relevance.html' title='Defining relevance'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-115491933235626288</id><published>2006-08-06T22:09:00.003-04:00</published><updated>2010-03-09T06:35:45.972-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social media'/><title type='text'>Wikimania 2006</title><content type='html'>&lt;img src="http://upload.wikimedia.org/wikipedia/wikimania2006/c/c0/Mania-logo.gif" alt="" /&gt;I participated in the second annual &lt;a href="http://wikimania2006.wikimedia.org/wiki/Main_Page"&gt;Wikimania 2006 conference&lt;/a&gt; in Cambridge this weekend. Having set up and nurtured intranet wikis myself, I chose to go to a panel discussion on &lt;a href="http://wikimania2006.wikimedia.org/wiki/Proceedings:KL1"&gt;organizational uses of wiki technology&lt;/a&gt;. The panel was excellent. I particularly enjoyed the many tips the panelists shared on how to boost user adoption.&lt;br /&gt;&lt;br /&gt;The tip that rang most true is "don't get in the way". This is probably the hardest lesson to learn if you like to tinker with wiki technology. What the panelists referred to is adding structure that hinders rather than helps user adoption.&lt;br /&gt;&lt;br /&gt;Wiki is not top-down software. Its informality and openness are key to its effectiveness. The type of unnecessary structure you should restrain yourself from adding to a wiki is forms and automation that are compulsory for the user.&lt;br /&gt;&lt;br /&gt;Everybody knows that there is more than one way to jot down meeting notes, maintain an FAQ, or compile a glossary on a wiki. While some of those ways are more elegant than others, it doesn't really matter &lt;span style="font-style: italic;"&gt;how&lt;/span&gt; the information gets on the wiki as long as it gets there. Once there material is up it will benefit somebody.&lt;br /&gt;&lt;br /&gt;So feel free to organize and categorize existing wiki pages. It helps information retrieval. But be wary of setting restrictions on how users should contribute new material. Forms and automation easily become just another barrier for adoption.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-115491933235626288?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/115491933235626288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=115491933235626288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/115491933235626288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/115491933235626288'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2006/08/wikimania-2006.html' title='Wikimania 2006'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-114956729898508475</id><published>2006-06-05T23:19:00.002-04:00</published><updated>2010-03-09T06:36:49.530-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Navigation pattern: minimal add-edit-delete</title><content type='html'>&lt;a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29"&gt;Design patterns&lt;/a&gt; are popular in software engineering. They provide time-tested, repeatable solutions to common problems. Since most programming problems can be distilled into a number of core tasks, design patterns work like templates; they solve each core task and allow you to derive a solution to the overall problem. Design patterns are abstract enough so that choosing the language and tools with which to apply them is up to you.&lt;br /&gt;&lt;br /&gt;In my information architecture work I often come across navigation problems that have generally applicable solutions. Here's an example of a "navigation pattern" that you will hopefully find useful.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Design problem&lt;/span&gt;&lt;br /&gt;A user needs to add, edit and delete items.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pattern name&lt;/span&gt;&lt;br /&gt;Minimal add-edit-delete&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4380/972/1600/MinimalAddEditDelete.png"&gt;&lt;img style="cursor: pointer; float: none;" src="http://photos1.blogger.com/blogger/4380/972/200/MinimalAddEditDelete.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://photos1.blogger.com/blogger/4380/972/1600/MinimalAddEditDelete.png"&gt;Click thumbnail to view image&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;When to use&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4380/972/1600/MinimalAddEditDelete.png"&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;In an application that is task and workflow oriented.&lt;/li&gt;&lt;li&gt;When the user is expected to perform one task at a time to complete an action.&lt;/li&gt;&lt;li&gt;Suitable for devices that are not feature-rich, such as mobile phones.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Solution&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Self-contained, has a minimal number of screens.&lt;/li&gt;&lt;li&gt;Indicates page transitions clearly.&lt;/li&gt;&lt;li&gt;Provides confirmation for an accomplished task.&lt;/li&gt;&lt;li&gt;Navigable with links.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-114956729898508475?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/114956729898508475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=114956729898508475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/114956729898508475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/114956729898508475'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2006/06/navigation-pattern-minimal-add-edit.html' title='Navigation pattern: minimal add-edit-delete'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-113340751910007229</id><published>2005-11-30T21:47:00.002-05:00</published><updated>2010-03-09T06:37:15.276-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Content authoring drives Web accessibility</title><content type='html'>I recently reviewed a Web application for Section 508 compliance. Section 508 is a part of U.S. Rehabilitation Act which requires that information technology must be accessible to users with disabilities. For example, Web sites must be accessible to people who are visually impaired. This can be achieved by providing alternative keyboard navigation and ensuring that these people can use assistive technology such as screen readers and Braille displays. Compliance with the act is necessary if you want to sell software to U.S. government agencies.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/4380/972/320/braille.jpg" alt="Braille" /&gt;So I compared the product against a &lt;a href="http://www.webaim.org/standards/508/checklist"&gt;checklist of standards&lt;/a&gt;. The standards are quite logical: provide ALT attributes for non-text assets, don't rely on color alone to convey information, identify form elements, and so on. I found some shortcomings and suggested how to fix them.&lt;br /&gt;&lt;br /&gt;What surprised me, however, was how common these problems still are. Let's consider image ALT attributes. Very few Web pages are hand-coded today. Content is authored in content management systems, blogging tools, Word processors and WYSIWYG design tools, and then converted into HTML for publishing on the Web. In many cases authors never see the HTML code, which means they don't have a chance to define ALT attributes either. So why don't authoring tools fill in the attribute automatically?&lt;br /&gt;&lt;br /&gt;As I was writing this post I uploaded an image of Braille text into Blogger. I had named the image "braille.jpg". Imagine if Blogger would have read my file name, recognized it as a word, and used it in the ALT attribute. Instead it left the attribute empty. (I defined it manually in the HTML.)&lt;br /&gt;&lt;br /&gt;High-level content authoring tools already save users a lot of time and effort. By making sure that they also produce Section 508 compliant code we could take big strides in providing an accessible Web experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-113340751910007229?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/113340751910007229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=113340751910007229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/113340751910007229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/113340751910007229'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/11/content-authoring-drives-web.html' title='Content authoring drives Web accessibility'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-113287914216160345</id><published>2005-11-24T19:25:00.000-05:00</published><updated>2005-11-24T19:39:02.173-05:00</updated><title type='text'>Ultimate paper plane</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/4380/972/320/avenger.jpg"&gt;Aviation and aerospace engineering students at the University of Leeds, U.K., have come up with the perfect design for a paper aeroplane. The design introduces tiny folded winglets on each side of the plane and at the back, as well as cambered wings, which gives it the killer air-time. The secret to a really good paper plane is to minimise the drag and maximise the lift.&lt;br /&gt;&lt;br /&gt;Guardian has provided &lt;a href="http://www.guardian.co.uk/flash/0,5860,1648976,00.html"&gt;step-by-step instructions for building the plane&lt;/a&gt;, Avenger. (You need a Macromedia Flash capable browser.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-113287914216160345?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/113287914216160345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=113287914216160345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/113287914216160345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/113287914216160345'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/11/ultimate-paper-plane.html' title='Ultimate paper plane'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-113176098185067789</id><published>2005-11-11T20:58:00.002-05:00</published><updated>2010-03-09T06:33:06.465-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taxonomy'/><title type='text'>Amazon adopts folksonomy</title><content type='html'>Have you noticed? It's kind of small and unobtrusive, hard to recognize unless you are looking for it. But it's there. And it may have a huge impact on how people find stuff on Amazon.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/4380/972/320/amazon_tags.jpg" alt="Amazon tags" border="0" /&gt;I am talking about Amazon's decision to add a folksonomy-based categorization scheme to the vast online store. Next time you search for a book on Amazon's Web site, pay attention to the little &lt;span style="font-weight: bold;"&gt;Your tags&lt;/span&gt; box on the details page. The online merchant describes the new feature like this:&lt;br /&gt;&lt;blockquote&gt;"Tags provide an easy way for you to remember and classify any item on the Amazon site for later recall. For example, you might be shopping for holiday gifts and tag items with the names of the people on your shopping list. You might also want to tag items you've purchased in the past. Don't like the way Amazon has organized its science fiction or cookbooks? Tag the items you care about with the categories that matter to you. Because people's tags are visible to others, a great side effect of tagging is that you can navigate among items through other people's tags. What items have people tagged "gift" or "Tuscany" or "robot?""&lt;/blockquote&gt;It's the last example — other people's ability to see your tags and yours to see theirs — that makes this type of categorization potentially very powerful.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://finnotype.blogspot.com/2005/09/folksonomies-shape-search-behavior.html"&gt;I have written about folksonomy before&lt;/a&gt;, explaining that the method has grown organically out of a need to complement burdensome formal classification efforts done by site owners with more casual categorization by users and their keywords. Folksonomies are particularly useful when the amount of items to classify is very large. It increases a user's chances of finding an interesting item by browsing.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;Note!&lt;/span&gt; The cherry on top is the suggestive &lt;a href="http://en.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; search Amazon implemented in the &lt;span style="font-weight: bold;"&gt;Your tags&lt;/span&gt; box. As you begin to type, tags added by other people are displayed as suggestions. Nnnnice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-113176098185067789?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/113176098185067789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=113176098185067789' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/113176098185067789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/113176098185067789'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/11/amazon-adopts-folksonomy.html' title='Amazon adopts folksonomy'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-113090277187457738</id><published>2005-11-01T22:11:00.001-05:00</published><updated>2009-11-25T12:13:25.219-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>World Usability Day</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/4380/972/320/usability_day.jpg" alt="Usability Day logo" /&gt;Want to learn how usability plays a key role in voting practices and governance? Thursday, November 3, 2005 is World Usability Day. Usability Professionals Association's Boston chapter is hosting a full-day event to promote the fields of usability engineering and user-centered design by educating the public about the value of user-centered design processes.&lt;br /&gt;&lt;br /&gt;Multi-disciplinary teams of researchers, designers, developers, and members of the public will be let loose on the city of Boston to study aspects of public life. They will report back their findings and suggest improvements. You also get to watch usability specialists evaluate products and Web sites in a rapid-fire manner providing detailed feedback about each product's usability-related strengths and weaknesses.&lt;br /&gt;&lt;br /&gt;Events will be held at the Museum of Science. Exhibits and activities will begin at 9 a.m. The event is free with museum admission and open to the public. For more details, visit &lt;a class="url" href="http://www.upaboston.org/"&gt;http://www.upaboston.org/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-113090277187457738?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/113090277187457738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=113090277187457738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/113090277187457738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/113090277187457738'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/11/world-usability-day.html' title='World Usability Day'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-112890983994454666</id><published>2005-10-09T21:58:00.000-04:00</published><updated>2005-10-09T22:10:33.773-04:00</updated><title type='text'>Panflute flowchart</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.toothpastefordinner.com/020605/panflute-flowchart.gif"&gt;&lt;img style="cursor: pointer; float: none;" src="http://photos1.blogger.com/blogger/4380/972/320/panflute_flowchart.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;© Drew at &lt;a href="http://www.toothpastefordinner.com/"&gt;toothpastefordinner.com&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-112890983994454666?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/112890983994454666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=112890983994454666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112890983994454666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112890983994454666'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/10/panflute-flowchart.html' title='Panflute flowchart'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-112776760456068532</id><published>2005-09-26T16:46:00.003-04:00</published><updated>2010-03-09T06:34:42.261-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Cop language</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/4380/972/320/keepright.jpg" alt="Sign post" border="0" /&gt;For decades, police across the country have used 10-codes for frequently used radio messages. We all know at least one of them, 10-4, which means "message received, OK." Now the &lt;a href="http://www.fema.gov/nims/"&gt;National Incident Management System&lt;/a&gt;, a subdivision of the FEMA, is calling for clearer, more easily understood language.&lt;br /&gt;&lt;br /&gt;NIMS is driving for the currently used 10-code system to be replaced with plain English commands, arguing that:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;All local responders, as well as those from other jurisdictions and other states, must know and use commonly established operational structures, terminology, policies and procedures.&lt;/li&gt;   &lt;li&gt;Everyone must communicate clearly with each  other and coordinate response activities effectively.&lt;/li&gt;   &lt;li&gt;Everyone has to speak the same language - plain English.&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt; NIMS is serious about the issue and carries a big stick. Resistance to comply will result in the loss of federal preparedness funding. Goodbye 10-codes, hello plain English!&lt;br /&gt;&lt;br /&gt;The effort is part of a larger campaign to improve communication from the federal goverment to the people. In 1995 a group of federal employees began meeting to try to spread the use of plain language. This group, now called &lt;a href="http://www.plainlanguage.gov/"&gt;PLAIN—the Plain Language Action and Information Network&lt;/a&gt;, remains at the center of the movement in the United States. There is also a long-standing &lt;a href="http://www.plainenglish.co.uk/"&gt;Plain English Campaign&lt;/a&gt; in the U.K. They define plain English as "something that the intended audience can read, understand and act upon the first time they read it. Plain English takes into account design and layout as well as language."&lt;br /&gt;&lt;br /&gt;So far both movements have been mainly concerned with written language. NIMS is taking an important step by extending the effort to the airwaves. Spoken language is communication too. Why shouldn't it be as clear as possible?&lt;br /&gt;&lt;br /&gt;Let's hope that there will be &lt;a href="http://en.wikipedia.org/wiki/10-codes#List_of_commonly_used_codes"&gt;less 10-1 and more 10-2&lt;/a&gt; after the conversion.&lt;br /&gt;&lt;br /&gt;Resources:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.npr.org/templates/story/story.php?storyId=4864518"&gt;Government Calls for End to Police Codes&lt;/a&gt;. Talk of the Nation, NPR. September 26, 2005.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="http://www.fema.gov/txt/nims/concerning_nimsweb.txt"&gt;Concerning NIMS, ICS and Plain Language&lt;/a&gt;. Announcement by NIMS/FEMA. August 23, 2005.&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-112776760456068532?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/112776760456068532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=112776760456068532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112776760456068532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112776760456068532'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/09/cop-language.html' title='Cop language'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-112718817906665265</id><published>2005-09-19T23:41:00.002-04:00</published><updated>2010-03-09T06:33:48.278-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='taxonomy'/><title type='text'>Folksonomies shape search behavior</title><content type='html'>With the proliferation of tagging based services such a del.icio.us and Flickr, the term &lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Folksonomy"&gt;folksonomy &lt;/a&gt;has started to pop up in discussions about Web content. It's a fairly new term that has grown organically out of the need to distinguish between the formal classification of information done by experts such as librarians and the more casual categorization that users and authors of Web content do when they describe content with keywords.&lt;br /&gt;&lt;br /&gt;Folksonomy is a derivative of the term &lt;span style="font-style: italic;"&gt;taxonomy&lt;/span&gt;. Information architects use taxonomies to classify information according to a predefined formal scheme. In a taxonomy there is typically a hierarchy between the items it attempts to describe. For example, &lt;span style="font-style: italic;"&gt;fuel &lt;/span&gt;is a parent concept for &lt;span style="font-style: italic;"&gt;diesel oil&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;gasoline&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;butane&lt;/span&gt;. Folksonomy, on the other hand, has no explicit hierarchy. It is a flat namespace without parent-child or sibling relationships.&lt;br /&gt;&lt;br /&gt;Flickr is an example of a folksonomy based system. When amateur shutterbugs take photos and upload them to Flickr, they are asked to describe each shot with keywords. The keywords are completely of their own choosing. No existing categorization scheme is given or even suggested. One photographer might &lt;a href="http://flickr.com/photos/tags/paris/"&gt;tag her shot of Paris&lt;/a&gt; with a keyword "eiffeltower", while another might tag his with "girl", "ladefense" or "arch".&lt;br /&gt;&lt;br /&gt;Similarly, Technorati does not provide bloggers with a taxonomy by which to tag interesting Web sites. What the two systems do provide, however, is clusters of &lt;span style="font-style: italic;"&gt;related&lt;/span&gt; tags. The &lt;a href="http://technorati.com/search/paris"&gt;tag "paris"&lt;/a&gt; has related tags "France", "Hilton" and "travel" in Technorati, derived from posts submitted by other users.&lt;br /&gt;&lt;br /&gt;The concept of related information has a crucial impact on users' search behavior. Information on the Web is uncategorized. It is hard even for Googlebot to figure out the interrelationships between documents; it couldn't possibly index all the new content according to any formal taxonomy. There is simply too much content and it is too varied. Folksonomy based sites provide a creative solution to the problem: they encourage the user to &lt;span style="font-style: italic;"&gt;browse&lt;/span&gt; related information to find interesting content. By following the links of related tags a Technorati user will likely find blog posts he is interested in but which he would not have thought of searching for with a specific Google query of his own devise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-112718817906665265?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/112718817906665265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=112718817906665265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112718817906665265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112718817906665265'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/09/folksonomies-shape-search-behavior.html' title='Folksonomies shape search behavior'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-112604087910790411</id><published>2005-09-06T15:13:00.001-04:00</published><updated>2009-11-25T12:15:59.778-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='innovation'/><title type='text'>Do you recognize innovation?</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/4380/972/320/cooktop1.jpg" alt="Cooktop" /&gt;Computer chips are faster today than they were five years ago. The cars we drive now are safer than the cars our grandparents drove. Since the industrial revolution life in the modern world has become increasingly easier. Is this the result of innovations or merely progress as usual?&lt;br /&gt;&lt;br /&gt;Innovation is a much sought-after but elusive quality. &lt;a href="http://finnotype.blogspot.com/2005/08/innovative-user-experience-pays-big.html"&gt;Companies are trying to encourage it&lt;/a&gt;, creative people are revered for displaying it, but how do you recognize innovation?&lt;br /&gt;&lt;br /&gt;Suppose a designer makes a product improvement that increases sales by 10,000 units. Do you reward the designer for her innovativeness? What about another improvement that increases sales by 5,000 units? Does that qualify for innovation? The quantitative criteria we use to measure success lends itself poorly to measuring an abstract quality such as innovation. How would you even devise a scale to measure the satisfaction a user experiences when an innovative product makes his life easier?&lt;br /&gt;&lt;br /&gt;Here's an example: &lt;a href="http://www.kuppersbuschusa.com/"&gt;Küppersbusch&lt;/a&gt; is a company that makes kitchen appliances such as ovens and cooktops (hobs). Their latest product is the Induction-Top, a cooktop based on the principle of &lt;a href="http://en.wikipedia.org/wiki/Induction_hob"&gt;electromagnetic induction&lt;/a&gt;. It cooks without an open flame, is twice as fast as gas, more efficient than electric, cool to the touch even when on, and turns off automatically when the cooking pot is removed from the induction zone. Imagine that!&lt;br /&gt;&lt;br /&gt;But is it an innovation? Michael Faraday is generally credited with having discovered the induction phenomenon in 1831. Cooktops hardly pass for an innovation either. However, when the two are combined the result is a truly innovative product. No more fire hazards or burnt fingers. Instant heat, all of which goes into the pot instead of dissipating in the kitchen. It looks very sleek and modern too.&lt;br /&gt;&lt;br /&gt;Here the innovation is not about inventing a new technology. It's about applying a well-known method to an age-old problem. Yet from the end-user's point of view it is as close to magic as you can get.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Categories: &lt;a href="http://del.icio.us/antarctic74/innovation" rel="tag"&gt;innovation&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-112604087910790411?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/112604087910790411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=112604087910790411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112604087910790411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112604087910790411'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/09/do-you-recognize-innovation.html' title='Do you recognize innovation?'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-112482474844435241</id><published>2005-08-23T15:00:00.002-04:00</published><updated>2010-03-09T06:33:59.176-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='energy'/><title type='text'>Day trading on carbon</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/4380/972/320/gas.jpg" alt="Gas pump" /&gt;The carbon dioxide spewing industry has used an emission trading system for years. A company that exceeds its CO&lt;sup&gt;2&lt;/sup&gt; emission quota can buy the right to pollute more from another company that has pollution credits left. Britain is now proposing to extend this system to individuals.&lt;br /&gt;&lt;br /&gt;British climate researchers want to create a system of "Domestic Tradable Quotas" for measuring, buying and selling of carbon emission credits. "Under the plan, every Brit would be issued a sort of debit card charged with an equal number of personal carbon credits at the beginning of the year. If you pollute more than your share, you could then buy more credits from someone more Earth-friendly." Mike Wendling of Grist magazine has &lt;a href="http://www.grist.org/news/maindish/2005/08/09/wendling-carboncards/"&gt;the story on this ambitious plan&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A plan of this magnitude has considerable information management and usability hurdles to overcome. Let's examine some of them.&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Convenience&lt;/span&gt;. Would you hand over an ID card every time you filled up your gas tank (petrol, British readers)? Each time you make a purchase that results in carbon emissions your environmental account needs to be charged. How do you record those purchases in a convenient manner? Are all gas stations expected to install readers for the new ID cards? A wide majority of adult consumers already have a debit or credit card that uniquely identifies the owner. Why not identify the consumer by their Visa card and handle the carbon charge behind the scenes transparently? Is it really necessary to introduce yet another card?&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Scope&lt;/span&gt;. How do you calculate a carbon credit for a head of lettuce bought at the grocery store? Storing vegetables at the store requires cooling, which in turn uses electricity. Simple enough; distribute daily power consumption among the items sold and convert it into emission credits. But it gets more complicated. The lettuce was trucked to the store from a wholeseller. Do you include carbon emissions from the delivery truck in the price of the lettuce? And before that, it was trucked to the wholeseller from a farm. Do you include that trip? Do you charge fewer credits for lettuces trucked in from local producers than those flown in from Spain?&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Privacy&lt;/span&gt;. Would you let the government track each time you turned on your washing machine or computer? As much as we would like to think that such information is nobody else's business, it is already out there. Electricity and natural gas consumption is tracked in detail by utility companies. Accessing those figures and charging our carbon accounts correspondingly is just a matter of pulling the information into one big database and crunching the numbers.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Fairness&lt;/span&gt;. "According to research by Tina Fawcett of the Environmental Change Institute at Oxford University, personal emissions among Britons currently vary by a factor of up to 12 -- so capping everyone's energy use at the same level might be a recipe for all sorts of trouble, in the nation that brought us soccer hooligans. But low-carbon users who don't drive or fly much would be able to sell their excess units to Hummer owners, jet-setters, and others who refuse to get on the energy-reduction bandwagon." It seems like the market-based system would reward and punish everyone duly. But like any system, Domestic Tradeable Quotas is likely to have loopholes. The rich don't pay taxes progressively so why would they dish out for the Hummer emissions either? The bill's sponsor, Member of Parliament Colin Challen says that "a voluntary approach will only get through to about 20 percent of the population." Even in the new system, this 20% will pay their carbon credits dutifully while the remaining 80% of us will try to wiggle our way out of it.&lt;br /&gt;&lt;/li&gt;  &lt;/ul&gt;British policy makers acknowledge that "personal carbon allowances are a very attractive intellectual idea. The implementation would potentially be very expensive, but that shouldn't stop us from looking at the arguments."&lt;br /&gt;&lt;br /&gt;While the information management and usability problems are solvable — create a nationwide database, produce and distribute the carbon cards, and make sure the whole system runs smoothly — the biggest job likely is to convince citizens to support the idea.&lt;br /&gt;&lt;br /&gt;Resources:&lt;br /&gt;&lt;a href="http://news.bbc.co.uk/2/hi/uk_news/4645031.stm"&gt;BBC News "Personal carbon quotas considered"&lt;br /&gt;&lt;/a&gt;&lt;a href="http://www.grist.org/news/maindish/2005/08/09/wendling-carboncards/"&gt;Mike Wendling's story "In the Cards"&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Categories: &lt;a href="http://del.icio.us/antarctic74/tradable" rel="tag"&gt;tradable&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/domestic" rel="tag"&gt;domestic&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/quotas" rel="tag"&gt;quotas&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/carbon" rel="tag"&gt;carbon&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/dioxide" rel="tag"&gt;dioxide&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/emissions" rel="tag"&gt;emissions&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-112482474844435241?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/112482474844435241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=112482474844435241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112482474844435241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112482474844435241'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/08/day-trading-on-carbon.html' title='Day trading on carbon'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-112320006959702718</id><published>2005-08-04T19:53:00.002-04:00</published><updated>2010-03-09T06:35:31.802-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Innovative user experience pays big rewards</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/4380/972/320/jetblue.jpg" alt="JetBlue" /&gt;BusinessWeek has a &lt;a href="http://images.businessweek.com/ss/05/07/toolbox/source/1.htm"&gt;special report&lt;/a&gt; on how corporations struggle with innovation. Despite the huge sums of money spent on R&amp;amp;D, surprisingly few innovations are created.&lt;br /&gt;&lt;br /&gt;Some companies manage better. iPod and JetBlue are examples of products where the focus was placed on previously overlooked areas of user and consumer experience. With iPod Apple created a line of products that is easy to use, wonderful to see and touch, and clearly differentiated in the marketplace. JetBlue focused on the traveler's experience.&lt;br /&gt;&lt;br /&gt;What are the lessons learned from successful companies, then?&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Open up&lt;/span&gt;. Share your R&amp;amp;D with outsiders. Bring in design and innovation expertise. Send your top execs shopping for the products you sell.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Lead the revolution&lt;/span&gt;. Champion a cultural revolution inside the company and scatter designers to work with engineering, marketing and branding units.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Change managers&lt;/span&gt;. Hire more anthropologists and social psychologists, fewer engineers.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Change the incentives&lt;/span&gt;. Reward new ideas, customer satisfaction and top-line revenue.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Turn the innovation process upside down&lt;/span&gt;. Innovation in the 90s meant developing new technologies in the lab, designing a product and tossing it at consumers. Innovation today means observing consumers to discover what they want, then satisfying them with new products.&lt;/li&gt; &lt;/ul&gt; The last point is almost painfully accurate. It is all too commonplace to confuse innovation with technology. Tech-centric innovation merely generates feature-ridden products that can frustrate consumers. Instead, start by analysing the problem, then develop a solution to it. The solution may be a technical one but it doesn't have to be. As long as it makes life easier for enough people it will sell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-112320006959702718?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/112320006959702718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=112320006959702718' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112320006959702718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112320006959702718'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/08/innovative-user-experience-pays-big.html' title='Innovative user experience pays big rewards'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-112300734347542639</id><published>2005-08-02T14:08:00.001-04:00</published><updated>2009-11-25T12:29:15.751-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='advertising'/><title type='text'>Missing Tivo guide data - advertisers' blunt counter-strike</title><content type='html'>&lt;img src="http://photos1.blogger.com/blogger/4380/972/400/directv.jpg" alt="DirecTV" /&gt;Every &lt;a href="http://www.tivo.com/"&gt;TiVo&lt;/a&gt; user knows about the 30-second skip. &lt;a href="http://customersupport.tivo.com/knowbase/root/public/tv1524.htm?"&gt;Officially denied&lt;/a&gt;, yet &lt;a href="http://hacks.oreilly.com/pub/h/491"&gt;easy to program into your TiVo&lt;/a&gt;, it allows you to skip TV commercials in 30-second increments. A typical half-hour block of TV time includes 22 minutes of programming with 6 minutes of national advertising and 2 minutes of local. Since TV stations prefer to join several spots together to make commercials whose duration is an increment of 30 seconds, you can conveniently bypass the entire commercial break by pressing the 30-second skip button a couple of times.&lt;br /&gt;&lt;br /&gt;TiVo also gives you to the option to record a First Run Only. Each episode of a popular TV show is broadcast several times. A given episode of The Daily Show with Jon Stewart, for example, runs on Comedy Central up to six times a week. With the First Run Only option, only the first airing of that episode will be recorded. This effectively allows the consumer to watch only the latest episode and to steer clear from re-runs.&lt;br /&gt;&lt;br /&gt;Advertisers don't particularly like either feature. As the average cost of producing a 30-second national TV commercial nears $350,000, courting a viewer who only records the latest episode and skips commercials is like pouring money down the drain.&lt;br /&gt;&lt;br /&gt;Largely the blame falls on the advertisers themselves. Although time-shifting technologies such as VCRs have been around for 25 years, the advertising industry hasn't developed adequate means to penetrate the shift and reach the viewer. Regrettably, they are resorting to brute force.&lt;br /&gt;&lt;br /&gt;Each channel or network is responsible for reporting episode details and their airing schedule to TiVo. TiVo organizes and distributes this &lt;span style="font-style: italic;"&gt;guide data&lt;/span&gt; to consumers, who in turn record the programs they are interested in. In theory, that is. Missing or inadequate guide data is a &lt;a href="http://www.tivocommunity.com/tivo-vb/showthread.php?t=168704"&gt;hot topic on TiVo forums&lt;/a&gt;. Comedy Central is a known offender. When a channel fails to identify each airing of an episode in the guide data, the TiVo device no longer knows which episode is the first airing and which are re-runs. Consequently, TiVo errs on the side of caution, recording all the episodes rather than risk missing the first run.&lt;br /&gt;&lt;br /&gt;People have complained about faulty guide data but nothing has been done about it. The problem happens with The Daily Show all the time, which begs the question; is it accidental or intentional? Networks don't really care about accurate guide data. They know DVR users are probably skipping the commercials anyway. However, inadequate guide data works to the advertiser's advantage as it forces viewers to manually delete the re-runs. This involves watching part of the episode, most likely the beginning where commercials from the previous program overlap. Now, repeat that six times for each recorded Daily Show episode and you have effectively created a repeat impression of the first ad spot.&lt;br /&gt;&lt;br /&gt;Coincidence? I think not.&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Categories: &lt;a href="http://del.icio.us/antarctic74/metadata" rel="tag"&gt;metadata&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/advertising" rel="tag"&gt;advertising&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-112300734347542639?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/112300734347542639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=112300734347542639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112300734347542639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112300734347542639'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/08/missing-tivo-guide-data-advertisers.html' title='Missing Tivo guide data - advertisers&apos; blunt counter-strike'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-112265373277612230</id><published>2005-07-29T11:57:00.002-04:00</published><updated>2010-03-09T06:33:35.817-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='content management'/><title type='text'>Content management conference in Boston</title><content type='html'>&lt;img src="http://www.gilbane.com/graphics2/gilbane_logo.gif" alt="" border="0" /&gt;The &lt;a href="http://www.lighthouseseminars.com/gilbane_boston_05/GeneralInformation.html"&gt;Gilbane Conference on Content Management Technologies&lt;/a&gt; is gathering in Boston November 29 - December 1, 2005. This year the focus will be "on the broad range of content technologies available for enterprise applications, including widely deployed technologies like content management and enterprise search. We will also be looking at the use and applicability of newer technologies for corporate content applications, especially blogs, wikis, RSS, and "rich internet" applications."&lt;br /&gt;&lt;br /&gt;The pre-conference tutorials alone are mouthwatering:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.lighthouseseminars.com/gilbane_boston_05/PreConference-Tutorials.html#tutoriala"&gt;Web Content Management Systems: Principles, Products &amp;amp; Practices&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="http://www.lighthouseseminars.com/gilbane_boston_05/PreConference-Tutorials.html#tutorialb"&gt;Tactics of Taxonomy Derivation: How to Build a Better Taxonomy&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;&lt;a href="http://www.lighthouseseminars.com/gilbane_boston_05/PreConference-Tutorials.html#tutorialc"&gt;Using XML &amp;amp; Single-Source Publishing to Repurpose Valuable Content&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; Not to mention the &lt;a href="http://www.lighthouseseminars.com/gilbane_boston_05/SessionDescriptions.html#keynote2"&gt;keynote debate on blog, wiki and RSS technologies&lt;/a&gt; on Wednesday afternoon.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0); font-weight: bold;"&gt;Tip!&lt;/span&gt; You can attend a keynote of your choice and get full access to the exhibit area for &lt;span style="font-weight: bold;"&gt;free&lt;/span&gt; by &lt;a href="http://www.lighthouseseminars.com/gilbane_boston_05/Registration.html"&gt;registering with the Technology Showcase option&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Categories: &lt;a href="http://del.icio.us/antarctic74/content" rel="tag"&gt;content&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/management" rel="tag"&gt;management&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/RSS" rel="tag"&gt;RSS&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/Wiki" rel="tag"&gt;Wiki&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/blog" rel="tag"&gt;blog&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-112265373277612230?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/112265373277612230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=112265373277612230' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112265373277612230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/112265373277612230'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/07/content-management-conference-in.html' title='Content management conference in Boston'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-111992832879095725</id><published>2005-06-27T22:45:00.002-04:00</published><updated>2010-03-09T06:32:09.422-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>AJAX user interaction</title><content type='html'>An &lt;a href="http://en.wikipedia.org/wiki/AJAX"&gt;AJAX&lt;/a&gt; application can send requests to a Web server to retrieve only the data that is needed. The result is a more responsive application, since the amount of data interchanged between the browser and the server is vastly reduced. However, not only the amount of data is reduced. What also lessens is the amount of feedback between the application and its user.&lt;br /&gt;&lt;br /&gt;Since there is no clearly visible page transition, the result of a user action can be hard to notice. Luke Wroblewski &lt;a href="http://www.lukew.com/resources/articles/ajax_design.asp"&gt;talks about how to communicate changes&lt;/a&gt; in the application to the user.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-111992832879095725?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/111992832879095725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=111992832879095725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111992832879095725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111992832879095725'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/06/ajax-user-interaction.html' title='AJAX user interaction'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-111963329436993133</id><published>2005-06-24T11:52:00.002-04:00</published><updated>2010-03-09T06:34:11.125-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='usability'/><title type='text'>Surgical traffic advisory</title><content type='html'>&lt;a href="http://www.flickr.com/photos/snowriderguy/17724949/"&gt;&lt;img src="http://photos12.flickr.com/17724949_b266c1ba58_m.jpg" alt="Tunnel Vision by snowriderguy" /&gt;&lt;/a&gt;Boston has had its share of traffic problems. A key part of the &lt;a href="http://www.masspike.com/bigdig/background/index.html"&gt;Big Dig project&lt;/a&gt; was to relieve congestion by replacing a six-lane elevated highway that ran through downtown Boston with an underground expressway. Today, the Central Artery/Tunnel Project's &lt;a href="http://www.masspike.com/bigdig/background/occ.html"&gt;Operations Control Center&lt;/a&gt; (OCC) "contains the most advanced electronic traffic monitoring and incident response system in the world". I got a demonstration of the system as I drove through the tunnel on I-93 from north to south.&lt;br /&gt;&lt;br /&gt;There are several exits in the I-93 tunnel that either take you back to the surface or into another tunnel leading to the airport. As I drove into the tunnel my car radio went silent and an information broadcast from the OCC took over. A crystal clear voice said that exit 22 was under construction and that drivers should take exit 23 instead. The entire FM and AM spectrum was overridden with the announcement. What was really impressive, though, is that the normal radio program came back once I had passed the dysfunctional exit 22. I was still driving in the tunnel, but since the broadcast was no longer relevant to me, the OCC returned the control of my radio.&lt;br /&gt;&lt;br /&gt;Adapting &lt;a href="http://www.useit.com/papers/heuristic/heuristic_list.html"&gt;Jakob Nielsen's usability heuristics&lt;/a&gt; to what happened, you could say the OCC did a good job in several areas:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Simple and natural dialogue&lt;/span&gt;. Dialogue should not contain information that is irrelevant. Every extra unit of information competes with relevant units of information and diminishes their relative importance. All information should appear in a natural and logical order. When a driver passes the exit, the message is no longer relevant to them so don't broadcast it.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;Prevent errors&lt;/span&gt;. Even better than good error messages is a careful design that prevents a problem from occurring in the first place. The message prevented motorists from trying to take the exit, which in turn prevented delays and kept the traffic flowing.&lt;/li&gt;   &lt;li&gt;&lt;span style="font-weight: bold;"&gt;User control and freedom&lt;/span&gt;. Users often choose system functions by mistake and will need a clearly marked "emergency exit" to leave the unwanted state without having to go through an extended dialogue. No pun intended, in this case the "emergency exit" was exit 23, the secondary route recommended in the broadcast.&lt;/li&gt; &lt;/ul&gt; This type of surgical broadcasting that targets only those drivers who find the message relevant is an excellent strategy. I certainly don't mind having my radio program interrupted if the message is brief and timely. Well done OCC!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-111963329436993133?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/111963329436993133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=111963329436993133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111963329436993133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111963329436993133'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/06/surgical-traffic-advisory.html' title='Surgical traffic advisory'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-111938020658255640</id><published>2005-06-21T14:42:00.001-04:00</published><updated>2009-11-25T12:31:58.579-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><title type='text'>Peel-and-stick metal</title><content type='html'>&lt;a href="http://www.alsacorp.com/data_sheet/images/products/large/chromefxsh_24.jpg"&gt;&lt;img src="http://alsacorp.com/products/sheetingfx/showcase/chromefxsh_24.jpg" alt="Brushed aluminum applied on speaker cabinet" /&gt;&lt;/a&gt;&lt;a href="http://alsacorp.com/products/sheetingfx/sheetingfx.htm"&gt;Alsa's FXSheeting&lt;/a&gt; is a thin layer of metal coated with a plastic laminate. It transforms pretty much anything into a metal surface. Very cool idea. It is available in brushed brass, aluminum and copper, or mirror aluminum and copper finishes. You can order it by the foot and install like contact paper; just peel and stick.&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://alsacorp.com/products/sheetingfx/shfx_video.htm"&gt;video&lt;/a&gt; on the site. They are applying metal surfaces to an oven, fridge, microwave, speakers...&lt;span class="technoratitag"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-111938020658255640?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/111938020658255640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=111938020658255640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111938020658255640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111938020658255640'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/06/peel-and-stick-metal.html' title='Peel-and-stick metal'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-111904537197762752</id><published>2005-06-19T15:40:00.002-04:00</published><updated>2010-03-09T06:34:27.844-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Intellectual property rights of design</title><content type='html'>&lt;img src="http://www.highbrowfurniture.com/tables/products/PB/?PB.48Z5.jpg" alt="Nelson platform bench" /&gt;This is the Nelson platform bench. I love its simple, utilitarian design. The blonde maple looks great. It can act as a table, a seat, a stereo rack, anything. Timeless modernism, eh?&lt;br /&gt;&lt;br /&gt;Now here's what bugs me. I want the bench but it &lt;a href="http://froogle.google.com/froogle?q=%22nelson%20platform%20bench%22&amp;amp;hl=en&amp;amp;lr=&amp;amp;sa=N&amp;amp;tab=wf"&gt;costs around $600&lt;/a&gt;. I dabble with carpentry so I could probably make a good replica for $200. Can I simply copy the design and make my own?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/George_Nelson_%28designer%29"&gt;George Nelson&lt;/a&gt; designed it for &lt;a href="http://en.wikipedia.org/wiki/Herman_miller"&gt;Herman Miller&lt;/a&gt; in 1948, so Miller owns the design and can manufacture it for commercial purposes. What about private, domestic use? I don't care about selling it. I would use it myself and enjoy its clean lines.&lt;br /&gt;&lt;br /&gt;Is copying a design the same as downloading a ripped mp3? Both are for "private, domestic use." I think making the bench would be more like learning to play a song yourself.&lt;br /&gt;&lt;br /&gt;Has anyone made a Nelson? How did it turn out?&lt;br /&gt;&lt;br /&gt;&lt;span class="technoratitag"&gt;Categories: &lt;a href="http://del.icio.us/antarctic74/IPR" rel="tag"&gt;IPR&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/design" rel="tag"&gt;design&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/furniture" rel="tag"&gt;furniture&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-111904537197762752?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/111904537197762752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=111904537197762752' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111904537197762752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111904537197762752'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/06/intellectual-property-rights-of-design.html' title='Intellectual property rights of design'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11804845.post-111835309044746156</id><published>2005-06-19T15:38:00.002-04:00</published><updated>2010-03-09T06:35:03.813-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diy'/><title type='text'>Hanging planter</title><content type='html'>&lt;img src="http://photos1.blogger.com/img/273/4530/150/CIMG0039.jpg" /&gt;You may have seen ads for the &lt;a href="http://www.gardeners.com/Shopping/sell.asp?ProdGroupID=18413&amp;amp;SC=XNET8419"&gt;Topsy-Turvy upside-down planter&lt;/a&gt; sold on the Web. It is a clever way to grow tomatoes and other vegetables because it eliminates the need for a backyard garden plot, stakes, weeding, hole digging, worms and in-ground insects. The planter also looks cool on a deck or balcony and is sure to capture visitors' attention.&lt;br /&gt;&lt;br /&gt;Here’s how to make your own upside-down planter from materials around the house. It likely won’t cost you a penny and will only take 15 minutes. Click the thumbnails for larger images.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Materials needed&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;&lt;a href="http://photos1.blogger.com/img/273/4530/800/CIMG00021.jpg"&gt;&lt;img src="http://photos1.blogger.com/img/273/4530/150/CIMG00021.jpg" border="0" /&gt;&lt;/a&gt;Empty ½ gallon milk container.&lt;br /&gt;Other plastic containers and bottles work too. Just make sure they are &lt;a href="http://www.survival-center.com/foodfaq/ff17-equ.htm#FG"&gt;food grade plastic&lt;/a&gt; so that the plant growing inside is safe to eat.&lt;br /&gt;&lt;/li&gt;   &lt;li&gt;Scissors&lt;/li&gt;   &lt;li&gt;Chain or string&lt;/li&gt;   &lt;li&gt;2 hooks or nails&lt;/li&gt;   &lt;li&gt;Paint (optional)&lt;/li&gt;   &lt;li&gt;Soil&lt;/li&gt;   &lt;li&gt;Newspaper&lt;/li&gt;   &lt;li&gt;Rubber band&lt;/li&gt;   &lt;li&gt;Plant seedling (tomato, bell pepper, chili pepper). Choose a variety with small fruit.&lt;br /&gt;&lt;/li&gt; &lt;/ul&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;Note!&lt;/span&gt; The planter is not designed to grow plants from seed. You should use a plant seedling that is ready for transplanting outdoors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Construction&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Cut off the bottom of the milk container two inches from the bottom. This will become the lid of your planter.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://photos1.blogger.com/img/273/4530/800/CIMG0004.jpg"&gt;&lt;img src="http://photos1.blogger.com/img/273/4530/150/CIMG0004.jpg" border="0" /&gt;&lt;/a&gt;In the remaining container, cut two holes in opposite corners about 1 inch from rim.&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 153, 0);"&gt;&lt;br /&gt;Tip.&lt;/span&gt; Don’t make holes on the side where the handle is. This way the handle will be hidden in the back when you hang the planter.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In the bottom piece you cut off, cut two slots in opposite corners. The chain or string will run up through the slots.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Optional step: Cover your work area with newspapers and paint the planter. Spray paint is easiest. Spray two or more layers while letting the paint dry in between the layers. I painted mine dark green to make it look more like a planter and less like milk bottle. Also, plant roots like to grow in dark.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;Important!&lt;/span&gt; Don’t paint the inside of the planter. The paint may contaminate the soil and find its way into the plant and eventually into your body.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://photos1.blogger.com/img/273/4530/800/CIMG00222.jpg"&gt;&lt;img src="http://photos1.blogger.com/img/273/4530/150/CIMG00221.jpg" border="0" /&gt;&lt;/a&gt;After the paint has dried, attach the chain or string into the holes you made in the bigger piece. Use needle nose pliers to open and close the chain loops.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Screw the hooks (or nails) into a terrace beam or other wood surface on the sunny side of your house.&lt;/li&gt; &lt;/ol&gt; &lt;span style="font-weight: bold;"&gt;Planting&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;   &lt;li&gt;&lt;a href="http://photos1.blogger.com/img/273/4530/800/CIMG00271.jpg"&gt;&lt;img src="http://photos1.blogger.com/img/273/4530/150/CIMG0027.jpg" border="0" /&gt;&lt;/a&gt;Wrap the plant into a sheet of newspaper to protect it as you push it through the container opening. Use a rubber band to hold the newspaper around the plant.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Holding the plant root ball in your hand, push the plant through the bottom of the container and out from the top opening. Help with your other hand to guide the rolled up newspaper through the opening.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Firmly fill the planter with moist soil. Leave 1 inch from the top empty. Make sure you put soil everywhere around the root ball.&lt;/li&gt; &lt;/ol&gt;&lt;span style="font-weight: bold;"&gt; Hanging and watering&lt;/span&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/273/4530/800/CIMG0042.jpg"&gt;&lt;img src="http://photos1.blogger.com/img/273/4530/150/CIMG0042.jpg" border="0" /&gt;&lt;/a&gt;Put the lid on and hang the planter from the hooks. Lift the lid and carefully water the plant. As some of the water will run through, it is a good idea to place a potted plant underneath to catch the overflow.&lt;br /&gt;&lt;br /&gt;The plant will adapt to the upside-down position in a few days. It turns around and starts to grow up towards the sun. &lt;a href="http://en.wikipedia.org/wiki/Gravitropism"&gt;Learn why&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/img/273/4530/800/CIMG0017.jpg"&gt;&lt;img src="http://photos1.blogger.com/img/273/4530/150/CIMG0017.jpg" border="0" /&gt;&lt;/a&gt;More info:&lt;br /&gt;&lt;ul&gt;   &lt;li&gt;JS Online: &lt;a href="http://www.jsonline.com/entree/col/may03/142051.asp"&gt;Hanging tomatoes turn growing upside down&lt;/a&gt;&lt;/li&gt;   &lt;li&gt;Garden Gate Tips: &lt;a href="http://www.gardengatetips.com/etips/041221.html"&gt;PVC hanging planter&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;span class="technoratitag"&gt;Categories: &lt;a href="http://del.icio.us/antarctic74/gardening" rel="tag"&gt;gardening&lt;/a&gt;, &lt;a href="http://del.icio.us/antarctic74/permaculture" rel="tag"&gt;permaculture&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;Update 1:&lt;/span&gt;  It's July 23, about a month since I moved the tomato seedlings into the hanging planters. Some fruit are beginning to pop up. Cherry tomatoes don't grow any bigger than in the picture, which is a perfect size for the hanging planter. Bigger tomatoes might weigh down the stems.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4380/972/1600/CIMG0303.jpg"&gt;&lt;img style="cursor: pointer; float: none;" src="http://photos1.blogger.com/blogger/4380/972/200/CIMG0303.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4380/972/1600/CIMG0301.jpg"&gt;&lt;img style="cursor: pointer; float: none;" src="http://photos1.blogger.com/blogger/4380/972/200/CIMG0301.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="technoratitag"&gt;&lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt;Update&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 102, 0);"&gt; 2:&lt;/span&gt; It's September 15. I have harvested about one dry pint of cherry tomatoes &lt;/span&gt;&lt;span class="technoratitag"&gt;&lt;/span&gt;&lt;span class="technoratitag"&gt;from the two hanging planters. To get an idea of how well they yield compared to ground plants, I planted the same variety on the ground. The ground plant has yielded a much larger crop, maybe four times as many tomatoes.&lt;br /&gt;&lt;br /&gt;I think the culprit for the small yield is watering. Since the hanging planters don't hold much soil, the soil inside the container dries easily. I have had to water them often, pouring the water in slowly so the dry soil would hold it instead of letting it run out the bottom right away.&lt;br /&gt;&lt;br /&gt;One solution to the watering problem would be to install a drip feed that keeps the soil moist at all times. I am thinking of a water tank such as a soda bottle suspended above the hanging planter with a drip feed regulator. This is an enhancement I need to try next summer.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11804845-111835309044746156?l=finnotype.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://finnotype.blogspot.com/feeds/111835309044746156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11804845&amp;postID=111835309044746156' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111835309044746156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11804845/posts/default/111835309044746156'/><link rel='alternate' type='text/html' href='http://finnotype.blogspot.com/2005/06/hanging-planter_19.html' title='Hanging planter'/><author><name>Antti Hietala</name><uri>http://www.blogger.com/profile/11746937085383393559</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://lh3.google.com/antti.hietala/RwE_TUYUKFI/AAAAAAAAAnc/F8vxubDcndg/antti_photo.jpg'/></author><thr:total>5</thr:total></entry></feed>
