<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Just a Techie Blog</title>
	<atom:link href="http://jaywhy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jaywhy.wordpress.com</link>
	<description>What is this for?</description>
	<lastBuildDate>Tue, 20 Dec 2011 17:10:40 +0000</lastBuildDate>
	<language></language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='jaywhy.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Just a Techie Blog</title>
		<link>http://jaywhy.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://jaywhy.wordpress.com/osd.xml" title="Just a Techie Blog" />
	<atom:link rel='hub' href='http://jaywhy.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Trials and tribulations of class variables in Ruby.</title>
		<link>http://jaywhy.wordpress.com/2007/08/25/trials-and-tribulations-of-class-variables-in-ruby/</link>
		<comments>http://jaywhy.wordpress.com/2007/08/25/trials-and-tribulations-of-class-variables-in-ruby/#comments</comments>
		<pubDate>Sat, 25 Aug 2007 22:17:33 +0000</pubDate>
		<dc:creator>jaywhy</dc:creator>
				<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://jaywhy.wordpress.com/2007/08/25/trials-and-tribulations-of-class-variables-in-ruby/</guid>
		<description><![CDATA[I guess I missed the discussion earlier this year about Ruby and class variables. There were a lot of posts about the problems with using class variables incorrectly, many of which, called for the use of class instance variables instead. I recently fell into this class variable trap described in the posts above. Here is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jaywhy.wordpress.com&amp;blog=360097&amp;post=11&amp;subd=jaywhy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I guess I missed the discussion earlier this year about Ruby and class variables.  There were a <a href="http://blogs.relevancellc.com/2006/11/16/use-class-instance-variables-not-class-variables">lot</a> <a href="http://www.oreillynet.com/ruby/blog/2007/01/nubygems_dont_use_class_variab_1.html">of</a> <a href="http://www.continuousthinking.com/2006/11/17/ruby-class-variable-or-class-instance-variables">posts</a> about the problems with using class variables incorrectly, many of which, called for the use of <a href="http://www.martinfowler.com/bliki/ClassInstanceVariable.html">class instance variables</a> instead.</p>
<p>I recently fell into this class variable trap described in the posts above.  Here is some code simulating my problem.</p>
<pre>irb(main):001:0&gt; class Person
irb(main):002:1&gt;   @@count = 0
irb(main):003:1&gt;   def initialize(name)
irb(main):004:2&gt;     @name = name
irb(main):005:2&gt;     @@count += 1
irb(main):006:2&gt;   end
irb(main):007:1&gt; end
irb(main):008:0&gt;
irb(main):009:0* class Customer &lt; Person
irb(main):010:1&gt;   @@count = 0
irb(main):011:1&gt;   def self.count
irb(main):012:2&gt;     puts @@count
irb(main):013:2&gt;   end
irb(main):014:1&gt; end
irb(main):015:0&gt;
irb(main):016:0* a = Person.new("Jim Bob")
irb(main):017:0&gt; b = Person.new("Jason Yates")
irb(main):018:0&gt; c = Customer.new("Albert Einstein")
irb(main):019:0&gt;
irb(main):020:0* puts  Customer.count</pre>
<pre>3</pre>
<p>You would expect to get &#8217;1&#8242; back from the &#8216;Customer.count&#8217; method.  It is the more obvious behavior or the one with the <a href="http://en.wikipedia.org/wiki/Principle_of_least_surprise">least surprise</a>.  The issue is, as you may have already noticed, class variables are shared with its subclasses. This behavior, speaking from personal experience here,  can lead to very confusing and hard to diagnose bugs.</p>
<p>The problem above is easily solved by the use of <a href="http://www.martinfowler.com/bliki/ClassInstanceVariable.html">class instance variables.</a></p>
<pre>irb(main):001:0&gt; class Person
irb(main):002:1&gt;   class &lt;&lt; self; attr_accessor :count; end
irb(main):003:1&gt;   def initialize(name)
irb(main):004:2&gt;     @name = name
irb(main):005:2&gt;     self.class.count ||= 0
irb(main):006:2&gt;     self.class.count += 1
irb(main):007:2&gt;   end
irb(main):008:1&gt; end
irb(main):009:0&gt;
irb(main):010:0* class Customer &lt; Person
irb(main):011:1&gt; end
irb(main):012:0&gt;
irb(main):013:0* a = Person.new("Jim Bob")

irb(main):014:0&gt; b = Person.new("Jason Yates")
irb(main):015:0&gt; c = Customer.new("Albert Einstein")
irb(main):016:0&gt;
irb(main):017:0* puts Customer.count
1</pre>
<p>As you can see this simulates the expected behavior.</p>
<p>This will all become mute fairly soon anyways.  In Ruby 1.9, class variables are now <a href="http://eigenclass.org/hiki.rb?Changes+in+Ruby+1.9#l38">read-only by its subclasses</a>.  With this even the first example should work correctly.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jaywhy.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jaywhy.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jaywhy.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jaywhy.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jaywhy.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jaywhy.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jaywhy.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jaywhy.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jaywhy.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jaywhy.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jaywhy.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jaywhy.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jaywhy.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jaywhy.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jaywhy.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jaywhy.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jaywhy.wordpress.com&amp;blog=360097&amp;post=11&amp;subd=jaywhy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jaywhy.wordpress.com/2007/08/25/trials-and-tribulations-of-class-variables-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0a68c43f27f20e659120d70a2cea3e0a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jaywhy</media:title>
		</media:content>
	</item>
		<item>
		<title>Pimp my gnome-terminal</title>
		<link>http://jaywhy.wordpress.com/2007/07/31/pimp-my-gnome-terminal/</link>
		<comments>http://jaywhy.wordpress.com/2007/07/31/pimp-my-gnome-terminal/#comments</comments>
		<pubDate>Tue, 31 Jul 2007 02:56:15 +0000</pubDate>
		<dc:creator>jaywhy</dc:creator>
				<category><![CDATA[gnome]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://jaywhy.wordpress.com/2007/07/31/pimp-my-gnome-terminal/</guid>
		<description><![CDATA[I saw Rob Orsini pimped his iTerm. I admit, I got a little jealous. What about gnome-terminal? You may ask, do people actually program Rails on Linux and use Gnome at that? Well I atleast know of one guy who does. I was tired of manually opening Vim, starting the Rails server, tailing the development [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jaywhy.wordpress.com&amp;blog=360097&amp;post=10&amp;subd=jaywhy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I saw Rob Orsini <a href="http://blog.tupleshop.com/2007/7/22/pimp-my-iterm">pimped his iTerm</a>.  I admit, I got a little jealous. What about gnome-terminal?  You may ask, do people actually program Rails on Linux and use Gnome at that?  Well I atleast know of <a href="http://jaywhy.wordpress.com">one guy</a> who does.</p>
<p>I was tired of manually opening Vim, starting the Rails server, tailing the development log, and opening the Rails console every time I opened a project. So I pimped my gnome-terminal.</p>
<pre>#!/bin/bash

if [[ $# == 0 ]]; then
  PROJECT_DIR=$PWD
elif [[ $# == 1 &amp;&amp; -d "$1" ]]; then
  PROJECT_DIR="$@"
else
  print "usage: pimp-term.sh [rails project directory]"
  return 1
fi

cd $PROJECT_DIR

gvim 

gnome-terminal
  --tab -t "app"
  --tab -t "server" -e "sh -x -c './script/server'"
  --tab -t "console" -e "sh -x -c './script/console'"
  --tab -t "log" -e "sh -x -c 'tail -f log/development.log'"</pre>
<p>$ pimp-term.sh project/myblog</p>
<p>You&#8217;ve officially been pimped.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jaywhy.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jaywhy.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jaywhy.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jaywhy.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jaywhy.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jaywhy.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jaywhy.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jaywhy.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jaywhy.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jaywhy.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jaywhy.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jaywhy.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jaywhy.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jaywhy.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jaywhy.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jaywhy.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jaywhy.wordpress.com&amp;blog=360097&amp;post=10&amp;subd=jaywhy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jaywhy.wordpress.com/2007/07/31/pimp-my-gnome-terminal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0a68c43f27f20e659120d70a2cea3e0a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jaywhy</media:title>
		</media:content>
	</item>
		<item>
		<title>PDF Templates via Rails</title>
		<link>http://jaywhy.wordpress.com/2007/03/05/pdf-templates-via-rails/</link>
		<comments>http://jaywhy.wordpress.com/2007/03/05/pdf-templates-via-rails/#comments</comments>
		<pubDate>Mon, 05 Mar 2007 19:33:46 +0000</pubDate>
		<dc:creator>jaywhy</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://jaywhy.wordpress.com/2007/03/05/pdf-templates-via-rails/</guid>
		<description><![CDATA[Recently, for a project, I needed a PDF generator which took existing PDF as templates and filled in data. My simple requirement was PDF look and feel wouldn&#8217;t require any coding. How hard could that be? Famous last words. The Problem The majority of PDF generators out there are exactly that generators. They simply create [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jaywhy.wordpress.com&amp;blog=360097&amp;post=8&amp;subd=jaywhy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently, for a project, I needed a PDF generator which took existing PDF as templates and filled in data.  My simple requirement was PDF look and feel wouldn&#8217;t require any coding.  How hard could that be?  Famous last words.</p>
<p><strong>The Problem</strong></p>
<p>The majority of PDF generators out there are exactly that generators. They simply create new PDF&#8217;s based on programming code. They don&#8217;t edit existing PDF files, let alone have the ability to fill in data.  So I looked into a couple other solutions.  First I checked out image based solutions like using ImageMagick.  I could of course edit existing image files and add data.  But, the problem is the added image data would have to be positioned.  If the template image changed, so would my positions in code.  So that was out.</p>
<p>I tried using PostScript files saved from Adobe Illustrator.   I created a template and placed text like &lt;% replace_me %&gt;.  That should work right?  Wrong.  For whatever reason Adobe Illustrator likes to create HUGE files.  Yes 100,000 lines long in some cases. It also splits up text arbitrarily.  So &#8220;&lt;% replace_me %&gt;&#8221; became &#8220;&lt;% r&#8221; 20 lines of positioning and font information, &#8220;eplac&#8221; 20 lines of positioning and font information, etc.  Making a search and replace impossible.</p>
<p><strong>iText to the Rescue</strong></p>
<p><a href="http://www.lowagie.com/iText/">iText</a> is an excellent Java PDF library.  In fact, I believe other then it&#8217;s C# counterpart.  Is the only PDF library which could do what I wanted.  iText can take existing PDF&#8217;s and manipulate them.  It also can take blank PDF forms and fill out the data, similar to taking HTML form and setting each form field tags value attribute.  This is exactly what I wanted.  Although it is an ad-hoc round about solution it does work.</p>
<p>Creating PDF forms is pretty easy also. Downside is only one product can create them Adobe LiveCycle Designer, which comes with Adobe Acrobat Professional.</p>
<p><strong>Solution</strong></p>
<p>So first I needed to create a wrapper around iText using the excellent <a href="http://rjb.rubyforge.org/">Ruby Java Bridge</a>(Rjb).</p>
<pre>
require 'rjb'
Rjb::load('lib/itext-1.4.8.jar')

class PDFStamper
  attr_accessor :writer

  def initialize( template = "proposal_template.pdf" )
    filestream   = Rjb::import('java.io.FileOutputStream')
    acrofields   = Rjb::import('com.lowagie.text.pdf.AcroFields')
    pdfreader    = Rjb::import('com.lowagie.text.pdf.PdfReader')
    pdfstamper   = Rjb::import('com.lowagie.text.pdf.PdfStamper')

    reader = pdfreader.new( template )
    @stamp = pdfstamper.new( reader, filestream.new( tmpfile() ) )
    @form = @stamp.getAcroFields()
  end

  def set( key, value )
    @form.setField( key, value.to_s )
  end

  def fill
    @stamp.setFormFlattening(true)
    @stamp.close
  end

  def tmpfile
    return @tmpfile unless @tmpfile.nil?
    @tmpfile = File.join( Dir::tmpdir, make_tmpname )
  end

  private

  def make_tmpname
    return 'proposal-' + rand(10000).to_s + '.pdf'
  end
end</pre>
<p>Then using Adobe LiveCycle Designer, I simply created a PDF form and added textfield&#8217;s which would be filled out by iText.  The textfield&#8217;s can be styled, so don&#8217;t think you have to keep that normal &#8220;textfield&#8221; look. Make sure you give each textfield a name that you will use &#8220;set( textfield_name, value)&#8221; to set the value .  In my PDF I simply named each textfield after the database fields.  Then in my controller code, I had the following.</p>
<pre>def output
  order = Order.find(params[:id])
  pdf = PDFStamper.new

  for column in Order.content_columns
    pdf.set( column.name, order.send(column.name) )
  end

  pdf.fill

  send_data( File.open( pdf.tmpfile ).read,
    :filename =&gt; "order.pdf",
    :type =&gt; "application/pdf",
    :disposition =&gt; "inline"
  )
end</pre>
<p><strong>Caveats</strong></p>
<p>First of, you need Java environment variables set correctly before this will work.</p>
<pre>export LD_LIBRARY_PATH=/usr/java/jdk1.6.0/jre/lib/i386/:/usr/java/jdk1.6.0/jre/lib/i386/client/:./
export JAVA_HOME=/usr/java/jdk1.6.0/</pre>
<p>You can set these variables in the command line and start mongrel manually &#8220;mongrel_rails start&#8221;.  Which will work fine.  Except in production this isn&#8217;t really a good solution.</p>
<p>I ended up using the mongrel_cluster init.d script that comes with mongrel.  Documentation is available <a href="http://mongrel.rubyforge.org/docs/mongrel_cluster.html">here</a>. I simply placed the export commands on the top of the script.</p>
<p>Another issue I hit was when Java starts.  Java will check for total available system memory and then precedes to steal a good portion of it.  Now this isn&#8217;t a problem with a dedicated server. A virtual server, on the other hand, is allocated a portion of the available system memory.  So if the server you are on has 4gbs of memory.  Java thinks it has 4gbs to play with, not the 256mb allocated to your virtual server.</p>
<p>This caused this weird issue where one mongrel process in my cluster would work and one wouldn&#8217;t.  Because each mongrel instance starts its own Java process.  The first one would steal all the available memory.  Then the second couldn&#8217;t even start because no memory was available.</p>
<p>Making matters worse Rails or Mongrel, not sure which, would hide this memory error.  I didn&#8217;t figure it out until I created a test script that forked, each fork loading the iText jar.  The test showed the error coming from Java.</p>
<p>To fix this, I set the _JAVA_OPTIONS environment variable.  The options get sent to Java as it loads, it limits the amount of ram each Java instance can eat up. Just place this next to your other Java environment variables inside your init.d mongrel script.</p>
<pre>export _JAVA_OPTIONS='-Xms16m -Xmx32m'</pre>
<p>You may have to fudge these numbers a little for your particular environment.  Or, if you are using a dedicated server don&#8217;t worry about it.</p>
<p><strong>Limitations</strong></p>
<p>Now for my particular needs, I only needed text placeholders for the template.  However, I believe using LiveCycle designer you can place image placeholders and table based data.  Then use iText to fill them in. Don&#8217;t take my word for it though.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jaywhy.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jaywhy.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jaywhy.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jaywhy.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jaywhy.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jaywhy.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jaywhy.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jaywhy.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jaywhy.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jaywhy.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jaywhy.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jaywhy.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jaywhy.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jaywhy.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jaywhy.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jaywhy.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jaywhy.wordpress.com&amp;blog=360097&amp;post=8&amp;subd=jaywhy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jaywhy.wordpress.com/2007/03/05/pdf-templates-via-rails/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0a68c43f27f20e659120d70a2cea3e0a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jaywhy</media:title>
		</media:content>
	</item>
		<item>
		<title>Who needs compliance, we have &#8220;improvements&#8221;?</title>
		<link>http://jaywhy.wordpress.com/2006/08/17/3/</link>
		<comments>http://jaywhy.wordpress.com/2006/08/17/3/#comments</comments>
		<pubDate>Thu, 17 Aug 2006 02:37:46 +0000</pubDate>
		<dc:creator>jaywhy</dc:creator>
				<category><![CDATA[web]]></category>

		<guid isPermaLink="false">https://jaywhy.wordpress.com/2006/08/17/3/</guid>
		<description><![CDATA[Microsoft&#8217;s Chris Wilson, the Group Program Manager for IE, was interviewed by ZDNet today and with great marketing finesse managed to completely dodge the whole standards compliance issue. Instead Chris talks about “standard improvements” or “improvements in our standards support in IE7”. I applaud the IE team here for the IE6 bug improvements found in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jaywhy.wordpress.com&amp;blog=360097&amp;post=3&amp;subd=jaywhy&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Microsoft&#8217;s Chris Wilson, the Group Program Manager for IE, was <a href="http://blogs.zdnet.com/web2explorer/?p=260">interviewed</a> by ZDNet today and with great marketing finesse managed to completely dodge the whole standards compliance issue.  Instead Chris talks about “standard improvements” or “improvements in our standards support in IE7”.  I applaud the IE team here for the IE6 bug improvements found in IE7. However, what about actual standards compliance? According to the <a href="http://blogs.msdn.com/ie/archive/2005/07/29/445242.aspx">IEBlog</a>, the IE7 team has added support for.</p>
<ul>
<li>HTML 4.01 ABBR tag</li>
<li>Improved (though not yet perfect) &lt;object&gt; fallback</li>
<li>CSS 2.1 Selector support (child, adjacent, attribute, first-child etc.)</li>
<li>CSS 2.1 Fixed positioning</li>
<li>Alpha channel in PNG images</li>
<li>Fix :hover on all elements</li>
<li>Background-attachment: fixed on all elements not just body</li>
</ul>
<p>Most of these added features still have issues, or caveats related to them.  Slack, of course, should be given with IE7 still being in beta. Overall though even with these additions, standards compliance hasn&#8217;t changed much in IE7.  Web Devout analysis of both IE6 and IE7 confirms this.  First let me say a semi-legitimate argument could be made saying Web Devout&#8217;s numbers are biased towards IE.  However I still think is fairly effective especially when comparing IE with itself.</p>
<table>
<tr>
<td>&nbsp;</td>
<td>IE 6</td>
<td>IE 7</td>
<td>Firefox 1.5</td>
<td>Opera 8.5</td>
<td>Opera 9</td>
</tr>
<tr>
<td>HTML / XHTML</td>
<td>73%</td>
<td>73%</td>
<td>90%</td>
<td>85%</td>
<td>85%</td>
</tr>
<tr>
<td>CSS 2.1</td>
<td>51%</td>
<td>55%</td>
<td>93%</td>
<td>92%</td>
<td>95%</td>
</tr>
<tr>
<td>CSS 3 changes</td>
<td>10%</td>
<td>13%</td>
<td>27%</td>
<td>8%</td>
<td>22%</td>
</tr>
<tr>
<td>DOM</td>
<td>50%</td>
<td>51%</td>
<td>79%</td>
<td>78%</td>
<td>84%</td>
</tr>
<tr>
<td>ECMAScript</td>
<td>99%</td>
<td>99%</td>
<td>Y</td>
<td>Y</td>
<td>Y</td>
</tr>
</table>
<p>As you can see, there really isn&#8217;t much difference between IE6 and IE7 with regards to standards compliance.  Most importantly, in my opinion, IE7 is still lacking:</p>
<ul>
<li>DOM Level 2 Events(Netscape Communicator had this in 2000!)</li>
<li>DOM attributes are still broken</li>
<li>No Javascript 1.6 support</li>
<li>CSS :focus</li>
<li>SVG support</li>
</ul>
<p align="left">However my list is quite short. There are <a href="https://jaywhy.wordpress.com/wp-admin/%E2%80%9Dhttp://www.quirksmode.org/blog/archives/2006/04/ie_7_and_javasc.html%E2%80%9D">many</a> <a href="https://jaywhy.wordpress.com/wp-admin/%E2%80%9Dhttp://erik.eae.net/archives/2006/02/01/12.10.34/%E2%80%9D">more</a> <a href="https://jaywhy.wordpress.com/wp-admin/%E2%80%9Dhttp://alex.dojotoolkit.org/?p=536%E2%80%9D">lists</a> out better than mine.</p>
<p>I wouldn&#8217;t go so far to say as IE7 is “just a bug release”.  It is fairly close however.  IE7 is still years behind most modern web browsers, and it hasn&#8217;t even been released.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jaywhy.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jaywhy.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jaywhy.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jaywhy.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jaywhy.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jaywhy.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/jaywhy.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/jaywhy.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/jaywhy.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/jaywhy.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jaywhy.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jaywhy.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jaywhy.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jaywhy.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jaywhy.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jaywhy.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jaywhy.wordpress.com&amp;blog=360097&amp;post=3&amp;subd=jaywhy&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://jaywhy.wordpress.com/2006/08/17/3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/0a68c43f27f20e659120d70a2cea3e0a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">jaywhy</media:title>
		</media:content>
	</item>
	</channel>
</rss>
