<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>java rants &#187; Apple</title>
	<atom:link href="http://www.javarants.com/tag/apple/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.javarants.com</link>
	<description>Rants about Java and other internet technologies by Sam Pullara</description>
	<lastBuildDate>Wed, 21 Jul 2010 17:36:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Build your own mail analyzer for Mac Mail.app</title>
		<link>http://www.javarants.com/2008/12/26/build-your-own-mail-analyzer-for-mac-mailapp/</link>
		<comments>http://www.javarants.com/2008/12/26/build-your-own-mail-analyzer-for-mac-mailapp/#comments</comments>
		<pubDate>Sat, 27 Dec 2008 03:46:49 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.javarants.com/?p=943</guid>
		<description><![CDATA[You&#8217;ve probably read about things like Xoopit and Xobni for analyzing both online mail and your outlook mail. As it turns out, Apple has done something great in this regard that I think has been mostly overlooked. Mail.app stores all &#8230; <a href="http://www.javarants.com/2008/12/26/build-your-own-mail-analyzer-for-mac-mailapp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>You&#8217;ve probably read about things like Xoopit and Xobni for analyzing both online mail and your outlook mail.  As it turns out, Apple has done something great in this regard that I think has been mostly overlooked.  Mail.app stores all of the meta-data for you email in a file called <i>~/Library/Mail/Envelope Index</i>.  You might wonder what the format of this file is&#8230; well it is a SQLite3 database.  The contents are pretty easy to see, go to the terminal and type:</p>
<p><code>macpro:~ sam$ sqlite3 ~/Library/Mail/Envelope\ Index<br />
SQLite version 3.6.3<br />
Enter ".help" for instructions<br />
Enter SQL statements terminated with a ";"<br />
sqlite><br />
</code><br />
<span id="more-943"></span><br />
Everything about your mailboxes is stored within this database and the structure of the database is normalized so its very easy to navigate.  The tables of most interest for mail analysis are:</p>
<pre>
sqlite> .tables
<strong>addresses</strong>              <strong>mailboxes</strong>              todo_notes
alarms                 <strong>messages</strong>               todos
associations           properties             todos_deleted_log
<strong>attachments</strong>            <strong>recipients</strong>             todos_server_snapshot
calendars              <strong>subjects</strong>
feeds                  <strong>threads</strong>
</pre>
<p>Fortunately, accessing a SQLite database is quite easy from just about any language that you decide to use. I&#8217;m just going to do all the queries in straight sqlite3 rather than a language, but they could be embedded in your application.  First things first, copy your <em>Envelope Index</em> to another directory:</p>
<pre>macpro:tmp sam$ cp ~/Library/Mail/Envelope\ Index .</pre>
<p>Now you can use that database without worrying about messing up the locking or corrupting data while Mail.app is using it.  Since we might as well do an example that  is interesting rather than merely educational, how about we answer the question: &#8220;Who are my coworkers with whom that I collaborated?&#8221;.  This is going to be a multi-query process to extract the information &#8212; there may be more efficient ways to do it &#8212; but think of this as instructive rather than prescriptive.  First I need to limit the query to only those mailboxes which contain work email:</p>
<pre>
<span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">DROP</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">TABLE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkermailboxes;
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">CREATE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">TABLE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkermailboxes(id);
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">CREATE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> INDEX coworkermailboxes_index </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">ON</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkermailboxes(id);
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INSERT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INTO</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkermailboxes </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> rowid </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> mailboxes
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">WHERE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
url </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">like</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,128,0); font-weight: bold; font-style: normal; ">&apos;imap://samp@snv-webmail.corp.yahoo.com/%&apos;</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">OR</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
url </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">like</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,128,0); font-weight: bold; font-style: normal; ">&apos;imap://sam@mail.sampullara.com/Yahoo%20Inc%20Archive&apos;</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">;
</span>
</pre>
<p>That gives us a table with several mailboxes that I have in Mail.app including Sent Messages.  I would peruse the list of mailboxes to ensure that you are grabbing all the correct information. For me I had to also search my archives.  Now I am going to take a series of steps to get to the final out put by iteratively processing successive tables of information.  The first table, is a list of those people that you have both sent and received an email with directly (they were the sender and you were a receiver or you were the sender and they were the receiver):</p>
<pre>
<span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">DROP</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">TABLE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers;
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">CREATE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">TABLE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers(id);
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">CREATE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> INDEX coworkers_index </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">ON</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers(id);
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INSERT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INTO</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> a.rowid </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> addresses a, messages m, recipients r
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">WHERE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
m.sender = a.rowid </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
m.mailbox </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">IN</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> (</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkermailboxes) </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
r.message_id = m.rowid </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> r.address_id = </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">4</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INTERSECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> a.rowid </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> addresses a, messages m, recipients r
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">WHERE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
m.sender = </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">4</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
m.mailbox </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">IN</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> (</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkermailboxes) </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
r.message_id = m.rowid </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> r.address_id = a.rowid
;
</span>
</pre>
<p>Note I have directly inserted my addresses rowid into this query for the sender on the one hand and the receiver on the other.  The next step will be to count the actual number of emails you have received from each of those on the list:</p>
<pre>
<span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">DROP</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">TABLE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers2;
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">CREATE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">TABLE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers2(id, recv);
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">CREATE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> INDEX coworkers2_index </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">ON</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers2(id);
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> &quot;Get the received mail&quot;;
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INSERT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INTO</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers2 </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> w.id, </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">COUNT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">(*) </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> messages m, recipients r, coworkers w
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">WHERE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> m.sender = </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">4</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
m.mailbox </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">IN</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> (</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkermailboxes) </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
r.message_id = m.rowid </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> r.address_id = w.id
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">GROUP</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">BY</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> w.id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">ORDER</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">BY</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">COUNT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">(*)
;</span>
</pre>
<p>Finally, we count the number of sent emails and also derive a ratio of sent/received so we can judge how collaborative the exchanges have been:</p>
<pre>
<span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">DROP</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">TABLE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers3;
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">CREATE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">TABLE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers3(id, sent </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">float</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">, recv </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">float</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">, ratio </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">float</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">);
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">CREATE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> INDEX coworkers3_index </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">ON</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers3(id);
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> &quot;Get the sent mail&quot;;
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INSERT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">INTO</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkers3 </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> w.id, </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">COUNT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">(*), w.recv, </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">COUNT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">(*)*</span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">1.0</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">/w.recv </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> messages m, recipients r, coworkers2 w
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">WHERE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
m.sender = w.id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
m.mailbox </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">IN</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> (</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> coworkermailboxes) </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
r.message_id = m.rowid </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> r.address_id = </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">4</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">GROUP</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">BY</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> w.id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">ORDER</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">BY</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">COUNT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">(*)
;</span>
</pre>
<p>You will now have a table named <em>coworkers3</em> that can be mined for information about your level of correspondence with them. For example, here is way to find relatively equal sends and receives:</p>
<pre>
<span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> a.comment </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> addresses a, coworkers3 w
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">WHERE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
a.rowid = w.id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
ratio &gt;= </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">.5</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
ratio &lt;=</span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">2</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
sent &gt; </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">10</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">ORDER</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">BY</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> sent
LIMIT </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">20</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">;</span>
</pre>
<p>When I do this I see the people that either I use to find information or that use me to find information.  Every interaction is usually a request and then a response.  On the other hand, this query will find those that typically made announcements out to the groups that I also worked with:</p>
<pre>
<span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">SELECT</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> a.comment </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">FROM</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> addresses a, coworkers3 w
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">WHERE</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
a.rowid = w.id </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
ratio &lt;= </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">1</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">AND</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
sent &gt; </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">10</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">
</span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">ORDER</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> </span><span style="color: rgb(0,0,128); font-weight: bold; font-style: normal; ">BY</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; "> ratio
LIMIT </span><span style="color: rgb(0,0,255); font-weight: normal; font-style: normal; ">20</span><span style="color: rgb(0,0,0); font-weight: normal; font-style: normal; ">;</span>
</pre>
<p>And so on.  Adding more filters on top of this you could easily derive your team at work for a particular time period and other insights.  With the wealth of information contained in this meta-data store you could figure out all kinds of things:</p>
<ul>
<li>Who sent you an email that you didn&#8217;t reply to yet?</li>
<li>Who do you respond to the most quickly?</li>
<li>Who responds to you most quickly?</li>
<li>What are you and your coworkers approximate working hours?</li>
<li>What groups of CCs could be made into aliases?</li>
</ul>
<p>There really is no limit to how far the analysis could go.  Ideally, it would be possible to setup a dashboard in Mail.app that let you cut and slice the data in a far more precise way than smart folders currently allow today.  Maybe they should come out with super-sql-smart folders!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2008/12/26/build-your-own-mail-analyzer-for-mac-mailapp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Time Machine vs. ZFS + rsync</title>
		<link>http://www.javarants.com/2008/10/30/time-machine-vs-zfs-rsync/</link>
		<comments>http://www.javarants.com/2008/10/30/time-machine-vs-zfs-rsync/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 03:17:18 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[parallels]]></category>
		<category><![CDATA[rsync]]></category>
		<category><![CDATA[time machine]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[zfs]]></category>

		<guid isPermaLink="false">http://www.javarants.com/?p=916</guid>
		<description><![CDATA[Update: I actually got the fslogger thing at the end of this entry working so I can do incremental backups. Not really a product yet but it isn&#8217;t hard to do. Here is the super rough version of it. I &#8230; <a href="http://www.javarants.com/2008/10/30/time-machine-vs-zfs-rsync/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Update</strong>: I actually got the fslogger thing at the end of this entry working so I can do incremental backups.  Not really a product yet but it isn&#8217;t hard to do.  <a href="http://buildandtest.com/files/rlogsync.tar.gz">Here is the super rough version of it.</a></p>
<p>I can&#8217;t stand inefficiency.  Time Machine is fundamentally a very inefficient mechanism for backing up large files that change.  So bad actually that most things like Parallels and VMWare disable backups of your disk images.  Here is the basic algorithm:<br />
<span id="more-916"></span><br />
1) Get the list of files that have changed since the last backup<br />
2) Create new directory in backup store<br />
3) Copy any file that has changed since the last backup<br />
4) Create hard links to any file or even whole directory in the new backup to the last backup for any file that has not changed</p>
<p>Step 1 is pretty efficient for Time Machine as they keep hooks into the filesystem to track those changes as they occur.  Step 2 is obviously easy.  Step 3 is a doosy.  If you change 1 byte in a VMWare image it will copy the several gigs over to the backup store.  Not a great result from such small change and that would quickly consume your disk flushing valuable older changes out of the system.  Step 4 is also very efficient because hard links are trivial to create and use virtually no space, though they did have to make special changes to HFS+ so that you could hard link directories to make Time Machine more efficient.</p>
<p>The obvious big problem here is that in the case that a file changes at all you need to copy the whole thing to you backup device.  Not that viable over the internet or even WiFi for really big files that are updated often like VM images.  You might have wondered why Apple is considering integrating ZFS directly into Mac OS X, now you know why.  ZFS lets you do something very special: create a snapshot of a whole filesystem.  Essentially a copy of that filesystem at a particular point in time and they do this without copying whole files when they change but instead at the block level.  This amazing capability is critical in this more efficient way to backup your system with multi-level snapshots.</p>
<p>Enter <a href="http://en.wikipedia.org/wiki/Rsync">rsync</a>.  Rsync has been around for a long time.  It is used by system adminstrators everywhere to efficiently update files in one location with files from another location, even over the internet.  It does this by comparing them at the block level and only sending diffs when needed to update files on the other end.  Using the right command line options you can essentially make one filesystem look like a carbon copy of another filesystem.  Using this in combination you can make a backup solution that is much better than most out there:</p>
<p>1) Rsync your current filesystem to a ZFS filesystem &#8212; remote or attached storage<br />
2) Take a snapshot of the resulting filesystem to forever capture its state</p>
<p>Those are the two steps.  Nothing more.  Here is the script that I use to backup my Macbook Air to my server at home:</p>
<pre>
#!/bin/sh
cd /Users
time rsync -av --delete sam 192.168.1.90:/Volumes/zdisk/macbookair
ssh 192.168.1.90 sudo zfs snapshot zdisk/macbookair@`date "+%s"`
</pre>
<p>This results in a set of filesytems that looks like this:</p>
<pre>
zdisk/macbookair             14.9G   898G  14.6G  /Volumes/zdisk/macbookair
zdisk/macbookair@1225350709   125M      -  14.6G  -
zdisk/macbookair@1225351248   117M      -  14.6G  -
zdisk/macbookair@1225418584  21.7M      -  14.6G  -
</pre>
<p>This obviously isn&#8217;t as awesome as using Time Machine to recover my files because I don&#8217;t have a great UI, I have to run a script and generally have to know more about the system than a Time Machine user.  However&#8230; I can update a VM without sending gigs of data over the internet to back it up or deal with not having a backup at all.</p>
<p>The only downside is that an empty backup still takes about 8 minutes to go through all my files. Next step would be to integrate into the fslogger into the solution and only look at those files that changed for sure.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2008/10/30/time-machine-vs-zfs-rsync/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Macworld 2008 followup</title>
		<link>http://www.javarants.com/2008/01/15/macworld-2008-followup/</link>
		<comments>http://www.javarants.com/2008/01/15/macworld-2008-followup/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 18:38:09 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.javarants.com/2008/01/15/macworld-2008-followup/</guid>
		<description><![CDATA[Let&#8217;s see: iPhone: failed to mention 1.1.4 update but the SDK is coming in Feb. The rest nope.  C AppleTV/iTunes: Movie Rentals yes, missed buy on-iPhone support. AppleTV 2.0 &#8212; no computer required. Flickr + DVD + HD + Dolby &#8230; <a href="http://www.javarants.com/2008/01/15/macworld-2008-followup/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s see:</p>
<p>iPhone: failed to mention 1.1.4 update but the SDK is coming in Feb. The rest nope.  <strong>C</strong></p>
<p>AppleTV/iTunes: Movie Rentals yes, missed buy on-iPhone support. AppleTV 2.0 &#8212; no computer required. Flickr + DVD + HD + Dolby 5.1, software upgrade! price drop! <img src='http://www.javarants.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <strong>A</strong></p>
<p>MacBook Air: &#8220;The World&#8217;s Thinnest Notebook&#8221; 0.16&#8243; to 0.76&#8243;, 13.3&#8243; screen, SSD option, 1.6/1.8 Core 2 Duo,  5 hours battery life, <strong>B</strong></p>
<p>Blu-ray: Nothing. <strong>F</strong></p>
<p>Monitors: Nothing. <strong>F</strong></p>
<p>Other MacBooks: Nothing. <strong>F</strong></p>
<p>Obviously the crazy prediction also didn&#8217;t make it, not even a wireless option for the Macbook Air&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2008/01/15/macworld-2008-followup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Macworld 2008 predictions</title>
		<link>http://www.javarants.com/2008/01/13/macworld-2008-predictions/</link>
		<comments>http://www.javarants.com/2008/01/13/macworld-2008-predictions/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 17:47:39 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[appletv]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[isight]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[macworld]]></category>
		<category><![CDATA[monitors]]></category>

		<guid isPermaLink="false">http://www.javarants.com/2008/01/11/macworld-2008-predictions/</guid>
		<description><![CDATA[UPDATE 1/13/08: This looks like confirmation of a new ultralight portable with some sort of wireless connectivity. Might as well put up my predictions for what will be announced at Macworld this year. I think it will be a good &#8230; <a href="http://www.javarants.com/2008/01/13/macworld-2008-predictions/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>UPDATE 1/13/08: This looks like <a href="http://forums.macrumors.com/showthread.php?t=413381">confirmation</a> of a new ultralight portable with some sort of wireless connectivity.</p>
<p>Might as well put up my predictions for what will be announced at Macworld this year.  I think it will be a good one.</p>
<ul>
<li>iMac, Mac Mini, Macbook and Macbook Pro lines upgraded to Penryn processors
<ul>
<li>Same prices, better specs</li>
</ul>
</li>
<li>Ultra portable MacBook Pro ($2-3K)
<ul>
<li>64G SSD drive standard (32G and 128G available), no DVD drive</li>
<li>12&#8243; OLED screen</li>
<li>8-12 hour battery life</li>
</ul>
</li>
<li> iPhone
<ul>
<li>SDK: Still WebKit-based but with native Javascript APIs for the phone</li>
</ul>
<ul>
<li>Better connectivity</li>
<li>Video recording</li>
</ul>
</li>
<li>Monitors
<ul>
<li>Same panel as the new 30&#8243; dell</li>
<li>Built-in iSights</li>
<li>Same prices</li>
</ul>
</li>
<li>Blu-ray
<ul>
<li>Added as an option for MacPro and MacbookPro</li>
<li>Support for playing Blu-ray movies added to 10.5.2</li>
</ul>
</li>
<li>AppleTV / iTunes
<ul>
<li> Movie rentals</li>
<li>Software upgrade for current devices</li>
<li>Possibly a new version with a blu-ray player</li>
</ul>
</li>
</ul>
<p>All these I consider relatively expected and if they don&#8217;t show up, some people will be disappointed.  Now for the truly outrageous prediction:</p>
<p><strong>APPLE WILL WIMAX ENABLE THEIR LAPTOPS AND IPHONE BY PLACING NODES IN THEIR APPLE STORES AND STARBUCKS. </strong></p>
<p>That would be the most awesome thing ever and hopefully that is what is implied with &#8220;Something is in the air&#8230;&#8221;. The other possibility is just 3G enabled systems or both for those times when you are out of range <img src='http://www.javarants.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2008/01/13/macworld-2008-predictions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parallels vs VMWare vs Bootcamp vs Codeweavers Crossover Office revisited</title>
		<link>http://www.javarants.com/2007/10/07/parallels-vs-vmware-vs-bootcamp-vs-codeweavers-crossover-office-revisited/</link>
		<comments>http://www.javarants.com/2007/10/07/parallels-vs-vmware-vs-bootcamp-vs-codeweavers-crossover-office-revisited/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 01:10:04 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[bootcamp]]></category>
		<category><![CDATA[codeweavers]]></category>
		<category><![CDATA[crossover]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[office]]></category>
		<category><![CDATA[parallels]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.javarants.com/2007/10/07/parallels-vs-vmware-vs-bootcamp-vs-codeweavers-crossover-office-revisited/</guid>
		<description><![CDATA[I have reviewed these products in the past but I think they have rev&#8217;d enough times to make it worth my while to revisit them and see how far they have come. As a reminder, lets again review a couple &#8230; <a href="http://www.javarants.com/2007/10/07/parallels-vs-vmware-vs-bootcamp-vs-codeweavers-crossover-office-revisited/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have <a href="http://www.javarants.com/C1242049796/E20060904143855/" title="  Crossover (WINE) vs. Parallels vs. Bootcamp">reviewed these products</a> in the past but I think they have rev&#8217;d enough times to make it worth my while to revisit them and see how far they have come.  As a reminder, lets again review a couple of use cases that you might have:</p>
<ol>
<li>Native Microsoft Office (any version) support</li>
<li>Latest Microsoft Office</li>
<li>Microsoft Vista</li>
<li>Games</li>
<li>IE7</li>
</ol>
<p>Again with the ideal requirements:</p>
<ol>
<li>Runs applications at full speed</li>
<li>Executes them in such a way as they appear to be native applications</li>
<li>Does not require a Window license</li>
</ol>
<p>The simplest answer is to use Crossover Office to run applications that work with it, as when it works it satisfies the ideal requirements and then use Bootcamp when you absolutely have to have a true Windows machine.  Crossover Office is now robust enough to run Outlook 2003 pretty well along with some older games like Counter Strike: Source though it doesn&#8217;t have support for the very latest software.  There are cases that are in-between, for example you might not need full speed but you do need full compatibility, then either Parallels or VMWare Fusion ought to work for you, like when you want to run IE7 to view a website.  If you are doing anything that requires high non-graphics speed and also high-compatibility like developing software, either VMWare or Bootcamp would be your best bet.  VMWare allows you to use more than 1 processor and it out benchmarks Parallels.  On the other hand, Parallels is a nicer application and its Coherence-mode (integrates Windows applications into the Mac desktop experience) is better than VMWare&#8217;s Unity mode.  Neither VMWare nor Parallels run highly graphical twitch games to my satisfaction.  Here is a little table to help you make your decision:</p>
<ul>
<li><a href="http://www.codeweavers.com/products/cxmac/">Crossover Office 6.2</a>
<ul>
<li>When it works its the best option</li>
<li>Fast, well integrated, runs some games</li>
<li>Only option that doesn&#8217;t require a Windows license</li>
<li>According to <a href="http://www.codeweavers.com">CodeWeavers</a>, will work even better under Leopard</li>
</ul>
</li>
<li><a href="http://www.apple.com/macosx/bootcamp/">Bootcamp</a>
<ul>
<li>It is just Windows</li>
<li>Mac&#8217;s are really good Windows machines</li>
</ul>
</li>
<li><a href="http://www.parallels.com/en/products/desktop/">Parallels Desktop 3.o</a> (build 5160)
<ul>
<li>Easier to use than VMWare Fusion</li>
<li>Coherence is very mature</li>
<li>Does not really run games well</li>
</ul>
</li>
<li><a href="http://vmware.com/products/fusion/">VMWare Fusion 1.0</a> (build 51348)
<ul>
<li>Faster than Parallels</li>
<li>Unity is OK</li>
<li>Lot&#8217;s of compatible VMWare appliances</li>
<li>Not much luck running games on it</li>
</ul>
</li>
</ul>
<p>Have any questions about the options? Since I have a license to all of them and use them all for various purposes I would be happy to answer any specific questions about the products.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2007/10/07/parallels-vs-vmware-vs-bootcamp-vs-codeweavers-crossover-office-revisited/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Crossover (WINE) vs. Parallels vs. Bootcamp</title>
		<link>http://www.javarants.com/2006/09/04/crossover-wine-vs-parallels-vs-bootcamp/</link>
		<comments>http://www.javarants.com/2006/09/04/crossover-wine-vs-parallels-vs-bootcamp/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 14:38:55 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.javarants.com/?p=973</guid>
		<description><![CDATA[Crossover (WINE) vs. Parallels vs. Bootcamp  <a href="http://www.javarants.com/2006/09/04/crossover-wine-vs-parallels-vs-bootcamp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div><font face="Helvetica">Another entrant has joined the race to capture the dollars of those who wish to run Windows software on their Intel Macs.  <a href="http://www.codeweavers.com/">Codeweavers</a> has now released a beta of <a href="http://www.codeweavers.com/products/cxmac/">Crossover Mac</a> which is a repackaging of <a href="http://www.winehq.org/">WINE</a> with additional compatibility modifications and more user friendly tools.</font></div>
<p> 
<div><font face="Helvetica">Installation of <a href="http://www.codeweavers.com/products/cxmac/">Crossover Mac</a> couldn&#8217;t be simpler. Just download the DMG, mount it, and drag the Crossover application to your Applications directory.  If you did not install X11 to your computer you will have to install a library (quartz-wm) from your Mac OS X install disk, it will guide you through the steps.  After you have it installed, what can you do with it?  First lets compare it with the other options:</font></p>
<p><font face="Helvetica-Bold"><b><a href="http://www.apple.com/macosx/bootcamp/">Bootcamp</a></b></font><font face="Helvetica">: The real deal.  A true Windows install with full access to all the hardware and software though only Windows XP SP2 is currently supported.</font><br /><font face="Helvetica-Bold"><b><a href="http://www.parallels.com/">Parallels</a></b></font><font face="Helvetica">: Virtual machine. A true Windows install but with only partial access to the hardware leading to poor 3D performance, slightly reduced CPU performance, and much lower disk performance. Nearly any x86 OS.</font><br /><font face="Helvetica-Bold"><b><a href="http://www.codeweavers.com/products/cxmac/">Crossover Mac</a></b></font><font face="Helvetica">: Runs Windows software as native Mac OS X apps with emulation libraries in place of Microsoft libraries.  Can pretend to be Win98, Win2000, or WinXP.  Can run some 3D games.</font></p>
<p><font face="Helvetica">First lets imagine the perfect piece of software and see how these line up:</font></p>
<p><font face="Helvetica">1) Runs nearly all Windows programs at full speed</font><br /><font face="Helvetica">2) Executes them as native Mac OS X applications without a container</font><br /><font face="Helvetica">3) Does not require a Windows license</font></p>
<p><font face="Helvetica">Bootcamp performs very well at 1) but fails utterly on points 2 and 3.  A reboot is currently required to get into Bootcamp so you can&#8217;t run Mac and Windows applications at the same time.  A Windows license for XPSP2 is also required.  Parallels runs nearly all Windows programs that do not require 3D graphics with a reasonable performance hit.  They do not however look like Mac OS X programs and all run inside a window that contains the entire Windows instance, but at least you can run Windows applications at the same time as Mac OS X applications.  Parallels, like Bootcamp, does require a Windows license though it could be an old cheap one instead of an expensive XP SP2 license.  Finally Crossover runs very few Windows programs at near full speed for CPU operations, though some 2D graphics operations in PowerPoint appear to be much slower than their Windows equivalents.  Those applications though do run right along side your Mac OS X applications and use far less memory than a Parallels install but still don&#8217;t look quite native due to the reliance on Crossover&#8217;s X11 server.  For instance, each application does not have a corresponding Dock icon.  The one thing that gives Crossover a price edge though is that </font><font face="Helvetica-Bold"><b>no</b></font><font face="Helvetica"> Windows license at all is required.</font></p>
<p><font face="Helvetica">Take all my following observations about Crossover as a review of their beta and not a final product.  The Linux version of their product apparently has far fewer compatibility problems and it should get better and better as the product becomes more baked.  First up is straight from the name, Office 2003.  I&#8217;ve installed it in both the Win2000 and WinXP &#8216;bottles&#8217;.  A bottle is like a fake operating system environment that looks like its namesake to the installed applications.  I highly suggest that you first install IE 6 to the WinXP and Win2000 bottles since many applications appear to depend on them and may not say so.  After that is done, insert your Office 2003 install disk and Crossover should prompt you to install it automatically.  I chose not to install Access (it doesn&#8217;t support it), Infopath, or some other random application and just installed Word, Excel, PowerPoint, and Outlook.  Once installed they will then appear in the Crossover Programs menu and can be launched from there or from the shortcuts on disk, or even from the native binaries that you could find if you look around in the place where they are installed under ~/Library/Application Support/Crossover.  The aliases are placed in ~/Applications.</font></p>
<p><font face="Helvetica">Excel: Looked and performed just like expected for me.</font><br /><font face="Helvetica">PowerPoint: Fonts a little off. Very fast for everything but graphics.</font><br /><font face="Helvetica">Word: I don&#8217;t use Word but it opened documents well enough.</font><br /><font face="Helvetica">Outlook: Connectivity not working yet for IMAP. Going to try Exchange when I get the chance.</font></p>
<p><font face="Helvetica">I also tried things like Steam (the game downloading and execution software for Half-Life et al.) and it worked well for most things.  When I downloaded and launched CounterStrike: Source I wouldn&#8217;t say it failed completely but it was futile to play it.  Firefox worked perfectly fine out of the box. IE had issues and was basically unusable for me.  In the end, I can only recommend the beta as a test bed for your Windows applications that you want to use it with and to send feedback to Codeweavers.  What they have right now is a good technology demonstration but I don&#8217;t think I could use it for real work yet, at least not in PowerPoint or Outlook, the two applications I was most interested in running until Microsoft ships Universal binaries of their Mac Office suite.  For only $40 you can pre-order it and hedge that its going to do what you need it to do after it launches, if you compare that to Bootcamp or Parallels thats cheaper because of the lack of Windows license.</font></div>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2006/09/04/crossover-wine-vs-parallels-vs-bootcamp/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Apple iBook/MacBook speculation</title>
		<link>http://www.javarants.com/2006/05/08/apple-ibook-macbook-speculation/</link>
		<comments>http://www.javarants.com/2006/05/08/apple-ibook-macbook-speculation/#comments</comments>
		<pubDate>Mon, 08 May 2006 12:50:44 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.javarants.com/?p=979</guid>
		<description><![CDATA[Apple iBook/MacBook speculation  <a href="http://www.javarants.com/2006/05/08/apple-ibook-macbook-speculation/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div><font face="Helvetica">The rumor mill is in high gear on the announcement tomorrow.  Just for fun I think I&#8217;ll mix them all together and see what I get.</font></div>
<p> 
<div><font face="Helvetica" color="Blue">Update: Looks like they split the difference.  They dumped the iBook name and shipped them in black and white but gave them all Core Duos at 1.83ghz and higher.  Thats a really fast low end.  I would still like to see an ultra-portable MacBook that would compete with some of the other 3-4lb notebooks.</font></p>
<p><font face="Helvetica">Here are the rumors:</font></p>
<p><font face="Helvetica">1. The iBook is now MacBook and is in a 13.3&#8243; widescreen form factor</font><br /><font face="Helvetica">2. The MacBook will ship in white and black and will cost slightly more than the iBook</font><br /><font face="Helvetica">3. Apple announced an iBook event to announce the most affordable iBook ever</font></p>
<p><font face="Helvetica">So if we combine these together we get my WAG:</font></p>
<p><font face="Helvetica">Tomorrow Apple will announce the 13.3&#8243; MacBook in aluminum, the little brother of the 15&#8243; and 17&#8243; MacBook Pros and will also announce the new Intel iBook line that come in white and black, also with 13.3&#8243; widescreens.  The MacBook will cost slightly more than the current iBook while the new iBooks will cost slightly less than the current iBook.  As for specs, the MacBook will start at a 1.66 ghz Core Duo, while the iBooks will come with Core Solo processors.</font></div>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2006/05/08/apple-ibook-macbook-speculation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZFS coming to Mac OS X?</title>
		<link>http://www.javarants.com/2006/04/29/zfs-coming-to-mac-os-x/</link>
		<comments>http://www.javarants.com/2006/04/29/zfs-coming-to-mac-os-x/#comments</comments>
		<pubDate>Sat, 29 Apr 2006 17:48:18 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.javarants.com/?p=981</guid>
		<description><![CDATA[ZFS coming to Mac OS X?  <a href="http://www.javarants.com/2006/04/29/zfs-coming-to-mac-os-x/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div><font face="Helvetica">ZFS, Sun&#8217;s ultimate single machine file system, may be coming to Mac OS X sooner rather than later.  At least that what a <a href="http://mail.opensolaris.org/pipermail/zfs-discuss/2006-April/002119.html">message on the ZFS mailing</a> list would have you believe.</font></div>
<p> 
<div><font face="Helvetica"><a href="http://www.javarants.com/C1460559707/E20051122201141/index.html">When I first looked at ZFS</a>, I found it to be the best filesystem I&#8217;ve ever used.  In fact I believe that a commercial company could make a great deal of money porting it to Linux and supporting it.  Having it available on my Mac systems would be equally awesome but probably not a big money maker.  Apple should definitely look at offering it as an option, at least on Mac OS X Server. It has many of the important features of HFS+ including attributes and adds to that snapshots, self-healing, and better than RAID reliability.  Hopefully someone is looking at making the whole thing clusterable as well without having to resort to NFS.</font></div>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2006/04/29/zfs-coming-to-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use PPC VPN &amp; PPC Flip4Mac on your Intel MacBook Pro or iMac</title>
		<link>http://www.javarants.com/2006/04/27/use-ppc-vpn-ppc-flip4mac-on-your-intel-macbook-pro-or-imac/</link>
		<comments>http://www.javarants.com/2006/04/27/use-ppc-vpn-ppc-flip4mac-on-your-intel-macbook-pro-or-imac/#comments</comments>
		<pubDate>Thu, 27 Apr 2006 21:56:57 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.javarants.com/?p=982</guid>
		<description><![CDATA[Use PPC VPN &#038; PPC Flip4Mac on your Intel MacBook Pro or iMac  <a href="http://www.javarants.com/2006/04/27/use-ppc-vpn-ppc-flip4mac-on-your-intel-macbook-pro-or-imac/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div><font face="Helvetica">One of the things missing from the MacBook Pro was the ability to play WMV3 files in Safari and connect to my companies VPN through their browser plugin.</font></div>
<p> 
<div><font face="Helvetica">Today I was trying to login to the corporate VPN with my MacBook but couldn&#8217;t because although it would install the needed plugin (from F5) it wouldn&#8217;t work because the plugin was PPC.  When running a Universal application as Intel you can&#8217;t load dynamic libraries that are PPC and vice versa.  I was able to get the VPN client working by doing this:</font></p>
<p><font face="Helvetica">1. Use the Finder to go to /Applications</font><br /><font face="Helvetica">2. Click on Safari and Duplicate it (Apple-D)</font><br /><font face="Helvetica">3. Rename the copy to SafariPPC</font><br /><font face="Helvetica">4. Get Info for SafariPPC and choose Open using Rosetta</font></p>
<p><font face="Helvetica">Now whenever you want to use PPC plugins just launch the SafariPPC application instead of the normal Safari application.  So you would think now all you have to do is install flip4mac and you are done.. except that Flip4Mac won&#8217;t install using the regular way on an Intel machine because it checks to see what kind of architecture you are running on and refuses.  But, you can still install the components you need:</font></p>
<p><font face="Helvetica">1. Use the Finder to select the Flip4Mac WMV.mpkg installer.</font><br /><font face="Helvetica">2. Right-click (control-click) and choose &#8220;Show package contents&#8221;</font><br /><font face="Helvetica">3. Navigate into Contents/Resources</font><br /><font face="Helvetica">4. Execute Flip4Mac Web Plugins.pkg to install the components</font><br /><font face="Helvetica">5. Start (or restart) SafariPPC</font></p>
<p><font face="Helvetica">Now you can watch WMV movies directly in your browser on your MacBook Pro or Intel iMac!</font></div>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2006/04/27/use-ppc-vpn-ppc-flip4mac-on-your-intel-macbook-pro-or-imac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Apple Intel iMac 17&#8243; with benchmarks</title>
		<link>http://www.javarants.com/2006/01/27/apple-intel-imac-17-with-benchmarks/</link>
		<comments>http://www.javarants.com/2006/01/27/apple-intel-imac-17-with-benchmarks/#comments</comments>
		<pubDate>Fri, 27 Jan 2006 12:57:20 +0000</pubDate>
		<dc:creator>Sam Pullara</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.javarants.com/?p=985</guid>
		<description><![CDATA[Apple Intel iMac 17" with benchmarks  <a href="http://www.javarants.com/2006/01/27/apple-intel-imac-17-with-benchmarks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div><font face="Helvetica">I received my 17&#8243; iMac today in exchange for my Developers Transition Kit.  This was perhaps the coolest deal I&#8217;ve seen for developers.  I signed up with $1000 thinking I was leasing a $1500 machine for 1.5 years back in June.  Instead it turns out I was buying a $1300 machine 7 months early.</font></div>
<p> 
<div><font face="Helvetica" color="Green">Updated: Added Ruby on Rails comparison</font></p>
<p><font face="Helvetica">First impressions:</font></p>
<p><font face="Helvetica">1) Setup was completely trivial.</font><br /><font face="Helvetica">2) Seems very snappy.  About the same as my dual G5 for most operations.</font><br /><font face="Helvetica">3) FrontRow is pretty cool.   I can&#8217;t wait for them to update it to actually record things.</font><br /><font face="Helvetica">4) The iSight that is built in looks much better than my 2 yr old real iSight</font><br /><font face="Helvetica">5) Dead quiet and cool to the touch even after hours of stress.</font></p>
<p><font face="Helvetica">I did experience one odd problem.  The first time I enabled Windows Sharing nmbd maxed out one of the CPUs.  Not sure why. Haven&#8217;t been able to reproduce it yet.  After getting that fixed I did a couple of benchmarks:</font></p>
<p><font face="Helvetica">G5 = 2.5 ghz dual processor G5, 4G RAM</font><br /><font face="Helvetica">iMac = 1.83 ghz Intel Core Duo, 512M RAM</font></p>
<p><font face="Helvetica">Encode a 34s MPEG-4 clip using Encode for iPod:</font><br /><font face="Helvetica-Bold"><b>G5:                42s</b></font><br /><font face="Helvetica">iMac:             57s (84s with a single CPU enabled)</font></p>
<p><font face="Helvetica">OXFMark (a serverside Java benchmark, JDK 1.4.2):</font><br /><font face="Helvetica">G5:    1743</font><br /><font face="Helvetica-Bold"><b>iMac:     2078</b></font></p>
<p><font face="Helvetica">BenchJS (http://www.24fun.com/downloadcenter/benchjs/benchjs.html):</font><br /><font face="Helvetica">G5: 7.8s</font><br /><font face="Helvetica-Bold"><b>iMac:      3.73s</b></font></p>
<p><font face="Helvetica">Apply iMovie HD Aged Film effect to 36s clip:</font><br /><font face="Helvetica-Bold"><b>G5:         37s</b></font><br /><font face="Helvetica">iMac:      47s</font></p>
<p><font face="Helvetica">Build Gauntlet&#8217;s Native stack (Apache2, Subversion, PosgreSQL, etc, single-threaded GCC builds):</font><br /><font face="Helvetica">G5:         27:56</font><br /><font face="Helvetica-Bold"><b>iMac:      22:44</b></font></p>
<p><font face="Helvetica">Build AdiumX @ 15090 for the appropriate architecture (multi-threaded Xcode build):</font><br /><font face="Helvetica">G5:          5:35</font><br /><font face="Helvetica-Bold"><b>iMac:       3:26</b></font></p>
<p><font face="Helvetica">Handbrake encode first 5% of Napoleon Dynamite to H.264:</font><br /><font face="Helvetica">G5:          15.08 fps</font><br /><font face="Helvetica-Bold"><b>iMac:       22.04 fps</b></font></p>
<p><font face="Helvetica">Build and test a Java / PostgreSQL application (JDK 1.5), best of 5 (varied wildly, though the imac always won):</font><br /><font face="Helvetica">G5:          48s</font><br /><font face="Helvetica-Bold"><b>iMac:       38s</b></font></p>
<p><font face="Helvetica">IntelliJ 5.0.2 Default Analysis (JDK 1.5, -Xms128m/-Xmx128m):</font><br /><font face="Helvetica">G5:           83s</font><br /><font face="Helvetica-Bold"><b>iMac:        55s</b></font></p>
<p><font face="Helvetica" color="Green">Run Unit and Functional Tests for Ruby on Rails Project (MySQL 4.1, Ruby 1.8.4, Rails 1.0):</font><br /><font face="Helvetica" color="Green">G5:                23.2s</font><br /><font face="Helvetica-Bold" color="Green"><b>iMac:             16.3s</b></font></p>
<table border="1">
<thead>
<tr>
<th>Computer</th>
<th>Transcode</th>
<th>Server Java</th>
<th>Safari</th>
<th>iMovie Effect</th>
<th>GCC compile</th>
<th>Xcode compile</th>
<th>DVD Rip</th>
<th>Build Test Java</th>
<th>Develop Java</th>
<th>Develop Ruby</th>
</tr>
</thead>
<tbody>
<tr>
<td>G5</td>
<td>42s</td>
<td>1743</td>
<td>7.8s</td>
<td>37s</td>
<td>27:56</td>
<td>5:35</td>
<td>15.08 fps</td>
<td>48s</td>
<td>83s</td>
<td>23.2s</td>
</tr>
<tr>
<td>iMac</td>
<td>57s</td>
<td>2078</td>
<td>3.73s</td>
<td>47s</td>
<td>22:44</td>
<td>3:26</td>
<td>22.04 fps</td>
<td>38s</td>
<td>55s</td>
<td>16.3s</td>
</tr>
<tr>
<td>iMac/G5</td>
<td bgcolor="red">0.73x</td>
<td bgcolor="green">1.2x</td>
<td bgcolor="green">2.09x</td>
<td bgcolor="red">0.78x</td>
<td bgcolor="green">1.22x</td>
<td bgcolor="green">1.63x</td>
<td bgcolor="green">1.46x</td>
<td bgcolor="green">1.26x</td>
<td bgcolor="green">1.5x</td>
<td bgcolor="green">1.42x</td>
</tr>
</tbody>
</table>
<p><font face="Helvetica">The take away that I get from this is that I could basically swap my dual G5 for a 20&#8243; iMac without any trouble really.  If you dig into the details, it looks like Apple has totally optimized Quicktime for Altivec and not so much for SSE3 or SSE3 just isn&#8217;t as good.  Integer performance though on the Intel Core Duo is fantastic and I highly recommend them for anyone doing software development because of that.  The MacBook Pro will probably perform very similarly to these benchmarks as its the same processor and memory speed, etc.</font></div>
]]></content:encoded>
			<wfw:commentRss>http://www.javarants.com/2006/01/27/apple-intel-imac-17-with-benchmarks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
