<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Devlin&apos;s Weblog</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/" />
<modified>2007-09-03T06:13:15Z</modified>
<tagline></tagline>
<id>tag:blogs.eclab.byu.edu,2007:/daley//7</id>
<generator url="http://www.movabletype.org/" version="3.01D">Movable Type</generator>
<copyright>Copyright (c) 2007, Devlin</copyright>
<entry>
<title>My blog has moved</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2007/08/my_blog_has_mov.html" />
<modified>2007-09-03T06:13:15Z</modified>
<issued>2007-08-31T00:41:46Z</issued>
<id>tag:blogs.eclab.byu.edu,2007:/daley//7.305</id>
<created>2007-08-31T00:41:46Z</created>
<summary type="text/plain"> I decided to start a new blog, a blog that won&apos;t go away when I graduate someday. It&apos;s called The Daley Devlin. I finally have my own domain now too at http://devlindaley.com. You can update your feed reader by...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>
I decided to start a new blog, a blog that won't go away when I graduate someday.
</p>

<p>
It's called <a href="http://devlindaley.com">The Daley Devlin</a>. I finally have my own domain now too at <a href="http://devlindaley.com">http://devlindaley.com</a>. 	You can update your feed reader by subscribing directly to my feed at <a href="http://feeds.feedburner.com/TheDaleyDevlin">FeedBurner</a>.
</p>]]>

</content>
</entry>
<entry>
<title>Rubifying Legacy Databases</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2006/01/rubifying_legac_1.html" />
<modified>2007-09-03T06:13:46Z</modified>
<issued>2006-01-20T23:42:19Z</issued>
<id>tag:blogs.eclab.byu.edu,2006:/daley//7.239</id>
<created>2006-01-20T23:42:19Z</created>
<summary type="text/plain"> ActiveRecord There are several conventions, which when followed in RoR lead to getting a tremendous amount of functionality for free. Some of the more well known conventions is that of model names to table names. Model names should be...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>ruby</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<h3> ActiveRecord</h3>
<p>
There are several conventions, which when followed in RoR lead to getting a tremendous amount of functionality for free. Some of the more well known conventions is that of model names to table names.  Model names should be in the  singular form, with mixed case (i.e. Person, LineItem, Post) and the table names by convention are pluralized written in the underscore style (i.e. people, line_items, posts). Each table should have a surrogate primary key, named 'id', an auto increment integer. For new applications the conventions are so easily followed that usually there's no good reason to go against the grain. This is not true however, when you've inherited a legacy database.
</p>
<p>
The above described convention is just the convention, not the "must-be-done-this-way" edict. All of the properties above can be overridden, but if you don't follow the convention you must inform rails explicitly. No config files are used here, just good old ruby. The methods to look up here are
<pre>
set_table_name 'table_name'
set_primary_key 'StrangeConcoction'
</pre>
</p>
<p>
These methods work great - I have successfully connected ActiveRecord to a databse originally created in Access, then exported to MySQL. It wasn't created by an DBA, so several tables use things like "CompanyName" as the primary key. ActiveRecord handles these without a hitch. I did find a problem however with columns whose names ended with a question mark. ActiveRecord has no problem getting the value from the database, it runs into trouble when trying to set a new value to that field.
</p>
<pre>
sample = Sample.find :first
sample.ReportSent?
=> false  # ok
sample.ReportSent?= true
=> syntax error  #not ok
</pre>


<h3>Meta Programming to the Rescue</h3>

