<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Bjorkoy.com</title>
    <link>http://bjorkoy.com</link>
    <language>en</language>
    <webMaster>olavfb@gmail.com (Olav)</webMaster>
    <copyright>Copyright 2006-2010</copyright>
    <ttl>60</ttl>
    <pubDate>Tue, 21 Oct 2008 16:11:00 GMT</pubDate>
    <description />
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/bjorkoy" /><feedburner:info uri="bjorkoy" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Automatic compilation of Sass and HSS files</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/md_pT6Yl2Xk/</link>
      <pubDate>Tue, 21 Oct 2008 15:34:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2008/10/21/automatic_compilation_of_sass_and_hss/</guid>
      <description>&lt;p&gt;&lt;a href="http://haml.hamptoncatlin.com/docs/rdoc/classes/Sass.html"&gt;Sass&lt;/a&gt; and &lt;a href="http://ncannasse.fr/projects/hss"&gt;HSS&lt;/a&gt; are pretty cool tools. They are extensions to CSS that allows you to use variables, arithmetic, nested rules and other goodies in your stylesheets.&lt;/p&gt;

&lt;p&gt;To make this work, both tools use a compiler to transform the Sass and HSS file contents into valid CSS which will work in a browser. &lt;/p&gt;

&lt;h5&gt;The problem&lt;/h5&gt;

&lt;p&gt;Running the compiler on each file change when developing a site is a tedious task to do manually, so I patched together a simple Ruby script to do it for me. In the interest of karma, here&amp;#8217;s that script for you to use as you see fit.&lt;/p&gt;

&lt;p&gt;The script can esentially be used in any situation where some files must be observed, and a command run whenever they are changed (saved), be it compiling, compressing, running tests or validation.&lt;/p&gt;

&lt;h5&gt;How to use the script&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Put the script file in your CSS directory. The script will monitor both that directory and any subdirectories when started.&lt;/li&gt;
&lt;li&gt;Change the configuration options at the top of the script, depending on which tool you are using: Sass, HSS or something else.&lt;/li&gt;
&lt;li&gt;Whenever you are working on your files, have the script running in the background. Start it by running &lt;code&gt;ruby monitor.rb&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, whenever you save changes to your Sass or HSS files, the corresponding CSS files will be recompiled from their respective sources. The script will also recompile all observed files at the moment it is started.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s it! You can now use the CSS extension tool of your choice, while still retaining the sweet ability to refresh your browser to instantly see any changes, all without any annoying extra steps in the process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://files.bjorkoy.com/monitor/monitor.rb"&gt;Download the script&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
      <category domain="http://bjorkoy.com/past/tags/ruby">ruby</category>
    <feedburner:origLink>http://bjorkoy.com/past/2008/10/21/automatic_compilation_of_sass_and_hss/</feedburner:origLink></item>
    <item>
      <title>Passing the torch</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/L6e6zneK24w/</link>
      <pubDate>Tue, 02 Sep 2008 10:35:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2008/9/2/passing_the_torch/</guid>
      <description>&lt;p&gt;Blueprint has had an amazing run so far. Even from the get go, the popularity surpassed anything I could ever have imagined. Dominating the top spots at Delicious, reaching the front pages of both Digg and Reddit, being featured on sites such as Wired, Ajaxian, Daring Fireball, Subtraction and countless others, the numbers speak for themselves.&lt;/p&gt;

&lt;p&gt;Where did all this hype come from? The fact is, it took quite a few months until Blueprint was able to deliver on all its promises, and the initial implementation was far from perfect. But the hype remained nonetheless. &lt;/p&gt;

&lt;p&gt;I have my own theories on how the, at times, unjustified hype came to be: The enticing coupling of the words &amp;#8220;framework&amp;#8221; and &amp;#8220;CSS&amp;#8221;, the void left by having no viable, light-weight competitor to Yahoo UI, and being based on thorough work by industry leaders such as Jeff Croft. All this certainly helped more than any brilliant CSS solutions ever could have. &lt;/p&gt;

&lt;p&gt;Either way, here we are. Blueprint is at sort of a crossroad. Should we be happy with what we have, or has the time come to really ramp up development and aim to deliver on all the expectations the now fading hype has come to expect of us? &lt;/p&gt;

&lt;p&gt;The Blueprint community has grown exceptionally fast. Inversely, my available time for developing the framework and nurturing the community has diminished. The community has continued to grow and has come to expect a lot more than what has been delivered. This is the problem that presents itself when a project grows faster and reaches more people than you could ever have imagined: You have no way to keep working at the same pace to keep the project at this level for a long stretch of time.&lt;/p&gt;

&lt;p&gt;But this is also the beauty of open source: I have done what I can for Blueprint for the time being, and while I&amp;#8217;ll still be a vocal part of the community, the time has come to pass the torch. &lt;/p&gt;

&lt;p&gt;It&amp;#8217;s time for someone else to maintain the project, so that all the brilliant minds who wish to contribute actually get a chance to have their say. Blueprint could be so much more than it is today, and with a few new guys running the show, I&amp;#8217;m certain the framework can reach even the high goals set up by the earlier hype. &lt;/p&gt;

&lt;p&gt;So here we go. For the time being, the new maintainers of Blueprint are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Christian Montoya&lt;/li&gt;
&lt;li&gt;Joshua Clayton&lt;/li&gt;
&lt;li&gt;Chris Eppstein&lt;/li&gt;
&lt;li&gt;Glenn Rempe&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;They are great guys, who have been working on Blueprint for a long time now. If anyone can take the framework to the next level, they can. The new site, with links to all relevant sources can be found at &lt;a href="http://www.blueprintcss.org/"&gt;blueprintcss.org&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As mentioned, I&amp;#8217;ll still be around, helping out, and if the time comes, I&amp;#8217;ll be back on the front lines developing the framework. But from now on, these are the people to contact and look to for any news and developments on Blueprint. Best of luck to all of them!&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
    <feedburner:origLink>http://bjorkoy.com/past/2008/9/2/passing_the_torch/</feedburner:origLink></item>
    <item>
      <title>Blueprint 0.7 has arrived</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/aknuUQNXBoc/</link>
      <pubDate>Wed, 20 Feb 2008 22:08:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2008/2/20/blueprint_07_has_arrived/</guid>
      <description>&lt;p&gt;&lt;a href="http://code.google.com/p/blueprintcss/downloads/list"&gt;Blueprint 0.7&lt;/a&gt; has finally been released. Expect a more thorough article on all the new stuff soon. For now, here&amp;#8217;s a quick rundown. &lt;/p&gt;

&lt;p&gt;It&amp;#8217;s been way too long since our last release, so 0.7 is in many ways a pretty daunting upgrade. Lots of things have changed, making the framework more powerful, customizable and nimble than ever before.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s the most important new features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A powerful new compressor/generator script for customizing every part of Blueprint.&lt;/li&gt;
&lt;li&gt;A new directory structure, way better thought out than what we had in 0.6.&lt;/li&gt;
&lt;li&gt;No more need for the .column class (div + .span-x implies column).&lt;/li&gt;
&lt;li&gt;Lots of bugs fixed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;The new compressor&lt;/h5&gt;

&lt;p&gt;So what does it do?&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ ruby compress.rb -h
Usage: compress.rb [options]
Blueprint Compressor

options
  -o, --output_path=OUTPUT_PATH    Define a different path to output 
                                   generated CSS files to.
  -n, --namespace=BP_NAMESPACE     Define a namespace prepended to all Blueprint classes 
                                   (e.g. .your-ns-span-24)
  -p, --project=PROJECT_NAME       If using the settings.yml file, PROJECT_NAME is the 
                                   project name you want to export
  --column_width=COLUMN_WIDTH      Set a new column width (in pixels) for the output grid
  --gutter_width=GUTTER_WIDTH      Set a new gutter width (in pixels) for the output grid
  --column_count=COLUMN_COUNT      Set a new column count for the output grid
  -h, --help                       Show this help message.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you&amp;#8217;re using Blueprint in several projects, you should check out the new settings file for the compressor. Here&amp;#8217;s an example of the new settings file, with most available options:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;my_project:
  path: /path/to/my/project/stylesheets
  namespace: custom-namespace-1-
  custom_css:
    ie.css:
      - custom-ie.css
    print.css:
      - docs.css
      - my-print-styles.css
    screen.css:
      - subfolder-of-stylesheets/sub_css.css
  custom_layout:
    column_count: 12
    column_width: 70
    gutter_width: 10
  plugins:
    - fancy-type
    - buttons
  semantic_classes:
    "#footer, #header": ".span-24, div.span-24"
    "#content": ".span-17, div.span-17, div.colborder"
    "#extra-content": ".span-6, div.span-6"
    "div#navigation": "div.span_24, .span-24"
    "div.section, div.entry, .feeds": ".span-6 div.span-6"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Yes, you&amp;#8217;re reading that correctly. In order, we have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optional custom output path.&lt;/li&gt;
