<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:suppressingfire</id>
  <title>Michael R. Head's Journal</title>
  <subtitle>Mostly Linux topics, with some Ph.D.-related content</subtitle>
  <author>
    <name>Michael R. Head</name>
  </author>
  <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom"/>
  <updated>2009-12-28T17:10:24Z</updated>
  <lj:journal userid="1505534" username="suppressingfire" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://suppressingfire.livejournal.com/data/atom" title="Michael R. Head's Journal"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:44513</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/44513.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=44513"/>
    <title>Who's making decent laptops these days with the "nubbin" pointer?</title>
    <published>2009-12-28T17:10:24Z</published>
    <updated>2009-12-28T17:10:24Z</updated>
    <category term="thinkpad"/>
    <category term="laptop"/>
    <category term="busted"/>
    <content type="html">My school Thinkpad's system board died last week (the video chip won't boot), so I shipped it in for service (we paid for a 3 year warranty on the core components). So far so good, I've been happy with Thinkpad support in the past. Unfortunately, I had damaged the plastic around the USB port 6 months ago, and the warranty we bought doesn't cover the broken plastic. So they told me they won't (OK, "can't" -- the USB port is on the system board) fix the covered problem until I pay to fix the uncovered problem... at a cost of $950 for a two and half year old laptop.&lt;br /&gt;&lt;br /&gt;So, I guess I'm done with Lenovo / Thinkpads. I'm in no immediate need to replace it because I have a separate laptop from work. Nevertheless, I'd like to start planning it out. &lt;br /&gt;&lt;br /&gt;So which manufacturers are still holding  up the banner of quality? Are any of them coming with &lt;a href="http://en.wikipedia.org/wiki/Pointing_stick"&gt;pointing sticks&lt;/a&gt;? Do other manufacturer's pointing sticks have the same feel as the Thinkpad? I have all kinds of trouble with touchpads when I'm trying to seriously use a laptop, so anything with only touch is unacceptable.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:44081</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/44081.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=44081"/>
    <title>Glass TTY TTF</title>
    <published>2009-10-31T16:38:48Z</published>
    <updated>2009-10-31T20:01:51Z</updated>
    <category term="linux"/>
    <content type="html">I just found the &lt;a href="http://sensi.org/~svo/glasstty/"&gt;Glass TTY VT220&lt;/a&gt; TTF font. It makes for a great full-screen terminal experience. I set up a new gnome-terminal profile that uses the font at 20 points, disabled the menu bar, and ran it full screen:&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/iDzrg7Z1OvVUVABV2Gy4Tw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_xy_q7AavENg/Suxmk0FuxxI/AAAAAAAABCU/v0hQpwja4Mw/s144/Screenshot-burner%40phoenix%3A%20%7E-Desktop.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:cmr10,DejaVuSans,sans-serif; font-size:11px; text-align:right"&gt;From &lt;a href="http://picasaweb.google.com/suppressingfire/Misc?feat=embedwebsite"&gt;Misc&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Edit:&lt;/b&gt; If you're into this, a more complete immersion has been &lt;a href="http://jwz.livejournal.com/310943.html"&gt;possible for 5 years&lt;/a&gt; with Xscreensaver's phosphor program.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:43898</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/43898.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=43898"/>
    <title>Eclipse Galileo blogathon entry</title>
    <published>2009-07-03T19:39:36Z</published>
    <updated>2009-07-03T19:40:48Z</updated>
    <category term="eclipse"/>
    <category term="reviews"/>
    <category term="programming"/>
    <content type="html">The new Eclipse (3.5 AKA Galileo) is out. They're &lt;a href="http://www.eclipse.org/galileo/blogathon/guidelines.php"&gt;giving out prizes&lt;/a&gt; to folks that blog about the new release. Two years ago, they had another such contest for which I &lt;a href="http://suppressingfire.livejournal.com/24798.html"&gt;submitted an entry&lt;/a&gt;. I was so happy with the nice logoed polo shirt, that I decided to do it again. (Actually, I probably would have written a review anyway).&lt;br /&gt;&lt;br /&gt;So, here's a bulleted list of items that were notable to me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Under Linux, the buttons appear in the correct order (!). So "OK" appears on the bottom, right hand corner of a dialog, according to GNOME standards.&lt;/li&gt;&lt;li&gt;The Install tool is much nicer, making it a lot easier to find the right plugin quickly, such as Subversive, which is pretty much a required plugin these days.&lt;ul&gt;&lt;li&gt;Sadly, the Subversive SVN Connectors repository isn't enabled by default, so you need to add a &lt;a href="http://www.polarion.com/products/svn/subversive.php?src=eclipseproject"&gt;couple extra update sites&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;VE is still installable under Galileo, though it continues to be the 1.4 version. Linux support continues to be present, but weak. (&lt;a href="http://wiki.eclipse.org/VE/Update"&gt;Installation instructions&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Webtools has long had a "Download and Install..." button for Tomcat 6 in the Servers view, but it still points at an out of date release (6.0.14) and failed to function on system. Nevertheless, it's easy enough to download Tomcat 6.0.20, extract it and place it under the control of Eclipse for deploying, testing, and debugging web/JSP/servlet projects.&lt;ul&gt;&lt;li&gt;A large number of servers are still supported, and the "Download additional server adapters" feature continues to exist, but the adapters need to be updated (the Glassfish adapters require an obsolete plugin, and the Jetty plugin fails to install).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;CDT appears to work better than the last time I took a serious look at it. Completions seem to work better and more refactorings and source transformations appear to be available which should make working with headers and implementation files easier. I'm not sure it's enough to keep me out of Emacs, but it's getting closer.&lt;/li&gt;&lt;li&gt;It looks like TPTP is going into "Maintenance mode," and as such, has seen some improvement with respect to reliability. Under Linux, with Sun's Java 6 (update 13), code profiling works "out of the box." In the past, it used to require fiddling with Agents or switching to older releases of Java, due to the tooling API change in Java from JVMDI to JVMTI.&lt;/li&gt;&lt;li&gt;Mylyn continues to be solid and has a workable plugin installer (for third party support for additional task trackers). &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;So, the new release is an improvement. Some third party items need to be updated (particularly the additional Webtools adapters). If those tools are required, it would be best to wait some time before upgrading.&lt;br /&gt;&lt;br /&gt;I'm still waiting for an improved welcome page with connections to the Eclipse community (similar to what I've seen in &lt;a href="http://suppressingfire.livejournal.com/19751.html"&gt;Visual Studio's start view&lt;/a&gt;).</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:43701</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/43701.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=43701"/>
    <title>Starting my full on job search...</title>
    <published>2009-06-01T15:28:05Z</published>
    <updated>2009-06-01T15:28:05Z</updated>
    <category term="employment"/>
    <category term="jobs"/>
    <content type="html">I recently defended my Ph.D. dissertation and will submit my final paper work for graduation in September. As such, I'm starting to look for work starting in October. &lt;br /&gt;&lt;br /&gt;I'm most interested in working in a research lab building prototypes, authoring papers and patents, and attending conferences. The communities I've been most involved with are represented by the IPDPS, HPDC, and SuperComputing conferences, though I am interested in other fields.&lt;br /&gt;&lt;br /&gt;I'm also open to considering joining a technology startup or working in more traditional software engineering roles, and will certainly discuss and evaluate any such leads.&lt;br /&gt;&lt;br /&gt;My resume and CV are linked from my university web site: &lt;a href="http://www.cs.binghamton.edu/~mike"&gt;http://www.cs.binghamton.edu/~mike&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:43281</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/43281.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=43281"/>
    <title>Accessing the java:comp/env JNDI lookup context outside of a J2EE container</title>
    <published>2009-05-25T05:22:44Z</published>
    <updated>2009-11-19T16:20:51Z</updated>
    <category term="eclipse"/>
    <category term="java"/>
    <content type="html">I was recently modifying some custom JDBC code that is meant to work inside of Tomcat where a JNDI naming context has been setup with a reference for a &lt;code&gt;javax.sql.DataSource&lt;/code&gt;. &lt;a name="cutid1"&gt;&lt;/a&gt;In other words, somewhere in the data layer, we have code like this:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;Context initContext = new InitialContext();&lt;br /&gt;DataSource dataSource = (DataSource) initContext.lookup("java:comp/env/jdbc/db1");&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;And somewhere in the container configuration (in this case Tomcat's &lt;code&gt;context.xml&lt;/code&gt;), we have something like this (obviously the IP address, username and password have been made up):&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;Resource name="jdbc/db1" auth="Container" type="javax.sql.DataSource" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://sql.example.com:1433" username="dbuser" password="dbpass" maxActive="20" maxIdle="10" maxWait="-1" /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The modification was to create a &lt;code&gt;main()&lt;/code&gt; method that can use the same code from the command line. One option is just to &amp;ldquo;fix&amp;rdquo; the above code and remove to dependence on the on JNDI. While that is probably the most straightforward approach, I found it undesirable in this case to modify the existing code.&lt;br /&gt;&lt;br /&gt;It took me some time to figure out how to mimic what Tomcat does with the above Resource tag. It's not terribly complicated, but it wasn't obvious to me, and I ran past a large number of &amp;ldquo;&lt;code&gt;Name java: is not bound in this Context&lt;/code&gt;&amp;rdquo; when trying to bind the name &lt;code&gt;"java:comp/env/jdbc/db1"&lt;/code&gt; and &lt;code&gt;javax.naming.NoInitialContextException&lt;/code&gt;s before I understood how the &lt;code&gt;javax.naming&lt;/code&gt; package is meant to work.&lt;br /&gt;&lt;br /&gt;After some trial and error and reading through some of the Tomcat sources, I was able to put together some working code. The first trick is to create the data source, which will differ slightly depending on the specific database and JDBC driver used:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;private static DataSource createDataSource() {&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;SQLServerDataSource ds = new SQLServerDataSource();&lt;br /&gt;ds.setURL("jdbc:sqlserver://sql.example.com:1433");&lt;br /&gt;ds.setUser("dbuser");&lt;br /&gt;ds.setPassword("dbpass");&lt;br /&gt;return ds;&lt;/code&gt;&lt;/blockquote&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;And the following sets that data source into the context so it can be found by the unmodified JDBC code above.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;private static void setupNamingContext(DataSource ds) throws NamingException {&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;System.setProperty(Context.INITIAL_CONTEXT_FACTORY, javaURLContextFactory.class.getName());&lt;br /&gt;Context ctx = new InitialContext();&lt;br /&gt;Context javaCtx = ctx.createSubcontext("java");&lt;br /&gt;javaCtx.createSubcontext("comp").createSubcontext("env").createSubcontext("jdbc").bind("db1", ds);&lt;br /&gt;ctx.bind("java:", javaCtx);&lt;/code&gt;&lt;/blockquote&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;And then in &lt;code&gt;main&lt;/code&gt;, I call these directly:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;br /&gt;public static void main(String[] args) throws NamingException {&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;setupNamingContext(createDataSource());&lt;br /&gt;...&lt;/code&gt;&lt;/blockquote&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So far, I've just run the code from within an Eclipse project that was already configured as a Dynamic Web Project configured to run with Tomcat, so all the main jars from Tomcat are in the classpath as well as the jar for the JDBC driver. I did specifically need to add &lt;code&gt;tomcat-juli.jar&lt;/code&gt; to the build path of the project to avoid an exception when first accessing the &lt;code&gt;NamingContext&lt;/code&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In conclusion, the above few lines of Java should allow the use of code written with the expectation that it will run within a servlet container, with a JNDI naming context with resources in the &amp;ldquo;&lt;code&gt;java:comp/env&lt;/code&gt;&amp;rdquo; context, to be called from a standalone &lt;code&gt;main()&lt;/code&gt; method without the entire servlet engine up and running.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:43062</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/43062.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=43062"/>
    <title>Tweaked IEEEtran.cls for IEEE Computer Society conferences</title>
    <published>2009-05-01T22:15:55Z</published>
    <updated>2009-05-01T22:16:30Z</updated>
    <category term="latex"/>
    <lj:music>05/01/09 Marketplace Money</lj:music>
    <content type="html">I've found some issues trying to match the &lt;a href="http://www.computer.org/portal/pages/cscps/cps/cps_forms.html"&gt;IEEE CS conference formatting rules&lt;/a&gt; to the provided LaTeX class. After some fiddling, I've put together a &lt;a href="http://www.cs.binghamton.edu/~mike/ieee-cs-conf/IEEEtran.diff.txt"&gt;modified&lt;/a&gt; &lt;a href="http://www.cs.binghamton.edu/~mike/ieee-cs-conf/IEEEtranMRH.cls"&gt;IEEEtran.cls&lt;/a&gt; and &lt;a href="http://www.cs.binghamton.edu/~mike/ieee-cs-conf/sample.tex"&gt;sample&lt;/a&gt; input document which should match the &lt;a href="ftp://pubftp.computer.org/press/outgoing/proceedings/instruct8.5x11.pdf"&gt;formatting requirements&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I've placed this all into a web page at &lt;a href="http://www.cs.binghamton.edu/~mike/ieee-cs-conf/"&gt;www.cs.binghamton.edu/~mike/ieee-cs-conf&lt;/a&gt; for posterity.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:42838</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/42838.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=42838"/>
    <title>Settings needed to get Mozilla Thunderbird to do the right thing.</title>
    <published>2009-03-11T00:57:58Z</published>
    <updated>2009-03-11T01:07:28Z</updated>
    <category term="ubuntu"/>
    <category term="linux"/>
    <category term="email"/>
    <category term="thunderbird"/>
    <lj:music>The sound of silence ringing in my ears</lj:music>
    <content type="html">I have used &lt;a href="http://projects.gnome.org/evolution/"&gt;Evolution&lt;/a&gt; for a long time, primarily because it does the right thing for me. I have somewhat complicated email requirements due to the fact that I receive thousands of emails a day (mostly via mailing lists and many of which I may never read). &lt;a name="cutid1"&gt;&lt;/a&gt;I have procmail scripts that automatically put emails from mailing lists in the right place, which may mean creating new folders and definitely means that new email can appear anywhere in my tree of folders. Any email client that I'm going to use on a daily basis needs to handle this. My email lives on a server which I access via IMAP (or occasionally via a webmail client). Until recently, I thought the only desktop email client that could really served me well was Evolution. I've tried to use &lt;a href="http://www.mozilla.org/thunderbird"&gt;Thunderbird&lt;/a&gt; several times, but get stuck because I've been unable to get it to automatically look for new folders, to automatically scan all folders (including newly found folders) for email, and then to automatically download those emails so they are immediately accessible when I go to read them. Also, Thunderbird is really dumb about detecting email threads, so every time I get an email from someone with the subject &amp;quot;Hi,&amp;quot; Thunderbird stupidly assumes it is related to some other email with the same subject.&lt;br /&gt;&lt;br /&gt;It turns out that Thunderbird can actually do all these things, but it requires tweaking variables using a tool like &lt;a&gt;about:config&lt;/a&gt; in Firefox. In Thunderbird, this is accessible by going to Edit/Preferences/Advanced/General/Config Editor have no idea why (some of) these options aren't user visible outside of the config tool, but here they are:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;tt&gt;mail.server.default.using_subscription&lt;/tt&gt; should be &lt;b&gt;false&lt;/b&gt; to get Thunderbird to look for new folders.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;mail.check_all_imap_folders_for_new&lt;/tt&gt; shuld be &lt;b&gt;true&lt;/b&gt; to get Thunderbird to check all those folders for new messages.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;mail.server.default.autosync_offline_stores&lt;/tt&gt; should be &lt;b&gt;true&lt;/b&gt; to get Thunderbird to download the new messages before they are accessed. This may need to be created (right click in the table area and select New/Boolean)&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;mail.server.default.download_on_biff&lt;/tt&gt; should be &lt;b&gt;true&lt;/b&gt;. I think this helps out with autosync (may be redundant).
&lt;br /&gt;&lt;br /&gt;
&lt;tt&gt;mail.strict_threading&lt;/tt&gt; should be &lt;b&gt;true&lt;/b&gt; to get Thunderbird to stop outsmarting itself with respect to subject-based email threads.
&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;I think that covers it. I'd also like to get my google calendar synced into Thunderbird and again synced into my GNOME desktop calendar like Evolution does (there are plugins for that), but this should be enough to satisfy my critical email needs in Thunderbird.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:42622</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/42622.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=42622"/>
    <title>Spending in a recession...</title>
    <published>2008-12-12T18:01:19Z</published>
    <updated>2008-12-12T18:02:35Z</updated>
    <category term="purchases"/>
    <category term="coffee"/>
    <category term="personal"/>
    <content type="html">After getting sick of brewing weak, yet bitter coffee at home for at least a year now, we decided to buy a new coffee maker. I&amp;nbsp;had originally been eyeing these &amp;quot;grind and brew&amp;quot;&amp;nbsp;machines which take as input water, whole roasted beans, and a brew time and output fresh ground and brewed coffee at the appropriate hour.&amp;nbsp;&lt;a name="cutid1"&gt;&lt;/a&gt;There are a number of these available on the market, but after doing a bit of &amp;quot;research&amp;quot; on the web, I&amp;nbsp;found too many reviews that indicate that all of the machines that are reasonably priced (less than $300) are not well made and don't brew top quality coffee. What's more, they can be problematic to clean if you use certain oily beans. So we scrapped that idea. Now, at work there's an &amp;quot;espresso buy-the-cup&amp;quot; machine that makes really nice espresso and cappucino at the press of a button from whole beans, water, and milk, but that machine is way out of budget.&lt;br /&gt;&lt;br /&gt;So the other class of makers I've been looking at are the &amp;quot;single cup coffee makers.&amp;quot; These take as input water and a powder (or concentrated liquid) packet and output a cup of coffee within a minute. There seem to be three major vendors of these, Flavia, Keurig, and Tassimo. Flavia appears to distribute mainly via the Internet/mail order. We had a bunch of Bed Bath and Beyond 20% off coupons and were in the mood to get one today, so we drove over to BB&amp;amp;B to select one. BB&amp;amp;B has a &amp;quot;special edition&amp;quot; Keurig which has a smaller water reservoir than their other models, but is ~$50 cheaper, so we went with that.&lt;br /&gt;&lt;br /&gt;The major tradeoffs between the Keurig and the Tassimo appear to be that the Keurig can brew regular coffee with a special filter/adapter and has slightly less expensive &amp;quot;K-Cup&amp;quot; flavor packets, whereas the Tassimo has a charcoal filter, smaller sized flavor packets, a deal with Starbucks to supply some coffee, and the ability to brew espresso and cappucino. Cheaper per-cup expenses (~50&amp;cent;/ 8oz cup) and the fact that we're just fine buying charcoal filters for our Brita lead us to the Keurig. I&amp;nbsp;figure if I&amp;nbsp;want cappucino, I&amp;nbsp;can walk the 2 blocks to any of the several coffee shops on Main street in Tarrytown.&lt;br /&gt;&lt;br /&gt;End result: we have made a few drinks with the Keurig, and are quite happy with it. I made a medium cup of cocoa with the included packet for basic cocoa. It was a little weak and watery, which is to be expected for my tastes, because I&amp;nbsp;exclusively make powerdered hot cocoa with milk. Nevertheless, it was drinkable, and at some point I'll order the fancier Ghirardelli &amp;quot;K-Cup.&amp;quot; Shprese has been happy with the coffee it brews, so I consider the purchase a success.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:42469</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/42469.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=42469"/>
    <title>Converting chemical energy into mechanical energy</title>
    <published>2008-12-02T16:56:58Z</published>
    <updated>2008-12-02T16:57:23Z</updated>
    <category term="cycling"/>
    <category term="personal"/>
    <content type="html">I&amp;nbsp;finally got around to biking to work again today.&lt;br /&gt;&lt;br /&gt;I&amp;nbsp;foolishly thought I&amp;nbsp;would save time by taking my bike to the shop to get a tune up. Sadly, the owner of the shop decided to take an unannounced vacation from the store and left me without the bike for two weeks. Worse, while he did a satisfactory job replacing the brake pads, the derailleurs aren't tuned quite as tight before, leading to gear slippage and even chain drop. &lt;br /&gt;&lt;br /&gt;Still, it's working satisfactorily enough to get me back and forth to work. Even better, I've brought my on-road time down to about 30 minutes for the 3 mile ride. The weather was nice today, probably around 40 when I&amp;nbsp;set out. My ski thermals, padded bike shorts, long sleeved shirt I&amp;nbsp;got at SC08, fleece, ear muffs and gloves kept me warm enough once I&amp;nbsp;got my internal temperature up on the initial ~300' climb.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:41921</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/41921.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=41921"/>
    <title>Highlights from first week in Austin</title>
    <published>2008-11-16T08:24:36Z</published>
    <updated>2008-11-16T08:27:02Z</updated>
    <category term="travel"/>
    <category term="sc08"/>
    <category term="austin"/>
    <lj:music>C-Span</lj:music>
    <content type="html">After a week in Austin following a number of events, there have been a number highlights:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Burgers and beer at Casino El Camino&lt;/li&gt;&lt;li&gt;Burgers at Huts&lt;/li&gt;&lt;li&gt;Pad Kra Pow at Mekong River Restaurant&lt;/li&gt;&lt;li&gt;Forrest Gump mocked by Master Pancake at the Alamo Drafthouse&lt;/li&gt;&lt;li&gt;Drinks at the happy hour on the roof deck at Boundless Networks&lt;/li&gt;&lt;li&gt;Getting down with Junior Brown at Antone’s&lt;/li&gt;&lt;li&gt;Beers at The Ginger Man&lt;/li&gt;&lt;li&gt;Winning a rice cooker at Dave and Buster’s&lt;/li&gt;&lt;li&gt;Watching nurses rallying at the state house&lt;/li&gt;&lt;li&gt;Watching gay marriage advocates rallying on 6th street&lt;/li&gt;&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:41668</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/41668.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=41668"/>
    <title>A thought after the election...</title>
    <published>2008-11-05T14:21:51Z</published>
    <updated>2008-11-05T14:21:51Z</updated>
    <content type="html">There's a lot that could be said today in the wake of history, but I want to focus on just a small portion of the events of last night: John McCain's concession speech. If you missed it and haven't seen a replay of it, I recommend it.  I won't link directly to any particular news organization's copy, but your favorite search engine should find it easily enough.&lt;br /&gt;&lt;br /&gt;I rarely use the plural first person when reflecting on my personal impressions, but I think it may be safe to do so today.&lt;br /&gt;&lt;br /&gt;John McCain's concession speech reminds us that of the Senator McCain that has long enjoyed broad support outside his own party. He reminds us that his slogan, "Country First," is a true guiding principle for him. This speech may mark his shift from maverick, to presidential contender, to elder statesman.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:41269</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/41269.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=41269"/>
    <title>Raising awareness...</title>
    <published>2008-10-23T00:38:37Z</published>
    <updated>2008-10-23T12:46:55Z</updated>
    <content type="html">A BU professor has been jailed in Kazakhstan and is having trouble getting proper medical attention for his diabetes:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bupipedream.com/current/index.php/articles/view/9239"&gt;http://bupipedream.com/current/index.php/articles/view/9239&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt; Moronski has been collecting all the information and reports about the case: &lt;a href="http://www.moronski.com/Skormin/"&gt;http://www.moronski.com/Skormin/&lt;/a&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:40964</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/40964.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=40964"/>
    <title>Simple tax question...</title>
    <published>2008-10-22T18:23:54Z</published>
    <updated>2008-10-22T18:23:54Z</updated>
    <category term="politics"/>
    <category term="policy"/>
    <content type="html">I generally dislike getting political in my blog, but this is an issue that has been bugging me.&lt;br /&gt;&lt;br /&gt;I've been trying to figure out why increasing the the upper tax rate (for the 250K and up bracket) at the expense of reducing everyone else's taxes is bad for small businesses (where I define small businesses as sole proprietorships making less than 1,000K/year).&lt;br /&gt;&lt;br /&gt;Isn't growth actually promoted by increasing that upper tax rate? If I have a business that has already realizing 250K of actual income (revenue minus costs), wouldn't I just decide to invest the rest in the business, saying hiring a new employee, making capital expenditures, or paying for a health care plan for my employees? Further, wouldn't I rather have more customers coming in because their taxes were lowered? What's more, my employee morale might improve as they can realize more of their income (i.e., I need to withhold a smaller percentage of their earnings in each paycheck).&lt;br /&gt;&lt;br /&gt;Followup Q: why is this not being discussed? Maybe the answer is that the Obama campaign doesn't want to be on the defensive here...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:40729</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/40729.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=40729"/>
    <title>Biked to work for the first time today</title>
    <published>2008-10-15T13:38:55Z</published>
    <updated>2008-10-15T13:38:55Z</updated>
    <category term="cycling"/>
    <category term="personal"/>
    <lj:music>Gentle spin of the ventilation fan</lj:music>
    <content type="html">I biked to work today. Not too bad... there's a pretty serious grade right up front, but the rest of the ride is fine. The showers at the office are decent.&lt;br /&gt;&lt;br /&gt;It's a ~3.3 mile trip and, if I'm reading the topo maps right, a ~300' climb. It took about half an hour. Hopefully I&amp;nbsp;can bring that down before it gets too cold. I'll be in this job until Jan 31 and would like to bike at least few days a week until then.&lt;br /&gt;&lt;br /&gt;Anyone have suggestions for cold weather biking?</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:40600</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/40600.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=40600"/>
    <title>HP OfficeJet j4550 all-in-one on Ubuntu 8.04LTS</title>
    <published>2008-10-08T00:56:12Z</published>
    <updated>2008-10-08T00:56:12Z</updated>
    <category term="ubuntu"/>
    <category term="linux"/>
    <category term="hardware"/>
    <content type="html">Just got a Sam's Club membership yesterday. We picked up enormous bags of frozen vegetables. On the way out of the store, I noticed that there was a printer/scanner/fax combo (HP OJ j4550) for $39. I&amp;nbsp;fired up my N810 and confirmed its Linux compatibility. It's got a flatbed scanner with a document feeder, which beats the other cheap officejet I've seen which can only scan full sheets. It should be good for scanning receipts, odd sized pages, and multi-page documents. gscan2pdf is great for the later.&lt;br /&gt;&lt;br /&gt;Today I&amp;nbsp;hooked it up. Printing worked on the &amp;quot;first plug-in&amp;quot; on Ubuntu 8.04LTS. I already had the hpijs package installed, so the printer auto-detected and Ubuntu set everything up correctly. Scanning was a little more difficult. I&amp;nbsp;tried a few scanning programs which kept saying no printer was detected/attached. Turns out I&amp;nbsp;needed to install the hpoj package, too. Once it was installed (the installer detects the scanner bits of the OfficeJet), all was well and I&amp;nbsp;was scanning my test stack of documents.&lt;br /&gt;&lt;br /&gt;I've found myself in need of a copier, scanner, and fax machine a few times recently, so it's good to have a decent one at home.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:40262</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/40262.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=40262"/>
    <title>New chairs in the lab!</title>
    <published>2008-08-27T18:10:42Z</published>
    <updated>2008-08-27T18:11:42Z</updated>
    <category term="lab"/>
    <content type="html">Came into the lab today to find that the previous set of chairs, which were really terrible, have been replaced by comfortable, cushioned "manager" style chairs. 'course I won't be here this semester to take advantage of them, but until I leave for White Plains, it'll be nice to have them.&lt;br /&gt;&lt;br /&gt;The 99¢ webcam shot below doesn't do it justice, but it's the only image capture tool I have available here:&lt;br /&gt;&lt;img src="http://www.cs.binghamton.edu/~mike/0009.jpg"&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:40070</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/40070.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=40070"/>
    <title>Crazy project idea</title>
    <published>2008-08-20T18:43:30Z</published>
    <updated>2008-08-20T18:43:30Z</updated>
    <category term="project"/>
    <category term="crazy"/>
    <lj:music>Slight hum from a fan in the USB-powered refrigerator</lj:music>
    <content type="html">Walking to campus today, I had a crazy idea for a project: an LED-based digital display. The idea would be to build pixels out of bundles of LEDs, all powered off a custom controller. The DPI here would be tiny, like 10 or less, which means a 480p display would be enormous (~7') and ridiculously expensive: ~350,000 pixels, each at perhaps a dollar a piece in bulk. So indeed, crazy... but maybe it's possible to build a prototype at much lower resolution (if DVI supports something very small, like 12x10) or one that does subpixel interpolation to make use of a much smaller amount of pixels. Or perhaps start on a small corner of a complete display, leaving the rest dark for the time being.&lt;br /&gt;&lt;br /&gt;Anyway... it could be an interesting (and cost inefficient) way to build a wall size display over time.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:39781</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/39781.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=39781"/>
    <title>Back from California</title>
    <published>2008-08-17T05:30:32Z</published>
    <updated>2008-08-17T05:38:42Z</updated>
    <content type="html">I'm sitting here on the airplane flying back from my latest Google interview, this time for a "Software Engineer, Google.com" position, otherwise known as "Site Reliability Engineering." The interview didn't go as well as last time, so I think it's highly unlikely that I'll be offered a position. I probably did really well with just 1 of the 5 technical interviewers, making a couple massive brainfarts in the other sessions.&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;This is not actually a bad thing, though. I'd been having trouble understanding what the job would really 'feel' like, and I still don't know if it would be right for me, so it would be hard to decide whether to take an offer. It's sort of a "programmer with a pager" position where one doesn't write code that handles requests, one writes the code that makes sure requests are handled. And when requests start to fail, the pager goes off and complex issues must be debugged, isolated, and repaired. After that, code mus be written to avoid the problem in the first place.&lt;br /&gt;&lt;br /&gt;What interests me about it is that it's not a regular&lt;br /&gt;SWE job. I'm not sure I want to be developing new features for applications anyway -- the pace and long term tasks are kind of a turn off. I think I'd much rather be shifting and completing tasks frequently. I think I may be better at handling tasks as they come in than over longer periods (more efficient at "putting out fires" than day-to-day tasks). Also, SREs need a substantial amount of access to do their jobs, so certainly having that sort of power might be cool.&lt;br /&gt;&lt;br /&gt;Perhaps a more ideal position would be working on research prototypes, though, and SREs are definitely not in that game. Plus the pager... that's just not cool. There's a short turnaround time when it goes off, so SREs definitely can't do much while on call.&lt;br /&gt;&lt;br /&gt;Looking at the position within Google, it seems like there's a substantial amount of risk due to relying on combo programmer/admins. They form a critical piece of the business, but it seems to be a really hard position to hire for, since candidates need to be experts in both parts, and it's got to be hard to get SWEs to carry a pager. At the same time the discipline is critical to the business because they keep the cost of actually running huge numbers of small systems within reason.&lt;br /&gt;&lt;br /&gt;So we'll see. I'm much more excited about the potential for an internship with IBM this semester. They're doing stuff that's right up my alley: prototyping new systems.&lt;br /&gt;&lt;br /&gt;BTW, this is just what I've gleaned from public info about SRE, not from anything I've pulled from the folks in Google I've talked to.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:39428</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/39428.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=39428"/>
    <title>Unexpected search results..</title>
    <published>2008-08-12T05:29:06Z</published>
    <updated>2008-08-12T05:29:06Z</updated>
    <content type="html">I was writing some LaTeX today and was looking at different ways in which TeXers encode big O notation. Let's just say that searching for "big o" and latex will turn up results substantially unrelated to math and computer science authoring.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:39392</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/39392.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=39392"/>
    <title>Auto-adjust the output width of R</title>
    <published>2008-08-11T00:27:04Z</published>
    <updated>2008-08-11T00:27:04Z</updated>
    <category term="analysis"/>
    <category term="linux"/>
    <category term="r"/>
    <content type="html">I find myself searching for &lt;a href="https://stat.ethz.ch/pipermail/r-help/2008-March/156254.html"&gt;this post&lt;/a&gt; every so often, so I'll copy it here for safe keeping:&lt;br /&gt;&lt;pre&gt;
# auto width adjustment

.adjustWidth &amp;lt;- function(...){
       options(width=Sys.getenv("COLUMNS"))
       TRUE
}
 
.adjustWidthCallBack &amp;lt;- addTaskCallback(.adjustWidth)
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Running this in an R session will cause the output width to match the terminal width. This works inside an Emacs/ess window, too.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:38966</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/38966.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=38966"/>
    <title>Getting proper SSL certificates</title>
    <published>2008-08-07T22:14:13Z</published>
    <updated>2008-08-08T00:44:57Z</updated>
    <category term="debian"/>
    <category term="ubuntu"/>
    <category term="linux"/>
    <content type="html">I've seen a heck of a lot of mozilla bashing lately due to firefox's handling of self-signed SSL certs. Personally, I like the updated system and the dialogs. It's generally a bad idea to accept a self signed cert handed by a web site. &lt;br /&gt;&lt;br /&gt;Problem is, folks like me want to be able to use SSL to connect to services on their own servers or servers of friends. &lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;In this case, self signed certs can be used by passing the cert around via email or some other method and manually importing it before connecting. &lt;br /&gt;&lt;br /&gt;Still, that's an annoying process to have to go through. It's better just to get an SSL cert signed by a respected signing authority. The one bit of goodness to come out of the flames at mozilla is that there's a respected CA that will sign certificate requests for free. Free certs only guarantee that the person who requested the signature reads email at the address that is registered in WHOIS as the contact for the domain. The signature on the certificate will last for one year. I haven't tried yet, but it may be possible to extend the length of the certification by using the -days option on the certificate request in openssl.&lt;br /&gt;&lt;br /&gt;Since all of this is automated, it's possible to get a properly SSL cert quickly and easily:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sign up at &lt;a href="http://www.startssl.com/?app=12"&gt;StartSSL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You'll need to verify your email address and the domain you own, but the process is fairly straight forward. Don't forget to backup the SSL certificate they generate so you can log in from another browser.&lt;/li&gt;&lt;li&gt;Once you have the account setup and domains verified, you can request a cert with the Certificates Wizard.&lt;/li&gt;&lt;li&gt;Make sure to select &lt;b&gt;SSL/TLS Web Server Certificate&lt;/b&gt;&lt;/li&gt;&lt;li&gt;I like to do everything myself and keep my private key private, so I like to &lt;b&gt;Skip&lt;/b&gt; the private key generation on the site and instead to this:&lt;/li&gt;&lt;li&gt;&lt;tt&gt;openssl genrsa -out host-example-org.key 4096&lt;/tt&gt;&lt;/li&gt;&lt;li&gt;&lt;tt&gt;openssl req -new -key host-example-org.key -out host-example-org.csr&lt;/tt&gt;&lt;br /&gt;This will ask a series of questions:&lt;br /&gt;Country Name: &lt;i&gt;US or whatever the two letter country code should be&lt;/i&gt;&lt;br /&gt;State or Province Name: &lt;i&gt;New York or whatever the local state name is&lt;/i&gt;&lt;br /&gt;Locality Name: &lt;i&gt;Binghamton or whatever the city name is&lt;/i&gt;&lt;br /&gt;Organization Name: &lt;i&gt;example.org or whatever you like. I believe StartSSL overrides this with example.org anyway&lt;/i&gt;&lt;br /&gt;Organization Unit Name: &lt;i&gt;Presonal web server or whatever you like. This may also be overridden by startssl.&lt;/i&gt;&lt;br /&gt;Common Name: &lt;i&gt;host.example.org. The final certificate needs this to be the example domain name of the host that will be using SSL. I believe this too will be overridden&lt;/i&gt;&lt;br /&gt;Email Address: &lt;i&gt;username@example.org. This will definitely be overwritten with the email address associated with example.org in WHOIS&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Skip the challenge password and the optional company name fields.&lt;/li&gt;&lt;li&gt;&lt;b&gt;host-example-org.key&lt;/b&gt; is the private key (keep this safe with &lt;tt&gt;chmod 600&lt;/tt&gt; and &lt;tt&gt;chown root&lt;/tt&gt;). &lt;b&gt;host-example-org.csr&lt;/b&gt; is the certificate request which must be signed by startssl.&lt;/li&gt;&lt;li&gt;Open &lt;b&gt;host-example-org.csr&lt;/b&gt; and copy the text (starting with &lt;b&gt;-----BEGIN CERTIFICATE REQUEST-----&lt;/b&gt; and ending with &lt;b&gt;-----END CERTIFICATE REQUEST-----&lt;/b&gt;) into the large text box and press &lt;b&gt;Continue&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Double check that the request is correct and press &lt;b&gt;Continue&lt;/b&gt;. It should look something like this:&lt;br /&gt;&lt;b&gt;subject=/C=US/ST=New York/L=Binghamton/O=example.org/OU=Personal web server/CN=host.example.org/emailAddress=username@example.org&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Pick the correct top level domain (&lt;b&gt;example.org&lt;/b&gt; in this example) and press &lt;b&gt;Continue&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Entire the correct host name (&lt;b&gt;host&lt;/b&gt; in this example) and press &lt;b&gt;Continue&lt;/b&gt;&lt;/li&gt;&lt;li&gt;Press &lt;b&gt;Continue&lt;/b&gt; one more time&lt;/li&gt;&lt;li&gt;The next page has a text box with the certificate in it. Copy/paste this into a text editor and save it as host-example-org.crt&lt;/li&gt;&lt;li&gt;Now the cert can be used as needed.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I'll cover how to setup a couple services with this certificate later.&lt;/div&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:38864</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/38864.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=38864"/>
    <title>Unix quicky</title>
    <published>2008-08-07T05:59:05Z</published>
    <updated>2009-11-29T16:06:23Z</updated>
    <category term="ubuntu"/>
    <category term="linux"/>
    <content type="html">&lt;a href="http://marcusmalcom.blogspot.com/"&gt;Marcus&lt;/a&gt; had an interesting question today dealing with data migration. He has two databases each with some sort of User object and password stored inside, supposedly ashed by md5. The task was to migrate from one to the other. The problem was that the data in the row looked different:&lt;br /&gt;&lt;b&gt;ceb80856c17c788e3f40eb278c039ea2&lt;/b&gt; (hash1) vs. &lt;b&gt;{MD5}zrgIVsF8eI4/QOsnjAOeog==&lt;/b&gt; (hash2)&lt;br /&gt;&lt;br /&gt;I'll cut here to give folks a chance to think about it before I give the solution we came up with. &lt;a name="cutid1"&gt;&lt;/a&gt;&lt;div class="ljcut" text="Read more..."&gt;&lt;br /&gt;&lt;br /&gt;So my first thought was that the hash1 looked like the every day output from MD5SUM. The trick was to figure out what was on the right hand side. We took a guess that it might be a base64 encoding. A couple shell commands later, and we confirmed that guess:&lt;br /&gt;&lt;pre&gt;
$ echo zrgIVsF8eI4/QOsnjAOeog== | base64 -d | hexdump&lt;br /&gt;&lt;strong&gt;0000000 b8ce 5608 7cc1 8e78 403f 27eb 038c a29e&lt;br /&gt;0000010&lt;/strong&gt;&lt;/pre&gt;On closer inspection, we saw that indeed this was the very same MD5 value viewed under little endian byte swapping as is common in Intel land. So now we had a good idea of what needed to be done. This could have been solved with a short C program or perl/python script, but why write your own code when you can patch together someone else's code to solve the problem?&lt;br /&gt;&lt;br /&gt;Since we needed to go from hash1 to hash2, we needed a way to go from textually encoded hex to raw binary. I hunted around for tools that could do this, but nothing obvious turned up in my PATH, so I searched the web a little and found a nice little trick on &lt;a href="http://www.linuxquestions.org/questions/programming-9/how-can-i-convert-hex-to-binary-in-a-perl-script-653135/"&gt;linux web forum&lt;/a&gt;: &lt;tt&gt;echo -n -e $(tr -d '[:space:]' | sed 's/../\\x&amp;amp;/g')&lt;/tt&gt;. Chaining it up, we found that it generated the same bytes:&lt;br /&gt;&lt;pre&gt;
$ echo ceb80856c17c788e3f40eb278c039ea2 | echo -n -e $(tr -d '[:space:]' | sed 's/../\\x&amp;amp;/g') | hexdump&lt;br /&gt;&lt;strong&gt;0000000 b8ce 5608 7cc1 8e78 403f 27eb 038c a29e&lt;br /&gt;0000010&lt;/strong&gt;&lt;/pre&gt;So the last step was hooking it up with base64 to encode it and we were done:&lt;br /&gt;&lt;pre&gt;
echo ceb80856c17c788e3f40eb278c039ea2 | echo -n -e $(tr -d '[:space:]' | sed 's/../\\x&amp;amp;/g') | base64&lt;br /&gt;&lt;strong&gt;zrgIVsF8eI4/QOsnjAOeog==&lt;/strong&gt;&lt;/pre&gt;Which is what we were trying to get.&lt;br /&gt;&lt;br /&gt;Now, as a question for the reader: how would you go back from base64 to ascii-encoded hex? (feel free to post a public answer).&lt;br /&gt;&amp;nbsp;&lt;/div&gt; &lt;b&gt;Edit (2009-11-29):&lt;/b&gt; Since nobody answered the question above, I'll post the answer we came up with some time later.&lt;br /&gt;&lt;pre&gt;
$ echo zrgIVsF8eI4/QOsnjAOeog== | base64 -d | od -t xC | cut -c 9- | tr -d [:space:]
&lt;b&gt;ceb80856c17c788e3f40eb278c039ea2&lt;/b&gt;&lt;/pre&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:38346</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/38346.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=38346"/>
    <title>Adding Trac to SVN.</title>
    <published>2008-07-19T02:00:10Z</published>
    <updated>2008-07-19T02:00:10Z</updated>
    <lj:music>The Motion Sick - 30 Lives</lj:music>
    <content type="html">So I’m setting trac up now and following the howtoforge instructions (customized to the way I like them). &lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;sudo su - step&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;trac-admin trac initenv&lt;/tt&gt; &lt;it&gt;since /home/step/trac was created before. trac-admin asks a few questions here.&lt;/it&gt;&lt;br /&gt;&lt;tt&gt;chown -R g+w trac&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;editor trac/conf/trac.ini&lt;/tt&gt; &lt;it&gt;I set the url, the authz_file, and the base_url&lt;/it&gt;&lt;br /&gt;&lt;tt&gt;sudoedit /etc/apache2/sites-available/step.example.com&lt;/tt&gt; &lt;it&gt; and added&lt;/it&gt;&lt;br /&gt;&lt;pre&gt;
  &amp;lt;Location /trac&amp;gt;
    SetHandler mod_python
     PythonHandler trac.web.modpython_frontend
      PythonInterpreter main_interpreter
      PythonOption TracEnv /home/step/trac
      PythonOption TracUriRoot /trac
      AuthType Basic
      AuthName “step.example.com”
      # Use the SVN password file.
      AuthUserFile /home/step/svn/conf/passwd
      Require valid-user
  &amp;lt;/Location&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;tt&gt;sudo invoke-rc.d apache2 restart&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;And that &lt;it&gt;should&lt;/it&gt; do it...</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:38077</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/38077.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=38077"/>
    <title>Setting up a development server on Debian (https access to svn/trac)</title>
    <published>2008-07-18T23:41:31Z</published>
    <updated>2008-07-18T23:43:21Z</updated>
    <category term="debian"/>
    <category term="linux"/>
    <lj:music>Fluke - Atom Bomb</lj:music>
    <content type="html">This has been done to death by others, but these are my notes for my recall. I’m in the process of setting up a subversion server with trac for project management. I want them to have a unified userbase and be accessible via https to authorized users on a specific subdomain.&lt;br /&gt;&lt;a name="cutid1"&gt;&lt;/a&gt;&lt;br /&gt;Web resources I’m using:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/8.04/serverguide/C/subversion.html"&gt;Ubuntu server guide for Subversion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://help.ubuntu.com/community/Trac"&gt;Ubuntu community documentation for trac&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://trac.edgewall.org/wiki/TracOnDebian"&gt;Trac on Debian&lt;/li&gt;&lt;li&gt;&lt;a href="http://howtoforge.org/subversion-trac-virtual-hosts-on-ubuntu-server"&gt;Setting Up Subversion And Trac As Virtual Hosts On An Ubuntu Server &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;First thing I setup was the new domain. I won’t go into the detail here of fiddling my bind zone files.&lt;br /&gt;&lt;br /&gt;Next thing was to make sure all the packages I need were installed:&lt;br /&gt;&lt;tt&gt;sudo apt-get install subversion subversion-tools trac libapache2-mod-python libapache2-svn enscript python-docutils&lt;/tt&gt;&lt;br /&gt;And I let the install script enable the modules as they were installed.&lt;br /&gt;&lt;br /&gt;I created a user for the project with a --disabled-login option so that account is not accessible via, e.g., ssh. I gave apache access to the directory and made it hidden to other users. I also created two directories for the svn and trac files to live and followed the instructions from the howtoforge link above.&lt;br /&gt;&lt;tt&gt;sudo adduser --disabled-login step&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;sudo adduser www-data step&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;sudo find /home/step -type d -exec chmod 2770 {} \;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;sudo find /home/step -type f -exec chmod 640 {} \;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;sudo su - step&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;mkdir trac&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;mkdir svn&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;svnadmin create svn&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;rm svn/conf/passwd&lt;tt&gt;&lt;br /&gt;&lt;tt&gt;touch svn/conf/passwd&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;htpasswd svn/conf/passwd username&lt;/tt&gt; &lt;it&gt;for each username&lt;/it&gt;&lt;br /&gt;&lt;tt&gt;chmod -R g+w svn&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;editor svn/conf/authz&lt;tt&gt; &lt;it&gt;Here I added thes usernames that will be used to access the repository and I added a line which will only allow those usernames to access it&lt;/it&gt;&lt;br /&gt;&lt;pre&gt;
[groups]
step = username1,username2,username3
[/]
@step = rw
* =
&lt;/pre&gt;&lt;br /&gt;&lt;tt&gt;logout&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;sudo mkdir /var/log/apache2/step&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/step.pem&lt;/tt&gt; &lt;it&gt;Made sure to follow the prompts and put the correct hostname&lt;/it&gt;&lt;br /&gt;&lt;tt&gt;sudoedit /etc/apache2/sites-available/step.example.com&lt;/tt&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;VirtualHost *:443&amp;gt;
  ServerName step.example.com
  &amp;lt;Location /&amp;gt;
    DAV svn
    AuthType Basic
    AuthName “step.example.com”
    AuthUserFile /home/step/svn/conf/passwd
    AuthzSVNAccessFile /home/step/svn/conf/authz
    SVNPath /home/step/svn 
    Require valid-user
  &amp;lt;/Location&amp;gt;
  CustomLog /var/log/apache2/step/access.log combined
  ErrorLog /var/log/apache2/step/error.log
  SSLEngine on
  SSLCertificateFile /etc/apache2/ssl/step.pem
# Add this once there is a real (non self-signed) certificate.
#  SSLCertificateKeyFile /etc/apache2/ssl/step.key
&amp;lt/VirtualHost&amp;gt;
&amp;lt;VirtualHost *:80&amp;gt;
  ServerName step.example.com
  Redirect / https://step.example.com/
&amp;lt;/virtualhost&amp;gt;
&lt;/pre&gt;&lt;br /&gt;&lt;tt&gt;sudo a2ensite step.example.com&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;sudo invoke-rc.d apache2 restart&lt;tt&gt;&lt;br /&gt;&lt;br /&gt;At this point it should be possible to check out the repository:&lt;br /&gt;&lt;tt&gt;svn checkout https://step.example.com --username=username&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;I’ll post the info on Trac later...&lt;/a&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;&lt;/tt&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:suppressingfire:37636</id>
    <link rel="alternate" type="text/html" href="http://suppressingfire.livejournal.com/37636.html"/>
    <link rel="self" type="text/xml" href="http://suppressingfire.livejournal.com/data/atom/?itemid=37636"/>
    <title>Recovering data from a busted drive (lesson #2)</title>
    <published>2008-07-17T22:37:58Z</published>
    <updated>2008-07-17T22:37:58Z</updated>
    <category term="ubuntu"/>
    <category term="linux"/>
    <lj:music>Alec Empire - Streets of gold</lj:music>
    <content type="html">So I posted recently about recovering data from a busted drive using foremost. I did get quite a bit of data off that drive, but not the most important stuff.&lt;br /&gt;&lt;br /&gt;I recently had my own drive failure, and I found out about some &lt;a name="cutid1"&gt;&lt;/a&gt;more tools.&lt;br /&gt;&lt;br /&gt;There's a program called dd_rescue that's available in the Debian/Ubuntu package &lt;tt&gt;ddrescue&lt;/tt&gt;. This program works just like &lt;tt&gt;dd&lt;/tt&gt; except that it doesn't stop reading when it gets an error from the drive. &lt;br /&gt;&lt;br /&gt;So I used dd_rescue to copy the data from the old drive directly to a new partition on a new drive. This worked up until a point on the drive where errors were too big and LVM gave up on the disk. I noted the point where it failed, rebooted, and used the skip feature to jump past the horribly broken part of the drive and copy the rest of the data. After firing up the reiserfs fsck with the --rebuild-tree and -S options, I had almost all my data back. Since my new drive was bigger, I used resize_reiserfs to fill the filesystem into the partition.&lt;br /&gt;&lt;br /&gt;What I should have done with the busted NTFS drive from before was to copy the data off using dd_rescue into a file and _then_ run foremost on the resulting file. Continued use of the drive probably damaged it further, resulting in more data loss than was strictly necessary.</content>
  </entry>
</feed>