<p>
I'll just extend ActiveRecord::Base to include a method, which when called, will query the database to discover which columns end in '?''s and then adds methods to the class, implementing methods to give us access to these columns.
</p>
<p>
To add this functionality to ActiveRecord::Base, we can just open it up and define some more methods. I put this in a file called column_renamer.rb in my lib/ directory.
<pre>
module ActiveRecord
   class Base
      def self.add_question_mark_writers
         columns.find_all{|c| c.name.last == '?'}.map{|c| c.name.chop} do |method|
            define_method(method + '=') { |val|
               write_attribute method, val
            end
         end
      end
   end
end
</pre>
Now, in the class:
<pre>
class Sample < ActiveRecord::Base
   set_table_name 'tblSamples'
   set_primary_key 'labTrackingNumber'
   add_question_mark_writers
end
</pre>
Then...
<pre>
sample = Sample.find :first
sample.ReportSent?  
=> false  # ok
sample.ReportSent = true  
=> true   # ok too!
</pre>
</p>
<h3>It works, now let's "rubify"</h3>
<p>
So after I got the above working, I had access to each field of the database tables and life was good. It did not take long however for something apparent above to start bugging me. The Ruby way of naming attributes is in lower case with underscores separating words, not CamelCase or whatever other convention is used in the legacy database. It just sticks out like a sore thumb in beautiful ruby code. Then I realized, I'll just use my trick to make the databse look more like ruby, or I call it "rubifying" the database.
</p>
<p>
Now my column_renamer.rb looks like this
<pre>
module ActiveRecord
   class Base
      def self.add_question_mark_writers
         columns.find_all{|c| c.name.last == '?'}.map{|c| c.name.chop} do |method|
            # just call underscore to change method name to ruby style instead
            define_method(method.underscore + '=') { |val|
               write_attribute method, val
            end

            define_method(method.underscore + '?') {
               read_attribute(method + '?')
            end
         end
      end

      def rubify_methods
         add_question_mark_writers
         # we've already handled the question mark special case
         # just rubify the rest
         self.columns.find_all{|c| c.name.last != '?'}.map{|c| c.name} do |column|
            define_method(column.underscore) do
              read_attribute column
            end
          
            define_method(column.underscore + '=') do |val|
               write_attribute column, val
            end
         end
      end
   end
end
</pre>

Now, I get code that looks like:
<pre>
sample = Sample.find :first
sample.report_sent?
=> false
sample.report_sent = true
=> true
</pre>
Ahhhh, <b>much better</b>.
<p>]]>

</content>
</entry>
<entry>
<title>RailsConf 2006</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/11/railsconf_2006g.html" />
<modified>2007-09-03T06:14:04Z</modified>
<issued>2005-11-28T20:12:38Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.213</id>
<created>2005-11-28T20:12:38Z</created>
<summary type="text/plain">Great news from the guys who bring us RubyConf. This coming June 22-25 2006 in Chicago is RailsConf. I have not yet been able to make any Ruby conference, well, that&apos;s not quite accurate. I was able to drop in...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>Great news from the guys who bring us RubyConf. This coming June 22-25 2006 in Chicago is RailsConf. I have not yet been able to make any Ruby conference, well, that's not quite accurate.  I was able to drop in on FOSCON in Portland this year since I was nearby for a family reunion. It's great to gather with the fellows that I usually only get to read about.
</p>
<p>
It is a bit of money to go (at least for a poor college student like myself) so if anyone is going and wants to support someone to carry their bags for them, I've got dibbs.
</p>]]>

</content>
</entry>
<entry>
<title>Pride and Prejudice</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/11/pride_and_preju_1.html" />
<modified>2006-05-09T23:19:44Z</modified>
<issued>2005-11-19T00:02:27Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.211</id>
<created>2005-11-19T00:02:27Z</created>
<summary type="text/plain">Last night I took my wife to the only movie theater showing Pride and Prejudice near us in Utah, Jordon Commons. I think you have to go into a movie like this, a story line which has been remade, and...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>Movies</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>Last night I took my wife to the only movie theater showing Pride and Prejudice near us in Utah, Jordon Commons.</p>

<p>I think you have to go into a movie like this, a story line which has been remade, and remade and then remade again, with some different frame of reference. Several times during the movie my wife would lean over and comment how the movie was not like the A&E (BBC) version. It's different.  I think this must come down to the fact that she has read the book and I have not. So, she expected the director to play second fiddle to the original work, while I was more open to an interesting re-telling or perspective. She did like the movie, just not as much as I did.</p>

<p>Overall, I quite liked it. Production quality was very high and the acting was clearly top drawer without being too much. It is pretty faithful to the major plot points of the story while showing an appreciated slightly different interpretation. The role of the mother which bothered me to no end in the BBC version was not allowed to dominate, while the role of the father brilliantly played by Donald Sutherland was surprisingly developed. Kiera Knightly did a fantastic job, expressing very much in little time with subtle body language and facial expressions.</p>

<p>
**** <br/>
4 stars
</p>]]>

