<?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>Garrett Bluma</title>
	<atom:link href="http://garrettbluma.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://garrettbluma.com</link>
	<description>Web Developer</description>
	<lastBuildDate>Wed, 08 Feb 2012 03:23:08 +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>PHP isset() performance</title>
		<link>http://garrettbluma.com/2011/11/14/php-isset-performance/</link>
		<comments>http://garrettbluma.com/2011/11/14/php-isset-performance/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 19:57:43 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=1047</guid>
		<description><![CDATA[Since I had done some <a href="/2011/11/12/keep-errors-out-of-php/">PHP benchmarking last week</a>, I wondered about the performance implications of a technique that I use sometimes. In this article I take a quick look at some benchmarks to prove it's worth.]]></description>
			<content:encoded><![CDATA[<p>Since I had done some <a href="/2011/11/12/keep-errors-out-of-php/">PHP benchmarking last week</a>, I wondered about the performance implications of a technique that I use <a href="/2010/12/20/php-error-suppression/">sometimes</a>. Consider the following examples:</p>
<pre>// example 1
if (isset($_SESSION['var1'])) {
  $var1 = mysql_real_escape_string($_SESSION['var1']);
} else {
  $var1 = "";
}

// example 2
$var1 = mysql_real_escape_string(@$_SESSION['var1']);</pre>
<p>Example 1 is much more verbose than example 2. Based on syntax alone I would <em>always</em> choose example 2. However, up until now I've never considered whether there are performance problems with using <tt>@</tt>. Although the notice does not interfere with the program, it is possible that it has a bad influence on performance.</p>
<h3>Test Setup</h3>
<p>I had to run the following tests 1-million times to even reach an order of magnitude that matters -- that alone says that this isn't a BIG issue, but let's continue. Here are the two tests I wrote, each run 1,000,000 times.</p>
<pre>// test 1: using a condition to avoid array-out-of-bounds notice
if (isset($_SESSION['something_that_doesnt_exist']) )
  $a = $_SESSION['something_that_doesnt_exist'];

// test 2: hiding error message and acting cool.
$a = @$_SESSION['something_that_doesnt_exist'];</pre>
<h3>Results</h3>
<pre>Test 1: Total time: 0.12 seconds
Test 2: Total time: 1.04 seconds</pre>
<p>Hiding error messages is 11 times slower than using an if-statement to avoid the error-prone code. There it is. If you have an loop that runs 99% of your application and ALL IT DOES is use <tt>@</tt> then you may want to write that if-statement, but for the rest of us humans, we don't really bat an eye at the handful of places where 0.0000014 seconds are added to a page-load.</p>
<p>Still, I'm glad to know the impact!</p>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/11/14/php-isset-performance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keep Errors out of PHP</title>
		<link>http://garrettbluma.com/2011/11/12/keep-errors-out-of-php/</link>
		<comments>http://garrettbluma.com/2011/11/12/keep-errors-out-of-php/#comments</comments>
		<pubDate>Sat, 12 Nov 2011 07:05:46 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=1034</guid>
		<description><![CDATA[PHP has a number of faults. One of them being that it has two different models for handling errors. In this post I show you how to catch errors as exceptions in existing code.  Also, I do some benchmarks to see if this is even a good idea.]]></description>
			<content:encoded><![CDATA[<p>PHP has a number of faults. One of them being that it has two different models for handling errors.  It's frustrating to setup exception handling in your application only to find out that an error is being thrown and not getting caught.</p>
<pre>Warning: Division by zero in /Users/garrett/.../test.php on line 32</pre>
<p>You can regard these error messages as garbage (to be hidden at the first opportunity), or you can view them as meaningful scenarios that expose a need for code changes.  The latter being the better solution, the former being one that is easily supported by just hiding all errors.  Luckily, capturing these errors is not out of the question.</p>
<p>PHP provides a mechanism to hook into the error handler (quaintly named <tt>set_error_handler()</tt>), which can allow us to kick off an exception.  We'll discuss whether this is a good idea in a moment, but for now let's consider the execution. The following will give use some basic error translation.</p>
<pre>function translate_error_to_exception($errno, $msg, $file, $line) {
  throw new ErrorException( $msg, 0, $errno, $file, $line);
  return false;
}
set_error_handler( "translate_error_to_exception", E_ALL^E_NOTICE );</pre>
<p>This is good, but we also need something to handle some of the more unusual errors too. </p>
<pre>
function translate_shutdown_error_to_exception() {
  $error = error_get_last();
  switch($error['type']) {
    case E_ERROR:
    case E_CORE_ERROR:
    case E_COMPILE_ERROR:
    case E_USER_ERROR:
      throw new ErrorException( $error['message'], 0, $error['type'],
                                $error['file'], $error['line']);
  }
}
register_shutdown_function( "translate_shutdown_error_to_exception");</pre>
<p>That's it, that's ALL we need to capture all meaningful errors as exceptions. And, here's an obligatory example of what I mean!</p>
<pre>try {
    $value = 10/0;
} catch (ErrorException $e) {
    // ...
}</pre>
<p>Now, when do you use it?  THAT's the tricky question.  </p>
<p>I decided to do some benchmarks to see, not only what is possible, but what is ADVISABLE. I ran three tests, in two environments, with 20,000 iterations (times shown in seconds). The three tests were the following.</p>
<p>The two environments were: WITHOUT the above error handlers active (in case they might interact negatively with other code), and then WITH them. And the 20,000 iterations are obviously how many times I looped over the test code. (1,000 was enough to see these trends but I figured 20-times that was sufficient for a blog post. Don't tell me I never did anything for you!) </p>
<p>Here are the code tests</p>
<pre>// Error-free, no-mod
for($i=0; $i&lt;MAX; $i++) {
  $a = 10/10;
}

// Error-full, no mod
for($i=0; $i&lt;MAX; $i++) {
  $a = 10/0;
}

// avoiding the problem code via a conditional, no mod
for($i=0; $i&lt;MAX; $i++) {
  if (0 > 0) {
    $a = 10/0;
  }
}

// Error-free, with mod (same code as first example)
for($i=0; $i&lt;MAX; $i++) {
  $a = 10/10;
}

// Error-full, with exceptions (THIS IS THE INTERESTING ONE!)
for($i=0; $i&lt;MAX; $i++) {
  try {
    $a = 10/0;
  } catch (ErrorException $e) {}
}

// avoiding the problem code via a conditional, with mod
for($i=0; $i&lt;MAX; $i++) {
  if (0 > 0) {
    $a = 10/0;
  }
}</pre>
<p>Okay, got that out of the way. Now the results. <img src='http://garrettbluma.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre>Error-free, no-mod: 0.0132961273193
Error-full, no-mod: 21.1321649551
Conditional, no-mod: 0.0135869979858

Error-free, with-mod: 0.0151519775391
Error-full, with-mod: 1.63587808609
Conditional, with-mod: 0.013237953186</pre>
<p>Let's discuss the mundane first.  Error-free code runs about the same with-or-without the modifications.  Since these don't even interact that's not surprising.  Conditional code also has the same performance -- it seems correct code is better than incorrect code!  Wow, the things you learn...</p>
<p>Anyway, on to the buggy code.  Error-full (that's the one where we were kicking out 'Divide By Zero' errors) actually took a long time (21 seconds).  This is REALLY expensive because PHP feels compelled to output all of the errors to the browser (or in my case the command prompt).  I actually used ob_start()/ob_end_clean() to avoid that (it was 44 seconds without).  Interestingly we also see that the code using exceptions only took 1.6 seconds.  From this we can determine that exceptions are cheaper than errors.  </p>
<p>Exceptions seem to be about 20x faster than errors (in my situation, at least) but using proper avoidance is another 100x faster.</p>
<p>Yes, for all you nay-sayers, we *should* still avoid using exceptions when we can otherwise detect a faulty state.  But if the choice is between exception or error, choose exception -- not only that, but having a consistent system for handling bugs is AMAZING!</p>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/11/12/keep-errors-out-of-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AirPort Scanning from Bash</title>
		<link>http://garrettbluma.com/2011/09/25/airport-scanning-from-bash/</link>
		<comments>http://garrettbluma.com/2011/09/25/airport-scanning-from-bash/#comments</comments>
		<pubDate>Sun, 25 Sep 2011 13:00:57 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=932</guid>
		<description><![CDATA[In Mac OS X you often interact with wireless networks via the top-menu, but you also have access via command-line. In this article I show how to use the command-line version of AirPort to get useful data.]]></description>
			<content:encoded><![CDATA[<p>In the process of writing <a href="http://garrettbluma.com/2011/09/22/monitor-your-services-from-bash/">Monitor Your Web Services form Bash</a>, I realized that there are a few commands that I use in a similar way — why not share them?!</p>
<p>In Mac OS X you often interact with wireless networks via the top-menu, but you also have access via command-line.</p>
<div class="dropshadow" style="text-align:center"><img src="/wp-content/uploads/2011/09/airport1.png" alt="" /></div>
<p>In this above view you can see the signal strength and that it only gives you 5 different values. This is good enough for a casual observation, but for other purposes we may need something better — enter the command line!</p>
<p><strong>1. Scanning the network</strong></p>
<pre>$ export PATH=$PATH:/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources

$ airport -s

    SSID BSSID             RSSI CHANNEL HT CC SECURITY (auth/unicast/group)
2WIRE442 3c:ea:4f:cb:a9:a9 -86  6       N  US WEP
      gb 00:25:4b:07:3f:8d -65  2       Y  US WPA2(PSK/AES/AES)</pre>
<p><strong>2. Viewing Current Connection Strength</strong></p>
<pre>$ airport -I

     agrCtlRSSI: -71
     agrExtRSSI: 0
    agrCtlNoise: -94
    agrExtNoise: 0
          state: running
        op mode: station
     lastTxRate: 104
        maxRate: 130
lastAssocStatus: 0
    802.11 auth: open
      link auth: wpa2-psk
          BSSID: 0:25:4b:7:3f:8d
           SSID: gb
            MCS: 13
        channel: 2</pre>
<p><strong>3. Watching the current connection strength in real-time</strong></p>
<p>Updates twice a second with the details above output. I find this very useful when I'm curious about how</p>
<pre>$ watch -n 0.5 airport -I</pre>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/09/25/airport-scanning-from-bash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitor Your Web Services from Bash</title>
		<link>http://garrettbluma.com/2011/09/22/monitor-your-services-from-bash/</link>
		<comments>http://garrettbluma.com/2011/09/22/monitor-your-services-from-bash/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 22:51:06 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=898</guid>
		<description><![CDATA[A lengthy explanation of a one liner I use to detect when a service is not responding.  Bash-fu included.]]></description>
			<content:encoded><![CDATA[<p>I have a web service that is continually causing me grief. It always fails at inconvenient times and, really, I ought to at least know <em>when</em> it fails.  For other things I usually just use a service like <a href="http://www.uptimerobot.com">Uptime Robot</a>,  but for this one I have different requirements:</p>
<ul>
<li>The service I want to monitor has a firewall that only allows access from a single host.</li>
<li>And on that host, I didn't have permission to install new software. (It's temporary anyway)</li>
<li>But, I <em>do</em> have access to SSH & Bash.</li>
</ul>
<p>Therefore, here is my solution!</p>
<p>The only dependencies that are needed are common commands like <tt>curl</tt>, <tt>watch</tt>, <tt>mail</tt>, and the script I'll show you about.</p>
<p><strong>1. Download and install <a href="http://www.bashcookbook.com/bashinfo/source/bash-4.0/examples/scripts/timeout3">this timeout script</a></strong></p>
<pre>curl -L http://www.bashcookbook.com/bashinfo/source/bash-4.0/examples/scripts/timeout3 > timeout3
chmod +x ./timeout3</pre>
<p><strong>2. Craft your one-liner.</strong></p>
<p>Actual code (You can call this in your terminal or save it to a file):</p>
<pre>watch -n 300 \
  ./timeout3 -t 15 \
    curl -q -X GET http://url \
      || { echo "Cannot access PAGE_NAME. Waited 15 seconds on `date`" \
           | mail -s "Web Site Not Responding" \
             garrett.bluma@gmail.com; }</pre>
<p><strong>3. Done!</strong></p>
<p>Oh, what's that?  One-liners are complex and frustrating? I totally agree -- let's break it down!
<pre>watch -n 300 \</pre>
<p><tt>Watch</tt> is a program for monitoring command line applications output different information between calls.  It calls the same command on a given interval and displays the results. This is handy for watching processes, but <em>here</em> we are using it solely for it's ability to kick off an application at some time interval.  For a more elegant solution feel free to remove this and <em>actually</em> cron the thing.</p>
<pre>  ./timeout3 -t 15 \</pre>
<p><tt>timeout3</tt> is the script we downloaded earlier.  Passing in <tt>-t 15</tt> means that want the command (that is about to be defined) will be allowed to run for 15 seconds -- but once it reaches that limit, <tt>timeout3</tt> will kill it.</p>
<pre>    curl -q -X GET http://url \</pre>
<p>With <tt>curl</tt> we are simply sending a <tt>GET</tt> request to a server (over HTTP).  If we receive a response, we do nothing and fall back to the <tt>watch</tt> command and wait until the next iteration.  However, if this request takes too long however, the process will be interrupted by <tt>timeout3</tt> and exit with an error -- this signals our script to send an email.</p>
<pre>      || { echo "Cannot access PAGE_NAME. Waited 15 seconds on `date`" \
           | mail -s "Web Site Not Responding" \
             garrett.bluma@gmail.com; }</pre>
<p>If the timeout process triggers an error (which we assume means the request took more than 15 seconds), then we send an email. We do this via the <tt>mail</tt> command, which we assign some options to and pass data in via stdin. You could also read it as follows;</p>
<pre>      || { echo "message" \
           | mail -s "title" \
             "recipient"; }</pre>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/09/22/monitor-your-services-from-bash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Quake 2 Source Code Review</title>
		<link>http://garrettbluma.com/2011/09/20/quake-2-source-code-review/</link>
		<comments>http://garrettbluma.com/2011/09/20/quake-2-source-code-review/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 22:20:01 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[Microblog]]></category>
		<category><![CDATA[code-review]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=882</guid>
		<description><![CDATA[<a href="http://fabiensanglard.net/quake2/index.php">Quake 2 Source Code Review</a> -- Fabien Sanglard

Fabien Sanglard has written an amazing review on the insight that the game company id had when developing Quake 2 -- not from the perspective of a gamer but down to the nuts and bolts of program design.]]></description>
			<content:encoded><![CDATA[<div  class="dropshadow" ><img src="/wp-content/uploads/2011/09/quake2.jpg" alt="" width="570" /></div>
<p><a href="http://fabiensanglard.net/quake2/index.php">Quake 2 Source Code Review</a> -- Fabien Sanglard</p>
<p>Fabien Sanglard has written an amazing review on the insight that the game company id had when developing Quake 2 -- not from the perspective of a gamer but down to the nuts and bolts of program design. It is especially interesting for me because I used to hear about many of these features when the game first came out, before I knew anything about programming.</p>
<p>In fact, games like Quake 2 were the stimulus that got me interested in programming in the first place. Hearing about the cryptic-but-astonishing news that John Carmack had broken some previous limit that everyone thought was the ceiling of what games could be. Actually, even the basics of matrix transformations floored me at the beginning.</p>
<p>Ah, those where the good days.</p>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/09/20/quake-2-source-code-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coffeescript Contracts</title>
		<link>http://garrettbluma.com/2011/09/07/coffeescript-contracts/</link>
		<comments>http://garrettbluma.com/2011/09/07/coffeescript-contracts/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 17:46:10 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Microblog]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=865</guid>
		<description><![CDATA[<a href="http://disnetdev.com/contracts.coffee/">contracts.coffee @ GitHub</a>.

Mozilla Research:
<blockquote>Contracts.coffee is a dialect of CoffeeScript with built-in support for contracts. It is inspired by the contract system found in Racket.


Contracts let you clearly—even beautifully—express how your code behaves, and free you from writing tons of boilerplate, defensive code.</blockquote>
Personally, I think that this <em>update</em> to coffeescript is actually more significant that coffeescript itself. The ability to define invariants (static constraints on data) is something badly needed for new projects.

The likeness to Coffeescript contracts and Haskell types is significant and likely to draw a lot of comparison. Haskell folks might argue that it's still not static typed -- and they'd be right -- but I think they would be missing the bigger picture that <em>this is a huge leap forward for usage of invariants </em> in a (somewhat) common language.]]></description>
			<content:encoded><![CDATA[<p><a href="http://disnetdev.com/contracts.coffee/">contracts.coffee @ GitHub</a>.</p>
<p>Mozilla Research:</p>
<blockquote><p>Contracts.coffee is a dialect of CoffeeScript with built-in support for contracts. It is inspired by the contract system found in Racket.</p>
<p>Contracts let you clearly—even beautifully—express how your code behaves, and free you from writing tons of boilerplate, defensive code.</p></blockquote>
<p>Personally, I think that this <em>update</em> to coffeescript is actually more significant that coffeescript itself. The ability to define invariants (static constraints on data) is something badly needed for new projects.</p>
<p>The likeness to Coffeescript contracts and Haskell types is significant and likely to draw a lot of comparison. Haskell folks might argue that it's still not static typed -- and they'd be right -- but I think they would be missing the bigger picture that <em>this is a huge leap forward for usage of invariants </em> in a (somewhat) common language.</p>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/09/07/coffeescript-contracts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The importance of stupidity in scientific research</title>
		<link>http://garrettbluma.com/2011/09/06/the-importance-of-stupidity-in-scientific-research/</link>
		<comments>http://garrettbluma.com/2011/09/06/the-importance-of-stupidity-in-scientific-research/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 20:02:17 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Microblog]]></category>
		<category><![CDATA[science]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=857</guid>
		<description><![CDATA[<a href="http://jcs.biologists.org/content/121/11/1771.full">The importance of stupidity in scientific research</a>.

<a href="http://jcs.biologists.org/content/121/11/1771.full">Martin A. Schwartz:</a>
<blockquote>"... <span>it hit me. Science makes me feel stupid too. It's just that I've gotten used to it. So used to it, in fact, that I actively seek out new opportunities to feel stupid. I wouldn't know what to do without that feeling. I even think it's supposed to be this way. " </span></blockquote>
I read this today and realized that this is the exact same conclusion that I've reached over the last couple years.

Unknowns are good, and we ought to pursue them harder than we currently do — especially in the sciences.  Yes, it's a little bewildering to be set in the midst of so much that could go wrong, but even if you uncover one grain of truth, that's something that perhaps no-one has even seen before.]]></description>
			<content:encoded><![CDATA[<p><a href="http://jcs.biologists.org/content/121/11/1771.full">The importance of stupidity in scientific research</a>.</p>
<p><a href="http://jcs.biologists.org/content/121/11/1771.full">Martin A. Schwartz:</a></p>
<blockquote><p>"... <span>it hit me. Science makes me feel stupid too. It's just that I've gotten used to it. So used to it, in fact, that I actively seek out new opportunities to feel stupid. I wouldn't know what to do without that feeling. I even think it's supposed to be this way. " </span></p></blockquote>
<p>I read this today and realized that this is the exact same conclusion that I've reached over the last couple years.</p>
<p>Unknowns are good, and we ought to pursue them harder than we currently do — especially in the sciences.  Yes, it's a little bewildering to be set in the midst of so much that could go wrong, but even if you uncover one grain of truth, that's something that perhaps no-one has even seen before.</p>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/09/06/the-importance-of-stupidity-in-scientific-research/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neo4j: Intro to Graph Databases Webinar</title>
		<link>http://garrettbluma.com/2011/07/20/neo4j-intro-to-graph-databases-webinar/</link>
		<comments>http://garrettbluma.com/2011/07/20/neo4j-intro-to-graph-databases-webinar/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 14:08:39 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Microblog]]></category>
		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=795</guid>
		<description><![CDATA[<a href="http://blog.neo4j.org/2011/07/recap-intro-to-graph-databases-webinar.html">Neo4j Blog: Recap: Intro to Graph Databases &#124; Webinar Series #1</a>.
<blockquote> Neo4j is a high-performance graph engine with all the features of a mature and robust database.</blockquote>
There are a number of reasons to consider graph databases important — In this webinar Emil Eifrém gives a great presentation on the benefits that graph databases can provide for complex data.

I've been researching <a href="http://en.wikipedia.org/wiki/Graph_theory">Graph Theory</a> over the past couple months and <a href="http://neo4j.org/">Neo4j </a>appears to have hit a sweet spot for operating on graphs.  Specifically, there are a class of problems that are exceedingly difficult to compute in a timely fashion on a relational database.]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.neo4j.org/2011/07/recap-intro-to-graph-databases-webinar.html">Neo4j Blog: Recap: Intro to Graph Databases | Webinar Series #1</a>.</p>
<blockquote><p> Neo4j is a high-performance graph engine with all the features of a mature and robust database.</p></blockquote>
<p>There are a number of reasons to consider graph databases important — In this webinar Emil Eifrém gives a great presentation on the benefits that graph databases can provide for complex data.</p>
<p>I've been researching <a href="http://en.wikipedia.org/wiki/Graph_theory">Graph Theory</a> over the past couple months and <a href="http://neo4j.org/">Neo4j </a>appears to have hit a sweet spot for operating on graphs.  Specifically, there are a class of problems that are exceedingly difficult to compute in a timely fashion on a relational database.</p>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/07/20/neo4j-intro-to-graph-databases-webinar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>High Performance Python Tutorial by Ian Ozsvald</title>
		<link>http://garrettbluma.com/2011/07/13/high-performance-python-tutorial-by-ian-ozsvald/</link>
		<comments>http://garrettbluma.com/2011/07/13/high-performance-python-tutorial-by-ian-ozsvald/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 20:57:01 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[Microblog]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=784</guid>
		<description><![CDATA[<a href="http://ianozsvald.com/2011/06/29/high-performance-python-tutorial-v0-1-from-my-4-hour-tutorial-at-europython-2011/">High Performance Python Tutorial v0.1 &#124; Entrepreneurial Geekiness</a>.

(hint: look for the PDF file or you'll miss the wealth of it — all 46 pages!)

Normally I'm cautious about performance metrics — they have a tendency to compare dissimilar technologies and often avoid important details (like standard deviations) — but with this article, by <a href="http://ianozsvald.com/about-me/">Ian Ozsvald, </a>I am quite thrilled with the completeness of his results.

He goes through a number of different scenarios implementing an algorithm in python and the available ways to tune the code using traditional methods (<a href="http://numpy.scipy.org/">numpy </a>and <a href="http://pypy.org/">pypy</a>) and non-traditional methods (<a href="http://documen.tician.de/pycuda/">pyCUDA</a>, <a href="http://cython.org/">cython</a>, <a href="http://code.google.com/p/shedskin/">shedskin</a>, and <a href="http://www.parallelpython.com/">ParallelPython</a>), all the while comparing the relative performance and difficulty of implementing the code.

I wouldn't mind seeing more articles like this!]]></description>
			<content:encoded><![CDATA[<p><a href="http://ianozsvald.com/2011/06/29/high-performance-python-tutorial-v0-1-from-my-4-hour-tutorial-at-europython-2011/">High Performance Python Tutorial v0.1 | Entrepreneurial Geekiness</a>.</p>
<p>(hint: look for the PDF file or you'll miss the wealth of it — all 46 pages!)</p>
<p>Normally I'm cautious about performance metrics — they have a tendency to compare dissimilar technologies and often avoid important details (like standard deviations) — but with this article, by <a href="http://ianozsvald.com/about-me/">Ian Ozsvald, </a>I am quite thrilled with the completeness of his results.</p>
<p>He goes through a number of different scenarios implementing an algorithm in python and the available ways to tune the code using traditional methods (<a href="http://numpy.scipy.org/">numpy </a>and <a href="http://pypy.org/">pypy</a>) and non-traditional methods (<a href="http://documen.tician.de/pycuda/">pyCUDA</a>, <a href="http://cython.org/">cython</a>, <a href="http://code.google.com/p/shedskin/">shedskin</a>, and <a href="http://www.parallelpython.com/">ParallelPython</a>), all the while comparing the relative performance and difficulty of implementing the code.</p>
<p>I wouldn't mind seeing more articles like this!</p>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/07/13/high-performance-python-tutorial-by-ian-ozsvald/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firmin, a JavaScript animation library using CSS transforms and transitions</title>
		<link>http://garrettbluma.com/2011/07/13/firmin-a-javascript-animation-library-using-css-transforms-and-transitions/</link>
		<comments>http://garrettbluma.com/2011/07/13/firmin-a-javascript-animation-library-using-css-transforms-and-transitions/#comments</comments>
		<pubDate>Wed, 13 Jul 2011 20:26:38 +0000</pubDate>
		<dc:creator>Garrett Bluma</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Microblog]]></category>

		<guid isPermaLink="false">http://garrettbluma.com/?p=780</guid>
		<description><![CDATA[<a href="http://extralogical.net/projects/firmin/">Firmin, a JavaScript animation library using CSS transforms and transitions</a>.

With all the benefits that CSS transforms and animations can offer -- namely better performance &#38; lower power consuption -- it would make sense to wrap it in an API similar to what we've seen with other javascript APIs.
<blockquote><span class="Apple-style-span" style="color: #1a1a1a; font-family: Georgia, 'Times New Roman', Times, sans-serif; font-size: 14px; line-height: 21px;">The animation of transform properties can be hardware accelerated because modifying them doesn’t force a <span style="color: #1e4f69;"><span class="Apple-style-span" style="border-bottom-width: 1px; border-style: initial; border-color: initial; outline-style: initial; outline-color: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-bottom-style: solid; border-bottom-color: #a3becc;">reflow</span></span> of the page; </span>

-- <a href="http://extralogical.net/articles/firmin-javascript-animation.html">Extralogical.net</a></blockquote>]]></description>
			<content:encoded><![CDATA[<p><a href="http://extralogical.net/projects/firmin/">Firmin, a JavaScript animation library using CSS transforms and transitions</a>.</p>
<p>With all the benefits that CSS transforms and animations can offer -- namely better performance &amp; lower power consuption -- it would make sense to wrap it in an API similar to what we've seen with other javascript APIs.</p>
<blockquote><p><span class="Apple-style-span" style="color: #1a1a1a; font-family: Georgia, 'Times New Roman', Times, sans-serif; font-size: 14px; line-height: 21px;">The animation of transform properties can be hardware accelerated because modifying them doesn’t force a <span style="color: #1e4f69;"><span class="Apple-style-span" style="border-bottom-width: 1px; border-style: initial; border-color: initial; outline-style: initial; outline-color: initial; background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: transparent; border-bottom-style: solid; border-bottom-color: #a3becc;">reflow</span></span> of the page; </span></p>
<p>-- <a href="http://extralogical.net/articles/firmin-javascript-animation.html">Extralogical.net</a></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://garrettbluma.com/2011/07/13/firmin-a-javascript-animation-library-using-css-transforms-and-transitions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using memcached
Database Caching using memcached
Object Caching 463/593 objects using memcached

Served from: garrettbluma.com @ 2012-02-08 00:05:15 -->
