<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2242337300576128842</id><updated>2011-04-21T17:16:42.499-04:00</updated><category term='scripting'/><category term='hibernate'/><category term='beer'/><category term='postgres'/><category term='java'/><category term='eclilpse'/><category term='bug'/><category term='programming'/><category term='gene'/><category term='internet'/><category term='cryptanalysis'/><category term='ecto'/><category term='design'/><category term='everythingismiscellaneous'/><category term='os x'/><category term='genome'/><category term='pdf'/><category term='ENCODE'/><title type='text'>Imaginative Blog Name</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-3053284198338844390</id><published>2007-07-19T11:28:00.000-04:00</published><updated>2007-08-17T13:44:03.304-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='os x'/><category scheme='http://www.blogger.com/atom/ns#' term='ecto'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='eclilpse'/><title type='text'>Quicktime / iTunes Update breaks Eclipse?</title><content type='html'>&lt;p&gt;I upgraded my Quicktime and iTunes today and found that all of a sudden I couldn't compile anything in Eclipse! Apparently, the update got rid of the /System/Library/Java/Extensions/QTJSupport.jar file, and that shows up as part of the default Java 1.5 JRE definition in Eclipse. When it went missing, Eclipse freaked out.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The fix, found at &lt;a href="http://note19.com/2007/07/17/eclipse-java-builds-on-os-x/"&gt;note19&lt;/a&gt; turned out to be simple.&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  Open the eclipse Preferences... menu and select Java &amp;gt; Installed JREs...; make sure that eclipse can locate the OS X Java 1.5. If it cannot (as was in my case), you manually add it. It is in the following folder:&lt;br /&gt;&lt;br /&gt;  /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;Works like a charm now.&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-3053284198338844390?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/3053284198338844390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=3053284198338844390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/3053284198338844390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/3053284198338844390'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/07/quicktime-itunes-update-breaks-eclipse.html' title='Quicktime / iTunes Update breaks Eclipse?'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-3663213635580744299</id><published>2007-07-11T22:40:00.001-04:00</published><updated>2007-08-13T11:49:31.503-04:00</updated><title type='text'>ProScope HR: Coolest Geek Toy Ever?</title><content type='html'>&lt;p&gt;In preparation for my impending fatherhood, I've been keeping an eye out for fun things to do with my daughter once she's got a few years on her. Like any good geek, I'm looking for fun, geeky things to do that will pique her interest in the world around her and stimulate her little brain. I think I found something that fits the bill: the &lt;a href="http://www.proscopehr.com/"&gt;Pro Scope HR&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;We were watching Alton Brown's &lt;a href="http://www.foodnetwork.com/food/show_ea/episode/0,1976,FOOD_9956_51243,00.html"&gt;Pretzel Logic&lt;/a&gt; episode and he was using this microscope hooked up to his PowerBook to look at the differences between various kinds of salt. Apparently it's also featured heavily on the various CSI shows.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I remember the microscope I had growing up. It was your standard light microscope; I think it went up to 200x magnification. It came with a number of prepared slides of various microorganisms, which were cool, but making new slides was kind of tedious. Plus, dealing with a microscope while wearing glasses has always been a pain. With a ProScope, you can take a look at anything you damn well please, not to mention taking high-resolution still photos and live-action and time-lapse videos. I can just see us following our daughter around the house, laptop in tow, looking at everything from pennies to raspberries to bugs in the backyard to our cats' paws.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I think that'd be pretty cool, anyway.&lt;/p&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-3663213635580744299?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/3663213635580744299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=3663213635580744299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/3663213635580744299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/3663213635580744299'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/07/proscope-hr-coolest-geek-toy-ever.html' title='ProScope HR: Coolest Geek Toy Ever?'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-4807765745850932944</id><published>2007-07-11T10:29:00.001-04:00</published><updated>2007-07-11T10:32:23.587-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='os x'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Properly setting up a crontab entry using 'date' to generate timestamps</title><content type='html'>&lt;p&gt;I have a custom backup script that I want to run every night.  I'd also like to have all the output (standard and error) redirected to a timestamped log file for subsequent review.  My first stab at defining a cron job to handle this was something like the following:&lt;blockquote&gt;&lt;tt&gt;00 0 * * * ~/bin/backup.sh &gt; backup_$(date + %Y-%m-%d).log 2&amp;&gt;1&lt;/tt&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;The only problem is it doesn't work!&lt;/p&gt;&lt;p&gt;Cron sends you messages pertaining to failed jobs in the system mail queue, which on Mac OS X you can access using the 'mailx' program, which comes with the system.  Doing so, I saw this message:&lt;blockquote&gt;&lt;tt&gt;/bin/sh: -c: line 1: unexpected EOF while looking for matching `)'&lt;/tt&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;/p&gt;A little broswing the cron man pages turned up that "%" (as well as "#") is interpreted as a comment character.  Looks like my timestamp generation was causing the job to fail.  Grrr.&lt;/p&gt;&lt;p&gt;The solution?  Escape each "%" with a backslash.  The functional cron job definition is&lt;blockquote&gt;&lt;tt&gt;00 0 * * * ~/bin/backup.sh &gt; backup_$(date + \%Y-\%m-\%d).log 2&amp;&gt;1&lt;/tt&gt;&lt;/blockquote&gt;&lt;/p&gt;&lt;p&gt;Sanity restored.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-4807765745850932944?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/4807765745850932944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=4807765745850932944' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/4807765745850932944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/4807765745850932944'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/07/properly-setting-up-crontab-entry-using.html' title='Properly setting up a crontab entry using &amp;#39;date&amp;#39; to generate timestamps'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-1278941452576305338</id><published>2007-07-10T00:57:00.001-04:00</published><updated>2007-08-13T11:50:14.747-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Liskov's Substitution Principle, equals, and Hibernate Proxies</title><content type='html'>&lt;p&gt;Hibernate's CGLIB dynamic proxy classes reared their ugly head today. I've been using the Eclipse-generated &lt;i&gt;hashcode()&lt;/i&gt; and &lt;i&gt;equals()&lt;/i&gt; methods in my domain objects for quite a while, with no problems. Then today I write a test that does a simple equality check and everything blows up!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The problem seems to be due to the way my &lt;i&gt;equals()&lt;/i&gt; methods were written, and how Hibernate's default dynamic proxy strategy interacts with that. I was doing this:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (getClass() != obj.getClass())&lt;br /&gt;&lt;br /&gt;    return false;&lt;br /&gt;&lt;/pre&gt;However, in my exploding test, one of my objects being compared was a regular old domain object, while the other was a proxied object. Since the proxied object that Hibernate creates is actually technically a subclass of my class (with additional Hibernate-specific methods and such), my &lt;i&gt;getClass()&lt;/i&gt;-based equality test was choking badly; after all, &lt;i&gt;com.foo.MyClass&lt;/i&gt; is most definitely not &lt;i&gt;com.foo.MyClass$$EnhancerByCGLIB$$beb95050&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It turns out that this is due to something called the &lt;a href="http://en.wikipedia.org/wiki/Liskov_substitution_principle"&gt;Liskov Substitution Principle&lt;/a&gt;, which basically formalizes the intuition behind the inheritance portion of the object-oriented programming model; if S is a subtype of T, then you can use an instance of S wherever an instance of T is called for and nothing breaks. The corollary would be that if something &lt;i&gt;does&lt;/i&gt; break, then some of your assumptions might need re-examining.&lt;br /&gt;&lt;br /&gt;In this case, specifying the &lt;i&gt;equals()&lt;/i&gt; method in terms of &lt;i&gt;getClass()&lt;/i&gt; is too restrictive; Hibernate proxies should be able to be used anywhere one of my domain objects is used (that's the whole point!). A way to solve this problem is offered by Josh Bloch in his &lt;b&gt;Effective Java&lt;/b&gt; book: use an &lt;i&gt;instanceof&lt;/i&gt;-based test instead:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;if (!(obj instanceof MyClass))&lt;br /&gt;&lt;br /&gt;    return false;&lt;br /&gt;&lt;/pre&gt;Here, the proxied object, as a subclass of MyClass, is also an instanceof MyClass. Since the CGLIB proxy doesn't override &lt;i&gt;equals()&lt;/i&gt;, the proxy inherits the same implementation of &lt;i&gt;equals()&lt;/i&gt; as the base class, thus maintaining the symmetric property any valid &lt;i&gt;equals()&lt;/i&gt; implementation must have. If the subclass &lt;i&gt;did&lt;/i&gt; override &lt;i&gt;equals()&lt;/i&gt;, then things would be different, but then you'd have a violation of the Liskov Substitution Principle. Also, as Bloch states in &lt;b&gt;Effective Java&lt;/b&gt;, page 30:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  It turns out that this is a fundamental problem of equivalence relations in object-oriented languages. &lt;b&gt;There is simply no way to extend an instantiable class and add an aspect while preserving the equals contract.&lt;/b&gt; (emphasis in original)&lt;br /&gt;&lt;/blockquote&gt;If you're paranoid, you can declare your implementation of &lt;i&gt;equals()&lt;/i&gt; to be &lt;b&gt;final&lt;/b&gt;, so you can be sure that it is never overridden. Since the CGLIB proxy doesn't try to override it, you're safe.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The "downside" of this approach, if it can be called that, is that each "terminal" domain object needs its own implementation of &lt;i&gt;equals()&lt;/i&gt; (note that it's &lt;tt&gt;(obj instanceof MyClass)&lt;/tt&gt;, not &lt;tt&gt;(obj instanceof getClass())&lt;/tt&gt;); in other words, you can't define a general &lt;i&gt;equals()&lt;/i&gt; in a superclass and let it do all the heavy lifting for inheriting classes. However, in the grand scheme of things, I don't really see that as much of a downside. Yeah, it's a bit of a pain to write &lt;i&gt;equals()&lt;/i&gt; methods, but it has to be done anyway (it's your job as a designer), and it is arguably a more accurate approach to take. As a designer, you need to be aware of the implication of what you code. If the &lt;i&gt;getClass()&lt;/i&gt; method works for you, fine; just be aware of what that implies. Ditto for the &lt;i&gt;instanceof&lt;/i&gt; method. I'm convinced that in my particular case, the &lt;i&gt;instanceof&lt;/i&gt; approach is the semantically correct one.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: I just checked my copy of &lt;a href="http://www.manning.com/bauer2/"&gt;&lt;b&gt;Java Persistence with Hibernate&lt;/b&gt;&lt;/a&gt; and, sure enough, they use &lt;i&gt;instanceof&lt;/i&gt; in their &lt;i&gt;equals()&lt;/i&gt; implementations. Clearly, the interaction with the proxies is a driving reason to use this formulation. Apart from that, though, I still think that using &lt;i&gt;instanceof&lt;/i&gt; is more semantically correct.&lt;/p&gt;&lt;b&gt;Helpful Links&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://www.jroller.com/page/sjivan?entry=intellij_generated_equals_breaks_hibernate"&gt;Sanjiv Jivan's post &lt;i&gt;IntelliJ IDEA generated equals() breaks Hibernate, where I initially found this approach&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://javaboutique.internet.com/tutorials/JavaOO/"&gt;Liskov's Substitution Principle article by Samudra Gupta at JavaBoutique&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf"&gt;Chapter 3 of &lt;b&gt;Effective Java&lt;/b&gt; by Joshua Bloch (PDF link)&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://www.artima.com/intv/bloch17.html"&gt;Josh Bloch on Design: instanceof versus getClass in equals Methods&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-1278941452576305338?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/1278941452576305338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=1278941452576305338' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/1278941452576305338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/1278941452576305338'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/07/liskov-substitution-principle-equals.html' title='Liskov&amp;#39;s Substitution Principle, equals, and Hibernate Proxies'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-7132432794999995040</id><published>2007-06-28T00:32:00.001-04:00</published><updated>2007-06-28T00:34:20.697-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgres'/><title type='text'>Cost-based vacuum delay caveat in Postgres</title><content type='html'>I've been trying to vacuum a 25M row table in Postgres and it has been taking forever; we're talking over 22 hours (thought I'd let it run as I flew to Philadelphia for this conference).  A bit of Googling turned up this thread:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://archives.postgresql.org/pgsql-general/2007-01/msg01753.php"&gt;VACUUM ANALYZE taking a long time, %I/O and %CPU very low&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This guy was seeing the same behaviour as I was: VACUUM ANALYZE was taking forever, and CPU and I/O percentages were hovering around 0.  He had the "vacuum_cost_delay" parameter set to 70, which means that Postgres will go to sleep for 70ms when it determines that the I/O costs have exceeded a certain limit ("vacuum_cost_limit").  Since a 25M row table isn't going to fit into memory, there's going to be a good deal of reading in blocks from the disk, and thus you're going to regularly exceed your delay threshold.&lt;br /&gt;&lt;br /&gt;Somehow I had set my delay to 500ms.  No wonder it was taking so long.  I dropped it down to 0, effectively disabling the cost-based delay feature.  Now, 10 minutes later, my table has been vacuumed and analyzed.&lt;br /&gt;&lt;br /&gt;Now, you can use the autovacuum daemon to vacuum your tables, and the pg_autovacuum table (where you specify table-specific vacuum parameters) will let you set a value for vacuum_cost_delay.  Thus, you can set the attribute "vac_cost_delay" to 0 to get quick autovacuums of your big tables, while still allowing you to set a system-wide vacuum_cost_delay for other smaller, less critical tables.  It looks like if you manually kick off a vacuum, though, it still uses the system-wide defaults, instead of the values from pg_autovacuum (why?).  Since you can set vacuum_cost_delay without reloading the server, if you need to do a manual vacuum, do a &lt;pre&gt;SET vacuum_cost_delay = 0;&lt;/pre&gt; first (or something higher than 0 if you can't afford to peg your disk I/O), and then VACUUM (remembering to set vacuum_cost_delay back to what it was afterwards!).  If you do this from the commandline, you might want to write a small wrapper script that will do this instead of running vacuumdb.&lt;br /&gt;&lt;br /&gt;The lesson here?  Always &lt;a href="http://www.postgresql.org/docs/8.2/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-VACUUM-COST"&gt;read the directions&lt;/a&gt;, kids.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-7132432794999995040?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/7132432794999995040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=7132432794999995040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/7132432794999995040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/7132432794999995040'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/06/cost-based-vacuum-delay-caveat-in.html' title='Cost-based vacuum delay caveat in Postgres'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-1781277344677571833</id><published>2007-06-25T21:56:00.001-04:00</published><updated>2007-06-28T00:33:20.467-04:00</updated><title type='text'>Transformers: Members of the Coalition of the Willing?</title><content type='html'>I'm going to a conference tomorrow, and decided to check on the TSA's website to make sure I wasn't going to be breaking any of their wonderfully inane rules, like bringing 4 oz. of shampoo (horrors!) in my carry-on luggage.&lt;br /&gt;&lt;br /&gt;I was quite surprised to find that they &lt;i&gt;specifically allow&lt;/i&gt; "&lt;a href="http://www.tsa.gov/travelers/airtravel/prohibited/permitted-prohibited-items.shtm#1"&gt;Toy Transformer Robots&lt;/a&gt;" (scroll down near the bottom).  Even without that, &lt;a href="http://en.wikipedia.org/wiki/Megatron"&gt;Megatron&lt;/a&gt; would still be OK, because toy guns (so long as they don't look like real guns) are cool.&lt;br /&gt;&lt;br /&gt;Furthermore, meat cleavers are prohibited &lt;i&gt;by name&lt;/i&gt; in carry-on luggage (come on, you ban sabers &lt;i&gt;and&lt;/i&gt; swords, ninja stars, and ice picks, and with all that, you &lt;i&gt;still&lt;/i&gt; have to call out meat cleavers?!?!)&lt;br /&gt;&lt;br /&gt;I'm glad our government is hard at work protecting us from Shampoo Bombers and insane butchers, but alas, they are falling behind in preventing the &lt;a href="http://www.youtube.com/watch?v=WGoi1MSGu64"&gt;impending robot invasion&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-1781277344677571833?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/1781277344677571833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=1781277344677571833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/1781277344677571833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/1781277344677571833'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/06/transformers-members-of-coalition-of.html' title='Transformers: Members of the Coalition of the Willing?'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-4579329496906813674</id><published>2007-06-21T10:27:00.001-04:00</published><updated>2007-06-22T00:52:32.875-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='internet'/><category scheme='http://www.blogger.com/atom/ns#' term='everythingismiscellaneous'/><title type='text'>Unreal</title><content type='html'>If anyone ever doubts that the Internet can truly be a powerful democratizing force in the world, where the average person can say something and have it matter, check this out.&lt;br /&gt;&lt;br /&gt;I started this blog last week.  I've never blogged anywhere before, and a &lt;a href="http://www.google.com/search?q=christopher+maier"&gt;search for my name on Google&lt;/a&gt; isn't going to bring up any significant hits to me (except now for this post I'm about to talk about!).  In other words, I'm not a "big voice" on the Internet.&lt;br /&gt;&lt;br /&gt;A few days ago, I posted my &lt;a href="http://cwmaier.blogspot.com/2007/06/genome-is-miscellaneous.html"&gt;third blog post ever&lt;/a&gt; to this free Blogger account.  I wrote about how I liked David Weinberger's book &lt;a href="http://www.everythingismiscellaneous.com/"&gt;Everything is Miscellaneous&lt;/a&gt;, and made an observation about how the themes he develops tie into what I work with, namely the human genome.  Nothing big, maybe a little insightful (&lt;i&gt;I&lt;/i&gt; thought it was neat, anyway).  I wasn't really writing "for" anyone... this blog is just a place I can write some of my own thoughts down, and if that might be useful or interesting to someone somewhere, then all the better.&lt;br /&gt;&lt;br /&gt;Today I'm sifting through my newsfeeds, and I see that David Weinberger has linked to my post on the main page of his book's &lt;a href="http://www.everythingismiscellaneous.com/2007/06/18/three-reviewsdiscussions/"&gt;website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Think about that for just a second.&lt;br /&gt;&lt;br /&gt;Thanks to the infrastructure that has been built up surrounding the Internet (Google indexing, &lt;a href="http://technorati.com/"&gt;Technorati&lt;/a&gt; blog indexing, folksonomic tagging, etc.), the words that I wrote were found and read by the author of the book I was talking about.  This isn't a top-down organization, either: there aren't professional indexers, catalogers, and abstractors out there reading and organizing everything that gets published online.  This is truly bottom-up organization, growing organically out of the miscellaneous pile of information we're growing online: the content, the usage patterns, the metadata—everything.  Nobody needs to see that "Ah, Christopher Maier has published a post on "Everything Is Miscellaneous." We need to properly file his post in the "Everything is Miscellaneous" bin (or was it the "genomics" bin, or...)".  Furthermore, very few people, in the grand scheme of things, are going to particularly care that I've done such a thing.  However, for the people that &lt;i&gt;would&lt;/i&gt; care about it and are &lt;i&gt;looking&lt;/i&gt; for something about &lt;i&gt;Everything Is Miscellaneous&lt;/i&gt;, or &lt;i&gt;genomes&lt;/i&gt; or whatever else I talk about, this infrastructure presents it to them, as if by magic.&lt;br /&gt;&lt;br /&gt;It is difficult, if not downright impossible, to see kind of thing happening prior to the advent of the Internet.  And it's really exciting to see where this will ultimately lead.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-4579329496906813674?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/4579329496906813674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=4579329496906813674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/4579329496906813674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/4579329496906813674'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/06/unreal.html' title='Unreal'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-456526250224146194</id><published>2007-06-18T00:37:00.000-04:00</published><updated>2007-06-18T00:39:21.124-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beer'/><title type='text'>Rodenbach</title><content type='html'>I recently discovered the joy of Flemish sour ale.  That's some damn fine &lt;a href="http://www.rodenbachusa.com/index.php?mcat=1&amp;amp;scat=1"&gt;beer&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-456526250224146194?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/456526250224146194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=456526250224146194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/456526250224146194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/456526250224146194'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/06/rodenbach.html' title='Rodenbach'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-5813430131726334599</id><published>2007-06-17T23:21:00.000-04:00</published><updated>2007-06-19T09:46:30.913-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='genome'/><category scheme='http://www.blogger.com/atom/ns#' term='ENCODE'/><category scheme='http://www.blogger.com/atom/ns#' term='everythingismiscellaneous'/><category scheme='http://www.blogger.com/atom/ns#' term='gene'/><title type='text'>The Genome Is Miscellaneous</title><content type='html'>Hopefully by now you have read David Weinberger's &lt;a href="http://www.everythingismiscellaneous.com/"&gt;Everything Is Miscellaneous: The Power of the New Digital Disorder&lt;/a&gt;. It's quite an interesting and absorbing read, one of those books that makes you look at the world just a bit differently.  I seem to be doing that an awful lot lately, finding unexpected applications of Weinberger's thesis all over the place.  The latest?  The human genome!&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.genome.gov/10005107"&gt;ENCODE Project&lt;/a&gt; just published its findings from a detailed investigation of 1% of the human genome, and it looks like it's waaaaaaaaaay more complex and interesting than we thought.  There's the &lt;a href="http://www.nature.com/nature/journal/v447/n7146/abs/nature05874.html"&gt;main article&lt;/a&gt; (DOI: 10.1038/nature05874) in the current issue of the journal &lt;a href="http://www.nature.com/nature/"&gt;Nature&lt;/a&gt;, and a whole slew of additional articles in &lt;a href="http://www.genome.org/content/vol17/issue6/"&gt;this month's Genome Research&lt;/a&gt;.  I've been working through Gerstein, et al.'s &lt;a href="http://www.genome.org/cgi/content/abstract/17/6/669"&gt;&lt;span style="font-style: italic;"&gt;What is a gene, post-ENCODE? History and updated definition&lt;/span&gt;&lt;/a&gt; (DOI: 10.1101/gr.6339607) for a very absorbing look at how our notion of a "gene" has changed dramatically in the years since Mendel and his peas, and where our understanding of "gene" stands in light of this exciting new data from ENCODE.&lt;br /&gt;&lt;br /&gt;It looks like the genome, far from being a nicely organized library of genetic building blocks, is a messy snarl of  bits of coding DNA, all mixed up together in a pile.  There is of course some physical structure to it all, but it seems pretty well jumbled up; the parts of a gene don't even need to be on the same chromosome.   It reminded me of Weinberger's big miscellaneous pile, into which all our information goes, waiting to be organized by users and searchers according to their needs and desires.  In the Miscellaneous Genome, the users and searchers are the complex regulatory networks of the cell, which seek out and assemble the bits they need to create the machinery and processes of life.  They know how to read the genomic metadata that we are trying to grasp; once we can read the metadata, we'll be able to sift through the Miscellaneous Genome with ease.&lt;br /&gt;&lt;br /&gt;Go read the book; go read the articles.  Good stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-5813430131726334599?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/5813430131726334599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=5813430131726334599' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/5813430131726334599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/5813430131726334599'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/06/genome-is-miscellaneous.html' title='The Genome Is Miscellaneous'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-3954843830184092241</id><published>2007-06-12T12:19:00.000-04:00</published><updated>2007-06-12T12:23:54.785-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='os x'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='postgres'/><title type='text'>Postgres 8.2.4 Segmentation Fault on Mac OS X</title><content type='html'>I've been having an annoying segmentation fault with the recent install of PostgreSQL on Mac OS X.  This happens whenever I quit psql after changing to a different database.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;psql(336) malloc: *** error for object 0x1811000: incorrect checksum for freed object - object was probably modified after being freed, break at szone_error to debug&lt;br /&gt;psql(336) malloc: *** set a breakpoint in szone_error to debug&lt;br /&gt;Segmentation fault&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Looks like others have run into this as well:&lt;br /&gt;&lt;a href="http://www.entropy.ch/phpbb2/viewtopic.php?p=10266"&gt;http://www.entropy.ch/phpbb2/viewtopic.php?p=10266&lt;/a&gt;&lt;br /&gt;&lt;a href="http://archives.postgresql.org/pgsql-hackers/2006-11/msg00331.php"&gt;http://archives.postgresql.org/pgsql-hackers/2006-11/msg00331.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apparently it has something to do with readline libraries.... not sure exactly what, though.  It's not a deal-breaker or anything, just annoying.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-3954843830184092241?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/3954843830184092241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=3954843830184092241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/3954843830184092241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/3954843830184092241'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/06/postgres-824-segmentation-fault-on-mac.html' title='Postgres 8.2.4 Segmentation Fault on Mac OS X'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2242337300576128842.post-5067985960995266204</id><published>2007-06-10T21:13:00.000-04:00</published><updated>2007-06-10T23:27:20.545-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='os x'/><category scheme='http://www.blogger.com/atom/ns#' term='cryptanalysis'/><category scheme='http://www.blogger.com/atom/ns#' term='pdf'/><title type='text'>Concatenating PDFs</title><content type='html'>A while back I downloaded the Basic Cryptanalysis Army Field Manual from the University of Michigan.  The manual is &lt;a href="http://www.umich.edu/%7Eumich/fm-34-40-2/"&gt;available&lt;/a&gt; as a PDF-per-chapter, but I'd like to have the entire manual as one complete PDF.&lt;br /&gt;&lt;br /&gt;Then I found out that Mac OS X already has this capability.  With a pointer from &lt;a href="http://www.cs.cmu.edu/%7Ebenhdj/Mac/unix.html#joinPDF"&gt;this site&lt;/a&gt; I put together this command to create my single PDF:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;/System/Library/Automator/Combine\ PDF\ Pages.action/Contents/Resources/join.py -o military_cryptanalysis.pdf toc.pdf pref.pdf intro.pdf ch1.pdf ch2.pdf ch3.pdf ch4.pdf ch5.pdf ch6.pdf ch7.pdf ch8.pdf ch9.pdf ch10.pdf ch11.pdf ch12.pdf ch13.pdf ch14.pdf ch15.pdf appa.pdf appb.pdf appc.pdf appd.pdf appe.pdf appf.pdf gloss.pdf ref.pdf index.pdf&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The resulting PDF is rather large (~31MB), so it seems that there could be some compression to be done.  But, the point is you can concatenate PDFs easily right out of the box with OS X.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2242337300576128842-5067985960995266204?l=cwmaier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cwmaier.blogspot.com/feeds/5067985960995266204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2242337300576128842&amp;postID=5067985960995266204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/5067985960995266204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2242337300576128842/posts/default/5067985960995266204'/><link rel='alternate' type='text/html' href='http://cwmaier.blogspot.com/2007/06/first-post.html' title='Concatenating PDFs'/><author><name>Christopher Maier</name><uri>http://www.blogger.com/profile/06165722516930894713</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