&lt;li&gt;Namespace for Blueprint classes, which even updates the test files.&lt;/li&gt;
&lt;li&gt;Custom CSS appended to Blueprint stylesheets.&lt;/li&gt;
&lt;li&gt;Custom layout settings, almost too easy.&lt;/li&gt;
&lt;li&gt;Automatic compression of plugins which then gets added to the main Blueprint file.&lt;/li&gt;
&lt;li&gt;Semantic class names from BP classes. Just add them to your HTML, remove the old BP classes from the same HTML, and you&amp;#8217;re ready to go!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Huge thanks to Josh Clayton, the newest member of the Blueprint team, for creating all this. He&amp;#8217;s even written quite an &lt;a href="http://jdclayton.com/blueprints_compress_a_walkthrough.html"&gt;article describing the compressor in detail&lt;/a&gt;.&lt;/p&gt;

&lt;h5&gt;Further reading&lt;/h5&gt;

&lt;p&gt;A few links to get you started. As mentioned, I&amp;#8217;ll write a more thorough article on the CSS in 0.7 soon.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/blueprintcss/downloads/list"&gt;Download BP 0.7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/blueprintcss/source/browse/blueprint/tags/blueprint-0.7/CHANGELOG"&gt;Complete changelog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/blueprintcss/wiki/Tutorial"&gt;Updated tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/blueprintcss/source/browse/blueprint/tags/blueprint-0.7/README"&gt;Blueprint Readme&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/blueprintcss/issues/list"&gt;Post issues and bugs here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://groups.google.com/group/blueprintcss"&gt;Mailing list for any questions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/blueprintcss/source/browse/blueprint/tags/blueprint-0.7/AUTHORS"&gt;Who to thank for all this&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; We just released a quick bugfix, blueprint 0.7.1, which solves an issue where the compressor was requiring Rubygems in order to work. Rubygems is not required to run the compressor.&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
    <feedburner:origLink>http://bjorkoy.com/past/2008/2/20/blueprint_07_has_arrived/</feedburner:origLink></item>
    <item>
      <title>CSS font shorthand syntax</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/nVIQ90R3z3w/</link>
      <pubDate>Fri, 11 Jan 2008 21:28:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2008/1/11/css_font_shorthand_syntax/</guid>
      <description>&lt;p&gt;The CSS font shorthand property syntax always seem to slip my mind, so here it is, mostly for my own benefit.&lt;/p&gt;

&lt;h5&gt;Syntax&lt;/h5&gt;

&lt;p&gt;The syntax is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;font: style variant weight size/line-height family;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;strong&gt;required&lt;/strong&gt; parts of this shorthand is &lt;strong&gt;size&lt;/strong&gt; and &lt;strong&gt;family&lt;/strong&gt;. You should always &lt;strong&gt;stick with the ordering&lt;/strong&gt; given above, which is what the W3C recommends. &lt;/p&gt;

&lt;h5&gt;Examples&lt;/h5&gt;

&lt;p&gt;Example 1:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;font-size: 14px;
font-family: Helvetica, sans-serif;

/* Combined into one shorthand rule */
font: 14px Helvetica, sans-serif;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Example 2:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;font-weight: bold;
font-size: 14px;
line-height: 1.5;
font-family: Helvetica, sans-serif;

/* Combined into one shorthand rule */
font: bold 14px/1.5 Helvetica, sans-serif;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Example 3:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;font-style: italic;
font-variant: small-caps;
font-weight: bold;
font-size: 1em;
line-height: 140%;
font-family: Helvetica, sans-serif;

