<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>AAMcF.co.uk</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/" />
<modified>2005-10-17T11:15:30Z</modified>
<tagline>I WTFM</tagline>
<id>tag:aamcf.co.uk,2005://2</id>
<generator url="http://www.movabletype.org/" version="0.01">Movable Type</generator>
<copyright>Copyright (c) 2005, andrew</copyright>
<entry>
<title>RSS—Making the web faster</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2005/10/rssamaking_the.html" />
<modified>2005-10-17T11:15:30Z</modified>
<issued>2005-10-17T11:07:40Z</issued>
<id>tag:aamcf.co.uk,2005://2.92</id>
<created>2005-10-17T11:07:40Z</created>
<summary type="text/plain">What is it? We are all used to reading web pages. Ordinary web pages are written in HTML, which is displayed by web browsers. RSS is similar to HTML, but is much simpler. An RSS page, known as an RSS...</summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[<h2>What is it?</h2>
<p>
We are all used to reading web pages. Ordinary web pages are written in HTML, which is displayed by web browsers. RSS is similar to HTML, but is much simpler. An RSS page, known as an RSS feed, is a distilled and condensed version of the website, perhaps containing just links to new pages and their headlines, perhaps as much as the entire text of all the new articles. You don’t view RSS in an ordinary browser. Instead you view it via an RSS aggregator, a program or service that combines the RSS feeds you specify, and displays them in a way that you find convenient. Aggregators take many different forms. Some combine the RSS feeds into one personalized webpage. Others display RSS feeds like email, with a list of unread ‘messages’ sorted into different ‘mailboxes’. The RSS aggregator in recent versions of the <a href="http://www.mozilla.org">Firefox</a>  web browser converts an RSS feed into a list of bookmarks.

</p>
<h2>Why should I use it?</h2>
<p>
Suppose you check the headlines on several news websites every morning, say <a href="http://news.bbc.co.uk">BBC News</a>, <a href="http://www.guardian.co.uk">The Guardian</a>, and <a href="http://www.msnbc.msn.com/">MSNBC</a>. You could visit each site and scan the home page for items of interest, and this is how you probably do it. For two or three sites this is not a problem – but what if you had to check a hundred sites every morning? And imagine some of those sites were updated every few minutes, and others were updated only every few weeks. It quickly becomes impossible to keep up. This is where RSS comes in. If each news site provides an RSS feed you can use your aggregator to view all the updates in one place. Finding new news is done automatically by your aggregator, and it takes you only a few seconds to see what has been updated.

</p>
<h2>How do I use it?</h2>
<p>
To view an RSS feed, you need an RSS aggregator. Many Windows users find <a href="http://www.sharpreader.net/">SharpReader</a> is suitable, but you can also <a href="http://www.google.com/search?q=%22rss+reader%22">Google for &#34;rss reader&#34;</a> to find others. Having chosen your aggregator, you will then need to find some RSS feeds. Most web pages that have a corresponding RSS feed have a link to the feed somewhere on the page – usually it says “RSS Feed” or &#34;XML Feed&#34;, or something like that. Subscribing to an RSS feed depends on the RSS aggregator you use. Normally you have to right click on the RSS link and select &#34;Copy URL&#34; or &#34;Copy Shortcut&#34; to copy the URL of the feed to your clipboard. Then you past this URL into your aggregator.

</p>
<h2>Why should I publish it?</h2>
<p>
Bottom line: an RSS feed makes it easier for people to find and use the information you publish on your website, which will make your site more successful. Even if you don’t have a news page on your site, and RSS feed of site content can still be useful. Have an online catalog? Publishing it as an RSS feed as well as a webpage can put your catalog closer to the fingertips of your clients, making it easier for them to order from you. Publish an email newsletter? Consider sending it out as an RSS feed too. Because of the increasing problem of spam, people are reluctant to give out their email address. Sending your newsletter as RSS means people can subscribe to it without giving you any personal details at all. This means more people will subscribe.
</p>
]]>


