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

<channel>
	<title>SitePoint Blogs &#187; Open Source</title>
	<atom:link href="http://www.sitepoint.com/blogs/category/tech/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sitepoint.com/blogs</link>
	<description></description>
	<pubDate>Fri, 10 Oct 2008 21:09:15 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Sun Buys MySQL For $1 Billion</title>
		<link>http://www.sitepoint.com/blogs/2008/01/19/sun-buys-mysql-for-1-billion/</link>
		<comments>http://www.sitepoint.com/blogs/2008/01/19/sun-buys-mysql-for-1-billion/#comments</comments>
		<pubDate>Fri, 18 Jan 2008 22:06:39 +0000</pubDate>
		<dc:creator>mattymcg</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/2008/01/19/sun-buys-mysql-for-1-billion/</guid>
		<description><![CDATA[Reprinted from the Tech Times #182.
Open source enthusiasts were reeling this week when Sun Microsystems announced that it will be purchasing MySQL AB, the company behind the development of the popular MySQL database software, for US $1 billion.
The spin from both camps was positive, but what does the deal mean for web developers? And what [...]]]></description>
			<content:encoded><![CDATA[<p><em>Reprinted from the <a href="http://www.sitepoint.com/newsletter/viewissue.php?id=3&#038;issue=182">Tech Times #182</a>.</em></p>
<p><strong>Open source enthusiasts were reeling this week when Sun Microsystems announced that it will be purchasing MySQL AB, the company behind the development of the popular MySQL database software, for US $1 billion.</strong></p>
<p><img src="http://www.sitepoint.com/images/blogs/mattymcg/sun-mysql.jpg" class="imgright" alt=""/>The spin from both camps was positive, but what does the deal mean for web developers? And what impact is it likely to have on other open source projects?</p>
<p>To attempt to answer these questions, we need to look at a number of factors, including Sun&#8217;s history with open source technologies, its competitors, and the success of other open source technologies that have been commercialized.</p>
<div id="adz" class="vertical"></div><p>While it&#8217;s not without its detractors, there&#8217;s no denying that Sun has a pretty solid history when it comes to involvement in the open source world. The company claims to be <a href="http://www.sun.com/2006-1113/feature/story.jsp">the biggest contributor to the open source community</a>, a claim that, based upon its release of the Solaris source code in 2005, and the Java programming language in 2006, is difficult to refute.</p>
<p>But there is other evidence of Sun understanding the value of keeping software open source and free: projects like <a href="http://openoffice.org/">OpenOffice.org</a> and <a href="http://netbeans.org/">NetBeans</a> have healthy communities and promising road maps. In fact, if you examine Sun&#8217;s current offerings to the corporate world, the only key component missing from the portfolio (and one that competitors such as Oracle, IBM, and Microsoft already offer) is a database. MySQL, with over 10 million installations worldwide (including high-traffic sites such as Google and Facebook) is a natural fit.</p>
<p>One concern that web developers may have is that the licensing terms will change &#8212; what if Sun decides to start charging a licensing fee for each of the installations of MySQL?</p>
<p>In my opinion, this just won&#8217;t happen, simply because <strong>Sun realizes that it hasn&#8217;t bought a database &#8212; it&#8217;s bought a community</strong>. A community of employees, developers, and clients.</p>
<p>Related to this is the question of whether development of the cross-platform releases of MySQL will stagnate, with Sun&#8217;s energy being focused on compatibility with the Solaris platform. Here&#8217;s what MySQL&#8217;s VP of Community Relations, <a href="http://blogs.mysql.com/kaj/2008/01/16/sun-acquires-mysql/">Kaj Arnö, had to say on the matter</a>:</p>
<blockquote><p>&#8220;I don&#8217;t expect (the development of MySQL on Solaris) in any way to be at the cost of other popular operating systems (Linux, Windows, Mac OS/X, other Unixes etc.) or development environments (PHP, Ruby on Rails, Perl, Python, ODBC, C++, C#, VB etc.). <strong>MySQL grew with LAMP, and MySQL without LAMP at its core is simply unimaginable. </strong>It was MySQL&#8217;s part of LAMP that interested Sun in the first place. Hence I don&#8217;t see Sun having a platform migration strategy, but to continue to be an integral part of the dot in .com.&#8221;
</p></blockquote>
<p>In short, Sun understands the business model around open source software, and it wouldn&#8217;t have invested $1 billion into a company only to screw over its users for a short-term profit when the long-term prospects &#8212; driving MySQL into the corporate arena with paid support &#8212; look so bright. There are plenty of other open source databases (PostgreSQL, for example) with comparable features and performance that customers would quickly migrate to if they were unhappy.</p>
<p>And as for the figure paid by Sun? While some would suggest the number was low given the size of the MySQL user base, $1 billion is a lot of money in anyone&#8217;s eyes. Let&#8217;s take a look at some other recent open source acquisitions [<a href="http://www.zdnetasia.com/news/software/0,39044164,62036683,00.htm">source</a>]:</p>
<ul>
<li>US$210 million for SUSE Linux (Novell)</li>
<li>US$400 million for JBoss (Red Hat)</li>
<li>US$500 million for XenSource (Citrix)</li>
<li>US$350 million for Zimbra (Yahoo!)</li>
</ul>
<p>I&#8217;d say the MySQL team would be feeling pretty happy with themselves right now. Who said there was no money in open source software?</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2008/01/19/sun-buys-mysql-for-1-billion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OSCON 2007: People Hacks</title>
		<link>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-people-hacks/</link>
		<comments>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-people-hacks/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 03:24:12 +0000</pubDate>
		<dc:creator>mde</dc:creator>
		
		<category><![CDATA[Open Source]]></category>
<category>coding</category><category>community</category><category>open source</category>
		<guid isPermaLink="false">http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-people-hacks/</guid>
		<description><![CDATA[Adam Keys is a software developer and writer. His blog is at therealadam.com.
In this talk, Adam presented a number of methods for effective advocacy and for getting along with other developers. In other words, interacting with people is as important as interacting with hardware or software. Problems in this sphere have no technical solution &#8212; [...]]]></description>
			<content:encoded><![CDATA[<p>Adam Keys is a software developer and writer. His blog is at <a href="http://therealadam.com/">therealadam.com</a>.</p>
<p>In this talk, Adam presented a number of methods for effective advocacy and for getting along with other developers. In other words, interacting with people is as important as interacting with hardware or software. Problems in this sphere have no technical solution &#8212; they require a social one. Thus, the idea of &#8216;people hacking.&#8217;</p>
<p>People hacking is not rooted in nefarious black-hat hacking, but simply in using tools of social jujutsu (sometimes on yourself, even) to gain traction for ideas you&#8217;re trying to advocate. Paying more attention to the people side of things can help you build the kind of integrated, smoothly functioning team capable of executing (to borrow a basketball metaphor) the &#8220;no-look pass.&#8221;</p>
<p>A few sample ideas included:</p>
<div id="adz" class="vertical"></div><ul>
<li>Simply smiling &#8212; makes yourself and people around you feel more positive</li>
<li>Avoid negativity &#8212; try the ABBA Method (see the slides for details)</li>
<li>Avoid criticism</li>
<li>Compliment before criticizing</li>
</ul>
<p>Some ideas followed about how to deal with jerks in your organization, including the simple-but-effective &#8220;No Asshole Rule&#8221; (from the book of the same name) that encourages a zero-tolerance toward asshole behavior in your group &#8212; even from so-called superstar programmers.</p>
<p>Adam also encouraged a little self-evaluation to determine if your yourself may be a recovering jerk, and that by focusing on improving your ability to working well with those around you, you can also reform yourself.</p>
<p>Adam has his slides <a href="http://therealadam.com/presentations/oscon2007/PeopleHacks.pdf">available online here</a>.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-people-hacks/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OSCON 2007: Managing Technical Debt</title>
		<link>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-managing-technical-debt/</link>
		<comments>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-managing-technical-debt/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 03:22:35 +0000</pubDate>
		<dc:creator>mde</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-managing-technical-debt/</guid>
		<description><![CDATA[Andy Lester is with the Perl Foundation, and maintains a blog at petdance.com.
Andy&#8217;s talk gave practical advice for catching up on all the tasks you put off until some later date (that inevitably never comes) &#8212; stuff like postponed docs, fixing broken tests (or just writing tests at all), backup regimes, TODOs in your code, [...]]]></description>
			<content:encoded><![CDATA[<p>Andy Lester is with the Perl Foundation, and maintains a blog at <a href="http://petdance.com/">petdance.com</a>.</p>
<p>Andy&#8217;s talk gave practical advice for catching up on all the tasks you put off until some later date (that inevitably never comes) &#8212; stuff like postponed docs, fixing broken tests (or just writing tests at all), backup regimes, TODOs in your code, etc.</p>
<p>He had a very simple and straightforward formula:</p>
<ul>
<li>Identify your debts</li>
<li>Determine the costs</li>
<li>Pay the most profitable</li>
<li>Stop incurring new debt</li>
<li>Repeat as necessary</li>
</ul>
<div id="adz" class="vertical"></div><p>The most important takeaway for me was the idea that you don&#8217;t try to fix all your problems at once. You figure out what fix will give you the most bang for your buck &#8212; not the easiest thing to fix, not the biggest problem. You fix whatever it&#8217;s the <em>most profitable</em> to fix. </p>
<p>There was also a lot of good discussion during this talk on how to convince a manager to allow you to begin reducing technical debt with things like refactoring, increasing test coverage, adding documentation, or actually testing your disaster-recovery plan. The best advice was the idea of putting it in terms that the manager can understand (often with a manager either in money or time).</p>
<p>For example, if managers know that investing two days testing disaster recovery would save weeks of rebuilding critical infrastructure, or that spending a week refactoring crufty old code would make it 20% faster to implement new features, it&#8217;s easier for them to justify the cost.</p>
<p>Andy has his slides <a href="http://petdance.com/perl/technical-debt/">available online here</a>.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-managing-technical-debt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OSCON 2007: The Holistic Programmer</title>
		<link>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-the-holistic-programmer/</link>
		<comments>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-the-holistic-programmer/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 03:21:10 +0000</pubDate>
		<dc:creator>mde</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-the-holistic-programmer/</guid>
		<description><![CDATA[Adam Keys is a software developer and writer. His blog is at therealadam.com.
The days of one guy putting together all the hardware and software together by himself in his garage are long gone &#8212; working with computers increasingly means doing something very specialized in one of the layers between the hardware and the end-user. 
Adam [...]]]></description>
			<content:encoded><![CDATA[<p>Adam Keys is a software developer and writer. His blog is at <a href="http://therealadam.com/">therealadam.com</a>.</p>
<p>The days of one guy putting together all the hardware and software together by himself in his garage are long gone &#8212; working with computers increasingly means doing something very specialized in one of the layers between the hardware and the end-user. </p>
<p>Adam made a good case for the idea that despite this specialization people working with computers should develop at least a passing familiarity with the layers other than their own &#8212; e.g., a guy working in the database learning typography, and a Web designer learning about compilers.</p>
<p>Many developers may not have the interest (or the discipline) to spend time learning about subjects so far removed from their little piece of the pie, but a couple of the benefits to doing so that Adam described seemed pretty compelling:</p>
<div id="adz" class="horizontal"></div><ul>
<li>The ability to converse with the people you work with and understand better how your work interfaces with theirs.</li>
<li>Gaining a new perspective that allows you to find unexpected or creative solutions to problems in your own domain.</li>
</ul>
<p>Adam spent the end of his talk going over the two example layers just mentioned &#8212; CSS/layout/typography, and compilers. That might not have been something every developer was super-interested in learning about, but for a guy like myself who&#8217;s kind of all over the place from the database layer all the way up to end-user-facing design, it was really interesting stuff.</p>
<p>Adam has his slides <a href="http://therealadam.com/presentations/oscon2007/HolisticProgrammer.pdf">available online here</a>.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=137&amp;did=adz&amp;adtype=horizontal" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2007/08/04/oscon-2007-the-holistic-programmer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open Source Image Archiving: Exif, IPTC, XMP and all that</title>
		<link>http://www.sitepoint.com/blogs/2006/08/24/open-source-image-archiving-exif-iptc-xmp-and-all-that/</link>
		<comments>http://www.sitepoint.com/blogs/2006/08/24/open-source-image-archiving-exif-iptc-xmp-and-all-that/#comments</comments>
		<pubDate>Thu, 24 Aug 2006 10:30:58 +0000</pubDate>
		<dc:creator>HarryF</dc:creator>
		
		<category><![CDATA[Open Source]]></category>
<category>digital workflow</category><category>exif</category><category>exiftool</category><category>iptc</category><category>photo archive</category><category>xmp</category>
		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=1687</guid>
		<description><![CDATA[Related to this hack started taking a serious look at the available standards and Open Source tools for adding meta data to images, in the context of building archives of digital photography. With further prompting from reading this (Hey! MS are adopting someone else&#8217;s standard!), dumping some notes&#8230;
Photo Archiving: The Golden Rule
Store metadata in the [...]]]></description>
			<content:encoded><![CDATA[<p>Related to <a href="http://www.sitepoint.com/blogs/2006/08/16/ubuntu-add-ons-with-php/">this hack</a> started taking a serious look at the available standards and Open Source tools for adding meta data to images, in the context of building archives of digital photography. With further prompting from <a href="http://blogs.msdn.com/pix/archive/2006/08/16/702780.aspx">reading this</a> (Hey! MS are adopting someone else&#8217;s standard!), dumping some notes&#8230;</p>
<h2>Photo Archiving: The Golden Rule</h2>
<p>Store metadata <em>in the image</em>.</p>
<p>Actually should be more precise about the word metadata here - there are essentially three significant types of metadata when in comes to digital images, when it comes to who created it and where it&#8217;s stored.</p>
<div id="adz" class="vertical"></div><p>First; the stuff your digital camera attaches to the image when you take a picture (e.g. camera make, time the picture was taken, exposure etc.), second; meta data you manually add to an image, typically at the time you download images from the camera to your PC (e.g. where the picture was taken, a description, keywords, name of the photographer etc.) and third; &#8220;grouping metadata&#8221; - how a collection of images relate to each other (e.g. they were all part of a single photo shoot or they are all family pictures). For the purposes of this discussion, the first two types of metadata can be regarded as a the same thing and it&#8217;s this information that you want stored <em>in the image</em>.</p>
<p>The third type - the &#8220;grouping&#8221; information is &#8220;relative&#8221; and, practically, can only work well if it&#8217;s stored externally from images. This may be as &#8220;lightweight&#8221; as a tree of directories on your filesystem with timestamp-based names, under which you store your images, but image archive tools may offer additional facilities in this area. Important is if you want to group a collection of images under a heading like &#8220;family&#8221;, you also want to have a keyword &#8220;family&#8221; stored in the image. In such case it may be the image archiving tool can build the groups automatically from your keywords.</p>
<p>But you want the first two types of metadata in the image, so that if you switch archiving tools, transfer your images to another system or forget to backup the archive database but remember the images, it won&#8217;t be lost. A decent archiving tool will probably generate it&#8217;s own database from this inline metadata, to make searches etc. efficient, but the final authority should be the image itself.</p>
<h3>Inline Image Metadata Standards</h3>
<p>The next question is how is data stored in an image. File formats like <a href="http://en.wikipedia.org/wiki/JPEG">JPEG</a>, <a href="http://en.wikipedia.org/wiki/RAW_image_format">RAW</a> and <a href="http://en.wikipedia.org/wiki/TIFF">TIFF</a>, commonly used in digital photography / processing, allow additional metadata to be stored in the image file.</p>
<p>So here&#8217;s a &#8220;avoid too much detail&#8221; view: there are three significant inline metadata formats here - <a href="http://en.wikipedia.org/wiki/Exif">Exif</a>, <a href="http://en.wikipedia.org/wiki/International_Press_Telecommunications_Council">IPTC</a> and <a href="http://en.wikipedia.org/wiki/Extensible_Metadata_Platform">XMP</a>. Exif is used by most digital cameras to attach information like exposure at the point you take a picture and tools are available for adding information manually (or automatically) such as <a href="http://www.chebucto.ns.ca/~rakerman/geocode-photos.html">geocoding</a>. IPTC &#8220;extends&#8221; Exif, providing a whole load more named &#8220;tags&#8221; for metadata. Both are fragile from a technical point of view (easy to destroy / corrupt) and problematic from the point of view of extending (if there&#8217;s no named &#8220;tag&#8221; for the metadata you want to store, you&#8217;re out of luck). Meanwhile, XMP, the work of Adobe, is the &#8220;holy grail&#8221;, providing XML / RDF / <a href="http://en.wikipedia.org/wiki/Dublin_Core">Dublin core</a> goodness for storing metadata. It&#8217;s just not well supported yet, but starting to gain significant acceptance. And of course our friend <a href="http://tim.digicol.de/weblog/archives/2003/09/03/172">IE has it&#8217;s own opinion about XMP</a>&#8230;</p>
<p>In practice, you need to be able to work with all three formats for effective photo archiving.</p>
<h2>Image Archiving Apps</h2>
<p>There are a bunch of image archiving tools out there, for any and all operating systems. A good one will allow you to manually supply additional meta data about an image (e.g. keywords like &#8220;family&#8221;, &#8220;dog&#8221; etc.) but, from a straw poll, the majority store this data <em>separately</em> from the image, in some kind of database. Where Ubuntu is concerned <a href="http://en.wikipedia.org/wiki/GThumb">GThumb</a> does just this - stores any user supplied meta data externally from the image (if I remember right, it&#8217;s under <code>~/.gnome2/gthumb</code>).</p>
<p>There&#8217;s a bunch of reasons why I consider this fundamentally wrong, which become obvious the moment an image leaves your filesystem (or perhaps even changes directory / filename) plus the fact that there&#8217;s no &#8220;clear winner&#8221; in the image archiving space - there&#8217;s a good chance you&#8217;ll switch tool more than once. Bottom line: storing metadata separately from the image it refers to is just not the way to do it.</p>
<p>In the Open Source / Linux space, there are a couple of contenders which are getting it &#8220;right&#8221;, namely <a href="http://en.wikipedia.org/wiki/F-spot">F-spot</a> (C# / Mono) and <a href="http://jbrout.python-hosting.com/">jbrout</a> (python / wxpython). Both are capable of storing metadata in the image but there are limitations, e.g. jbrout has no awareness of XMP. Some worthwhile blogs (and comments) to read are <a href="http://assente.altervista.org/?q=it/how_to_manage_exif_xmp_metadata_on_linux_gnome_kde">How to manage EXIF, XMP metadata on linux gnome kde</a>, <a href="http://norman.walsh.name/2006/07/16/managingPhotographs">Managing Photographs</a> and <a href="http://idea.zanestate.edu/archives/2005/11/photo-organizing-in-linux/">Photo organizing in Linux</a>.</p>
<h3>Image Archiving Done Right</h3>
<p>By contrast, the model application, IMO, for how to do it right (sadly Win32 only) but free to <em>use</em> is <a href="http://pixvue.com/">PixVue</a>.</p>
<p>For starters, rather than being an monolithic application, it adds a bunch of Windows Shell Namespace Extensions meaning you can work with your images in Windows Explorer - e.g. right click and &#8220;annotate&#8221; with your metadata.</p>
<p>As I see it &#8220;Digital workflow&#8221;, in general, is all about procedures - you need &#8220;process oriented&#8221; applications that fit into <em>your</em> procedure, rather than monolithic windowed views of your images, which dictate how you work. PixVue gets this right by getting out of the way and hence my desire to <a href="http://www.sitepoint.com/blogs/2006/08/16/ubuntu-add-ons-with-php/">extend Nautilus</a>.</p>
<p>PixVue also stores almost all metadata in the image, understanding EXIF, IPTC <em>and</em> XMP. The exception is the &#8220;grouping&#8221; metadata, which it provides something called &#8220;galleries&#8221;, which are a virtual directory hierarchy - in Explorer you can drag and drop images into a gallery (or galleries) to organise them but these are only &#8220;symbolic links&#8221; to the original files on your filesystem. You can also export your gallery structures as XML, to allow at least the chance of portability.</p>
<p>Also the &#8220;templates&#8221; functionality it provides helps make attaching metadata to a large collection of images as fast and painless as possible.</p>
<p>Finally it has excellent search facilities (via the gallery view) plus it &#8220;integrates&#8221; with (populates the indexes of) Windows search and Google desktop.</p>
<p>The only downside of PixVue is the source isn&#8217;t available and there doesn&#8217;t <em>seem</em> to be an API (it does register some COM components but, from a quick scan, these don&#8217;t allow you to drive it with, say, a Python script), so if you want to extend it to integrate with some geocoding tool, you&#8217;re out of luck.</p>
<h2>Open Source Image Metadata Tools</h2>
<p>So, given a less-than-ideal situation for Open Source image archiving <em>applications</em>, what&#8217;s available in the form of libraries, so you can hack your own?</p>
<p>The long and short of it is more bad news. There&#8217;s a whole bunch of libraries that do a little bit, perhaps only (partially) understanding one format (typically Exif), read only - not write or lacking support for manufacturer Exif extensions.</p>
<p>The situation is particularly acute when it comes to Python, which is badly lacking - there&#8217;s a few &#8220;readers&#8221; out there, and the occasional writer (no XMP writer though) but nothing that&#8217;s really complete. That&#8217;s bad news for jbrout and even more bad news for <a href="http://wiki.opensource.nokia.com/projects/Python_for_S60">Python on Series 60 phones</a>, where being able to tag your pictures, while you sit on a train, would be a killr app.</p>
<p>There are exceptions though, the #1 being <a href="http://www.sno.phy.queensu.ca/~phil/exiftool/">Phil Harvey&#8217;s exiftool</a> (Perl - available via <a href="http://cpan.uwinnipeg.ca/module/Image::ExifTool">CPAN</a>). ExifTool isn&#8217;t just good - it&#8217;s excellent. It&#8217;s basically got it all - EXIF, IPTC and XMP support (read/write), support for <a href="http://cpan.uwinnipeg.ca/module/Image::ExifTool::Sanyo">manufacturer extensions</a> and a common dictionary of tag names that are, to an extent, metadata-format-independent. The only downside is there doesn&#8217;t <em>seem</em> to be (correct me if wrong) a GUI front-end for Linux that exposes all of Exiftool&#8217;s functionality - you&#8217;re either talking command line or writing your own Perl scripts.</p>
<p>Another noteworthy exception <a href="http://www.ozhiker.com/">Evan Hunter&#8217;s</a> <a href="http://www.ozhiker.com/electronics/pjmt/">PHP JPEG Metadata Toolkit</a>, which has EXIF, IPTC and XMP support and awareness of some manufacturer quirks. The API is also pretty simple.</p>
<p>The is of course plenty of other stuff around, which offer part of the picture e.g. <a href="http://www.jempbox.org/">jempbox</a> (Java) but YMMV.</p>
<p>Anyway - hopefully that saves someone some time in research.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2006/08/24/open-source-image-archiving-exif-iptc-xmp-and-all-that/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OSCON 2006: TimeTravel Tables in PostgreSQL</title>
		<link>http://www.sitepoint.com/blogs/2006/08/05/oscon-2006-timetravel-tables-in-postgresql/</link>
		<comments>http://www.sitepoint.com/blogs/2006/08/05/oscon-2006-timetravel-tables-in-postgresql/#comments</comments>
		<pubDate>Sat, 05 Aug 2006 03:31:02 +0000</pubDate>
		<dc:creator>mde</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=1668</guid>
		<description><![CDATA[A. Elein Mustain is a veteran developer of Ingres, Illustra, and Informix, and is the author of the weekly PostgreSQL General Bits column.
Elein showed how to use timestamps to keep an audit trail of all changes in your DB. With this technique, you never actually delete records, you just give them an end date. Multiple [...]]]></description>
			<content:encoded><![CDATA[<p>A. Elein Mustain is a veteran developer of Ingres, Illustra, and Informix, and is the author of the weekly <a href="http://www.varlena.com/GeneralBits/">PostgreSQL General Bits</a> column.</p>
<p>Elein showed how to use timestamps to keep an audit trail of all changes in your DB. With this technique, you never actually delete records, you just give them an end date. Multiple copies of a record (again, with timestamps for each one) also allow you to track edits. (This is a pretty standard approach, especially in &#8216;validated&#8217; environments, or in government-regulated industries.)</p>
<p>The value of using Postgres here is in the advanced features like triggers that you can use with your deletes and updates to offload the work needed to maintain this &#8216;time travel&#8217; system &#8212; rather than forcing your app logic to keep up with all of it. </p>
<p>You can also use PostgreSQL&#8217;s views to query the database for only the current data, or write procedural functions to query the state of the database at a particular point in time in the past.</p>
<div id="adz" class="horizontal"></div><p>Elein has her slides <a href="http://www.varlena.com/GeneralBits/Tidbits/tt.pdf">available online here</a>.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=137&amp;did=adz&amp;adtype=horizontal" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2006/08/05/oscon-2006-timetravel-tables-in-postgresql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OSCON 2006: Big Bad PostgreSQL</title>
		<link>http://www.sitepoint.com/blogs/2006/08/05/oscon-2006-big-bad-postgresql/</link>
		<comments>http://www.sitepoint.com/blogs/2006/08/05/oscon-2006-big-bad-postgresql/#comments</comments>
		<pubDate>Sat, 05 Aug 2006 03:24:43 +0000</pubDate>
		<dc:creator>mde</dc:creator>
		
		<category><![CDATA[Open Source]]></category>
<category>data warehouse</category><category>oltp</category><category>open source</category><category>oracle</category><category>postgresql</category><category>sql</category>
		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=1667</guid>
		<description><![CDATA[Theo Schlossnagle is a principal at OmniTI Computer Consulting, working in the areas of scalable internet architectures, database replication, and e-mail infrastructure.
This talk was on converting a really large (over 3 terabytes, largest table is 1.8 billion rows) data warehouse database from Oracle 8i to PostgreSQL. The reason for the conversion was to save in [...]]]></description>
			<content:encoded><![CDATA[<p>Theo Schlossnagle is a principal at <a href="http://omniti.com/">OmniTI Computer Consulting</a>, working in the areas of scalable internet architectures, database replication, and e-mail infrastructure.</p>
<p>This talk was on converting a really large (over 3 terabytes, largest table is 1.8 billion rows) data warehouse database from Oracle 8i to PostgreSQL. The reason for the conversion was to save in licensing costs. They wanted to move their Oracle licenses over from the data warehouse DB to use them on the online transaction processing (OLTP) system.</p>
<p>The reason for choosing Postgres over MySQL was that Postgres has a much longer history with the kind of advanced features he needed. They needed (and were able to hack PostgreSQL to get) the following features:</p>
<p>1. Data partitioning (spreading tables over multiple drives)<br />
2. Large selects (50-million-row return sets, over 100GB of data)<br />
2. Incremental COMMITs for really, really long queries<br />
3. Replication</p>
<div id="adz" class="horizontal"></div><p>The bottom line was that with some patience and creating thinking, they were able to migrate a really humongous database to PostgreSQL from Oracle, and ended up saving themselves $500,000 USD in licensing costs. A pretty good chunk of change.</p>
<p>Theo has <a href="http://www.lethargy.org/~jesus/exit.php?url_id=91&#038;entry_id=66">put his slides up here</a>.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=137&amp;did=adz&amp;adtype=horizontal" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2006/08/05/oscon-2006-big-bad-postgresql/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Track Your Hacks with CVS</title>
		<link>http://www.sitepoint.com/blogs/2006/01/18/track-your-hacks-with-cvs/</link>
		<comments>http://www.sitepoint.com/blogs/2006/01/18/track-your-hacks-with-cvs/#comments</comments>
		<pubDate>Thu, 19 Jan 2006 03:20:28 +0000</pubDate>
		<dc:creator>Kevin Yank</dc:creator>
		
		<category><![CDATA[Open Source]]></category>
<category>CVS</category><category>PHP</category><category>SmartCVS</category><category>web development</category>
		<guid isPermaLink="false">http://www.sitepoint.com/blogs/2006/01/18/track-your-hacks-with-cvs/</guid>
		<description><![CDATA[The following is republished from the Tech Times #130.
Quite by coincidence, three times in the past week I have had to hack the code of some open source software that went into the site I was working on. First I had to modify phpBB to include an embedded calendar on the home page of a [...]]]></description>
			<content:encoded><![CDATA[<p><em>The following is republished from the <a href="http://www.sitepoint.com/newsletter/viewissue.php?id=3&amp;issue=130">Tech Times #130</a>.</em></p>
<p>Quite by coincidence, three times in the past week I have had to hack the code of some open source software that went into the site I was working on. First I had to modify <a href="http://www.phpbb.com/">phpBB</a> to include an <a href="http://www.easyphpcalendar.com/">embedded calendar</a> on the home page of a private forum I administer. Next I made some custom tweaks to the code of the <a href="http://binarybonsai.com/wordpress/k2/">K2 theme for Wordpress</a>. Finally, I had to hack <a href="http://phpadsnew.com/">phpAdsNew</a> to produce XHTML Strict output.</p>
<p>In each case, the hack required me to actually modify the code of the software. Obviously I prefer not to do this, because when the next release comes along the updated files will overwrite my hacks, and I&#8217;ll need to implement them all over again.</p>
<p>Normally I&#8217;d just document my hacks someplace and grumble about the lack of customization features in the software, but three times in a week was too much. Let me show you how I solved the problem using a common development tool in an unconventional way!</p>
<div id="adz" class="vertical"></div><p><a href="http://www.nongnu.org/cvs/">CVS (Concurrent Versions System)</a> is a system for tracking changes made to files in a project over time, potentially by multiple developers, each working on his or her own copy of the project files at the same time. As it turns out, it&#8217;s extremely useful for managing the custom hacks you make to open source software.</p>
<p>In the past few years, <a href="http://subversion.tigris.org/">Subversion</a> has sprung up as an alternative to CVS that eliminates some of the headaches in CVS to do with things like moving or renaming files. Since such changes don&#8217;t usually happen when you&#8217;re hacking an existing script, and since SitePoint already has a decent <a href="http://www.sitepoint.com/article/harness-power-cvs-site">introduction to CVS</a>, I&#8217;ll stick with CVS for this discussion. If you know Subversion, you can use it instead.</p>
<h2>Setting Up</h2>
<p>You first need to create a CVS repository for yourself (if you don&#8217;t already have one). Because I use Windows, I set up <a href="http://www.cvsnt.com/">CVSNT</a> to do this. If you&#8217;re on Linux, you can use the <a href="http://www.nongnu.org/cvs/">original CVS software</a>. You&#8217;ll also want to get an easy-to-use client program (I recommend <a href="http://www.smartcvs.com/smartcvs/">SmartCVS</a>), unless you particularly like working from the command prompt, in which case I&#8217;ve included all the commands below.</p>
<p>When your CVS server is set up, store a &#8220;clean&#8221; copy of the software version that you have hacked for use on your site as a new module (or project) in the repository (e.g. <code>cvs import phpBB2 phpBB2 init_ver</code>). Tag this &#8220;clean&#8221; version in the repository to indicate the version number of the software it represents (e.g. <code>cvs tag release-2-0-17 .</code>).</p>
<p>Immediately create a branch in the repository (e.g. <code>cvs tag -b custom-mods-branch .</code>) from this initial version, and then check out a copy of the files <em>from the branch</em> into a convenient working directory (e.g. <code>cvs checkout -r custom-mods-branch phpBB2</code>). This copy is where you&#8217;ll keep track of your hacks.</p>
<p>Copy your site&#8217;s (hacked) copy of the software&#8217;s files on top of the &#8220;clean&#8221; copy you just checked out from the branch, and then perform a CVS update to identify the files that have been modified with hacks (e.g. <code>cvs update .</code>). Review these changes to make sure they are all wanted.</p>
<p><img src="http://i2.sitepoint.com/g/nl/tt/cvs-hacks-diff.png" alt="Review hacks in your CVS client"  /><br /><strong>Fig 1. See hacks as changes in the working copy</strong></p>
<p>You can now track changes to your hacks as you make them in this branch. Simply hack the files in this working copy of the branch to your liking and commit your changes to the repository. To update your site with these hacks, delete everything in the destination directory and then export the latest version of your branch files to your site (e.g. <code>cvs export -D /home/www/htdocs phpBB2</code>).</p>
<h2>Merging with New Releases</h2>
<p>When a new version of the software comes out, extract its files into the &#8220;clean&#8221; copy you made at the beginning, commit all the changes to CVS, and then tag the updated files for the release (e.g. <code>cvs tag release-2-0-19 .</code>). These updates will be stored into the trunk of your repository, so they won&#8217;t affect your hacked version (which is tracked in the branch).</p>
<p>Now, here&#8217;s the payoff: to update your hacked version of the software with the changes in the latest official release, just go to your working copy of the branch and merge in all the changes from the trunk (e.g.<br />
<code>cvs update -j release-2-0-17 -j release-2-0-19</code>). Your hacked files should be updated seamlessly with changes that were made in the official update(s).</p>
<p>Files where your hacks occurred close to or on the same line as a change in an official release will report conflicts when you perform the merge. You&#8217;ll have to open these files and resolve the conflicts yourself (CVS will helpfully include both versions of the code at the point of conflict) before committing the corrected versions to the branch. You should then set a tag on the branch to indicate where you did the merge (e.g. <code>cvs tag merge-2-0-19 .</code>).</p>
<p>In effect, CVS will perform all the updates that it can for you, and then will pick out those updates that appear to interfere with your hacks so that you can deal with them. If that isn&#8217;t useful, I don&#8217;t know what is!</p>
<p><img src="http://i2.sitepoint.com/g/nl/tt/cvs-hacks.png" alt="A typical CVS tree for hack management" /><br /><strong>Fig 2. The CVS tree showing merged releases.</strong></p>
<p>The next time an official update comes out, you can perform another merge, but remember to update the starting tag for the merge so you only get the changes since the last time you did a merge (e.g. <code>cvs update -j release-2-0-19 -j release-2-0-21</code>).</p>
<h2>A Note on the Vendor Branch</h2>
<p>The CVS gurus in the audience may be up in arms at this point. In fact, CVS automatically creates a <a href="http://ximbiot.com/cvs/wiki/index.php?title=CVS--Concurrent_Versions_System_v1.12.12.1:_Tracking_third-party_sources"><strong>vendor branch</strong></a> for every module you check into it. You can import each new version of the software into this special branch, and then merge the changes from the branch into your (hacked) trunk.</p>
<p>So why didn&#8217;t I use this? The truth is, it&#8217;s just as easy to do all this using a normal branch as I described above, and it doesn&#8217;t require you to learn all about vendor branches and their pitfalls. Also, you can do it in simpler CVS clients that don&#8217;t support vendor branches (like the free version of SmartCVS).</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2006/01/18/track-your-hacks-with-cvs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OSDC 2005 Wrap Up</title>
		<link>http://www.sitepoint.com/blogs/2005/12/07/osdc-2005-wrap-up/</link>
		<comments>http://www.sitepoint.com/blogs/2005/12/07/osdc-2005-wrap-up/#comments</comments>
		<pubDate>Wed, 07 Dec 2005 23:12:36 +0000</pubDate>
		<dc:creator>mattymcg</dc:creator>
		
		<category><![CDATA[Open Source]]></category>
<category>OSDC</category><category>OSDC2005</category>
		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=1340</guid>
		<description><![CDATA[The second Open Source Developer&#8217;s Conference, held in Melbourne this week, can be most simply described as a massive geek-fest.
It&#8217;s probably unfair to compare it to the Web Essentials conference that I attended earlier this year, because OSDC is - in the organizers&#8217; words - &#8220;created by developers, for developers&#8221; whereas Web Essentials has less [...]]]></description>
			<content:encoded><![CDATA[<p>The second <a href="http://www.osdc.com.au/">Open Source Developer&#8217;s Conference</a>, held in Melbourne this week, can be most simply described as a massive geek-fest.</p>
<p>It&#8217;s probably unfair to compare it to the <a href="http://we05.com/">Web Essentials</a> conference that I attended earlier this year, because OSDC is - in the organizers&#8217; words - &#8220;created by developers, for developers&#8221; whereas Web Essentials has less of a grass-roots base.</p>
<p>But I&#8217;m going to make the comparison anyway, as I think it does provide a useful measuring stick. As far as I could tell, OSDC differed from Web Essentials in five aspects:</p>
<ol>
<li><em>speakers were not paid.</em> This meant that the presentations varied wildly in terms of quality and relevance. There were a number of excellent presentations that appealed to the entire audience, but there were also quite a few talks that were amateurish and about completely obscure topics that would only interest a handful of people.</li>
<li><em>presentations were much shorter.</em> Apart from a 60-minute keynote presentation at the beginning and end of each day, all talks were only half an hour long. The more experienced speakers made good use of this limited time, but for some speakers it resulted in their 73 slides being whizzed through far too quickly for anyone to digest.</li>
<li><em>the variety of topics and industry representation was mind-boggling.</em> The broad umbrella of &#8216;open source&#8217; was the only common thread linking all presentations, and this resulted in topics ranging from doctorate research papers to entrepeneurial advice to snapshots of large-scale government projects to corporate sales pitches.</li>
<li><em>three streams, instead of two.</em> Unfortunately this meant that occasionally there were three topics that interested me and only one that I could attend.</li>
<li><em>less innovation, more unashamed geekiness.</em> WE05 was exciting to be a part of because of all the new technologies and new ways of thinking that were presented. Microformats, AJAX, user-centred design, innovative ways to make web pages accessible - all these topics were introduced by the people who either invented them or were the most proficient in the world at applying them. We were hearing the latest and the greatest from the forward thinkers responsible for advancing the medium of choice for everyone in the room - the web. OSDC presenters on the other hand, were passionate about their area of expertise, but there wasn&#8217;t a common medium for everyone to get excited about other than &#8220;being a geek&#8221; and &#8220;free software&#8221;.</li>
</ol>
<div id="adz" class="vertical"></div><p>That said, it was a worthwhile three days with plenty of topics relevant for web professionals. Here were some of the highlights for me. </p>
<ul>
<li>Jon Oxer&#8217;s opening presentation about how easy it is to connect random bits of hardware to your PC and talk to them using C, PHP or whatever language you fancy. I haven&#8217;t decided whether the coolest part of his talk was his demonstration of how his letter box sends him email (and a text message to his phone) when the postman delivers his mail, or the fact that his cat has been injected with a microchip that opens his cat flap.</li>
<li>Paul Fenwick&#8217;s entertaining tips for giving a good presentation, which included using a Perl module to echo pre-prepared characters to the screen regardless of what keys you press, so that you don&#8217;t make any mistakes when giving a live demo.</li>
<li>Scott Penrose&#8217;s talk about the ambitious project he calls Zaltana, where he has added HTML hooks to the templates of common web applications such as <a href="http://www.squirrelmail.org/">SquirrelMail</a>, <a href="http://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a> and other custom objects and methods in order to provide a common look and feel across the whole framework for his clients that is reusable.</li>
<li>Gus Gollings&#8217; discussion of the Semantic Web. This was a different (less technical) take on the concept than I had heard in the past. Gus provided a rich historical context and posed some thought-provoking questions about what might be one day achievable, and anything that gets me thinking about the future always captures my interest.</li>
<li>SitePoint&#8217;s own <a href="http://www.sitepoint.com/articlelist/48">Kevin Yank</a>&#8217;s talk about <a href="http://www.mozilla.org/projects/xforms/">Mozilla XForms</a> (watch Kev&#8217;s blog for more on this soon).</li>
<li>Luce Chandon’s description of how open source software and the concept of “agents” was used at a Ford manufacturing plant to ensure motor vehicle parts were delivered to the assembly line in a just-in-time fashion.</li>
<li>The &#8220;Lightning Talk&#8221; sessions (nothing to do with the miserable weather outside) where interested attendees gave a 5 minute presentation about whatever they liked. The preparation that went into some of these snappy talks was incredible and it was a good, encouraging environment for those new to public speaking to give it a go.</li>
</ul>
<p>In summary, OSDC is a professionally-run conference that represents good value for money if you are a web professional, but even more so if you are an enthusiastic Perl/PHP programmer who wears a red hat everywhere, has named his first son Linus and has a Slashdot ID of three digits or less. </p>
<p>The networking aspect was also good and I met some terrific folks, many of whom are involved in the various user groups active around Melbourne and Australia, and some who travelled all the way from Japan, Taiwan and elsewhere for the conference.</p>
<p>However, it was a conference that required you to pick the sessions you attended very carefully, as both the speaker&#8217;s presentation skills and the relevance of the content varied (sometimes significantly from the talk&#8217;s title).</p>
<p>Credit to the organizers for running things so smoothly. I&#8217;ll be back next year!</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=136&amp;did=adz&amp;adtype=vertical" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2005/12/07/osdc-2005-wrap-up/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Things to Do With Firefox 1.5</title>
		<link>http://www.sitepoint.com/blogs/2005/11/29/firefox-15/</link>
		<comments>http://www.sitepoint.com/blogs/2005/11/29/firefox-15/#comments</comments>
		<pubDate>Wed, 30 Nov 2005 01:35:01 +0000</pubDate>
		<dc:creator>mmj</dc:creator>
		
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.sitepoint.com/blogs/?p=1332</guid>
		<description><![CDATA[Firefox 1.5 is here, and available for all to download and use.
Many of you no doubt have tried out the Beta and Release Candidate builds.  Here&#8217;s a list of things to do and see with Firefox 1.5.

Use the back and forward buttons to see the dramatic increase in rendering speed resulting from Firefox&#8217;s new [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mozilla.com/">Firefox 1.5</a> is here, and available for all to download and use.</p>
<p>Many of you no doubt have tried out the Beta and Release Candidate builds.  Here&#8217;s a list of things to do and see with Firefox 1.5.</p>
<ul>
<li>Use the back and forward buttons to see the dramatic increase in rendering speed resulting from Firefox&#8217;s new &#8220;fastback&#8221; cache.</li>
<li>If you installed one of the Beta or Release Candidate versions, you could wait until Firefox updates itself using its new incremental update system.</li>
<li>When tabbed browsing, grab the tabs with your mouse and drag them to the order you want.</li>
<li>Press Ctrl+Shift+Delete to bring up the &#8220;Clear Private Data&#8221; window to clear private data such as history, cache and cookies.</li>
<li>Go to <a href="http://www.thiswebsitedoesnt-exist.com/">websitedoesnt-exist.com</a> to check out the new, non-obtrusive error messages.</li>
<li>Check out &#8220;Help > Report Broken Website&#8221; to see how easy it is to report a Website that doesn&#8217;t work in Firefox.</li>
<li>Install Firefox on your Mac and see how easy it is to migrate your profile information from Safari.</li>
</ul>
<p>If you&#8217;re still itching to get involved with Firefox, you could consider the following:</p>
<div id="adz" class="horizontal"></div><ul>
<li>Get your Webcam ready and head on down to <a href="http://www.spreadfirefox.com/">SpreadFirefox</a> to take part in some sort of celebration.</li>
<li>Catch up with Firefox related news at <a href="http://www.mozillazine.org/">MozillaZine</a>, <a href="http://weblogs.mozillazine.org/asa/">Asa Dotzler&#8217;s blog</a> and Mozilla.org.</li>
<li>Get involved with <a href="http://www.mozilla.org/projects/firefox/roadmap.html">Firefox 2.0</a> development by signing up for a <a href="http://forums.mozillazine.org/">MozillaZine</a> and/or <a href="https://bugzilla.mozilla.org/">Bugzilla</a> account and testing <a href="http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/">post-1.5 builds</a>.</li>
<li>Download the free chapters from SitePoint&#8217;s book <a href="http://www.sitepoint.com/books/firefox1/">Firefox Secrets</a>.</li>
<li>Start making your Websites Firefox-friendly!</li>
</ul>
<p><a href="http://www.mozilla.com/">Firefox 1.5</a> is available now for your language and operating system.</p>
<script src="http://ads.aws.sitepoint.com/adjs.php?region=137&amp;did=adz&amp;adtype=horizontal" type="text/javascript"></script>]]></content:encoded>
			<wfw:commentRss>http://www.sitepoint.com/blogs/2005/11/29/firefox-15/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