/* Combined into one shorthand rule */
font: italic small-caps bold 1em/140% Helvetica, sans-serif;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Source:&lt;/strong&gt; &lt;a href="http://www.456bereastreet.com/archive/200502/efficient_css_with_shorthand_properties/"&gt;456 Berea Street on shorthand properties&lt;/a&gt;. (You&amp;#8217;ll find many more timesavers in that article.)&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2008/1/11/css_font_shorthand_syntax/</feedburner:origLink></item>
    <item>
      <title>How to stop comment spam</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/UoD93Hw_p8I/</link>
      <pubDate>Sun, 06 Jan 2008 01:22:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2008/1/6/bulletproof_protection_against_comment_spam/</guid>
      <description>&lt;p&gt;Comment spam must be the number one threat against an enjoyable blogging experience. Many people quit blogging entirely because they get tired of fighting the ever evolving spam bots. There are, however, ways to win this arms race. &lt;/p&gt;

&lt;p&gt;Below I&amp;#8217;ve outlined the techniques I use to keep this blog spam free. I&amp;#8217;d be very surprised if I ever get spam from bots again - this stack of techniques should be quite bulletproof. The methods are listed in order of usage. &lt;/p&gt;

&lt;p&gt;If a comment passes all these steps without being flagged as spam, it&amp;#8217;s allowed into the database.&lt;/p&gt;

&lt;p&gt;It should be noted that I have no patience for manually approving comments - I feel like I&amp;#8217;m letting the spammers win. For shame! :)&lt;/p&gt;

&lt;h5&gt;Step 1: &amp;#8220;Do&amp;#8221; field&lt;/h5&gt;

&lt;p&gt;(This step was initially about referers, but as pointed out in the comments, all browsers do not send referers, making this a bad idea. Here&amp;#8217;s a different method.)&lt;/p&gt;

&lt;p&gt;We&amp;#8217;ll first check if the HTTP POST actually comes from the blog entry in question. This is easily done with a hidden form field called &amp;#8220;do&amp;#8221;, which contains a simple value of your choice.&lt;/p&gt;

&lt;p&gt;When a comment gets posted, you check if the field &amp;#8220;do&amp;#8221; is set and equals the chosen value. As spammers often send POSTs directly to your &amp;#8220;add comment&amp;#8221; URL, this might stop some of the less ambitious culprits. The HTML could look something like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;input type="hidden" name="do" value="some_random_rotated_value"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The spam check (in Rails):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if params[:do] != the_random_rotated_value
  spam = true
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It won&amp;#8217;t stop all spam, but the philosophy here is that if it can stop &lt;em&gt;any&lt;/em&gt; spam, we&amp;#8217;ll do it. Onwards, to level two!&lt;/p&gt;

&lt;h5&gt;Step 2: Hidden Turing test&lt;/h5&gt;

&lt;p&gt;A recent trend amongst blogs is to have a simple question as part of the comment posting experience. A  simple CAPTCHA, in other words. The user has to answer a question, and the answer is then used to decide if the poster is human. In effect, the Turing test expressed through a single form field.&lt;/p&gt;

&lt;p&gt;The problem is that this diminishes the user experience. Any extra field a user has to fill in order to leave a comment is just another reason for that user not to comment at all. And since you want as many comments as you can from as happy users as possible, we should do something about this.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s my take: You use a question field, but with an added twist. Through CSS, hide that field. In your code, check the posted value of this field. If it&amp;#8217;s not empty and does not equal the answer to your test question, the comment is spam. &lt;/p&gt;

&lt;p&gt;You&amp;#8217;ll also want to give the field a name that makes it certain that a spam bot will fill it out. I use &amp;#8220;url&amp;#8221; to  store links, so here I&amp;#8217;ve used the name &amp;#8220;website&amp;#8221;. The HTML looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;div style="visibility:hidden; display:none;"&amp;gt;
  &amp;lt;label&amp;gt;What is 2+3?
  &amp;lt;input type="text" name="website"&amp;gt;&amp;lt;/label&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(Jan Pingel and Jeremy Weathers suggests in the comments that visibility:hidden is needed in addition to display:none in this case, as it will help apps like screen readers to hide the test.)&lt;/p&gt;

&lt;p&gt;And the POST check might look like this (at least in Rails):&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;if params[:website] != '' and params[:website] != '5'
  spam = true
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We hide the field because common sense says that spam bots probably won&amp;#8217;t parse CSS, and therefore fill in the field based on the name given. A user without CSS turned on will see the field, and fill inn the answer to your question. The vast majority of users, however, will never even see the question, thus making the probability of them leaving a comment higher. &lt;/p&gt;

&lt;p&gt;A truly resilient spam bot might pass this test. It might parse the CSS or understand the question. No matter, on to level three!&lt;/p&gt;

&lt;h5&gt;Step 3: Akismet&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://akismet.com/"&gt;Akismet&lt;/a&gt; is a great tool for stopping spam. It&amp;#8217;s basically a web server to which you pass the content of and information about each comment, and it in turn gives you a &amp;#8220;true&amp;#8221; or &amp;#8220;false&amp;#8221; signifying if it thinks the comment is spam. It has a great hit rate, and has worked for a vast herd of now spam free Wordpress bloggers.&lt;/p&gt;

&lt;p&gt;The service is open to everyone, though you&amp;#8217;ll need to create a (free) account on &lt;a href="http://wordpress.com"&gt;wordpress.com&lt;/a&gt;. You&amp;#8217;ll then get an API key which will give you access to the Akismet servers. &lt;/p&gt;

&lt;p&gt;There&amp;#8217;s already been written plugins and API wrappers for many systems and languages. Here&amp;#8217;s a few:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://akismet.com/download/"&gt;Wordpress plugin&lt;/a&gt; (official)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.blojsom.com/blog/nerdery/2005/12/02/Akismet-API-in-Ruby.html"&gt;Akismet API wrapper for Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubyforge.org/projects/ror-akismet/"&gt;Ruby on Rails plugin&lt;/a&gt; (uses the above wrapper)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://drupal.org/project/akismet"&gt;Drupal module&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nonplus.net/software/mt/Akismet.htm"&gt;Movable Type plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(A simple google search for Akismet and your blogging system will likely produce your desired result.)&lt;/p&gt;

&lt;p&gt;In many cases, using Akismet will protect your blog from almost all spam. However, since this is supposed to be a bulletproof setup, I would still recommend using all the techniques mentioned above. Since Akismet is starting to get very popular, spammers might work extra hard to find countermeasures for it, and as it&amp;#8217;s a centralized service, it&amp;#8217;ll probably experience some downtime.&lt;/p&gt;

&lt;p&gt;Still not satisfied? I have one more technique you can try out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; Carl Mercier writes in to mention &lt;a href="http://defensio.com/"&gt;Defensio&lt;/a&gt;, which is a service similar to Akismet. I haven&amp;#8217;t tried it, but judging from it&amp;#8217;s website, Defensio might very well be a worthy competitor. You could of course use both, which would be especially useful in case one of them is experiencing downtime.&lt;/p&gt;

&lt;h5&gt;Step 4: Click test (Javascript required)&lt;/h5&gt;

&lt;p&gt;This is a technique used by &lt;a href="http://simplelog.net"&gt;SimpleLog&lt;/a&gt;, and requires that Javascript is turned on by the user posting a comment.&lt;/p&gt;

&lt;p&gt;I don&amp;#8217;t use this, as I think websites should always work perfectly without JS. However, if you disagree, or run a site where one of the requirements is that JS must be turned on, this might be just what you&amp;#8217;re looking for.&lt;/p&gt;

&lt;p&gt;First, create a bunch of hidden fields, one for every &lt;em&gt;required&lt;/em&gt; field and the submit button, like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;input type="hidden" name="check-1" value="no"&amp;gt;
&amp;lt;input type="hidden" name="check-2" value="no"&amp;gt;
...
&amp;lt;input type="hidden" name="check-n" value="no"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In every required field, create a virtual form value through Javascript, that is only set if the user actually physically (or is that virtually?) entered something in the field, like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;input type="text" name="email" 
onkeypress="this.form.elements['check-1'].value = 'yes'"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Do this for every required field, just change the value &amp;#8220;check-1&amp;#8221; between each new field, so that you get a separate check for each. You should also check if the submit button was really &amp;#8220;clicked&amp;#8221; by the user, like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;input class="submit" 
onclick="this.form.elements['check-2'].value = 'yes'&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can then check in your &amp;#8220;add comment&amp;#8221; method if every one of these fields are set to the correct value (&amp;#8220;yes&amp;#8221;). If they&amp;#8217;re not, the comment is spam. (Or the user has JS turned off, which is the problem I mentioned above.)&lt;/p&gt;

&lt;p&gt;To really annoy spam bots, obfuscate the custom values, like &lt;code&gt;this.form.elements['ed8mkl32'].value = '9r3w'&lt;/code&gt;. You can then randomize these and place them at different intervals and in different fields, all while checking for the current correct setup in your script.. Am I going too far? :)&lt;/p&gt;

&lt;h5&gt;Step 5: Random field names&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://www.wp-fun.co.uk/"&gt;Andrew&lt;/a&gt; suggest another simple yet effective method:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;The technique I am using, and which is working very well, is to randomise the names of the form fields.&lt;/p&gt;
    
    &lt;p&gt;When the form is loaded a PHP script generates random names for all the form fields and then adds a hidden element with instructions on which random form name should equal which real form name.&lt;/p&gt;
    
    &lt;p&gt;When the form is submitted the comment handler unscrambles the names and assigns the values. Any form fields submitted that were not included in the unscramble instructions are wiped.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;Spammers, be gone!&lt;/h5&gt;

&lt;p&gt;In addition to the techniques mentioned above (except step 4 and 5), I also use a blacklist that comes with SimpleLog as a last measure. I like to think that I&amp;#8217;ve caused at least some frustration in the mind of a spammer at this point. :)&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve yet to get automated spam after implementing these methods, although I hope no enterprising spammer sees this post as a personal challenge, with its provocative title (in spammer circles) and all. &lt;/p&gt;

&lt;p&gt;If anyone has any techniques to add to this list, enlighten me through the hopefully spam free comments section below.&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/web">web</category>
    <feedburner:origLink>http://bjorkoy.com/past/2008/1/6/bulletproof_protection_against_comment_spam/</feedburner:origLink></item>
    <item>
      <title>Blueprint's directory structure</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/O980DLOHub0/</link>
      <pubDate>Thu, 03 Jan 2008 14:30:46 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2008/1/3/blueprints_directory_structure_again_again/</guid>
      <description>&lt;p&gt;The &lt;a href="http://prototypejs.org/"&gt;Prototype JS framework&lt;/a&gt; has a great &lt;a href="http://svn.rubyonrails.org/rails/spinoffs/prototype/trunk/"&gt;directory structure&lt;/a&gt;. The project has a source folder, containing different parts of the framework, and a simple script that puts these together to one file (prototype.js) for distribution. This makes both development and deployment enjoyable. &lt;/p&gt;

&lt;p&gt;Blueprint&amp;#8217;s directory structure has been way too complex until now, with quite a few files that were, well, unnecessary. The goal should be to have as few files as possible, organized in the most intuitive way we can think of. &lt;/p&gt;

&lt;p&gt;We can&amp;#8217;t go down to a single-file product, such as Prototype, since screen.css, print.css and ie.css all have to be included in the HTML in three different ways. There are ways to make these three files apply to the correct environment through one file, but including them in HTML with correct media types and conditional comments is the easiest and most predictable way of getting this to work. So that&amp;#8217;s what we&amp;#8217;ll do.&lt;/p&gt;

&lt;p&gt;Another thing we must do is to move the inclusion of plugins to the HTML. This used to be done in screen.css, but with this new method, we ensure that upgrading to a new version of Blueprint is as simple as replacing the old Blueprint folder.&lt;/p&gt;

&lt;p&gt;So we need three files in the top level directory (screen, print, ie), one source folder for all our different parts (grid, typography..), a script for compressing the source to the three top-level files, a tests folder and a plugins folder. Let&amp;#8217;s draw it up:&lt;/p&gt;

&lt;h5&gt;Blueprint&amp;#8217;s new directory structure&lt;/h5&gt;

&lt;pre&gt;&lt;code&gt;blueprint/
    screen.css
    print.css
    ie.css
    src/
        reset.css
        grid.css
        typography.css
        forms.css
        print.css
        ie.css
    plugins/

scripts/
    compress.rb
    validate.rb

tests/
docs/
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(The print.css and ie.css files in the src directory are the uncompressed versions of the top-level files with the same names.)&lt;/p&gt;

&lt;p&gt;Another great result of this, is that a user not looking to experiment with Blueprint, only needs the top three files. Such distribution would require something like a Blueprint Wiki with better documentation, as these three files have no comments to explain their functionality.&lt;/p&gt;

&lt;p&gt;The change has already been made in our &lt;a href="http://blueprintcss.googlecode.com/svn/blueprint/trunk/"&gt;SVN repository&lt;/a&gt;, so check it out there if anything is hazy. This also means that we have a new compression script, which you can check out in the SVN as well. &lt;/p&gt;

&lt;p&gt;It&amp;#8217;s a good start, but I&amp;#8217;m sure we can do better. Suggestions? :)&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
    <feedburner:origLink>http://bjorkoy.com/past/2008/1/3/blueprints_directory_structure_again_again/</feedburner:origLink></item>
    <item>
      <title>Rejoice, the blog is back!</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/aXqQSiJePzo/</link>
      <pubDate>Wed, 02 Jan 2008 22:45:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2008/1/2/rejoice_the_blog_is_back_again/</guid>
      <description>&lt;p&gt;You might have personal problems if the return of my blog is as important to you as it is to me, but let&amp;#8217;s assume for the purpose of justifying this entry that it is. &lt;/p&gt;

&lt;p&gt;The blog returns after a short hiatus, imposed by MediaTemple&amp;#8217;s rails hosting, which I hear is based on a wobbly cluster of jello-cored Elbonian brand servers. It looks different, yes, but this is the good kind of different. Here&amp;#8217;s why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It doesn&amp;#8217;t have a design I&amp;#8217;ll instantly tire of (or so I hope).&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s faster to serve, easier to customize and has better spam protection (fear my untested rails skills).&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s inspired by a recent favorite blog of mine, &lt;a href="http://diveintomark.org/"&gt;Dive into Mark&lt;/a&gt;. (Naturally, mimicking the design of a good writer means my writing will improve as a result).&lt;/li&gt;
&lt;li&gt;The text is Helvetica, big and friendly, as it should be. Why do we ever use 11/12px sized text anyway?&lt;/li&gt;
&lt;li&gt;It has better archives, tag support, comment form, et cetera.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, when I say it&amp;#8217;s &amp;#8220;better&amp;#8221;, I mostly mean &amp;#8220;better for me&amp;#8221;. You might disagree. Bjorkoy&amp;#8217;s law, however, categorically refutes whatever argument you might have:&lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;&lt;strong&gt;Bjorkoy&amp;#8217;s law:&lt;/strong&gt; &amp;#8220;The quality of written content improves linearly with the level of satisfaction the writer derives from the environment in which the content is written.&amp;#8221;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Never mind the fact that I just made this axiom up. I also made up an axiom that says that axioms easily can be made up on the spot. Also, one that circular reasoning is perfectly valid logic. &lt;/p&gt;

&lt;p&gt;The point is, when I like my blog, my writing improves, which you of course enjoy as well. Happy new year, have a good one. I predict another year of &amp;#8220;too many tables&amp;#8221;, &lt;code&gt;&amp;lt;!--[if lt IE 7]&amp;gt;&lt;/code&gt; and questionable redesigns. Welcome back! :)&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/site">site</category>
    <feedburner:origLink>http://bjorkoy.com/past/2008/1/2/rejoice_the_blog_is_back_again/</feedburner:origLink></item>
    <item>
      <title>Tools of the trade</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/X1KJNCzbybw/</link>
      <pubDate>Fri, 16 Nov 2007 19:04:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/11/16/evolution/</guid>
      <description>&lt;p&gt;The Blueprint ecosystem is growing at what seems like an exponential rate. Even I have trouble staying up to date with all the cool tools people are releasing. Most of the tools here are works in progress, so please treat them as such.&lt;/p&gt;

&lt;h5&gt;List-o-matic&lt;/h5&gt;

&lt;ul&gt;
&lt;li&gt;Christian Montoya is working on a webapp called &lt;a href="2"&gt;Semantify&lt;/a&gt;. It takes the URL for a page using Blueprint as input, and lets you create semantic class names instead of using the admittedly semantically questionable BP markup. (You didn&amp;#8217;t think I was in denial of that fact, did you?) :)&lt;/li&gt;
&lt;li&gt;Min Kim has developed an &lt;a href="http://www.thoughtsatsix.com/2007/11/14/blueprintair-0-1"&gt;Adobe Air app&lt;/a&gt; for generating customized Blueprint grid files. I&amp;#8217;ve never used Air, but if that&amp;#8217;s your thing, please check it out.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.donalbrecht.com/"&gt;Don Albrecht&lt;/a&gt; is working on &lt;a href="http://www.ajaxbestiary.com/Labs/BLT2/index.htm"&gt;The Blueprint Layout Tool&lt;/a&gt;, which is a WYSIWYG editor for creating your own grid. Impressive work in progress. He also has a cool name. The Don (yes, I had to) has also created a plugin called &lt;a href="http://www.ajaxbestiary.com/2007/11/08/announcing-silksprite-a-css-sprite-plugin-for-blueprint/"&gt;SilkSprite&lt;/a&gt;, which lets you use a vast number of icons out of the box in your HTML. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://ww.digitart.net"&gt;Alejandro Vasquez&lt;/a&gt; has started working on a much requested &lt;a href="http://www.digitart.net/blueprintcss/bluebrintcss.pdf"&gt;cheat sheet for Blueprint&lt;/a&gt;. You have no idea how many people requested this.&lt;/li&gt;
&lt;li&gt;Here&amp;#8217;s a simple tool for &lt;a href="http://www.parkerfox.co.uk/tmp/canvas-grid.html"&gt;creating grid backgrounds&lt;/a&gt; with Javascript for your desired setup, created by Jonah Fox.&lt;/li&gt;
&lt;li&gt;The aforementioned &lt;a href="http://kematzy.com/blueprint-generator/"&gt;Blueprint Grid Generator&lt;/a&gt; is still going strong, complete with support for Blueprint 0.6. This tool has made my life much easier. &lt;/li&gt;
&lt;li&gt;This next tool is right down my alley: A &lt;a href="http://ariejan.net/2007/08/27/blueprintcss-rails-generator/"&gt;Ruby on Rails plugin for using Blueprint&lt;/a&gt;. Mad, raving props to Ariejan de Vroom for putting this together.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;I&amp;#8217;m a busy man. Give me a shorter list!&lt;/h5&gt;

&lt;p&gt;We&amp;#8217;re trying to collect all the tools on &lt;a href="http://code.google.com/p/blueprintcss/wiki/Tools"&gt;This Blueprint Wiki page&lt;/a&gt;, but I thought I&amp;#8217;d highlight some of them. If you feel something is missing, let me know in the comments. Although that&amp;#8217;s not a prerequisite for commenting. Actual constructive comment content rarely is.&lt;/p&gt;

&lt;p&gt;Finally, here&amp;#8217;s &lt;a href="http://www.christianmontoya.com/2007/11/10/semantify-and-css-tools-based-on-blueprint/"&gt;the article&lt;/a&gt; which should complement what you&amp;#8217;ve just read through.&lt;/p&gt;

&lt;p&gt;Now, back to reading frantically on all the courses I&amp;#8217;ll fail either way. Damn you Blueprint! Maybe I should intimidate my professors by changing my name to Don.. I&amp;#8217;ll get back to you on that.&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/11/16/evolution/</feedburner:origLink></item>
    <item>
      <title>Blueprint 0.6 Released</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/BLOB9BDc6jU/</link>
      <pubDate>Fri, 21 Sep 2007 20:28:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/9/21/blueprint_06_released/</guid>
      <description>&lt;p&gt;Today marks the release of &lt;a href="http://code.google.com/p/blueprintcss/"&gt;Blueprint, version 0.6&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;This release is quite literally miles ahead of what 0.5 ever was, and is a giant leap towards what we&amp;#8217;ll eventually call version 1.0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some of the highlights include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A much more sensible directory structure.&lt;/li&gt;
&lt;li&gt;A new plugin system.&lt;/li&gt;
&lt;li&gt;Lots of functionality extracted into plugins, keeping the core files sweet and nimble.&lt;/li&gt;
&lt;li&gt;New test suite for proper browser compatibility testing.&lt;/li&gt;
&lt;li&gt;We&amp;#8217;re back to using em units for all vertical sizing, although with a much better implementation than what we had in 0.4.&lt;/li&gt;
&lt;li&gt;New ruby scripts for compressing and validating the CSS.&lt;/li&gt;
&lt;li&gt;Proper styling of forms.&lt;/li&gt;
&lt;li&gt;Tons and tons of bugfixes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the way too extensive &lt;a href="http://blueprintcss.googlecode.com/svn/blueprint/tags/blueprint-0.6/Changelog"&gt;changelog&lt;/a&gt; for more details.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll write more about each change in future posts, but it&amp;#8217;s just way too much ground to cover in one sitting. &lt;/p&gt;

&lt;p&gt;For now, just head over to the &lt;a href="http://code.google.com/p/blueprintcss/"&gt;Blueprint site&lt;/a&gt; to grab &lt;a href="http://code.google.com/p/blueprintcss/downloads/list"&gt;your copy&lt;/a&gt;. :)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Also: &lt;a href="http://polarbearcave.com/"&gt;Polar Bear&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/9/21/blueprint_06_released/</feedburner:origLink></item>
    <item>
      <title>Inspiration</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/pu3nCKfYWXo/</link>
      <pubDate>Fri, 07 Sep 2007 18:50:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/9/7/inspiration/</guid>
      <description>&lt;h5&gt;Virb&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://virb.com"&gt;
&lt;img src="http://files.bjorkoy.com/images/sites/virb.png" alt="Virb"/&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;Apple&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://apple.com/mac"&gt;
&lt;img src="http://files.bjorkoy.com/images/sites/apple.png" alt="Apple"/&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;Swissmiss&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://swissmiss.typepad.com/weblog/"&gt;
&lt;img src="http://files.bjorkoy.com/images/sites/swissmiss.png" alt="Swissmiss"/&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;A Brief Message&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://abriefmessage.com/"&gt;
&lt;img src="http://files.bjorkoy.com/images/sites/abriefmessage.png" alt="A Brief Message"/&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;Theocacao&lt;/h5&gt;

&lt;p&gt;&lt;a href="http://theocacao.com/"&gt;
&lt;img src="http://files.bjorkoy.com/images/sites/theocacao.png" alt="Theocacao"/&gt;
&lt;/a&gt;&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/design">design</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/9/7/inspiration/</feedburner:origLink></item>
    <item>
      <title>CSS 101: Opposing Floats</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/bj8qnsf2zPU/</link>
      <pubDate>Fri, 07 Sep 2007 11:31:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/9/7/css_101_opposing_floats/</guid>
      <description>&lt;p&gt;One of the CSS techniques most prone to failing in Internet Explorer 6 is floating elements up against each other. &lt;/p&gt;

&lt;p&gt;For instance, you might have a main-content div, and a sidebar div. You then float both of these to the left, and give one of them some margin on the left or right hand side.&lt;/p&gt;

&lt;p&gt;Bad idea! This often induces one of IE6&amp;#8217;s many CSS layout bugs, so here&amp;#8217;s a better way:&lt;/p&gt;

&lt;p&gt;Float the two divs to different sides. That is, give the first column a &lt;code&gt;float:left&lt;/code&gt;, and the second column a &lt;code&gt;float:right&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Apply a width to each column, so that the whitespace in between the columns is as wide as the margin you originally applied.&lt;/p&gt;

&lt;p&gt;Now, the columns aren&amp;#8217;t even touching, ensuring that IE6 won&amp;#8217;t push one column down below the other.&lt;/p&gt;

&lt;p&gt;Just like that you&amp;#8217;ve accomplished the same exact layout, without the need to float divs up against each other, making for a much more robust layout.&lt;/p&gt;

&lt;p&gt;See also:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bjorkoy.com/past/2007/8/30/css_101_theres_always_another/"&gt;CSS 101: There&amp;#8217;s always another way&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://bjorkoy.com/past/2007/8/26/css_101_group_by_layout/"&gt;CSS 101: Group by layout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/9/7/css_101_opposing_floats/</feedburner:origLink></item>
    <item>
      <title>Blueprint 0.6 stress test</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/otz9-3rbkoY/</link>
      <pubDate>Thu, 06 Sep 2007 18:30:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/9/6/blueprint_06_stress_test/</guid>
      <description>&lt;p&gt;Before releasing Blueprint 0.6, I&amp;#8217;d like to put it through its paces. If you have the time and ability, please check out the latest revision from &lt;a href="http://blueprintcss.googlecode.com/svn/blueprint/trunk/"&gt;our SVN repository&lt;/a&gt;, and try your utmost to brake it.&lt;/p&gt;

&lt;p&gt;This release will be miles ahead of out current release, and is a giant leap towards version 1.0. If all goes according to plan, the versions between 0.6 and 1.0 will not bring any major changes, only subtle improvements, additions and bug fixes. &lt;/p&gt;

&lt;p&gt;This also means that the release of 1.0 should not be too far away. :)&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s a quick list of the improvements in BP 0.6:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We&amp;#8217;re back to em units for vertical spacing, though with a much better implementation than what we had in 0.4.&lt;/li&gt;
&lt;li&gt;This release introduces a new plugin structure, keeping the core files light and nimble.&lt;/li&gt;
&lt;li&gt;Three plugins (two extracted from the 0.5 core, one new).&lt;/li&gt;
&lt;li&gt;A new IE stylesheet imported with conditional comments.&lt;/li&gt;
&lt;li&gt;A much cleaner directory structure.&lt;/li&gt;
&lt;li&gt;New compressor script for easy compression of core files.&lt;/li&gt;
&lt;li&gt;Compressed version of print.css.&lt;/li&gt;
&lt;li&gt;A CSS validation script.&lt;/li&gt;
&lt;li&gt;Greatly improved test files.&lt;/li&gt;
&lt;li&gt;Lots of improvements to the typography.&lt;/li&gt;
&lt;li&gt;.box, .clear, .append- and .prepend- 12 through 23 are back by popular demand. :)&lt;/li&gt;
&lt;li&gt;Loads and loads of small improvements and fixes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This might seem like a lot of files, but while the number of bundled tools have increased, the use of plugins and a much better directory structure actually means that the CSS framework itself is lighter and more robust than ever.&lt;/p&gt;