</content>
</entry>
<entry>
<title>Bye bye formmail...</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2004/10/bye_bye_formmai.html" />
<modified>2004-11-20T12:32:16Z</modified>
<issued>2004-10-19T19:54:00Z</issued>
<id>tag:aamcf.co.uk,2004://2.17</id>
<created>2004-10-19T19:54:00Z</created>
<summary type="text/plain"> Using formmail? Replace it with its NMS equivalent, which is better written and more secure. Better still, upgrade to TFMail, a script that does everything FormMail does, but without the security holes....</summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Quick Tips</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[<p>
Using <a href="http://www.scriptarchive.com/formmail.html">formmail</a>? Replace it with its <a href="http://nms-cgi.sourceforge.net/">NMS equivalent</a>, which is better written and more secure. Better still, upgrade to <a href="http://nms-cgi.sourceforge.net/">TFMail</a>, a script that does everything <a href="?FormMail" class="empty">FormMail</a> does, but without the security holes.
</p>
]]>


</content>
</entry>
<entry>
<title>Why you should use Firefox</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2004/10/why_you_should.html" />
<modified>2004-12-02T10:26:39Z</modified>
<issued>2004-10-19T18:50:12Z</issued>
<id>tag:aamcf.co.uk,2004://2.16</id>
<created>2004-10-19T18:50:12Z</created>
<summary type="text/plain"> I&amp;#39;m a web developer and I use Firefox as my main browser, both at home and at work. Unlike the average web user, I&amp;#39;m very aware of the technologies that drive the web. I like experimenting with them, sometimes...</summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[<p>
I&#39;m a web developer and I use <a href="http://www.mozilla.org/products/firefox/">Firefox</a> as my main browser, both at home and at work. Unlike the average web user, I&#39;m very aware of the technologies that drive the web. I like experimenting with them, sometimes to make my client&#39;s sites better, other times just for fun. As a web developer, I use Firefox because it supports many modern web technologies, which gives me the best environment to experiment in. 

</p>
<p>
Of course, the vast majority of people who use the web don&#39;t know about, say CSS, client side XSLT, content negotiation, or even simple HTML. &#40;And there&#39;s nothing wrong with that. I have no idea how a bus works, but that doesn&#39;t stop me getting one in to work every morning.&#41;    If you are an ordinary user, why should you be using Firefox for web browsing? Why make the switch from whatever you are currently using? 
</p>
]]>
<![CDATA[<h3>Reason 1: Tabbed browsing</h3>
<p>
Take a look at this screenshot, taken on my faithful Windows 98 PC

</p>
<p>
<img src="http://aamcf.co.uk/images/20041019-firefox.png" />

</p>
<p>
I&#39;ve got three websites open in one window here. Each of the websites is open in a different tab, or sub window. I can switch between the websites by clicking on the tabs, or by pressing CTRL + Page Up / CTRL + Page Down.

</p>
<p>
This looks like its just a gimmick, and to be honest until I started using it, I thought it <em>was</em> just a gimmick. Almost as soon as I started using it I fell in love with it. Being able to open links in new tabs makes it much easier to have several websites open at the same time. You don&#39;t end up with dozens on windows cluttering your desktop. If you don&#39;t think this is useful, ask yourself this: when was the last time a link opened in a new window and you were <em>pleased</em>?

</p>
<h3>Reason 2: Popup control</h3>
<p>
Links opening in new windows can be frustrating, but they are nothing compared to those annoying little popup windows that appear unrequested, especially popup windows that spawn other popup windows, taking over your screen in an effort to get you to buy something.

</p>
<p>
There are lots of popup blockers out there, and they are something you could practically expect to have in a modern browser. What is so good about Firefoxes popup blocker? Easy - it always lets you know when it has blocked something. As you can see from the following screenshot, when Firefox blocks a popup, it adds a clear message to the top of the page, complete with a clickable link that allows you to change your popup blocking settings - invaluable when you are looking at a site that has to use popups.

</p>
<p>
<img src="http://aamcf.co.uk/images/20041019-firefox1.png" />

</p>
<h3>Reason 3: Secure connections are more obvious</h3>
<p>
Everybody knows about secure connections. Firefox has a neat way of alerting you to them. As well as showing you the little padlock at the bottom of the window, it highlights the address bar by giving it a yellow background. Making secure connections so clear makes life a little bit easier when buying things on the Internet.

</p>
<h3>Reason 4: Extensions</h3>
<p>
It&#39;s impossible to write software that does everything for everybody. However, it would be nice to have software that did everything <em>you</em> needed to do. Firefox doesn&#39;t try to be the browser that does everything. It does try to be easy to customise though. Don&#39;t like the default right-click menu? Try downloading <a href="http://www.radialthinking.de/radialcontext/">RadialContext</a>, which gives you a very nice circular right-click menu. Want to make your mouse more useful when surfing? Install <a href="http://optimoz.mozdev.org/gestures/installation.html">Mouse Gestures</a>, which let you control Firefox by moving the mouse.

</p>
<h3>Reason 5: Graceful failure</h3>
<p>
When I&#39;m developing something, I want my browser to explode in my face if something is wrong. That way I catch mistakes before they end up on a live website. When I&#39;m just surfing however, I don&#39;t really care about JavaScript errors. They are somebody else&#39;s problem. Firefox doesn&#39;t choke on broken JavaScript, it just ignores it. Given that JavaScript error boxes can be even more annoying than popup windows, this is a Good Thing. And what do I do when I&#39;m developing in Firefox? Well, then I use the <a href="http://www.chrispederick.com/work/firefox/webdeveloper/">web developer toolbar</a> that, among other things, politely explodes in my face when I make a mistake.
</p>
]]>
</content>
</entry>
<entry>
<title>Elements, attributes, and tags.</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2004/09/elements_attrib.html" />
<modified>2004-11-20T12:33:05Z</modified>
<issued>2004-09-25T12:41:27Z</issued>
<id>tag:aamcf.co.uk,2004://2.13</id>
<created>2004-09-25T12:41:27Z</created>
<summary type="text/plain"><![CDATA[ Consider this code snippet: &lt;p class=&#34;intro&#34;&gt;Hello World! I am &lt;em&gt;Andrew&lt;/em&gt;&lt;/p&gt; There are two elements &#40;a p-type and em-type&#41;, one attribute &#40;class=&#34;intro&#34;&#41;, and four tags &#40;&lt;p class=&#34;intro&#34;&gt;, &lt;em&gt;, &lt;/em&gt;, &lt;/p&gt;&#41;. In XML, the tags are the things delimited by `&lt;&#39;...]]></summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Quick Tips</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[<p>
Consider this code snippet:

</p>
<pre class="formatter_pre">&lt;p class=&#34;intro&#34;&gt;Hello World! I am &lt;em&gt;Andrew&lt;/em&gt;&lt;/p&gt;
</pre>
<p>
There are two elements &#40;a p-type and em-type&#41;, one attribute &#40;class=&#34;intro&#34;&#41;, and four tags &#40;&lt;p class=&#34;intro&#34;&gt;, &lt;em&gt;, &lt;/em&gt;, &lt;/p&gt;&#41;.

</p>
<p>
In XML, the tags are the things delimited by `&lt;&#39; and `&gt;&#39;, the attributes are the name-value pairs inside the opening tags, and the element is the whole thing - running from the start of the opening tag right the way through to the end of the closing tag.
</p>
]]>


