<?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>floating point &#187; PAG</title>
	<atom:link href="http://point.davidglasser.net/category/pag/feed/" rel="self" type="application/rss+xml" />
	<link>http://point.davidglasser.net</link>
	<description>david glasser's log</description>
	<lastBuildDate>Tue, 08 Apr 2008 19:30:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Transitions</title>
		<link>http://point.davidglasser.net/2007/08/21/transitions/</link>
		<comments>http://point.davidglasser.net/2007/08/21/transitions/#comments</comments>
		<pubDate>Tue, 21 Aug 2007 19:58:45 +0000</pubDate>
		<dc:creator>David Glasser</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[MIT]]></category>
		<category><![CDATA[PAG]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://point.davidglasser.net/2007/08/21/transitions/</guid>
		<description><![CDATA[It is finally over. My adviser has signed my thesis. I&#8217;ve learned a lot in the past two years in the Program Analysis Group, about program analysis, testing, the JVM, academic writing, frustration, and elation. I have a much stronger understanding of the concepts behind my project, and ideas for better alternatives. I&#8217;m disappointed that [...]]]></description>
			<content:encoded><![CDATA[<p>It is finally over.  My adviser has signed my thesis.  I&#8217;ve learned a lot in the past two years in the Program Analysis Group, about program analysis, testing, the JVM, academic writing, frustration, and elation.  I have a much stronger understanding of the concepts behind my project, and ideas for better alternatives.  I&#8217;m disappointed that the culmination of my thesis project is not an excellent tool which I can recommend for wide use, but I do not regret the work I have done.  Here is the <a href="http://point.davidglasser.net/wp-content/uploads/point.davidglasser.net/2008/02/glasser-meng-thesis-final.pdf" title="MEng Thesis Final Draft">MEng Thesis Final Draft</a>; and here is <a href="http://code.google.com/p/amock/">amock itself</a>.</p>
<p>Today I complete my five years at MIT; tomorrow I fly out west.  After a week at <a href="http://www.burningman.com/">Burning Man</a> and a week renovating my <a href="http://www.langtonlabs.org/">new warehouse living space</a>, I will start at <a href="http://www.google.com/">Google</a> in the build tools group, working full time on <a href="http://subversion.tigris.org/">Subversion</a>.  After a year of needing to treat Subversion as a guilty distraction from research, I am incredibly excited about making it my full-time job.</p>
]]></content:encoded>
			<wfw:commentRss>http://point.davidglasser.net/2007/08/21/transitions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>roughly drafted</title>
		<link>http://point.davidglasser.net/2007/07/20/roughly-drafted/</link>
		<comments>http://point.davidglasser.net/2007/07/20/roughly-drafted/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 05:43:33 +0000</pubDate>
		<dc:creator>David Glasser</dc:creator>
				<category><![CDATA[MIT]]></category>
		<category><![CDATA[PAG]]></category>

		<guid isPermaLink="false">http://point.davidglasser.net/2007/07/20/roughly-drafted/</guid>
		<description><![CDATA[After two weeks of nonstop writing, I have a mostly-complete MEng Thesis Rough Draft! (&#8220;Mostly&#8221; refers to the fact that the experimental sections are really &#8220;proposed experiments&#8221; and not &#8220;experimental results&#8221; right now; that&#8217;s what the next month is for&#8230;)]]></description>
			<content:encoded><![CDATA[<p>After two weeks of nonstop writing, I have a mostly-complete <a href="http://point.davidglasser.net/wp-content/uploads/point.davidglasser.net/2008/02/main.pdf" title="MEng Thesis Rough Draft">MEng Thesis Rough Draft</a>!  (&#8220;Mostly&#8221; refers to the fact that the experimental sections are really &#8220;proposed experiments&#8221; and not &#8220;experimental results&#8221; right now; that&#8217;s what the next month is for&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://point.davidglasser.net/2007/07/20/roughly-drafted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>amock presentation</title>
		<link>http://point.davidglasser.net/2007/07/16/amock-presentation/</link>
		<comments>http://point.davidglasser.net/2007/07/16/amock-presentation/#comments</comments>
		<pubDate>Mon, 16 Jul 2007 21:26:32 +0000</pubDate>
		<dc:creator>David Glasser</dc:creator>
				<category><![CDATA[MIT]]></category>
		<category><![CDATA[PAG]]></category>

		<guid isPermaLink="false">http://point.davidglasser.net/2007/07/16/amock-presentation/</guid>
		<description><![CDATA[It&#8217;s been a while since I&#8217;ve updated about my thesis project, amock. Fortunately, that doesn&#8217;t mean I haven&#8217;t been working on it. In fact, it&#8217;s in pretty solid shape, and I&#8217;ve been focusing on writing the thesis itself (goal: full rough draft by Friday). I presented about amock at group meeting today; here are the [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since I&#8217;ve updated about my thesis project, <code>amock</code>.  Fortunately, that doesn&#8217;t mean I haven&#8217;t been working on it.  In fact, it&#8217;s in pretty solid shape, and I&#8217;ve been focusing on writing the thesis itself (goal: full rough draft by Friday).</p>
<p>I presented about <code>amock</code> at group meeting today; here are the <a href='http://point.davidglasser.net/wp-content/uploads/point.davidglasser.net/2008/02/glasser-pag-talk.pdf' title='amock PAG talk'>amock PAG talk</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://point.davidglasser.net/2007/07/16/amock-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What are you really trying to do?</title>
		<link>http://point.davidglasser.net/2007/04/16/what-are-you-really-trying-to-do/</link>
		<comments>http://point.davidglasser.net/2007/04/16/what-are-you-really-trying-to-do/#comments</comments>
		<pubDate>Mon, 16 Apr 2007 17:18:59 +0000</pubDate>
		<dc:creator>David Glasser</dc:creator>
				<category><![CDATA[MIT]]></category>
		<category><![CDATA[PAG]]></category>

		<guid isPermaLink="false">http://point.davidglasser.net/2007/04/16/what-are-you-really-trying-to-do/</guid>
		<description><![CDATA[I&#8217;ve found that 99% of the time, when somebody asks a detailed technical question, the right first answer is &#8220;What are you really trying to do?&#8221; It&#8217;s often frustrating for the person who hears it; they think they understand their problem very well and that they&#8217;ve reduced it to a single technical point, but in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve found that 99% of the time, when somebody asks a detailed technical question, the right first answer is &#8220;What are you really trying to do?&#8221;  It&#8217;s often frustrating for the person who hears it; they think they understand their problem very well and that they&#8217;ve reduced it to a single technical point, but in reality approaching the issue from a completely different direction is the way to go.  I ran into this with myself this morning when working on <a href="http://code.google.com/p/amock/.">my thesis project, <code>amock</code></a>.</p>
<p><code>amock</code> starts with a dynamic analysis of a Java program; it is implemented (for simplicity) as an offline analysis.  The program is run in a special instrumented mode which dumps out a trace of every method called to a file, which is later processed by the actual analysis algorithm.  In the trace generated by my instrumentation, every non-primitive object is assigned a unique integer ID, so that the processor can tell which object is which.  It does this by using a weak identity hash map: a chimera of the standard Java classes <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/WeakHashMap.html">WeakHashMap</a> and <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/util/IdentityHashMap.html">IdentityHashMap</a>.</p>
<p>The problem is, this doesn&#8217;t work for creating trace entries about constructors.  When you&#8217;re calling a constructor, the semi-initialized object is this weird weird thing that you basically can&#8217;t examine at all&#8230; trying to do basically anything to it other than call &#8216;dup&#8217; or call a constructor on it makes the verifier cry.  Thus my instrumentation has to go to extra efforts to substitute a dummy <code>ConstructorReceiver</code> object into the calls to my tracer implementation, because you can&#8217;t actually pass a semi-initialized object to methods.  This means that my trace entries for entering-constructor all have no idea which object they&#8217;re constructing, and there&#8217;s no good way to tell from the trace if two different entering-constructor entries refer to the same object (calling superclass constructors on it, say) or not.  (The exiting-constructor entries do have an identity for the object, though, because the object is initialized by then).</p>
<p>So this morning I spent about an hour poring over the <a href="http://java.sun.com/docs/books/jvms/second_edition/html/VMSpecTOC.doc.html">JVM spec</a> and trying to come up with complicated instrumentations that would extract some information from this annoying uninitialized object.  I had several different plans; for example, I started trying to work out how to instrument every single constructor in the system to add an extra object-id argument.  I went to one of my labmates and tried to get advice on how to instrument the Java bytecode in order to somehow get this to work.</p>
<p>&#8220;What are you really trying to do?&#8221; he asked.</p>
<p>So I started explaining from the beginning.  And suddenly it hit me: I didn&#8217;t need a fancier instrumentation.  All I needed to do was write a braindead two-pass algorithm that reads in a trace file, matches entering-constructor and exiting-constructor entries, and spits out a trace with the additional information in it.  It took me ten minutes and worked the first time.</p>
]]></content:encoded>
			<wfw:commentRss>http://point.davidglasser.net/2007/04/16/what-are-you-really-trying-to-do/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s alive!</title>
		<link>http://point.davidglasser.net/2007/01/25/its-alive/</link>
		<comments>http://point.davidglasser.net/2007/01/25/its-alive/#comments</comments>
		<pubDate>Fri, 26 Jan 2007 00:42:51 +0000</pubDate>
		<dc:creator>David Glasser</dc:creator>
				<category><![CDATA[MIT]]></category>
		<category><![CDATA[PAG]]></category>

		<guid isPermaLink="false">http://point.davidglasser.net/2007/01/25/its-alive/</guid>
		<description><![CDATA[It&#8217;s horribly hacky. The newest file is full of TODO comments and special cases. (The rest of the infrastructure is slightly less so.) But! amock can run a system test and automatically generate a passing unit test from it! (The key word here is a system test: the one it is tested on. But still!)]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s horribly hacky.  The newest file is full of <code>TODO</code> comments and special cases.  (The rest of the infrastructure is slightly less so.)</p>
<p>But!</p>
<p><code>amock</code> can run a system test and automatically generate a passing unit test from it!</p>
<p>(The key word here is <strong>a</strong> system test: the one it is tested on.  But still!)</p>
]]></content:encoded>
			<wfw:commentRss>http://point.davidglasser.net/2007/01/25/its-alive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You, too, can run amock</title>
		<link>http://point.davidglasser.net/2007/01/21/you-too-can-run-amock/</link>
		<comments>http://point.davidglasser.net/2007/01/21/you-too-can-run-amock/#comments</comments>
		<pubDate>Sun, 21 Jan 2007 07:15:50 +0000</pubDate>
		<dc:creator>David Glasser</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[MIT]]></category>
		<category><![CDATA[PAG]]></category>

		<guid isPermaLink="false">http://point.davidglasser.net/2007/01/21/you-too-can-run-amock/</guid>
		<description><![CDATA[In the interests of openness, and for that matter making me embarrassed if I&#8217;m not making steady progress, I&#8217;ve moved the Subversion repository for my thesis project amock to Google Code Hosting.]]></description>
			<content:encoded><![CDATA[<p>In the interests of openness, and for that matter making me embarrassed if I&#8217;m not making steady progress, I&#8217;ve moved the Subversion repository for <a href="http://www.davidglasser.net/point/2007/01/16/output/">my thesis project <code>amock</code></a> to <a href="http://code.google.com/p/amock/">Google Code Hosting</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://point.davidglasser.net/2007/01/21/you-too-can-run-amock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Output</title>
		<link>http://point.davidglasser.net/2007/01/16/output/</link>
		<comments>http://point.davidglasser.net/2007/01/16/output/#comments</comments>
		<pubDate>Tue, 16 Jan 2007 23:00:31 +0000</pubDate>
		<dc:creator>David Glasser</dc:creator>
				<category><![CDATA[MIT]]></category>
		<category><![CDATA[PAG]]></category>

		<guid isPermaLink="false">http://point.davidglasser.net/2007/01/16/output/</guid>
		<description><![CDATA[I wrote three papers at the end of last semester. The first was the proposal for my master&#8217;s thesis. My project is inspired by David Saff&#8217;s test factoring project. It can be relatively easy to write a few top-level system tests for an application, whereas it can be slow and tedious to write a complete [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote three papers at the end of last semester.  The first was the <a href="http://point.davidglasser.net/wp-content/uploads/point.davidglasser.net/2008/02/thesis-proposal.pdf" title="MEng Thesis Proposal">proposal for my master&#8217;s thesis</a>.  My project is inspired by <a href="http://shareandenjoy.saff.net/">David Saff&#8217;s</a> test factoring project.  It can be relatively easy to write a few top-level system tests for an application, whereas it can be slow and tedious to write a complete suite of unit tests which exercise the entire program.  The concept behind test factoring is that by dynamically observing the execution of a system test, we can automatically generate a large number of unit tests which drive individual objects in the same way that the entire test suite did.</p>
<p>The main focus of David Saff&#8217;s project was efficiency: a very slow system test can be run much quicker if the code in only a small number of classes is executed, and the rest of the world is replaced by &#8220;mocks&#8221;.  His project executed the program in a specialized runtime environment which read from a transcript of the system test and simulated method calls which reached outside of the tested classes by just returning whatever they did during the system test.</p>
<p>That project is quite interesting.  However, my focus in test generation is less on efficiency of running tests and more in ease of creating and modifying tests.  Often, you may find yourself needing to change a test you wrote to be more lenient: to allow a return value to take on more values, or to allow two events to occur in a different order, for example.  The ability to do this is even more important for automatically generated tests, which never had the benefit of a human writer and may be very brittle.  So, my project (which I am calling @amock@) has the same general idea as test factoring, but its output is standard Java code.  The generated tests must be legible and comprehensible by developers; developers much be able to relax and otherwise tweak the generated tests.  In order to implement &#8220;mocking out the world&#8221;, I am using <a href="http://www.jmock.org/">jMock</a>, a Java mock-object library.  (Yes, I do realize that the <a href="http://www.mockobjects.com/">mock objects folks</a> prefer to think of mock objects as a design aide and not a post facto testing tool; perhaps this will lead to the generated tests not being very good for most programs.  We will see.)</p>
<p>My goal is to implement @amock@, write my thesis, take <a href="https://stellar.mit.edu/S/course/6/sp07/6.875/index.html">two</a> <a href="http://theory.lcs.mit.edu/~madhu/ST07/">classes</a>, and <a href="http://www.mit.edu/~6.170/">TA another one</a> this semester; I&#8217;ll move to San Francisco and <a href="http://www.google.com/">start my new job</a> after that. Since this is a pretty heavy load, there&#8217;s a reasonable chance it&#8217;ll take me the summer to finish up the thesis and I&#8217;ll have to wait on the job; let&#8217;s hope that doesn&#8217;t happen.</p>
<p>My other two papers were group projects for my classes last term.  I&#8217;d describe them both as interesting projects which didn&#8217;t pan out as conclusively as we&#8217;d hoped; however, I&#8217;m still pretty happy with both of them.  For my <a href="http://db.csail.mit.edu/6.830/">databases class</a>, I looked into the <a href='http://point.davidglasser.net/wp-content/uploads/point.davidglasser.net/2008/02/tagging.pdf' title='tagging paper'>best database structures for implementing oh-so-trendy-Web-2.0 tagging queries</a>, working with Richard Tibbetts and <a href="http://mit.edu/golem/www/">Chris Laas</a>.  For <a href="http://courses.csail.mit.edu/6.854/06/">advanced algorithms</a>, Natan Cliffer and I explored what we called <a href='http://point.davidglasser.net/wp-content/uploads/point.davidglasser.net/2008/02/packing.pdf' title='packing dual problems'>packing dual problems</a> of machine scheduling problems: problems that generalize the NP-complete bin packing problem in the same way that machine scheduling problems are generalized.  I think our classification is an interesting idea, but unfortunately we didn&#8217;t prove any non-trivial results about specific subproblems.</p>
]]></content:encoded>
			<wfw:commentRss>http://point.davidglasser.net/2007/01/16/output/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Announcing Hiveminder</title>
		<link>http://point.davidglasser.net/2006/08/07/announcing-hiveminder/</link>
		<comments>http://point.davidglasser.net/2006/08/07/announcing-hiveminder/#comments</comments>
		<pubDate>Tue, 08 Aug 2006 03:42:06 +0000</pubDate>
		<dc:creator>David Glasser</dc:creator>
				<category><![CDATA[Best Practical]]></category>
		<category><![CDATA[Hiveminder]]></category>
		<category><![CDATA[Jifty]]></category>
		<category><![CDATA[MIT]]></category>
		<category><![CDATA[PAG]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[SVK]]></category>

		<guid isPermaLink="false">http://point.davidglasser.net/2006/08/07/announcing-hiveminder/</guid>
		<description><![CDATA[While my main work recently has been doing research towards my MEng in the Program Analysis Group at MIT&#8217;s CSAIL, I&#8217;ve been paying attention to the &#8220;secret project&#8221; from my internship at Best Practical last summer. Most of what I did there was way out in the open, in the public repositories of the request [...]]]></description>
			<content:encoded><![CDATA[<p>While my main work recently has been doing research towards my MEng in the <a href="http://pag.csail.mit.edu/">Program Analysis Group</a> at MIT&#8217;s CSAIL, I&#8217;ve been paying attention to the &#8220;secret project&#8221; from my internship at <a href="http://www.bestpractical.com/">Best Practical</a> last summer.  Most of what I did there was way out in the open, in the public repositories of the request tracker RT, the object-relational database mapper Jifty::DBI, the web framework Jifty, and the distributed version control system SVK (which wasn&#8217;t actually part of Best Practical at the time).  But we&#8217;ve been keeping this project under wraps and in &#8220;private beta&#8221; until this weekend, when we released&#8230;</p>
<p><a href="http://www.hiveminder.com/">Hiveminder</a>!  Hiveminder is a collaborative task organizer. Sure, there are many other to-do trackers out there.  Hiveminder&#8217;s biggest strengths are in its intuitive and simple way of letting you set up &#8220;&#8230; but first&#8221; and &#8220;&#8230; and then&#8221; style relationship between tasks and its support for sharing tasks between people, one-on-one and in groups.</p>
<p>Today, when I look at my main &#8220;to-do&#8221; page, I see the next steps I need to to for my research, the SVK bugs and features I&#8217;d like to work on, a reminder to renew the hosting for this website (with a due date of&#8230; today&#8230; ooh, should deal with that right now&#8230; done), all in one spot.</p>
<p>Technology-wise, the Jifty framework we wrote has some very nice advantages.  (Disclaimer, or bragging, or something: Jifty was designed mostly by Jesse Vincent (&#8220;the boss&#8221;), but I did most of the implementation of its first draft. Of course, since then I think every line I wrote has been replaced.)  For example, all code that actually changes anything in the database goes through specific &#8220;action&#8221; objects; while we haven&#8217;t finalized a public API for Hiveminder, this means that eventually <em>everything</em> you can do through the site will be achievable via an API, without any special custom coding.</p>
<p>Another nice technical feature in Jifty is the concept of individually-addressable &#8220;page regions&#8221; inside web pages, which can be updated via AJAX in a single click. This feature is nothing new for AJAXy webpages&#8230; until you try Hiveminder again without Javascript and find out that e<strong>verything still works</strong>.  Sure, there are a few extra page reloads, and some fancy UI features like drop-down menus can&#8217;t be used, but other than that the site works exactly like it does with Javascript&#8230; and without Hiveminder&#8217;s code having to have any special cases at all.  Hell, I just added a comment to a task about an SVK bug using lynx&#8230; <strong>just because I can</strong>.</p>
<p>Of course, I&#8217;m being distracted from work now, so I&#8217;ll click on the &#8220;pag&#8221; tag to show only my research-related tasks and get back to editing this paper&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://point.davidglasser.net/2006/08/07/announcing-hiveminder/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