&lt;p&gt;Take a look at the &lt;a href="http://blueprintcss.googlecode.com/svn/blueprint/trunk/Changelog"&gt;full changelog&lt;/a&gt; for more details, though some changes might be missing from that as well. Also, the readme file in the SVN directory is of course the only updated documentation on 0.6.&lt;/p&gt;

&lt;p&gt;Submit feedback in &lt;a href="http://groups.google.com/group/blueprintcss"&gt;our Google Group&lt;/a&gt;, or by mail (olav at bjorkoy dot com).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I&amp;#8217;ll be posting about who the people in the BP dev team actually are, and about all the new tools to use with BP in the near future.&lt;/em&gt;&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/9/6/blueprint_06_stress_test/</feedburner:origLink></item>
    <item>
      <title>CSS 101: There's always another way</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/qeUtNRultY0/</link>
      <pubDate>Thu, 30 Aug 2007 13:18:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/8/30/css_101_theres_always_another/</guid>
      <description>&lt;p&gt;So your CSS layout breaks in a certain browser (&lt;em&gt;cough&lt;/em&gt; IE &lt;em&gt;cough&lt;/em&gt;).&lt;/p&gt;

&lt;p&gt;Before applying any nasty hack to fix the issue, try to use another CSS technique to achieve your desired look. &lt;/p&gt;