</content>
</entry>
<entry>
<title>The alt attribute</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2004/09/the_alt_attribu.html" />
<modified>2004-11-20T12:33:34Z</modified>
<issued>2004-09-25T12:31:50Z</issued>
<id>tag:aamcf.co.uk,2004://2.12</id>
<created>2004-09-25T12:31:50Z</created>
<summary type="text/plain"> Anybody who has been involved in web development at all but the most superficial levels knows about the importance of the alt attribute for images in web pages. It functions as a text replacement for the image in circumstances...</summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[<p>
Anybody who has been involved in web development at all but the most superficial levels knows about the importance of the alt attribute for images in web pages. It functions as a text replacement for the image in circumstances where the image cannot be displayed.

</p>
<p>
A couple of days ago, a colleague asked my advice about appropriate alt text for an image - in this case a head and shoulders portrait accompanying an online bio on a web page. I suggested that he used the empty string as the alt text. He reacted with mock horror: &#34;Blank alt text? You can&#39;t have that!&#34;
</p>
]]>
<![CDATA[<p>
Using the empty string is actually a perfectly valid use of the alt attribute in some circumstances. Here&#39;s a quote from the <a href="http://www.w3.org/TR/html4/struct/objects.html#adef-alt">relevant part of the specifications</a>:

</p>
<p>
&#34;Do not specify irrelevant alternate text when including images intended to format a page, for instance, alt=&#34;red ball&#34; would be inappropriate for an image that adds a red ball for decorating a heading or paragraph. In such cases, the alternate text should be the empty string &#40;&#34;&#34;&#41;.&#34;

</p>
<p>
The best way to understand the alt attribute is to think of the img element as an element which has two, equally important, attributes: src, which gives the URI for the image itself, and alt, which provides a short text equivalent for the image. alt and src should describe the same thing, but in different ways. alt is not supplementary to src: it is <em>equivalent</em> to it. alt should be the empty string when everything the image says is said elsewhere in the document, or the image doesn&#39;t really say anything. Have a look at <a href="http://www.w3.org/TR/WCAG10/#gl-provide-equivalents">Guideline 1</a> and its checkpoints on the <a href="http://www.w3.org/TR/WCAG10/">Web Content Accessibility Guidelines 1.0</a>. <a href="http://www.w3.org/TR/WCAG20/#text-equiv">Guideline 1.1</a> in the <a href="http://www.w3.org/TR/WCAG20/">Web Content Accessibility Guidelines 2.0</a>, which is at the draft stage at the time of writing. The empty string alt attribute covers the &#34;Non-text content that does not provide information or functionality is marked such that it can be ignored by assistive technology&#34; requirement.

</p>
<p>
How do you know whether or not everything the image says is said elsewhere? Imagine you are reading the webpage to someone over the phone. Would you feel you had to describe the image? That description would be an appropriate value for the alt attribute. In the case I mentioned at the start of this article, I wouldn&#39;t describe the head and shoulders portrait in any detail. In fact I&#39;d be inclined to ignore it completely, because it didn&#39;t add anything to the bio <em>except</em> some visual impact. That&#39;s why I suggested the empty string for the alt attribute.

</p>
<p>
If you are going to enter the empty string for an alt attribute, why not just leave it out together? Think about the difference between the following two examples.

</p>
<pre class="formatter_pre">&lt;img src=&#34;foo.png&#34;/&gt;
</pre>
<p>
and

</p>
<pre class="formatter_pre">&lt;img src=&#34;foo.png&#34; alt=&#34;&#34;/&gt;
</pre>
<p>
The first says &#34;There is no text equivalent provided for this image&#34;. The second says &#34;This image does not need a text equivalent in its current context&#34;.

</p>
<h2>title and longdesc</h2>
<p>
There are another two useful attributes for the img element: title and longdesc. The first is kind of like a brother to the alt attribute. According to <a href="http://www.w3.org/TR/html4/struct/global.html#adef-title">the specs</a>, title &#34;offers advisory information about the element for which it is set&#34; - in other words, for images it offers additional information about the image: additional, that is, to the information that alt and src both communicate.

</p>
<p>
Suppose you had a detailed image which provided essential information for the page. The alt attribute just takes a string of text. You can&#39;t  structure the information in any way. This makes it impractical to use the alt attribute for detailed images. The specs provide an additional attribute - <a href="http://www.w3.org/TR/html4/struct/objects.html#adef-longdesc-IMG">longdesc</a> - for use in these circumstances. The value for the longdesc attribute should be the URI of a webpage that has a longer description of the image. The longdesc should be a supplement to the alt.
</p>
]]>
</content>
</entry>
<entry>
<title>MySQL&apos;s Page</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2004/08/mysqls_page.html" />
<modified>2004-11-20T12:34:01Z</modified>
<issued>2004-08-05T11:28:47Z</issued>
<id>tag:aamcf.co.uk,2004://2.8</id>
<created>2004-08-05T11:28:47Z</created>
<summary type="text/plain"><![CDATA[ If you don&#39;t like the pager in MySQL, you can change it with the mysql&gt;pager [pagername] command. See the MySQL commands page. eg mysql&gt;pager less makes mysql use less....]]></summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Quick Tips</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[<p>
If you don&#39;t like the pager in <a href="?MySQL" class="empty">MySQL</a>, you can change it with the 

</p>
<pre class="formatter_pre">mysql&gt;pager [pagername] 
</pre>
<p>
command. See the <a href="http://dev.mysql.com/doc/mysql/en/mysql_Commands.html">MySQL commands page</a>.

</p>
<p>
eg

</p>
<pre class="formatter_pre">mysql&gt;pager less
</pre>
<p>
makes mysql use less. 



</p>
]]>


