<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2819289463806343834</id><updated>2012-03-16T12:37:10.160-07:00</updated><category term='activemq'/><title type='text'>Doing the needful...</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-1563077213848184314</id><published>2011-01-11T07:55:00.000-08:00</published><updated>2011-01-11T09:12:23.421-08:00</updated><title type='text'>Giving structure to your monitoring [Part 1: Local and remote monitoring]</title><content type='html'>&lt;p&gt;I've spent the last couple of years at CERN working on building monitoring infrastructures for grid systems. &amp;nbsp;Recently a colleague asked about a taxonomy of monitoring and I dredged up the &lt;a href="https://twiki.cern.ch/twiki/pub/LCG/GridServiceMonitoringInfo/0702-Monitoring_for_Service_Developers.pdf"&gt;original taxonomy [PDF]&lt;/a&gt; we came up with three years ago. &amp;nbsp;It seems to have stood the test of time and I think is still useful as a way to structure your metrics and decide which tool should gather, store and process the metrics. &amp;nbsp;I want to revisit some of the concepts raised there&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;Local and remote monitoring&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;&amp;nbsp;&lt;/span&gt;The first concept examined in the paper was that of local and remote monitoring systems. &amp;nbsp;It was logical then to split monitoring into local and remote, meaning either on the site/data center where the services resided, or external to it.  In 2007 mostly the monitoring services were local, integrated into the fabric, for example Nagios, ganglia, cacti, ....  The exception tended to be lightweight 'ping' style services for HTTP.  Now with the rise of cloud I see a shift in this - some PaaS monitoring offerings like &lt;a title="Circonus" href="http://circonus.com/" target="_blank"&gt;Circonus&lt;/a&gt; are basically by default remote, with the ability to add a local 'enterprise monitoring' component. This makes sense especially for things you want to do analytics or complex event processing on. &amp;nbsp;&lt;/p&gt;&lt;p&gt;A nice split emerges in such a system where the local monitoring component is really responsible for the operation of the underlying infrastructure and the remote monitoring provides rich information on the performance of the application, often in terms of components that the business as well as operations understand. &amp;nbsp;Again in the cloud this can be supplied by the IaaS provider - the acquisition of &lt;a href="https://www.cloudkick.com/" target="_blank"&gt;CloudKick&lt;/a&gt; by Rackspace points to the IaaS players trying to build out expertise and services in this area. &amp;nbsp;Amazon is also trying to grow here with their recent offering of &lt;a href="http://aws.typepad.com/aws/2010/12/new-features-for-amazon-cloudwatch.html"&gt;free basic CloudWatch monitoring&lt;/a&gt; along with alarms on top of the monitoring metrics.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;The new players&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Since 2007, new open-source monitoring offerings have also come into the market - often as offshoots from internal projects. &amp;nbsp;They include:&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://labs.omniti.com/labs/reconnoiter" target="_blank"&gt;Reconnoiter&lt;/a&gt; (rebundled as a PaaS offering as Circonus, and also part of the Cloudkick infrastructure). Based on the experience of OmniTI of running super large websites&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://graphite.wikidot.com/" target="_blank"&gt;Graphite&lt;/a&gt;. Scalable storage and display of performance metrics&lt;/li&gt;&lt;li&gt;&lt;a href="http://opentsdb.net/index.html" target="_blank"&gt;OpenTSDB&lt;/a&gt;. Open sourced version of StumbleUpons internal monitoring systems. &amp;nbsp;Built on top of HBase and able to scale to billions of data points.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These are interesting as they focus more on the higher level monitoring functions such as trending and fault detection by complex correlations of metrics as well as moving past RRD for display and storage of performance data. &amp;nbsp;There's a lot of work here still to do for these projects - documentation is sparse and packaging and integration in distributions is weak, but they are looking in interesting directions for solving the storage, visualisation and analysis of metrics.&lt;/p&gt;&lt;p&gt;I'll follow up in separate postings on some of the other areas we looked at - status and performance metrics and categorization of metrics.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-1563077213848184314?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/1563077213848184314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=1563077213848184314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/1563077213848184314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/1563077213848184314'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2011/01/giving-structure-to-your-monitoring.html' title='Giving structure to your monitoring [Part 1: Local and remote monitoring]'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-5170578279036002707</id><published>2011-01-10T06:58:00.000-08:00</published><updated>2011-01-10T06:58:00.347-08:00</updated><title type='text'>Resolutions for 2011</title><content type='html'>&lt;p&gt;2011 is set to be a year of big change for me as I leave CERN after 8 years. &amp;nbsp;So I thought it was a good year to write down some resolutions (for the first time ever!). &amp;nbsp;I think it's going to be important for me not to be too mono-focussed on any one area in particular this year, so some resolutions for Body, Speech and Mind:&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;Body&lt;/span&gt;&lt;/p&gt;&lt;p&gt;In general I need to work a bit more on mountain fitness - I ran 1:42 for a half marathon this year, it'd be nice to get the training in to pull that under 1:40&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Run 1080 Kilometres (I did ~950 last year)&lt;/li&gt;&lt;li&gt;Enter 7 races (I did 3 last year)&lt;/li&gt;&lt;li&gt;Complete 21 ski tours (~3 last year)&lt;/li&gt;&lt;li&gt;21 other 'mountain days' - trail running, climbing, hiking&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;Speech&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This year I want to write more, both code and text. &amp;nbsp;Especially since I won't have morning coffee colleagues to talk to (other than my cat!), I'm going to try and publish more stuff on this blog and twitter..&lt;/p&gt;&lt;ul&gt;&lt;li&gt;49 blog entries&lt;/li&gt;&lt;li&gt;108 &lt;a href="http://twitter.com/#!/jamesc_000"&gt;tweets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;7 new open-source projects on &lt;a href="../../&amp;quot;http:/github.com/jamesc"&gt;github&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size: medium;"&gt;Mind&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Learn a new language (tibetan, hindi ?) to basic conversational level&lt;/li&gt;&lt;li&gt;Learn a new computer language (Erlang ?)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Let's see in 12 months how I did...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-5170578279036002707?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/5170578279036002707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=5170578279036002707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5170578279036002707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5170578279036002707'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2011/01/resolutions-for-2011.html' title='Resolutions for 2011'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-2312313762658167244</id><published>2011-01-06T04:32:00.001-08:00</published><updated>2011-01-06T04:33:45.901-08:00</updated><title type='text'>4 years of development activity in under 2 minutes</title><content type='html'>&lt;p&gt;We started the WLCG Grid Monitoring Subversion repository in June 2007. &amp;nbsp;For nearly four years it's been the home of the majority of the monitoring tools used to monitor the WLCG infrastructure. &amp;nbsp;Now courtesy of &lt;a title="gource" href="http://code.google.com/p/gource/" target="_blank"&gt;gource&lt;/a&gt;&amp;nbsp;here's a 2 minute visualisation of all the checkins over that period.&lt;/p&gt;&lt;p&gt;Stats: 38 commiters, 4898 commits, 450K LoC....&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;iframe src="http://player.vimeo.com/video/18361065" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;&lt;p&gt;&lt;a href="http://vimeo.com/18361065"&gt;WLCG Monitoring SVN repository visualisation&lt;/a&gt; from &lt;a href="http://vimeo.com/user5627326"&gt;James Casey&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-2312313762658167244?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/2312313762658167244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=2312313762658167244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/2312313762658167244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/2312313762658167244'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2011/01/4-years-of-development-activity-in.html' title='4 years of development activity in under 2 minutes'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-4162507675181192399</id><published>2011-01-06T04:10:00.000-08:00</published><updated>2011-01-06T04:14:31.058-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='activemq'/><title type='text'>New Activemq yum repository (and 5.4.2 rpms)</title><content type='html'>I got around to setting up a new yum repository to store my activemq rpms.&lt;br /&gt;&lt;br /&gt;You can find it at &lt;a href="http://packages.platform14.net/repo/activemq/"&gt;http://packages.platform14.net/repo/activemq/&lt;/a&gt;. Currently I've got RHEL/Centos5 packages there. &amp;nbsp;I'll put up a koji instance there soon and add Fedora13/Fedora14 package too.  they all build out of my github repository : &lt;a href="https://github.com/jamesc/apache-activemq/"&gt;https://github.com/jamesc/apache-activemq&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To enable, here's a .repo file:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;[activemq-centos]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;name=activemq-centos&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;failovermethod=priority&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;baseurl=http://packages.platform14.net/repo/activemq/centos/5/$basearch/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;enabled=1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;gpgcheck=0&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;[activemq-source]&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;name=activemq-source&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;failovermethod=priority&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;baseurl=http://packages.platform14.net/repo/activemq/centos/5/SRPMS/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;enabled=1&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;gpgcheck=0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It currently contains the latest 5.4.2 RPMS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-4162507675181192399?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/4162507675181192399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=4162507675181192399' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/4162507675181192399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/4162507675181192399'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2011/01/new-activemq-yum-repository-and-542.html' title='New Activemq yum repository (and 5.4.2 rpms)'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-4337724707604910132</id><published>2010-12-19T08:48:00.000-08:00</published><updated>2010-12-19T08:49:11.038-08:00</updated><title type='text'>Activemq Rpms</title><content type='html'>Due to SSL issues on our koji build server it seems some people can't get at the RPMs.&lt;br /&gt;&lt;br /&gt;Anyway, here are direct links for different versions:&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;for 5.3.2:&lt;/h2&gt;&lt;a href="http://koji.afroditi.hellasgrid.gr/packages/activemq/5.3.2/3.el5/x86_64/activemq-5.3.2-3.el5.x86_64.rpm"&gt;http://koji.afroditi.hellasgrid.gr/packages/activemq/5.3.2/3.el5/x86_64/activemq-5.3.2-3.el5.x86_64.rpm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://koji.afroditi.hellasgrid.gr/packages/activemq/5.3.2/3.el5/x86_64/activemq-client-5.3.2-3.el5.x86_64.rpm"&gt;http://koji.afroditi.hellasgrid.gr/packages/activemq/5.3.2/3.el5/x86_64/activemq-client-5.3.2-3.el5.x86_64.rpm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;for 5.4.1:&lt;/h2&gt;&lt;a href="http://koji.afroditi.hellasgrid.gr/packages/activemq/5.4.1/1.el5/x86_64/activemq-5.4.1-1.el5.x86_64.rpm"&gt;http://koji.afroditi.hellasgrid.gr/packages/activemq/5.4.1/1.el5/x86_64/activemq-5.4.1-1.el5.x86_64.rpm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://koji.afroditi.hellasgrid.gr/packages/activemq/5.4.1/1.el5/x86_64/activemq-client-5.4.1-1.el5.x86_64.rpm"&gt;http://koji.afroditi.hellasgrid.gr/packages/activemq/5.4.1/1.el5/x86_64/activemq-client-5.4.1-1.el5.x86_64.rpm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://koji.afroditi.hellasgrid.gr/packages/activemq/5.4.1/1.el5/x86_64/activemq-client-5.4.1-1.el5.x86_64.rpm"&gt;&lt;/a&gt;I'll work on a better &amp;nbsp;solution with a public yum repo for this in the next days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-4337724707604910132?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/4337724707604910132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=4337724707604910132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/4337724707604910132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/4337724707604910132'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2010/12/activemq-rpms.html' title='Activemq Rpms'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-6183758878550772490</id><published>2010-09-14T06:58:00.001-07:00</published><updated>2010-09-14T06:58:47.461-07:00</updated><title type='text'>Fudge in Python</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I though &lt;a href='http://www.fudgemsg.org/display/FDG/Fudge+Messaging+Home'&gt;Fudge&lt;/a&gt; was an interesting format for messaging when &lt;a href='http://kirkwylie.blogspot.com/2009/11/announcing-release-of-fudge-messaging.html'&gt;Kirk Wylie first mentioned it&lt;/a&gt; last year.  Since then C and C++ libraries have appeared alongside the original Java and .Net.  Fudge, along with being a strongly-typed, extensible, self-describing format has some nice ideas, such as taxonomies that look like a good fit for some of our messaging use-cases, such as sending GLUE records over messaging.  In &lt;a href='http://forge.gridforum.org/sf/go/doc14185%5C'&gt;GLUE&lt;/a&gt;, &lt;a href='https://twiki.cern.ch/twiki/bin/view/EGEE/GlueUse'&gt;keys are long&lt;/a&gt; and a taxomomy would help to reduce the byte count on the wire by a lot.  Also the typed nature gives us a big advantage over LDAP, and would save on lots of type conversions.&lt;br/&gt;&lt;br/&gt;Another interesting usage (once you have a python implementation) would be automatic translation from Django Models to Fudge messages.  This could work very well with django-celery as a custom serializer.&lt;br/&gt;&lt;br/&gt;With some time on my hands I decided to take a crack at a Python implementation of the specification.  The specification is short, and detailed enough to work from but diving into the reference implementations is highly recommended if you have any doubts on what should be done.  &lt;br/&gt;&lt;br/&gt;A few days work has lead to a basic implementation up and running with all basic types working (except for date types).  There still is a lot missing, including recursive Fudge messages, taxonomies, context objects, streaming interfaces and better accessors for fields in a fudge Message object.  A lot of these are the next higher level functionality on top of the basic encoding/decoding functionality.&lt;br/&gt;&lt;br/&gt;The code is now up at &lt;a href='http://github.com/jamesc/Fudge-Python' target='_blank'&gt;github&lt;/a&gt;, expect changes in the next few days as I flesh out the implementation.&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=a340e379-a73c-8852-8b70-2afea8022bab' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-6183758878550772490?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/6183758878550772490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=6183758878550772490' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/6183758878550772490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/6183758878550772490'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2010/09/fudge-in-python.html' title='Fudge in Python'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-3347719507174983070</id><published>2010-06-03T11:57:00.001-07:00</published><updated>2010-06-03T11:57:45.685-07:00</updated><title type='text'>(Some) Java apps run faster on fewer cores...</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;From Paul Tyma: &lt;a href='http://mailinator.blogspot.com/2010/02/how-i-sped-up-my-server-by-factor-of-6.html'&gt;Mailinator(tm) Blog: How I sped up my server by a factor of 6&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Odd effects of reducing #cores for the JVM to improve message throughput.&lt;br/&gt;&lt;blockquote/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=afbda76f-6d6c-817e-a209-f2e9cb85799e' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-3347719507174983070?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/3347719507174983070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=3347719507174983070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/3347719507174983070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/3347719507174983070'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2010/06/some-java-apps-run-faster-on-fewer.html' title='(Some) Java apps run faster on fewer cores...'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-7788932452569422382</id><published>2010-05-25T06:57:00.003-07:00</published><updated>2010-05-25T06:57:56.557-07:00</updated><title type='text'>ActiveMQ Advisories and STOMP</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://activemq.apache.org/advisory-message.html'&gt;Advisory Messages&lt;/a&gt; in ActiveMQ are pretty useful, but since I mostly use STOMP clients I never really knew how useful !  I was blocked by &lt;a href='https://issues.apache.org/activemq/browse/AMQ-2098'&gt;this&lt;/a&gt; so prompted by a mail from Gary Tully on the &lt;font face='monospace'&gt;activemq-users&lt;/font&gt; list and a long weekend coming up I sat down and tried to work out just what was needed.  In the end, after a brief diversion into why &lt;font face='monospace'&gt;JmsFrameTranslator&lt;/font&gt; isn't actually used in the server, I got a pretty simple implementation up and running.  This was aided by XStream already being a dependency and it having pretty good JSON support.  Some tests later and I have a first implementation.&lt;br/&gt;&lt;br/&gt;The internal openwire DataStructure objects are now marshalled into the STOMP message body as JSON.  An example Advosiry sent to &lt;font face='monospace'&gt;/topic/ActiveMQ.Advisory.Consumer.Queue.&amp;gt;&lt;/font&gt;:&lt;br/&gt;&lt;br/&gt;&lt;code&gt;{"ConsumerInfo": {&lt;br/&gt;  "commandId": 4,&lt;br/&gt;  "responseRequired": true,&lt;br/&gt;  "consumerId": {&lt;br/&gt;    "connectionId": "ID:pb-d-128-141-235-87.cern.ch-52535-1274794978077-4:1",&lt;br/&gt;    "sessionId": 1,&lt;br/&gt;    "value": 1&lt;br/&gt;  },&lt;br/&gt;  "destination": {&lt;br/&gt;    "@class": "ActiveMQQueue",&lt;br/&gt;    "string": "testConsumerAdvisory",&lt;br/&gt;    "null": {}&lt;br/&gt;  },&lt;br/&gt;  "prefetchSize": 1000,&lt;br/&gt;  "maximumPendingMessageLimit": 0,&lt;br/&gt;  "browser": false,&lt;br/&gt;  "dispatchAsync": true,&lt;br/&gt;  "noLocal": false,&lt;br/&gt;  "exclusive": false,&lt;br/&gt;  "retroactive": false,&lt;br/&gt;  "priority": 0,&lt;br/&gt;  "optimizedAcknowledge": false,&lt;br/&gt;  "noRangeAcks": false&lt;br/&gt;}}&lt;br/&gt;&lt;/code&gt;&lt;br/&gt;&lt;br/&gt;The code supports automatically supports all command objects that could be marshalled.  One little problem is how the &lt;font face='monospace'&gt;"destination"&lt;/font&gt; object is marshalled.  Not sure why we get the &lt;font face='monospace'&gt;@class&lt;/font&gt; in there.&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=e5095cd4-5f03-84a7-9062-aaa3ae4511fc' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-7788932452569422382?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/7788932452569422382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=7788932452569422382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/7788932452569422382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/7788932452569422382'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2010/05/activemq-advisories-and-stomp.html' title='ActiveMQ Advisories and STOMP'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-5227344966629751799</id><published>2010-05-16T03:32:00.001-07:00</published><updated>2011-01-21T05:57:29.527-08:00</updated><title type='text'>Producing RPMs for Apache ActiveMQ</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;b&gt;Edit (11-01-21) :  See the more recent post on &lt;a href="http://justdotheneedful.blogspot.com/2011/01/new-activemq-yum-repository-and-542.html"&gt;a new YUM repo and ActiveMQ 5.4.2 rpms&lt;/a&gt;&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;All of the deployment we do is via RPM and a big gap for us has long been the lack of RPMs for &lt;a href="http://fusesource.com/products/enterprise-activemq/"&gt;FUSE Message Broker&lt;/a&gt;/ &lt;a href="http://activemq.apache.org/"&gt;Apache ActiveMQ&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We've had our own hand-rolled rpms for a while now, and when I saw Dejan working on rpms via the maven plugin for ActiveMQ I offered to submit upstream what we have.&amp;nbsp; It's taken a bit of time to clean it up, but now it's all ready.&lt;br /&gt;&lt;br /&gt;Our main deployment platform is &lt;a href="https://www.scientificlinux.org/"&gt;Scientific Linux 5&lt;/a&gt;, based on RHEL 5.&amp;nbsp; We try where possible to submit things upstream via &lt;a href="https://fedoraproject.org/wiki/EPEL"&gt;EPEL&lt;/a&gt;, and this means we need to comply with the Fedora &lt;a href="https://fedoraproject.org/wiki/EPEL/GuidelinesAndPolicies"&gt;packaging guidelines&lt;/a&gt;.&amp;nbsp; For Java you must build from source and you can't package dependencies in your rpm, so for a &lt;b&gt;'real'&lt;/b&gt; ActiveMQ rpm I'm going to have to build all the dependencies (and that includes all the camel dependencies too).&amp;nbsp; For such an old OS versions as RHEL5 I think this isn't worth it, but it's on my project list to try and do this for the upcoming RHEL6 release.&lt;br /&gt;&lt;br /&gt;Anyway, what does this mean for ActiveMQ rpms now ?&amp;nbsp; Basically they're 'built' from a binary tarball coming from the Apache dist web server.&amp;nbsp; The rpm does some repackaging to make things a bit more linux-like in terms of directory locations and also applies some small patches (&lt;a href="https://issues.apache.org/activemq/browse/AMQ-2726"&gt;AMQ-2726&lt;/a&gt; , &lt;a href="https://issues.apache.org/activemq/browse/AMQ-2727"&gt;AMQ-2727&lt;/a&gt;) which I'm waiting to get integrated upstream. &lt;br /&gt;&lt;br /&gt;Everything is released for now on &lt;a href="http://github.com/jamesc/apache-activemq"&gt;github&lt;/a&gt; and I hope it gets merged upstream at some point - keep an eye on &lt;a href="https://issues.apache.org/activemq/browse/AMQ-2105"&gt;this bug (AMQ-2105)&lt;/a&gt; for progress.&amp;nbsp; If you want to build for yourself, just grab the code and do a &lt;span style="font-family: Courier New;"&gt;make&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Built rpms for Centos5/RHEL5/SLC5 are on &lt;a href="https://koji.afroditi.hellasgrid.gr/koji/packageinfo?packageID=491"&gt;our build system&lt;/a&gt;.&amp;nbsp; Enjoy !&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="zemanta-pixie" style="height: 15px; margin-top: 10px;"&gt;&lt;a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/451aa6ed-0022-8941-8056-f531c107c00c/" title="Reblog this post [with Zemanta]"&gt;&lt;img alt="Reblog this post [with Zemanta]" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=451aa6ed-0022-8941-8056-f531c107c00c" style="border: medium none; float: right;" /&gt;&lt;/a&gt;&lt;span class="zem-script more-related pretty-attribution"&gt;&lt;script defer="defer" src="http://static.zemanta.com/readside/loader.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-5227344966629751799?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/5227344966629751799/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=5227344966629751799' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5227344966629751799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5227344966629751799'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2010/05/producing-rpms-for-apache-activemq.html' title='Producing RPMs for Apache ActiveMQ'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-1948941458583787994</id><published>2010-02-22T02:22:00.001-08:00</published><updated>2010-02-22T02:24:51.188-08:00</updated><title type='text'>India &amp; Nepal</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;img style='max-width: 800px;' src='http://farm5.static.flickr.com/4020/4361115852_82c4ceff0f_m.jpg'/&gt;&lt;br/&gt;I spend 3 weeks this January in Northern India and Nepal, starting in Delhi, going to Bodh Gaya, Varanasi, Kushinagar and Lumbini finishing up in Nepal in Kathmandu.  Too few days really, but definitely gave me a taste for the area.  Here's some pictures (&lt;a href='http://www.flickr.com/photos/jamesc/sets/72157623441889042/'&gt;flickr&lt;/a&gt;).&lt;p/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=945102b9-3f3b-8aef-84fe-5676ee457ab0' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-1948941458583787994?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/1948941458583787994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=1948941458583787994' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/1948941458583787994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/1948941458583787994'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2010/02/india-nepal.html' title='India &amp;amp; Nepal'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm5.static.flickr.com/4020/4361115852_82c4ceff0f_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-5713493783729588981</id><published>2009-12-23T10:27:00.000-08:00</published><updated>2009-12-23T10:27:50.329-08:00</updated><title type='text'>Orderly JSON</title><content type='html'>From Simon Willison:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://orderly-json.org/"&gt;Orderly JSON&lt;/a&gt;. Essentially the JSON equivalent of RelaxNG’s compact syntax—a pleasant mini-language for describing JSON objects which compiles to the more verbose JSONSchema format.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-5713493783729588981?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://simonwillison.net/2009/Dec/23/orderly/' title='Orderly JSON'/><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/5713493783729588981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=5713493783729588981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5713493783729588981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5713493783729588981'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/12/orderly-json.html' title='Orderly JSON'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-1218898907042535488</id><published>2009-12-16T06:32:00.000-08:00</published><updated>2009-12-16T06:32:07.300-08:00</updated><title type='text'>Deployment is just a part of dev/ops cooperation, not the whole thing</title><content type='html'>&lt;a href="http://www.kitchensoap.com/2009/12/12/devops-cooperation-doesnt-just-happen-with-deployment/"&gt;Deployment is just a part of dev/ops cooperation, not the whole thing&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;More details from John Allspaw (flickr ops manager) on how toget dev + ops working together.  All nice stuff like better monitoring, allowing developers to easily add monitoring, &lt;a href="http://code.flickr.com/blog/2009/12/02/flipping-out/"&gt;feature flags&lt;/a&gt; and more.&lt;br /&gt;&lt;br /&gt;check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-1218898907042535488?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.kitchensoap.com/2009/12/12/devops-cooperation-doesnt-just-happen-with-deployment/' title='Deployment is just a part of dev/ops cooperation, not the whole thing'/><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/1218898907042535488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=1218898907042535488' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/1218898907042535488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/1218898907042535488'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/12/deployment-is-just-part-of-devops.html' title='Deployment is just a part of dev/ops cooperation, not the whole thing'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-254540581034843965</id><published>2009-12-16T01:30:00.000-08:00</published><updated>2009-12-16T01:30:49.919-08:00</updated><title type='text'>New job positions in Europe for Amazon Web Services</title><content type='html'>&lt;a href="http://aws.typepad.com/aws/2009/12/new-job-positions-in-europe-for-amazon-web-services.html"&gt;New job positions in Europe for Amazon Web Services&lt;/a&gt;&lt;br /&gt;    Interesting jobs @AWS including Solutions Architect and Tech Evangelist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-254540581034843965?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://aws.typepad.com/aws/2009/12/new-job-positions-in-europe-for-amazon-web-services.html' title='New job positions in Europe for Amazon Web Services'/><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/254540581034843965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=254540581034843965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/254540581034843965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/254540581034843965'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/12/new-job-positions-in-europe-for-amazon.html' title='New job positions in Europe for Amazon Web Services'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-7979134825829144247</id><published>2009-12-10T03:42:00.001-08:00</published><updated>2009-12-10T03:42:28.448-08:00</updated><title type='text'>JS bindings for AMQP</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://www.j5live.com/2009/09/23/kamaloka-js-0-1-0-amqp-bindings-released/'&gt;kamaloka-js-0.1.0 AMQP bindings released&lt;/a&gt; Makes client side programing easy - seems to also support QMF&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=9b5d358e-ec2d-8fc8-970f-2384df452a8d' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-7979134825829144247?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/7979134825829144247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=7979134825829144247' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/7979134825829144247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/7979134825829144247'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/12/js-bindings-for-amqp.html' title='JS bindings for AMQP'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-6275332206682876649</id><published>2009-11-29T00:50:00.001-08:00</published><updated>2009-11-29T00:50:14.396-08:00</updated><title type='text'>Getting started testing in Django</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;a href='http://lazypython.blogspot.com/2009/11/getting-started-with-testing-in-django.html'&gt;Lazy Pythonista: Getting Started with Testing in Django&lt;/a&gt; : Alex Gaynor provides a good introduction to the simplest (and most&lt;br /&gt;immediately useful) way to test your Django apps - simple view testing.&lt;blockquote/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=2e3b2fd9-4299-801e-a43a-3a0c4eb95326' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-6275332206682876649?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/6275332206682876649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=6275332206682876649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/6275332206682876649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/6275332206682876649'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/11/getting-started-testing-in-django.html' title='Getting started testing in Django'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-6029334532978909067</id><published>2009-10-02T04:15:00.000-07:00</published><updated>2009-10-02T04:16:06.090-07:00</updated><title type='text'>Information systems from an operational perspective</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Some slides that I presented at EGEE'09 on future ideas for information systems from an operational perspective.&lt;br/&gt;&lt;br/&gt;&lt;div id='__ss_2109972' style='width: 425px; text-align: left;'&gt;&lt;a title='Grid Information systems from an Operations Perspective' href='http://www.slideshare.net/jamescasey/grid-information-systems-from-an-operations-perspective' style='margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;'&gt;Grid Information systems from an Operations Perspective&lt;/a&gt;&lt;div class='youtube-video'&gt;&lt;object height='355' width='425' style='margin: 0px;'&gt;&lt;param value='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=0909-infosys-091002061352-phpapp01&amp;amp;stripped_title=grid-information-systems-from-an-operations-perspective' name='movie'&gt; &lt;/param&gt;&lt;param value='true' name='allowFullScreen'&gt; &lt;/param&gt;&lt;param value='always' name='allowScriptAccess'&gt; &lt;/param&gt;&lt;embed height='355' width='425' allowfullscreen='true' allowscriptaccess='always' type='application/x-shockwave-flash' src='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=0909-infosys-091002061352-phpapp01&amp;amp;stripped_title=grid-information-systems-from-an-operations-perspective'&gt; &lt;/embed&gt;  &lt;/object&gt;&lt;/div&gt;&lt;div style='font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;'&gt;View more &lt;a href='http://www.slideshare.net/' style='text-decoration: underline;'&gt;presentations&lt;/a&gt; from &lt;a href='http://www.slideshare.net/jamescasey' style='text-decoration: underline;'&gt;jamescasey&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=569be0f3-945a-885d-b63b-00c38f0d642d' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-6029334532978909067?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/6029334532978909067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=6029334532978909067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/6029334532978909067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/6029334532978909067'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/10/information-systems-from-operational.html' title='Information systems from an operational perspective'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-1561085231221919896</id><published>2009-10-02T03:57:00.001-07:00</published><updated>2009-10-02T03:57:50.791-07:00</updated><title type='text'>Django slides at GD White Areas</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;I gave the following slides today on Django at the &lt;a href='http://indico.cern.ch/conferenceDisplay.py?confId=63345'&gt;White Areas lectures&lt;/a&gt;.  They give a high level introduction to Django and also show some useful tools for python/Django development.&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div id='__ss_2109905' style='width: 425px; text-align: left;'&gt;&lt;a title='Introduction to Django' href='http://www.slideshare.net/jamescasey/introduction-to-django' style='margin: 12px 0pt 3px; font-family: Helvetica,Arial,Sans-serif; font-style: normal; font-variant: normal; font-weight: normal; font-size: 14px; line-height: normal; font-size-adjust: none; font-stretch: normal; display: block; text-decoration: underline;'&gt;Introduction to Django&lt;/a&gt;&lt;div class='youtube-video'&gt;&lt;object height='355' width='425' style='margin: 0px;'&gt;&lt;param value='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=0909-wa-django-091002054827-phpapp01&amp;amp;stripped_title=introduction-to-django' name='movie'&gt; &lt;/param&gt;&lt;param value='true' name='allowFullScreen'&gt; &lt;/param&gt;&lt;param value='always' name='allowScriptAccess'&gt; &lt;/param&gt;&lt;embed height='355' width='425' allowfullscreen='true' allowscriptaccess='always' type='application/x-shockwave-flash' src='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=0909-wa-django-091002054827-phpapp01&amp;amp;stripped_title=introduction-to-django'&gt; &lt;/embed&gt;  &lt;/object&gt;&lt;/div&gt;&lt;div style='font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;'&gt;View more &lt;a href='http://www.slideshare.net/' style='text-decoration: underline;'&gt;presentations&lt;/a&gt; from &lt;a href='http://www.slideshare.net/jamescasey' style='text-decoration: underline;'&gt;jamescasey&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=5d7f43ee-8ce9-8591-861d-a748f02559b0' alt='' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-1561085231221919896?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/1561085231221919896/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=1561085231221919896' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/1561085231221919896'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/1561085231221919896'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/10/django-slides-at-gd-white-areas.html' title='Django slides at GD White Areas'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-7283952450958506198</id><published>2009-03-18T05:46:00.000-07:00</published><updated>2009-03-18T05:47:49.653-07:00</updated><title type='text'>pip and virtualenv differences (--no-site-packages)</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Just a quick note here found when debugging multiple django installs.&lt;br/&gt;&lt;br/&gt;There is a difference between:&lt;br/&gt;&lt;blockquote&gt;&lt;font face='Courier New'&gt;&amp;gt; virtualenv foo&lt;br/&gt;&amp;gt; pip install -E foo Django&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;and &lt;br/&gt;&lt;blockquote&gt;&lt;font face='Courier New'&gt;# no virtualenv exists at this point&lt;br/&gt;&amp;gt; pip install -E foo Django&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;Basically, if pip creates a new virtualenv, it always does it using the '-no-site-packages' option. This isn't so good for things like cx_Oracle, where we already have rpms and it's pretty hard to get it to auto-build on install. Testing this, I ran into &lt;b&gt;yolk&lt;/b&gt; - which shows you the list of packages:&lt;br/&gt;&lt;blockquote&gt;&lt;font face='Courier New'&gt;# no virtualenv exists at this point&lt;br/&gt;&amp;gt; virtualenv foo&lt;br/&gt;&amp;gt; pip install -E foo yolk&lt;br/&gt;&amp;gt; source foo/bin/activate&lt;br/&gt;(foo)&amp;gt; yolk -l&lt;br/&gt;Python          - 2.5.2        - active development (/usr/lib64/python2.5/lib-dynload)&lt;br/&gt;cx_Oracle-py25  - 4.4.1        - active development (/usr/lib64/python2.5/site-packages)&lt;br/&gt;pip             - 0.3.1        - active development (/usr/lib64/python2.5/site-packages/pip-0.3.1-py2.5.egg)&lt;br/&gt;setuptools      - 0.6c9        - active&lt;br/&gt;setuptools      - 0.6c9        - active&lt;br/&gt;setuptools      - 0.6c9        - non-active development (/usr/lib64/python2.5/site-packages/setuptools-0.6c9-py2.5.egg)&lt;br/&gt;setuptools      - 0.6c9        - non-active development (/usr/lib64/python2.5/site-packages/setuptools-0.6c9-py2.5.egg)&lt;br/&gt;virtualenv      - 1.3.3        - active development (/usr/lib64/python2.5/site-packages/virtualenv-1.3.3-py2.5.egg)&lt;br/&gt;wsgiref         - 0.1.2        - active development (/usr/lib64/python2.5)&lt;br/&gt;yolk            - 0.4.1        - active&lt;/font&gt;&lt;br/&gt;&lt;/blockquote&gt;Here you can see a &lt;b&gt;cx_Oracle&lt;/b&gt; which is inherited correctly from the default environment.&lt;br/&gt;&lt;br/&gt;&lt;div class='zemanta-pixie'&gt;&lt;img src='http://img.zemanta.com/pixy.gif?x-id=0d241688-6d28-4ef4-ab78-019dd3e68c5b' class='zemanta-pixie-img'/&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-7283952450958506198?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/7283952450958506198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=7283952450958506198' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/7283952450958506198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/7283952450958506198'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/03/pip-and-virtualenv-differences-no-site.html' title='pip and virtualenv differences (--no-site-packages)'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-2619455143639085108</id><published>2009-02-18T02:55:00.000-08:00</published><updated>2009-03-16T06:55:41.653-07:00</updated><title type='text'>Python2.5 on SLC4</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;So, a recurring problem when writing django apps, or using django tools is that then often use features only on python2.4 or python2.4 (properties, with: clauses, ...).&lt;br /&gt;&lt;br /&gt;Here's a recipe to get python2.5 onto a SLC4 system without causing too much pain.  Again it uses pip and virtualenv to do the heavy lifting.&lt;br /&gt;&lt;br /&gt;First, install python2.5 - the ATLAS rpms in AFS seem the easiest place (but it's built by the SLC maintainers, so should be available someone more standard too !)&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;"&gt;# rpm -Uvh  /afs/cern.ch/atlas/offline/external/GRID/ddm/ext/RPMS.py25.x86_64/python25-2.5.2-2.slc4.x86_64.rpm&lt;br /&gt;# which python2.5&lt;br /&gt;&lt;span style="color:#999999;"&gt;/usr/bin/python2.5&lt;/span&gt;&lt;br /&gt;# python2.5&lt;br /&gt;&lt;span style="color:#999999;"&gt;Python 2.5.2 (r252:60911, Apr 28 2008, 11:39:35)&lt;br /&gt;[GCC 3.4.6 20060404 (Red Hat 3.4.6-9)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;So now we've got python2.5, let's get virtualenv and pip running. First, get easy_install:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;"&gt;# wget http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;&lt;span style="color:#999999;"&gt;--11:40:46--  http://peak.telecommunity.com/dist/ez_setup.py&lt;br /&gt;           =&amp;gt; `ez_setup.py'&lt;br /&gt;Resolving peak.telecommunity.com... 209.190.5.234&lt;br /&gt;Connecting to peak.telecommunity.com|209.190.5.234|:80... connected.&lt;br /&gt;HTTP request sent, awaiting response... 200 OK&lt;br /&gt;Length: 9,716 (9.5K) [text/plain]&lt;br /&gt;&lt;br /&gt;100%[=========================================================================================================&amp;gt;] 9,716         39.37K/s&lt;br /&gt;&lt;br /&gt;11:40:47 (39.34 KB/s) - `ez_setup.py' saved [9716/9716]&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;# python2.5 ez_setup.py --install-dir /usr/lib64/python2.5/site-packages/&lt;/span&gt;&lt;br /&gt;Downloading http://pypi.python.org/packages/2.5/s/setuptools/setuptools-0.6c9-py2.5.egg&lt;br /&gt;Processing setuptools-0.6c9-py2.5.egg&lt;br /&gt;Copying setuptools-0.6c9-py2.5.egg to /usr/lib64/python2.5/site-packages&lt;br /&gt;Adding setuptools 0.6c9 to easy-install.pth file&lt;br /&gt;Installing easy_install script to /usr/lib64/python2.5/site-packages/&lt;br /&gt;Installing easy_install-2.5 script to /usr/lib64/python2.5/site-packages/&lt;br /&gt;&lt;br /&gt;Installed /usr/lib64/python2.5/site-packages/setuptools-0.6c9-py2.5.egg&lt;br /&gt;Processing dependencies for setuptools==0.6c9&lt;br /&gt;Finished processing dependencies for setuptools==0.6c9&lt;/span&gt;&lt;br /&gt;# python2.5  /usr/lib64/python2.5/site-packages/easy_install --install-dir /usr/lib64/python2.5/site-packages/ --script-dir /usr/bin pip&lt;br /&gt;&lt;span style="color:#999999;"&gt;Searching for pip&lt;br /&gt;Reading http://pypi.python.org/simple/pip/&lt;br /&gt;Reading http://pip.openplans.org&lt;br /&gt;Best match: pip 0.3.1&lt;br /&gt;Downloading http://pypi.python.org/packages/source/p/pip/pip-0.3.1.tar.gz#md5=78102ddbb040a183dd361b5d432cdf88&lt;br /&gt;Processing pip-0.3.1.tar.gz&lt;br /&gt;Running pip-0.3.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-TwXZ62/pip-0.3.1/egg-dist-tmp-UPf9BM&lt;br /&gt;warning: manifest_maker: MANIFEST.in, line 3: 'prune' expects a single &lt;dir_pattern&gt;&lt;br /&gt;warning: manifest_maker: MANIFEST.in, line 4: 'prune' expects a single &lt;dir_pattern&gt;&lt;br /&gt;warning: manifest_maker: MANIFEST.in, line 5: 'prune' expects a single &lt;dir_pattern&gt;&lt;br /&gt;zip_safe flag not set; analyzing archive contents...&lt;br /&gt;pip: module references __file__&lt;br /&gt;Adding pip 0.3.1 to easy-install.pth file&lt;br /&gt;Installing pip script to /usr/bin&lt;br /&gt;&lt;br /&gt;Installed /usr/lib64/python2.5/site-packages/pip-0.3.1-py2.5.egg&lt;br /&gt;Processing dependencies for pip&lt;br /&gt;Finished processing dependencies for pip&lt;/dir_pattern&gt;&lt;/dir_pattern&gt;&lt;/dir_pattern&gt;&lt;/span&gt;&lt;br /&gt;# &lt;span style="color:#000000;"&gt;python2.5  /usr/lib64/python2.5/site-packages/easy_install --install-dir /usr/lib64/python2.5/site-packages/ --script-dir /usr/bin virtualenv&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#999999;"&gt;Searching for virtualenv&lt;br /&gt;Reading http://pypi.python.org/simple/virtualenv/&lt;br /&gt;Best match: virtualenv 1.3.2&lt;br /&gt;Downloading http://pypi.python.org/packages/2.5/v/virtualenv/virtualenv-1.3.2-py2.5.egg#md5=f2cd2b10b8be8b57e74cb1830fc0b504&lt;br /&gt;Processing virtualenv-1.3.2-py2.5.egg&lt;br /&gt;creating /usr/lib64/python2.5/site-packages/virtualenv-1.3.2-py2.5.egg&lt;br /&gt;Extracting virtualenv-1.3.2-py2.5.egg to /usr/lib64/python2.5/site-packages&lt;br /&gt;Adding virtualenv 1.3.2 to easy-install.pth file&lt;br /&gt;Installing virtualenv script to /usr/bin&lt;br /&gt;&lt;br /&gt;Installed /usr/lib64/python2.5/site-packages/virtualenv-1.3.2-py2.5.egg&lt;br /&gt;Processing dependencies for virtualenv&lt;br /&gt;Finished processing dependencies for virtualenv&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;Note the path hacking we had to do to get things all in the right place - EasyInstall doesn't seem to expect &lt;span style="font-family:Courier New;"&gt;site-packages&lt;/span&gt; to be in &lt;span style="font-family:Courier New;"&gt;/usr/lib64&lt;/span&gt; on x86_64.  Now you've got this going, you can just go ahead and create virtualenv's.  Since the &lt;span style="font-family:Courier New;"&gt;/bin/virtualenv&lt;/span&gt; and &lt;span style="font-family:Courier New;"&gt;/bin/pip&lt;/span&gt; use python2.5, there's not even any need to supply the '&lt;span style="font-family:Courier New;"&gt;-p&lt;/span&gt;' option to virtualenv to specify the python to use - it'll default to 2.5.&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:Courier New;"&gt;# pip -E /tmp/devo install Django&lt;br /&gt;&lt;span style="color:#999999;"&gt;Creating new virtualenv environment in /tmp/devo&lt;br /&gt;  New python executable in /tmp/devo/bin/python2.5&lt;br /&gt;  Also creating executable in /tmp/devo/bin/python&lt;br /&gt;  Installing setuptools...done.....&lt;br /&gt;Downloading/unpacking Django&lt;br /&gt;  Downloading Django-1.0.2-final.tar.gz (4.6Mb): 4.6Mb downloaded&lt;br /&gt;  Running setup.py egg_info for package Django&lt;br /&gt;Installing collected packages: Django&lt;br /&gt;  Running setup.py install for Django&lt;br /&gt;    changing mode of build/scripts-2.5/django-admin.py from 644 to 755&lt;br /&gt;    changing mode of /tmp/devo/bin/django-admin.py to 755&lt;br /&gt;Successfully installed Django&lt;/span&gt;&lt;br /&gt;# source /tmp/devo/bin/activate&lt;br /&gt;&lt;span style="color:#999999;"&gt;(devo)[root@lxbra1905 ~]# python&lt;br /&gt;Python 2.5.2 (r252:60911, Apr 28 2008, 11:39:35)&lt;br /&gt;[GCC 3.4.6 20060404 (Red Hat 3.4.6-9)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;/&amp;gt;&amp;gt;&amp;gt; import django&lt;br /&gt;/&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="zemanta-pixie"&gt;&lt;img src="http://img.zemanta.com/pixy.gif?x-id=6330b93e-aeed-4f9a-98cf-8696a921954e" class="zemanta-pixie-img" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-2619455143639085108?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/2619455143639085108/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=2619455143639085108' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/2619455143639085108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/2619455143639085108'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/02/python25-on-slc4.html' title='Python2.5 on SLC4'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-5102032507831329628</id><published>2009-02-04T04:32:00.000-08:00</published><updated>2009-02-04T08:19:17.246-08:00</updated><title type='text'>python (and Django) development environment</title><content type='html'>I like virtualenv and pip.  Sadly, they don't work so well with python2.3 - virtualenv will work if you manually copy a version of subprocess.py from a python2.4/2.5 machine into site-packages. pip just won't work (it uses @property)...&lt;br /&gt;&lt;br /&gt;Anyway, together they make it very easy to deploy a development environment for Django.  Here are some notes (using python 2.4 on SLC5):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Starting - install virtualenv and pip&lt;/span&gt;&lt;br /&gt;Use easy_install to install virtualenv and pip (a bit of a bootstrap problem - but this is the last time to use easy_install on your OS python directories !)&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;$ easy_install virtualenv&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;$ easy_install pip&lt;br /&gt;Searching for pip&lt;br /&gt;Reading http://pypi.python.org/simple/pip/&lt;br /&gt;Reading http://pip.openplans.org&lt;br /&gt;Best match: pip 0.3.1&lt;br /&gt;Downloading http://pypi.python.org/packages/source/p/pip/pip-0.3.1.tar.gz#md5=78102ddbb040a183dd361b5d432cdf88&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;Adding pip 0.3.1 to easy-install.pth file&lt;br /&gt;Installing pip script to /usr/bin&lt;br /&gt;&lt;br /&gt;Installed /usr/lib/python2.4/site-packages/pip-0.3.1-py2.4.egg&lt;br /&gt;Processing dependencies for pip&lt;br /&gt;Finished processing dependencies for pip&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;First example - just installing django with virtualenv&lt;/span&gt;&lt;br /&gt;This uses virtualenv to set up a virtual environment, and standard easy_install to install django.&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;$virtualenv devo&lt;br /&gt;New python executable in devo/bin/python&lt;br /&gt;Installing setuptools.............done.&lt;br /&gt;&lt;br /&gt;$easy_install django&lt;br /&gt;Searching for django&lt;br /&gt;Reading http://pypi.python.org/simple/django/&lt;br /&gt;Reading http://www.djangoproject.com/&lt;br /&gt;Reading http://www.djangoproject.com/download/1.0.1-beta-1/tarball/&lt;br /&gt;Best match: Django 1.0.2-final&lt;br /&gt;Downloading http://media.djangoproject.com/releases/1.0.2/Django-1.0.2-final.tar.gz&lt;br /&gt;Processing Django-1.0.2-final.tar.gz&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;Installing django-admin.py script to /tmp/jamesc/devo/bin&lt;br /&gt;&lt;br /&gt;Installed /tmp/jamesc/devo/lib/python2.4/site-packages/Django-1.0.2_final-py2.4.egg&lt;br /&gt;Processing dependencies for django&lt;br /&gt;Finished processing dependencies for django&lt;br /&gt;&lt;br /&gt;$. ./devo/bin/activate&lt;br /&gt;&lt;br /&gt;(devo)$python&lt;br /&gt;Python 2.4.3 (#1, Mar 13 2008, 13:35:20)&lt;br /&gt;[GCC 4.1.2 20070626 (Red Hat 4.1.2-14)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;h[1] &gt;&gt;&gt; import django&lt;br /&gt;h[1] &gt;&gt;&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Second Example - Doing it with pip&lt;/span&gt;&lt;br /&gt;pip can call out to virtualenv to set up the environment it needs, so what is above becomes even easier -&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;13:45:03[jamesc]vtb-generi$pip install -E devo django&lt;br /&gt;Creating new virtualenv environment in /tmp/jamesc/devo&lt;br /&gt;New python executable in /tmp/jamesc/devo/bin/python&lt;br /&gt;Installing setuptools...done......&lt;br /&gt;Downloading/unpacking django&lt;br /&gt;Downloading Django-1.0.2-final.tar.gz (4.6Mb): 4.6Mb downloaded&lt;br /&gt;Running setup.py egg_info for package django&lt;br /&gt;Installing collected packages: django&lt;br /&gt;Running setup.py install for django&lt;br /&gt;changing mode of build/scripts-2.4/django-admin.py from 644 to 755&lt;br /&gt;changing mode of /tmp/jamesc/devo/bin/django-admin.py to 755&lt;br /&gt;Successfully installed django&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Third Example - requirements files in pip&lt;/span&gt;&lt;br /&gt;pip has a nice feature of requirement files - here you can put a bunch of packages you want and they get downloaded - either via &lt;a href="http://pypi.python.org/pypi/"&gt;PyPi&lt;/a&gt; or from subversion repositories - this is useful for django add-ons, since many of them are in google code.&lt;br /&gt;&lt;br /&gt;Here are two useful requirements file - firstly a generic development tool one : &lt;span style="font-weight: bold;"&gt;devo-requires.txt&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;# Devo tools&lt;br /&gt;ipython&lt;br /&gt;pylint&lt;br /&gt;logilab-common&lt;br /&gt;logilab-astng&lt;br /&gt;# Doc tools&lt;br /&gt;docutils&lt;br /&gt;Jinja&lt;br /&gt;Pygments&lt;br /&gt;sphinx&lt;br /&gt;mock&lt;br /&gt;&lt;br /&gt;# django + deps&lt;br /&gt;Django&lt;br /&gt;python-ldap&lt;br /&gt;#MySQL-python&lt;br /&gt;pysqlite&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;And a second with some more specific django tools &lt;span style="font-weight: bold;"&gt;django-requires.txt&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;django-pagination&lt;br /&gt;django-reversion&lt;br /&gt;django-gatekeeper&lt;br /&gt;django-batchadmin&lt;br /&gt;&lt;br /&gt;# No egg available&lt;br /&gt;-e svn+http://django-command-extensions.googlecode.com/svn/trunk#egg=django-extensions&lt;br /&gt;-e svn+http://django-notification.googlecode.com/svn/trunk#egg=django-notification&lt;br /&gt;# Should use latest SVN version , not package&lt;br /&gt;-e svn+http://django-sphinx.googlecode.com/svn/trunk/#egg=djangosphinx&lt;br /&gt;-e svn+http://django-tagging.googlecode.com/svn/trunk#egg=django-tagging&lt;br /&gt;&lt;/blockquote&gt;To install :&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;$ pip install -E devo -r devo-requires.txt&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;$ pip install -E devo -r django-requires.txt&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-family: georgia;"&gt;You'll need to make sure you have the relevant -devel rpms installed e.g. openldap-devel, sqlite-devel, mysql-devel.&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-5102032507831329628?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/5102032507831329628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=5102032507831329628' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5102032507831329628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5102032507831329628'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/02/python-and-django-development.html' title='python (and Django) development environment'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2819289463806343834.post-5285242164666773848</id><published>2009-02-03T07:18:00.001-08:00</published><updated>2010-08-04T01:04:57.771-07:00</updated><title type='text'>SL5 to SLC5</title><content type='html'>Vnode only supports SL5 right now - so here's how to turn it into a SLC5 node (for x86_64)&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&amp;gt; cd /etc/yum.repos.d/&lt;br /&gt;&amp;gt; rm -f sl-*.repo sl.repo&lt;br /&gt;&amp;gt; rpm -r epel-release&lt;br /&gt;&amp;gt; rpm -Uvh  http://linuxsoft.cern.ch/cern/slc5X/i386/yum/updates//yum-conf-5X-6.slc5.cern.noarch.rpm&lt;br /&gt;&amp;gt; yum update&lt;/blockquote&gt;Now for CERN stuff&lt;br /&gt;&lt;blockquote style="font-family: courier new;"&gt;&amp;gt; yum install cern-wrappers lcm ntp krb5-workstation lpadmincern useraddcern&lt;br /&gt;&amp;gt; lcm --co --all&lt;br /&gt;&amp;gt; chkconfig afs on&lt;br /&gt;&amp;gt; shutdown -r now&lt;/blockquote&gt;Ok, so you should have a slightly more useful box now :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2819289463806343834-5285242164666773848?l=justdotheneedful.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://justdotheneedful.blogspot.com/feeds/5285242164666773848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2819289463806343834&amp;postID=5285242164666773848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5285242164666773848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2819289463806343834/posts/default/5285242164666773848'/><link rel='alternate' type='text/html' href='http://justdotheneedful.blogspot.com/2009/02/sl5-to-slc5.html' title='SL5 to SLC5'/><author><name>James</name><uri>http://www.blogger.com/profile/09022571460868911409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp0.blogger.com/_Xv3WKCs9LAo/SFeoC7TkbtI/AAAAAAAAA1g/Yb1Znu68qJo/S220/jamesc-small.jpg'/></author><thr:total>0</thr:total></entry></feed>