</content>
</entry>
<entry>
<title>Manually Experimenting with HTTP 1.1</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/09/manually_experi_1.html" />
<modified>2007-09-03T06:14:27Z</modified>
<issued>2005-09-24T00:16:16Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.175</id>
<created>2005-09-24T00:16:16Z</created>
<summary type="text/plain">I&apos;m taking the &quot;Large-scale Distributed System Design&quot; from Dr. Windley. In teaching us about HTTP he used a telnet session to manually interact with the protocol to illustrate the complete lack of magic and simplicity of the protocol. Here&apos;s how...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>Misc</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>I'm taking the "Large-scale Distributed System Design" from Dr. Windley. In teaching us about HTTP he used a telnet session to manually interact with the protocol to illustrate the complete lack of magic and simplicity of the protocol. Here's how he did it.
</p>
<p>
Using a unix style command line, the session looks something like this:
</p>
<pre>
[devlin@peacemaker]$ telnet host.com 80
Trying 66.239.30.206...
Connected to host.com (66.239.30.204).
Escape character is '^]'.
GET / HTTP/1.0 [return]
               [return]
HTTP/1.1 200 OK
Date: Fri, 23 Sep 2005 23:27:19 GMT
Server: Apache/2.0.52 (Fedora)
Last-Modified: Fri, 23 Sep 2005 23:26:59 GMT
ETag: "1046c6-7f-bf0016c0"
Accept-Ranges: bytes
Content-Length: 85
Connection: close
Content-Type: text/html; charset=UTF-8

<p>Learning about http</p>

<p>Lots of good stuff to talk about here.<br />
Connection closed by foreign host.<br />
[devlin@peacemaker]$ <br />
</pre></p>

<p>
Very cool. So I thought, why not try HTTP/1.1? I first tried by just replacing the HTTP version of the above GET command to HTTP/1.1. This does not work however.
</p>
<p>
One great feature of HTTP 1.1 is that of virtual hosts. This enables one to have multiple sites hosted on a single IP address. Depending on the hostname of the request, the web server can send back  any number of different domains. In order for the server to know which virtual host to respond with, you must specify this in the HTTP request.
</p>
<p>
The GET request now looks like this:
</p>
<pre>
GET / HTTP/1.1 [return]
Host: foo.com  [return]
               [return]
</pre>

<p>
Another feature of HTTP 1.1 is that a client can issue multiple requests using a single common connection.  HTTP 1.0 had to make a separate connection for each request. This is a serious performance issue, a connection would be necessary for each page and for each separate linked element in the page as well, like each image, media sound clip and such. Connections are not cheap to create and have quite a bit of overhead. Some numbers I have seen is that by keeping the connection open, performance for pages with embedded links improved 25%.
</p>
<p>
According to the Apache documentation, these persistent connections are the default if the client identifies itself as being able to communicate HTTP 1.1. I discovered however, that on Fedora Core 3, the Apache2 http packages shipped with the distro have this option disabled.  To enable it, just modify your http.conf file (usually in /etc/httpd/conf/) and change "KeepAlive" directive to:
</p>

<pre>
KeepAlive On
</pre>

<p>
Then, when experimenting with telnet, after you issue the GET command above, the server will not immediately disconnect but will wait a short amount of time to see if you will issue any more requests. This way, you can submit multiple requests using a single connection.
</p>]]>

</content>
</entry>
<entry>
<title>Brainstorming of virtualization possibilities</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/05/brainstorming_o.html" />
<modified>2007-09-03T06:14:44Z</modified>
<issued>2005-05-18T20:46:26Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.141</id>
<created>2005-05-18T20:46:26Z</created>
<summary type="text/plain">I&apos;ve just been thinking about some new ways that virtualization could be applied. I haven&apos;t thought all of these through, so be nice. For large groups of computers (like in large companies or universities) virtualize every workstation. Transparent to users,...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>Virtualization</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[I've just been thinking about some new ways that virtualization could be applied.  I haven't thought all of these through, so be nice.
<br/><br/>
For large groups of computers (like in large companies or universities) virtualize <i>every</i> workstation.  Transparent to users, one virtual machine is what the workstation would normally run and still connects to the keyboard, monitor etc.  Advantages I could see:
<ul>
<li> Easier and simplified system administration.  "Re-imaging" the computer would just be a matter of sending over the pre-defined operating system template to the virtual monitor. Upgrading or making more software available is accomplished by just creating an new VM template and distributing it out to each workstation.</li>
<li> One VM for the user sitting at the workstation, another VM for system administration automation, and other VMs as per necessity, see below.</li>
<li> Operating system templates are not machine hardware specific.  Normally, machines can be cloned and pushed as one mass to all the workstations, but only if the workstations have all identical hardware, disk geometry etc..  Instead of  the system "image" containing specific hardware drivers, the virtual template includes virtual drivers, which will map to different physical hardware depending on the workstation.</li>
<li> Simpler harnessing of unused compute cycles.  Services like SETI@home and Google Compute run in a daemon fashion inside the host operating system.  They have the potential of accessing user data and resources.  Or, it could follow the current java security model of either requiring all access, or no access at all, which would limit it's usefulness to memory only operations.  DOGMA at BYU only utilizes the computer when the screensaver is activated, and does not benefit from the incredible amounts of hardware under-utilization during a user session.  If the process hangs, it has the potential of hanging or seriously degrading the operating system performance.  By using virtualization, the virtual monitor need only add another dedicated virtual machine for distributed computing.  
<ul>
<li> The host user operating system can be given priority, so that the user experience is unchanged performance-wise, while allowing the free cpu cycles to be automatically utilized by the node VM.</li>
<li> The separate node VM has no access to the other virtual machines disk or memory (the vm running for the user). Also protects against malicious code that could be run by the distributed program.  </li>
<li> A disk partition or a mounted loop file can be presented to the node VM allowing disk storage, increasing the node's capacity for work while not comprimising data isolation.</li>
<li> For any reason, if the node VM locks up or fails, it can easily be restarted or re-imaged easily and remotely. On the same note, if the node VM software needs to be upgraded or enhanced, you just roll out VM templates and restart the new VMs. </li>
<li> The program which joins the node to the system need not be ported to all operating systems, as it can be targeted for a specific OS environment which will just run virtualized, simplifying development, deployment and consistency. </li>
</ul>

</li>
</ul>]]>