</content>
</entry>
<entry>
<title>Useful grep options</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2004/08/useful_grep_opt.html" />
<modified>2004-11-08T12:19:02Z</modified>
<issued>2004-08-03T17:33:20Z</issued>
<id>tag:aamcf.co.uk,2004://2.7</id>
<created>2004-08-03T17:33:20Z</created>
<summary type="text/plain"> -i = case insensitive -l = only matching filenames --include = only grep in files whose names match...</summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Quick Tips</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[<ul>
<li> -i = case insensitive</li>
<li> -l = only matching filenames</li>
<li> --include <regexp> = only grep in files whose names match <regexp></li>
</ul>
]]>

</content>
</entry>
<entry>
<title>SGML Geekery</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2004/08/sgml_geekery_1.html" />
<modified>2004-08-03T20:18:32Z</modified>
<issued>2004-08-02T19:16:27Z</issued>
<id>tag:aamcf.co.uk,2004://2.2</id>
<created>2004-08-02T19:16:27Z</created>
<summary type="text/plain">The odd bits of HTML you never knew existed, and why you should only use XHTML 1.0 if you have to. There are several current versions of HTML, including HTML 4.01 Strict HTML 4.01 Transitional HTML 4.01 Frameset XHTML 1.0...</summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[<h3>The odd bits of HTML you never knew existed, and why you should only use XHTML 1.0 if you have to.</h3>

    <p>There are several current versions of HTML, including</p>

    <ul>
      <li>HTML 4.01 Strict</li>

      <li>HTML 4.01 Transitional</li>

      <li>HTML 4.01 Frameset</li>

      <li>XHTML 1.0 Strict</li>

      <li>XHTML 1.0 Transitional</li>

      <li>XHTML 1.0 Frameset</li>
    </ul>

    <p>Which is the right one to use?</p>
]]>
<![CDATA[    <p>There is a school of thought that says the XHTML 1.0 flavours are better than their HTML 4.01 counterparts. This isn't really true; there is nothing that can be expressed in XHTML 1.0 that cannot be expressed in the corresponding flavour of HTML 4.01. In particular, XHTML 1.0 Strict is no more or less a reliable data source than HTML 2.0 assuming both are valid. The theoretical advantage of XHTML over HTML here is XHTML should not be processed if it is blatantly wrong, but HTML should. This is only a theoretical advantage because most XHTML is currently served as text/html, which means it is treated as HTML by browsers. Or at least <a href="http://www.w3.org/TR/xhtml-media-types/#text-html">it should be treated as HTML</a>. What browsers actually do with it is as unpredictable as what any browsers do with anything.</p>

    <p>Unless you are doing something that requires XML, it is hard to make a case for using XHTML 1.0 over HTML 4.01. As it happens, I prefer the XHTML empty element syntax over the HTML way, but that is purely personal preference. It can even be argued that <a href="http://www.hixie.ch/advocacy/xhtml">serving XHTML as text/html is harmful</a> because that means it is processed as old-style HTML and you lose the benefits of XML's lack of error tolerance.</p>

    <p>HTML allows various forms of SGML markup minimization, such as certain end tags being optional. Using these techniques can cause problems for some browsers. XHTML, being XML, doesn't have any markup minimization. This is something in XHTML's favour, but any HTML document on the web should be fully normalised anyway. More of that in a moment.</p>

    <p>CSS works better - or at least more predictably - with XHTML 1.0 than HTML 4.01. CSS works best when there is a clear parse tree <a href="#footnote1">[1]</a>. XHTML, being XML, doesn't have any of the fun markup minimization options that HTML does. This makes the parse tree much clearer to the author, and hence the CSS is easier to write. XHTML 1.0 Strict and HTML 4.01 Strict work better with CSS than their transitional counterparts because the transitional counterparts have all sorts of presentational guff in them. These presentational things interact strangely with CSS.</p>

    <p>The real fun in CSS starts when you are applying CSS to invalid HTML. The browser has to guess what was meant, and hence the parse tree is unpredictable.</p>

    <p>Just as with an HTML 4.01 document, you can put divs and spans more or less anywhere in the body of an XHTML document, and every element can be styled using classes, ids, or (shudder) the style attribute <a href="#footnote2">[2]</a>. What you should always do with HTML is mark up the document according to its logical structure, <strong>regardless</strong> of how it looks. You should then style the page with CSS. If you get the structure right - which may require some divs and spans <a href="#footnote3">[3]</a> - you may even be able to get away with a stylesheet that uses only contextual selectors. Which is so cool nitrogen condenses on it.</p>

    <p>I've mentioned markup minimization and normalization. They deserve some further explanation. In SGML it is possible to specify that some start tags and some end tags are optional; they can be inferred unambiguously from the context. The classic example is:</p>

    <p><samp>&lt;html&gt;<br />&lt;head&gt;&lt;title&gt;&lt;/title&gt;<br />&lt;body&gt;</samp></p>

    <p>There is no closing head <strong>tag</strong>, but the head <strong>element</strong> is closed, because the DTD makes it clear that the body element cannot be a child of the head. There are plenty of other similar things as well, including my personal favorite, the NET enabling start tag and the null end tag (or NET). Basically,</p>

    <p><samp>&lt;foo/bar/</samp></p>

    <p>is exactly equivalent to</p>

    <p><samp>&lt;foo&gt;bar&lt;/foo&gt;</samp></p>

    <p>An SGML document is normalized if all the markup minimization has been removed. Normalizing a document can be done completely automatically, using the sgmlnorm utility in the <a href="http://openjade.sourceforge.net/">OpenSP suite.</a></p>
    
    <p>Combining these, we can make a really short HTML 4.01 document:</p>

    <p><samp>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;&gt;&lt;title//&lt;p//</samp></p>

    <p>There might be a small prize for the first person to describe what elements are present in that document and <strong>why</strong>.</p>

    <p>The more extreme forms of minimization - like the above - confuse all mainstream browsers. The more normal markup minimization - such as the 'missing' <samp>&lt;/head&gt;</samp> above - probably don't confuse modern browsers, but they should be avoided anyway because most browsers are very bad at coping with anything even slightly complex.</p>

    <p><a name="footnote1">[1]</a> Except in Netscape 4, where CSS works best when it is turned off.</p>

    <p><a name="footnote2">[2]</a> There is only one time when it is acceptable to use the style attribute in production code: when the building is on fire and you must finish the page before evacuating but you cani't open a second editor to add an id selector to the stylesheet <strong>and</strong> the flames are lapping round your keyboard. Even the you must remove the style attribute as soon as you reach a place of safety. The style attribute is more evil than the font element and the center element combined, and using it makes maintenance a nightmare, and don't get me started on debugging pages with style attributes and style sheets. In fact if you are the kind of person who uses the style attribute in production code it was probably me who set the building on fire when you were inside.</p>

    <p><a name="footnote3">[3]</a> The average number of spans per page should be much less than one. Whereas there is no way other than the div element to group block elements, grouping inline elements (or splitting them) can normally be accomplished by using a more appropriate element.</p>]]>