&lt;p&gt;For instance, if paddings make the layout break, try margins. If floats makes you pull your hair out, see if you can&amp;#8217;t create the same result using absolute positioning. Or just change the way the divs float. &lt;/p&gt;

&lt;p&gt;The point is that CSS gives you a lot of options on how to achieve your desired layout. And way too often, people spend a lot of time creating an ugly work-around before trying out every option.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s always another way, find it before resorting to hacks.&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/8/30/css_101_theres_always_another/</feedburner:origLink></item>
    <item>
      <title>Blueprint 0.5: The Experiment</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/o9gZYMfQ0Rg/</link>
      <pubDate>Tue, 28 Aug 2007 22:11:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/8/28/blueprint_05_the_experiment/</guid>
      <description>&lt;p&gt;Today marks the release of &lt;a href="http://code.google.com/p/blueprintcss/"&gt;Blueprint&lt;/a&gt;, version 0.5. This is a special release, as it is above all an experiment, trying out a few different techniques as we approach version 1.0.&lt;/p&gt;

&lt;h5&gt;The Grid&lt;/h5&gt;

&lt;p&gt;The grid in this release is upped from 14 to 24 columns. Now, before you all go haywire, consider the following:&lt;/p&gt;

&lt;p&gt;12 is quite certainly the best number of columns for a grid, mathematically speaking. It is dividable by both three and four, giving you lots of options on how you&amp;#8217;d like to set up your layout.&lt;/p&gt;

&lt;p&gt;However, after trying out the 12 column scheme on a few sites, I believe it is too constricting. That is, the column count is too low. It was already too low when we were using 14, if you ask me, so 12 doesn&amp;#8217;t seem completely right.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s why I&amp;#8217;ve gone for 24. Being 2 * 12, you get all the flexibility, with the added possibility of creating truly complex grid systems. And, if 12 is your preference, all you have to do is to double your desired span counts. &lt;/p&gt;

&lt;p&gt;But hey, Blueprint is about flexibility, not constraints. That&amp;#8217;s why &lt;a href="http://kematzy.com/"&gt;Matz from kematzy.com&lt;/a&gt; is the latest addition to the growing BP development team. He has created a wonderfully flexible &lt;a href="http://kematzy.com/blueprint-generator/"&gt;BP grid generator&lt;/a&gt;, which lets you input your desired number of columns, margin between columns, and even your preferred total width, and outputs a nicely formatted and customized grid.css. &lt;/p&gt;

&lt;p&gt;So please, if 24 is not your bag, check out &lt;a href="http://kematzy.com/blueprint-generator/"&gt;Matz&amp;#8217;s generator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Also, the &lt;code&gt;first&lt;/code&gt; class is no longer needed. :)&lt;/em&gt;&lt;/p&gt;

&lt;h5&gt;PX vs EM&lt;/h5&gt;

