<?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"
	>

<channel>
	<title>Welcome to Xenocoder 1.0</title>
	<atom:link href="http://www.xenocoder.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xenocoder.com/blog</link>
	<description>A place to learn and share OS and programming tips, and generally dissect all things digital.</description>
	<pubDate>Tue, 05 Aug 2008 05:39:17 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>iPython on the iPod Touch</title>
		<link>http://www.xenocoder.com/blog/2008/08/04/ipython-on-the-ipod-touch/</link>
		<comments>http://www.xenocoder.com/blog/2008/08/04/ipython-on-the-ipod-touch/#comments</comments>
		<pubDate>Tue, 05 Aug 2008 05:39:17 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/2008/08/04/ipython-on-the-ipod-touch/</guid>
		<description><![CDATA[Well,
I broke down and jailbroke my phone last night. Partially it was just to try it, but also because I was getting sick of the subpar 3rd party apps that were inundating the App Store. After following the instructions via Lifehacker to install Cydia, I was able to install OpenSSH as well as other cool [...]]]></description>
			<content:encoded><![CDATA[<p>Well,</p>
<p>I broke down and jailbroke my phone last night. Partially it was just to try it, but also because I was getting sick of the subpar 3rd party apps that were inundating the App Store. After following the <a href="http://lifehacker.com/398906/jailbreak-iphone-20-with-pwnagetool">instructions via Lifehacker to install Cydia</a>, I was able to install OpenSSH as well as other cool things, like Python.</p>
<p>Then I saw that you could install iPython on the iPhone so I thought, let&#8217;s try it. </p>
<p>So hard was it? With the python package installed it was </p>
<p>easy_install ipython</p>
<p>Seriously.</p>
<p>To lay it out in terms of steps&#8230;</p>
<p>1. <a href="http://lifehacker.com/398906/jailbreak-iphone-20-with-pwnagetool">Install Cydia</a> (The only caveat here is that I got a different SHASUM when I checked the pwnage tool from the macgeekblog site, I then redownloaded from the pwnage mirrors)<br />
2. Follow the instructions to get openSSH up and running.<br />
3. Go into Cydia and under &#8220;sections&#8221; got to &#8220;scripting&#8221;. There they have Python (among others).<br />
4. I also installed a terminal<br />
5. Now you can either go in through the terminal on the iPhone(touch) or SSH in from a differnet computer. Either way, su to root and then you can<br />
6. easy_install ipython</p>
<p>Next of course would be to install Numpy and do folding at home (I&#8217;m kidding!), but this just shows some serious possibilities. </p>
<p>Did I also mention that I installed the NES frontend which can use all the public domain ROMs that are out there? Someone mentioned <a href="http://www.rom-world.com/file.php?id=16249">ROM world</a> and <a href="http://www.theoldcomputer.com/Libarary%27s/Emulation/NES/ROMs/NES_roms_summary.htm">The Old Computer</a> but I haven&#8217;t checked them out yet.</p>
<p>Cool stuff.</p>
<div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div>
<p><!-- technorati tags begin -->
<p style="font-size:10px;text-align:right;">Tags: <a href="http://technorati.com/tag/ipodcomputers%20iphone%20itouch%20pwnage" rel="tag">ipodcomputers iphone itouch pwnage</a></p>
<p><!-- technorati tags end --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/08/04/ipython-on-the-ipod-touch/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Creating Pie Wedge plots in GMT</title>
		<link>http://www.xenocoder.com/blog/2008/08/01/creating-pie-wedge-plots-in-gmt/</link>
		<comments>http://www.xenocoder.com/blog/2008/08/01/creating-pie-wedge-plots-in-gmt/#comments</comments>
		<pubDate>Sat, 02 Aug 2008 01:37:32 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Coding Tips]]></category>

		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Generic Mapping Tools]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/?p=129</guid>
		<description><![CDATA[A coworker recently approached me if asked if I knew how to make Pie Wedge plots in the Generic Mapping tools using the -Sw(w) switch. I had never done this before, but I thought it would be a cool thing to do so I tried my hand a making one.
It was tougher than I thought, [...]]]></description>
			<content:encoded><![CDATA[<p>A coworker recently approached me if asked if I knew how to make Pie Wedge plots in the <a title="The Generic Mapping Tools" href="http://www.google.com/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fgmt.soest.hawaii.edu%2F&amp;ei=KriTSPS9M5OSsQPdvYigCg&amp;usg=AFQjCNGTrq6nEYmC-IkRu_CqBVXhdMEu9Q&amp;sig2=i1C9a0rbJntcXhrDwEhFPg" target="_blank">Generic Mapping tools</a> using the -Sw(w) switch. I had never done this before, but I thought it would be a cool thing to do so I tried my hand a making one.</p>
<p>It was tougher than I thought, and while I have seen these types of plots quite a bit in the fisheries world, there didn&#8217;t seem to be any examples of how to do this. So I thought I would post up here what I did, both for myself in the future and for anyone else in the world who may be interested in this type of plot.</p>
<p>Basically what I want to do is to make a dummy plot with a pie chart centered at every 5&#215;5 degree box with a different size outer circle based on the total number in the box, and wedges representing percentages of that total amount.</p>
<p>For this exercise I am using the PXSY routine of GMT4.2.0 with my default MEASURE_UNIT = in.</p>
<p>To make this chart you have to have 5 columns of data:</p>
<p>Longitude &#8212; Latitude &#8212; Radius &#8212; StartAngle &#8212; EndAngle</p>
<p>So say I want a pie chart to represent how many types of widgets I sold in the area from 160-155W, 18-23N, with each wedge a portion of the widgets and centered in the middle of the 5&#215;5 box. Here&#8217;s the data:</p>
<p>#lon lat blueWidget greenWidget redWidget<br />
-157.5 20.5 200 200 400</p>
<p>So let&#8217;s say I make a map where each inch = 1 degree. The largest that I want my pie wedge diameter is 1 inch, so I know that for this example (only one data point) I will make the radius 0.5. I also know that the total for this example point is 800, so I convert this into angles. I actually have to make 3 rows of data now since I have three widgets. I also converted to 0-360 degrees.</p>
<p>$&gt;cat pienc.xy<br />
#lon lat radius startAngle endAngle<br />
202.5 20.5 0.5 0 90 #end angle is 360 * (200/800)<br />
202.5 20.5 0.5 90 180 #start angle is row-1 end angle<br />
202.5 20.5 0.5 180 360 #Finish circle</p>
<p>So, a nice shell script to plot this up with the output below:</p>
<p>$&gt;cat pienc<br />
#!/bin/ksh<br />
psfile=pie.ps<br />
psbasemap -Jm1 -R200/206/17/23 -Bf1a1g1/f1a1g1WeSn -X1.5 -Y4 -P -K &gt; $psfile<br />
pscoast -Jm -R -O -K -Di -G200/200/200 -W1/0/0/0 &gt;&gt; $psfile<br />
psxy pienc.xy -Sw -Jm -R -O -K &gt;&gt; $psfile<br />
echo &#8220;203 24 12 0 0 6 Pie Chart Example&#8221; | pstext -Jm -R -O -N &gt;&gt; $psfile</p>
<p>$&gt;display pie.ps</p>
<div id="attachment_126" class="wp-caption aligncenter" style="width: 310px"><a href="http://xenocoder.wordpress.com/files/2008/08/pienc.png"><img class="size-medium wp-image-126" src="http://xenocoder.wordpress.com/files/2008/08/pienc.png?w=300" alt="Pie Wedge Plot no Color" width="300" height="293" /></a><p class="wp-caption-text">Pie Wedge Plot no Color</p></div>
<p>So that&#8217;s all well and good, except it would be nice to have different colors for each wedge representing a different widget. To get color in there you have to give a new column of values that will be mapped to a color value in a color lookup table (a cptfile in GMT). This column must be in the third row and then the -C switch must be given in the psxy call.</p>
<p>$&gt;cat pie.xy<br />
#lon lat COLORVALUE radius startAngle endAngle<br />
202.5 20.5 1 0.5 0 90 #end angle is 360 * (200/800)<br />
202.5 20.5 2 0.5 90 180 #start angle is row-1 end angle<br />
202.5 20.5 3 0.5 180 360 #Finish circle</p>
<p>And my cptfile:</p>
<p>$&gt;cat pie.cpt<br />
0 0 0 255   1.1 0 0 255<br />
1.1 0 255 0   2.1 0 255 0<br />
2.1 255 0 0   3.1 255 0 0</p>
<p>The adjusted script:</p>
<p>$&gt;cat pie<br />
#!/bin/ksh<br />
psfile=pie.ps<br />
psbasemap -Jm1 -R200/206/17/23 -Bf1a1g1/f1a1g1WeSn -X1.5 -Y4 -P -K &gt; $psfile<br />
pscoast -Jm -R -O -K -Di -G200/200/200 -W1/0/0/0 &gt;&gt; $psfile<br />
psxy pie.xy -Sw -Jm -R -O -K <strong>-Cpie.cpt</strong> &gt;&gt; $psfile<br />
echo &#8220;203 24 12 0 0 6 Pie Chart Example with Color&#8221; | pstext -Jm -R -O -N &gt;&gt; $psfile</p>
<p>$&gt;display pie.ps</p>
<div id="attachment_127" class="wp-caption aligncenter" style="width: 310px"><a href="http://xenocoder.wordpress.com/files/2008/08/pie.png"><img class="size-medium wp-image-127" src="http://xenocoder.wordpress.com/files/2008/08/pie.png?w=300" alt="PIe Wedge plot with color" width="300" height="293" /></a><p class="wp-caption-text">Pie Wedge plot with color</p></div>
<p>And that&#8217;s pretty much it. Now to go sell some more widgets.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/08/01/creating-pie-wedge-plots-in-gmt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Parallels really does turn OSX into XP!</title>
		<link>http://www.xenocoder.com/blog/2008/07/29/untitled/</link>
		<comments>http://www.xenocoder.com/blog/2008/07/29/untitled/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 06:26:18 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/2008/07/29/untitled/</guid>
		<description><![CDATA[A funny thing happened on the way to forum. I fired up my virtual XP machine yesterday for the first time in a while, and I was prompted to upgrade to build 5608. OK. No problem. So I hit update, downloaded the 88 MB dmg package and waited for it to upgrade. Nothing. Bupkiss. Actually, [...]]]></description>
			<content:encoded><![CDATA[<p>A funny thing happened on the way to forum. I fired up my virtual XP machine yesterday for the first time in a while, and I was prompted to upgrade to build 5608. OK. No problem. So I hit update, downloaded the 88 MB dmg package and waited for it to upgrade. Nothing. Bupkiss. Actually, Parallels just hung, bad. I had to force quit it and try to open the dmg package. No dice, the file was corrupt. I seemed to remember this happening the last time that I went for an automatic updare so I manually downloaded 5608, opened the dmg package and installed the update. </p>
<p>Then the fun began. Not only did Parallels hang when I tried to start the virtual machine, I got the grey screen of death! &#8220;YOU MUST REBOOT YOUR COMPUTER NOW!&#8221; Crap.</p>
<p>Well, looking up the problem in the &#8220;Knowledge base&#8221; I found that &#8220;<a href="http://kb.parallels.com/en/4790">Errors occur when you try to install or update Parallels Desktop, create or open virtual machines, load the required drivers to the guest OS</a>&#8221; The handy solution? Reboot. Repair disk permissions. Reinstall. Why? Because evidently &#8220;Working in Mac OS for long periods of time without restart may lead to some minor glitches to appear in the system as a whole.&#8221;</p>
<p>Yup, feels like XP!
<div class="flockcredit" style="text-align: right; color: #CCC; font-size: x-small;">Blogged with the <a href="http://www.flock.com/blogged-with-flock" style="color: #999; font-weight: bold;" target="_new" title="Flock Browser">Flock Browser</a></div>
<p><!-- technorati tags begin -->
<p style="font-size:10px;text-align:right;">Tags: <a href="http://technorati.com/tag/computers" rel="tag">computers</a>, <a href="http://technorati.com/tag/osx" rel="tag">osx</a></p>
<p><!-- technorati tags end --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/07/29/untitled/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trying Sage mathematical software part II - Running trials (#2) - EOF</title>
		<link>http://www.xenocoder.com/blog/2008/07/28/trying-sage-mathematical-software-part-ii-running-trials-2-eof-3/</link>
		<comments>http://www.xenocoder.com/blog/2008/07/28/trying-sage-mathematical-software-part-ii-running-trials-2-eof-3/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 00:47:01 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/?p=126</guid>
		<description><![CDATA[OK, another night, another trial. I must say, tonight was a lot more fun than the last couple of nights, because I really felt that I learned something, which is really the whole point of this exercise. So the example I was trying to code tonight is a simple EOF of a 3D data series. [...]]]></description>
			<content:encoded><![CDATA[<p>OK, another night, another trial. I must say, tonight was a lot more fun than the last couple of nights, because I really felt that I learned something, which is really the whole point of this exercise. So the example I was trying to code tonight is a simple EOF of a 3D data series. This is something that I just had to code up at work today, so it was a perfect chance for me to try out Sage. For work I ended up altering an existing m-file and running the EOFs in Matlab, but that&#8217;s OK, because now I know what I expect to see after running this in Sage.<br />
The data names have been changed to protect the innocent. </p>
<p><code># Load in required modules<br />
sage: from scipy.io.netcdf import *<br />
sage: from pylab import *<br />
sage: from scipy.stats.stats import nanmean<br />
sage: import datetime</p>
<p>#Load data from NetCDF file<br />
sage: ncfile = netcdf_file(&#8217;file.nc&#8217;,'r&#8217;)<br />
sage: varnames = ncfile.variables.keys()<br />
sage: varnames</p>
<p>['LONGITUDE', 'TIME', 'LATITUDE', 'DATA']</p>
<p>#Now that I have the order I can load into arrays<br />
sage: lon = ncfile.variables[varnames[0]][:]<br />
sage: lat = ncfile.variables[varnames[2]][:]<br />
sage: dates = ncfile.variables[varnames[1]][:]<br />
sage: raw = ncfile.variables[varnames[3]][:,0:50,:] #I only want 50 records in Y<br />
sage: data = raw.copy() #make a copy<br />
sage: data.shape<br />
(124, 50, 151)<br />
sage: (ncycles, ny, nx) = data.shape</p>
<p>#deal with dates<br />
sage: ncfile.variables[varnames[1]].attributes</p>
<p>{&#8217;axis&#8217;: &#8216;TIME&#8217;,<br />
 &#8216;time_origin&#8217;: &#8216;15-JAN-1901 00:00:00&#8242;,<br />
 &#8216;units&#8217;: &#8216;HOURS since 1901-01-15 00:00:00&#8242;}</p>
<p>sage: off = datetime.datetime(1901,1,15,0,0,0)<br />
sage: months = ones(ncycles) <br /> <br />
sage: for i in range(0,ncycles):<br />
&#8230;.tdel = datetime.timedelta(days=dates[i]/24)<br />
&#8230;.td = off + tdel<br />
&#8230;.months[i] = td.month</p>
<p>sage: ind = where(raw&lt;0)<br />
sage: data[ind] = nan<br /></code></p>
<p>And here was the first real bottleneck, as things just slowed to a crawl as python tried to find all the instances where the data was less than zero. This is something that is instantaneous in Matlab, and took over 30 seconds to go through 124*50*151 values. There must be a faster way to do this.</p>
<p><code>data2=data.copy()<br />
#Take out monthly averages<br />
sage: mclim = ones((50,151))<br />
sage: for i in range(1,13):<br />
&#8230;.index = where(months==i)[0]<br />
&#8230;.mclim = nanmean(data[index,:,:])<br />
&#8230;.data2[index,:,:] = data[index,:,:] - mclim</p>
<p>data2.shape = (ncycles, nx*ny)<br />
ltmean = nanmean(data2) #get mean of each time series</p>
<p>#take out long term mean<br />
sage: anom = data2.copy()<br />
sage: for i in range(0,ncycles):<br />
&#8230;.anom[i,:] = data2[i,:] - ltmean</p>
<p>sage: EOF = nan_to_num(anom) #push land back to zero<br />
<strong>sage: [u,s,v] = linalg.svd(EOF)</strong><br />
sage: for i in range(0,ncycles):#build array so that we can project eigenvalues back onto timeseries<br />
&#8230;.s2[i,i] = s[i]<br />
sage: amp = dot(s2.transpose(),u.transpose()) #get amplitude<br />
sage: spatial = v[0:4,:]# pull out spatial fields<br />
sage: ratios = pow(s,2)/sum(pow(s,2))*100 #get %variance explained for each mode<br />
sage: temp = spatial[0,:]<br />
sage: temp.shape = (ny,nx) #push back to original dims<br />
sage: plot(amp)<br />
sage: savefig(&#8217;amplitude.png&#8217;)<br />
sage: imshow(flipud(temp))<br />
sage: savefig(&#8217;spatial.png&#8217;)<br /></code></p>
<p>Success!</p>
<p>I actually really felt positive about this whole example as I really learned a lot more. This also was probably too large of an array to test out (measure twice cut once!) but it&#8217;s what I was working with so I wanted a real world example. The more that I worked in sage the more comfortable I felt as well. The geographic projection issue is still there, as well as some indexing speed issues, but overall, I was really impressed with the Sage/SciPy/NumPy experience today. Overall I feel that more of a transition was made for me last night/today. Which was great timing as a co-worker actually called me and asked if I knew of any free replacements for Matlab&#8230; </p>
<p><!-- Technorati Tags Start --></p>
<p>Technorati Tags:<br />
<a href="http://technorati.com/tag/Computers" rel="tag">Computers</a>, <a href="http://technorati.com/tag/linux" rel="tag">linux</a>, <a href="http://technorati.com/tag/matlab" rel="tag">matlab</a>, <a href="http://technorati.com/tag/programming" rel="tag">programming</a>, <a href="http://technorati.com/tag/python" rel="tag">python</a>, <a href="http://technorati.com/tag/sage" rel="tag">sage</a>, <a href="http://technorati.com/tag/scientific%20programming" rel="tag">scientific programming</a>
</p>
<p><!-- Technorati Tags End --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/07/28/trying-sage-mathematical-software-part-ii-running-trials-2-eof-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trying Sage mathematical software part II - Running trials (#2) - EOF</title>
		<link>http://www.xenocoder.com/blog/2008/07/24/trying-sage-mathematical-software-part-ii-running-trials-2-eof-2/</link>
		<comments>http://www.xenocoder.com/blog/2008/07/24/trying-sage-mathematical-software-part-ii-running-trials-2-eof-2/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 01:42:11 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/?p=124</guid>
		<description><![CDATA[OK, another night, another trial. I must say, tonight was a lot more fun than the last couple of nights, because I really felt that I learned something, which is really the whole point of this exercise. So the example I was trying to code tonight is a simple EOF of a 3D data series. [...]]]></description>
			<content:encoded><![CDATA[<p>OK, another night, another trial. I must say, tonight was a lot more fun than the last couple of nights, because I really felt that I learned something, which is really the whole point of this exercise. So the example I was trying to code tonight is a simple EOF of a 3D data series. This is something that I just had to code up at work today, so it was a perfect chance for me to try out Sage. For work I ended up altering an existing m-file and running the EOFs in Matlab, but that&#8217;s OK, because now I know what I expect to see after running this in Sage.<br />
The data names have been changed to protect the innocent. </p>
<p><code># Load in required modules<br />
sage: from scipy.io.netcdf import *<br />
sage: from pylab import *<br />
sage: from scipy.stats.stats import nanmean<br />
sage: import datetime</p>
<p>#Load data from NetCDF file<br />
sage: ncfile = netcdf_file(&#8217;file.nc&#8217;,'r&#8217;)<br />
sage: varnames = ncfile.variables.keys()<br />
sage: varnames</p>
<p>['LONGITUDE', 'TIME', 'LATITUDE', 'DATA']</p>
<p>#Now that I have the order I can load into arrays<br />
sage: lon = ncfile.variables[varnames[0]][:]<br />
sage: lat = ncfile.variables[varnames[2]][:]<br />
sage: dates = ncfile.variables[varnames[1]][:]<br />
#deal with dates<br />
sage: ncfile.variables[varnames[1]].attributes</p>
<p>{&#8217;axis&#8217;: &#8216;TIME&#8217;,<br />
 &#8216;time_origin&#8217;: &#8216;15-JAN-1901 00:00:00&#8242;,<br />
 &#8216;units&#8217;: &#8216;HOURS since 1901-01-15 00:00:00&#8242;}</p>
<p>sage: off = datetime.datetime(1901,1,15,0,0,0)<br />
sage: months = ones(ncycles) <br /> <br />
sage: for i in range(0,ncycles):<br />
&#8230;.tdel = datetime.timedelta(days=dates[i]/24)<br />
&#8230;.td = off + tdel<br />
&#8230;.months[i] = td.month</p>
<p>sage: raw = ncfile.variables[varnames[3]][:,0:50,:] #I only want 50 records in Y<br />
sage: data = raw.copy() #make a copy<br />
sage: data.shape<br />
(124, 50, 151)<br />
sage: (ncycles, ny, nx) = data.shape<br />
sage: ind = where(raw&lt;0)<br />
sage: data[ind] = nan<br /></code></p>
<p>And here was the first real bottleneck, as things just slowed to a crawl as python tried to find all the instances where the data was less than zero. This is something that is instantaneous in Matlab, and took over 30 seconds to go through 124*50*151 values. There must be a faster way to do this.</p>
<p><code>data2=data.copy()<br />
#Take out monthly averages<br />
sage: mclim = ones((80,151))<br />
sage: for i in range(1,13):<br />
&#8230;.index = where(months==i)[0]<br />
&#8230;.mclim = nanmean(data[index,:,:])<br />
&#8230;.data2[index,:,:] = data[index,:,:] - mclim</p>
<p>data2.shape = (ncycles, nx*ny)<br />
ltmean = nanmean(data2) #get mean of each time series</p>
<p>#take out long term mean<br />
sage: anom = data2.copy()<br />
sage: for i in range(0,ncycles):<br />
&#8230;.anom[i,:] = data2[i,:] - ltmean</p>
<p>sage: EOF = nan_to_num(anom) #push land back to zero<br />
<strong>sage: [u,s,v] = linalg.svd(EOF)</strong><br />
sage: for i in range(0,ncycles):#build array so that we can project eigenvalues back onto timeseries<br />
&#8230;.s2[i,i] = s[i]<br />
sage: amp = dot(s2.transpose(),u.transpose()) #get amplitude<br />
sage: spatial = v[0:4,:]# pull out spatial fields<br />
sage: ratios = pow(s,2)/sum(pow(s,2))*100 #get %variance explained for each mode<br />
sage: temp = spatial[0,:]<br />
sage: temp.shape = (ny,nx) #push back to original dims<br />
sage: plot(amp)<br />
sage: savefig(&#8217;amplitude.png&#8217;)<br />
sage: imshow(flipud(temp))<br />
sage: savefig(&#8217;spatial.png&#8217;)<br /></code></p>
<p>Success!</p>
<p>I actually really felt positive about this whole example as I really learned a lot more. This also was probably too large of an array to test out (measure twice cut once!) but it&#8217;s what I was working with so I wanted a real world example. The more that I worked in sage the more comfortable I felt as well. The geographic projection issue is still there, as well as some indexing speed issues, but overall, I was really impressed with the Sage/SciPy/NumPy experience today. Overall I feel that more of a transition was made for me last night/today. Which was great timing as a co-worker actually called me and asked if I knew of any free replacements for Matlab&#8230; </p>
<p><!-- Technorati Tags Start --></p>
<p>Technorati Tags:<br />
<a href="http://technorati.com/tag/Computers" rel="tag">Computers</a>, <a href="http://technorati.com/tag/linux" rel="tag">linux</a>, <a href="http://technorati.com/tag/matlab" rel="tag">matlab</a>, <a href="http://technorati.com/tag/programming" rel="tag">programming</a>, <a href="http://technorati.com/tag/python" rel="tag">python</a>, <a href="http://technorati.com/tag/sage" rel="tag">sage</a>, <a href="http://technorati.com/tag/scientific%20programming" rel="tag">scientific programming</a>
</p>
<p><!-- Technorati Tags End --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/07/24/trying-sage-mathematical-software-part-ii-running-trials-2-eof-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trying Sage mathematical software part II - Running trials (#2) - EOF</title>
		<link>http://www.xenocoder.com/blog/2008/07/24/trying-sage-mathematical-software-part-ii-running-trials-2-eof/</link>
		<comments>http://www.xenocoder.com/blog/2008/07/24/trying-sage-mathematical-software-part-ii-running-trials-2-eof/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 01:40:56 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/?p=122</guid>
		<description><![CDATA[OK, another night, another trial. I must say, tonight was a lot more fun than the last couple of nights, because I really felt that I learned something, which is really the whole point of this exercise. So the example I was trying to code tonight is a simple EOF of a 3D data series. [...]]]></description>
			<content:encoded><![CDATA[<p>OK, another night, another trial. I must say, tonight was a lot more fun than the last couple of nights, because I really felt that I learned something, which is really the whole point of this exercise. So the example I was trying to code tonight is a simple EOF of a 3D data series. This is something that I just had to code up at work today, so it was a perfect chance for me to try out Sage. For work I ended up altering an existing m-file and running the EOFs in Matlab, but that&#8217;s OK, because now I know what I expect to see after running this in Sage.<br />
The data names have been changed to protect the innocent. </p>
<p><code># Load in required modules<br />
sage: from scipy.io.netcdf import *<br />
sage: from pylab import *<br />
sage: from scipy.stats.stats import nanmean<br />
sage: import datetime</p>
<p>#Load data from NetCDF file<br />
sage: ncfile = netcdf_file(&#8217;file.nc&#8217;,'r&#8217;)<br />
sage: varnames = ncfile.variables.keys()<br />
sage: varnames</p>
<p>['LONGITUDE290_440', 'TT', 'LATITUDE101_180', 'FREQ_HAP']</p>
<p>#Now that I have the order I can load into arrays<br />
sage: lon = ncfile.variables[varnames[0]][:]<br />
sage: lat = ncfile.variables[varnames[2]][:]<br />
sage: dates = ncfile.variables[varnames[1]][:]<br />
#deal with dates<br />
sage: ncfile.variables[varnames[1]].attributes</p>
<p>{&#8217;axis&#8217;: &#8216;TIME&#8217;,<br />
 &#8216;time_origin&#8217;: &#8216;15-JAN-1901 00:00:00&#8242;,<br />
 &#8216;units&#8217;: &#8216;HOURS since 1901-01-15 00:00:00&#8242;}</p>
<p>sage: off = datetime.datetime(1901,1,15,0,0,0)<br />
sage: months = ones(ncycles) <br /> <br />
sage: for i in range(0,ncycles):<br />
&#8230;.tdel = datetime.timedelta(days=dates[i]/24)<br />
&#8230;.td = off + tdel<br />
&#8230;.months[i] = td.month</p>
<p>sage: raw = ncfile.variables[varnames[3]][:,0:50,:] #I only want 50 records in Y<br />
sage: data = raw.copy() #make a copy<br />
sage: data.shape<br />
(124, 50, 151)<br />
sage: (ncycles, ny, nx) = data.shape<br />
sage: ind = where(raw&lt;0)<br />
sage: data[ind] = nan<br /></code></p>
<p>And here was the first real bottleneck, as things just slowed to a crawl as python tried to find all the instances where the data was less than zero. This is something that is instantaneous in Matlab, and took over 30 seconds to go through 124*50*151 values. There must be a faster way to do this.</p>
<p><code>data2=data.copy()<br />
#Take out monthly averages<br />
sage: mclim = ones((80,151))<br />
sage: for i in range(1,13):<br />
&#8230;.index = where(months==i)[0]<br />
&#8230;.mclim = nanmean(data[index,:,:])<br />
&#8230;.data2[index,:,:] = data[index,:,:] - mclim</p>
<p>data2.shape = (ncycles, nx*ny)<br />
ltmean = nanmean(data2) #get mean of each time series</p>
<p>#take out long term mean<br />
sage: anom = data2.copy()<br />
sage: for i in range(0,ncycles):<br />
&#8230;.anom[i,:] = data2[i,:] - ltmean</p>
<p>sage: EOF = nan_to_num(anom) #push land back to zero<br />
<strong>sage: [u,s,v] = linalg.svd(EOF)</strong><br />
sage: for i in range(0,ncycles):#build array so that we can project eigenvalues back onto timeseries<br />
&#8230;.s2[i,i] = s[i]<br />
sage: amp = dot(s2.transpose(),u.transpose()) #get amplitude<br />
sage: spatial = v[0:4,:]# pull out spatial fields<br />
sage: ratios = pow(s,2)/sum(pow(s,2))*100 #get %variance explained for each mode<br />
sage: temp = spatial[0,:]<br />
sage: temp.shape = (ny,nx) #push back to original dims<br />
sage: plot(amp)<br />
sage: savefig(&#8217;amplitude.png&#8217;)<br />
sage: imshow(flipud(temp))<br />
sage: savefig(&#8217;spatial.png&#8217;)<br /></code></p>
<p>Success!</p>
<p>I actually really felt positive about this whole example as I really learned a lot more. This also was probably too large of an array to test out (measure twice cut once!) but it&#8217;s what I was working with so I wanted a real world example. The more that I worked in sage the more comfortable I felt as well. The geographic projection issue is still there, as well as some indexing speed issues, but overall, I was really impressed with the Sage/SciPy/NumPy experience today. Overall I feel that more of a transition was made for me last night/today. Which was great timing as a co-worker actually called me and asked if I knew of any free replacements for Matlab&#8230; </p>
<p><!-- Technorati Tags Start --></p>
<p>Technorati Tags:<br />
<a href="http://technorati.com/tag/Computers" rel="tag">Computers</a>, <a href="http://technorati.com/tag/linux" rel="tag">linux</a>, <a href="http://technorati.com/tag/matlab" rel="tag">matlab</a>, <a href="http://technorati.com/tag/programming" rel="tag">programming</a>, <a href="http://technorati.com/tag/python" rel="tag">python</a>, <a href="http://technorati.com/tag/sage" rel="tag">sage</a>, <a href="http://technorati.com/tag/scientific%20programming" rel="tag">scientific programming</a>
</p>
<p><!-- Technorati Tags End --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/07/24/trying-sage-mathematical-software-part-ii-running-trials-2-eof/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trying Sage mathematical software part II - Running trials (#1) Continued</title>
		<link>http://www.xenocoder.com/blog/2008/07/22/trying-sage-mathematical-software-part-ii-running-trials-1-continued/</link>
		<comments>http://www.xenocoder.com/blog/2008/07/22/trying-sage-mathematical-software-part-ii-running-trials-1-continued/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 07:11:22 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[R]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/?p=120</guid>
		<description><![CDATA[This was quite possibly the worst idea for title naming that I could have thought of. Anyway, I played around a bit more tonight, and I thought that I would give an update to the three people that are waiting with bated breath. 
Anywho, I decided to continue trying to map the data from the [...]]]></description>
			<content:encoded><![CDATA[<p>This was quite possibly the worst idea for title naming that I could have thought of. Anyway, I played around a bit more tonight, and I thought that I would give an update to the three people that are waiting with bated breath. </p>
<p>Anywho, I decided to continue trying to map the data from the netcdf file onto a projection, and here&#8217;s what I ran into.</p>
<p>It looks like the basemap module is installed (as basemap) but that it depends on matplotlib &gt; 0.98 and 0.91 is installed. I tried to be tricky and move my locally installed matplotlib over to the sage/local/lib/python2.5/site-packages directory but then that version of matplotlib needed a newer version of numpy than what was installed. At this point I tried</p>
<p>hostname $&gt; sage -upgrade</p>
<p>to see if updated packages/modules were available. This started a huge chain reaction of downloads and source compiling to get to the latest, greatest versions. This process took exactly 59m10.482s to complete (I know because it told me!).</p>
<p>But once again, I get this error:</p>
<p>sage: from basemap import basemap</p>
<p>ImportError: your matplotlib is too old - basemap requires version 0.98 or higher, you have version 0.91.1</p>
<p>At this point though, it&#8217;s not working on either the linux or OSX platforms due to outdated dependencies, so either I need to find another way to plot mapped projections or use something else. </p>
<p>Again, this isn&#8217;t a knock against Sage, because I really don&#8217;t think that is an ideal test for this software. But honestly, a lot of why I went for this approach was to avoid having to use separate approaches for data manipulation and visualization, and this would be a common task. Matlab&#8217;s mapping toolbox is useless to me for plotting, so I end up using <a href="http://www.eos.ubc.ca/~rich/map.html">m_map</a>, which is still not as good as <a href="http://gmt.soest.hawaii.edu/">GMT</a>, but it gets the job done in house.  </p>
<p>My main thoughts at this point are that it seems easy to get into dependency hell here, as one module upgrade can force another, and so on. At this point it&#8217;s another block of time spent on setup, and no result. Time to stop for the time being.</p>
<p><!-- Technorati Tags Start --></p>
<p>Technorati Tags:<br />
<a href="http://technorati.com/tag/Computers" rel="tag">Computers</a>, <a href="http://technorati.com/tag/linux" rel="tag">linux</a>, <a href="http://technorati.com/tag/Mac%20OS%20X" rel="tag">Mac OS X</a>, <a href="http://technorati.com/tag/programming" rel="tag">programming</a>, <a href="http://technorati.com/tag/python" rel="tag">python</a>, <a href="http://technorati.com/tag/R" rel="tag">R</a>, <a href="http://technorati.com/tag/sage" rel="tag">sage</a>, <a href="http://technorati.com/tag/scientific%20programming" rel="tag">scientific programming</a>
</p>
<p><!-- Technorati Tags End --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/07/22/trying-sage-mathematical-software-part-ii-running-trials-1-continued/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trying Sage mathematical software part II - Running trials (#1)</title>
		<link>http://www.xenocoder.com/blog/2008/07/21/trying-sage-mathematical-software-part-ii-running-trials-1/</link>
		<comments>http://www.xenocoder.com/blog/2008/07/21/trying-sage-mathematical-software-part-ii-running-trials-1/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 07:43:06 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[R]]></category>

		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/?p=118</guid>
		<description><![CDATA[Part 1 of the sage experience was just installing the software. This was incredibly easy on both OSX and linux (CentOS 5.2 and Fedora 9). For the Fedora 9 install I just downloaded the latest version of sage which was compiled for Fedora 8, and this seemed to be just fine.
So for me, I really [...]]]></description>
			<content:encoded><![CDATA[<p>Part 1 of the sage experience was just installing the software. This was incredibly easy on both OSX and linux (CentOS 5.2 and Fedora 9). For the Fedora 9 install I just downloaded the latest version of sage which was compiled for Fedora 8, and this seemed to be just fine.</p>
<p>So for me, I really just wanted to be able to do a few different examples which would be close to &#8220;real world applications&#8221; for me.</p>
<p>Some things that I would like to be able to do in sage:</p>
<p>1. Load in a 2-D NetCDF satellite data file and display it as a map projection. This should be really simple. I would usually just use GMT for this (a small shell script wrapping psbasemap, grdimage, and pscoast).</p>
<p>2. Load in a data series with dates and locations, and match this to corresponding satellite data in time and space. Normally I would use a perl script that I wrote many moons ago to do this. I would basically sort the data, then match a block of data at a time using GMT&#8217;s grdtrack function. I know that this is inefficient, and really I would like to be able to pull extra data in x,y, or t and take the mean or median value, which would be more CPU intensive, but better than matching just one point in space and time to the nearest pixel.</p>
<p>3. Load in a multivariate data series and do multivariate statistics (e.g. LME, GLM/GAM, RDA). This is where the R interface would come into play. Normally I would prepare the data elsewhere, then import the flat table into R and use the R functions. This may involve installing more packages (nlme, mgcv, etc). </p>
<p>4. Load in a 3-D set (x,y,t) of satellite data files and perform an EOF analysis on them (akin to SVD in Matlab). Normally I would do this in Matlab or Ferret. I&#8217;m just curious how easy it would be to do this here. </p>
<p>There are other things that I could do, but these are a few off the top of my head, and things that I am doing now, so it would be incentive to try Sage out with. For tonight, I&#8217;ll just work on #1, which should be really fast.</p>
<p>The data file I&#8217;m using is just a NetCDF file (created by GMT) which I can read with pupynere in python. Here I&#8217;m going to use the scipy.io.netcdf module (which is actually based on pupynere I believe).</p>
<p><code>sage: from scipy.io.netcdf import *<br />
sage: from pylab import *</p>
<p># Read in file metadata to object<br />
sage: ncfile = netcdf_file(&#8217;RS2006001_2006031_sst.grd&#8217;)</p>
<p># get the variables in the data file<br />
sage: ncfile.variables</p>
<p>{&#8217;x': &lt;scipy.io.netcdf.netcdf_variable object at 0xb47b08c&gt;,<br />
&nbsp;&#8217;y': &lt;scipy.io.netcdf.netcdf_variable object at 0xb47b16c&gt;,<br />
&nbsp;&#8217;z': &lt;scipy.io.netcdf.netcdf_variable object at 0xb47b1ec&gt;}</p>
<p># Yank out data<br />
sage: longitude = netcdf.variables['x'][:]<br />
sage: latitude = netcdf.variables['y'][:]<br />
sage: sst = netcdf.variables['z'][:]</p>
<p># just plot sst to test 2D image plotting<br />
sage: plot(sst)<br />
[&lt;matplotlib.AxesImage instance at 0xc03636c&gt;]<br />
</code></p>
<p>Nice, but it&#8217;s upside down. Let&#8217;s flip it vertically.</p>
<p><code><br />
sage: clf<br />
sage: plot(flipud(sst))<br />
[&lt;matplotlib.AxesImage instance at 0xb86a2ac&gt;]<br />
sage: savefig(&#8217;temp.png&#8217;)<br />
</code></p>
<p><a href="http://www.flickr.com/photos/22063547@N05/2692251620" title="View 'RStest' on Flickr.com"><img src="http://farm4.static.flickr.com/3293/2692251620_ce60a09502.jpg" alt="RStest" border="0" width="500" height="375" /></a></p>
<p>Easy, but I want to put this on a projection. Normally I would use the <a href="http://matplotlib.sourceforge.net/matplotlib.toolkits.basemap.basemap.html">basemap</a> tools which are an add on to matplotlib. I don&#8217;t see these installed, and I didn&#8217;t see them in the extra sage packages on line, so I downloaded them from SourceForge and installed them. </p>
<p>The first step you have to do is to install the geos package, just read the README in the geos folder and hit</p>
<p><code>./configure<br />
make</code></p>
<p>and then we get our first epic fail. Something in the geos chain won&#8217;t compile, and I&#8217;m just about fried enough to call it quits for this evening.</p>
<p>At this point I&#8217;ve been playing with this for more than 2 hours, and I still have yet to make a simple map on a projection. There has to be something I&#8217;m missing, but at this point I&#8217;m going to pause until tomorrow. So not the best testing evening, but there are some positives so far. The bundling of most packages is a plus, and the ease of loading in NetCDF files is nice. Data displays well using the Pylab interface, even though I am still forced to save to a file at this point.</p>
<p>So immediate goals:</p>
<p>1. Get a backend working for viewing plots in widgets (akin to ipython -pylab)</p>
<p>2. Get the basemap tools installed so that I can make a map with a projection!</p>
<p><!-- Technorati Tags Start --></p>
<p>Technorati Tags:<br />
<a href="http://technorati.com/tag/Computers" rel="tag">Computers</a>, <a href="http://technorati.com/tag/linux" rel="tag">linux</a>, <a href="http://technorati.com/tag/Mac%20OS%20X" rel="tag">Mac OS X</a>, <a href="http://technorati.com/tag/python" rel="tag">python</a>, <a href="http://technorati.com/tag/R" rel="tag">R</a>, <a href="http://technorati.com/tag/scientific%20programming" rel="tag">scientific programming</a>, <a href="http://technorati.com/tag/sage" rel="tag">sage</a>
</p>
<p><!-- Technorati Tags End --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/07/21/trying-sage-mathematical-software-part-ii-running-trials-1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trying Sage mathematical software part 1 - installation (OSX)</title>
		<link>http://www.xenocoder.com/blog/2008/07/20/trying-sage-mathematical-software-part-1-installation-osx/</link>
		<comments>http://www.xenocoder.com/blog/2008/07/20/trying-sage-mathematical-software-part-1-installation-osx/#comments</comments>
		<pubDate>Mon, 21 Jul 2008 08:02:59 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Computers]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/?p=116</guid>
		<description><![CDATA[In an earlier post I alluded to some thoughts that I had on proprietary vs free open source systems for dealing with scientific data. Somewhat out of time constraints and somewhat out of laziness, I had decided to pretty much just stick with the proprietary status quo system that I had in place, rather than [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://xenocoder.wordpress.com/2008/07/09/matlab-python-or-r-time-versus-money/">an earlier post</a> I alluded to some thoughts that I had on proprietary vs free open source systems for dealing with scientific data. Somewhat out of time constraints and somewhat out of laziness, I had decided to pretty much just stick with the proprietary status quo system that I had in place, rather than commit to the time in learning something new. The double shot of <a href="http://xenocoder.wordpress.com/2008/07/10/matlab-2008a-activation-woes/">my activation woes with Matlab</a> with my recent realization of how much I had been reinventing the wheel by not using Ferret has given me a new perspective, and after a recent comment inviting me to try out <a href="http://www.sagemath.org/index.html">Sage</a> open source mathematical software, I figure that it was time to give it a try.</p>
<p>As Sage is &#8220;a free mathematics software system which combines the power of many existing open-source packages into a common Python-based interface&#8221;, that means that there are many libraries bundled together. These include ipython, numpy, scipy, R, RPy, and more. While I already had many of these installed on my Macbook, rather than look for a solution to cobble things together to save space, I just took the easy route and downloaded the .dmg file to keep everything together in one environment. I&#8217;m not sure if it&#8217;s possible (or even wise) to use existing components (probably not) but I figured that it would be more hassle than it was worth. </p>
<p>The <a href="http://www.sagemath.org/bin/apple_osx/intel/sage-3.0.2-osx10.5-intel-i386-Darwin.dmg">.dmg file</a> is fairly large (~256 MB), but smaller than the last Matlab release, which can put things in perspective. Download also only took about 6 minutes over wireless (&gt;500 KB/sec). Installation was as simple as dragging the sage folder from the mounted .dmg file into my Applications folder. Expanded the folder was pretty hefty (~780 MB), which was larger than the last Matlab release (~680 MB), but not by much.</p>
<p>The next step in the installation instructed me to double click the sage icon (inside the Sage folder), and then change some preferences. When I double clicked it however a terminal fired up and I sage started to work</p>
<p>[user@localbox ~]$ /Applications/sage/sage ; exit;<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| SAGE Version 3.0.2, Release Date: 2008-05-24                       |<br />
| Type notebook() for the GUI, and license() for information.        |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
The SAGE install tree may have moved.<br />
Regenerating Python.pyo and .pyc files that hardcode the install PATH (please wait at most a few minutes)&#8230;<br />
Please do not interrupt this.</p>
<p>Setting permissions of DOT_SAGE directory so only you can read and write it.</p>
<p>After this step I was presented with the sage prompt. Typing in</p>
<p>sage: notebook()</p>
<p>prompted me to create an admin password, and then opened the sage notebook GUI in my default web browser. I closed this down and then went back to the command prompt to start to play with the <a href="http://www.sagemath.org/doc/html/tut/tut.html">Tutorial</a>.</p>
<p>I&#8217;m going to stop here for now, because it&#8217;s late, but I&#8217;ll post more after playing around with sage a bit. I&#8217;ve been through the tutorial a bit, and plotting works, yet on the surface there seems to be an inability to view plots &#8220;on the fly&#8221; with matplotlib, instead having to save and view with an external viewer. Just an extra step, but I as a it used to having graphics on the fly with ipython -pylab. As I said though, I just wanted to talk about installation. Once I give it a fair shake I&#8217;ll post up what I think so far.</p>
<p><!-- Technorati Tags Start --></p>
<p>Technorati Tags:<br />
<a href="http://technorati.com/tag/Computers" rel="tag">Computers</a>, <a href="http://technorati.com/tag/Mac%20OS%20X" rel="tag">Mac OS X</a>, <a href="http://technorati.com/tag/programming" rel="tag">programming</a>, <a href="http://technorati.com/tag/python" rel="tag">python</a>, <a href="http://technorati.com/tag/scientific%20programming" rel="tag">scientific programming</a>
</p>
<p><!-- Technorati Tags End --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/07/20/trying-sage-mathematical-software-part-1-installation-osx/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Apple iTouch 8GB</title>
		<link>http://www.xenocoder.com/blog/2008/07/17/apple-itouch-8gb-2/</link>
		<comments>http://www.xenocoder.com/blog/2008/07/17/apple-itouch-8gb-2/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 23:17:37 +0000</pubDate>
		<dc:creator>xenocoder</dc:creator>
		
		<category><![CDATA[Mac OS X]]></category>

		<guid isPermaLink="false">http://www.xenocoder.com/blog/?p=114</guid>
		<description><![CDATA[Well,
I couldn&#8217;t pass up a good deal on a slightly used 8 GB iPod touch. I mean, it still had the plastic sticky cover on it!
One thing that bugged me was that they seem to sell them now in the store with the January update included, yet this one didn&#8217;t have it. And I can&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>Well,</p>
<p>I couldn&#8217;t pass up a good deal on a slightly used 8 GB iPod touch. I mean, it still had the plastic sticky cover on it!</p>
<p>One thing that bugged me was that they seem to sell them now in the store with the <a href="http://support.apple.com/kb/HT1376">January update</a> included, yet this one didn&#8217;t have it. And I can&#8217;t seem to find the upgrade anywhere. I&#8217;m too much of a scaredy-cat to jailbreak it just yet, but if the 2.0 update doesn&#8217;t come out soon I&#8217;m going to be sorely tempted!</p>
<p>Update 7/17/08</p>
<p>Well, I was able to download the 2.0 firmware upgrade last Friday night, and I feel that it was well worth the $10 charge. It&#8217;s pretty much a whole new level, and while the quality of applications from the app store may vary, I think that this was a real step in the right direction. Too early to really review specific apps, but I know that within the last week I have been using Remote, NetNewsWire, Evernote, Twitterific, SFNetNews, Aurora Feint, WritingPad, and Moonlight Mahjong Lite. I just started playing with MochaVNC Lite as well and there is definite potential. I was able to access computers running Ultra VNC on both XP and Vista.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xenocoder.com/blog/2008/07/17/apple-itouch-8gb-2/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
