<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>All Geekness Great and Small &#187; perl</title>
	<atom:link href="http://www.danrumney.co.uk/tag/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danrumney.co.uk</link>
	<description>Technology from work and home</description>
	<lastBuildDate>Mon, 26 Jul 2010 03:00:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Peculiar Perl problems&#8230;</title>
		<link>http://www.danrumney.co.uk/2009/07/03/peculiar-perl-problems/</link>
		<comments>http://www.danrumney.co.uk/2009/07/03/peculiar-perl-problems/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 22:20:37 +0000</pubDate>
		<dc:creator>dancrumb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[errors]]></category>

		<guid isPermaLink="false">http://www.danrumney.co.uk/?p=254</guid>
		<description><![CDATA[I&#8217;ve been coding in Perl for years and, generally, I think I&#8217;m a pretty competent coder. However, every now and again, I fall into a hole that takes me a loooong time to get out of. Invariably, these problems boil down to upload issues, not code issues. As an aide-mémoire for myself and, hopefully, to [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="Perl Camel" src="http://nxadm.files.wordpress.com/2008/05/perl.jpg" alt="" width="298" height="330" /></p>
<p>I&#8217;ve been coding in Perl for years and, generally, I think I&#8217;m a pretty competent coder. However, every now and again, I fall into a hole that takes me a loooong time to get out of. Invariably, these problems boil down to <em>upload</em> issues, not code issues. As an aide-mémoire for myself and, hopefully, to you, I thought I&#8217;d jot down a few problems that I&#8217;ve seen and what the solution was.<br />
<span id="more-254"></span></p>
<h2>Incorrect shebang</h2>
<p>The &#8216;shebang&#8217; is the first line of code in a Perl script. It consists of a hash character &#8216;#&#8217;, followed by an exclamation mark &#8216;!&#8217;, also know as a &#8216;bang&#8217; (hence the name). Then, the full directory of the Perl binary should be given. As often as not, this will be:</p>
<pre>#!/usr/bin/perl</pre>
<p>or</p>
<pre>#!/usr/local/bin/perl</pre>
<p>This is actually a generic line and is not unique to Perl. It&#8217;s a Unix device that tells the operating system that the program that is capable of interpreting the following script can be found here.</p>
<p>Now&#8230; if you get this wrong, it won&#8217;t work. The problem is, if you&#8217;re developing on one box with Perl in one location and you upload your scripts to another box, where Perl is located elsewhere, you&#8217;ll have the phenomenon of your script working perfectly on your development box, but won&#8217;t work on your production box. In addition, if you try to execute the script from the command line of your production box by invoking Perl directly and then provide the script name, that will <em>also</em> work, because the shebang is ignored in this case. It&#8217;s not until you try to execute your script via an HTTP request that it all falls apart. You will see the following in your error log:</p>
<pre>[Fri Jul 03 16:57:14 2009] [error] [client xxx.xxx.xxx.xxx] suexec failure: could not open log file
[Fri Jul 03 16:57:14 2009] [error] [client xxx.xxx.xxx.xxx] fopen: Permission denied
[Fri Jul 03 16:57:14 2009] [error] [client xxx.xxx.xxx.xxx] Premature end of script headers: script.pl</pre>
<p>This should be your indicator to check the shebang in the scripts on your production server and ensure that the point to the correct location for the Perl binary.</p>
<h2>Incorrect file formats</h2>
<p>Sometimes, your Perl script works fine on your Windows development box, but when you transfer it to your Unix production box, it stops working. As above, it works fine when you run it directly from the command line and you invoke &#8216;perl&#8217; directly, but an HTTP request results in a 404 error, even though the file <em>is</em> actually in place.</p>
<p>The problem here is that DOS and Unix use different characters to indicate the end of a line and, if you have DOS endings in a Unix environment, the O/S is not able to parse the shebang correctly and so cannot locate the Perl binary. The way to fix this is to use the &#8216;dos2unix&#8217; command. This will convery a DOS encoded file into a Unix encoded file and everything will be peachy.</p>
<p>This normally occurs if you&#8217;re using an FTP client that is uploading Perl files in BINary mode instead of ASCII mode. It also occurs if you are transferring files via SCP, since SCP does not convert files as it copies them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danrumney.co.uk/2009/07/03/peculiar-perl-problems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A History of Languages</title>
		<link>http://www.danrumney.co.uk/2009/02/15/a-history-of-languages/</link>
		<comments>http://www.danrumney.co.uk/2009/02/15/a-history-of-languages/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 01:30:22 +0000</pubDate>
		<dc:creator>dancrumb</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[preDevCamp]]></category>
		<category><![CDATA[assembler]]></category>
		<category><![CDATA[basic]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[korn shell]]></category>
		<category><![CDATA[languages]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.danrumney.co.uk/?p=104</guid>
		<description><![CDATA[I saw @mhat&#8216;s tweet today about &#8216;What language should I learn&#8216;  and it got me thinking about the times I&#8217;ve asked that question and how I might answer it. So, @mhat, I&#8217;m taking your tweet to be a challenge to write an unbiased and &#8216;unwrong&#8217; post. To do this, I&#8217;m going to give you a [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone" title="Laptop and Books" src="/images/laptopAndBooks.jpg" alt="" width="425" height="282" /></p>
<p>I saw <a href="http://twitter.com/mhat">@mhat</a>&#8216;s tweet today about &#8216;<a href="http://twitter.com/mhat/status/1212746649">What language should I learn</a>&#8216;  and it got me thinking about the times I&#8217;ve asked that question and how I might answer it. So, @mhat, I&#8217;m taking your tweet to be a challenge to write an unbiased and &#8216;unwrong&#8217; post. To do this, I&#8217;m going to give you a history of the languages I have learned.<br />
<span id="more-104"></span></p>
<h2>The early years</h2>
<p>As I wrote in <a href="http://www.danrumney.co.uk/2009/01/25/all-geekness-great-and-small/">my first post</a>, I started at a tender age, on a ZX Spectrum. The Spectrum came with a dialect of BASIC, called &#8216;Sinclair Basic&#8217;. Like all <a href="http://en.wikipedia.org/wiki/BASIC_programming_language">BASIC</a> derivatives, it&#8217;s a high level language, however unlike modern flavours of BASIC, it was untyped and unstructured. Lines of code were entered with the line number provided explicitly. There was no variable scoping and subroutines were implemented as a special &#8216;GOTO&#8217; called &#8216;GOSUB&#8217; which allowed you to &#8216;RETURN&#8217; to the next line. However, since there was no variable scoping, recursion was impossible.</p>
<p>That said, I was 5 at the time, I wasn&#8217;t too worried about recursion at the time. My programming was limited to copying code out of books containing page after page of ZX Spectrum programs. My brother and I would diligently type these out, then play the game for a while and then start playing with the code to see what changes we could make. This process was about as successful as genetic mutation. More often than not, our change would kill the program, but sometimes it would lead to great stuff.</p>
<p>As we got older, our 48K Spectrum was replaced with a 128K Spectrum. Along with the extra memory, came an update to BASIC to include keywords that allowed direct access to the MIDI chip. I continued to mess around with BASIC, making programs that would play both hands of a piano score, as well as simple games.</p>
<h2>The IBM PC arrives</h2>
<p>My first experience with an IBM PC was the 286. I migrated from Sinclair BASIC to <a href="http://en.wikipedia.org/wiki/Microsoft_GW-BASIC_interpreter">GW-BASIC</a>. At this point, I was writing programs from scratch, including a text adventure called &#8216;Loup-Garou Chateau&#8217;. Tragically, this game has been lost from prosperity, but it was my first foray into actually <em>designing</em> a program before coding it. I chose GW-BASIC, simply because I was very familiar with BASIC and it made for the simplest transition.</p>
<p>As the years passed, I would inherit my dad&#8217;s old computers, moving up through the 386 to the 486. At this point, I got my hands on <a href="http://en.wikipedia.org/wiki/Visual_Basic">Visual Basic</a>. Again, this transition was driven by the ease of transition from what I knew to something new. This was my first experience with a proper development IDE, as well as my first experience with creating GUIs. Beyond that, it wasn&#8217;t a great step forward to me&#8230; that would come during university.</p>
<h2>Coding gets hardcore</h2>
<p>I never studied computing at university; I was a physics student. However, the course I took, included some small computing components. For one lab rotation, we learned how to use computers for physical analysis. This was back in 2000 and they had us coding with <a href="http://en.wikipedia.org/wiki/Pascal_(programming_language)">Pascal</a>. At the same time, I was playing with <a href="http://en.wikipedia.org/wiki/C_(programming_language)">C</a> at the suggestion of my dad. For the first time, I was learning about functions and variable typing. In addition, I was programming with the intention to solve problems that were being presented to me, instead of just &#8216;playing&#8217; with a language and seeing what it could do. When you have an externally provided problem to solve, you&#8217;re forced to learn how to use new facets of the language. If you&#8217;re just playing around, you can be limited to seeing what you can do with the parts of the language you understand.</p>
<p>While at university, I also participated in an Electronics lab which involved learning about the 8086 processor. We had an experimental board which allowed us to commit opcodes to a region of memory and then execute them. As part of the practical, we actually had to wire up the SUB instruction, by running the clock signal through the appropriate logic gates and to the appropriate ALU pins. This was my first experience with the lowest level of programming.</p>
<p>In the summer between my second and third years, I spent four weeks working for <a href="http://www.milinst.com/">Milford Instruments</a>. While there, I developed a <a href="http://www.ppmilinst.redcetera.com/shop/DMX/pdf/1_463.pdf">DMX-512 Transceiver Controller</a>. I was working with the SX-Chip from Parallax and learned how to write assembler, how to work with interrupt handlers and how to get microcontrollers to talk to other microchips. For 4 weeks, I worked on the firmware and the hardware and really learned what programming was all about&#8230;</p>
<p><img class="alignnone" title="Computer Code" src="/images/computerCode.jpg" alt="" width="400" height="300" /></p>
<h2>Coding starts to bring in money</h2>
<p>My month at Milford Instruments made me realise what I wanted to do with my time; I wanted to get into development professionally. It was an obvious choice to apply to IBM and I started working at their Hursley Development Lab, one weeks after school ended. They had me working on a protocol converter, (this time, a SCSI-SSA converter) and, as before, it was coded in assembler.</p>
<p>After a couple of years working on this, I moved to work on one of their Storage RAID controllers. This time I was coding in C, the first time I had done so, professionally. However, alongside all this production code, I was steadily learning how to write <a href="http://en.wikipedia.org/wiki/Perl">Perl</a> and <a href="http://en.wikipedia.org/wiki/Korn_shell">Korn Shell</a> scripts for developing test rigs. I was also teaching myself how to code for the web. I&#8217;d done some basic page development while at university, but I was beginning to learn about dynamic pages and DOM manipulation.</p>
<p>My next move got me into support and I started writing a web-based support tool. It uses Perl and <a href="http://en.wikipedia.org/wiki/MySQL">MySQL</a> in the back-end and HTML and Javascript in the front-end.</p>
<p>The main thing I got from the IBM Development Lab was the chance to be surrounded by people writing a wide variety of code to solve a wide variety of problems and be exposed to what other people were doing with languages that I both knew and that I had never heard of. I learned that there is really no such thing as the one perfect language, rather the best language for the job in hand.</p>
<h2>What&#8217;s the point of all this?</h2>
<p>So, what&#8217;s the point of this post? Is it possible to write a post about &#8220;Which language should I use&#8221; that is not biased and has some value? I hope so. Here&#8217;s what I feel I&#8217;ve learned over the years.</p>
<p>People write code for a wide variety of reasons. The language that they code in is also determined by a multitude of factors. More often than not, we don&#8217;t have a truly free hand when it comes to choosing the language we&#8217;re coding in. However, looking back, I believe I see some benefits in the track I took.</p>
<ul>
<li>Learning C allows you to truly understand what higher level languages such as Perl or Java are doing with objects and references. Although people get scared off by pointers, if you don&#8217;t understand the concept, then you&#8217;re going to struggle with the idea of references. Since all languages have variables, if you can get those nailed and totally understood, you&#8217;re going to be in good stead when you move to a language which brings new data types</li>
<li>Learning Assembler allows you to truly understand what C is doing with pointers. Assembler has a tiny command set and you have to tell it to do every last thing. It&#8217;s a struggle, but once you&#8217;ve got assembler in your tool belt you&#8217;re in good shape. You may never go back to it, but the lessons you learn from it can be applied all the way up the language stack</li>
<li>Learning a wide variety of languages allows you to truly understand the patterns of development that are language-independent and stops you falling into the trap of becoming a language bigot. There&#8217;s nothing wrong with having a favourite language, but saying that one language is categorically better than another because of the presence of a specific feature is like praising Inuit for its wide variety of words for snow. That&#8217;s fine if you&#8217;re describing snow, but not much use if you want to discuss the surfing conditions in Hawaii.</li>
<li>Learning a language is a lot easier if you&#8217;re trying to solve a specific problem that has come from an external source. This is why it&#8217;s such a good idea to do the exercises if you&#8217;re learning from a textbook. There&#8217;s nothing wrong with playing with a feature for its own sake, but unless you have some factor that is external to the language driving you, it&#8217;s going to be tough to learn all that the language can do.</li>
</ul>
<h2>Did I just cop out?</h2>
<p>So, did I just cop out of the question? If someone asked me what language they should learn, how would I answer? That depends on the person. If they were just starting out, I would say Perl or Python. These languages have a huge development community and millions of pages dedicated to coding in them. They are in common usage and show no signs of disappearing in the near future. They are neither arcane nor limited in their range and they allow for procedural and object oriented style programming, meaning that the developer can transition to OO without having to change languages.</p>
<p>If I was being asked by someone with a reasonable amount of development, I would strongly suggest Javascript. As the powerhouse behind Web 2.0 and the basis for coding on the Palm Pre, it&#8217;s critical to know this language. However, testing and debugging Javascript is not a trivial task and requires a developer who is comfortable writing code that has &#8216;a good chance&#8217; of working so that troubleshooting is limited to ironing out wrinkle. Also, the problems of cross-browser support are bewildering enough for experienced coders; exposing a brand new coder to Javascript would probably be the end of their efforts in the field.</p>
<p>If someone wanted to spread their wings a little, I&#8217;d strongly suggest taking a look at Assembler or some other microprocessor based language. It&#8217;s still coding, but you&#8217;re forced to truly understand your code&#8217;s interaction with external factors that don&#8217;t care about your nice neat program. Spending time debugging microprocessor code; especially code that interacts with an external piece of hardware, gives you a true understanding of the many ways that code can fail to work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danrumney.co.uk/2009/02/15/a-history-of-languages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
