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

<channel>
	<title>Peter Mac And Associates</title>
	<atom:link href="http://www.petermac.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.petermac.com</link>
	<description>Australian software and website developers</description>
	<pubDate>Fri, 20 Mar 2009 04:24:07 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Creating Your Website - FAQ</title>
		<link>http://www.petermac.com/2009/02/creating-your-website-faq/</link>
		<comments>http://www.petermac.com/2009/02/creating-your-website-faq/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 23:24:36 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.petermac.com/2009/02/03/creating-your-website-faq/</guid>
		<description><![CDATA[Q. How much will my website cost me?
A. Depends on the size and complexity of the site.
Q. If all i want is a few web pages that tell the world about my buiness.
A. We can design a look and feel, get a few web pages up and host them for about $4,000
Q. But what about getting [...]]]></description>
			<content:encoded><![CDATA[<p>Q. How much will my website cost me?</p>
<p>A. Depends on the size and complexity of the site.</p>
<p>Q. If all i want is a few web pages that tell the world about my buiness.</p>
<p>A. We can design a look and feel, get a few web pages up and host them for about $4,000</p>
<p>Q. But what about getting the site listed in search engines? Will people find me using google?</p>
<p>A. We&#8217;ll put in the smarts behind your pages to give them a good chance of being listed. It&#8217;s called SEO. The rest is up to you.</p>
<p>Q. What do you mean &#8220;the rest is up to me&#8221;?</p>
<p>A. Once you have a working web-site, keeping its&#8217; content fresh and relevant and ensuring it gets high search engine rankings is an on-going job.</p>
<p>Q. Can I update my site with new content or do I have to pay you for any changes?</p>
<p>A. We will use a CMS to build your site, you can add new articles and pages if you need. You can call us if it all gets too much like hard work.</p>
<p>Q. How long will this take?</p>
<p>A. For a simple website where you can provide the textual content, it can take 2-3 weeks. For an online store with order forms and product cataloges considerably longer.</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=Creating%20Your%20Website%20-%20FAQ&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2009%2F02%2Fcreating-your-website-faq%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2009/02/creating-your-website-faq/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Upgrading from Microsoft Access - The options</title>
		<link>http://www.petermac.com/2008/10/upgrading-from-ms-access/</link>
		<comments>http://www.petermac.com/2008/10/upgrading-from-ms-access/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 00:11:17 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[Databases]]></category>

		<guid isPermaLink="false">http://www.petermac.com/2008/10/26/upgrading-from-ms-access/</guid>
		<description><![CDATA[A few of my clients have had similar experiences with the Microsoft Access database system. As a light-weight non mission critical solution it offers ease of use and in the right hands can be extremely functional. The problems start usually after a few years of use when a database moves from the &#8216;useful&#8217; to the [...]]]></description>
			<content:encoded><![CDATA[<p>A few of my clients have had similar experiences with the Microsoft Access database system. As a light-weight non mission critical solution it offers ease of use and in the right hands can be extremely functional. The problems start usually after a few years of use when a database moves from the &#8216;useful&#8217; to the - &#8216;oh my God&#8230;we&#8217;re stuck - the database has fallen over!&#8217;</p>
<h2>The Database Hobbyist</h2>
<p>Microsoft Access in the right hands is a useful tool for data capture and reporting. One of my clients started to develop his own in-house client recording system around 2001. He&#8217;s in the criminal law business and has pretty specific requirements such as recording hearings and their results. He then started to move some workflow steps into his home-grown solution.  The problem is that six years later his Access database could take up to 20 seconds to perform an update.</p>
<p>The problem with MS Access is it&#8217;s not designed for large datasets especially if the data is text or image based. When you start experiencing insert and update delays and/or you&#8217;re left waiting ages for the database to start-up it&#8217;s probably time for an upgrade.</p>
<h2>Database Upgrade Options</h2>
<p>If you&#8217;re tied into the Microsoft camp (and I can&#8217;t see why you should be), you have a couple of options. You can pay the big dollars for a SQL Server installation and a relatively straight-forward data migration path using SQL Server&#8217;s data migration Wizard. You also have the lower cost option of using the Microsoft Desktop Engine (MSDE). This offers pretty much the same functionality as SQL Server but less in terms of development tools and scalability and backup options. MSDE is not for the Enterprise, it&#8217;s for the corner-shop.<br />
Alternatively if the concept of paying license fees does not sit well, you can go for the &#8216;open source&#8217; solutions of <a href="http://www.mysql.com" target="_blank">MySQL</a> (pronounced My seequel) and <a href="http://www.postgresql.org" target="_blank">PostgreSQL</a> (pronounced post gres Q L) These are database systems that have been developed by teams who provide them free of charge to the community at large. There are commercial options with each solution where you can get support agreements, training and the like, but if all you want is the database up and running on your site for free, these are the options for you.</p>
<p>Both MySQL and PostgreSQL offer migration options supplied by the database vendors (can you call someone a vendor if they give you stuff for free?). There&#8217;s also a couple of third-party solutions such as those provided by <a href="http://www.sqlmaestro.com" target="_blank">SQLMaestro</a> and <a href="http://dbconvert.com" target="_blank">DBConvert</a>.</p>
<h2>Don&#8217;t migrate bad data design</h2>
<p>Whatever solution you go for, you&#8217;ve got to be careful you don&#8217;t migrate bad database design. There&#8217;s a whole lot more to designing an efficient and workable database than using a point and click wizard to build a table to store your contacts in. Of course, at Peter Mac we&#8217;d love to help you in this regard, but if you already know what you&#8217;re doing there&#8217;s a whole lof of online support you can get from the open source communities.</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=Upgrading%20from%20Microsoft%20Access%20-%20The%20options&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2008%2F10%2Fupgrading-from-ms-access%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2008/10/upgrading-from-ms-access/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ClamAV - Antivirus Scanner on Fedora8</title>
		<link>http://www.petermac.com/2008/10/clamav-antivirus-scanner-on-fedora8/</link>
		<comments>http://www.petermac.com/2008/10/clamav-antivirus-scanner-on-fedora8/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 11:23:32 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.petermac.com/2008/10/15/clamav-antivirus-scanner-on-fedora8/</guid>
		<description><![CDATA[I&#8217;ve just spent the best part of two hours fighting with the set-up of clamav on a relatively new Fedora 8 Server.  The documentation wasn&#8217;t the greatest so I&#8217;ve decided to do my bit to patch some of the holes.
Download clam
# sudo yum clamav clamav-server clamav-update
A number of instances of the clamd daemon can run [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just spent the best part of two hours fighting with the set-up of clamav on a relatively new Fedora 8 Server.  The documentation wasn&#8217;t the greatest so I&#8217;ve decided to do my bit to patch some of the holes.</p>
<p>Download clam</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace"># sudo yum clamav clamav-server clamav-update</div></div>
<p>A number of instances of the clamd daemon can run concurrently. Each instance needs to be provided with a unique name. To keep things simple, we&#8217;re going to run one instance and call it &#8217;server&#8217;. This name has implications for what is to follow.<br />
Setting up the daemon up as running service involves the following steps:</p>
<p>Phase 1 - create a daemon user</p>
<p>When you install clamav using the yum utility, a new user is created automatically - The user is clamav. Most documentation uses this user as the daemon user - this isn&#8217;t a good idea. The clamav user has rights to update the database containig the list of known virii.   Create a new user clamd with no login rights.</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">#sudo useradd -s /sbin/nologin/ clamd</div></div>
<p>Phase 2 - Copying and renaming config files</p>
<p>Copy assorted files from /usr/share/doc/clamav-server-nn.nn.nn/ (where nn is the version number of your install) to assorted folders, renaming them and modifying their content.</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace"># cp /usr/share/doc/clam-server-nn.nn.nn/clamd.conf /etc/clamd.d/</div></div>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace"># cp /usr/share/doc/clam-server-nn.nn.nn/clamd.sysconfig /etc/sysconfig/clamd.server</div></div>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace"># cp /usr/share/doc/clam-server-nn.nn.nn/clamd.logrotate /etc/logrotate.d/clamd</div></div>
<p>Phase 3 - Editing the configuration files</p>
<p>Start by editing the /etc/clamd.d/clamd.conf file.</p>
<p>Firstly, comment out the line saying Example in file clamd.conf</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">LogFile /var/log/clamd/clamd.log<br />
Edit the LogSysLog setting LogSysLog yes<br />
PidFile /var/run/clamd.server/clamd.pid<br />
LocalSocket /var/run/clamd.server/clamd.sock<br />
TcpAddr 127.0.0.1<br />
User clamd</div></div>
<p>Phase 3 - Create the folders</p>
<p>Create the /var/run/clamd.server folder</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">#mkdir /var/run/clamd.server<br />
#chown clamd.clamd /var/run/clamd.server</div></div>
<p>Create the clamd log folder</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">#mkdir /var/log/clamd<br />
#touch /var/log/clamd/clamd.log<br />
#chown clamd.clamd -R /var/log/clamd/<br />
#chmod 0620 /var/log/clamd/clamd.log</div></div>
<p>Copy the clamd-wrapper to clamd.server</p>
<p># cp /etc/init.d/clamd-wrapper /etc/init.d/clamd.server</p>
<p>Edit the CLAMD_SERVICE variable in the /etc/init.d/clamd.server file</p>
<p>CLAMD_SERVICE=server</p>
<p>Geez..this is getting complicated&#8230;one final step</p>
<p>Create a clamd.server file in /usr/sbin that links to the original clamd file</p>
<p># ln -s /usr/sbin/clamd.server /usr/sbin/clamd</p>
<p>OK..all systems go&#8230;</p>
<p>now start the daemon</p>
<p>#etc/init.d/clamd.server start</p>
<p>If you want the daemon to start on reboot add it to the startup list using chkconfig</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:435px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace"># /sbin/chkconfig clamd.server start</div></div>
<p>Hopefully you get the green light and have a running clamd daemon. If you don&#8217;t (check using ps auxw | grep clamd) please post a comment and let me know what grief you&#8217;re having.</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=ClamAV%20-%20Antivirus%20Scanner%20on%20Fedora8&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2008%2F10%2Fclamav-antivirus-scanner-on-fedora8%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2008/10/clamav-antivirus-scanner-on-fedora8/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Public Key</title>
		<link>http://www.petermac.com/2008/10/public-key/</link>
		<comments>http://www.petermac.com/2008/10/public-key/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 02:23:59 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.petermac.com/2008/10/15/public-key/</guid>
		<description><![CDATA[&#8212;&#8211;BEGIN PGP PUBLIC KEY BLOCK&#8212;&#8211;
Version: GnuPG v1.4.9 (MingW32)
mQGiBEj1SQoRBACbRUMtyYFvFa81V7cnzbYJzSfk5MDuUdV0Wo+ckxKKRfW4Qf30
+ORIJeqzirJp9tOd8/uoPVnxNOK4LBKw47W+lHHLUYNMy2qByy7zVBXfg9EXuIrU
edebiwM92yODj/VoAxTjI1p5Mmr5fhFSSEo8yh7GTqg8g0j4jWPR+eZxywCgi78d
CZ6WmIS+tpNvEqrV/DwQUd0D/R9tyFMuwVKKOcyPxpekJ5RmKk8DDJ7cx6z0s6wM
kpx5qpL2QKhVp/3s7t9M40FT3ZmT2ERjJwZzncM8JMxDOK/vS8CRGlTd/JJIzWNj
8SOo55HCq1gJP8U01P1wU1AK9/7n+RcENOGvHEPvKfWweY8HuE8OwHkPGxkqT4og
1TNgA/97226C/NTf7MmOmV5y3yo5k5VUzGRjPpyvZIxIxnQJR4viquNEJfnW9BQT
kRw4J7qQePvcbYrvDWxHlJJzlIzQxbBUqVry4K79ByudQA8QaQAT+XJIMjjppgHz
rKWB6YVTqsSlfjASM9RqjfDCMZpefpjlq2hvJ2WzyLnYGyEJ+rRuUGV0ZXIgTWFj
IEdpb2xsYWZoZWFyZ2EgKEtleSBmb3IgbWFpbCBmcm9tIHBldGVyQHBldGVybWFj
LmNvbSAtIFBldGVyIE1hYyBBbmQgQXNzb2NpYXRlcykgPHBldGVyQHBldGVybWFj
LmNvbT6IZgQTEQIAJgUCSPVJCgIbIwUJCWYBgAYLCQgHAwIEFQIIAwQWAgMBAh4B
AheAAAoJEJlpD3yHCMV4/qYAn0WbPZejFQGgFi3g5IT2Q0D8u++xAJsGmFMdEwPm
zFi4mAEAbhfO+tuUr7kCDQRI9UkKEAgAhf491b6MaNOCp1qo9hjvX1NLQ1sORkI9
suP7PceRZfXuqc92GMXw8lYds9cPddtOBPpBZCaezxvRZHfERwiSWEVjEdwXyC5z
y8ys8L4jxaPS8YS3SnEjkg+1DCLRb5fry+jiSaFeC2YklFFopSxWiSJQow9+jIPF
hfvE4ZswP3EBx54SYC92sZgqfq/DcDcqlOp7gGAxHhxP+rdt4ow4aEzhdzyzNVpb
C26BwRWH6T1JtsBSiy0PoaxV2eVl3Fb93aHPVldtdk5p6Pqm03KAbowurFfLshK9
jyPuOyaM8cUSN+RXSgi846mXT0EhY6J4Ofb0rClm8maXwtSHpk8wBwADBQf/b4i6
oDa5K69S2tyERpxAPhSBPdUnYT0oxlZvj75Wp1SfBkmUy8O+1jONIE1+OhLslxke
WdFMmDrH8AiRU0q19bGEsKDqUWt58UV7GL26+QZbQWjhz7fWzI6ljftgshmXQozI
3725Y2AVQR3U4BaFNiFrJQECPYLB/yypf8OCsZjspERb+d4J7CXfk5mVkFFAOj7N
5UQv0u+dMVJAP3OCVdEibjXc/c4qPPxLUioAqN8MbixM1OzZDOH55K/oJdRoGyIG
mfWU1lToNDCSi7BSqXjPGC+DMDjFc4QfnBFJfV0301GvLshuw+b/r8qJNfxkYkk4
zK/sgbPlXPL032aM4ohPBBgRAgAPBQJI9UkKAhsMBQkJZgGAAAoJEJlpD3yHCMV4
JQMAnA21n/10YG9hXHrUEel1HTFcU+opAJ9KlShcMzJoLI5VVIqfJTa8y/GE+Q==
=L39p
&#8212;&#8211;END PGP PUBLIC KEY BLOCK&#8212;&#8211;
Click here to download this as key as a file

    

	]]></description>
			<content:encoded><![CDATA[<p>&#8212;&#8211;BEGIN PGP PUBLIC KEY BLOCK&#8212;&#8211;<br />
Version: GnuPG v1.4.9 (MingW32)</p>
<p>mQGiBEj1SQoRBACbRUMtyYFvFa81V7cnzbYJzSfk5MDuUdV0Wo+ckxKKRfW4Qf30<br />
+ORIJeqzirJp9tOd8/uoPVnxNOK4LBKw47W+lHHLUYNMy2qByy7zVBXfg9EXuIrU<br />
edebiwM92yODj/VoAxTjI1p5Mmr5fhFSSEo8yh7GTqg8g0j4jWPR+eZxywCgi78d<br />
CZ6WmIS+tpNvEqrV/DwQUd0D/R9tyFMuwVKKOcyPxpekJ5RmKk8DDJ7cx6z0s6wM<br />
kpx5qpL2QKhVp/3s7t9M40FT3ZmT2ERjJwZzncM8JMxDOK/vS8CRGlTd/JJIzWNj<br />
8SOo55HCq1gJP8U01P1wU1AK9/7n+RcENOGvHEPvKfWweY8HuE8OwHkPGxkqT4og<br />
1TNgA/97226C/NTf7MmOmV5y3yo5k5VUzGRjPpyvZIxIxnQJR4viquNEJfnW9BQT<br />
kRw4J7qQePvcbYrvDWxHlJJzlIzQxbBUqVry4K79ByudQA8QaQAT+XJIMjjppgHz<br />
rKWB6YVTqsSlfjASM9RqjfDCMZpefpjlq2hvJ2WzyLnYGyEJ+rRuUGV0ZXIgTWFj<br />
IEdpb2xsYWZoZWFyZ2EgKEtleSBmb3IgbWFpbCBmcm9tIHBldGVyQHBldGVybWFj<br />
LmNvbSAtIFBldGVyIE1hYyBBbmQgQXNzb2NpYXRlcykgPHBldGVyQHBldGVybWFj<br />
LmNvbT6IZgQTEQIAJgUCSPVJCgIbIwUJCWYBgAYLCQgHAwIEFQIIAwQWAgMBAh4B<br />
AheAAAoJEJlpD3yHCMV4/qYAn0WbPZejFQGgFi3g5IT2Q0D8u++xAJsGmFMdEwPm<br />
zFi4mAEAbhfO+tuUr7kCDQRI9UkKEAgAhf491b6MaNOCp1qo9hjvX1NLQ1sORkI9<br />
suP7PceRZfXuqc92GMXw8lYds9cPddtOBPpBZCaezxvRZHfERwiSWEVjEdwXyC5z<br />
y8ys8L4jxaPS8YS3SnEjkg+1DCLRb5fry+jiSaFeC2YklFFopSxWiSJQow9+jIPF<br />
hfvE4ZswP3EBx54SYC92sZgqfq/DcDcqlOp7gGAxHhxP+rdt4ow4aEzhdzyzNVpb<br />
C26BwRWH6T1JtsBSiy0PoaxV2eVl3Fb93aHPVldtdk5p6Pqm03KAbowurFfLshK9<br />
jyPuOyaM8cUSN+RXSgi846mXT0EhY6J4Ofb0rClm8maXwtSHpk8wBwADBQf/b4i6<br />
oDa5K69S2tyERpxAPhSBPdUnYT0oxlZvj75Wp1SfBkmUy8O+1jONIE1+OhLslxke<br />
WdFMmDrH8AiRU0q19bGEsKDqUWt58UV7GL26+QZbQWjhz7fWzI6ljftgshmXQozI<br />
3725Y2AVQR3U4BaFNiFrJQECPYLB/yypf8OCsZjspERb+d4J7CXfk5mVkFFAOj7N<br />
5UQv0u+dMVJAP3OCVdEibjXc/c4qPPxLUioAqN8MbixM1OzZDOH55K/oJdRoGyIG<br />
mfWU1lToNDCSi7BSqXjPGC+DMDjFc4QfnBFJfV0301GvLshuw+b/r8qJNfxkYkk4<br />
zK/sgbPlXPL032aM4ohPBBgRAgAPBQJI9UkKAhsMBQkJZgGAAAoJEJlpD3yHCMV4<br />
JQMAnA21n/10YG9hXHrUEel1HTFcU+opAJ9KlShcMzJoLI5VVIqfJTa8y/GE+Q==<br />
=L39p<br />
&#8212;&#8211;END PGP PUBLIC KEY BLOCK&#8212;&#8211;</p>
<p><a href="http://www.petermac.com/wp-content/uploads/2008/11/petermac.com.pub.asc">Click here to download this as key as a file</a></p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=Public%20Key&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2008%2F10%2Fpublic-key%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2008/10/public-key/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Purrfect Java Solutions</title>
		<link>http://www.petermac.com/2007/08/purrfect-java-solutions/</link>
		<comments>http://www.petermac.com/2007/08/purrfect-java-solutions/#comments</comments>
		<pubDate>Sun, 05 Aug 2007 04:17:32 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.petermac.com/?p=24</guid>
		<description><![CDATA[Meet &#8220;Java&#8221;, a new addition to the PeterMac team.

Although only 9 weeks old, she shows great focus in object oriented design (she chases any object that moves). She&#8217;s got an excellent grasp of string manipulation technniques and we have to agree that her display of experience in the J2SE (Sleeping and Eating) area is beyond expectations [...]]]></description>
			<content:encoded><![CDATA[<p>Meet &#8220;Java&#8221;, a new addition to the PeterMac team.</p>
<p><img height="132" alt="java at 9 weeks" src="http://www.petermac.com/wp-content/uploads/2007/08/java_20070805_sm.png" width="214" /></p>
<p>Although only 9 weeks old, she shows great focus in object oriented design (she chases any object that moves). She&#8217;s got an excellent grasp of string manipulation technniques and we have to agree that her display of experience in the J2SE (Sleeping and Eating) area is beyond expectations for one so young.</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=Purrfect%20Java%20Solutions&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2007%2F08%2Fpurrfect-java-solutions%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2007/08/purrfect-java-solutions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Designing Enterprise Software</title>
		<link>http://www.petermac.com/2007/07/designing-enterprise-software/</link>
		<comments>http://www.petermac.com/2007/07/designing-enterprise-software/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 20:36:57 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[Books]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.petermac.com/?p=22</guid>
		<description><![CDATA[I&#8217;ve just finished reading a little gem of a book. It&#8217;s called &#8216;The Martian Principles for 								Successful Enterprise Systems&#8217; with a subtitle of  &#8216;20 Lessons Learned from NASA&#8217;s Mars 		Exploration Rover Mission&#8217;. The author is Ronald Mak.
Imagine designing an information retrieval, indexing and presentation system for the two Mars rover vehicles that were sent [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just finished reading a little gem of a book. It&#8217;s called &#8216;<strong><em><a onmouseover="mouseOver(this)" onmouseout="mouseOut(this)" href="http://www.amazon.com/exec/obidos/redirect?link_code=as2&amp;path=ASIN/0471789658&amp;tag=aproposlogic-20&amp;camp=1789&amp;creative=9325" target="_blank"><strong><em>The Martian Principles for 								Successful Enterprise Systems&#8217;</em></strong></a></em></strong> with a subtitle of  &#8216;20 Lessons Learned from NASA&#8217;s Mars 		Exploration Rover Mission&#8217;. The author is Ronald Mak.</p>
<p>Imagine designing an information retrieval, indexing and presentation system for the two Mars rover vehicles that were sent on a one-way reconnaissance mission to Mars for a three month mission. The feisty little vehicles kept going for two years and the information systems had to be designed to cope with this unexpected project over-run.</p>
<p>The book runs to 168 pages and is a &#8217;should-read&#8217; for anybody involved in designing or buying large-scale enterprise software.  From an architect&#8217;s perspective, you get a reinforced mental checklist of the aspects of your designs that make them work and ensure they keep working long after you&#8217;ve moved on. From a customer&#8217;s perspective, you gain an appreciation of the effort put into designing such systems. From a developer&#8217;s perspective, now you know why you spend so much time writing and executing unit tests.</p>
<p>The book has short and well directed chapters and is an easy read with coverage of both the technical side of software development and the soft or human side.</p>
<p>As a result of this read, I went back to enhance some application logging classes that I&#8217;ve used on a number of projects to provide more granular output and statistics on usage patterns.</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=Designing%20Enterprise%20Software&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2007%2F07%2Fdesigning-enterprise-software%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2007/07/designing-enterprise-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Working with the .Net Compact Framework</title>
		<link>http://www.petermac.com/2006/11/working-with-the-net-compact-framework/</link>
		<comments>http://www.petermac.com/2006/11/working-with-the-net-compact-framework/#comments</comments>
		<pubDate>Thu, 09 Nov 2006 05:41:29 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

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

		<guid isPermaLink="false">http://www.petermac.com/?p=17</guid>
		<description><![CDATA[The attached files contain binaries and source code for a .Net Compact Framework application we built to enable the input of petrol consumption details and the subsequent downloading of that information to a desktop application. It was written in C# under a Visual Studio 2005 project and makes use of a set of libraries provided [...]]]></description>
			<content:encoded><![CDATA[<p>The attached files contain binaries and source code for a .Net Compact Framework application we built to enable the input of petrol consumption details and the subsequent downloading of that information to a desktop application. It was written in C# under a Visual Studio 2005 project and makes use of a set of libraries provided by <a href="http://www.opennetcf.org/home.ocf">OpenNETCF Consulting</a>.</p>
<p>To develop the application you will need to download the Smart Device Framework libraries from OPenNETCF and add a reference to them in your project. I have included a feature that allows you to dynamically upload all necessary components to your mobile device. This is a cool feature enabled using a .Net custom installer application.</p>
<p>Feel free to download and modify the application to suit your fancy.</p>
<p><a id="p16" href="http://www.petermac.com/wp-content/uploads/2006/11/fuelmonitor-110-src.zip">Fuel Monitor 1.1.0 Source Files</a></p>
<p><a id="p15" href="http://www.petermac.com/wp-content/uploads/2006/11/fuelmonitor-110-bin.zip">Fuel Monitor 1.1.0 Binaries</a></p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=Working%20with%20the%20.Net%20Compact%20Framework&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2006%2F11%2Fworking-with-the-net-compact-framework%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2006/11/working-with-the-net-compact-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Validating your PHP Input</title>
		<link>http://www.petermac.com/2006/10/validating-your-php-input/</link>
		<comments>http://www.petermac.com/2006/10/validating-your-php-input/#comments</comments>
		<pubDate>Tue, 10 Oct 2006 10:06:37 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.petermac.com/?p=12</guid>
		<description><![CDATA[In this world of bad guys and hackers and crackers, us developers have to be on our guard against all sorts of stuff that tries to break our websites.  Validating input using JavaScript alone is not sufficient to gurad against the baddies as it can be worked around by building their own custom forms [...]]]></description>
			<content:encoded><![CDATA[<p>In this world of bad guys and hackers and crackers, us developers have to be on our guard against all sorts of stuff that tries to break our websites.  Validating input using JavaScript alone is not sufficient to gurad against the baddies as it can be worked around by building their own custom forms to interact with your site and/or disabling JavaScript.</p>
<p class="western">What this means is that every piece of data you accept from a user should be validated against a set of rules for that datatype.</p>
<p class="western">Some general validation rules</p>
<p class="western">If it&#8217;s a text string, does it contain any less than or greater than brackets?</p>
<p class="western">If it&#8217;s a date, are it&#8217;s day, monthy, year parts valid numbers?</p>
<p class="western">If it&#8217;s a credit card number, is there an online number validation algorithm you can use to verify it?</p>
<p class="western"><strong>Regular Expressions in PHP</strong></p>
<p class="western">In order to validate your user-input, you&#8217;ll generally find yourself resorting to regular expressions. In PHP there are two options.<strong>ereg</strong> and <strong>preg</strong>. ereg is older, less sophisticated and somewhat slower than it&#8217;s younger brother. My preference is to use the preg options even though they&#8217;re a little more complicated, the end results is betterer(sic).</p>
<p class="western">An example of using preg to validate a date:</p>
<div class="code">$month = $_GET['cardmonth'];<br />
$year = $_GET['cardyear'];<br />
if (!preg_match(&#8221;/^[0-9]{1,2}$/&#8221;, $month)) die(&#8221;Invalid month, please re-enter.&#8221;);<br />
if (!preg_match(&#8221;/^[0-9]{4}$/&#8221;, $year)) die(&#8221;Invalid year, please re-enter.&#8221;);</div>
<p class="western">An online manual is available from the main php website at <a href="http://www.php.net/manual/en/ref.pcre.php">http://www.php.net/manual/en/ref.pcre.php</a></p>
<p class="western">And some lessons explicitly on how to use the preg function is available here <a href="http://www.php.net/manual/en/function.preg-match.php">http://www.php.net/manual/en/function.preg-match.php</a></p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=Validating%20your%20PHP%20Input&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2006%2F10%2Fvalidating-your-php-input%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2006/10/validating-your-php-input/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using magic_quotes_gpc or addslashes()</title>
		<link>http://www.petermac.com/2006/10/using-magic_quotes_gpc-or-addslashes/</link>
		<comments>http://www.petermac.com/2006/10/using-magic_quotes_gpc-or-addslashes/#comments</comments>
		<pubDate>Tue, 10 Oct 2006 09:18:25 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.petermac.com/?p=11</guid>
		<description><![CDATA[I&#8217;ve worked on a bundle of web based applications over the years and time and time again I&#8217;ve seen the recurring problem of the slash.  Yes, we&#8217;ve probably all seen it in one or more forums where the apostrophe some user entered, probably with the name O&#8217;Brein ends up as O\\Brein.
Why does this happen [...]]]></description>
			<content:encoded><![CDATA[<p class="western">I&#8217;ve worked on a bundle of web based applications over the years and time and time again I&#8217;ve seen the recurring problem of the slash.  Yes, we&#8217;ve probably all seen it in one or more forums where the apostrophe some user entered, probably with the name O&#8217;Brein ends up as O\\Brein.</p>
<p class="western">Why does this happen in sites running on PHP?  The answer is a duplication of escapes. Yep, a Houdini Supreme.</p>
<p class="western">Firstly a systems administrator has installed PHP and set the value for magic_quotes_gpc = on in the system&#8217;s php.ini (usually located in /etc/).  This will automatically add slashes to all GET/POST/COOKIE data. This makes it safe before writing it to a database. Mr O&#8217;Brein becomes Mr O\\&#8217;Brein when magic_quotes_gpc is set to on.</p>
<p class="western">Secondly, a programmer has come along and thinking they&#8217;re doing the right thing takes all user input and uses the addslashes() funtion to escape all quotes. This results in a doubling of the escapes so, Mr O&#8217;\\Brien now becomes MR O\\\\&#8217;Brein.</p>
<p class="western">When this data is rendered, we see the automatic removal of only one set of escapes but the other set is left behind&#8230;yuck!!</p>
<p class="western">
<p class="western">When programmers see this they think&#8230;”I&#8217;ll just use the stripslashes() method, I mean, that&#8217;s what it&#8217;s there for”.  As the light from the idea bulb fades, they realise they&#8217;re fixing a problem that should never have occurred in the first place. You need to go to the source of your data and clean it up, make sure you&#8217;re either using magic_quotes_gpc=on OR addslashes.  My preference is to use addslashes all the time and turn  magic_quotes_gpc off, this way the logic of your code explicitly sets user input to be what you want.</p>
<p class="western">
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=Using%20magic_quotes_gpc%20or%20addslashes%28%29&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2006%2F10%2Fusing-magic_quotes_gpc-or-addslashes%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2006/10/using-magic_quotes_gpc-or-addslashes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP mail function with postfix</title>
		<link>http://www.petermac.com/2006/09/php-mail-function-with-postfix/</link>
		<comments>http://www.petermac.com/2006/09/php-mail-function-with-postfix/#comments</comments>
		<pubDate>Wed, 06 Sep 2006 01:09:17 +0000</pubDate>
		<dc:creator>peter</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.petermac.com/?p=10</guid>
		<description><![CDATA[I recently modified a web server to run Postfix instead of sendmail as it&#8217;s main MTA. The result was fairly pleasing and a Postfix/Imap/Webmail implementation meant my client was able to  pick up and manage mail while travelling.  One problem encountered however was the mail server was also a web server. Any time [...]]]></description>
			<content:encoded><![CDATA[<p>I recently modified a web server to run Postfix instead of sendmail as it&#8217;s main MTA. The result was fairly pleasing and a Postfix/Imap/Webmail implementation meant my client was able to  pick up and manage mail while travelling.  One problem encountered however was the mail server was also a web server. Any time emails were sent using online forms, the resulting mail looked something like the following&#8230;</p>
<p><span class="code">: No recipients specified<br />
</span><span class="code">Reporting-MTA: dns; mail.threerock.com<br />
X-Postfix-Queue-ID: 93E255C4E41<br />
X-Postfix-Sender: rfc822; apache@threerock.com<br />
Arrival-Date: Wed,  6 Sep 2006 08:26:14 +1000 (EST)</span> <span class="code">Final-Recipient: rfc822; unknown<br />
Action: failed<br />
Status: 5.0.0<br />
Diagnostic-Code: X-Postfix; No recipients specified</span> <span class="code">Received: by mail.threerock.com (Postfix, from userid 76)<br />
id 93E255C4D4; Wed,  6 Sep 2006 08:26:14 +1000 (EST)<br />
To: admin@threerock.com<br />
Subject: Threerock Support - Report a Bug<br />
From: &#8220;peter mac&#8221;</span></p>
<p>Reply-To: admin@threerock.com<br />
Message-Id: 20060905222614.93E255C4D4@mail.threerock.com<br />
Date: Wed,  6 Sep 2006 08:26:14 +1000 (EST)</p>
<p>After a bit of research and many different opinions from online groups, the fix turned out to be a simple change to the php.ini file (located in this case at /etc/php.ini)The change is as follows:look for the section [mail function] and create (if it doesn&#8217;t already exist) a key</p>
<p>sendmail_path = /usr/sbin/sendmail -t -i -f someone@yourdomain.com</p>
<p>Firstly check the path to your sendmail executable by typing</p>
<p>$ which sendmail</p>
<p>Secondly enter a valid username/domainname. This is the user the email will appear to come from. Examples are support@yourdomain.com, admin@yourdomain.com etc.</p>
<p>After saving your php.ini file, you will have to restart your httpd process.</p>
<p>$ /etc/rc.d/init.d/httpd restart</p>
<p class="addtoany_share_save_container">
    <a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save?sitename=Peter%20Mac%20And%20Associates&amp;siteurl=http%3A%2F%2Fwww.petermac.com%2F&amp;linkname=PHP%20mail%20function%20with%20postfix&amp;linkurl=http%3A%2F%2Fwww.petermac.com%2F2006%2F09%2Fphp-mail-function-with-postfix%2F"><img src="http://www.petermac.com/wp-content/plugins/add-to-any/share_save_120_16.png" width="120" height="16" alt="Share/Save/Bookmark"/></a>

	</p>]]></content:encoded>
			<wfw:commentRss>http://www.petermac.com/2006/09/php-mail-function-with-postfix/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