</content>
</entry>
<entry>
<title>XHTML Reference</title>
<link rel="alternate" type="text/html" href="http://aamcf.co.uk/2004/08/xhtml_reference.html" />
<modified>2004-08-03T17:40:56Z</modified>
<issued>2004-08-01T17:10:49Z</issued>
<id>tag:aamcf.co.uk,2004://2.6</id>
<created>2004-08-01T17:10:49Z</created>
<summary type="text/plain"> XHTML 1.0 DOCTYPE declarations Strict DTD Elements and Attributes (zip file) Loose (Transitional) DTD Elements and Attributes (zip file) Frameset DTD Elements and Attributes (zip file) Strict Alternatives to Deprecated Elements Strict Alternatives to Deprecated Attributes...</summary>
<author>
<name>andrew</name>
<url>http://www.mcfarland.co.uk/andrew/</url>
<email>aamcfarland@gmail.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://aamcf.co.uk/">
<![CDATA[    <ul>
      <li><a href="/html/doctype">XHTML 1.0 <code>DOCTYPE</code> declarations</a></li>      
      <li><a href="/html/strict/ALL-ELEM.html">Strict DTD Elements and Attributes</a> (<a href="/html/strict.zip">zip file</a>)</li>

      <li><a href="/html/transitional/ALL-ELEM.html">Loose (Transitional) DTD Elements and Attributes</a> (<a href="/html/transitional.zip">zip file</a>)</li>

      <li><a href="/html/frameset/ALL-ELEM.html">Frameset DTD Elements and Attributes</a> (<a href="/html/frameset.zip">zip file</a>)</li>

      <li><a href="/html/ele">Strict Alternatives to Deprecated Elements</a></li>

      <li><a href="/html/attr">Strict Alternatives to Deprecated Attributes</a></li>
    </ul>
]]>

</content>
</entry>

</feed>