<?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>DJS Consulting Tech Blog</title>
	<atom:link href="http://www.djs-consulting.com/linux/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.djs-consulting.com/linux/blog</link>
	<description>Technical Information You Can Use (or not - but hey, at least it's free!)</description>
	<pubDate>Wed, 29 Oct 2008 13:17:13 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>Oracle SQL Developer Debian Package</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/oracle-sql-developer-debian-package</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/oracle-sql-developer-debian-package#comments</comments>
		<pubDate>Wed, 29 Oct 2008 13:17:13 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Oracle]]></category>

		<category><![CDATA[PostgreSQL]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[SQL Server]]></category>

		<category><![CDATA[deb]]></category>

		<category><![CDATA[debian]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[rpm]]></category>

		<category><![CDATA[sql developer]]></category>

		<category><![CDATA[toad]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/?p=72</guid>
		<description><![CDATA[Oracle SQL Developer is a Java-based tool that provides a graphical interface to a database.  While it&#8217;s main focus is Oracle (of course), it can be hooked up, via JDBC, to many other databases, such as MySQL, PostgreSQL, and SQL Server.  It&#8217;s similar to Toad, but is provided by Oracle at no cost.
Oracle [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oracle.com/technology/products/database/sql_developer/index.html" title="Oracle SQL Developer &bull; Oracle">Oracle SQL Developer</a> is a Java-based tool that provides a graphical interface to a database.  While it&#8217;s main focus is Oracle (of course), it can be hooked up, via JDBC, to many other databases, such as MySQL, PostgreSQL, and SQL Server.  It&#8217;s similar to <a href="http://www.toadsoft.com/">Toad</a>, but is provided by Oracle at no cost.</p>
<p>Oracle provides SQL Developer in either an RPM, or a generic binary install.  I like the ability to manage packages, but I&#8217;ve never had much luck at getting RPM to run on Ubuntu.  I downloaded the RPM file, and, using <a href="http://kitenet.net/~joey/code/alien/">alien</a>, I converted the package to a .deb package (Debian package format) and installed it.  I worked like a charm!</p>
<p>I haven&#8217;t tested it with gcj, but using Sun&#8217;s Java 6 update 7 from the Ubuntu repositories, it ran just fine.  After you install the package, do a directory list on /usr/lib/jvm.  You&#8217;re looking for the Sun JDK - if it&#8217;s installed, you&#8217;ll have a symlink java-6-sun that points to java-6-sun-1.6.0.07.  Once you&#8217;ve determined the location of the JDK, run &#8220;sqldeveloper&#8221; from the command line - the program will prompt you for the path to your JDK.  Enter it (probably &#8220;/usr/lib/jvm/java-6-sun&#8221;) and you&#8217;re good to go.  (You have to install the package as root - but, for the rest of these steps, use your normal user, not root, as this puts settings in a .sqldeveloper directory off your home directory.)  The package installs an icon in the &#8220;Programming&#8221; or &#8220;Development&#8221; group.  Once you&#8217;ve told it where the JDK is, you can use this to launch it.</p>
<p><a href="http://www.djs-consulting.com/linux/software/sqldeveloper/sqldeveloper_1.5.54.40-2_all.deb" title="SQL Developer 1.5.1 Debian Package &bull; DJS Consulting Linux Software Repository">Download SQL Developer 1.5.1 Debian Package</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/oracle-sql-developer-debian-package/feed</wfw:commentRss>
		</item>
		<item>
		<title>Killing _utma _utmb _utmc _utmz Cookies</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/killing-_utma-_utmb-_utmc-_utmz-cookies</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/killing-_utma-_utmb-_utmc-_utmz-cookies#comments</comments>
		<pubDate>Tue, 28 Oct 2008 03:06:15 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Internet Privacy &amp; Security]]></category>

		<category><![CDATA[adblock plus]]></category>

		<category><![CDATA[cookies]]></category>

		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/?p=68</guid>
		<description><![CDATA[For those of us who are cookie-conscious as we surf the web, you&#8217;re aware that a lot of sites give cookies with names like _utma, _utmb, _utmc, and _utmz.  It turns out that these cookies come from Google Analytics.
However, using AdBlock Plus, there is an easy way to kill it.  To put in [...]]]></description>
			<content:encoded><![CDATA[<p>For those of us who are cookie-conscious as we surf the web, you&#8217;re aware that a lot of sites give cookies with names like _utma, _utmb, _utmc, and _utmz.  It turns out that these cookies come from Google Analytics.</p>
<p>However, using AdBlock Plus, there is an easy way to kill it.  To put in a filter for it, click the &#8220;ABP&#8221; stop sign icon, and click the &#8220;New Filter&#8230;&#8221; button.  Enter &#8220;http://www.google-analytics.com/*&#8221; and press Enter.  That&#8217;s it!  Those _utm* cookies are now a thing of the past.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/killing-_utma-_utmb-_utmc-_utmz-cookies/feed</wfw:commentRss>
		</item>
		<item>
		<title>xine-lib 1.1.14 RPM</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/xine-lib-1114-rpm</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/xine-lib-1114-rpm#comments</comments>
		<pubDate>Mon, 30 Jun 2008 01:20:16 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Xine RPMs]]></category>

		<category><![CDATA[video]]></category>

		<category><![CDATA[xine]]></category>

		<category><![CDATA[xine-lib]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/?p=67</guid>
		<description><![CDATA[Below are the library and development RPMs for xine-lib version 1.1.14. These were built on Ubuntu Linux and converted to RPM using alien. Be sure to check out the About the Xine RPMs post for more information.
xine-lib — The main xine library
xine-lib-dev — The development xine library (needed if you’re building an interface against xine-lib)
You’ll [...]]]></description>
			<content:encoded><![CDATA[<p>Below are the library and development RPMs for xine-lib version 1.1.14. These were built on Ubuntu Linux and converted to RPM using alien. Be sure to check out the <a href="http://www.djs-consulting.com/linux/blog/2005/about-the-xine-rpms" title="About the Xine RPMs &#8226; DJS Consulting Tech Blog">About the Xine RPMs</a> post for more information.</p>
<p><a href="http://www.djs-consulting.com/linux/software/xine/xine-lib/libxine1-1.1.14-2.x86_64.rpm">xine-lib</a> — The main xine library<br />
<a href="http://www.djs-consulting.com/linux/software/xine/xine-lib/libxine-dev-1.1.14-2.x86_64.rpm">xine-lib-dev</a> — The development xine library (needed if you’re building an interface against xine-lib)</p>
<p>You’ll also need a user interface - as of this release, the most current release of <a href="http://www.djs-consulting.com/linux/blog/2007/xine-ui-0995-rpm" title="xine-ui 0.99.5 RPM &#8226; DJS Consulting Tech Blog">xine-ui is 0.99.5</a>.</p>
<p>(To save disk space, only the current release and two <a href="http://www.djs-consulting.com/linux/blog/2008/xine-lib-1113-rpm" title="xine-lib 1.1.13.1 RPM &#8226; DJS Consulting Tech Blog">prior releases</a> will be maintained.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/xine-lib-1114-rpm/feed</wfw:commentRss>
		</item>
		<item>
		<title>The DJS Consulting Linux Software Repository</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/the-djs-consulting-linux-software-repository</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/the-djs-consulting-linux-software-repository#comments</comments>
		<pubDate>Wed, 25 Jun 2008 03:05:57 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[General Info]]></category>

		<category><![CDATA[files]]></category>

		<category><![CDATA[opensuse]]></category>

		<category><![CDATA[repository]]></category>

		<category><![CDATA[suse]]></category>

		<category><![CDATA[xine]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/?p=66</guid>
		<description><![CDATA[We have created a software repository, where users can browse files that may be available.  The base location is http://www.djs-consulting.com/linux/software.  Within there, there are a few areas.

/sled and /opensuse &#8212; These contain add-on CD images for SUSE Linux Enterprise Desktop (SLED) and openSUSE, created by Mike Petersen.  These add-ons provide multimedia and [...]]]></description>
			<content:encoded><![CDATA[<p>We have created a software repository, where users can browse files that may be available.  The base location is <a href="http://www.djs-consulting.com/linux/software" title="DJS Consulting Linux Software Repository">http://www.djs-consulting.com/linux/software</a>.  Within there, there are a few areas.</p>
<ul>
<li><a href="http://www.djs-consulting.com/linux/software/sled" title="SUSE Linux Enterprise Desktop Add-On Images">/sled</a> and <a href="http://www.djs-consulting.com/linux/software/opensuse" title="openSUSE Add-On Images">/opensuse</a> &mdash; These contain add-on CD images for SUSE Linux Enterprise Desktop (SLED) and openSUSE, created by <a href="http://www.pcc-services.com" title="PCC Services">Mike Petersen</a>.  These add-ons provide multimedia and gaming capabilities that don&#8217;t come with SLED unless you purchase the support or compile them yourselves.  These images can be added as resources in YaST.</li>
<li><a href="http://www.djs-consulting.com/linux/software/xine" title="xine RPMs">/xine</a> &mdash; This contains the 64-bit RPMs for xine (the latest three), both xine-lib and xine-ui.  New releases will continue to get their own posts, but that&#8217;s where they will be.</li>
</ul>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/the-djs-consulting-linux-software-repository/feed</wfw:commentRss>
		</item>
		<item>
		<title>xine-lib 1.1.13 RPM</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/xine-lib-1113-rpm</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/xine-lib-1113-rpm#comments</comments>
		<pubDate>Wed, 25 Jun 2008 01:06:13 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Xine RPMs]]></category>

		<category><![CDATA[rpm]]></category>

		<category><![CDATA[xine]]></category>

		<category><![CDATA[xine-lib]]></category>

		<category><![CDATA[xine-ui]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/?p=65</guid>
		<description><![CDATA[Below are the library and development RPMs for xine-lib version 1.1.13. These were built on Ubuntu Linux and converted to RPM using alien. Be sure to check out the About the Xine RPMs post for more information.
xine-lib — The main xine library
xine-lib-dev — The development xine library (needed if you’re building an interface against xine-lib)
You’ll [...]]]></description>
			<content:encoded><![CDATA[<p>Below are the library and development RPMs for xine-lib version 1.1.13. These were built on Ubuntu Linux and converted to RPM using alien. Be sure to check out the <a href="http://www.djs-consulting.com/linux/blog/2005/about-the-xine-rpms" title="About the Xine RPMs &#8226; DJS Consulting Tech Blog">About the Xine RPMs</a> post for more information.</p>
<p><a href="http://www.djs-consulting.com/linux/software/xine/xine-lib/libxine1-1.1.13-2.x86_64.rpm">xine-lib</a> — The main xine library<br />
<a href="http://www.djs-consulting.com/linux/software/xine/xine-lib/libxine-dev-1.1.13-2.x86_64.rpm">xine-lib-dev</a> — The development xine library (needed if you’re building an interface against xine-lib)</p>
<p>You’ll also need a user interface - as of this release, the most current release of <a href="http://www.djs-consulting.com/linux/blog/2007/xine-ui-0995-rpm" title="xine-ui 0.99.5 RPM &#8226; DJS Consulting Tech Blog">xine-ui is 0.99.5</a>.</p>
<p>(To save disk space, only the current release and two <a href="http://www.djs-consulting.com/linux/blog/2008/xine-lib-11101-rpm" title="xine-lib 1.1.10.1 RPM &#8226; DJS Consulting Tech Blog">prior releases</a> will be maintained.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/xine-lib-1113-rpm/feed</wfw:commentRss>
		</item>
		<item>
		<title>Daniel&#8217;s DropDowns 2.1 - WordPress Plug-In</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/daniels-dropdowns-21-wordpress-plug-in</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/daniels-dropdowns-21-wordpress-plug-in#comments</comments>
		<pubDate>Sat, 10 May 2008 02:14:39 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Plug-Ins]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/?p=64</guid>
		<description><![CDATA[Version 2.1 of Daniel&#8217;s DropDowns has been released.  This fixes a problem introduced with the 2.5-series of WordPress - the output of the WordPress tag changed, so the search-and-replace portion that added a &#8220;Select Category&#8221; entry didn&#8217;t work.  This has been fixed in version 2.1.  I also corrected a small bug that [...]]]></description>
			<content:encoded><![CDATA[<p>Version 2.1 of Daniel&#8217;s DropDowns has been released.  This fixes a problem introduced with the 2.5-series of WordPress - the output of the WordPress tag changed, so the search-and-replace portion that added a &#8220;Select Category&#8221; entry didn&#8217;t work.  This has been fixed in version 2.1.  I also corrected a small bug that caused the first entry in the category list to be selected if a default wasn&#8217;t specified.</p>
<p>It can be downloaded from the <a href="http://wordpress.org/extend/plugins/daniels-dropdowns/">WordPress Plug-In Directory</a>.  Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/daniels-dropdowns-21-wordpress-plug-in/feed</wfw:commentRss>
		</item>
		<item>
		<title>A Handy PHP Backup Script</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/a-handy-php-backup-script</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/a-handy-php-backup-script#comments</comments>
		<pubDate>Sat, 29 Mar 2008 05:06:03 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Databases]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[PostgreSQL]]></category>

		<category><![CDATA[backup]]></category>

		<category><![CDATA[cron]]></category>

		<category><![CDATA[mysqldump]]></category>

		<category><![CDATA[pg_dump]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/2008/a-handy-php-backup-script</guid>
		<description><![CDATA[I found a script over on the Lunarpages Forums about using PHP to back up your site.  I have taken it, modified it a little, beefed up the documentation a lot, and am now posting it here.  You can download the source code for it, and it is also displayed below.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
&#60;?php
/**
 * Generic [...]]]></description>
			<content:encoded><![CDATA[<p>I found a script over on the Lunarpages Forums about <a href="http://www.lunarforums.com/lunarpages_how_tos/site_and_mysql_backups_via_cron-t22118.0.html" title="Site and MySQL backups via cron - Lunarforums">using PHP to back up your site</a>.  I have taken it, modified it a little, beefed up the documentation a lot, and am now posting it here.  You can <a href="/linux/generic_backup.txt" title="Generic Backup Script">download the source code</a> for it, and it is also displayed below.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
</pre></td><td class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #0000ff; font-style: italic;">/**
 * Generic Backup Script.
 * 
 * To configure this script for your purposes, just edit the parameters below.
 * Once you have the parameters set properly, when the script executes, it will
 * create an archive file, gzip it, and e-mail it to the address specified.  It
 * can be executed through cron with the command
 * 
 * php -q [name of script]
 * 
 * You are free to use this, modify it, copy it, etc.  However, neither DJS
 * Consulting nor Daniel J. Summers assume any responsibility for good or bad
 * things that happen when modifications of this script are run.
 * 
 * @author Daniel J. Summers &lt;daniel@djs-consulting.com&gt;
 */</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// --- SCRIPT PARAMETERS ---</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*  -- File Name --
	This is the name of the file that you're backing up, and should contain no
	slashes.  For example, if you're backing up a database, this might look
	something like...
$sFilename = &quot;backup-my_database_name-&quot; . date(&quot;Y-m-d&quot;) . &quot;.sql&quot;; */</span>
<span style="color: #000088;">$sFilename</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;backup-[whatever-it-is]-&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">date</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Y-m-d&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;.[extension]&quot;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">/*  -- E-mail Address --
	This is the e-mail address to which the message will be sent. */</span>
<span style="color: #000088;">$sEmailAddress</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;[your e-mail address]&quot;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">/*  -- E-mail Subject --
	This is the subject that will be on the e-mail you receive. */</span>
<span style="color: #000088;">$sEmailSubject</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;[something meaningful]&quot;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">/*  -- E-mail Message --
	This is the text of the message that will be sent. */</span>
<span style="color: #000088;">$sMessage</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Compressed database backup file $sFilename.gz attached.&quot;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">/*  -- Backup Command --
	This is the command that does the work.
&nbsp;
	A note on the database commands - your setup likely requires a password
	for these commands, and they each allow you to pass a password on the
	command line.  However, this is very insecure, as anyone who runs &quot;ps&quot; can
	see your password!  For MySQL, you can create a ~/.my.cnf file - it is
	detailed at http://dev.mysql.com/doc/refman/4.1/en/password-security.html .
	For PostgreSQL, the file is ~/.pgpass, and it is detailed at
	http://www.postgresql.org/docs/8.0/interactive/libpq-pgpass.html .  Both of
	these files should be chmod-ded to 600, so that they can only be viewed by
	you, the creator.
&nbsp;
	That being said, some common commands are...
&nbsp;
- Backing Up a MySQL Database
$sBackupCommand = &quot;mysqldump -u [user_name] [db_name] &gt; $sFilename&quot;;
&nbsp;
- Backing Up a PostgreSQL Database
$sBackupCommand = &quot;pg_dump [db_name] -h localhost -U [user_name] -d -O &gt; $sFilename&quot;;
&nbsp;
- Backing Up a set of files (tar and gzip)
$sBackupCommand = &quot;tar cvf $sFilename [directory]/*&quot;;
&nbsp;
Whatever command you use, this script appends .gz to the filename after the command is executed.  */</span>
<span style="color: #000088;">$sBackupCommand</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;[a backup command]&quot;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">// --- END OF SCRIPT PARAMETERS ---</span>
<span style="color: #666666; font-style: italic;">//</span>
<span style="color: #666666; font-style: italic;">// Edit below at your own risk.  :)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Do the backup.</span>
<span style="color: #000088;">$sResult</span> <span style="color: #339933;">=</span> <span style="color: #990000;">passthru</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sBackupCommand</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;; gzip $sFilename&quot;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #000088;">$sFilename</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;.gz&quot;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">// Create the message.</span>
<span style="color: #000088;">$sMessage</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Compressed database backup file $sFilename attached.&quot;</span>;
<span style="color: #000088;">$sMimeBoundary</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&lt;&lt;&lt;:&quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">time</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #000088;">$sData</span> <span style="color: #339933;">=</span> <span style="color: #990000;">chunk_split</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">base64_encode</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">,</span> <span style="color: #990000;">file</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sFilename</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #000088;">$sHeaders</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;From: $sEmailAddress<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;MIME-Version: 1.0<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;Content-type: multipart/mixed;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; boundary=<span style="color: #000099; font-weight: bold;">\&quot;</span>$sMimeBoundary<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>;
&nbsp;
<span style="color: #000088;">$sContent</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;This is a multi-part message in MIME format.<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;--$sMimeBoundary<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;Content-Type: text/plain; charset=<span style="color: #000099; font-weight: bold;">\&quot;</span>iso-8859-1<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;Content-Transfer-Encoding: 7bit<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #000088;">$sMessage</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;--$sMimeBoundary<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;Content-Disposition: attachment;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;Content-Type: Application/Octet-Stream; name=<span style="color: #000099; font-weight: bold;">\&quot;</span>$sFilename<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;Content-Transfer-Encoding: base64<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #000088;">$sData</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>
		<span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;--$sMimeBoundary<span style="color: #000099; font-weight: bold;">\r</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">// Send the message.</span>
<span style="color: #990000;">mail</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sEmailAddress</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sEmailSubject</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sContent</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sHeaders</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">// Delete the file - we don't need it any more.</span>
<span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sFilename</span><span style="color: #009900;">&#41;</span>;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/a-handy-php-backup-script/feed</wfw:commentRss>
		</item>
		<item>
		<title>Algorithm for One-to-Many Child Table Updates</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/algorithm-for-one-to-many-child-table-updates</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/algorithm-for-one-to-many-child-table-updates#comments</comments>
		<pubDate>Sat, 29 Mar 2008 03:13:21 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Databases]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[SQL]]></category>

		<category><![CDATA[algorithm]]></category>

		<category><![CDATA[database]]></category>

		<category><![CDATA[many-to-one]]></category>

		<category><![CDATA[one-to-many]]></category>

		<category><![CDATA[pdo]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/2008/algorithm-for-one-to-many-child-table-updates</guid>
		<description><![CDATA[While working on the Not So Extreme Makeover: Community Edition site, I came up with an algorithm that simplifies anything else I&#8217;ve ever written to deal with this condition.  I&#8217;ll set the scenario, explain the algorithm, share how I implemented it in PHP, and provide a modification if the scenario is a bit more [...]]]></description>
			<content:encoded><![CDATA[<p>While working on the <a href="http://www.notsoextreme.org" title="Not So Extreme Makeover: Community Edition">Not So Extreme Makeover: Community Edition</a> site, I came up with an algorithm that simplifies anything else I&#8217;ve ever written to deal with this condition.  I&#8217;ll set the scenario, explain the algorithm, share how I implemented it in PHP, and provide a modification if the scenario is a bit more complicated.</p>
<p><strong>Scenario</strong> - You have two parent tables, and a child table with a many-to-one relationship with both parent tables, used to map entries in the two parent tables to each other.  For this example, we&#8217;ll use these three tables&#8230;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="sql sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> volunteer <span style="color: #66cc66;">&#40;</span>
    vol_id  integer  <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
    vol_last_name  varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">50</span><span style="color: #66cc66;">&#41;</span>  <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
    <span style="color: #66cc66;">...</span>etc<span style="color: #66cc66;">...</span>
  <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>vol_id<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> r_volunteer_area <span style="color: #66cc66;">&#40;</span>
    rva_id  integer  <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
    rva_description  varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">255</span><span style="color: #66cc66;">&#41;</span>  <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>rva_id<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> volunteer_area <span style="color: #66cc66;">&#40;</span>
    va_volunteer_id  integer  <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
    va_area_id  integer  <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>va_volunteer_id<span style="color: #66cc66;">,</span> va_area_id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>va_volunteer_id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> volunteer <span style="color: #66cc66;">&#40;</span>vol_id<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span>
  <span style="color: #993333; font-weight: bold;">FOREIGN</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #66cc66;">&#40;</span>va_area_id<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">REFERENCES</span> r_volunteer_area <span style="color: #66cc66;">&#40;</span>rva_id<span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p><strong>Algorithm</strong> - The three-step algorithm is as follows&#8230;</p>
<ol>
<li>Create a comma-delimited string of IDs for the child table.</li>
<li>Delete the IDs from the child table that are not in the list.</li>
<li>Insert the IDs into the child table that are not there already.</li>
</ol>
<p><strong>Implementation</strong> - In PHP, if you have an array, it&#8217;s easy to come up with comma-delimited list.  To get an array of values back in a post, define your fields with &#8220;[]&#8221; after the name&#8230;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html4strict html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;checkbox&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;area[]&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;chkArea1&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;chkArea1&quot;</span>&gt;</span>Do Something<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;checkbox&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;area[]&quot;</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;chkArea7&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;7&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;chkArea7&quot;</span>&gt;</span>Do Something Else<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</span>&gt;</span></pre></td></tr></table></div>

<p>Here&#8217;s the PHP code, using <a href="http://us.php.net/pdo" title="PHP Data Objects (PDO)">PHP Data Objects (PDO)</a> as the database interface, behind a helper class that creates the statement, appends the parameters, and executes it.  <em>(The &#8220;quoting&#8221; escapes the statement to avoid potential SQL injection attacks - putting it in its own class would make the implementation here much cleaner.)</em></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #0000ff; font-style: italic;">/**
 * STEP 1
 *    Create a comma-delimited list of IDs.
 */</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Quote will return the string as '2,3,4' - since we're using this</span>
<span style="color: #666666; font-style: italic;">// as an IN clause of integers, we'll strip the quotes off.</span>
<span style="color: #000088;">$sAreas</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">quote</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">join</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;,&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;area&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #000088;">$sAreas</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sAreas</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #990000;">strlen</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sAreas</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">// Quote the volunteer ID.</span>
<span style="color: #000088;">$iVol</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">quote</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;vol&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">PARAM_INT</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #0000ff; font-style: italic;">/**
 * STEP 2
 *    Delete the IDs that are no longer in the list.
 */</span>
<span style="color: #000088;">$dbService</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">executeCommand</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">&quot;DELETE FROM volunteer_area
    WHERE   va_volunteer_id = ?
        AND va_area_id NOT IN ($sAreas)&quot;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$iVol</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #0000ff; font-style: italic;">/**
 * STEP 3
 *    Insert the IDs that are not yet in the list.
 */</span>
<span style="color: #000088;">$dbService</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">executeCommand</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">&quot;INSERT INTO volunteer_area
        SELECT $iVol, rva_id
        FROM r_volunteer_area
        WHERE   rva_id IN ($sAreas)
            AND rva_id NOT IN
            (SELECT va_area_id
            FROM volunteer_area
            WHERE va_volunteer_id = ?)&quot;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$iVol</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p><strong>Modification</strong> - Suppose that now you accepted comments along with each of the checkboxes, so a simple two-integer insert/delete is no longer sufficient.  You would still only need to break step 3 into two steps.</p>
<ol>
<li>Get a list of IDs to update.</li>
<li>For each ID in the posted list
<ol>
<li>If the ID exists in the update list, update it.</li>
<li>Otherwise, insert it.</li>
</ol>
</li>
</ol>
<p>The implementation would then be able to use this list to make the decision without hitting the database every time.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="php php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Assume this returns an associative array of IDs.</span>
<span style="color: #000088;">$aUpdates</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$dbService</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">performSelect</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">&quot;SELECT va_area_id
    FROM volunteer_area
    WHERE   va_volunteer_id = ?
        AND va_area_id IN ($sAreas)&quot;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$iVol</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;area&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$iArea</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$iArea</span><span style="color: #339933;">,</span> <span style="color: #000088;">$aUpdates</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Update the table</span>
        <span style="color: #339933;">...</span>etc<span style="color: #339933;">...</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Insert into the table</span>
        <span style="color: #339933;">...</span>etc<span style="color: #339933;">...</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>I think you&#8217;ll agree that this is much better than spinning through a loop, doing a count on each ID to see if it exists, then either doing an update or an insert based on the count.  And, while the implementation here is PHP, it could easily be implemented in any language that supports arrays and database access.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/algorithm-for-one-to-many-child-table-updates/feed</wfw:commentRss>
		</item>
		<item>
		<title>On Mission</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/on-mission</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/on-mission#comments</comments>
		<pubDate>Sat, 15 Mar 2008 01:34:02 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[General Info]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/2008/on-mission</guid>
		<description><![CDATA[Sorry for the lack of new content (although I did download and build the latest release of xine).  I&#8217;ve been working on a community-based volunteer effort in Albuquerque, New Mexico called Not So Extreme Makeover: Community Edition.  I&#8217;m handling the public website, as well as a private side that the leaders can use [...]]]></description>
			<content:encoded><![CDATA[<p>Sorry for the lack of new content (although I did download and build the latest release of xine).  I&#8217;ve been working on a community-based volunteer effort in Albuquerque, New Mexico called <a href="http://www.notsoextreme.org/abq">Not So Extreme Makeover: Community Edition</a>.  I&#8217;m handling the public website, as well as a private side that the leaders can use to track lots of different things.  I&#8217;m going to have some good stuff I&#8217;ve discovered out here once we&#8217;re done (along with lots of praise to heap on <a href="http://www.postgresql.org/">PostgreSQL</a> - I have a new &#8220;most favorite&#8221; open source database), but for the rest of March, I&#8217;ll likely be incommunicado.</p>
<p>Happy Easter - see you in April!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/on-mission/feed</wfw:commentRss>
		</item>
		<item>
		<title>xine-lib 1.1.10.1 RPM</title>
		<link>http://www.djs-consulting.com/linux/blog/2008/xine-lib-11101-rpm</link>
		<comments>http://www.djs-consulting.com/linux/blog/2008/xine-lib-11101-rpm#comments</comments>
		<pubDate>Sat, 15 Mar 2008 01:21:03 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
		
		<category><![CDATA[Xine RPMs]]></category>

		<guid isPermaLink="false">http://www.djs-consulting.com/linux/blog/2008/xine-lib-11101-rpm</guid>
		<description><![CDATA[Below are the library and development RPMs for xine-lib version 1.1.10.1.  These have been built the same way that 1.1.7 and 1.1.9.1 were - built on Ubuntu Linux, and converted to RPM using alien.  Be sure to check out the About the Xine RPMs post for more information.
xine-lib &#8212; The main xine library
xine-lib-dev [...]]]></description>
			<content:encoded><![CDATA[<p>Below are the library and development RPMs for xine-lib version 1.1.10.1.  These have been built the same way that 1.1.7 and 1.1.9.1 were - built on Ubuntu Linux, and converted to RPM using alien.  Be sure to check out the <a href="http://www.djs-consulting.com/linux/blog/2005/about-the-xine-rpms" title="About the Xine RPMs - DJS Consulting Tech Blog">About the Xine RPMs</a> post for more information.</p>
<p><a href="/linux/libxine1-1.1.10.1-2.x86_64.rpm">xine-lib</a> &mdash; The main xine library<br />
<a href="/linux/libxine-dev-1.1.10.1-2.x86_64.rpm">xine-lib-dev</a> &mdash; The development xine library (needed if you’re building an interface against xine-lib)</p>
<p>You’ll also need a user interface - as of this release, the most current release of <a href="http://www.djs-consulting.com/linux/blog/2007/xine-ui-0995-rpm">xine-ui is 0.99.5</a>.</p>
<p>(To save disk space, only the current release and two <a href="http://www.djs-consulting.com/linux/blog/2008/xine-lib-1191-rpm">prior releases</a> will be maintained.)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.djs-consulting.com/linux/blog/2008/xine-lib-11101-rpm/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
