<?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>Alex Peters &#187; Technology</title>
	<atom:link href="http://alexpeters.net/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://alexpeters.net</link>
	<description>Another faceless entity, another collection of musings</description>
	<lastBuildDate>Mon, 30 Apr 2012 11:06:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>&#8220;Sorry, I don&#8217;t speak Sanskrit&#8221;</title>
		<link>http://alexpeters.net/2011/sorry-i-dont-speak-sanskrit/</link>
		<comments>http://alexpeters.net/2011/sorry-i-dont-speak-sanskrit/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 23:51:42 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Hilarity]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexpeters.net/2011/02/sorry-i-dont-speak-sanskrit/</guid>
		<description><![CDATA[Looks like it might be time for that scheduled service.]]></description>
			<content:encoded><![CDATA[<p><img style="display:block;margin-right:auto;margin-left:auto;" alt="image" src="http://alexpeters.net/wp-content/uploads/2011/02/wpid-IMG_20110223_145347.jpg" /></p>
<p>Looks like it might be time for that scheduled service.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexpeters.net/2011/sorry-i-dont-speak-sanskrit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Help a brother out</title>
		<link>http://alexpeters.net/2010/help-a-brother-out/</link>
		<comments>http://alexpeters.net/2010/help-a-brother-out/#comments</comments>
		<pubDate>Thu, 20 May 2010 06:25:48 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://alexpeters.net/?p=941</guid>
		<description><![CDATA[If you program with Perl and wouldn&#8217;t mind completing a Perl programming survey, I&#8217;d appreciate it.]]></description>
			<content:encoded><![CDATA[<p>If you program with Perl and wouldn&#8217;t mind completing a <a href="http://perl.websurvey.net.au/">Perl programming survey</a>, I&#8217;d appreciate it.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexpeters.net/2010/help-a-brother-out/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Blast from the past: JobSurge assignment</title>
		<link>http://alexpeters.net/2009/blast-from-the-past-jobsurge-assignment/</link>
		<comments>http://alexpeters.net/2009/blast-from-the-past-jobsurge-assignment/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 13:15:21 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Creativity]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Assignments]]></category>
		<category><![CDATA[Catalyst]]></category>
		<category><![CDATA[Cease and desist]]></category>
		<category><![CDATA[DBIx::Class]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Introduction to Internet Technology]]></category>
		<category><![CDATA[JobSurge]]></category>
		<category><![CDATA[Online demo]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[realestate.com.au]]></category>
		<category><![CDATA[RMIT]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[Template Toolkit]]></category>
		<category><![CDATA[Uni]]></category>

		<guid isPermaLink="false">http://alexpeters.net/?p=406</guid>
		<description><![CDATA[In the second half of 2005 (the first year of my uni degree), I took a subject called Introduction to Internet Technology.  Out of all the subjects I&#8217;ve taken so far for my degree, this one easily affected my career path the most profoundly.  It made me realise precisely where I wanted to channel my [...]]]></description>
			<content:encoded><![CDATA[<p>In the second half of 2005 (the first year of <a title="RMIT: Bachelor of Software Engineering" href="http://www.rmit.edu.au/browse;ID=aekmjoapj62m1">my uni degree</a>), I took a subject called <a title="http://www.rmit.edu.au/courses/004084" href="http://www.rmit.edu.au/courses/004084">Introduction to Internet Technology</a>.  Out of all the subjects I&#8217;ve taken so far for my degree, this one easily affected my career path the most profoundly.  It made me realise precisely where I wanted to channel my professional efforts: web programming.</p>
<p><span id="more-406"></span>Our first assignment for this subject required us to use <a title="http://www.perl.org/about.html" href="http://www.perl.org/about.html">Perl</a> to build an online job agency (<a title="http://alexpeters.net/wp-content/uploads/2009/07/isys1059_assign_1_spec.doc" href="http://alexpeters.net/wp-content/uploads/2009/07/isys1059_assign_1_spec.doc">the original specification in Word format</a> is available).  I had an absolute ball working on this, and the appreciation that I developed for Perl is why I sought employment at <a title="http://realestate.com.au/" href="http://realestate.com.au/">realestate.com.au</a> for my internship&#8212;which was ultimately life-changing.</p>
<p>After this assignment was finished I left it online, and eventually it got spidered by <a title="http://google.com/" href="http://google.com/">Google</a>.  Some time later I received a cease-and-desist order from the owner of the (now defunct) JobSurge.com service.  Evidently he was concerned about me being a professional contender or something.  I didn&#8217;t know whether to be extraordinarily flattered or question the guy&#8217;s sanity.</p>
<h2>Online demo</h2>
<p><a title="http://alexpeters.net/jobsurge/" href="http://alexpeters.net/jobsurge/">Bash the demo around</a> as much as you like.  You are more than welcome to create accounts, but some username/password pairs already exist if you&#8217;re lazy:</p>
<ul>
<li><a title="http://alexpeters.net/jobsurge/company_login.cgi?user=centrelink" href="http://alexpeters.net/jobsurge/company_login.cgi?user=centrelink">centrelink</a>/alexpeters (company)</li>
<li><a title="http://alexpeters.net/jobsurge/company_login.cgi?user=zikaiq" href="http://alexpeters.net/jobsurge/company_login.cgi?user=zikaiq">zikaiq</a>/123456 (company)</li>
<li><a title="http://alexpeters.net/jobsurge/seeker_login.cgi?user=apeters" href="http://alexpeters.net/jobsurge/seeker_login.cgi?user=apeters">apeters</a>/alexpeters (job seeker)</li>
<li><a title="http://alexpeters.net/jobsurge/seeker_login.cgi?user=sipsas" href="http://alexpeters.net/jobsurge/seeker_login.cgi?user=sipsas">sipsas</a>/123456 (job seeker)</li>
</ul>
<h2>Source code</h2>
<p>Download <a title="http://alexpeters.net/jobsurge/jobsurge.zip" href="http://alexpeters.net/jobsurge/jobsurge.zip">a ZIP of the source code</a> if you&#8217;re interested, but heed the following warnings:</p>
<ul>
<li><strong>This is not how I would do it now.</strong> I wrote this code in 2005 as a first-year uni student.  I&#8217;ve been a full-time Perl programmer since the end of 2006.  I post the code here for nostalgia and not as a demonstration of my professional abilities.</li>
<li><strong>This is not how <em>you</em> should do it now.</strong> Most Perl web applications born before 2006 probably look like this (which might be why Perl got dumped for <a title="http://php.net/" href="http://php.net/">PHP</a> in future incarnations of this subject).  These days frameworks like <a title="http://www.catalystframework.org/" href="http://www.catalystframework.org/">Catalyst</a>, <a title="http://template-toolkit.org/" href="http://template-toolkit.org/">Template Toolkit</a> and <a title="http://search.cpan.org/perldoc?DBIx::Class" href="http://search.cpan.org/perldoc?DBIx::Class">DBIx::Class</a> exist to make things a lot more manageable.  My code will teach you Perl syntax, but that&#8217;s about it.  Good Perl programmers don&#8217;t mix HTML and application logic, write data to flat files or directly manipulate cookies!</li>
</ul>
<p>I&#8217;m actually half-tempted to re-write this as a Catalyst application just to observe the difference.  I&#8217;d be much less averse to that being used as a learning example.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexpeters.net/2009/blast-from-the-past-jobsurge-assignment/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Just save the damn data</title>
		<link>http://alexpeters.net/2009/just-save-the-damn-data/</link>
		<comments>http://alexpeters.net/2009/just-save-the-damn-data/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 07:18:33 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Abe]]></category>
		<category><![CDATA[Address books]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Catalyst]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Data redundancy]]></category>
		<category><![CDATA[DreamHost]]></category>
		<category><![CDATA[Edges]]></category>
		<category><![CDATA[Family tree]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FreeMind]]></category>
		<category><![CDATA[Garage door]]></category>
		<category><![CDATA[Graphs]]></category>
		<category><![CDATA[Graphviz]]></category>
		<category><![CDATA[HTC Touch Cruise]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[Keepm]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Nodes]]></category>
		<category><![CDATA[Password manager]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Phone numbers]]></category>
		<category><![CDATA[Sticky notes]]></category>
		<category><![CDATA[Thomas]]></category>
		<category><![CDATA[Wikis]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://byandar.wordpress.com/?p=218</guid>
		<description><![CDATA[I&#8217;ve never been able to find address book software that functions quite the way I would like it to.  As a result, I&#8217;ve often considered writing my own.  But I never quite get there, because I end up generalising my ideas to the point where I have something that isn&#8217;t even an address book any [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve never been able to find address book software that functions quite the way I would like it to.  As a result, I&#8217;ve often considered writing my own.  But I never quite get there, because I end up generalising my ideas to the point where I have something that isn&#8217;t even an address book any more&#8212;even though that thing is still kinda cool.  And I do wonder whether that thing already exists in some online form.</p>
<p><span id="more-218"></span>So what&#8217;s my biggest gripe with software-based address books as we know them?  Redundancy.  With paper-based address books this is an inadequacy inherent to the medium; we just work around it because we have no choice, and we&#8217;re okay with that.</p>
<p>Software-based address books, however, mimic paper-based ones so closely that they too have those now-avoidable drawbacks.  Perhaps this is because people are more likely to adopt something with which they&#8217;re already familiar, or perhaps it&#8217;s because the programmers of these things just lack the interest in improving on the idea that&#8217;s already there.  In any case I&#8217;m somewhat dissatisfied.</p>
<p>An address book consists of a number of contact entries.  Typically, a contact has a name, an address and a phone number associated with it.  Sometimes the address book caters for people with multiple phone numbers; this might be done by labelling them as <em>home</em>, <em>work</em>, <em>fax</em> and <em>mobile</em> for instance.</p>
<p>Most address books only offer one address per contact entry.  After all, people don&#8217;t live in two separate locations; that&#8217;s just silly.  Or is it?  Perhaps.  I know someone who spends equal time living with his divorced parents in two separate houses, but admittedly this is a rare scenario.  People don&#8217;t frequently have two home addresses.  People do however frequently have secondary locations: <em>work addresses</em>.</p>
<p>With address books as we know them (and assuming space for one address per entry), what&#8217;s the best way to handle storage of work addresses?  We can&#8217;t store them as part of a person&#8217;s contact entry, because we probably use that for their home address.  Unless we know we&#8217;ll never care about their home address, we simply have to create a whole new &#8220;contact&#8221; for this information.</p>
<p>But what do we call it?  We could put &#8220;Jim&#8217;s work&#8221; as the name, but then Jim&#8217;s details are spread across multiple records; we don&#8217;t know by looking at Jim&#8217;s entry whether we need to look at others to find out more about him.  We could put the business name as the name, but then we have no link between Jim and where he works at all.  If each contact entry can have free-form notes then we can use that to our advantage, but then we&#8217;d be using a free-form field for information that isn&#8217;t arbitrary, and should be deemed a proper part of the record itself.</p>
<p>If that seems too far-fetched, consider how we currently deal with home addresses.  If you want to store complete information in your address book for a family of five, you need to create five separate entries.  This in itself is reasonable, but because each entry has its own address and home phone information, you are repeating a large amount of common data across all five entries.</p>
<p>What happens when, for one reason or another, their home phone number changes?  That&#8217;s five records out of date; five records needing correction.  If you then fail to correct all five, you introduce inconsistencies.</p>
<p>You could avoid this by regarding one of the five people as the &#8220;head&#8221; of the house, and using only their record to hold all of the home address details.  Then, you could leave the address details for the other four blank and attempt to keep in mind that these people live with the &#8220;head&#8221; when you need their addresses.  Or you could list their addresses as literally, &#8220;see Bob&#8217;s entry.&#8221;</p>
<p>But then not only do your records depend partially on information residing solely in your brain (somewhat defeating the purpose of an out-of-mind &#8220;copy&#8221; in the first place), but now they also inaccurately suggest that you don&#8217;t know the addresses of these four people.  Or you&#8217;re placing usage instructions in your data, which is inelegant.</p>
<p>What happens when you know people with multiple personal mobile numbers?  I&#8217;ve never seen a paper-based address book that caters for this ever more common occurrence.  Perhaps on paper you would jam all of the numbers into the one space, or cross out &#8220;pager&#8221; and write &#8220;other mobile&#8221; in its place.  After all, assuming that everyone has a pager in this day and age is probably overkill.  With most software-based address books though, we don&#8217;t have the facility to overwrite labels on a per-record basis.</p>
<p>These are deficiencies that can&#8217;t be avoided on paper, but can on screen.  How, though?</p>
<p>Recognise that people and locations are <em>separate things</em>, and <em>treat them separately</em>.</p>
<p>Give Jim a &#8220;person&#8221; entry containing his name and his personal mobile number.  Give his house a &#8220;location&#8221; entry, and give his work a location entry.  Then, create <em>links</em> between Jim and the two location entries.  The links themselves could also hold information telling you what the link signifies; one link is for &#8220;home address&#8221; and the other is for &#8220;work address.&#8221;  This information goes into the <em>link</em> rather than the location entry itself, because one person&#8217;s work address might indeed be another person&#8217;s home address&#8212;what if Jim is a butler?</p>
<p>Create five separate &#8220;person&#8221; entries for the family of five, each containing personal mobile numbers as appropriate.  Then, create a &#8220;location&#8221; entry for the address at which the five people live.  Then, create links from each of the five people to the location as a &#8220;home address.&#8221;</p>
<p>Where does the home phone number go?  It doesn&#8217;t belong to any one of the five people; as a fixed phone line it belongs to the location itself.  Therefore, it goes into the location entry and not the individual people entries.  Looking at the people entries and following their links to the location entry, it&#8217;s easily inferred that those people can be contacted via that number.  Because that number is stored once, when it changes it only needs to be changed <em>once</em>.</p>
<p>How about email addresses?  Many people have many email addresses for different purposes (often just for something completely unrelated to email, like MSN).  I just tried <a title="Keepm: free online contact manager" href="http://www.keepm.com/">an online contact manager</a> that allows you to store only two emails per person: a &#8220;home email&#8221; and an &#8220;office email.&#8221;  Terrible!</p>
<p>How is the problem of multiple mobile numbers (and emails) per person solved?  So far, it isn&#8217;t.  These would go into the people entries, but perhaps both the people and location entries would be designed such that they can accept as many numbers (and emails) as one wishes to store, and the user could assign any label they like to each one (&#8220;primary mobile,&#8221; &#8220;secondary mobile,&#8221; &#8220;line 2,&#8221; &#8220;MSN address,&#8221; &#8220;uni email address,&#8221; &#8220;fax line,&#8221; &#8220;garage door opener,&#8221; etc.).</p>
<p>Yes&#8212;<em>garage door opener</em>.  My place of employment is setting up a spare phone number to accept incoming calls from employees as a trigger to open and close the garage door to the car park, saving people from carrying around a remote control (or not being able to open the door at all when there aren&#8217;t enough clickers to go around).  Pretty neat.  How would one go about storing <em>this</em> in an existing address book?</p>
<p>So at this point, we&#8217;ve gone from a set of &#8220;contact&#8221; entries containing as much information as possible relating to one contact, to a set of &#8220;people&#8221; entries, a set of &#8220;location&#8221; entries and a set of <em>links between them</em>.  The people and location entries hold phone numbers specific to that person or location, with a label specific to each number.  Software that implements an address book in this way would, I think, leave me happy.</p>
<p>But in thinking about how I would go about implementing this, I then realise: is there any major difference between &#8220;people&#8221; and &#8220;locations?&#8221;  They both have an identifier (such as &#8220;Jim&#8221; or &#8220;107 Lygon Street&#8221;), they both have phone numbers hanging off them and they both link to other things.  So really, they&#8217;re just information holders linking bidirectionally to other information holders.</p>
<p>If you reason that no information is lost by turning phone numbers into separate entities and linking to them, all we&#8217;re left with is a <a title="Wikipedia: Graph (mathematics)" href="http://en.wikipedia.org/wiki/Graph_(mathematics)">graph</a> (not to be confused with <a title="Wikipedia: Chart" href="http://en.wikipedia.org/wiki/Chart">chart</a>) of tidbits of information, made meaningful via the relationships between them.</p>
<p>And at this point, we&#8217;re no longer limited to storing just contact information.  By being able to link anything off a &#8220;person&#8221; entry we can now store dates of birth, favourite colours, shoe sizes, car registrations&#8230;the list is endless.  And of course by being able to link anything to anything, we can even link people together.  What started out as an address book can now also function as a family tree, among other things.  Anything that can somehow be linked back to a person can make an appearance.</p>
<p>So now, we&#8217;ve gone from sets of &#8220;people&#8221;, &#8220;locations&#8221; and relationships to just &#8220;nodes&#8221; (small bubbles with tidbits of information, like a name or an address) and &#8220;edges&#8221; (the relationships between those tidbits of information).</p>
<p>Given any arbitrary node (perhaps retrieved by name), we can follow its edges to other nodes.  In this way we could eventually traverse the entire knowledge base.  What if we just want to see a list of people though?  We&#8217;ve generalised away the concept of &#8220;people,&#8221; so all nodes are now equal in status.</p>
<p>Simple: create a node called &#8220;person&#8221; or &#8220;people,&#8221; and link all nodes representing people to this newly created node.  Do similar for &#8220;locations,&#8221; &#8220;phone numbers&#8221; and &#8220;dates&#8221; perhaps.  If you then wanted a concise reference to all the categories that you&#8217;ve defined, you could then link all of these to a new node named &#8220;categories.&#8221;</p>
<p>A graphical user interface could probably incorporate this in a nicer fashion: it could make &#8220;category&#8221; appear as an adjustable attribute for each node.  Perhaps the interface could then colour different nodes appropriately, according to their category.  It can be seen however that the data structure itself can hold all of this information, and it would; the user interface would simply choose to interpret it in a special way.</p>
<p>It can be seen that because edges (relationships) provide the meaning to the data, there will be many of them&#8212;possibly even hundreds&#8212;for some nodes.  Perhaps a user interface would want to offer the ability to somehow <em>limit</em> or <em>filter</em> the display of relationships.</p>
<p>For instance, perhaps I could have a <em>view</em> (a predefined set of filtering rules) that tells the user interface to start by showing me only &#8220;people&#8221; nodes, and when I open them, to only show me links to &#8220;location,&#8221; &#8220;phone number&#8221; and &#8220;email address&#8221; nodes.  I could call this my &#8220;address book&#8221; view.</p>
<p>What other views could one build?  It depends on what would be useful for the data stored.  A &#8220;family tree&#8221; view might start with display of just people nodes and limit viewing of relationships to other people nodes.  A &#8220;password manager&#8221; view might only list website URLs with links to &#8220;password&#8221; nodes.</p>
<p>On the topic of storing passwords in a structure like this: if you don&#8217;t use a different password for every single thing in your life requiring one, this data structure could give you interesting insights.  Relationships between nodes can be traversed in either direction, so you could discover exactly which services use a particular one of your passwords.  In a situation where this password is compromised, you would have a concise list of services that require you to go and change it to something else.</p>
<p>This inverse observation of things obviously applies to anything in the data structure, so you could learn all sorts of new things from information that you already know, simply because you&#8217;ve never had the inverse relationships pointed out to you.</p>
<p>So here&#8217;s the question: is there any software or online service already in existence that offers anything remotely like what I&#8217;ve described above?</p>
<p>The closest graphical equivalent I&#8217;m aware of is <a title="FreeMind: free mind mapping software" href="http://freemind.sourceforge.net/">FreeMind</a>.  Primarily, however, FreeMind &#8220;maps&#8221; function as trees; hierarchy is enforced whereas in the structure I&#8217;ve described above, any hierarchy is merely incidental.  Links can be made between two arbitrary nodes of a FreeMind map, but I don&#8217;t know much more about it.  And as software, your data is only accessible from your own computer; you can&#8217;t just log into an online service to retrieve something if you&#8217;re out and about.</p>
<p>In terms of actual functionality (though not necessarily usability), <a title="Wikipedia: List of wiki software" href="http://en.wikipedia.org/wiki/List_of_wiki_software">wikis</a> might come close depending on how they are set up and used.  For instance, a wiki page would serve as both a node and its links; the page&#8217;s name/title would serve as the node&#8217;s name, and the page&#8217;s body would document its relationships with other pages.  Links would be strictly unidirectional unless the wiki software offers &#8220;backlink&#8221; functionality (a list of wiki pages that link to the currently displayed one), and depending on the quality of that functionality, one might have to visit the other page to understand its relationship.  Creation and maintenance of such small wiki pages would be tedious since wiki pages are designed for much more content.</p>
<p>And so for now, I remain tempted to implement my own solution to this.  I&#8217;m always hesitant to act because I don&#8217;t want to start and then discover that someone else has already done it, but then I don&#8217;t think anything would function quite the way I would like it to.</p>
<p>Should I embark on this development adventure, these will be my considerations:</p>
<ul>
<li><strong>Web-based.</strong> If it&#8217;s accessible from a web browser, your data can be accessed from any computer with an internet connection.</li>
<li><strong>Simple mobile interface support.</strong> I would want to be able to use it from <a title="HTC: Touch Cruise overview" href="http://www.htc.com/www/product/touchcruise/overview.html">my phone</a>, which has limited screen space and limited processing power.</li>
</ul>
<p>The system would start out predominantly text-based, even though in my mind I visualise it as bubbles or boxes with lines to other ones.  Further down the line it might be possible to dynamically generate still shots of parts of the data using <a title="Graphviz: graph visualisation software" href="http://www.graphviz.org/">Graphviz</a>.  Even further down the line, with continued lessons of wisdom from <a title="noreliq.com: Folio of Abe Ribeiro" href="http://noreliq.com/">a good friend</a> it might be possible to offer an AJAX-like Flash interface complete with traversal animation.  I would most probably write my code in <a title="perl.org: the Perl directory" href="http://www.perl.org/">Perl</a> using the <a title="Catalyst web framework" href="http://www.catalystframework.org/">Catalyst web framework</a>, and I&#8217;d probably use <a title="MySQL: the world's most popular open-source database" href="http://mysql.com/">MySQL</a> as the data store since that&#8217;s what my <a title="DreamHost web hosting" href="http://www.dreamhost.com/r.cgi?305035">web host</a> provides.</p>
<p>In the meantime however, I guess I&#8217;ll just continue keeping all of my tidbits of information disjointedly on sticky notes and hope that I find some other information management solution that works for me.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexpeters.net/2009/just-save-the-damn-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I wish I could tag my music like I tag my photos</title>
		<link>http://alexpeters.net/2009/i-wish-i-could-tag-my-music-like-i-tag-my-photos/</link>
		<comments>http://alexpeters.net/2009/i-wish-i-could-tag-my-music-like-i-tag-my-photos/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 05:20:24 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ethiopian music]]></category>
		<category><![CDATA[F-Spot]]></category>
		<category><![CDATA[ID3 tags]]></category>
		<category><![CDATA[MP3s]]></category>
		<category><![CDATA[Organisation]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Playlists]]></category>
		<category><![CDATA[Sets]]></category>
		<category><![CDATA[Tags]]></category>

		<guid isPermaLink="false">http://byandar.wordpress.com/?p=30</guid>
		<description><![CDATA[The software I use to manage my photos is awesome; everything essentially sits in a single folder with no special naming, and the photos have &#8220;tags&#8221; (like Alex, Footscray, Kebabbage, Engrish, Moustache) associated with them.  No need to organise photos by their single most prominent trait; you can slap on as many tags as you [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://f-spot.org/Main_Page">The software I use to manage my photos</a> is awesome; everything essentially sits in a single folder with no special naming, and the photos have &#8220;tags&#8221; (like <em>Alex</em>, <em>Footscray</em>, <em>Kebabbage</em>, <em>Engrish</em>, <em>Moustache</em>) associated with them.  No need to organise photos by their single most prominent trait; you can slap on as many tags as you like.</p>
<p>Finding photos is simple; you just work out what tags are relevant and then form a search query out of them: <em>get me all photos taken within Balwyn featuring my two sisters, myself and a wheel of Brie&#8212;but no possums</em>.   If you&#8217;ve been prudent with your tagging when you add photos, this works perfectly every time.</p>
<p>I wish the same could be done for music.<span id="more-30"></span></p>
<p>So MP3s have ID3 tags, and any decent music software will recognise these.  But they&#8217;re not totally arbitrary; you get to store an artist, an album, a title, a genre and some other crap.  If you want to associate something else to an MP3, like &#8220;this was a favourite of mine in 2008&#8243; or &#8220;this song features Ethiopian lyrics,&#8221; ID3 tags won&#8217;t help you.</p>
<p>But playlists might.</p>
<p>Let&#8217;s say you had a bunch of playlists set up to signify such things, like <em>2008 Favourites</em>, <em>Ethiopian Lyrics</em> and <em>Never Play These Automatically</em>.  You could then easily inspect these lists to see what songs fall under these criteria, and you could double-click a playlist to listen to them.</p>
<p>Playlists are more of a one-way relationship though.  A playlist points to songs within it.  Existing software, to my knowledge, doesn&#8217;t look at a song and tell you the playlists to which it belongs.  Therefore, you couldn&#8217;t pick up a song in your collection and automatically be told that you stole it from Dan, it hails from Mongolia and it should always automatically be copied to your car&#8217;s music player.  Which means that when you identify a song as satisfying a certain criterion, you can&#8217;t easily know whether the appropriate playlist already reflects this.  So you unconditionally add it anyway, and because they&#8217;re <em>lists</em> and not <em>sets</em>, your playlists then contain repeated entries.</p>
<p>Authors of some software recognise that most people want this in a more limited sense: ratings.  They then all go about their own way in storing some number of stars alongside each song in one&#8217;s collection (it certainly doesn&#8217;t seem to go into the ID3 tag).</p>
<p>To me though, such a rating system is pretty useless.  Sure, I could default all my tracks to 3 stars and assign one star to anything I never want to hear but don&#8217;t have the heart to delete.  But would I do anything else?  If I started assigning four or five stars to songs I really like <em>at this point in time</em>, what happens when my tastes inevitably change?  The ratings aren&#8217;t going to be constant.  I&#8217;ll just be twiddling with ratings all the time.</p>
<p>And when I&#8217;m looking for songs in Amharic, besides searching for a few obvious artists, ratings certainly won&#8217;t help.</p>
<p>I wonder if I&#8217;m the only person who thinks this way&#8212;that tags could be applied to so much more than just photos&#8212;and if not, how long it will be before they can be used elsewhere.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexpeters.net/2009/i-wish-i-could-tag-my-music-like-i-tag-my-photos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Heads up: Apache 1.3 removed from Debian</title>
		<link>http://alexpeters.net/2008/no-apache-1-3-for-debian/</link>
		<comments>http://alexpeters.net/2008/no-apache-1-3-for-debian/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 04:00:10 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Apache 1.3]]></category>
		<category><![CDATA[Apache 2.0]]></category>
		<category><![CDATA[Backporting]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Debian Etch]]></category>
		<category><![CDATA[Debian Lenny]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[mod_perl]]></category>

		<guid isPermaLink="false">http://byandar.wordpress.com/?p=6</guid>
		<description><![CDATA[Have you upgraded your Debian installation from Etch to Lenny?  I have.  Are you somewhat surprised to find things breaking because the apache-perl binary has disappeared?  I was. The simple answer according to Debian bug #496497 is that Apache 1.3 has been removed.  Debian Etch appears to be the last distribution to support it. To [...]]]></description>
			<content:encoded><![CDATA[<p>Have you upgraded your <a href="http://en.wikipedia.org/wiki/Debian">Debian</a> installation from Etch to Lenny?  I have.  Are you somewhat surprised to find things breaking because the <tt>apache-perl</tt> binary has disappeared?  I was.</p>
<p><span id="more-6"></span></p>
<p>The simple answer according to <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=496497">Debian bug #496497</a> is that Apache 1.3 has been removed.  Debian Etch appears to be the last distribution to support it.</p>
<p><a href="http://byandar.files.wordpress.com/2009/05/surprised_girl.jpeg"><img class="aligncenter size-medium wp-image-8" title="Surprised girl" src="http://alexpeters.net/wp-content/uploads/2009/05/surprised_girl.jpeg?w=300" alt="Surprised girl" width="300" height="273" /></a></p>
<p>To me, this is a surprise.  Surely Apache 1.3 is still used heavily in production around the world.  The possibility that it could be at this point of abandonment&#8212;the point of not even offering it in packages&#8212;didn&#8217;t even occur to me.  That&#8217;s why I wasted so much time trying to &#8220;un-break&#8221; my installation.</p>
<p>So in short, if your code base relies on Apache 1.3 and you upgrade from Etch, you&#8217;re out of luck.  You need to roll back, or possibly compile and install everything by hand, or start looking at migrating from Apache 1.3 to Apache 2.0.  <a href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=482648">Bug #482648</a> offers a temporary workaround which I&#8217;ve not yet tried.</p>
<p>I have mixed feelings about this.  In a way it&#8217;s probably good that the migration from 1.3 to 2.0 is being forced upon us.  In another way though, how does one propose this migration to higher business powers in a way that doesn&#8217;t sound like a complete waste of resources?</p>
<p>At worst, managers reject the migration and developers are stuck with Etch.  But then with the exception of <a href="http://en.wikipedia.org/wiki/Backporting">backported</a> packages, all future improvements to Debian are essentially immaterial.  Should a code base ever lock things down to that degree?</p>
]]></content:encoded>
			<wfw:commentRss>http://alexpeters.net/2008/no-apache-1-3-for-debian/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reasons not to switch to Ubuntu Edgy just yet</title>
		<link>http://alexpeters.net/2006/reasons-not-to-switch-to-ubuntu-edgy-just-yet/</link>
		<comments>http://alexpeters.net/2006/reasons-not-to-switch-to-ubuntu-edgy-just-yet/#comments</comments>
		<pubDate>Sat, 18 Nov 2006 14:00:19 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ventilation]]></category>

		<guid isPermaLink="false">http://byandar.wordpress.com/?p=45</guid>
		<description><![CDATA[After being so impressed with the quality and usability of Ubuntu v6.06 (Dapper Drake), I was downloading v6.10 (Edgy Eft) the moment it was available and I immediately installed it on the two computers here.  Having always experienced badness when upgrading OSes I elected to perform a clean install, and in doing so I avoided [...]]]></description>
			<content:encoded><![CDATA[<p>After being so impressed with the quality and usability of <a href="http://www.ubuntu.com/">Ubuntu</a> v6.06 (Dapper Drake), I was downloading v6.10 (Edgy Eft) the moment it was available and I immediately installed it on the two computers here.  Having always experienced badness when upgrading OSes I elected to perform a clean install, and in doing so I avoided much of the grief that many others have copped (<a href="http://google.com.au/search?q=edgy+upgrade">a simple Google search</a> will give you more information on that).</p>
<p>I like being able to use the newer versions of things like <a href="http://www.eclipse.org/">Eclipse</a> and <a href="http://www.nongnu.org/ratpoison/">Ratpoison</a>, but my Edgy experience has otherwise been quite average.  Here are the gripes that are fresh on my mind:</p>
<p><span id="more-45"></span></p>
<ul>
<li>My computer likes to freeze rock-solid at some point after the screen saver kicks in.  Sometimes I can SSH into it from another computer and restart GNOME; sometimes that doesn&#8217;t help and I have to request a reboot.  Sometimes I can&#8217;t even SSH in and I have to pull the power plug.</li>
<li>The text-mode terminals no longer clear the screen on logout, but that&#8217;s the least of the text-mode terminal issues that I&#8217;ve faced.</li>
<li>On my computer, the &#8216;text-mode&#8217; terminals seem to have been changed so that they&#8217;re actually graphically based somehow&#8212;the font is really weird&#8212;and as a result if I try to drop into a text-mode terminal my computer will sometimes instead present me with a screen full of purple-ish and grey-ish noise.</li>
<li>On the other computer, at random times if you &#8216;accidentally&#8217; move the mouse to the top right-hand corner of the screen, you get the same purple-ish noise all over the screen as mentioned above.  If you then move the mouse around wildly for a little while everything seems to go back to normal.</li>
<li>GNOME likes to present some random non-existent floppy drive in the Places menu due to a bogus entry in <tt>/etc/fstab</tt>, which now seems to take care of business using 128-bit UUIDs.  What the?</li>
<li>GNOME doesn&#8217;t let me assign Ctrl+Alt+Del (or any keyboard combination for that matter) to the <em>Log Out</em> action.</li>
<li>It no longer seems possible to disable rebooting and shutting down from the login screen <em>without</em> also disabling the XDMCP chooser (and I could swear I was able to do this before, but maybe not&#8230;).</li>
<li>It seems necessary to hack around in GConf to disable suspension and hibernation.</li>
<li>GNOME likes to open some random number of Home Folder windows when a user logs in.  Sometimes it&#8217;s none; sometimes it&#8217;s six&#8212;often it&#8217;s a number inbetween.</li>
<li>There is no longer a Disks administration applet, apparently due to the fact that no one maintains it anymore.  Great, but no alternative is installed by default in its place.</li>
</ul>
<p>All in all, Edgy has proven to be quite unusable for all of us here.  I was a total moron to rush off and overwrite a perfectly working system without testing it first.  I suppose I should have acknowledged beforehand that Edgy isn&#8217;t meant to meet the standards of Dapper as a distribution since Dapper is a long-term release and Edgy has gone through some substantial under-the-hood changes, but at the same time I feel that Edgy really shouldn&#8217;t have been released in this state&#8212;surely some of this stuff should have been picked up?</p>
<p>And now to go and re-install Dapper&#8230;  I hate sitting in front of computers installing and configuring software for any long period of time&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://alexpeters.net/2006/reasons-not-to-switch-to-ubuntu-edgy-just-yet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Whee, Java!</title>
		<link>http://alexpeters.net/2006/whee-java/</link>
		<comments>http://alexpeters.net/2006/whee-java/#comments</comments>
		<pubDate>Tue, 26 Sep 2006 14:00:14 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Creativity]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://byandar.wordpress.com/?p=52</guid>
		<description><![CDATA[I&#8217;ve come to really enjoy Java over the past few weeks.  I recently discovered the Java Collections Framework (JCF)— Highly recommended reading on the JCF —and if you love Perl&#8217;s arrays and hashes (or Python&#8217;s lists and dictionaries) as much as I do, you&#8217;ll surely fall hard for the JCF like I did.  One thing [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve come to really enjoy Java over the past few weeks.  I recently discovered the Java Collections Framework (JCF)—</p>
<ul>
<li><a href="http://www.javaworld.com/javaworld/jw-11-1998/jw-11-collections.html"><strong>Highly recommended reading on the JCF</strong></a></li>
</ul>
<p>—and if you love Perl&#8217;s arrays and hashes (or Python&#8217;s lists and dictionaries) as much as I do, you&#8217;ll surely fall hard for the JCF like I did.  One thing that I wish I realised earlier though: <tt>TreeSet</tt>s can&#8217;t contain two items where <tt>item1.compareTo(item2) == 0</tt>, even if <tt>!item1.equals(item2)</tt>.  So watch out there or you&#8217;ll be chasing your tail for hours like I was.</p>
<p>I&#8217;ve also discovered that I really like Java GUI programming.  Our Software Engineering 1B assignment requires us to code a decent batch of GUIs and custom controls:</p>
<p><span id="more-52"></span></p>
<div id="attachment_56" class="wp-caption aligncenter" style="width: 310px"><a href="http://byandar.files.wordpress.com/2006/09/java_gui.png"><img class="size-medium wp-image-56" title="Java GUI" src="http://byandar.files.wordpress.com/2006/09/java_gui.png?w=300" alt="Screen shot of one dialogue from our Software Engineering 1B assignment" width="300" height="240" /></a><p class="wp-caption-text">Screen shot of one dialogue from our Software Engineering 1B assignment</p></div>
<p>It seems that GUIs can get much prettier and much more functional once you understand how to use <tt>GridBagLayout</tt>s; if you&#8217;re stuck doing Java GUIs then learning to use them is probably quite worth the effort.  <em>More functional?</em> Yes indeed&#8212;a fully resizable dialogue is much more functional than one with a hard-coded size, and <tt>GridBagLayout</tt> seems to support this quite nicely.</p>
<p>I also finally sat down and worked out how to use Java&#8217;s serialisation.  How I wish I took the time to do this earlier, especially before this semester started&#8212;coding your own data loading and saving routines is so mundane (and evidently completely unnecessary).  Oh well.</p>
<p>Anyway, I&#8217;m now convinced that when I get around to working on some of the extracurricular projects that I have in mind (if ever), Java will be the perfect weapon of choice.</p>
]]></content:encoded>
			<wfw:commentRss>http://alexpeters.net/2006/whee-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