&lt;p&gt;Blueprint 0.4 introduced the use of em units for all vertical spacing, including line-heights and font sizes. However, in retrospect, this does not work as well as it should. While giving IE users the ability to resize text properly, the vertical flow and baseline was disrupted in nearly every browser except Firefox. &lt;/p&gt;

&lt;p&gt;I do believe the baseline is quite important, giving each page a great look and feel, so we&amp;#8217;re going back to pixels in this release. Resizing might not work as well, but the baseline now looks perfect in nearly every browser. I think this is a fair trade. &lt;/p&gt;

&lt;p&gt;To accommodate those not happy with this, BP 0.4 will remain as a download on the Google Code site, so that you may easily make your own changes to stick with em&amp;#8217;s. &lt;/p&gt;

&lt;p&gt;We do hope to return to using em&amp;#8217;s one day, but that won&amp;#8217;t happen until we can make them work correctly with the baseline. If anyone wants to tackle this issue, please feel free to do so. :)&lt;/p&gt;

&lt;h5&gt;Fonts for the typographically literate&lt;/h5&gt;

&lt;p&gt;Version 0.5 also sports a new set of default fonts. We figure that if you&amp;#8217;ve gone so far as buy your own great fonts, you should also get to use them when you browse the web. Here&amp;#8217;s the fonts that now gets set in typography.css:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;h1,h2,h3,
h4,h5,h6  { font-family: Constantia, "Palatino Linotype", Palatino, Georgia, "Times New Roman", Times, serif; }
body      { font-family: Frutiger, Univers, "Helvetica Neue", "Lucida Grande", Calibri, Helvetica, Verdana, sans-serif; } 
pre       { font-family: Corbel, Verdana, "Bitstream Vera Sans", sans-serif; } 
code      { font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Monaco, Courier, monospace; }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is also highly experimental, and the font choices are likely to change in future releases.&lt;/p&gt;

&lt;h5&gt;Coming in 0.6&lt;/h5&gt;

&lt;p&gt;A few things didn&amp;#8217;t make it into this release. Most noticeably is the forms.css file. Created by &lt;a href="http://kimjoar.net/"&gt;Kim Joar Bekkelund&lt;/a&gt;, this file aims to give you some great looking default forms, with support for fieldsets, buttons and more. Expect it to ship with BP 0.6.&lt;/p&gt;

&lt;p&gt;Another quite important feature that probably will be added to 0.6, is the use of an ie.css stylesheet, loaded with conditional comments, so that IE hacks stays in one place, and doesn&amp;#8217;t clutter up our beautiful core files.&lt;/p&gt;

&lt;h5&gt;Get yer Blueprint, half price!&lt;/h5&gt;

&lt;p&gt;So that&amp;#8217;s that. Another release, another milestone on the way to Blueprint 1.0. &lt;/p&gt;

&lt;p&gt;As always, a &lt;a href="http://code.google.com/p/blueprintcss/wiki/Tutorial"&gt;tutorial&lt;/a&gt;, &lt;a href="http://bjorkoy.com/blueprint/sample.html"&gt;example&lt;/a&gt; &lt;a href="http://bjorkoy.com/blueprint/typography-test.html"&gt;files&lt;/a&gt;, the &lt;a href="http://code.google.com/p/blueprintcss/wiki/Contributors"&gt;credits&lt;/a&gt;, and the &lt;a href="http://code.google.com/p/blueprintcss/downloads/list"&gt;download&lt;/a&gt; itself, are all on the &lt;a href="http://code.google.com/p/blueprintcss/"&gt;Google Code site&lt;/a&gt;. So go ahead, and &lt;a href="http://code.google.com/p/blueprintcss/downloads/list"&gt;grab your own copy&lt;/a&gt;. :)&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/8/28/blueprint_05_the_experiment/</feedburner:origLink></item>
    <item>
      <title>CSS 101: Group by layout</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/BVLYJIzFJ8E/</link>
      <pubDate>Sun, 26 Aug 2007 20:19:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/8/26/css_101_group_by_layout/</guid>
      <description>&lt;p&gt;Many developers group their CSS stylesheet rules by element, with every text element in one segment of the CSS file, then headings, then lists and so forth.&lt;/p&gt;

&lt;p&gt;However, since you almost always look for rules that applies to a special part of your page when editing your CSS, grouping your rules by layout is a much better idea.&lt;/p&gt;

&lt;p&gt;For instance, at the top of your CSS file, put general rules for &lt;code&gt;body&lt;/code&gt;, &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;ul&lt;/code&gt; and such. Then, group the rest of your rules by layout element, like &lt;code&gt;#header&lt;/code&gt;, &lt;code&gt;#sidebar&lt;/code&gt;, &lt;code&gt;#footer&lt;/code&gt; and so forth.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;h1,h2,h3,
h4,h5,h6  { font-family: Helvetica, Arial, sans-serif; } 
a         { font-weight: bold; text-decoration: none; }
body      { margin:18px 0; }

/* -------------------------------------- */

#header         { position: relative; margin-bottom:5px; }
#header #links  { border-bottom:1px solid #ddd; }
#header h1      { font:bold 5em Helvetica, Arial, sans-serif; }
#header ul      { list-style-type:none; margin: 0 0 35px 0; }

/* -------------------------------------- */

#promo            { border-top:2px solid #ddd; }
#promo .column    { border-color:#ccc; }
#promo .column p  { padding:10px; margin:0; }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I think you&amp;#8217;ll find that this makes for much more enjoyable CSS development.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Blueprint 0.5 will hopefully be released tomorrow.&lt;/em&gt;&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/8/26/css_101_group_by_layout/</feedburner:origLink></item>
    <item>
      <title>Blueprint 0.4 released</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/y-0PxRdHc6c/</link>
      <pubDate>Sat, 11 Aug 2007 00:29:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/8/11/release_blueprint_04/</guid>
      <description>&lt;p&gt;&lt;img src="http://files.bjorkoy.com/images/blueprint.png" alt="Blueprint logo"/&gt;&lt;/p&gt;