</content>
</entry>
<entry>
<title>Playing windows media files in linux</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/05/playing_windows.html" />
<modified>2007-09-03T06:15:02Z</modified>
<issued>2005-05-18T20:38:47Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.140</id>
<created>2005-05-18T20:38:47Z</created>
<summary type="text/plain">I finally figured one way of getting my Fedora Core 3 machine to play wmv files. I have installed the latest mplayer and mplayer codecs via rpm from http://luna.cs.ccsu.edu/dominik/mplayer/. For some reason my MPlayer 1.0pre7-RPM-3.4.2 crashes when I try to...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>Linux</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[I finally figured one way of getting my Fedora Core 3 machine to play wmv files.  I have installed the latest mplayer and mplayer codecs via rpm from <a href="http://luna.cs.ccsu.edu/dominik/mplayer/">http://luna.cs.ccsu.edu/dominik/mplayer/</a>.  For some reason my MPlayer 1.0pre7-RPM-3.4.2 crashes when I try to play any wmv files.  Anyway, I got Xine to play them for me by editing ~/.xine/config and adding the line
<pre>
decoder.external.win32_codecs_path:/usr/lib/codecs
</pre>

as /usr/lib/codecs is where mplayer is now keeping its codecs.]]>

</content>
</entry>
<entry>
<title>Fedora Core 3 and Java Web Start</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/04/fedora_core_3_a.html" />
<modified>2007-09-03T06:15:19Z</modified>
<issued>2005-04-29T05:56:35Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.139</id>
<created>2005-04-29T05:56:35Z</created>
<summary type="text/plain">The main point is that although Java 1.5 works very well on Fedora Core 3, the Java Web Start doesn&apos;t work at all. I found this issue known and documented as bugs 6195591 and 6188963. I found the solution from...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>Java</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>The main point is that although Java 1.5 works very well on Fedora Core 3, the Java Web Start doesn't work at all. </p>

<p>I found this issue known and documented as bugs <a href="http://bugs.sun.com/bugdatabase/view_bug.do;:WuuT?bug_id=6195591">6195591</a> and <a href="http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=8b7c998962c993c93f48bf77e731:WuuT?bug_id=6188963">6188963</a>.</p>

<p>I found the solution from <a href="http://www.advogato.org/person/rmathew/diary.html?start=71">the diary of rmathew</a>.  Basically, the bug is fixed in the JDK 5.0 Update 3.</p>

<p>I've upgraded my java installation and everything looks good again.</p>]]>

</content>
</entry>
<entry>
<title>Network Performance Variability between VMs</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/04/network_perform.html" />
<modified>2007-09-03T06:15:35Z</modified>
<issued>2005-04-28T00:22:10Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.138</id>
<created>2005-04-28T00:22:10Z</created>
<summary type="text/plain">Nathan has done several network benchmarks with Windows 2003 Servers. Instead of looking at the average, I wanted to see if the performance between each virtual machine was consistent, or if some were being starved. I&apos;ve taken the data from...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>Nathan has done several <a href="http://blogs.eclab.byu.edu/nathan/archives/2005/03/another_network.html">network benchmarks</a> with Windows 2003 Servers.  Instead of looking at the average, I wanted to see if the performance between each virtual machine was consistent, or if some were being starved.  </p>

