<?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/"
	>

<channel>
	<title>Off you go... into the purple yonder!</title>
	<atom:link href="http://ward.vandewege.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://ward.vandewege.net/blog</link>
	<description></description>
	<lastBuildDate>Fri, 04 May 2012 16:39:26 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>International Day Against DRM</title>
		<link>http://ward.vandewege.net/blog/2012/05/international-day-against-drm/</link>
		<comments>http://ward.vandewege.net/blog/2012/05/international-day-against-drm/#comments</comments>
		<pubDate>Fri, 04 May 2012 16:39:26 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Everything else]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=704</guid>
		<description><![CDATA[May 4th is the International Day Against DRM. To celebrate, get 50% off all e-books at oreilly.com &#8211; today only! Use the code DRMFREE.]]></description>
			<content:encoded><![CDATA[<p>May 4th is the <a href="http://www.defectivebydesign.org/dayagainstdrm">International Day Against DRM</a>. </p>
<p>To <a href="http://radar.oreilly.com/2012/05/day-against-drm.html">celebrate</a>, get 50% off all e-books at <a href="http://oreilly.com">oreilly.com</a> &#8211; today only! Use the code DRMFREE.</p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2012/05/international-day-against-drm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrate MoinMoinWiki to Redmine</title>
		<link>http://ward.vandewege.net/blog/2011/11/migrate-moinmoinwiki-to-redmine/</link>
		<comments>http://ward.vandewege.net/blog/2011/11/migrate-moinmoinwiki-to-redmine/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 19:39:23 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=654</guid>
		<description><![CDATA[I had a few old MoinMoin installs that were due for an upgrade, and I wanted to migrate them to Redmine. I found a migration script at norwinter.com, which I improved a bit. It will handle wiki pages with full &#8230; <a href="http://ward.vandewege.net/blog/2011/11/migrate-moinmoinwiki-to-redmine/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I had a few old <a href="http://moinmo.in">MoinMoin</a> installs that were due for an upgrade, and I wanted to migrate them to <a href="http://redmine.org">Redmine</a>.</p>
<p>I found a <a href="http://www.norwinter.com/2009/08/02/migrate-moinmoinwiki-to-redmine/">migration script</a> at norwinter.com, which I improved a bit. It will handle wiki pages with full history as well as attachments. It won&#8217;t preserve who committed revisions, however &#8211; that is hardcoded in the script. So, this is still a hack. </p>
<p>Usage instructions:</p>
<p>a) copy your MoinMoinWiki data/pages directory to the server that runs your redmine install<br />
b) put the migrate_from_moinmoin.rake script in lib/tasks/ in your Redmine install<br />
c) edit the migrate_from_moinmoin.rake script, replace both instances of YOUR@EMAIL.ADDRESS<br />
d) run <i>rake redmine:migrate_from_moinmoin RAILS_ENV=&#8221;production&#8221;</i><br />
e) provide a unique redmine project id and the path to your MoinMoinWiki data/pages directory</p>
<p>And here is my version of <a href="/blog/wp-content/uploads/2011/11/migrate_from_moinmoin.rake">migrate_from_moinmoin.rake</a>. </p>
<p>This script worked well enough for me to import MoinMoinWiki version 1.5.7 to Redmine 1.2.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2011/11/migrate-moinmoinwiki-to-redmine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>grub rescue commands</title>
		<link>http://ward.vandewege.net/blog/2011/08/grub-rescue-commands/</link>
		<comments>http://ward.vandewege.net/blog/2011/08/grub-rescue-commands/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 01:30:18 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=634</guid>
		<description><![CDATA[I wasted some time on Friday trying to get a machine with grub 2 installed to boot. The machine booted into Grub&#8217;s rescue mode. Grub 2&#8242;s rescue mode is nice, but not exactly intuitive (no &#8216;help&#8217; or &#8216;?&#8217; command), and &#8230; <a href="http://ward.vandewege.net/blog/2011/08/grub-rescue-commands/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I wasted some time on Friday trying to get a machine with grub 2 installed to boot. </p>
<p>The machine booted into Grub&#8217;s rescue mode. Grub 2&#8242;s rescue mode is nice, but not exactly intuitive (no &#8216;help&#8217; or &#8216;?&#8217; command), and documentation for it is apparently not easily found via Google.</p>
<p>This is what was eluding me for a while:</p>
<pre>
In rescue mode, only the insmod, ls, set, and unset commands are
normally available. If you end up in rescue mode and do
not know what to do, then see "GRUB only offers a rescue shell."
</pre>
<p>That&#8217;s from the Grub manual at <a href="http://www.gnu.org/software/grub/manual/grub.html#Commands">gnu.org</a>. </p>
<p>The steps involved in recovery are documented <a href="http://www.gnu.org/software/grub/manual/grub.html#GRUB-only-offers-a-rescue-shell">in the same manual</a>. Basically you need to set the prefix and root variables, and then insmod the &#8216;normal&#8217; module and run it.</p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2011/08/grub-rescue-commands/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>disk, disk, disk</title>
		<link>http://ward.vandewege.net/blog/2011/07/disk-disk-disk/</link>
		<comments>http://ward.vandewege.net/blog/2011/07/disk-disk-disk/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 14:13:50 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=496</guid>
		<description><![CDATA[I started adding 165 TB of disk to one of our clusters today. This is what that looks like &#8211; 55 three TB disks: The packaging was not too great; while all disks were well packaged individually, the big boxes &#8230; <a href="http://ward.vandewege.net/blog/2011/07/disk-disk-disk/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I started adding 165 TB of disk to one of our clusters today. This is what that looks like &#8211; 55 three TB disks:</p>
<p><a href='/blog/wp-content/photos/img_3317.jpg' title='165 TB'><img src='/blog/wp-content/photos/thumb_img_3317.jpg' alt='165 TB' width='130' height='97' class='pp_empty' /></a></p>
<p>The packaging was not too great; while all disks were well packaged individually, the big boxes that contained the individual drive boxes were flimsy. As a consequence, one of the disks got rather damaged (the one on the right):</p>
<p><a href='/blog/wp-content/photos/img_3318.jpg' title='damaged disk'><img src='/blog/wp-content/photos/thumb_img_3318.jpg' alt='damaged disk' width='130' height='97' class='pp_empty' /></a></p>
<p>I don&#8217;t know what it got hit with, but it must have been a pretty serious blow. The aluminium enclosure of the drive is severely dented and even cracked; the white line in the image below is an actual crack in the metal:</p>
<p><a href='/blog/wp-content/photos/IMG_3327.JPG' title='cracked disk'><img src='/blog/wp-content/photos/thumb_IMG_3327.JPG' alt='cracked disk' width='130' height='97' class='pp_empty' /></a></p>
<p>Back in October 2009 I added 130 TB of disk to another cluster, which looked like this, prior to install:</p>
<p><a href='/blog/wp-content/photos/2009_10_09_10.07.22.jpg' title=130TB, big'><img src='/blog/wp-content/photos/thumb_2009_10_09_10.07.22.jpg' alt='130TB' width='97' height='130' class='pp_empty' /></a></p>
<p>That was 65 times <a href="http://www.wdc.com/en/products/products.asp?driveid=610">WD2002FYPS</a>. </p>
<p>So this time around &#8211; almost 18 months later &#8211; we get 27% more capacity using 15% fewer drives. Got to love the computer industry and the progress it makes.</p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2011/07/disk-disk-disk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>idle power draw of modern Opteron CPUs</title>
		<link>http://ward.vandewege.net/blog/2011/04/idle-power-draw-of-modern-opteron-cpus/</link>
		<comments>http://ward.vandewege.net/blog/2011/04/idle-power-draw-of-modern-opteron-cpus/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 22:05:30 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Environment]]></category>
		<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=599</guid>
		<description><![CDATA[I&#8217;ve been curious for a while about how much power Opteron CPUs draw when idle, so I set aside a bit of time to do some measurements. I used a Supermicro 1U system with redundant power supply. The motherboard model &#8230; <a href="http://ward.vandewege.net/blog/2011/04/idle-power-draw-of-modern-opteron-cpus/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been curious for a while about how much power Opteron CPUs draw when idle, so I set aside a bit of time to do some measurements. I used a Supermicro 1U system with redundant power supply. The motherboard model is <a href="http://www.amazon.com/gp/search/ref=as_li_qf_sp_sr_il_tl?ie=UTF8&#038;keywords=H8DGU-F&#038;tag=offyougointot-20&#038;index=aps&#038;linkCode=as2&#038;camp=1789&#038;creative=9325">H8DGU-F</a>. The system has 32GB of DDR3 ECC ram, and two <a href="http://www.amazon.com/gp/search/ref=as_li_qf_sp_sr_il_tl?ie=UTF8&#038;keywords=x25-m&#038;tag=offyougointot-20&#038;index=aps&#038;linkCode=as2&#038;camp=1789&#038;creative=9325">Intel X25-M</a> 120GB SSDs. There are two <a href="http://www.amazon.com/gp/search/ref=as_li_qf_sp_sr_il_tl?ie=UTF8&#038;keywords=opteron%206128&#038;tag=offyougointot-20&#038;index=aps&#038;linkCode=as2&#038;camp=1789&#038;creative=9325">Opteron 6128</a> CPUs installed. These Opterons have 8 cores each, and they run at 2.0GHz. These are the CPU power specs:</p>
<table>
<tr>
<td width="200">&nbsp;&nbsp;Average CPU Power</td>
<td align="right">80W</td>
</tr>
<tr>
<td>&nbsp;&nbsp;Thermal Design Power (TDP)</td>
<td align="right">115W</td>
</tr>
</table>
<p>The &#8216;Average CPU Power&#8217; is based on &#8216;average&#8217; use, which is explained <a href="http://en.wikipedia.org/wiki/Average_CPU_power">on Wikipedia</a>. </p>
<p>According to Wikipedia, the <a href="http://en.wikipedia.org/wiki/Thermal_design_power">Thermal Design Power</a> is the maximum power consumption for thermally significant periods running worst-case non-synthetic workloads (cf. <a href="http://en.wikipedia.org/wiki/CPU_power_dissipation">this article</a>). If we assume that the bulk of the electrical power consumed by a CPU is converted into waste heat, then the TDP can be a reasonable approximation for the amount of electrical power a CPU would consume under a worst-case, real-world load.</p>
<p>I used cpuburn to generate such a load. There was no IO load on the system during the tests. I measured power draw with an off-the-shelf <a href="http://www.amazon.com/gp/search/ref=as_li_qf_sp_sr_il_tl?ie=UTF8&#038;keywords=opteron%206128&#038;tag=offyougointot-20&#038;index=aps&#038;linkCode=as2&#038;camp=1789&#038;creative=9325">Kill-a-watt</a>, so these results should be taken with a grain of salt.</p>
<table>
<tr>
<td align="right">&nbsp;&nbsp;16 cores</td>
<td>idle</td>
<td>145W (153VA)</td>
</tr>
<tr>
<td align="right">&nbsp;&nbsp;8 cores</td>
<td>loaded on 1 cpu</td>
<td>215W (221VA)</td>
</tr>
<tr>
<td align="right">&nbsp;&nbsp;8 cores</td>
<td width="200">loaded spread over 2 cpus</td>
<td>235W (243VA)</td>
</tr>
<tr>
<td align="right">&nbsp;&nbsp;14 cores</td>
<td>loaded</td>
<td>277W (285VA)</td>
</tr>
<tr>
<td align="right">&nbsp;&nbsp;16 cores</td>
<td>loaded</td>
<td>290W (297VA)</td>
</tr>
</table>
<p>The data indicates that the idle vs. full load power consumption difference for one CPU is 70 to 75W.</p>
<p>If we assume the power consumption under full load is 115W (the TDP for the processor), then idle power consumption would be 40 to 45W per CPU. That would put idle power consumption at 35-39% of its TDP for this particular CPU.</p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2011/04/idle-power-draw-of-modern-opteron-cpus/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>acts_as_paranoid and acts_as_versioned on Rails 3</title>
		<link>http://ward.vandewege.net/blog/2011/04/acts_as_paranoid-and-acts_as_versioned-on-rails-3/</link>
		<comments>http://ward.vandewege.net/blog/2011/04/acts_as_paranoid-and-acts_as_versioned-on-rails-3/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 18:24:22 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=593</guid>
		<description><![CDATA[A few years ago, I described how to combine acts_as_paranoid and acts_as_versioned in order to make deleted records end up in your versioning tables. In order to do the same thing under Rails 3, I had to make a few &#8230; <a href="http://ward.vandewege.net/blog/2011/04/acts_as_paranoid-and-acts_as_versioned-on-rails-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A few years ago, <a href="http://ward.vandewege.net/blog/2007/02/acts_as_paranoid-and-acts_as_versioned/">I described</a> how to combine acts_as_paranoid and acts_as_versioned in order to make deleted records end up in your versioning tables.</p>
<p>In order to do the same thing under Rails 3, I had to make a few adjustments. First of all, you need the rails3_acts_as_paranoid gem, which is a <a href="https://github.com/goncalossilva/rails3_acts_as_paranoid">total rewrite of acts_as_paranoid for rails 3</a>. Add these lines to your Gemfile:</p>
<pre>
gem 'rails3_acts_as_paranoid'
gem 'acts_as_versioned'
</pre>
<p>Then put a file in config/initializers with these contents:</p>
<pre>
module ActiveRecord
  module Acts
    module Versioned
      def acts_as_paranoid_versioned(options = {})
        acts_as_paranoid
        acts_as_versioned options

        # Override the destroy method. We want deleted records to end up in the versioned table,
        # not in the non-versioned table.
        self.class_eval do
          def destroy()
            with_transaction_returning_status do
              run_callbacks :destroy do
                # call the acts_as_paranoid delete function
                self.class.delete_all(:id => self.id)

                # get the 'deleted' object
                tmp = self.class.unscoped.find(id)

                # run it through the equivalent of acts_as_versioned's
                # save_version(). We used to call that function but it is a
                # noop when @saving_version is not set. That only gets done in
                # a protected function set_new_version(). Easier to just
                # replicate the meat of the save_version() function here.
                rev = tmp.class.versioned_class.new
                clone_versioned_model(tmp, rev)
                rev.send("#{tmp.class.version_column}=", send(tmp.class.version_column))
                rev.send("#{tmp.class.versioned_foreign_key}=", id)
                rev.save

                # and finally really destroy the original
                self.class.delete_all!(:id => self.id)
              end
            end
          end
        end

        # protect the versioned model
        self.versioned_class.class_eval do
          def self.delete_all(conditions = nil); return; end
        end
      end
    end
  end
end
</pre>
<p>I wonder if there is a more elegant way to achieve this&#8230;</p>
<p>Note: code updated at 2011-05-28 to make sure :dependent => :destroy on has_many associations does the right thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2011/04/acts_as_paranoid-and-acts_as_versioned-on-rails-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>compression</title>
		<link>http://ward.vandewege.net/blog/2010/11/compression/</link>
		<comments>http://ward.vandewege.net/blog/2010/11/compression/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 15:12:15 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=591</guid>
		<description><![CDATA[Before: -rw-r--r-- 1 root root 1.1G 2010-10-31 20:19 10125-127-2010-10.error After: -rw-r--r-- 1 root root 11M 2010-10-31 20:19 10125-127-2010-10.error.bz2 Bzip2 reduced the file to 1% of its original size. Not bad!]]></description>
			<content:encoded><![CDATA[<p>Before:</p>
<pre>
-rw-r--r-- 1 root  root  1.1G 2010-10-31 20:19 10125-127-2010-10.error
</pre>
<p>After:</p>
<pre>
-rw-r--r-- 1 root  root   11M 2010-10-31 20:19 10125-127-2010-10.error.bz2
</pre>
<p>Bzip2 reduced the file to 1% of its original size. Not bad!</p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2010/11/compression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>resistor captcha</title>
		<link>http://ward.vandewege.net/blog/2010/11/resistor-captcha/</link>
		<comments>http://ward.vandewege.net/blog/2010/11/resistor-captcha/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 16:12:30 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=589</guid>
		<description><![CDATA[Adafruit Industries uses an awesome captcha. For an example, look at the Kinect bounty page (scroll all the way to the bottom).]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.adafruit.com">Adafruit Industries</a> uses an awesome captcha. For an example, look at the <a href="http://www.adafruit.com/blog/2010/11/04/the-open-kinect-project-the-ok-prize-get-1000-bounty-for-kinect-for-xbox-360-open-source-drivers/">Kinect bounty</a> page (scroll all the way to the bottom).</p>
<p><img src="http://ward.vandewege.net/blog/wp-content/uploads/2010/11/adafruit-captcha.png" alt="resistor-captcha" title="resistor-captcha" width="516" height="364" class="aligncenter size-full wp-image-588" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2010/11/resistor-captcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>64K hours</title>
		<link>http://ward.vandewege.net/blog/2010/10/64k-hours/</link>
		<comments>http://ward.vandewege.net/blog/2010/10/64k-hours/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 16:20:05 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Sysadmin]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=584</guid>
		<description><![CDATA[Some disks last a long time. This is an old IBM IDE drive (IC35L040AVVA07-0). smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF READ SMART DATA SECTION === SMART Self-test log structure revision &#8230; <a href="http://ward.vandewege.net/blog/2010/10/64k-hours/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Some disks last a long time. This is an old IBM IDE drive (IC35L040AVVA07-0).</p>
<pre>
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed without error       00%        66         -
# 2  Extended offline    Completed without error       00%     65434         -
# 3  Extended offline    Completed without error       00%     65266         -
</pre>
<p>Interestingly, the Power_On_Hours field did not wrap. Bug in smartctl? Bug in the drive firmware?</p>
<pre>
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000b   095   095   060    Pre-fail  Always       -       458761
  2 Throughput_Performance  0x0005   100   100   050    Pre-fail  Offline      -       210
  3 Spin_Up_Time            0x0007   105   105   024    Pre-fail  Always       -       160 (Average 154)
  4 Start_Stop_Count        0x0012   100   100   000    Old_age   Always       -       27
  5 Reallocated_Sector_Ct   0x0033   100   100   005    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000b   100   100   067    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0005   111   111   020    Pre-fail  Offline      -       43
  9 Power_On_Hours          0x0012   091   091   000    Old_age   Always       -       65616
 10 Spin_Retry_Count        0x0013   100   100   060    Pre-fail  Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       27
192 Power-Off_Retract_Count 0x0032   099   099   050    Old_age   Always       -       1387
193 Load_Cycle_Count        0x0012   099   099   050    Old_age   Always       -       1387
194 Temperature_Celsius     0x0002   189   189   000    Old_age   Always       -       29 (Lifetime Min/Max 21/39)
196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0022   100   100   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0008   100   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       0
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2010/10/64k-hours/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>microsoft discovers remote attestation</title>
		<link>http://ward.vandewege.net/blog/2010/10/microsoft-discovers-remote-attestation/</link>
		<comments>http://ward.vandewege.net/blog/2010/10/microsoft-discovers-remote-attestation/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 02:31:03 +0000</pubDate>
		<dc:creator>ward</dc:creator>
				<category><![CDATA[Free Software/Open Source]]></category>
		<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://ward.vandewege.net/blog/?p=579</guid>
		<description><![CDATA[Via slashdot: Microsoft&#8217;s corporate VP for trustworthy computing &#8211; Scott Charney &#8211; has published a position paper that boils down to remote attestation: let ISPs cut off internet access for computers that are not deemed free of malware. So&#8230; how &#8230; <a href="http://ward.vandewege.net/blog/2010/10/microsoft-discovers-remote-attestation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Via <a href="http://it.slashdot.org/story/10/10/08/006240/Microsoft-Eyes-PC-Isolation-Ward-To-Thwart-Botnets">slashdot</a>: Microsoft&#8217;s corporate VP for trustworthy computing &#8211; Scott Charney &#8211; has <a href="http://blogs.technet.com/b/microsoft_on_the_issues/archive/2010/10/05/the-need-for-global-collective-defense-on-the-internet.aspx?wa=wsignin1.0">published a position paper</a> that boils down to <a href="http://en.wikipedia.org/wiki/Trusted_Computing#Remote_attestation">remote attestation</a>: let ISPs cut off internet access for computers that are not deemed free of malware.</p>
<p>So&#8230; how would this work? Presumably the computer would run some code that is not under the control of the user/owner of the machine, and protected by the <a href="http://en.wikipedia.org/wiki/Trusted_Platform_Module">TPM</a> module. That code would then validate if the machine is free of malware or not &#8211; somehow. I have no idea how that could possibly be foolproof, but let&#8217;s assume for a moment there is a way to do this.</p>
<p>First problem: your computer would have to run code that most likely comes without source, is hard or impossible to inspect, and cannot be changed.</p>
<p>Let&#8217;s say for the sake of argument that this validation code is somehow optional. Or perhaps you are an enterprising person, and you&#8217;ve managed to kick this stuff off your computer (TPM-ectomy, anyone?). Next problem: now you can&#8217;t validate your computer with your ISP to prove that it is free of malware. To do that, you need access to the secret encryption key buried in the TPM.</p>
<p>This is called remote attestation: the machine(s) your computer communicates with can see information about your computer &#8211; say, what operating system you run, and what patch level &#8211; and because that data is signed or encrypted by your TPM chip, <i>you can not change it</i>.</p>
<p>Note that it&#8217;s already pretty easy for remote machines to see what (version of) an operating system a computer runs, for instance with <a href="http://en.wikipedia.org/wiki/TCP/IP_stack_fingerprinting">TCP/IP fingerprinting</a>, but that is easy to fake.</p>
<p>Remote attestation is the real danger of &#8216;trustworthy&#8217; computing. They can try to put all sorts of things in the hardware; if people have physical access, someone will find a way around it. But if they make it impossible to network your computer without an operational TPM chip then we might as well kiss all our free software and free hardware goodbye. It won&#8217;t be any good to run a computer with GNU/Linux, if we can&#8217;t go online with it&#8230; Or if our online banking refuses to talk to our computer because our machine is not deemed to be running a fully patched version of Windows.</p>
<p>Given that this position paper comes from Microsoft, it&#8217;s not too hard to see where they want to go. Microsoft would love to be in a position where ISPs and banks require certain patchlevels of its software. Can you imagine a better way to force people to keep upgrading their Windows licenses? Or to force people to stop using free operating systems?</p>
<p>I have a better idea to combat the malware problem, mr. Charney. Why don&#8217;t we ask people to stop using Windows. Without Windows, the malware/botnet problem would not be nearly as bad as it is today.</p>
]]></content:encoded>
			<wfw:commentRss>http://ward.vandewege.net/blog/2010/10/microsoft-discovers-remote-attestation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

