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

    <channel>
    
    <title>andrewingram full&#45;entry feed</title>
    <link>http://www.andrewingram.net</link>
    <description></description>
    <dc:language>en</dc:language>

    <dc:rights>Copyright 2008</dc:rights>
    <dc:date>2008-01-25T20:50:01+00:00</dc:date>
    <admin:generatorAgent rdf:resource="http://www.pmachine.com/" />
    


    <item>
      <title>Do what you like to my CSS, but stay out of my HTML</title>
      <link>http://www.andrewingram.net/articles/do_what_you_like_to_my_css_but_stay_out_of_my_html/</link>
      <guid>http://www.andrewingram.net/articles/do_what_you_like_to_my_css_but_stay_out_of_my_html/#When:20:50:01Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>With all the noise over the revelations from Microsoft this week concerning standards rendering in IE8 I&#8217;ve found it hard to collect my thoughts on the subject, but I&#8217;ll give it a try anyway.</p>


 <h3>Body</h3>	<p>This week Microsoft revealed that to trigger standards rendering in IE8, web authors will need to use a new meta tag to specify which version of the IE rendering engine to use. Alternatively (and this wasn&#8217;t immediately apparant) authors can just use an unknown doctype such as the HTML5 one which would automatically trigger standards mode. I&#8217;ll say it outright that I&#8217;m not a fan of the idea but I can see why it&#8217;s been done, I find it arrogant of Microsoft to demand special treatment when we&#8217;ve already had to put up with quite a lot of IE&#8217;s rubbish over the years. This is coming from someone who is normally an apologist for Microsoft, normally I take the viewpoint that whilst making things work in IE is a pain it&#8217;s usually relatively straightforward once you reach a certain level of experience and become aware of the problem areas.</p>

	<p>But there is something that is bothering me alongside this, why the hell do we keep making changes to our structural/context layer (HTML) in order to control how the presentation layer (CSS) behaves? Why should my use of a valid doctype mean that my CSS magically works properly? A doctype is used to validate the structure of an xml document, it has nothing to do with how it&#8217;s displayed, and why are we still using doctypes anyway? XML Schema Definitions are much easier to develop, from what I gather they give you a lot more flexibility and they&#8217;re really easy to understand. This isn&#8217;t a rant about doctypes though, this is a rant about me having to change one area of my code to affect how a completely different part of my code performs.</p>

	<p>So we have to use proper doctypes to get IE6 and IE7 to use CSS more correctly than IE5, but that&#8217;s not enough &#8211; we also have to add conditional comments into our HTML so that we can deliver special CSS to them to clean up the things that IE still can&#8217;t do right. Now we have IE8 to look forward to, but now we have to add even more to the head of our documents to trigger the probably-still-not-right-but-getting-closer rendering mode in this new version.</p>

	<p>Why the hell aren&#8217;t we shoving all this information in our CSS instead? If this information is controlling how the CSS works surely it would make sense to configure it there? In a proper deployment environment it&#8217;s a piece of cake to update CSS because it&#8217;s generally served from a different web server to the web application, we can easily tweak the CSS for new browsers without so much as having to reload/redeploy anything. Quite frankly, whilst I prefer clean CSS due to being a bit of a perfectionist, if I have to stick all this nonsense somewhere it&#8217;d rather it be in the CSS than the HTML. I consider it much more important to have valid and streamlined HTML than CSS.</p>

	<p>Just a thought.</p>


 ]]></description>
      <dc:subject>CSS, HTML, Web Standards</dc:subject>
      <dc:date>2008-01-25T20:50:01+00:00</dc:date>
    </item>



    <item>
      <title>Time to play with new things</title>
      <link>http://www.andrewingram.net/articles/time_to_play_with_new_things/</link>
      <guid>http://www.andrewingram.net/articles/time_to_play_with_new_things/#When:23:56:00Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>A quick experiment to try out new features in Safari.</p>


 <h3>Body</h3>	<p>The latest builds of WebKit have added some pretty nice new CSS properties &#8211; namely rotations and embedded fonts, so I decided to have a quick play with them. I didn&#8217;t spend very long on this (rushing to get things done before Christmas) but I hope it inspires other people to start exploring these features. I know we can&#8217;t use this stuff in production sites yet, but I have a feeling that if we can come up with some truly kick-ass demonstrations we might be able to convince the other browser manufacturers that these properties are worth implementing.</p>

	<p>I would love for someone to come up with a really good graphic novel style design, I had a go but I had no reference materials and didn&#8217;t really put in the time it deserved.</p>

	<p><a href="http://etc.andrewingram.net/nextgen/">Here&#8217;s my example</a> (Obviously it requires the latest build of WebKit to run).</p>


 ]]></description>
      <dc:subject>CSS, Design</dc:subject>
      <dc:date>2007-12-20T23:56:00+00:00</dc:date>
    </item>



    <item>
      <title>Readable URL Slugs</title>
      <link>http://www.andrewingram.net/articles/readable_url_slugs/</link>
      <guid>http://www.andrewingram.net/articles/readable_url_slugs/#When:22:35:03Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>Just a quick few words about producing readable URL slugs</p>


 <h3>Body</h3>	<p>When I read around for methods of converting a piece of text (such as a blog entry title) to a URL-friendly slug, I generally just find one-line regular expression replace functions without any real explanation of what&#8217;s going on. So here&#8217;s a basic overview of what such an algorithm should be doing:</p>

	<ol>
	<li>You need to be aware of what characters are generally allowed in URL segments (<a href="http://www.blooberry.com/indexdot/html/topics/urlencoding.htm">here&#8217;s a good guide</a>), basically any letters or numbers are allowed. You can probably also allow a single quote (no double quotes) as the only piece of punctuation available to you, most other punctuation is reserved or considered dangerous to use.</li>
		<li>Choose a character for spaces, normal spaces aren&#8217;t allowed (they are actually but they have to be encoded so they end up being quite ugly). Realistically you can use underscores and hyphens. The preference is hyphens because they don&#8217;t get disguised if written as hyperlinks.</li>
		<li>Convert your text to lower-case. Your URLs should be consistently cased for usability and lower-case is the easiest and most attractive option. If an upper-case version of a URL (or part of a URL) is accessed it should redirect the user to the canonical lower-case version.</li>
		<li>Make sure you only don&#8217;t have two spacing characters in a row, this shouldn&#8217;t be an issue if you&#8217;re careful about the order of each step</li>
	</ol>
	<ol>
	<li>Depending on preference and URL length you might want to remove certain words such as prepositions to keep the slug as concise as possible whilst still being relatively meaningful

	<p>In Java, the following method call is probably a good starting point:</p>

<pre><code>replaceAll("[^a-z0-9']+", "-")</code></pre>

	<p>The Ruby equivalent would be</p>

<pre><code>gsub(/[^a-z0-9']+/, "-")</code></pre>

	<p>You&#8217;ll need to do some other things before and after the above methods but they represent the key part of the algorithm.</p>

	<p>Note: I&#8217;m uncertain on the best practice for using the vertical single quote in slugs. I couldn&#8217;t see anything that said they&#8217;re a bad idea, but I imagine most people would prefer to just remove them. This raises the issue of whether to collapse the single quotes or to replace them with hyphens.</p>


 ]]></description>
      <dc:subject>Java, Programming, Ruby, URL, Usability</dc:subject>
      <dc:date>2007-10-16T22:35:03+00:00</dc:date>
    </item>



    <item>
      <title>Readability, Uniqueness, Hackability and Meaning in URL Design</title>
      <link>http://www.andrewingram.net/articles/readability_uniqueness_hackability_and_meaning_in_url_design/</link>
      <guid>http://www.andrewingram.net/articles/readability_uniqueness_hackability_and_meaning_in_url_design/#When:00:48:01Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>In this article I discuss the development of usable URLs and outline some guidelines that will aid developing them. I also briefly touch on the importance of choosing development frameworks that enable decent URLs.</p>


 <h3>Body</h3>	<p><strong>Update on 13th October 2007:</strong> Mike Schinkel made me aware of some misused terminology, so I&#8217;ve updated the article to amend this.<br />
<strong>Update on 19th October 2007:</strong> A user at Reddit highlighted how bad my first sentence was, I&#8217;ve rewritten it a bit.</p>

	<h4>Introduction</h4>

	<p>URL design is arguably one of the most important areas of website developement. Not only do URLs generally have huge visual priority in web browsers but they&#8217;re also shown on search result listings and get used for matching search terms. Let&#8217;s not forget the usability factors, what does a bunch of seemingly meaningless query strings and numerical database keys tell your users about where they are in the site? This is just the tip of the iceberg when it comes to reasons for investing resources in developing decent URL schemas, yet it&#8217;s only in the last couple of years that we&#8217;ve seen the emergence of web development frameworks that truly put an emphasis on them. In the slower-to-upgrade enterprise world most sites are still running on frameworks that produce some truly ugly URLs.</p>

	<p>The next problem is the URLs people choose once they decide to switch away from query parameter infested schemas to ones that use readable URL segments to identify pages. Simply put, just converting your parameters to friendly pieces of text isn&#8217;t enough; you may get improved search rankings from your new found keywords but all you&#8217;ve really done is disguise the problem and search rankings should never be your primary aim in URL design.</p>

	<h4>4 Principles of URL design</h4>

	<p>Having read a number of articles on the subject as well as exploring my own views on the matter I&#8217;ve come up with what I believe to be the 4 most important aspects of URL design:</p>

	<h5>URLs must be Readable</h5>

	<p>Just by reading a URL a user should be able to make a fairly good guess as to what they will find if they visit it. Titles (converted to a readable slug format so that those nasty %20 things aren&#8217;t visible everywhere) should be used instead of numerical ids and the URL should make it clear whereabouts in the overall site structure the resource is.</p>

	<h5>Pages with unique content must have Unique URLs</h5>

	<p>A lot of factors come into play here, the first is that the same content shouldn&#8217;t have more than one URL, you should choose your preferred URL for each page on your site and if a second is required it should simply be done as a permanent redirect. A search engine will follow the redirect and only index the canonical URL. This applies to the www sub- domain which the majority of websites have set up as optional. Use Apache&#8217;s mod_rewrite (or equivalent) to add a permanent redirect that forwards the request to the non-www URL (or the other way round if you really want the www part). Localisation should also include the locale somewhere in the URL so that the preferred localised version can be bookmarked (not everybody has their browser configured to use their preferred locale). If a page has unique content it must not rely on sessions or cookies to load this information otherwise it will be invisible to search engines, Brad Fults discusses multilingual URL design in &#8220;<a href="http://h3h.net/2007/01/designing-urls-for-multilingual-web-sites/">Designing URLs for Multilingual Web Sites</a>&#8221;, his conclusions may not match your own but the article does an excellent job explaining some of your options.</p>

	<h5>URLs must be Hackable</h5>

	<p>This follows on from readability and the idea that a URL is not only a location but also a map &#8211; much akin to breadcrumb navigation (&#8220;<a href="http://developer.yahoo.com/ypatterns/pattern.php?pattern=breadcrumbs">Breadcrumb Pattern at Yahoo</a>&#8221;). One of the main features of successful breadcrumb navigation is that it doesn&#8217;t represent the route you took to get to the page but rather the route home or to other pages. Every URL is constructed from a number of segments separated by forward slashes, for a URL to be hackable the user must be able to repeatedly remove the last segment and also arrive at a valid page that makes sense within the context of the URL. The user must also be able to swap in alternative segment that make sense, like changing &#8220;2007&#8221; to &#8220;2006&#8221; or changing &#8220;reviews&#8221; to &#8220;news&#8221;. This sounds straightforward enough, but the biggest stumbling block is introducing new URL segments to resolve namespace conflicts (what if someone gives an article a title that causes conflict with an existing URL?), this is a bad thing because it means you now have a URL (everything up to and including your new segment) that doesn&#8217;t have a page behind it. The solutions range from refactoring your URL schema to simply preventing new content from using existing URLs programmatically.</p>

	<h5>URLs must be meaningful</h5>

	<p>Put simply, every single part of your URL should not only mean something to the user but also to your system. Let&#8217;s say that instead of just using your article title you&#8217;re using the numerical id as well, your system may not actually care what the text is as long as the id is right. This violates the idea of unique URLs because now every single article effectively has unlimited URL possibilities. Similarly, keywords shouldn&#8217;t be stuffed into the URL if they have no actual effect on what page is returned by the system. If a user gets any part of a URL wrong they should be served a 404 page which ideally would list the possible URLs the user may have been looking. By removing useless parts you also ensure that your URL is only as long as it needs to be, long URLs almost always become unclickable if put in emails because readers break the line before the running the algorithm that converts the URLs to clickable links.</p>

	<h4>Conclusion</h4>

	<p>The 4 principles outlined above represent my condensed findings on how ideal URL schemas should be constructed, in reality it&#8217;s not quite as simple as following 4 relatively straightforward guidelines (and there are probably a number of factors I&#8217;ve overlooked that may not fit within the 4 areas) but my opinion is that URL design is easily important to justify the work that may go into programming a system that allows good design. In my experience some web development frameworks make it unreasonably difficult to develop decent URLs whilst others can even make it enjoyable, this ease of URL development should be considered an important factor in framework choice.</p>

	<p>I have deliberately refrained from mentioning SEO directly until now, I have no objections to SEO but I feel that if any design decision is made purely for SEO purposes you risk adversely affecting the user experience. However, applied correctly these principles also go hand-in-hand with optimising your URLs for search engines. In fact, you can find the majority of what I&#8217;ve said in various SEO articles just with different motivations behind the decisions. My point was to emphasise the importance of proper URL design and highlight that even if your site is so successful that you don&#8217;t need to worry about SEO you still need to worry about the user experience and therefore URLs.</p>

	<p>Thanks to <a href="http://sonspring.com">Nathan Smith</a> for helping me out with some thoughts regarding this article. Andrew Ingram is aware that his site doesn&#8217;t remotely follow his guidelines but promises to try harder in the future.</p>


 ]]></description>
      <dc:subject>Accessibility, Programming, URL, Usability</dc:subject>
      <dc:date>2007-10-07T00:48:01+00:00</dc:date>
    </item>



    <item>
      <title>Question Concerning Django and Templates</title>
      <link>http://www.andrewingram.net/articles/question_concerning_django_and_templates/</link>
      <guid>http://www.andrewingram.net/articles/question_concerning_django_and_templates/#When:23:19:00Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>This is a request for help from all the Django users out there, it&#8217;s about using different templates for different types of article in a blog or CMS system</p>


 <h3>Body</h3>	<p>There&#8217;s a project I&#8217;m working on that I think could really benefit from switching to <a href="http://www.djangoproject.com/">Django</a> primarily due to its powerful admin system, but there are some requirements that i&#8217;m not sure can easily be solved. I can think of ways to solve it using a hand-coded admin system but that removes the main benefit of making an immediate switch.</p>

	<h4>The Problem</h4>

	<p>The system requires that different types of content be deployed regularly using a number of significantly different templates. They are different to the extent that an admin panel for adding content would have different form fields for each template, i.e. some templates might just use one textarea whilst others might use a number of text areas and some text fields and image selection fields. Can this kind of thing be done easily (or with an acceptable level of difficulty) using Django and ideally within the auto-admin itself?</p>

	<p>If I were to try and solve this problem in another programming language or without using the Django admin I would do it as follows:</p>
	<ul>
	<li>A folder would contain all the templates as html files</li>
		<li>Editable regions for each template would be defined using some kind of commenting syntax that would allow preview content to be shown if the template was loaded in a browser</li>
		<li>The system would parse the template when it&#8217;s requested and generate a form based on the properties of each editable region</li>
		<li>When the content is saved the form content would be converted to a map of labels to content and stored to a single field in a database table</li>
	</ul>
	<ul>
	<li>When the page is rendered that data would be retrieved, parsed and inserted into the page, replacing all the comments with real content.

	<p>The reason editable regions have to be defined is that the templates are quite complex and we don&#8217;t want people accidentally breaking stuff by forcing them to work with the template html.</p>

	<p>I&#8217;m open for suggestions on better ways to approach this problem, both for non-Django and Django usage (since even if we solve it for Django we&#8217;d need a way to do basically the same thing in non-Django apps)</p>


 ]]></description>
      <dc:subject>Django, Programming, Usability</dc:subject>
      <dc:date>2007-09-30T23:19:00+00:00</dc:date>
    </item>



    <item>
      <title>Undo Form Reset for kids who can&#8217;t reset good</title>
      <link>http://www.andrewingram.net/articles/undo_form_reset_script_for_kids_who_cant_reset_good/</link>
      <guid>http://www.andrewingram.net/articles/undo_form_reset_script_for_kids_who_cant_reset_good/#When:01:10:02Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>It doesn&#8217;t happen often, but occasionally we all accidentally hit the reset button on a web form and lose all of what we just spent time typing out. I&#8217;ve written a little bit of javascript that makes it possible to recover from these disasters.</p>


 <h3>Body</h3>	<p>I&#8217;m a big believer that if the user manages to screw something up whilst using some software it&#8217;s the fault of the software developers rather than the user. In his recent article &#8220;<a href="http://www.alistapart.com/articles/neveruseawarning/">Never Use a Warning When you Mean Undo</a>&#8221; Aza Raskin highlighted the need for an undo buffer rather than a warning prior to making a mistake, the reasoning being that users become accustomed to ignoring warnings &#8211; especially if it&#8217;s regarding a task they perform often, and that recoverability is a key area of software usability. Web applications have long suffered from a general lack of undo functionality and it&#8217;s something I&#8217;m keen to take a look at addressing in future projects, but that&#8217;s for another day.</p>

	<p>HTML forms often have a reset button, this is a native html control that allows a user to reset the contents of a web form to its starting state. I&#8217;m not too concerned with the use case for such reset buttons &#8211; I can&#8217;t imagine getting so much wrong in entering a form that it&#8217;s easiest just reset <em>everything</em>, but let&#8217;s assume you have a valid reason to include a reset button and so there it is in your form. First issue is that these buttons are usually right next to the submit buttons and have the same appearance (Luke Wroblewski looks at the effect of these types of buttons in &#8220;<a href="http://www.lukew.com/resources/articles/PSactions.asp">Primary &#38; Secondary Actions in Web Forms</a>&#8221;), second problem is that if you accidentally hit this button the majority of web browsers (if not all) won&#8217;t let you undo this action (you can select a text field and undo changes to that, but as far as I can tell you&#8217;re pretty much stuck with other kinds of inputs).</p>

	<p>With this problem in mind I had a go at writing a simple bit of javascript (enabled by jQuery) that looks at all the forms in a page with the class of &#8220;undo-reset&#8221; and captures events on any reset buttons it finds. It&#8217;s fairly straightforward so I won&#8217;t go into too much detail but basically it adds a short bit of text at the end of the form alerting the user that the form has been reset and provides the option to reverse the change. It makes use of the jQuery forms and deserialize plugins to store and restore the contents of the form.</p>

	<p>You can try it out <a href="http://www.andrewingram.net/sandbox/FormResetUndo/">on the example page</a></p>

	<p>Please let me know of any issues you find or any improvements you can suggest. I imagine it could easily be made into a greasemonkey script that you can apply to any forms you like.</p>


 ]]></description>
      <dc:subject>Javascript, jQuery, Usability</dc:subject>
      <dc:date>2007-09-30T01:10:02+00:00</dc:date>
    </item>



    <item>
      <title>Be Careful with jQuery</title>
      <link>http://www.andrewingram.net/articles/be_careful_with_jquery/</link>
      <guid>http://www.andrewingram.net/articles/be_careful_with_jquery/#When:22:14:00Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>jQuery is a fantastic Javascript library but it also has the tendency to make it a little bit too easy to write inefficient code.</p>


 <h3>Body</h3>	<p>Let&#8217;s get this out of the way first; I love <a href="http://www.jquery.com">jQuery</a>, it makes <acronym title="Document Object Model">DOM</acronym> manipulation straightforward and has just the right level of involvement for a Javascript framework. Basically if you&#8217;re doing nothing particularly fancy, you need nothing more than the jQuery Core and you could reasonably find yourself using most parts of the core functionality without being guilty of going a bit too crazy with Javascript functionality.</p>

	<p>The jQuery selectors are fast, and they seem to keep getting faster. It&#8217;s got to the point where using a jQuery selector is only marginally slower than using the native DOM functions.</p>

	<p>The problem is with chaining. As one of jQuery&#8217;s most praised features chaining is a mixed blessing, you can do a lot of powerful things in just one line using it but chances are you&#8217;ve solved the problem in a way that&#8217;s far from efficient. Each time you add another link to the chain you are effectively adding another loop that must be iterated over; in just a few short steps you will probably have added a lot of algorithmic complexity and unnecessary repetition to your code.</p>

	<p>There are a few tricks you can use to optimise your code (this applies to any coding, but I&#8217;ve found jQuery makes it a little bit too easy to be lazy):</p>
	<ul>
	<li>Cache repeated selections, if there&#8217;s a selector that you always find yourself using, save the result to a variable &#8211; this means the actual selection only gets run once.</li>
		<li>If you know the actual DOM functions and they&#8217;re safe to use in all browsers you should probably use them, they&#8217;ll be faster. This is especially important if the function is inside a loop.</li>
		<li>In general it&#8217;s good to minimize your result set as soon as possible so that you are working on less data, but in jQuery this might mean that you are running an extra chained function when you don&#8217;t really need to. Say you are doing .filter(&#8220;span&#8221;).each(fn), you can combine this into a single .filter(fn), and just modify your inner function to ignore span element.</li>
	</ul>
	<ul>
	<li>Don&#8217;t forget other coding tricks. There are thousands of ways to improve algorithms and eliminate unnecessary loops but it&#8217;s easy to forget about them when enjoying the simplicity and elegance that jQuery provides. You may end up with code that&#8217;s a bit more verbose (okay, often it will be a <em>lot</em> more verbose) but users that are on machines slower than the ones you test on will thank you.

	<p>Feel free to contribute any other tricks you&#8217;ve come across that improve the performance of jQuery-based algorithms</p>


 ]]></description>
      <dc:subject>Javascript, jQuery</dc:subject>
      <dc:date>2007-09-25T22:14:00+00:00</dc:date>
    </item>



    <item>
      <title>Generating Sprite Navigation from Fireworks</title>
      <link>http://www.andrewingram.net/articles/generating_sprite_navigation_from_fireworks/</link>
      <guid>http://www.andrewingram.net/articles/generating_sprite_navigation_from_fireworks/#When:22:04:00Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>Using a single background image and change the positioning has long been the favourite way of developing accessible navigation menus. It gives you pre-loading of hover states for free as well as an overall reduced server overhead. The main problem with the technique is that it&#8217;s rather fiddly writing all the HTML and CSS for it. SpriteNavi is a command panel for Fireworks that can generate this code directly from an image.</p>


 <h3>Body</h3>	<p>The technique of using a single image and shifting its position depending on the menu item and state has been my favourite method of creating graphical navigation menus ever since I first heard about it. Overall file sizes tend to be smaller and in general the approach is more accessible. The main drawback is that writing the HTML and CSS can be quite time-consuming since it requires calculating the offsets and dimensions of every state of the menu.</p>

	<p>SpriteNavi is a Fireworks command panel I&#8217;ve developed to help automate this process. I&#8217;ve chosen Fireworks for the initial development because it&#8217;s much easier to develop for than Photoshop and much more of the application is accessible to scripting. As it stands SpriteNavi can only develop horizontal navigation bars, the main issue with adding vertical menu support is how to do the user interface rather than any coding problems so hopefully this will be coming soon.</p>

	<p>It works by using guides in your document to work out the dimensions of the menu items. So if you don&#8217;t already use guides you&#8217;ll have to add them to use SpriteNavi, guides at 0 and the image dimensions are optional.</p>

	<p>Simply download the .swf file and place it in your &#8220;Fireworks\Configuration\Command Panels&#8221; folder, load Fireworks and SpriteNavi will be selectable from the Window menu. You can then choose to float it or have it docked in the toolbar</p>

	<p>Press &#8220;Fetch Guide Data&#8221; to populate the datagrid. you can then change the name of the menu and the menu items as well a prefix to be added to the name of each menu item to avoid conflicts with any other ids in your HTML. Use the spinners to select which row should represent each of the 5 states of the menu items (I personally tend to group link and visited on the first row, focus and hover on the second and active on the third). Then press &#8220;Generate Code&#8221; to output the HTML and CSS in the textarea below. You can then copy this code into your own HTML and CSS files. You can change the numerical values if you like but it&#8217;s not recommended if your document guides are correct.</p>

	<p><img src="http://www.andrewingram.net/files/spritenavi-fw-article/screenshot.png" title="Screenshot of SpriteNavi embedded in Fireworks" alt="Screenshot of SpriteNavi embedded in Fireworks" /></p>

	<p><a href="http://www.andrewingram.net/files/spritenavi-fw-article/SpriteNavi.swf">Download SpriteNavi for Fireworks</a> (right-click and save link as, otherwise the swf will just load in your browser)</p>


 ]]></description>
      <dc:subject>Design, Fireworks</dc:subject>
      <dc:date>2007-08-19T22:04:00+00:00</dc:date>
    </item>



    <item>
      <title>GridMaker Reboot</title>
      <link>http://www.andrewingram.net/articles/gridmaker_reboot/</link>
      <guid>http://www.andrewingram.net/articles/gridmaker_reboot/#When:22:11:00Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>The first versions of GridMaker were well-received but several issues were highlighted, this article introduces the next version which includes a number of changes.</p>


 <h3>Body</h3>	<p>A few months ago I wrote <a href="http://www.andrewingram.net/articles/introducing_gridmaker/">GridMaker</a> to aid in producing grid-based web design mock-ups in Photoshop (and later Fireworks). Whilst very primitive it was well-received and many have informed me how useful they&#8217;ve found it. At the same time it was clear that there were a number of issues so I went back to GridMaker and made a number of changes.</p>

	<h4>What features have we lost?</h4>

	<p>As the new version stands, a number of old features are missing. The obvious thing that&#8217;s missing is the notion of a grid configuration input, this allowed people to potentially make quite complex grids but ultimately the idea would have needed to be much more complicated (think regular expressions for defining grids) in order for it to be sufficiently flexible. Instead I&#8217;ve limited the configuration to one size of column and one size of gutter.</p>

	<p>In addition, the maximum dimensions inputs have gone. These allowed users to generate documents and guides up to and including their maximum desired image size. This was a useful feature because it allowed you to produce grids specifically for certain screen sizes. This feature will be back and there will be some very useful improvements, I just need to figure out how the user interface will work since ExtendScript is very limited with regards to UI widgets.</p>

	<p>Finally, there is no longer the option to configure rows. However, this will also be looked at more in the future, particularly with regards to things like baseline font size</p>

	<h4>What new features are there?</h4>

	<p>Right now you can specify four properties for columns; column width, gutter width, number of columns and column divisions. These are fairly self-explanatory, the approach is similar to Matthew Pennell&#8217;s <a href="http://www.29digital.net/grid/">Grid Calculator</a> script, the only addition is the idea of column divisions which allow you to divide each column up into a number of smaller columns without separating gutters.</p>

	<p>The row heights are currently calculated using the column width and golden ratio, this hopefully provides an adequate compromise until I get the row settings done properly.</p>

	<p>Last but not least, you can finally specify which units to use (pixels, cm, mm and inches) in the document (this does actually change your Photoshop preferences though so just be aware). One word of warning, if you use the default settings with inches nothing will happen because you&#8217;re trying to generate a bigger document than Photoshop can handle.</p>

	<p><img src="http://www.andrewingram.net/files/gridmaker-reboot-article/gridmaker.gif" title="GridMaker 2" alt="GridMaker 2" /></p>

	<p>To install, just put GridMaker2.jsx in your Photoshop\Presets\Scripts directory and load the program, the script will be available in the File/Scripts menu.</p>

	<p><a href="http://www.andrewingram.net/files/gridmaker-reboot-article/GridMaker2.jsx">Download GridMaker2.jsx</a></p>


 ]]></description>
      <dc:subject>Design, Grid, Photoshop</dc:subject>
      <dc:date>2007-05-09T22:11:00+00:00</dc:date>
    </item>



    <item>
      <title>GridMaker for Fireworks</title>
      <link>http://www.andrewingram.net/articles/gridmaker_for_fireworks/</link>
      <guid>http://www.andrewingram.net/articles/gridmaker_for_fireworks/#When:23:54:01Z</guid>
      <description><![CDATA[<h3>Abstract</h3>	<p>GridMaker ended up being quite popular so I decided to take a look at porting it over to Fireworks.</p>


 <h3>Body</h3>	<p>When I was initially showing <a href="http://www.andrewingram.net/articles/introducing_gridmaker/">GridMaker</a> to people, one of the first questions asked was whether it would work in Fireworks. Unfortunately Photoshop and Fireworks don&#8217;t have completely compatible APIs (as far as I&#8217;m aware, things may have changed with CS3 but I couldn&#8217;t find any suitable documentation) so a different approach was required. Fireworks doesn&#8217;t seem to have a nice set of GUI functions like Photoshop&#8217;s ExtendScript but it does allow embedding of Flash applications into the program itself as Command Panels.</p>

	<p>I&#8217;ve never really used Flash before but ActionScript is pretty intuitive if you know JavaScript and ExtendScript (they&#8217;re all based on the same language) so converting the code was pretty straightforward and seems to work nicely. I particularly like how well GridMaker looks embedded into Fireworks. I won&#8217;t go into how to use it since it&#8217;s exactly the same as the Photoshop version and it doesn&#8217;t include any additional functionality yet (this is a serious possibility since Flash has far more flexibility for building user interfaces than ExtendScript).</p>

	<p>Simply download the .swf file and place it in your &#8220;Fireworks\Configuration\Command Panels&#8221; folder, load Fireworks and GridMaker will be selectable from the Window menu. You can then choose to float it or have it docked in the toolbar</p>

	<p><img src="http://www.andrewingram.net/files/gridmaker-fw-article/screenshot.png" title="Screenshot of GridMaker embedded in Fireworks" alt="Screenshot of GridMaker embedded in Fireworks" /></p>

	<p><a href="http://www.andrewingram.net/files/gridmaker-fw-article/GridMaker.swf">Download GridMaker for Fireworks</a> (right-click and save link as, otherwise the swf will just load in your browser)</p>


 ]]></description>
      <dc:subject>Design, Fireworks, Grid</dc:subject>
      <dc:date>2007-04-30T23:54:01+00:00</dc:date>
    </item>


    
    </channel>
</rss>