&lt;p&gt;(If you don&amp;#8217;t know what Blueprint is, &lt;a href="http://bjorkoy.com/past/2007/8/3/launch_blueprint_a_css_framework/"&gt;read this&lt;/a&gt; first.)&lt;/p&gt;

&lt;p&gt;Pencils down, let&amp;#8217;s ship this thing, and bring print design on the web one step closer, as the first release of &lt;a href="http://code.google.com/p/blueprintcss/"&gt;Blueprint&lt;/a&gt; is quickly closing in on 15 000 downloads. &lt;/p&gt;

&lt;p&gt;Please read that back to me. The first point-release of a framework, built on a technology that behaves differently in most browsers, with known, gaping holes, has been downloaded almost 15 000 times. If there ever was a time for a new release, this would be it. &lt;/p&gt;

&lt;p&gt;Version 0.3 also produced &lt;a href="http://www.subtraction.com/archives/2007/0807_the_framewor.php"&gt;this statement&lt;/a&gt; from Khoi Vinh, online design director for The New York Times, and chief catalyst for bringing grid-based designs to the web: &lt;/p&gt;

&lt;blockquote&gt;
    &lt;p&gt;“Is there a way I can turn Blueprint into traffic for Subtraction.com?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h5&gt;Enter version 0.4&lt;/h5&gt;

&lt;p&gt;Here&amp;#8217;s most of the changes at a glance. Scroll down for explanations and clarifications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;All font sizes and vertical margins are now elastic, through the use of &lt;code&gt;em&lt;/code&gt; units. Resizing works great in every tested browser.&lt;/li&gt;
&lt;li&gt;Comes with a new, compressed version of BP, which reduces the size of the core files by 60 percent.&lt;/li&gt;
&lt;li&gt;Support for &lt;a href="http://www.markboulton.co.uk/journal/comments/incremental_leading/"&gt;incremental leading&lt;/a&gt;, contributed by &lt;a href="http://www.markboulton.co.uk/"&gt;Mark Boulton&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Adds perfected &lt;a href="http://particletree.com/features/rediscovering-the-button-element/"&gt;CSS buttons&lt;/a&gt;, by Kevin Hale of &lt;a href="http://particletree.com/"&gt;Particletree&lt;/a&gt; fame.&lt;/li&gt;
&lt;li&gt;Fixes all known IE bugs.&lt;/li&gt;
&lt;li&gt;Loads of minor fixes and additions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&amp;#8217;d say this qualifies as a good, nay, make that a great release. Remember that BP now has taken on a life of its own, and that many of these changes have been contributed by people all over the globe. Be sure to check out BP&amp;#8217;s &lt;a href="http://code.google.com/p/blueprintcss/wiki/Contributors"&gt;contributors&lt;/a&gt; section. &lt;/p&gt;

&lt;p&gt;Also, if you have a great fix or addition, post it to the new &lt;a href="http://groups.google.com/group/blueprintcss"&gt;Blueprint Google Group&lt;/a&gt;. &lt;/p&gt;

&lt;h5&gt;About the changes&lt;/h5&gt;

&lt;p&gt;Now for a few, hopefully clarifying notes on some of the changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elastic font sizes&lt;/strong&gt; also means elastic line-heights, and as you may know, calculation of em&amp;#8217;s in browsers are inconsistent at best. Because of this, I&amp;#8217;ve taken the idealistic approach. &lt;/p&gt;

&lt;p&gt;The line-heights (and by extension, the baseline) are set to values that &lt;em&gt;should&lt;/em&gt; make them look quite perfect. In Firefox, for instance, they do. In Safari or Opera however, the baseline is a bit off. &lt;/p&gt;

&lt;p&gt;This is a problem, but I am working on it, and I&amp;#8217;m not even sure you&amp;#8217;ll notice it at the default font size. :)&lt;/p&gt;

&lt;p&gt;Contributed by print designer extraordinaire &lt;a href="http://www.markboulton.co.uk/"&gt;Mark Boulton&lt;/a&gt;, &lt;strong&gt;&lt;a href="http://www.markboulton.co.uk/journal/comments/incremental_leading/"&gt;Incremental leading&lt;/a&gt;&lt;/strong&gt; is a pretty exciting new feature. As most of the ideas in Blueprint, this one comes from the world of print design.&lt;/p&gt;

&lt;p&gt;Say you have a sidebar, with smaller type than your main column. Having the same line-height in this column as in your main column might be a bad idea, as this implies a relationship between the content in each column that might not be there.&lt;/p&gt;

&lt;p&gt;Enter incremental leading: This sets the ratio between the lines of the two columns to be 4:5, meaning that for 4 lines of text in the main column, you get 5 lines of text in the sidebar. Follow the link above to learn more about this technique.&lt;/p&gt;

&lt;p&gt;The new &lt;strong&gt;compressed version&lt;/strong&gt; is an absolute must for high-volume sites. It strips the core files of the framework down to 40% of their original size, mostly through removing comments and whitespace. Check out screen.css for information on how to use it.&lt;/p&gt;

&lt;h5&gt;And that&amp;#8217;s that&lt;/h5&gt;

&lt;p&gt;I think this is a release one with great confidence can use on a live site, especially now that the glaring IE bugs are fixed. There might, however, be undiscovered bugs, so be on the lookout for a possible 0.4.5 release.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d just like to take this moment to thank all the people who have commented on, written about, contributed to, or mailed me about Blueprint. Your enthusiasm, ideas for features, bug fixes, and willingness to overlook obvious flaws in the first release has been nothing short of amazing. So thanks!&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;d like to contribute or comment on BP, please send me an e-mail: olav at bjorkoy dot com.&lt;/p&gt;

&lt;p&gt;Still here? Head on over to the &lt;strong&gt;&lt;a href="http://code.google.com/p/blueprintcss/"&gt;Blueprint site&lt;/a&gt;&lt;/strong&gt; to read about this new release, or just &lt;strong&gt;&lt;a href="http://blueprintcss.googlecode.com/files/blueprint%200.4.zip"&gt;grab yourself a copy&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h5&gt;Credits&lt;/h5&gt;

&lt;p&gt;&lt;strong&gt;As always, please remember that BP is based on work by the following people:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jeffcroft.com"&gt;Jeff Croft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://playgroundblues.com"&gt;Nathan Borror&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mintchaos.com"&gt;Christian Metts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://meyerweb.com/eric"&gt;Eric Meyer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The new BP logo was created by &lt;a href="http://www.ludwignz.com/"&gt;Ludwig Wendzich&lt;/a&gt;.&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/8/11/release_blueprint_04/</feedburner:origLink></item>
    <item>
      <title>Blueprint: 54548, 6118, 1558, 1217</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/Wjq1q4B5BMs/</link>
      <pubDate>Mon, 06 Aug 2007 15:23:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/8/6/blueprint_the_aftermath/</guid>
      <description>&lt;p&gt;I&amp;#8217;m tempted to ask you all if you can explain to me what just happened? I had no idea that this inconsequential experiment of a project could generate the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visitors to the Blueprint site: &lt;strong&gt;54 548&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Downloads so far: &lt;strong&gt;6 118&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://del.icio.us/url/e6004c93e5c6469f7811306de6af3c52"&gt;Del.icio.us&lt;/a&gt; bookmarks: &lt;strong&gt;1 558&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Number of &lt;a href="http://digg.com/design/Blueprint_A_CSS_Framework"&gt;diggs&lt;/a&gt;: &lt;strong&gt;1 217&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Average Digg comment opinion: &lt;strong&gt;Furiously offended&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Support requests curve: &lt;strong&gt;Exponential&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Giddiness level: &lt;strong&gt;Crimson red&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;So what does this tell us?&lt;/h5&gt;

&lt;p&gt;Blueprint is an unknown, untested and unused framework from an unknown guy launched from a highly irregular blog. This should make it quite clear that the craving for a proper designers framework almost couldn&amp;#8217;t be greater. &lt;/p&gt;

&lt;p&gt;As Blueprint is just a light breeze of a project, this gap in the market is a vacuum waiting to be filled. This sucks, as most vacuums do, so if anyone reading this is considering releasing their own framework or toolbox, please do so. &lt;/p&gt;

&lt;p&gt;Just imagine what a project like BP on a greater scale can accomplish, if an experiment like this, with absolutely no merits or pre-launch hype, can gain this kind of traction.&lt;/p&gt;

&lt;h5&gt;Our new home&lt;/h5&gt;

&lt;p&gt;As a result of this unexpected surge in traffic, I&amp;#8217;ve moved the entire project to &lt;a href="http://code.google.com/p/blueprintcss/"&gt;Google Code&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;This is not just because they&amp;#8217;ll host the BP download for free (my available gigabytes from MediaTemple were quickly disappearing though), but also because Google Code is a great place for almost any project. &lt;/p&gt;

&lt;p&gt;With a wiki, issue tracking and SVN hosting, this new arrangement should make future development of BP a great experience for all of us. &lt;/p&gt;

&lt;p&gt;(It&amp;#8217;ll also be interesting to see if I can actually get someone to contribute their ideas and patches to this project. Does anyone want to create a logo? ;)&lt;/p&gt;

&lt;h5&gt;Feature requests&lt;/h5&gt;

&lt;p&gt;I&amp;#8217;ve jotted down some of the most popular feature requests, which, with time, will hopefully make their way into BP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Relative font sizing everywhere&lt;/li&gt;
&lt;li&gt;Multiple versions with different grid customizations&lt;/li&gt;
&lt;li&gt;Liquid layout version&lt;/li&gt;
&lt;li&gt;Compressed versions of the files to reduce load times&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;About the credits&lt;/h5&gt;

&lt;p&gt;It&amp;#8217;s important to me that people remember that this framework was not written from scratch. The whole idea and code structure, for the entire project, including the entire way of setting up the grid, is based on something I consider to be great, nay, amazing work by the following people: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://jeffcroft.com"&gt;Jeff Croft&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://playgroundblues.com"&gt;Nathan Borror&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mintchaos.com"&gt;Christian Metts&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also, the entire reset.css file was created by &lt;a href="http://meyerweb.com/eric/"&gt;Eric Meyer&lt;/a&gt;, so make sure your praises are directed at the right people. :)&lt;/p&gt;

&lt;p&gt;Please check out the rest of the credits at the new &lt;a href="http://code.google.com/p/blueprintcss/"&gt;BP site&lt;/a&gt;. &lt;/p&gt;

&lt;h5&gt;Stay tuned&lt;/h5&gt;

&lt;p&gt;I have close to no control over what this project is spiraling into, so please excuse me if your mail or comments go unheard. &lt;/p&gt;

&lt;p&gt;What I can promise you, is that blog posts and updates about BP will be frequent, in an effort to stagger the avalanche of support mails currently consuming my spare time.&lt;/p&gt;

&lt;p&gt;(Also, the award for the coolest language to write about BP in goes to Dimox, with &lt;a href="http://suprabiz.com/blueprint_css_framework/"&gt;this entry&lt;/a&gt;)&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/8/6/blueprint_the_aftermath/</feedburner:origLink></item>
    <item>
      <title>Launch: Blueprint, a CSS framework</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/DVeCtH90H8I/</link>
      <pubDate>Fri, 03 Aug 2007 22:27:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/8/3/launch_blueprint_a_css_framework/</guid>
      <description>&lt;p&gt;After reading an &lt;a href="http://www.alistapart.com/articles/frameworksfordesigners/"&gt;article&lt;/a&gt; by Jeff Croft on frameworks for designers, I started looking at the existing CSS frameworks, trying to find one that was right for me. &lt;/p&gt;

&lt;p&gt;Never again was I to repeat the tedious task of creating a grid from scratch, defining default typography, or battling with inconsistent default browser CSS. &lt;/p&gt;

&lt;p&gt;The only viable option I found was the &lt;a href="http://developer.yahoo.com/yui/"&gt;Yahoo UI Library&lt;/a&gt;, but with its dozens of files, weighing in at a hefty 11mb (archived), YUI is just way too bloated for what I want from a designers framework. &lt;/p&gt;

&lt;p&gt;(YUI is still a great framework though, and there&amp;#8217;s lots to learn from going through its impressive code.)&lt;/p&gt;

&lt;h5&gt;Presenting Blueprint&lt;/h5&gt;

&lt;p&gt;Not happy with what I had found, I began writing my own CSS framework, and, after a while, figured that this was something others might find useful as well. So today, I&amp;#8217;m releasing &lt;a href="http://bjorkoy.com/blueprint"&gt;Blueprint&lt;/a&gt;: a light-weight, easy to use framework for CSS development.&lt;/p&gt;

&lt;p&gt;(And when I say light-weight, I mean it. It&amp;#8217;s almost too small to be called a framework.)&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s some of the features Blueprint brings to the table (not &amp;lt;table&amp;gt;, mind you):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An easily customizable grid&lt;/li&gt;
&lt;li&gt;Some default typography&lt;/li&gt;
&lt;li&gt;A typographic baseline&lt;/li&gt;
&lt;li&gt;CSS reset for default browser styles&lt;/li&gt;
&lt;li&gt;A stylesheet for printing&lt;/li&gt;
&lt;li&gt;No bloat of any kind&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The framework has only five CSS files, making it a light, refreshing breeze compared to the tornado that is YUI. All you have to do is include two CSS files (screen.css and print.css) in the &lt;head&gt; of each HTML file, and you&amp;#8217;re ready to go.&lt;/p&gt;

&lt;p&gt;Blueprint is still in early development, so you shouldn&amp;#8217;t use it any projects of importance just yet. I, however, am using it in all my new projects, fixing bugs as they appear. In other words, new versions should be released quite often.&lt;/p&gt;

&lt;h5&gt;Get your, got mine&lt;/h5&gt;

&lt;p&gt;If you&amp;#8217;re still interested, head over to the &lt;a href="http://bjorkoy.com/blueprint"&gt;Blueprint site&lt;/a&gt; to see &lt;a href="http://bjorkoy.com/blueprint/test.html"&gt;an example&lt;/a&gt;, read the quick &lt;a href="http://bjorkoy.com/blueprint/tutorial.html"&gt;tutorial&lt;/a&gt;, or just &lt;a href="http://bjorkoy.com/blueprint/blueprint%200.3.zip"&gt;grab yourself a copy&lt;/a&gt;. Oh, and please make sure to check out the &amp;#8220;credits&amp;#8221; section.&lt;/p&gt;

&lt;p&gt;If anyone would like to contribute suggestions, bug reports, or even better, bug fixes, I&amp;#8217;d love to hear from you: olav at bjorkoy dot com.&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/blueprint">blueprint</category>
      <category domain="http://bjorkoy.com/past/tags/css">css</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/8/3/launch_blueprint_a_css_framework/</feedburner:origLink></item>
    <item>
      <title>Battle comment spam with an extra form field</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/w_YlEeh_Cb4/</link>
      <pubDate>Wed, 01 Aug 2007 13:28:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/8/1/battle_comment_spam_with_an/</guid>
      <description>&lt;p&gt;I was introduced to an ingenious solution to the problem that is comment spam.&lt;/p&gt;

&lt;p&gt;All you have to do is add an extra input field to your comment form. The field should have a name that you won&amp;#8217;t use or save, but at the same time, have a name that it&amp;#8217;s certain that a spambot will fill in. Example:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&amp;lt;input type="text" name="lastname" id="lastname" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I don&amp;#8217;t store any users last name with a comment, so that should do just fine. Now comes the really clever part. Add a CSS rule to your stylesheet which hides this field from regular users, while still leaving it in the html for every spambot to see:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;input#lastname { display:none; }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Lastly, change the part of your site that adds a comment to your database so that a comment is not added if the field &amp;#8220;lastname&amp;#8221; is filled in. &lt;/p&gt;

&lt;p&gt;And there you go: nearly perfect comment spam protection. No need for bayesian filters, API-keys or (gasp) captchas. I can&amp;#8217;t understand why this approach isn&amp;#8217;t common, so what have I overlooked? :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I just got spammed again, but I&amp;#8217;m not sure what happened. The spam comments was actually left on an entry where the comments are closed. Alas, I must dig deeper to unravel this mystery. &lt;/p&gt;

&lt;p&gt;I still think the technique outlined in this post will work, and there&amp;#8217;s been some interesting additions made in the comments.&lt;/p&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/web">web</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/8/1/battle_comment_spam_with_an/</feedburner:origLink></item>
    <item>
      <title>Notes on the WWDC '07 Keynote</title>
      <link>http://feedproxy.google.com/~r/bjorkoy/~3/zLPwc04nEzk/</link>
      <pubDate>Tue, 12 Jun 2007 08:44:00 GMT</pubDate>
      <guid isPermaLink="false">http://bjorkoy.com/past/2007/6/12/notes_on_the_wwdc_07/</guid>
      <description>&lt;p&gt;So that&amp;#8217;s that. Not the most impressive keynote in recent years, but a good one nonetheless. I think a lot of the people who were overly disappointed hadn&amp;#8217;t thought about what El Jobso meant when saying he&amp;#8217;d demo a feature complete version of Leopard. That is, that in addition to some new features, the ones we heard about six months ago would also be showcased.&lt;/p&gt;

&lt;p&gt;I think Leopard looks great. It seems very polished and refined, and sets straight a lot of the inconsistencies we find in the design of Tiger (brushed metal, Finder and so forth). The new Dock also looks good, and I bet a lot of non-mac users will remark its beauty at first sight. I&amp;#8217;m less inclined to how good it will look when configured to one of the sides though. It seems like the icons would have to fall of to remain consistent. :)&lt;/p&gt;

&lt;p&gt;Quick Look is something I&amp;#8217;ve been waiting for with a passion. I&amp;#8217;ve always detested how hard it is to preview files, even images. Why should I have to open Preview? Quick Look seems to do just this - just tap the space bar: instant preview. Lovely!&lt;/p&gt;

&lt;p&gt;Time Machine will be interesting to try out. Engadget (which I&amp;#8217;ve never liked because of their way too contrived bashing of Apple), calls it &amp;#8220;backup for noobs&amp;#8221;. I think that&amp;#8217;s a way too myopic point of view. The fact that something&amp;#8217;s extremely user friendly doesn&amp;#8217;t mean it&amp;#8217;s only for the less technically inclined. But I guess that&amp;#8217;s what&amp;#8217;s keeping those guys in Windows - an unbridled enthusiasm for the unnecessarily difficult. ;)&lt;/p&gt;

&lt;p&gt;Safari for Windows, I&amp;#8217;m not so sure about. Of course, bringing more people into the OS X user experience is a very good thing, but doing it by releasing a less-than-perfect imitation on Windows hardly seems to hit the spot. Many people will try Safari on Windows, and then drop the idea of a Mac all together, because they think this is what OS X feels like. It will be interesting to see how all this pans out. I might be wrong. I hope so.&lt;/p&gt;

&lt;p&gt;However, the star of the show for me was not shown until after Jobs had left stage. The new &lt;a href="http://www.apple.com/"&gt;Apple.com&lt;/a&gt; looks absolutely amazing. I&amp;#8217;m even inclined to say it&amp;#8217;s the best website out there, at least for any company trying to sell products. The product pages, and I&amp;#8217;m not being sarcastic here, are so perfectly glossy and intuitively laid out that buying an Apple product seems like a better idea than ever before.&lt;/p&gt;

&lt;p&gt;Watch the keynote &lt;a href="http://www.apple.com/quicktime/qtv/keynote/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;More reactions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://daringfireball.net/2007/06/wwdc_2007_keynote"&gt;WWDC 2007 Keynote News&lt;/a&gt; by Gruber.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://binarybonsai.com/archives/2007/06/12/wwdc-07-fallout/"&gt;WWDC ‘07 Fallout&lt;/a&gt; by Heilemann.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://fakesteve.blogspot.com/2007/06/confession-my-keynote-smelled-like-ass.html"&gt;Confession: My keynote smelled like ass&lt;/a&gt; by Steve himself.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category domain="http://bjorkoy.com/past/tags/apple">apple</category>
    <feedburner:origLink>http://bjorkoy.com/past/2007/6/12/notes_on_the_wwdc_07/</feedburner:origLink></item>
  </channel>
</rss>
