<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Technobabble</title>
	<atom:link href="http://vspike.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://vspike.wordpress.com</link>
	<description>My wife says I&#039;m a total geek, but I&#039;m *her* geek.</description>
	<lastBuildDate>Sat, 21 Jan 2012 12:30:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='vspike.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Technobabble</title>
		<link>http://vspike.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://vspike.wordpress.com/osd.xml" title="Technobabble" />
	<atom:link rel='hub' href='http://vspike.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Computer club Part 1</title>
		<link>http://vspike.wordpress.com/2012/01/20/computer-club-part-1/</link>
		<comments>http://vspike.wordpress.com/2012/01/20/computer-club-part-1/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 14:05:47 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[british education system]]></category>
		<category><![CDATA[acorn archimedes]]></category>
		<category><![CDATA[acorn]]></category>
		<category><![CDATA[sinclair]]></category>
		<category><![CDATA[ict]]></category>
		<category><![CDATA[school]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=102</guid>
		<description><![CDATA[I was a kid in the 80&#8242;s, the short-lived golden era of Home Computers. I had a Sinclair ZX81, followed by a ZX Spectrum 48K (and another one when that one broke). At the same time I also had access to a very nice Commodore CBM 8032 and a BBC Model B at junior school. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=102&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was a kid in the 80&#8242;s, the short-lived golden era of Home Computers. I had a <a title="Sinclair ZX81" href="http://en.wikipedia.org/wiki/ZX81" target="_blank">Sinclair ZX81</a>, followed by a <a title="Sinclair ZX Spectrum" href="http://en.wikipedia.org/wiki/ZX_Spectrum#ZX_Spectrum_16K.2F48K" target="_blank">ZX Spectrum 48K</a> (and another one when that one broke). At the same time I also had access to a very nice <a title="CBM 8032" href="http://www.old-computers.com/museum/computer.asp?c=105" target="_blank">Commodore CBM 8032</a> and a <a title="BBC Model B" href="http://en.wikipedia.org/wiki/BBC_Micro" target="_blank">BBC Model B</a> at junior school. Later at home we got an <a title="Acorn Archimedes" href="http://en.wikipedia.org/wiki/Acorn_Archimedes" target="_blank">Acorn Archimedes A440</a>, later replaced with an <a title="RISC PC" href="http://en.wikipedia.org/wiki/Risc_PC" target="_blank">Acorn RISC PC</a>. At my senior school at the time, we had BBC&#8217;s, later replaced with a whole suite of Archimedes Machines.</p>
<p>Most these computers shared a common feature &#8211; when you booted them they presented you with a BASIC prompt. You were expected to enter code. Most children at the time could write a two line program (you know, the one that starts with 10 PRINT and fills the screen of the TRS80 in Tandy with rude words), and the computer rooms were usually fairly busy with people writing code. Even the Archimedes, recognisable to a present day user as a &#8220;proper&#8221; computer, had the superb BBC BASIC V right under the skin.</p>
<p>I spent a lot of my childhood tapping out code, and ended up working as software developer. Would I have done the same without these funny little computers? Who knows! We had no formal computer teaching of any kind at school. If you were lucky, there was an enthusiast teacher who might be able to answer a question. No Google either of course!</p>
<p>Unless you live under a rock (or outside the UK) you&#8217;ll have noticed the sudden rush of media coverage on the topic of ICT and IT teaching in schools. To me it felt like it all started in the media when Eric Schmidt <a href="http://www.guardian.co.uk/technology/2011/aug/26/eric-schmidt-chairman-google-education" target="_blank">criticised the British education system</a>. I&#8217;ve been moaning about this to anyone that will listen for a several of years now, but actually did nothing more than that. Thank god some people have been more organised: the <a title="Raspberry Pi" href="http://www.raspberrypi.org/" target="_blank">Raspberry Pi foundation</a> (including the legendary <a href="http://en.wikipedia.org/wiki/David_Braben" target="_blank">David Braben</a>), the <a title="Next Gen Skills" href="http://www.nextgenskills.com/" target="_blank">Next Gen Skills group</a>, Ian Livingstone (of Fighting Fantasy fame) and Alex Hope of <a title="Double Negative" href="http://en.wikipedia.org/wiki/Double_Negative_(VFX)" target="_blank">Double Negative</a> who co-authored <a href="http://www.nesta.org.uk/publications/assets/features/next_gen" target="_blank">the Next Gen report</a>, the Royal Society&#8217;s &#8220;<a href="http://royalsociety.org/education/policy/computing-in-schools/report/" target="_blank">Shut Down or Restart</a>?&#8221; report, the <a href="http://www.computingatschool.org.uk/" target="_blank">Computing at Schools</a> working group (who published a rather good free <a href="http://www.computingatschool.org.uk/data/uploads/ComputingCurric.pdf" target="_blank">suggested computing curriculum</a> (PDF), the <a href="https://www.facebook.com/gotofdn" target="_blank">Goto Foundation</a>, <a href="http://www.bbc.co.uk/news/technology-16544845" target="_blank">Rory-Cellan Jones</a> (the BBC technology correspondent), the Guardian&#8217;s <a href="http://www.guardian.co.uk/education/series/digital-literacy-campaign" target="_blank">Digital Literacy Campaign</a>, and probably other I&#8217;ve missed. The tireless efforts of these campaigners got the media covering the issue, and that meant the government had to respond, which they duly did.</p>
<p>There&#8217;s a lot more work to do, but it&#8217;s wonderful to see the energy and enthusiasm erupting here. I also think it&#8217;s wise to be <a href="http://www.guardian.co.uk/teacher-network/2012/jan/13/gove-ict-teacher-response" target="_blank">cautious about the government&#8217;s response</a>, and to recognise the good work that&#8217;s already being done in schools.</p>
<div>I mention all this as background, because I currently live in a school. It&#8217;s a boarding school, and my wife is a teacher here. In addition, we are both house parents which means we look after a bunch of boarders. I also have a day job in software.  For a long time, I&#8217;ve wanted to run some kind of computer club or activity, to find the potential geeks and programmers here and encourage them. This term, I&#8217;ve committed to doing it. The first one is today!</div>
<div></div>
<div>I&#8217;ve already hit a bunch of problems:</div>
<div>
<ul>
<li>The ICT suite has all XP machines, very locked down, and it&#8217;s hard to install any software on them.</li>
<li>They only have IE installed, which rules out a lot of good web-based material.</li>
<li>The network uses a problematic (in the words of the IT Administrator) firewall/filter appliance which makes it hard to access sites, since every domain they hit has to be whitelisted.</li>
</ul>
</div>
<div>Even at this late stage, I&#8217;m trying to figure out what we should be doing and how we should organise the sessions. They will be once a week, about 45 minutes long. I hope I&#8217;ll have pretty much the same people each week, from years 6-8.</div>
<div></div>
<div>The group will be self-selecting, in that the children choose these activities. This means I&#8217;ll be working with kids who are either good with computers, or who want to be, or think they might be (or want to be with their friends who are). I&#8217;ve no idea how many I&#8217;ll get, or how many will stick with it.</div>
<div></div>
<div>I intend to keep writing about this as I go along, but a few issues I can see on the horizon are:-</div>
<div>
<ul>
<li>How to set up a platform I can really work with on the machines, without causing problems for the IT staff.</li>
<li>What to cover. I think I will have to play this by ear, depending on how many turn up, what their skills are and what the are interested in.</li>
<li>How to give the kids a way to carry on the activity between weekly sessions.</li>
<li>How inclusive it should be.</li>
</ul>
<p>This last point is one that bothers me most, going in to it. Programming is quite hard, and requires patience and dedication. Some of them will probably have big, unrealistic expectations about what they can achieve, and I need to adjust those gently without putting them off.</p>
<p>When I was a kid, I got a buzz out of figuring a puzzle out, cracking something new, making a piece of code work no matter how simple.  That buzz is the payoff that you need to keep you there through all the frustration and effort you have to put in.  If you don&#8217;t get that, I don&#8217;t think you&#8217;ll go on to be a developer.</p>
<p>So, I hope I&#8217;ll get a few in the group who are the real deal; potential software developers. What about the rest? Do I try to put them off? Keep them entertained and hope a few things will stick? Because this is a club, not a lesson, I can play by different rules. While I believe some of this should be in the curriculum, and that all kids should get a grounding in it, this is an enthusiast group.</p>
<p>The ones who are the few who will stick with it will probably be happy writing Python code to print the Fibonacci sequence. The ones that aren&#8217;t will want whizz bang eye-candy to keep their interest going.</p>
<p>So how to balance it? Can we keep everyone happy?</p>
<p>Any advice welcomed!</p>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=102&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2012/01/20/computer-club-part-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
		<item>
		<title>C# helper to dump any object to a log</title>
		<link>http://vspike.wordpress.com/2011/12/19/c-helper-to-dump-any-object-to-a-log/</link>
		<comments>http://vspike.wordpress.com/2011/12/19/c-helper-to-dump-any-object-to-a-log/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 11:10:29 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[c#]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[dump object]]></category>
		<category><![CDATA[reflection]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=97</guid>
		<description><![CDATA[Some time back I had the need for code to make a reasonable go at dumping out any object into a debug log. Visual Studio does a good job of inspecting objects, so I figured there was probably a clever trick somewhere to achieve this easily, but I couldn&#8217;t find one. In the end, I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=97&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Some time back I had the need for code to make a reasonable go at dumping out any object into a debug log. Visual Studio does a good job of inspecting objects, so I figured there was probably a clever trick somewhere to achieve this easily, but I couldn&#8217;t find one.  In the end, I wrote my own, and learned a bit more about reflection in the process.</p>
<p>My first attempt was useful but a bit fragile.  Often it would fail horribly on a new class and I&#8217;d have to decorate the class with my custom attributes to make it work.</p>
<p>Since then I&#8217;ve refined it a fair amount, and it seems pretty stable although I&#8217;m sure it&#8217;s neither complete nor perfect.  You get better output if you use the custom attributes here and there, but they shouldn&#8217;t be required.  I use it in lots of my code and works well for me, so I share it here in case it&#8217;s more widely useful.</p>
<p><pre class="brush: csharp;">

using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using Common.Logging;

namespace DebugTools
{        
    public interface IDebugDumpMask
    {
        bool GetMask(string MemberName);
    }

    [AttributeUsage(AttributeTargets.Class)]
    public class DumpClassAttribute : System.Attribute
    {

        public DumpClassAttribute()
        {
            IsEnumerable = false;
            ForceUseToString = false;
        }

        /// &lt;summary&gt;
        /// Forces the class to be treated as an enumerable type. Default false.
        /// &lt;/summary&gt;
        public bool IsEnumerable { get; set; }
        /// &lt;summary&gt;
        /// Forces a simple string conversion of the object. Default false.
        /// &lt;/summary&gt;
        public bool ForceUseToString { get; set; }
    
    }

    // Note: Visibility takes priority over masking
    // If an member is not visible, it will never be included.
    // A visible member can be masked out.

    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]
    public class DumpMemberAttribute : System.Attribute
    {
 
        public DumpMemberAttribute()
        {
            IsVisible = true;
            MemberName = null;
            IsEnumerable = false;
            ForceUseToString = false;
            EscapeString = false;
        }

        /// &lt;summary&gt;
        /// Controls whether the member is included in the output or not. Default true for public members, false for private ones.
        /// &lt;/summary&gt;
        public bool IsVisible { get; set; }
        /// &lt;summary&gt;
        /// Overrides the automatically derived memeber name
        /// &lt;/summary&gt;
        public string MemberName { get; set; }
        /// &lt;summary&gt;
        /// Forced the member to be treated as an enumerable type. Default false.
        /// &lt;/summary&gt;
        public bool IsEnumerable { get; set; }
        /// &lt;summary&gt;
        /// Forces a simple string conversion of the member. Default false.
        /// &lt;/summary&gt;
        public bool ForceUseToString { get; set; }
        /// &lt;summary&gt;
        /// If true, the string is escaped before outputting.
        /// &lt;/summary&gt;
        public bool EscapeString { get; set; }
    }

    public class DebugDumper
    {
        private static int RecursionCount = 0;

        private static DumpClassAttribute GetDebugDumpClassAttribute(Type cls)
        {
            object[] attributes = cls.GetCustomAttributes(typeof(DumpClassAttribute), true);
            foreach (object attr in attributes)
            {
                if (attr is DumpClassAttribute)
                    return (DumpClassAttribute)attr;
            }
            return null;

        }

        private static DumpMemberAttribute GetDebugDumpAttribute(MemberInfo member)
        {
            object[] attributes = member.GetCustomAttributes(typeof(DumpMemberAttribute), true);
            foreach (object attr in attributes)
            {
                if (attr is DumpMemberAttribute)
                    return (DumpMemberAttribute)attr;
            }
            return null;

        }

        private static Dictionary&lt;string, string&gt; Enumerate(object o, string baseName)
        {
            //logger.Trace(&quot;Enumerate {0}&quot;,baseName);

            RecursionCount++;

            if (RecursionCount &gt; 5)
                Debugger.Break();

            var members = new Dictionary&lt;string, string&gt;();

            var ddc = GetDebugDumpClassAttribute(o.GetType());

            bool ForceEnum = CheckForcedEnumerable(o.GetType());

            if (ForceEnum || (ddc != null &amp;&amp; ddc.IsEnumerable))
            {
                ProcessEnumerable(members, o, baseName);
            }
            else if (ddc != null &amp;&amp; ddc.ForceUseToString)
            {
                members.Add(baseName, o.ToString());
            }
            else
            {

                BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public;

                FieldInfo[] fi = o.GetType().GetFields(flags);
                PropertyInfo[] pi = o.GetType().GetProperties(flags);

                ProcessFields(o, baseName, members, fi);
                ProcessProperties(o, baseName, members, pi);
            }

            RecursionCount--;

            return members;
        }

        private static bool CheckForcedEnumerable(Type type)
        {
            if (type.FullName.StartsWith(&quot;System.Collections.Generic.List&quot;))
                return true;
            if (type.FullName.StartsWith(&quot;System.Collections.Generic.Dictionary&quot;))
                return true;
            if (type.IsArray)
                return true;
            return false;
        }

        private static void ProcessProperties(object o, string baseName, Dictionary&lt;string, string&gt; members, PropertyInfo[] pi)
        {
            DumpMemberAttribute dd;
            IDebugDumpMask masker = o as IDebugDumpMask;
            bool mask;

            foreach (PropertyInfo prop in pi)
            {
                // Default is to show properties always
                dd = GetDebugDumpAttribute(prop) ?? new DumpMemberAttribute() { MemberName = prop.Name, IsVisible = true };
                mask = masker == null ? true : masker.GetMask(prop.Name);

                if (dd.IsVisible &amp;&amp; mask)
                {
                    int IndexerCount = prop.GetIndexParameters().Count();
                    if (IndexerCount == 0 || (dd != null &amp;&amp; dd.IsEnumerable))
                        try
                        {
                            ProcessMember(members, dd, prop.Name, prop.GetValue(o, null), baseName);
                        }
                        catch (TargetInvocationException)
                        {
                        }

                    else
                        Debug.Assert(false, &quot;Can't dump an indexed property!&quot;);

                }
            }
        }

        private static void ProcessFields(object o, string baseName, Dictionary&lt;string, string&gt; members, FieldInfo[] fi)
        {
            DumpMemberAttribute dd;
            IDebugDumpMask masker = o as IDebugDumpMask;
            bool mask;

            foreach (FieldInfo field in fi)
            {
                // The attribute might be null, so we need to get some defaults if it is
                dd = GetDebugDumpAttribute(field) ?? new DumpMemberAttribute() { MemberName = field.Name, IsVisible = field.IsPublic };
                mask = masker == null ? true : masker.GetMask(field.Name);

                if (dd.IsVisible &amp;&amp; mask)
                {
                    try
                    {
                        ProcessMember(members, dd, field.Name, field.GetValue(o), baseName);
                    }
                    catch (TargetInvocationException)
                    {
                    }

                }
            }
        }

        private static void ConcatSubMembers(Dictionary&lt;string, string&gt; members, Dictionary&lt;string, string&gt; subMembers)
        {
            foreach (KeyValuePair&lt;string, string&gt; item in subMembers)
            {
                members.Add(item.Key, item.Value);
            }
        }

        private static void ProcessMember(Dictionary&lt;string, string&gt; members, DumpMemberAttribute attribute, string memberName, object value, string baseName)
        {
            //logger.Trace(&quot;ProcessMember {0} : {1}&quot;, baseName, memberName);

            string name = string.Format(&quot;{0} : {1}&quot;, baseName, attribute.MemberName ?? memberName);

            if (value == null)
            {
                members.Add(name, &quot;&lt;null&gt;&quot;);
            }
            else
            {
                Type type = value.GetType();
                if (type.IsArray || attribute.IsEnumerable)
                {
                    ProcessEnumerable(members, value, name);
                }
                else if (type.IsValueType || type == typeof(System.String) || attribute.ForceUseToString)
                {
                    members.Add(name, attribute.EscapeString ? EscapeString(value.ToString()) : value.ToString());
                }
                else if (type.IsClass)
                {
                    var subMembers = Enumerate(value, name);
                    ConcatSubMembers(members, subMembers);
                }
                else if (type.IsInterface)
                {
                    members.Add(name, type.ToString());
                }
            }
        }

        private static void ProcessEnumerable(Dictionary&lt;string, string&gt; members, object value, string name)
        {
            IEnumerable e = value as IEnumerable;
            value.GetType();
            int count = 0;

            foreach (object o in e.Cast&lt;object&gt;())
            {
                var member = string.Format(&quot;[{0}]&quot;, count);
                var dd = new DumpMemberAttribute() { IsVisible = true, MemberName = member };
                ProcessMember(members, dd, member, o, name);
                count++;
            }

        }

        public static List&lt;string&gt; Dump(object o, string baseName)
        {
            RecursionCount = 0;

            Dictionary&lt;string, string&gt; members = Enumerate(o, baseName);

            int maxLength = members.Keys.Select(x =&gt; x.Length).Max();

            return members.Select(x =&gt; (string.Format(&quot;{0} = {1}&quot;, x.Key.PadRight(maxLength + 1), x.Value))).ToList();

        }

        /// &lt;summary&gt;
        /// Take a string and create a version with all wierd characters escaped
        /// &lt;/summary&gt;
        /// &lt;param name=&quot;input&quot;&gt;The string to escape&lt;/param&gt;
        /// &lt;returns&gt;The escaped string&lt;/returns&gt;
        public static string EscapeString(string input)
        {
            StringBuilder result = new StringBuilder();
            string wellknown = &quot;\r\n\t&#092;&#048;\\&quot;;
            string wellknownmap = @&quot;rnt0\&quot;;
            int ix;

            foreach (char c in input)
            {

                ix = wellknown.IndexOf(c);
                if (ix &gt;= 0)
                {
                    result.Append(@&quot;\&quot; + wellknownmap[ix]);
                }
                else if (char.IsControl(c))
                {
                    result.AppendFormat(@&quot;\x{0:x4}&quot;, (int)c);
                }
                else
                {
                    result.Append(c);
                }
            }

            return result.ToString();
        }
    }
}

</pre></p>
<p>To use it, just call Dump(), passing the object to dump and a base name to use in the output.<br />
Apply the DumpMemberAttribute to members to change their behaviour when being processed.<br />
Apply the DumpClassAttribute to classes to do the same.<br />
Objects can also implement the IDebugDumpMask interface in order to customise the visibility of their members using more complex logic, if required.</p>
<p>Enjoy!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/97/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/97/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/97/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=97&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2011/12/19/c-helper-to-dump-any-object-to-a-log/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
		<item>
		<title>Technology report</title>
		<link>http://vspike.wordpress.com/2011/10/17/technology-report/</link>
		<comments>http://vspike.wordpress.com/2011/10/17/technology-report/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 08:18:03 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[cartoon]]></category>
		<category><![CDATA[dilbert]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=94</guid>
		<description><![CDATA[When Dilbert is good, it&#8217;s perfect.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=94&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://dilbert.com/strips/comic/2011-10-17/" title="Dilbert.com"><img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/100000/30000/8000/400/138438/138438.strip.gif" border="0" alt="Dilbert.com" /></a></p>
<p>When Dilbert is good, it&#8217;s perfect.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=94&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2011/10/17/technology-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>

		<media:content url="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/100000/30000/8000/400/138438/138438.strip.gif" medium="image">
			<media:title type="html">Dilbert.com</media:title>
		</media:content>
	</item>
		<item>
		<title>Using kexec for a fast reboot in Archlinux</title>
		<link>http://vspike.wordpress.com/2011/05/20/using-kexec-for-a-fast-reboot-in-archlinux/</link>
		<comments>http://vspike.wordpress.com/2011/05/20/using-kexec-for-a-fast-reboot-in-archlinux/#comments</comments>
		<pubDate>Fri, 20 May 2011 14:53:04 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[kexec]]></category>
		<category><![CDATA[reboot]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=78</guid>
		<description><![CDATA[If you ever wondered how some distros achieve the trick of bypassing the BIOS when rebooting, it&#8217;s done using something called kexec, which wikipedia defines as: [...]a mechanism of the Linux kernel that allows &#8220;live&#8221; booting of a new kernel &#8220;over&#8221; the currently running kernel. kexec skips the bootloader stage (hardware initialization phase by the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=78&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you ever wondered how some distros achieve the trick of bypassing the BIOS when rebooting, it&#8217;s done using something called <a href="http://en.wikipedia.org/wiki/Kexec" title="kexec" target="_blank">kexec</a>, which wikipedia defines as:</p>
<blockquote><p>
[...]a mechanism of the Linux kernel that allows &#8220;live&#8221; booting of a new kernel &#8220;over&#8221; the currently running kernel. kexec skips the bootloader stage (hardware initialization phase by the firmware or BIOS) and directly loads the new kernel into memory, where it starts executing immediately.
</p></blockquote>
<p>In archlinux, you can achieve this with the package kexec-tools, which you can install as usual with:<br />
<code>pacman -S kexec-tools</code></p>
<p>kexec-tools is integrated with the archlinux initscripts, so that the kexec command line tool will by default go through the normal shutdown procedure before rebooting.  You can find more information as ever on the excellent <a href="https://wiki.archlinux.org/index.php/Kexec" title="Archlinux Wiki" target="_blank">Archlinux Wiki</a>.  There are some scripts there which look pretty useful, but I started using kexec direct from the command line after reading the man page, and then wrote a short script to cover the form I was using each time.</p>
<p><pre class="brush: bash;">
#!/bin/dash

imgname=/boot/kernel26${1:+-$1}
krnname=/boot/vmlinuz26${1:+-$1}

exec kexec --type=bzImage --reuse-cmdline --initrd=$imgname.img $krnname
</pre></p>
<p>I saved this as ~/bin/kxreboot. You can either just use this without parameters to boot the default kernel, or you can add a single parameter &#8211; for example, if you do <code>kxreboot mainline</code> it will boot vmlinuz26-mainline with initrd kernel26-mainline.img</p>
<p>You might also ask, &#8220;Why would I want a fast reboot? I never reboot!&#8221;.  Fair comment.  I run the testing repos, so kernel and udev upgrades come along quite frequently.  Also, my motherboard doesn&#8217;t recognise my USB keyboard on boot, which makes a BIOS boot a bit of a pain as I have to find a PS/2 keyboard.  Last but not least, everyone loves faster, right?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/78/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/78/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/78/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=78&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2011/05/20/using-kexec-for-a-fast-reboot-in-archlinux/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
		<item>
		<title>Looking to hire C# developers</title>
		<link>http://vspike.wordpress.com/2011/04/21/looking-to-hire-c-developers/</link>
		<comments>http://vspike.wordpress.com/2011/04/21/looking-to-hire-c-developers/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 10:02:46 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[simplytrak]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[hiring]]></category>
		<category><![CDATA[jobs]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=72</guid>
		<description><![CDATA[The company for which I work (Simplytrak http://www.simplytrak.com) is looking to hire talented developers in the Salisbury area. Required skills: C# ASP.Net Webforms and MVC SQL (MSSQL) HTML/CSS/Javascript Other skills and experience that would be useful:- A scripting language like Python,Ruby,Bash Experience with GPS, GPRS or tracking/telematics NHibernate or another ORM Mono JQuery DVCS (hg, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=72&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The company for which I work (Simplytrak <a href="http://www.simplytrak.com">http://www.simplytrak.com</a>) is looking to hire talented developers in the Salisbury area.</p>
<p>Required skills:</p>
<ul>
<li>C#</li>
<li>ASP.Net Webforms and MVC</li>
<li>SQL (MSSQL)</li>
<li>HTML/CSS/Javascript</li>
</ul>
<p>Other skills and experience that would be useful:-</p>
<ul>
<li>A scripting language like Python,Ruby,Bash</li>
<li>Experience with GPS, GPRS or tracking/telematics</li>
<li>NHibernate or another ORM</li>
<li>Mono</li>
<li>JQuery</li>
<li>DVCS (hg, bzr, git)</li>
<li>Knowledge of TCP and UDP</li>
<li>Unit testing, automated builds, CI</li>
<li>PostgreSQL</li>
</ul>
<p>Any level of experience and qualifications will be considered if the person has the right approach and a willingness to learn. We offer a chance to work in an attractive location with a friendly team, and the chance to work for a small, dynamic company that&#8217;s constantly looking to innovate and where individuals can make a real difference.  </p>
<p>We are currently specifying lots of new projects, so although we&#8217;re C#/.Net based at the moment, if you&#8217;re a passionate Rails or Django developer who wants to come and tell us why we should use $TECHNOLOGY and why we should hire you to help us do it, our doors are open.</p>
<p>I stress again that we&#8217;re looking for people who are passionate about software development, about working with interesting technology, about building and creating exciting products that work reliably. </p>
<p>We might be able to help with relocation, and we will consider candidates from overseas too.</p>
<p>If you fit this profile, or know anyone who does, please contact me!</p>
<p>john (at) simplytrak (dot) com</p>
<p>Please feel free to link to this entry or publish it anywhere you think people might be interested.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/72/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=72&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2011/04/21/looking-to-hire-c-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
		<item>
		<title>Blum Blum Shub in python</title>
		<link>http://vspike.wordpress.com/2010/10/15/blum-blum-shub-in-python/</link>
		<comments>http://vspike.wordpress.com/2010/10/15/blum-blum-shub-in-python/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 20:20:37 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[algorithm]]></category>
		<category><![CDATA[blum blum shub]]></category>
		<category><![CDATA[cryptography]]></category>
		<category><![CDATA[pseudorandom]]></category>
		<category><![CDATA[random]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=59</guid>
		<description><![CDATA[This is a python implementation of the excellently named &#8220;Blum Blum Shub&#8221; algorithm for generating pseudorandom numbers. See the wikipedia article for more information. This algorithm is good for use in cryptography, but due to its relatively slow speed, its not ideal for simulations. The primes code came from www.4dsolutions.net/. I&#8217;m honestly not sure what [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=59&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is a python implementation of the excellently named &#8220;Blum Blum Shub&#8221; algorithm for generating pseudorandom numbers.  See <a href="http://en.wikipedia.org/wiki/Blum_Blum_Shub">the wikipedia article</a> for more information.  This algorithm is good for use in cryptography, but due to its relatively slow speed, its not ideal for simulations.</p>
<p>The primes code came from <a href="http://www.4dsolutions.net/cgi-bin/py2html.cgi?script=/ocn/python/primes.py">www.4dsolutions.net/</a>. I&#8217;m honestly not sure what the licence for that code is so the best I can do is to credit the site and thank them for the excellent resources they put online!</p>
<p><pre class="brush: python;">

&quot;&quot;&quot;
Adapted from http://javarng.googlecode.com/svn/trunk/com/modp/random/BlumBlumShub.java

Original license follows:-

Copyright 2005, Nick Galbreath -- nickg [at] modp [dot] com
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

   Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.

   Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

   Neither the name of the modp.com nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
&quot;AS IS&quot; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

This is the standard &quot;new&quot; BSD license:
http://www.opensource.org/licenses/bsd-license.php
 
&quot;&quot;&quot;

import primes;
import random;
import sys;

class BlumBlumShub(object):


    def getPrime(self, bits):
        &quot;&quot;&quot;
        Generate appropriate prime number for use in Blum-Blum-Shub.
         
        This generates the appropriate primes (p = 3 mod 4) needed to compute the
        &quot;n-value&quot; for Blum-Blum-Shub.
         
        bits - Number of bits in prime

        &quot;&quot;&quot;
        while True:
            p = primes.bigppr(bits);
            if p%4 == 3:
                break
        return p

    def generateN(self, bits):
        &quot;&quot;&quot;
        This generates the &quot;n value&quot; for use in the Blum-Blum-Shub algorithm.
       
        bits - The number of bits of security
        &quot;&quot;&quot;
    
        p = self.getPrime(bits/2)
        q = self.getPrime(bits/2)

        # make sure p != q (almost always true, but just in case, check)
        while p == q:
            q = getPrime(self, bits/2);
        
        # print &quot;GenerateN - p = &quot; + repr(p) + &quot;, q = &quot; + repr(q)            
        return p * q;
    

    def __init__(self, bits):
        &quot;&quot;&quot;
        Constructor, specifing bits for n.
         
        bits - number of bits
        &quot;&quot;&quot;        
        self.n = self.generateN(bits)
        # print &quot;n set to &quot; + repr(self.n)
        length = self.bitLen(self.n)
        seed = random.getrandbits(length)
        self.setSeed(seed)  

    def setSeed(self, seed):
        &quot;&quot;&quot;
        Sets or resets the seed value and internal state.
         
        seed -The new seed
        &quot;&quot;&quot;
    
        self.state = seed % self.n
    
    def bitLen(self, x):
        &quot; Get the bit lengh of a positive number&quot; 
        assert(x&gt;0)
        q = 0 
        while x: 
            q = q+1 
            x = x&gt;&gt;1 
        return q     

    def next(self, numBits):
        &quot;Returns up to numBit random bits&quot;
        
        result = 0
        for i in range(numBits,0,-1):
            self.state = (self.state**2) % self.n
            result = (result &lt;&lt; 1) | (self.state&amp;1)
        
        return result    

def main():
    
    bbs = BlumBlumShub(128);
        
    #print &quot;Generating 10 numbers&quot;
    
    print &quot;type: u&quot;
    print &quot;numbit: 32&quot;
    print &quot;count: 5000000&quot;
    for i in range (0,5000000):
        print bbs.next(32)
            
if __name__ == &quot;__main__&quot;:
    main()

</pre></p>
<p><pre class="brush: python;">

&quot;&quot;&quot;
From http://www.4dsolutions.net/cgi-bin/py2html.cgi?script=/ocn/python/primes.py
&quot;&quot;&quot;

import random

def bigppr(bits=256):
    &quot;&quot;&quot;
    Randomly generate a probable prime with a given
    number of hex digits
    &quot;&quot;&quot;
     
    candidate = random.getrandbits(bits)

    if candidate&amp;1==0:
        candidate += 1
    prob = 0
    while 1:
        prob=pptest(candidate)
        if prob&gt;0: break
        else: candidate += 2
    return candidate
        
def pptest(n):
    &quot;&quot;&quot;
    Simple implementation of Miller-Rabin test for
    determining probable primehood.
    &quot;&quot;&quot;
    bases  = [random.randrange(2,50000) for x in range(90)]

    # if any of the primes is a factor, we're done

    if n&lt;=1: return 0
    
    for b in bases:
        if n%b==0: return 0
        
    tests,s  = 0L,0
    m        = n-1

    # turning (n-1) into (2**s) * m

    while not m&amp;1:  # while m is even

        m &gt;&gt;= 1
        s += 1
    for b in bases:
        tests += 1
        isprob = algP(m,s,b,n)
        if not isprob: break
            
    if isprob: return (1-(1./(4**tests)))
    else:      return 0

def algP(m,s,b,n):
    &quot;&quot;&quot;
    based on Algorithm P in Donald Knuth's 'Art of
    Computer Programming' v.2 pg. 395 
    &quot;&quot;&quot;
    result = 0
    y = pow(b,m,n)    
    for j in range(s):
       if (y==1 and j==0) or (y==n-1):
          result = 1
          break
       y = pow(y,2,n)       
    return result

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=59&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2010/10/15/blum-blum-shub-in-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
		<item>
		<title>Using LXDE or PCManFM? Desktop vanished?</title>
		<link>http://vspike.wordpress.com/2010/07/12/using-lxde-or-pcmanfm-desktop-vanished/</link>
		<comments>http://vspike.wordpress.com/2010/07/12/using-lxde-or-pcmanfm-desktop-vanished/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 12:15:46 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[desktop]]></category>
		<category><![CDATA[lxde]]></category>
		<category><![CDATA[openbox]]></category>
		<category><![CDATA[pcmanfm]]></category>
		<category><![CDATA[wallpaper]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=56</guid>
		<description><![CDATA[Some changes in the most recent version may have caused your desktop icons and wallpaper to vanish. As the author notes here this is down to major changes going on behind the scenes. To get get your desktop back, you need to run &#8220;pcmanfm &#8211;desktop&#8221;. To configure the settings which used to be in the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=56&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Some changes in the most recent version may have caused your desktop icons and wallpaper to vanish.  As the author notes <a href="http://blog.lxde.org/?p=737">here</a> this is down to major changes going on behind the scenes.</p>
<p>To get get your desktop back, you need to run &#8220;pcmanfm &#8211;desktop&#8221;.  To configure the settings which used to be in the Edit-&gt;Preferences menu, right-click on the desktop area and select Properties.</p>
<p>If you use openbox or similar, you&#8217;ll need to tick the option in there which causes the window manager&#8217;s menu to appear when the desktop is clicked.  That then hides the pcmanfm desktop config!  Luckily there&#8217;s an answer to that.  Add an option to your WM menu (e.g. Openbox&#8217;s rc.xml) with an entry that calls &#8220;pcmanfm –desktop-pref&#8221;.  This will allow you to edit the settings again.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=56&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2010/07/12/using-lxde-or-pcmanfm-desktop-vanished/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
		<item>
		<title>Baudot fun</title>
		<link>http://vspike.wordpress.com/2010/06/29/baudot-fun/</link>
		<comments>http://vspike.wordpress.com/2010/06/29/baudot-fun/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 15:58:03 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[baudot]]></category>
		<category><![CDATA[retro]]></category>
		<category><![CDATA[telex]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=39</guid>
		<description><![CDATA[This is a throwaway piece of code, so it&#8217;s probably buggy but what the heck! In case you&#8217;re wondering, the Baudot code was invented in 1870 by Émile Baudot and later became the foundation of the international telex alphabets. See http://en.wikipedia.org/wiki/Baudot_code. The original telex machines were electro-mechanical beasts which used this 5-bit code for wire [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=39&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is a throwaway piece of code, so it&#8217;s probably buggy but what the heck!</p>
<p><pre class="brush: python;">

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys

zero = '○'
one = '●'

numbers = []

def int2bin(n, count=5):
    &quot;&quot;&quot;returns the binary of integer n, using count number of digits&quot;&quot;&quot;
    return &quot;&quot;.join([ zero if ((n &gt;&gt; y) &amp; 1) == 0 else one for y in range(count-1, -1, -1)])

def write(code):
    print numbers[code]

def output(newstate, curstate, code):

    figs = 27
    ltrs = 31

    if newstate == 0 and curstate == 1:
        write(ltrs)
    elif newstate == 1 and curstate == 0:
        write(figs)

    write(code)

    return newstate

def translate(input):
    global numbers

    numbers = map(int2bin,range(0,32))
    baudot_letters = '@E@A SIU@DRJNFCKTZLWHYPQOBG@MXV@'
    baudot_symbols = '@3@- @87@$4\',!:(5&quot;)2@6019?&amp;@./;@'

    cr = 8
    lf = 2
    sp = 4
    state = 0

    for c in input.upper():
        if c == '@':
            continue
        if c == ' ':
            output(0,0,sp)
        elif c == '\n':
            output(0,0,cr)
            output(0,0,lf)
        else:
            ix = baudot_letters.find(c)
            if ix != -1:
                state = output(0, state, ix)
            else:
                ix = baudot_symbols.find(c)
                if ix != -1:
                    state = output(1, state, ix)

if __name__ == '__main__':
    for arg in sys.argv[1:]:
        translate(arg)

</pre></p>
<p>In case you&#8217;re wondering, the Baudot code was invented in 1870 by Émile Baudot and later became the foundation of the international telex alphabets.  See <a href="http://en.wikipedia.org/wiki/Baudot_code">http://en.wikipedia.org/wiki/Baudot_code</a>.</p>
<p>The original telex machines were electro-mechanical beasts which used this 5-bit code for wire transmission.  Telex machines could encode text to punched tape for later sending.  They could also print incoming telex transmissions to tape as well as paper.  I remember seeing in a post bureau in Pakistan a journalist receiving a message on one telex machine and feeding the output spool of tape into another as it arrived.  An early version of message forwarding!</p>
<p>Example output of the above:<br />
<code><br />
johncc@liberator:~$ python baudot.py 'Hello world!'<br />
●○●○○<br />
○○○○●<br />
●○○●○<br />
●○○●○<br />
●●○○○<br />
○○●○○<br />
●○○●●<br />
●●○○○<br />
○●○●○<br />
●○○●○<br />
○●○○●<br />
●●○●●<br />
○●●○●<br />
</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/39/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/39/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/39/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=39&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2010/06/29/baudot-fun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
		<item>
		<title>cal &#8211; A command line calendar</title>
		<link>http://vspike.wordpress.com/2010/05/14/cal-a-command-line-calendar/</link>
		<comments>http://vspike.wordpress.com/2010/05/14/cal-a-command-line-calendar/#comments</comments>
		<pubDate>Fri, 14 May 2010 15:08:00 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[calendar]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[gem]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=33</guid>
		<description><![CDATA[cal is an amazingly useful command line tool which prints calendars for you<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=33&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>If you already know about cal then you can move along, but if not please allow me to share this hidden gem with you.</p>
<p>(I find that the *nix command line is peppered with commands like this which are amazingly useful, and if you come from a *nix background they will be second nature to you.  If, like me, you are a refugee from another OS, you may not have found some of them yet.)</p>
<p>With <strong>cal</strong>, it&#8217;s easier to show what it does than to explain it.</p>
<pre>[~] $ cal
      May 2010
Mo Tu We Th Fr Sa Su
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
</pre>
<p><strong>cal</strong> by itself gives you a calendar for the current month.</p>
<pre>[~] $ cal -3
     April 2010             May 2010              June 2010
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
          1  2  3  4                  1  2      1  2  3  4  5  6
 5  6  7  8  9 10 11   3  4  5  6  7  8  9   7  8  9 10 11 12 13
12 13 14 15 16 17 18  10 11 12 13 14 15 16  14 15 16 17 18 19 20
19 20 21 22 23 24 25  17 18 19 20 21 22 23  21 22 23 24 25 26 27
26 27 28 29 30        24 25 26 27 28 29 30  28 29 30
                      31
</pre>
<p><strong>cal -3</strong> gives you a 3 month view.</p>
<p>What if you want a different month? No problem. <strong>cal mm yyyy</strong> will do it.  Note that you need to use four digits for the year!</p>
<pre>[~] $ cal 05 2009
      May 2009
Mo Tu We Th Fr Sa Su
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
</pre>
<p>Finally, <strong>cal -y</strong> will give you a year&#8217;s calendar.  I won&#8217;t show an example here for reasons of space, but just try it for yourself.  Naturally, you can do something like <strong>cal -y 2011</strong> too.</p>
<p>There are a couple more options, so as always read <strong>man cal</strong> for the gory details.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/33/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/33/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/33/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=33&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2010/05/14/cal-a-command-line-calendar/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
		<item>
		<title>Copy and paste across machines with ssh + xsel</title>
		<link>http://vspike.wordpress.com/2010/05/11/copy-and-paste-across-machines-with-ssh-xsel/</link>
		<comments>http://vspike.wordpress.com/2010/05/11/copy-and-paste-across-machines-with-ssh-xsel/#comments</comments>
		<pubDate>Tue, 11 May 2010 13:07:22 +0000</pubDate>
		<dc:creator>John Carlyle-Clarke</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[copy]]></category>
		<category><![CDATA[paste]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[x11]]></category>
		<category><![CDATA[xsel]]></category>

		<guid isPermaLink="false">http://vspike.wordpress.com/?p=27</guid>
		<description><![CDATA[This is pretty obvious with hindsight but I only just thought of it! I often have my work laptop on the desk next to my home desktop, and sometimes for whatever reason I need to copy &#38; paste a URL or similar snippet between the machines. Firstly, if you&#8217;ve never used xsel before, it&#8217;s very [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=27&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>This is pretty obvious with hindsight but I only just thought of it!<br />
I often have my work laptop on the desk next to my home desktop, and sometimes for whatever reason I need to copy &amp; paste a URL or similar snippet between the machines.</p>
<p>Firstly, if you&#8217;ve never used xsel before, it&#8217;s very useful.  Pipe something into it, and it becomes the current selection.  Use it without input and it outputs the current selection buffer.  It has a few more options, so check the man page.</p>
<p>e.g.</p>
<p><code><br />
grep foo ~/bar | xsel<br />
xsel &lt; ~/.conkyrc<br />
xsel &gt; ~/saved<br />
</code></p>
<p>Secondly, I strongly recommend that you set up public key authentication and <a href="http://sial.org/howto/openssh/publickey-auth/">ssh-agent</a> if you haven&#8217;t already.  It will make your life much easier!</p>
<p>Now the important part.  To transfer the paste buffer from the current machine to a remote machine:</p>
<p><code>xsel | ssh -X my.host "DISPLAY=:0.0 xsel -i"</code></p>
<p>Obviously you can replace the input with a local file or the output of a command just as easily, e.g:</p>
<p><code>ssh -X my.host "DISPLAY=:0.0 xsel -i" &lt; foo.html</code></p>
<p>In case you aren&#8217;t familiar with the traditional X11 paste method, this means you select something on the source machine, run the command above, and then use the middle mouse button on the remote machine to paste.  If you don&#8217;t have one, use the left and right buttons simultaneously.</p>
<p>Hope this is useful!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/vspike.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/vspike.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/vspike.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/vspike.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/vspike.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/vspike.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/vspike.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/vspike.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/vspike.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/vspike.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/vspike.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/vspike.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/vspike.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/vspike.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=vspike.wordpress.com&amp;blog=3116622&amp;post=27&amp;subd=vspike&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://vspike.wordpress.com/2010/05/11/copy-and-paste-across-machines-with-ssh-xsel/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e19eb8bef28e8a7cc27e233fb02dd09d?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">vspike</media:title>
		</media:content>
	</item>
	</channel>
</rss>
