<?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>The Book of Ryan &#187; Technology</title>
	<atom:link href="http://ryancannon.com/category/technology/feed" rel="self" type="application/rss+xml" />
	<link>http://ryancannon.com</link>
	<description>Wordslinger, dissident, webwright</description>
	<lastBuildDate>Sun, 15 Jan 2012 04:33:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Commitment: The iPhone revolutionizes more the just software</title>
		<link>http://ryancannon.com/2008/07/20/commitment-the-iphone-revolutionizes-more-the-just-software</link>
		<comments>http://ryancannon.com/2008/07/20/commitment-the-iphone-revolutionizes-more-the-just-software#comments</comments>
		<pubDate>Mon, 21 Jul 2008 06:12:34 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[AT&T Tilt]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://ryancannon.com/?p=188</guid>
		<description><![CDATA[I searched long and hard for a smartphone worth the expense, and although I looked at the iPhone, I said the same thing many others did: no 3G, no GPS, no deal. Well, what do you know, the newest incarnation has both. I&#8217;m not authorized for a discount, by as soon as the lines die [...]]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://ryancannon.com/2007/08/06/the-great-smartphone-hunt" title="The Book of Ryan » The Great Smartphone Hunt">searched long and hard for a smartphone</a> worth the expense, and although I looked at the iPhone, I said the same thing many others did: no <abbr>3G</abbr>, no <abbr>GPS</abbr>, no deal. Well, what do you know, the newest incarnation has both. I&#8217;m not authorized for a discount, by as soon as the lines die down, I&#8217;ll toss my AT&amp;T Tilt. Not just because I&#8217;m a fanboy: Apple shows commitment.</p>

<p><span id="more-188"></span></p>

<p>Reading John Gruber&#8217;s description of the <a href="http://daringfireball.net/2008/07/webkit_performance_iphone" title="Daring Fireball: WebKit Performance on iPhone OS X 2.0">performance gains in the newest iPhone OS version</a>, I realized how revolutionary that is in the industry. Most mobile phones have a pretty short life-cycle:</p>

<ol>
<li>The full-price phase with all the commercials</li>
<li>The discount phase, to clear shelves for the next model</li>
<li>Trash</li>
</ol>

<p><a href="http://htcclassaction.org/" title="HTCClassAction.org - Because HTC dropped the ball, and it's about time they pick it up!">HTC even faces a class action lawsuit over the Tilt</a> and still refuses to update. In contrast, the iPhone OS has been updated <a href="http://en.wikipedia.org/wiki/IPhone_OS_version_history" title="iPhone OS version history - Wikipedia, the free encyclopedia">seven times</a> the first year it&#8217;s been out.</p>

<p>Not only is a customer buying the best mobile operating system on best-of-breed hardware, they&#8217;re also buying from a company that has integrated the product into the very heart of their business model.</p>

<p>You&#8217;re not just getting a warranty, you&#8217;re getting commitment. And that&#8217;s worth paying for.</p>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2008/07/20/commitment-the-iphone-revolutionizes-more-the-just-software/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Uptime is for Obsession</title>
		<link>http://ryancannon.com/2008/06/04/uptime-is-for-obsession</link>
		<comments>http://ryancannon.com/2008/06/04/uptime-is-for-obsession#comments</comments>
		<pubDate>Wed, 04 Jun 2008 20:06:15 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ryancannon.com/?p=180</guid>
		<description><![CDATA[Dreamhost, rationalizing their decoupling of e-mail and Web hosting. Just over HALF of all the support requests we get are about email. Everything else we offer, combined, doesn’t add up to the amount of trouble, expense, use, and effort that goes into “simple” old email. And that’s kind of funny, because as far as I [...]]]></description>
			<content:encoded><![CDATA[<p>Dreamhost, rationalizing their <a href="http://blog.dreamhost.com/2008/05/23/what-web-hosting-is-for/">decoupling</a> of e-mail and Web hosting.</p>

<blockquote>
  <p>Just over HALF of all the support requests we get are about email. Everything else we offer, combined, doesn’t add up to the amount of trouble, expense, use, and effort that goes into “simple” old email.</p>
  
  <p>And that’s kind of funny, because as far as I can tell, almost nobody CHOOSES a web host based on their email features. Everybody’s just looking at how much disk/bandwidth they get, what version of PHP they run, how good their support is, do they have a funny blog, is their CEO really studly, do the data centers have water beds, and so on…</p>
  
  <p>They’ve been conditioned by Yahoo! Mail, Hotmail, and Gmail to give email no value. I mean, everybody gives it away for free… nobody gives (real) web hosting away for free.</p>
  
  <p>And yet, in the end, the only thing (sadly?) that actually ends up getting used, is that “no-value” email! If a web server with maybe 750 customer sites on it were to go down for even as long as five hours, we’d probably get two angry messages about it. But if email goes down for the same number of customers for just five minutes we’ll have already received 50!</p>
</blockquote>

<p>Amazing that people complain more about their obsessions than things costing them money. This came to mind after <a href="http://twitter.com/rcanine/statuses/827093147">grumping</a> about all the grousing I hear over Twitter&#8217;s downtime.</p>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2008/06/04/uptime-is-for-obsession/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Doublethinking version targeting</title>
		<link>http://ryancannon.com/2008/02/27/doublethinking-version-targeting</link>
		<comments>http://ryancannon.com/2008/02/27/doublethinking-version-targeting#comments</comments>
		<pubDate>Wed, 27 Feb 2008 12:04:41 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Design/Programming]]></category>

		<guid isPermaLink="false">http://ryancannon.com/2008/02/28/doublethinking-version-targeting</guid>
		<description><![CDATA[Microsoft&#8217;s version targeting proposal for IE8 is all the rage on the Internets. I&#8217;ve been reading the arguments for and against, and have settled on holding two contradictory beliefs in my mind and accepting them both. Version targeting is a terrible proposal, one that threatens the advancement of Web design as we know it, and [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft&#8217;s <a href="http://blogs.msdn.com/ie/archive/2008/01/21/compatibility-and-ie8.aspx" title="IEBlog : Compatibility and IE8">version targeting proposal</a> for IE8 is all the rage on the Internets. I&#8217;ve been reading the arguments for and against, and have settled on <a href="http://en.wikipedia.org/wiki/Doublethink" title="Doublethink - Wikipedia, the free encyclopedia">holding two contradictory beliefs in my mind and accepting them both</a>. Version targeting is a terrible proposal, one that threatens the advancement of Web design as we know it, and props up a monolithic company that hasn&#8217;t been too good to Web developers in the past. We need it.</p>

<p><span id="more-172"></span></p>

<p>Visionaries of <a href="http://zeldman.com/" title="Jeffrey Zeldman Presents">HTML</a>, <a href="http://meyerweb.com/" title="meyerweb.com">CSS</a> and <a href="http://www.quirksmode.com" title="QuirksMode - for all your browser quirks">JavaScript</a> have been promoting this change—which they knew about before the rest of the world—with an odd sort of fanfare. <a href="http://alistapart.com/articles/minorthreat" title="A List Apart: Articles: Version Targeting: Threat or Menace?">Says Zeldman</a>:</p>

<blockquote>
  <p>What’s really new is that by opting out of Microsoft’s version targeting &#8230;
  you get to skip testing in
  future versions of IE. If your site works in IE7 today, it will work in IE47, or
  so Microsoft has promised.</p>
</blockquote>

<p>It&#8217;s the <em>Microsoft has promised</em> line that raises my hackles. Microsoft is somehow going to port every rendering mode since IE 5.5 into future versions of IE. How long will the cost of backporting IE7&#8242;s bugs and quirks to the latest Windows version will be seen as benefiting Microsoft&#8217;s shareholders? Methinks it won&#8217;t be 40 versions. My guess is two. Tops.</p>

<p>By taking the onus of maintaining sites off of Web developers and onto a fairly untrustworthy party—especially one with a <a href="http://www.microsoft.com/silverlight/" title="Microsoft Silverlight: Light Up the Web">business case for stagnating standards-based development</a> and a <a href="http://blogs.wsj.com/deals/2008/02/27/yahoos-deteriorating-defenses-against-the-microsoft-bid/?mod=googlenews_wsj" title="Deal Journal - WSJ.com : Yahoo's Deteriorating Defenses Against the Microsoft Bid">means to force it into broad acceptance</a>—we are making a deal with the devil. Version targeting is bad for the Internet.</p>

<h3>Who are the unenlightened?</h3>

<p>Worse, however, than betting on Microsoft to save us is that Zeldman blames the situation on some theoretical group of unwashed masses that are making bad Web sites:</p>

<blockquote>
  <p>Zillions of people who don’t know any better do tailor sites to the
  quirks of IE6. That’s why an improved IE7 “broke” old sites. And it’s 
  why, in crafting a new switch, Microsoft must build its default to 
  protect unenlightened developers.</p>
</blockquote>

<p>PPK walks lock-step with Zeldman, <a href="http://www.quirksmode.org/blog/archives/2008/01/the_versioning_1.html" title="QuirksBlog: The versioning switch's default is correct">using the same rationale as colonial Europe when pillaging Africa</a>.</p>

<blockquote>
  <p><em>Noblesse oblige.</em> Since we know more and can do more and better things with web sites, more is expected of us. If our ways are so much better, we should shoulder more responsibilities than those whose ways are wrong. Our shoulders are fit to bear these burdens; [standards-unaware web developers] aren&#8217;t.</p>
</blockquote>

<p>Both of these articles assume that these unenlightened people are going to magically become enlightened, and not abuse this new property as they do the rest of HTML currently. What seems realistic to me is that these people will start new projects. They&#8217;ll want to use new IE features. They&#8217;ll use—because they&#8217;re not &#8220;enlightened&#8221;—<code>IE=edge</code>. And Microsoft will have to dream up some other scheme to prevent the Web from breaking, and this hubub will start all over.</p>

<p>We need to stop being elitist. The &#8220;problem sites&#8221; aren&#8217;t just being created by these <a id="ref-unenlightened" href="#note-unenlightened">&#8220;unenlightened&#8221; developers</a>; they were created by developers—enlightened or not—and have been left fallow. Our industry is flush with hit-and-run agencies and freelancers that throw up a site and then dump it on understaffed, underpaid and under-experienced teams to manage. It&#8217;s easy to see that <a href="http://www.happycog.com/about/zeldman/" title="Happy Cog Studios: About Jeffrey Zeldman">three</a> <a href="http://complexspiral.com/about/eric/" title="About Complex Spiral Consulting: Eric A. Meyer">agency</a> <a href="http://quirksmode.org/freelance/intro.html" title="Peter-Paul Koch - Freelancer">guys</a> might focus on sites created by novice Web developers or existing since the 20th century as the main problems, but I have a hard time believing every Happy Cog site would survive IE8 without <em>some</em> kinds of tweaks. Sites which are not actively maintained, but still have value to Internet users—these are the sites Microsoft is afraid of breaking. A fix is never simple if there is no one to do it.</p>

<p>My guess is that the IE7 update is not the one that fueled the version targeting decision: it was the rancor over Vista. A vast number of applications and device drivers would not function with Windows Vista&#8217;s new API&#8217;s, and as a result the operating system has had a fairly frosty reception. IE7&#8242;s release was a party in comparison. Apparently there exists a hearty core of people that desired to use applications and hardware <em>years</em> after they&#8217;ve stopped being maintained. The scripting and CSS updates alluded to with IE8 may bring similar Web sites down, and that&#8217;s ill will Microsoft can&#8217;t afford to engender.</p>

<p>In other words, updating IE without setting up version targeting to a <a id="ref-current" href="#note-current">current browser</a> will break an unknowable number of Web sites which may still contain valuable content but have no means to upgrade and stay current. We need it.</p>

<h3>Opting to opt out</h3>

<p>Somehow, I&#8217;ve got to reconcile this conflict. I&#8217;m glad that Microsoft created a way to improve the state of their browser without throwing away the old Internet. That said, I don&#8217;t have a very high opinion of that company and am loathe to contribute a spare byte of mindshare to their products by inserting IE crutches in my code. I&#8217;m going to let it break. Refusing to use IE&#8217;s meta tag will lock their browser to a predictable set of features and bugs—or as predictable as such things will ever be, and for the foreseeable future, IE7&#8242;s Web standards support is passable enough for most work, and we&#8217;re going to have to support IE7 (the browser, not just the rendering mode) anyway.</p>

<p>I&#8217;ve long believed that Web Developers have been, as a group, too milquetoast about dealing with IE&#8217;s problems. We tediously work around a  cranky browser and then, hypocritically, use buttons that read &#8220;this site requires flash,&#8221; and &#8220;download the PDF viewer.&#8221; For me no longer. Any site in beta, any site I develop for fun, and any site without a demonstrable need for IE8 features is going to stay in IE7 mode. At least, that is, <a href="http://ejohn.org/blog/html5-doctype/" title="John Resig - HTML5 DOCTYPE">until HTML5 is usable</a>.</p>

<h3>Notes</h3>

<ol>
<li><span id="note-unenlightened">Mr. Meyer does <a href="http://alistapart.com/articles/fromswitchestotargets" title="A List Apart: Articles: From Switches to Targets: A Standardista's Journey">cite</a> some Web research, but both studies do not prove anything about the current state of Web development. <a href="http://code.google.com/webstats/" title="Google Code: Web Authoring Statistics">Google&#8217;s statistics</a> surveys the entire Internet with no regard to <em>when</em> a page was developed, while <a href="http://www.markokarppinen.com/20020222.html" title="Marko Karppinen | State of the Validation 2002">Marko Karppinen&#8217;s study</a> assumes that validity has anything to do with standards-based design, <a href="http://www.mikeindustries.com/blog/archive/2004/06/march-to-your-own-standard" title="Mike Davidson  -  March to Your Own Standard">which it clearly does not</a>.</span> <a class="return" href="#ref-unenlightened">↩</a></li>
<li><span id="note-current">If the IE team truly wanted to preserve the Internet, they&#8217;d make version targeting default to IE6 rendering, and not IE7, as IE6 has been actively targeted by Web developers for almost ten years, IE7 a fraction of that. Admitting this, however, makes me die a little on the inside. <a class="return" href="#ref-current">↩</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2008/02/27/doublethinking-version-targeting/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>EVE on Rails &#8211; Creating an EVE in-game-optimised version of your Rails site</title>
		<link>http://ryancannon.com/2008/02/14/eve-on-rails-creating-an-eve-in-game-optimised-version-of-your-rails-site</link>
		<comments>http://ryancannon.com/2008/02/14/eve-on-rails-creating-an-eve-in-game-optimised-version-of-your-rails-site#comments</comments>
		<pubDate>Thu, 14 Feb 2008 10:15:39 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Design/Programming]]></category>

		<guid isPermaLink="false">http://ryancannon.com/2008/02/14/eve-on-rails-creating-an-eve-in-game-optimised-version-of-your-rails-site</guid>
		<description><![CDATA[One thing I love about being a Rails hobbyist is that I can continually think about the best way to do things. With no paycheck hinging on a deliverable, I can refactor continuously until I&#8217;m convinced I have the best code I can muster. Sure, I never get anything done, but the exercise makes me [...]]]></description>
			<content:encoded><![CDATA[<p>One thing I love about being a Rails hobbyist is that I can continually think about the best way to do things. With no paycheck hinging on a deliverable, I can refactor continuously until I&#8217;m convinced I have the best code I can muster. Sure, I never get anything done, but the exercise makes me a better programmer.</p>

<p><span id="more-171"></span>
I mentioned previously <a href="http://ryancannon.com/2008/02/06/setting-up-a-rails-application-for-eve-online">how to set up an EVE Online-focused rails site</a>. After reading through old <a href="http://weblog.rubyonrails.com/">Riding Rails</a> posts, I noticed this excellent post on <a href="http://www.slashdotdash.net/articles/2007/12/04/iphone-on-rails-creating-an-iphone-optimised-version-of-your-rails-site-using-iui-and-rails-2" title="iPhone on Rails - Creating an iPhone optimised version of your Rails site using iUI and Rails 2">iPhone-optimising your rails project</a>. This process is almost exactly the same for sharing views between EVE and a normal browser. In Rails 2.0 all you have to do is register the MIME Type.</p>

<pre><code>config/initializers/mime_types.rb:

Mime::Type.register_alias "text/html", :eve
</code></pre>

<p>Then, in your application controller, use a <code>before_filter</code> to adjust the format as necessary.</p>

<pre><code>app/controllers/application_controller.rb:

before_filter :isolate_eve_browser

private
  # EVE-specific data
  def isolate_eve_browser
    if eve?
      request.format = :eve
      request_trust unless trusted?
      end
    end
  end
</code></pre>

<p>Now everywhere you want to separate your EVE views from your standard browser views, simply use <code>respond_to</code>.</p>

<pre><code>app/controllers/home_controller.rb:

class HomeController &lt; ApplicationController
  def index
    respond_to do |format|
      format.html
      format.eve
    end
  end  
end
</code></pre>

<p>You can then use <code>app/views/home/index.html.erb</code> and <code>app/views/home/index.eve.erb</code> respectively. This means you can also request trust on the appliaction level instead of on the action level as I mentioned previously. Notice that <code>request_trust</code> method above? It should look something like:</p>

<pre><code>app/controllers/application_controller.rb:

private
  def request_trust
    response.headers["eve.trustme"] = (
      "http://#{request.env['HTTP_HOST']}/" +
      "::Your custom message begging for trust."
    )
    render :template =&gt; 'trust_me'
  end
</code></pre>

<p>The action is rounded out by creating <code>app/views/trustme.eve.erb</code>, which is the template rendered above when the user declines to trust you. Happy coding!</p>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2008/02/14/eve-on-rails-creating-an-eve-in-game-optimised-version-of-your-rails-site/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Setting up A Rails Application for EVE Online</title>
		<link>http://ryancannon.com/2008/02/06/setting-up-a-rails-application-for-eve-online</link>
		<comments>http://ryancannon.com/2008/02/06/setting-up-a-rails-application-for-eve-online#comments</comments>
		<pubDate>Wed, 06 Feb 2008 09:54:39 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Design/Programming]]></category>
		<category><![CDATA[Web Tools]]></category>

		<guid isPermaLink="false">http://ryancannon.com/2008/02/06/setting-up-a-rails-application-for-eve-online</guid>
		<description><![CDATA[As I mentioned before, I&#8217;ve be having a lot of fun with EVE Online. The attraction, however, hasn&#8217;t been just to the ability to fly around in a ship and blast pirates (as if that weren&#8217;t enough!). EVE has a pretty excellent API, an browser that provides in-game information, and even dumps of art and [...]]]></description>
			<content:encoded><![CDATA[<p>As I <a href="http://ryancannon.com/2008/01/13/new-year-new-addiction" title="The Book of Ryan  » New Year, New Addiction">mentioned before</a>, I&#8217;ve be having a lot of fun with <a href="http://eve-online.com/" title="EVE Online - a massive multiplayer online roleplaying space game">EVE Online</a>. The attraction, however, hasn&#8217;t been just to the ability to fly around in a ship and blast pirates (as if that weren&#8217;t enough!). EVE has a pretty excellent <a href="http://myeve.eve-online.com/api/doc/" title="EVE API Documentation">API</a>, an browser that provides <a href="http://bughunters.addix.net/igbtest/IGB-commands.html" title="EVE Ingame (sic) Webbrowser (sic)">in-game information</a>, and even <a href="http://myeve.eve-online.com/ingameboard.asp?a=topic&amp;threadID=650828" title="Trinity 1.0 Static Data Export">dumps of art and data</a> for developers to <a id="ref-license" href="http://ryancannon.com/2008/02/06/setting-up-a-rails-application-for-eve-online#note-license">use</a>.</p>

<p>I&#8217;ve already got a few ideas on fun things to do with all of this data. The trick is trying to make opinionated Rails play nice with the browser, the API and the Data. To that end, here are the strategies I&#8217;m invoking. Comments are, of course, welcome.</p>

<p><span id="more-170"></span></p>

<h3>Dealing with Data</h3>

<p>I can&#8217;t even begin to wrap my brain around the cool things you can do with EVE data. A number of desktop applications exist for character tracking and skill planning, but that&#8217;s only a very shallow bit of what&#8217;s possible. Getting the data into manageable form, however, is a bit tricky.</p>

<p>I wanted to keep my EVE data separate from my game data. Presumably EVE&#8217;s data will change over time. Ideally a new dump will come out and I can just swap it with my current one&#8211;no fuss, no muss. I downloaded the <a href="http://dl.eve-files.com/media/0712/trinity_1.0_sqlite3.db.zip" title="A ZIP archive of the Trinity DB file">Trinity 1.0 SQLite3 dump</a>. And dropped it into <code>db/</code> of my Rails application. Then I had to make sure to point all EVE data to the correct database.</p>

<pre><code>config/datbase.yml:

eve_development:
  adapter: sqlite3
  database: db/trinity_1.0_sqlite3.db
  timeout: 5000
eve_test:
  adapter: sqlite3
  database: db/trinity_1.0_sqlite3.db
  timeout: 5000
eve_production
  adapter: mysql
  database: *******
  username: ********
  password: ********
  host: *******
</code></pre>

<p>and</p>

<pre><code>app/models/eve_data.rb:

class EveData &lt; ActiveRecord::Base
  establish_connection "eve_#{RAILS_ENV}"
end
</code></pre>

<p>Now any model that subclasses EveData will point to the correct database and key:</p>

<pre><code>app/models/race.rb:

class Race &lt; EveData
  set_table_name :chrRaces
  set_primary_key :raceID
  has_many :careers, :foreign_key =&gt; :raceID
end
</code></pre>

<p>The tedious part of this is setting up all of the associations, as EVE data does not conform to rails column naming conventions (although it&#8217;s not unimaginable that one could fix this with an elegant script).</p>

<p>One last note: if you generate any sub-classes of EveData using the built-in generators, be sure to remove <code>test/fixtures/&lt;subclass&gt;.yml</code> as it will cause you tests to die horrible deaths.</p>

<h3>API Wrangling</h3>

<p>Rails has a lot of built-in API magic, all of which is absolutely worthless with EVE. Consuming the EVE API requires a lot of anonymous XML parsing. Boooooring! Luckily, <a href="http://www.crudvision.com/" title="CrudVision">Lisa Seelye</a> has an excellent <a href="http://www.crudvision.com/reve-ruby-eve-online-api-library/" title="REVE - Ruby Eve Online API Library">wrapper module for the EVE API</a>. So long as you&#8217;re okay with her clear-as-mud license, Lisa&#8217;s work will be a great benefit.</p>

<h3>Managing the EVE Browser</h3>

<p><strong>Update:</strong> I&#8217;ve written up a slightly better way to <a href="http://ryancannon.com/2008/02/14/eve-on-rails-creating-an-eve-in-game-optimised-version-of-your-rails-site" title="EVE on Rails - Creating an EVE in-game-optimised version of your Rails site">target the EVE Browser in Rails 2.0</a>.</p>

<p>The EVE Online browser stinks. I got only halfway through the HTML 4.01 test suite before quitting out of frustration. I&#8217;m pretty sure it can&#8217;t even render GIF images. I&#8217;d love to see them bundle WebKit instead. One thing the browser does, however, is provide custom HTTP headers (without the required X- in front, of course) for in-game EVE data. Custom headers are available to the controller in the <code>request.env</code> collection. I made them available to all controllers and views with the following:</p>

<pre><code>app/controllers/application.rb:

class ApplicationController &lt; ActionController::Base
  ...
  # Provides access to views
  helper_method :eve?
  helper_method :trusted?
  helper_method :eve_data

  private
    def eve?
      !! request.env['HTTP_EVE.TRUSTED']
    end
    def trusted?
      request.env['HTTP_EVE.TRUSTED'] == "yes"
    end
    def eve_data
      if trusted?
        {
          "name" =&gt; request.env['HTTP_EVE.CHARNAME'],
          "id" =&gt;  request.env['HTTP_EVE.CHARID'],
          "alliance" =&gt; request.env['HTTP_EVE.ALLIANCENAME'],
          "region" =&gt; request.env['HTTP_EVE.REGIONNAME'],
          "constellation" =&gt; request.env['HTTP_EVE.CONSTELLATIONNAME'],
          "solar system" =&gt; request.env['HTTP_EVE.SOLARSYSTEMNAME'],
          "station" =&gt; request.env['HTTP_EVE.STATIONNAME'],
          "corporation" =&gt; request.env['HTTP_EVE.CORPNAME'],
          "role" =&gt; request.env['HTTP_EVE.CORPROLE']
        }
      end
    end
end
</code></pre>

<p>The <code>eve?</code> and <code>trusted?</code> methods return booleans and <code>eve_data</code> a hash of the character&#8217;s current location in-game. They allow me to write helpers such as</p>

<pre><code>app/helpers/application_helper.rb:

def character_image_tag(id, size, options = nil)
  if eve?
    o = { :src =&gt; "#{src}:#{id}", :size =&gt; "#{size}" }
    o.merge!(options) if options.is_a(Hash)
    tag(:img, o)
  else
    o = { :width =&gt; "#{size}", :height =&gt; "#{size}" }
    o.merge!(options) if options.is_a(Hash)
    image_tag("http://img.eve.is/serv.asp?s=#{size}&amp;c=#{id}", o)
  end
end
</code></pre>

<p>Guessing by the speed of the browser, using in-game resources instead of external will save the user a lot of time.</p>

<p>As players fly around EVE, the application has the ability to detect a location change and refresh the page, updating the location information. Applications could work in EVE from only one URL, even without JavaScript. In order to do so, however, the application must do some header-gymnastics as well. My take on this is something akin to:</p>

<pre><code>app/controllers/foo_controller.rb:

class FooController &lt; ApplicationController
  def index
    # Tell the client your content will change
    # Not necessary, but correct and future-proof
    response.headers["Vary"] = "eve.trustme"
    if ! eve?
      # Do something to the regular browser
      render :action =&gt; "external"
    elsif ! trusted?
      trust_me
      render :action =&gt; "trust_me"
    else
      lookup
      render :action =&gt; "lookup"
    end
  end

  def external
    ...
  end

  def trust_me
    # Send the trust header
    response.headers["eve.trustme"] = "http://#{request.env['HTTP_HOST']}/::Trust me."
    ...
  end

  def play
    # Send the auto-refresh header
    response.headers["refresh"] = "sessionchange;URL=#{url_for(:controller =&gt; 'foo')}"
    ...
  end

end
</code></pre>

<p>Each action will then have its own view file and its own logic, but the same URL. Be careful where you send the auto-refresh header: create, update and delete actions should not get them. Note too that the <code>trust_me</code> action <em>should</em> end with <code>render =&gt; :nothing</code> or similar. <em>This does not work.</em> The EVE browser requires a text/html file to trigger the trust prompt.</p>

<p>And that&#8217;s it! You&#8217;re on your way to a Rails-powered EVE application. Please send me any questions, critiques or issues. I&#8217;ll post more often with other quirks I pick up.</p>

<p>UPDATE: Modified the database set-up to use my database.yml for EVE data and connect EVE data to my environments. Also moved establish_connection into the model where it should be. I also added a note on fixtures that took me a silly amount of time to work around.</p>

<h3>Notes</h3>

<ol>
<li><span id="note-license"></span> I haven&#8217;t been able to find a license for this data. Although I&#8217;m guessing it&#8217;s Creative Commons Attribution-DontDoAnythingStupid. <a class="return" href="#ref-license">↩</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2008/02/06/setting-up-a-rails-application-for-eve-online/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Titling with AT&amp;T</title>
		<link>http://ryancannon.com/2008/01/28/titling-with-att</link>
		<comments>http://ryancannon.com/2008/01/28/titling-with-att#comments</comments>
		<pubDate>Mon, 28 Jan 2008 08:01:23 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ryancannon.com/2008/01/28/titling-with-att</guid>
		<description><![CDATA[I wrote, some time ago, about the search for the perfect smartphone. Although I didn&#8217;t write about it at the time, the HTC Trinity seemed to fill that role perfectly. Sure, I had to get it from overseas, but it was a quad-band phone, right? GPS? Check. 3G? Check. Wi-Fi? Check. Unlocked? Check. True, no [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote, some time ago, about <a href="http://ryancannon.com/2007/08/06/the-great-smartphone-hunt" title="The Book of Ryan » The Great Smartphone Hunt">the search for the perfect smartphone</a>. Although I didn&#8217;t write about it at the time, the <a href="http://www.europe.htc.com/products/htcp3600.html" title="HTC: Products: HTC P3600">HTC Trinity</a> seemed to fill that role perfectly. Sure, I had to get it from overseas, but it was a quad-band phone, right? GPS? Check. 3G? Check. Wi-Fi? Check. Unlocked? Check. True, no FM tuner, but that was no loss, and while it didn&#8217;t have anything that slid or flipped, the single-piece construction gave it a feeling of durability that its <a href="http://www.wireless.att.com/businesscenter/8525/" title="8525 | AT&amp;T wireless services">runner up</a> missed. Perfect, right?</p>

<p><span id="more-168"></span></p>

<p>Turns out it doesn&#8217;t work with AT&amp;T&#8217;s EDGE service. GPRS and 3G were great, but EDGE was zero, zip, nothing. Not a big deal in Detroit, but in LA it was like trying to get service on the Moon. I toughed it out until after CES and MacWorld, but with Android and OpenMoko still a gleam in some Linux geek&#8217;s eye and the iPhone stuck with out 3G, <a id="ref-iphone-gps" href="#note-iphone-gps">GPS access</a> or third-party apps, I figured now was a good time.</p>

<p>Meet the <a href="http://www.wireless.att.com/businesscenter/atttilt/" title="AT&amp;T Tilt for Business | AT&amp;T wireless services">AT&amp;T Tilt</a>, <abbr title="also known as">a.k.a.</abbr> the <a href="http://www.htc.com/product/03-product_tytn_II.htm" title="HTC product page for the TyTN II">HTC TyTN II</a> or Kaiser. It&#8217;s essentially the Oxford-educated younger brother of the Trinity. The same feature-set I mentioned above, combined with a slide-out keyboard and shamelessly good reception by comparison. This phone, however, is more than just a texting-friendly version: HTC has refined the details a bit as well. For example, the unit ships with a screen protector that fills the full screen width, and music applications don&#8217;t stop playing when the screen is turned off.</p>

<p>The tilt isn&#8217;t without its issues though. At almost seven grams it&#8217;s a beast in your pocket, and the slide-out-and-tilt mechanism feels ready to snap at any minute. The Tilt also stores your SIM card on the back edge of screen&#8211;visible when open&#8211;which makes SIM theft a very real danger.</p>

<h3>Paperless Geocaching</h3>

<p>The holy grail. Finally. With a flurry of supporting apps, you can view, manage, and track geocaches.</p>

<div class="photo lfloat half" style="margin-right: 0">
    <img src="http://ryancannon.com/wp-content/attic/2008/01/ie-windows-mobile.jpg" alt="A screenshot of IE Windows Mobile" width="250" height="333" />
    <span class="caption">Learning about the cache</span>
</div>

<div class="photo rfloat half" style="margin-left: 0">
    <img src="http://ryancannon.com/wp-content/attic/2008/01/gps-tuner.jpg" alt="A screenshot of GPS Tuner" width="250" height="333" />
    <span class="caption">Locating the cache</span>
</div>

<div class="photo lfloat half" style="margin-right: 0">
    <img src="http://ryancannon.com/wp-content/attic/2008/01/gps-tuner-2.jpg" alt="A screenshot of GPS Tuner" width="250" height="333" />
    <span class="caption">Seeking the cache</span>
</div>

<div class="photo rfloat half" style="margin-left: 0">
    <img src="http://ryancannon.com/wp-content/attic/2008/01/gpx-sonar.jpg" alt="A screenshot from GpxSonar" width="250" height="333" />
    <span class="caption">Logging the cache</span>
</div>

<h3>Add-ons</h3>

<p>In addition to the phone, I also have an earbud-style wired headset which is both louder and more clear than the on-ear <a id="ref-headsets" href="#note-headsets">bluetooth headsets I&#8217;ve tried</a>. I also picked up a car charger, as TomTom Navigator is a major battery hog. These accessories were all targeted to the Trinity, but since HTC uses a USB-compatible plug, they work fine in the Tilt as well.</p>

<p>The real victor was the 8GB MicroSD card. iPhone hard drive, eat your heart out.</p>

<h3>Software &amp; Mods</h3>

<p>Windows Mobile is probably the largest cash sink I&#8217;ve encountered in a while. There <em>tons</em> of applications for it, but the good ones are rarely free or open-source. It&#8217;s $10 &#8211; $30 a pop for every little bit of functionality. A few I&#8217;ve found worthwhile:</p>

<dl>
<dt><a href="http://www.gpstuner.com/" title="GPS Tuner - Offroad Navigation">GPS Tuner</a></dt>
<dd>A haus of a GPS application, it&#8217;s excellent for foot navigation (trails and geocaching), and can download Google Maps data in order to help you set your bearings. It&#8217;s not great for driving, though, as the maps don&#8217;t adjust in real time.</dd>

<dt><a href="http://www.tomtom.com/products/product.php?ID=286&amp;Category=2&amp;Lid=4" title="TomTom NAVIGATOR 6 - Software &amp; maps of the US/Canada on DVD">TomTom Navigator 6</a></dt>
<dd>I couldn&#8217;t have apartment hunted in L.A. over a single weekend without this app, nor could I have made it across the country <a id="ref-lost" href="#note-lost">without getting lost</a>.</dd>

<dt><a href="http://www.spbsoftwarehouse.com/products/time/" title="Spb Time - Pocket PC Products - Spb Software House">SPB Time</a></dt>
<dd>WinMo&#8217;s clock interface is terrible. Alarms difficult to create, time zones are hard to change, and the display is simply ugly. SPB Time has a full-screen analog clock (<a href="http://www.phonedog.com/r/i/400/1908/6538-1908-400-395-275x500.jpg" title="Photo of the HTC StarTrk/Cingular 3125">although not this cool</a>). It also lets me pre-set timers for green, black and herbal tea.</dd>

<dt><a href="http://www.pdatopsoft.com/PocketPC/Vidya-Pocket-Screen-Capture" title="Vidya Pocket Screen Capture 1.0.9 (Commercial) - Presentation Business Software">Vidya ScreenCapture</a></dt>
<dd>There&#8217;s actually a bunch of screen capturing utilities, one of them free. This one lets you specify the save location and map the functionality to a hardware button. Plus it&#8217;s captures are actual double the size of the screen, or easier cropping. Strangely, their Web site, vidyasmart.com, became one of those sleazy parked sites a week after I purchased it.</dd>

<dt><a href="http://www.opera.com/products/mobile/" title="Opera Mobile">Opera Mobile</a></dt>
<dd>I&#8217;ve got a demo version right now, and I&#8217;m unsure if I&#8217;m going to buy it. It&#8217;s got more features than Internet Explorer, but IE is the only mobile phone browser it&#8217;s possible to play Travian on. Opera might be a nice back-up, as none of the browsers I&#8217;ve tried get every situation right.</dd>

<dt><a href="http://www.pocketmind.com/pmfp.htm" title="PocketMusic - MP3, OGG, WMA Player for Pocket PC">Pocket Music</a></dt>
<dd>Also demoing. With that 8GB of memory, I really resent AudibleAir demanding I download only low-quality versions of their audiobooks. PocketMusic brags about being able to play Audible files, and if I can get it to work I&#8217;ll be able to sync the phone just like my iPods and not have to worry about Audible&#8217;s second-rate software.</dd>
</dl>

<p>There is <em>some</em> freeware available as well.</p>

<dl>
<dt><a href="http://www.google.com/gmm/" title="Take the power of Google Maps with you on your mobile phone.">Google Maps</a></dt>
<dd>When you&#8217;re just looking up something quick, or need to grab an address or phone number, the Google maps application is great. Since it tracks your position with GPS as well, this can suffice as a poor-man&#8217;s TomTom, although it&#8217;s better as a compliment than a replacement.</dd>

<dt><a href="http://geocaching-hamburg.de/2007/10/10/gpxsonar-download/" title="GPXSonar Download « Geocaching Hamburg">GPX Sonar</a></dt>
<dd>This tiny app is a geocacher&#8217;s dream. It allows you to view a geocache&#8217;s information page from the downloaded GPX file, create field notes and manage travel bugs. It&#8217;s not perfect, but the price is right. The original site is no longer available, and the current download page is in German.</dd>

<dt><a href="http://forum.xda-developers.com/showthread.php?t=334759&amp;page=13#post1707732" title="{Solved}is there a way to remap PTT button?? - Page 13 - xda-developers">PTT_Fix_4Tilt</a></dt>
<dd>The Tilt comes loaded with a ton of AT&amp;T <a href="http://en.wikipedia.org/wiki/Shovelware" title="Shovelware - Wikipedia, the free encyclopedia">shovelware</a>, and a hardware button that launches a screen saying simply, &#8220;Push To Talk charges will apply, do you wish to continue?&#8221; No, thanks. AT&amp;T&#8217;s configuration does not let you re-route this button to another feature as you can the other hardware buttons. This script was developed buy the good folks at <a id="ref-xda" href="#note-xda">XDA-Developers</a>, and let&#8217;s you reprogram the button without doing your own registry hacks.</dd>
</dl>

<h3>Notes</h3>

<ol>
<li><span id="note-iphone-gps">The <a href="http://www.skyhookwireless.com/" title="Skyhook Wireless">Wi-Fi Positioning</a> included in the maps feature doesn&#8217;t count. Although I haven&#8217;t played with it, it seems like it would be pretty clueless where you&#8217;d need GPS most&#8211;the middle of nowhere. <a class="return" href="#ref-iphone-gps">↩</a></span></li>
<li><span id="note-headsets">With the Tilt&#8217;s AD2P support, I&#8217;d love to get a bluetooth stereo headset for it, but the major flaw I&#8217;m seeing with bluetooth is the need to constantly re-pair whenever you want to switch devices. I wouldn&#8217;t chip for this without being able to switch devices on-the-fly.<a class="return" href="#ref-headsets">↩</a></span></li>
<li><span id="note-lost">Only once did TomTom fail me. On the way to Zion National Park, TomTom suggested it take a scenic route along the back of a farm and down a two-track that ran up (quite literally, up) the side of a mountain. <a class="return" href="#ref-lost">↩</a></span></li>
<li><span id="note-xda"><a href="http://www.xda-developers.com/" title="xda-developers - Xda-developers">XDA Developers</a> is a true hacker community. Not one of those 1980&#8242;s hollywood depictions, either. These developers explore, disassemble and otherwise make full use of the hardware they have purchased. They take a very strong stance, however, against warez, and greatly respect software developers.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2008/01/28/titling-with-att/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Year, New Addiction</title>
		<link>http://ryancannon.com/2008/01/13/new-year-new-addiction</link>
		<comments>http://ryancannon.com/2008/01/13/new-year-new-addiction#comments</comments>
		<pubDate>Sun, 13 Jan 2008 23:37:58 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ryancannon.com/2008/01/13/new-year-new-addiction</guid>
		<description><![CDATA[It&#8217;s been a while since I&#8217;ve posted, but the New Year has gotten off to a rocket start. Not that there&#8217;s anything important going on at work. We&#8217;re building a lot of very cool stuff we&#8217;re building. But there&#8217;s more to me than work. In other news, my WordPress install was]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been a while since I&#8217;ve posted, but the New Year has gotten off
to a rocket start. Not that there&#8217;s anything important going on at
<a href="http://superbowl.com/" title="Only the most important commercials of the year! Oh, and football">work</a>. We&#8217;re building a lot of very cool stuff we&#8217;re building.
But there&#8217;s more to me than work.</p>

<p><span id="more-162"></span></p>

<p>In other news, my WordPress install was <a href="http://wordpress.org/support/topic/141041?replies=12#post-666715" title="WordPress › Support > Weird and Dangerous : ro8kfbsmag.txt&#8221;>hacked</a>, which proved to be
a lovely thing to deal with over the holiday. Other than some flurried
password-changing and support-ticket-issuing the only other negative
response (which may not be related) is that my <a href="http://technorati.com/blogs/ryancannon.com?reactions" title="Blog Reactions on Technorati">blog reactions</a> have
gone positively nutty. Of course this might be a general problem with their
system if <a href="http://support.technorati.com/discussions/topic/2445" title="Due to the backlog in support, delays in Admin response are expected">technorati&#8217;s entire support network is backed up</a>.
I think I&#8217;m ready to submit <a href="http://xkcd.com/305/" title="xkcd: Rule 34">Rule 35</a>:
&#8220;If you build it, they will spam&#8221;.<sup id="ref-1"><a href="#fn-1">1</a></sup></p>

<p>With <a href="http://s1.travian.us/" title="Travian - Browser Game - Romans, Gauls, &amp; Teutons">Travian</a> in its final throes—go <a href="http://whatgaul.net/" title="What Gaul! The Travian US Server 1 Alliance">WG</a>—I&#8217;ve been dragged into
another online addiction to sate me when this one ends. <a href="http://eve-online.com/">EVE Online</a>
is like a septuagenarian in Webernet terms, and I&#8217;m no fan of
<abbr title="Massively Multiplayer Online">MMO</abbr> games. One cool
thing though is that the game as an in-game browser and decent data API.
I&#8217;ve written a very quick <a href="http://ryancannon.com/wp-content/attic/eve/">EVE In-Game Browser Emulator</a> that
should help me and possibly others develop in-game tools.</p>

<p>I am increasingly fascinated by all the places you find a browser, and
the very cool stuff that Web Standards are allowing these days (more
on that later).</p>

<ol>
<li><span id="fn-1">Dammit. I thought I was the first to think of that. Oh well, <a href="http://www.google.com/search?q=%22If+you+build+it%2C+they+will+spam%22" title="“If you build it, they will spam” - Google Search">I&#8217;m close</a></span>.<a href="#ref-1">↩</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2008/01/13/new-year-new-addiction/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>EVE Online Dashboard Widget</title>
		<link>http://ryancannon.com/2007/12/10/eve-widget</link>
		<comments>http://ryancannon.com/2007/12/10/eve-widget#comments</comments>
		<pubDate>Mon, 10 Dec 2007 08:56:02 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ryancannon.com/2007/12/10/eve-widget</guid>
		<description><![CDATA[I&#8217;m not sure whether it&#8217;s for better or worse that I have been dragged into EVE Online by a friend from college. The game is beautiful, and I love to support gaming on the Mac platform. EVE has an excellent API as well. Unfortunately, the only way to track my character&#8217;s status outside the game [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not sure whether it&#8217;s for better or worse that I have been dragged into <a href="http://eve-online.com/" title="A massive multiplayer online roleplaying space game">EVE Online</a> by a friend from college. The game is beautiful, and I love to support gaming on the Mac platform. EVE has an excellent API as well. Unfortunately, the only way to track my character&#8217;s status outside the game is by running EVE applications on Windows through Parallels. I&#8217;m proud to introduce version one of the EVE Online Dashboard Widget. This simple widget will help you track the expiration time of skills. In order to use it, you&#8217;ll need your <a href="http://myeve.eve-online.com/api/">EVE API Key</a>.</p>

<p><span id="more-158"></span></p>

<p>Download here: <a type="application/zip" href='http://ryancannon.com/wp-content/attic/2007/12/eve-widget.zip' title='EVE Online Character Tracker Widget'>EVE Online Character Tracker Widget</a>.</p>

<p>Also, Apple requires me to place this paragraph here as instructions:</p>

<blockquote>
  <p>Mac OS X 10.4 Tiger is required. If you’re using Safari, click the download link. When the widget download is complete, show Dashboard, click the Plus sign to display the Widget Bar and click the widget’s icon in the Widget Bar to open it. If you’re using a browser other than Safari, click the download link. When the widget download is complete, unarchive it and place it in /Library/Widgets/ in your home folder. show Dashboard, click the Plus sign to display the Widget Bar and click the widget’s icon in the Widget Bar to open it.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2007/12/10/eve-widget/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>E-mail, Spam and The Magic Plus</title>
		<link>http://ryancannon.com/2007/11/18/e-mail-spam-and-the-magic-plus</link>
		<comments>http://ryancannon.com/2007/11/18/e-mail-spam-and-the-magic-plus#comments</comments>
		<pubDate>Mon, 19 Nov 2007 03:50:50 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ryancannon.com/2007/11/18/e-mail-spam-and-the-magic-plus</guid>
		<description><![CDATA[One weekend in elementary school, my dad cooked us breakfast, as was his habit. Something was sizzling in the pan and smelling almost delicious. It wasn&#8217;t bacon. Nor was it sausage. I asked him what it was. &#8220;Breakfast Meat!&#8221; Meat designed for only one meal? This could not be! I pressed him, and he repeated [...]]]></description>
			<content:encoded><![CDATA[<p>One weekend in elementary school, my dad cooked us breakfast, as was his habit. Something was sizzling in the pan and smelling almost delicious. It wasn&#8217;t bacon. Nor was it sausage. I asked him what it was.</p>

<p>&#8220;Breakfast Meat!&#8221;</p>

<p>Meat designed for only one meal? This could not be! I pressed him, and he repeated himself. I checked the fridge, and sure enough an oblong tin cheerfully announced itself as breakfast meat. Something was off. I refused to eat it. What animal did said meat come from? The can did not say, and my father only hazarded guesses.</p>

<p>Hence my war with spam began.</p>

<p><span id="more-154"></span></p>

<p><a href="http://alistapart.com/" title="For People Who Make Websites">A List Apart</a> just published an article on some pretty <a href="http://alistapart.com/articles/gracefulemailobfuscation" title="A List Apart: Articles: Graceful E-Mail Obfuscation">graceful e-mail obfuscation</a>, which is pretty impressive (although a bit encumbering). The author&#8217;s major problem: he encodes the &#8220;@&#8221; and &#8220;.&#8221; of addresses with a plus-sign, <a href="http://alistapart.com/comments/gracefulemailobfuscation?page=2#14" title="A List Apart: Comments: Graceful E-Mail Obfuscation">stating</a>:</p>

<blockquote>
  <p>e-mail service providers typically don’t allow user to create
  addresses that contain a plus sign</p>
</blockquote>

<p>And right he is! Gmail, however, allows you to use The Magic Plus™, as do any procmail-using Web hosts (like <a href="http://www.dreamhost.com/r.cgi?76779" title="Web Hosting by DreamHost">these jokers</a>). You haven&#8217;t met him? Here&#8217;s how it works.</p>

<h3>The Magic Plus</h3>

<p>It&#8217;s quite simple. Your e-mail address has two parts, the user and the domain. Spiffy mail servers, however, allow you to add a third part to the address, specified by a plus:</p>

<pre><code>user@example.com
</code></pre>

<p>becomes</p>

<pre><code>user+tag@example.com
</code></pre>

<p>And the important part is that <em>both go to the same place!</em> So next time you&#8217;re being hassled for an e-mail address for your Kroger card and you&#8217;re afraid they&#8217;re going to sell your address to angry spam monkeys, simply give them <code>user+kroger@example.com</code> and you&#8217;ll know!</p>

<h3>Spam.la is voodoo Magic</h3>

<p>And if you have to sign up for a <em>really</em> shady place, use <a href="http://spam.la" title="Spam.la - Fight spam, use an anonymous @spam.la address!">spam.la</a>. Great for forums that you need an e-mail to register with. Anything sent to that domain shows up right on their home page.</p>

<h3>What do you do, Ryan?</h3>

<p>Using my Web designer wizardry, I brazenly post my email <a href="http://ryancannon.com/#hcard" title="My Home Page">right on my homepage</a>. &#8220;What?&#8221; you gasp, &#8220;this goes against all Web designer principals!&#8221; You should be employing some kind of <a href="http://hivelogic.com/enkoder" title="Hivelogic: Enkoder">crazy javascript hack</a>! The problems with this, however, are numerous, namely:</p>

<ul>
<li>The effect of such hacks on devices are unclear</li>
<li>The usefulness of <a href="http://microformats.org/">Microformats</a> and other Web 2.0 goodness is
seriously limited.</li>
<li>Philosophy an d ego: if I let spammers dictate my markup, the 
terrorists have already won.</li>
</ul>

<p>So flying right in the face of <a href="http://alistapart.com/comments/gracefulemailobfuscation?page=2#16">Zeldman&#8217;s advice</a>, I just filter it. Twice. Dreamhost has this <a href="http://wiki.dreamhost.com/index.php?title=Double-Pass_Spam_Filtering_with_Gmail" title="Double-Pass Spam Filtering with Gmail - DreamHost">fancy pants procmail</a> thing that goes through my spam filter, to a magic Gmail address, and then back to my inbox. Amazing!</p>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2007/11/18/e-mail-spam-and-the-magic-plus/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Soup-to-nuts WordPress, PHP5 and MySQL on Mac OS X Leopard</title>
		<link>http://ryancannon.com/2007/11/11/soup-to-nuts-wordpress-php5-and-mysql-on-mac-os-x-leopard</link>
		<comments>http://ryancannon.com/2007/11/11/soup-to-nuts-wordpress-php5-and-mysql-on-mac-os-x-leopard#comments</comments>
		<pubDate>Sun, 11 Nov 2007 08:12:59 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://ryancannon.com/2007/11/11/soup-to-nuts-wordpress-php5-and-mysql-on-mac-os-x-leopard</guid>
		<description><![CDATA[I less-than three Mac OS X Leopard so far, but I ran into a number of issues when I tried to do my first Web development project. It had been so long since I first dug into the Tiger terminal and got everything rolling that I had to re-figure it all out on Leopard&#8211;with a [...]]]></description>
			<content:encoded><![CDATA[<p>I less-than three Mac OS X Leopard so far, but I ran into a number of issues
when I tried to do my first Web development project. It had been
so long since I first dug into the Tiger terminal and got everything rolling
that I had to re-figure it all out on Leopard&#8211;with a few added quirks. Here
are my steps; your milage my vary.</p>

<h3>1. Install MySQL</h3>

<p>MySQL isn&#8217;t installed by default, so I went to the MySQL web site to <a href="http://dev.mysql.com/downloads/mysql/5.0.html" title="MySQL AB :: MySQL 5.0 Downloads">download
MySQL 5.0</a> for OS X. I just use the binary package, and installed the
prefpane as well (silly me).</p>

<h3>2. Start MySQL</h3>

<p>Unfortunately, the MySQL prefpane doesn&#8217;t exactly work in Leopard. I had to
look up how to <a href="http://www.robbyonrails.com/articles/2007/10/27/starting-mysql-after-upgrading-to-os-x-leopard">start MySQL from the terminal</a>. It&#8217;s a simple:</p>

<pre><code>ryan$ sudo /usr/local/mysql/bin/safe_mysqld
</code></pre>

<p>It looks like MySQL&#8217;s socket file exists in a different place than most
applications expect. <a href="http://angry-fly.com/index.cfm/2007/10/26/Fix-for-MySQL-on-Leopard" title="Angry-Fly.com: Fix for MySQL on Leopard">One workaround</a> just symbolically links the
previous location to the current one. I&#8217;m no expert, so that might be a bad
idea.</p>

<h3>3. Enable PHP</h3>

<p>The initial configuration of Apache 2 does not enable PHP by default. Luckily,
Tyler knows how to <a href="http://clickontyler.com/blog/2007/10/how-to-enable-php5-in-mac-os-x-leopard/" title="How to Enable PHP5 In Mac OS X Leopard">enable PHP5 in Leopard</a>: in the apache configuration file,
<code>/private/etc/apache2/httpd.conf</code>, uncomment the line</p>

<pre><code>LoadModule php5_module     libexec/apache2/libphp5.so
</code></pre>

<h3>4. Change default MySQL socket</h3>

<p>If you haven&#8217;t used Angry Fly&#8217;s workaround mentioned above, you have to
<a href="http://forums.mysql.com/read.php?11,182026,182026#msg-182026" title="MySQL AB ::  Leopard Install... Can connect but not through PHP.">change PHP&#8217;s default MySQL socket</a> to it&#8217;s actual value. Do this
by changing the line in <code>/private/etc/php.ini</code> to</p>

<pre><code>mysqli.default_socket = /tmp/mysql.sock
</code></pre>

<h3>5. Enable .htaccess</h3>

<p>Finally, you have to enable <code>.htaccess</code> files again. The <a href="http://clagnut.com/blog/350/">instructions for Tiger</a>
work fine, except that Apache&#8217;s configuration file is no longer in <code>/etc/httpd</code>,
it&#8217;s in <code>/private/etc/apache2</code>.</p>

<h3>6. Modify the default WordPress htaccess file</h3>

<p>Everything was going swimmingly until I tried to enable friendly URLs in
WordPress 2.3.1. I&#8217;m still not sure why this is an issue, but I was getting
403 Forbidden errors after WordPress created a <code>.htaccess</code> file. <a href="http://wordpress.org/support/topic/97602" title="WordPress › Support » .htaccess leads to 403 forbidden">This page</a>
provided me the (somewhat spookey) answer.</p>

<p>And amazingly, I was rolling. Well, I <em>will</em> be rolling, as this
information seeking exercise and the requisite blog post have now kept me up
far past my goal turn-in time.</p>
]]></content:encoded>
			<wfw:commentRss>http://ryancannon.com/2007/11/11/soup-to-nuts-wordpress-php5-and-mysql-on-mac-os-x-leopard/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.781 seconds -->