<p>I've taken the data from Nathan's spreadsheet.  It's divided into tests based on how many virtual machines were included.  I wanted to see how similar the performance was for each virtual machine, or more correctly, how spread out the values were from each other.  Standard Deviation to my aid.  The graph below is of network operations per second.  </p>

<p><img alt="standardDevPlot.gif" src="http://blogs.eclab.byu.edu/daley/archives/images/standardDevPlot.gif" width="363" height="291" /></p>

<p><br />
Kind of interesting.  The lower the standard deviation, the more similar performance between VMs.  Between 13 and 17 VMs the data suggests that all the VMs got about the same performance.  With less virtual machines, like the data from 3 to 9 Vms, show that performance differed substantially from one machine to another.</p>

<p>I will have to investigate further to put these "differences" into context, like, with a standard deviation of 0.6, how spread out or different are they really? How much can this affect performance over more time?  Additional things to look at would be to try and determine if certain virtual machines consistently ran faster than others, or if they are perhaps distributed randomly.</p>]]>

</content>
</entry>
<entry>
<title>My identity has been stolen</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/03/my_identity_has.html" />
<modified>2007-09-03T06:15:54Z</modified>
<issued>2005-03-11T05:01:15Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.127</id>
<created>2005-03-11T05:01:15Z</created>
<summary type="text/plain">I&apos;ve heard a lot of stories from other people about identity theft. Things from cell phones in their name to calling cards being drained with calls to Asia. It happened to me with my Discover card that I share with...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>Misc</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>I've heard a lot of stories from other people about identity theft.  Things from cell phones in their name to calling cards being drained with calls to Asia.  It happened to me with my Discover card that I share with my wife.</p>

<p>Fortunately Discover Card contacted us to ask what had happened.  Evidently their software heuristics sounded off an alarm since our purchasing pattern changed quite dramatically.</p>

<p>I took a security class from Dr. Kent Seamons last semester which made me, well, paranoid about things of this nature (a bit of it rubbed off on my wife too).  When they called, my wife wouldn't give any of our information like a good girl, but only verified the information that they had to assure us that it was indeed Discover card.</p>

<p>They're were quite funny about it, saying things like, "yeah, we kinda noticed you don't make a lot of large purchases with your card.  I have a charge on here for $4.05 at the C-o-o-ugaarreet is that yours?"  Yes it is.  It was at BYU's Cougareat, it's a navajo taco and yes, it's very good. </p>

<p>Discover closed our account immediately and sent us some new cards right away.  It's very much surreal, but I'm grateful that Discover figured it out right away so we didn't have to convince them that we weren't trying to scam them.</p>

<p>I called Discover later to get some details about the purchases for some paperwork they sent to us.  Turns out that all of the purchases were "keyed in", meaning no card was present (not sure if that would have mattered).   The purchases started at 4:23 pm at Nordstrom's for $2,278.  Followed quickly by $298 at Beebee Stores at 4:38 pm.  The third and unsuccessful attempt was at 5:06 pm at Bed Bath and Beyond for $1,053.  Discover denied the card suspecting fraud.  All the purchases were made in Rhode Island where neither my wife or I have ever been -- or even close.  </p>

<p>Makes one very curious to know how the bandits got our information.  Did they send it to their accomplices across the country or did someone crack a server where our credit card was saved?  I highly doubt this one, even if it is possible.  It's much more likely I think that someone at a restaurant or store made theirselves a copy when we used our card.  Easier.  Simpler.  More likely.</p>]]>

</content>
</entry>
<entry>
<title>Java Samba Implementation</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/01/java_samba_impl.html" />
<modified>2007-09-03T06:16:12Z</modified>
<issued>2005-01-24T23:54:01Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.112</id>
<created>2005-01-24T23:54:01Z</created>
<summary type="text/plain">Since we are using DOGMA as the cluster of client machines to create test traffic for our test benches, the distributed client code is in Java. Nathan already has a java client to make http requests. OIT said that one...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>Virtualization</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>Since we are using <a href="http://dogma.byu.edu/">DOGMA</a> as the cluster of client machines to create test traffic for our test benches, the distributed client code is in Java.  Nathan already has a java client to make http requests.  OIT said that one of the services they provide which we need to take into account in this project is file sharing, in particular windows file sharing.</p>

<p><a href="http://jcifs.samba.org/"><br />
JCIFS</a> <quote> is an Open Source client library that implements the CIFS/SMB networking protocol in 100% Java.</quote></p>

<p>Using this library we could also distribute a samba test using DOGMA.</p>]]>

</content>
</entry>
<entry>
<title>Overhead of Virtualization</title>
<link rel="alternate" type="text/html" href="http://blogs.eclab.byu.edu/daley/archives/2005/01/overhead_of_vir.html" />
<modified>2007-09-03T06:16:28Z</modified>
<issued>2005-01-24T22:20:40Z</issued>
<id>tag:blogs.eclab.byu.edu,2005:/daley//7.111</id>
<created>2005-01-24T22:20:40Z</created>
<summary type="text/plain">Dr. Windley suggested a methodology for determining the overhead due to virtualization, using a load balancer, a cluster of clients and varying the number of virtual machines. I do think it is a good way to begin tackling the problem,...</summary>
<author>
<name>Devlin</name>
<url>http://blogs.eclab.byu.edu/daley</url>
<email>devlin@byu.edu</email>
</author>
<dc:subject>Virtualization</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://blogs.eclab.byu.edu/daley/">
<![CDATA[<p>Dr. Windley suggested a <a href="http://wiki.eclab.byu.edu/index.cgi?OverheadTest">methodology</a> for determining the overhead due to virtualization, using a load balancer, a cluster of clients and varying the number of virtual machines.  I do think it is a good way to begin tackling the problem, although I had a few reservations about whether the set-up of the test would lend itself to meaningful statistically interpretable results.</p>

<p>I am by no means a statistician, although my undergraduate statistics course gave me some rudimentary basis for recognizing the necessity and applicability of statistics in our problem.</p>

<p>What I had hoped that a statistical test could give us, is that we could model the different performance characteristics of a system using probability distributions.  The main characteristics I came up with are CPU performance, Disk I/O, Virtualization overhead and network performance.  Mathematically we could then combine these distributions to form an overall performance distribution.</p>

<p>Distributions seem fitting since typically performance is non-linear - and difficult to quantitize at that.  We can construct distributions from data, which distribution can then be operated on since distributions are generalized functions.</p>

<p>My main concern about the overhead test has to do with lurking variables.  In the cluster of computers, not only are they not synchronized, but are using the network as a connection to the virtual machines, which network can contribute a significant amount of randomness before it even reaches the load balancer.  Left unaccounted for, it could have a significant impact on the measured results of the vm's -- without our knowledge.</p>

<p>Not knowing for sure, I had a very enlightening conversation with Dr. Dell Scott of the statistics department.  He is their most experienced statistician with applications in computing.  He confirmed my concern, that it was indeed correct, that variability in the traffic before the load balancer would be manifest itself in the measured results of the vm's.  He also said that this variability, if understood, could be "subtracted" from the measured results leaving just the measurements we intended to collect.  I thought that we would have to model the incoming traffic according to some type of distribution, and then do a lot of statistical voodoo to account for it.  Dr. Scott said that it could be accomplished just using conditional probabilities, based directly off of the actual traffic for a particular test.  So, we would just need to record or log the test traffic, which we could then utilize to subtract out its variability and such from our final results.  Nathan has included into the client software (which will be creating the traffic for the tests) a logging mechanism - which I think will be useful for a great many things. I think a simpler and more representative log of the actual traffic could be obtained from just another computer on the network capturing traffic with etheral or similar. </p>

<p>In an academic <a href="http://wiki.eclab.byu.edu/index.cgi?BarfordCrovella">paper</a> about generating representative workloads for server performance, the authors talked about many issues, one of them being the self-similar characteristic of network traffic.  Some of the artifacts of self-similarity is that it has a detrimental effect on network performance, real-world network traffic is self-similar, and self-similarity cannot be modeled with a Poisson distribution.   Since our cluster of clients generating the test requests are not generating self-similar traffic, this would mean that the measure results on the vm's was misleading.  Dr. Scott pointed out to me that this very "problem" actually provides useful knowledge and insights.  In particular, since self-similarity of traffic degrades performance, a random (or otherwise statistically understood distribution) would yield performance greater than the real world, effectively defining an upper bound.  We would know that real performance could be no better than this benchmark (although of course we will need to verify this claim).  So, with the logging of incoming traffic I mentioned above, this test scenario could give us an upper bound for performance (although nothing close to an upper bound on virtualization overhead).</p>]]>

</content>
</entry>

</feed>