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

<channel>
	<title>Andy Dixon</title>
	<atom:link href="http://www.andydixon.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andydixon.com</link>
	<description>Freelance IT consultant and Software Developer</description>
	<lastBuildDate>Tue, 19 Jan 2010 08:52:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Postgres and REALBasic</title>
		<link>http://www.andydixon.com/2010/01/postgres-and-realbasic/</link>
		<comments>http://www.andydixon.com/2010/01/postgres-and-realbasic/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 08:52:32 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=178</guid>
		<description><![CDATA[I&#8217;m learning REALBasic and starting to shift over to writing cross platform desktop apps, and one thing I wanted to do is to talk to a postgres database. Here is a quick and dirty bit of code:
  dim pgdb as PostgreSQLDatabase
  dim sql as string
  dim rs as RecordSet
  pgdb = [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m learning REALBasic and starting to shift over to writing cross platform desktop apps, and one thing I wanted to do is to talk to a postgres database. Here is a quick and dirty bit of code:</p>
<p>  dim pgdb as PostgreSQLDatabase<br />
  dim sql as string<br />
  dim rs as RecordSet</p>
<p>  pgdb = new PostgreSQLDatabase<br />
  pgdb.DatabaseName = &#8220;database.name&#8221;<br />
  pgdb.Host = &#8220;database.hostname&#8221;<br />
  pgdb.UserName = &#8220;user&#8221;<br />
  pgdb.Password = &#8220;password&#8221;</p>
<p>  if pgdb.Connect then</p>
<p>    sql = &#8220;SELECT foo FROM bar WHERE woo=&#8217;yay&#8217;;&#8221;<br />
    rs = pgdb.SQLSelect(sql)<br />
    if rs <> nil then<br />
      while not rs.EOF<br />
        EditField1.Text = rs.Field(&#8221;foo&#8221;)<br />
        rs.MoveNext()<br />
      wend</p>
<p>    else<br />
      EditField1.Text = &#8220;NULL RETVAL&#8221;<br />
    end if<br />
  else<br />
    MsgBox &#8220;Connect Fail&#8221;<br />
  end if</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2010/01/postgres-and-realbasic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Endpoint Compliance Systems</title>
		<link>http://www.andydixon.com/2009/11/endpoint-compliance-systems/</link>
		<comments>http://www.andydixon.com/2009/11/endpoint-compliance-systems/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 14:18:36 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/2009/11/endpoint-compliance-systems/</guid>
		<description><![CDATA[I have had some experience with a certain Endpoint Compliance System (ECS) and have been thinking about how I could write a cross-platform compatible ECS myself using freeRADIUS as its authenticating agent.
An ECS has an agent which is installed on a user’s machine, runs checks and reports back to a central server which then decides [...]]]></description>
			<content:encoded><![CDATA[<p>I have had some experience with a certain Endpoint Compliance System (ECS) and have been thinking about how I could write a cross-platform compatible ECS myself using freeRADIUS as its authenticating agent.</p>
<p>An ECS has an agent which is installed on a user’s machine, runs checks and reports back to a central server which then decides whether or not to allow elevated access to a wireless network.</p>
<p>On my development server, I already have a working RADIUS which talks to a database, and my wireless network is authenticating against the RADIUS, so all I need to do now is to write the small application which can do the following:</p>
<ul>
<li>Run specific checks on the client machine</li>
<li>Report back to the RADIUS server on whether or not to allow the device</li>
</ul>
<p>I think this system would be really useful for networks which can support multiple networks – have one which is locked down and one which is authenticated by RADIUS for network / Internet traffic.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/11/endpoint-compliance-systems/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NukeAll &#8211; for OSX</title>
		<link>http://www.andydixon.com/2009/11/nukeall-for-osx/</link>
		<comments>http://www.andydixon.com/2009/11/nukeall-for-osx/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 14:26:49 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=175</guid>
		<description><![CDATA[nukeall finds and removes (recursevely) the specified file(s) in the current folder.
Example:
	nukeall .DS_Store
	nukeall *.tmp
	nukeall .*
You can also pass the -trashes option which will search and empty. Trashes folders which is useful on file servers.
Version 1.0 can be downloaded by clicking here
]]></description>
			<content:encoded><![CDATA[<p>nukeall finds and removes (recursevely) the specified file(s) in the current folder.<br />
Example:<br />
	nukeall .DS_Store<br />
	nukeall *.tmp<br />
	nukeall .*</p>
<p>You can also pass the -trashes option which will search and empty. Trashes folders which is useful on file servers.</p>
<p>Version 1.0 can be downloaded by <a href="http://www.andydixon.com/NukeAll.zip">clicking here</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/11/nukeall-for-osx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check Apple RAIDs and email when there is a problem</title>
		<link>http://www.andydixon.com/2009/10/check-apple-raids-and-email-when-there-is-a-problem/</link>
		<comments>http://www.andydixon.com/2009/10/check-apple-raids-and-email-when-there-is-a-problem/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 06:46:33 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=171</guid>
		<description><![CDATA[This script can be used in a cron which runs every 5 or 10 minutes and will email as soon as it detects an issue with an Apple RAID.
I am working on an Apple XServe RAID checker, but this one will handle internal drive bay RAIDs.

#!/usr/bin/env python

import os
import string
import smtplib

from socket import gethostname

smtpserver = 'localhost'
smtpfrom [...]]]></description>
			<content:encoded><![CDATA[<p>This script can be used in a cron which runs every 5 or 10 minutes and will email as soon as it detects an issue with an Apple RAID.<br />
I am working on an Apple XServe RAID checker, but this one will handle internal drive bay RAIDs.</p>
<pre>
#!/usr/bin/env python

import os
import string
import smtplib

from socket import gethostname

smtpserver = 'localhost'
smtpfrom = gethostname() + '@localhost'
smtpto = ['##EMAIL_OF_RECIPIENT##']

raidstatus = os.popen('/usr/sbin/diskutil listRaid')
status = raidstatus.read()
raidstatus.close()
if status.find('Degraded') &gt; -1:
     smtpsubject = 'WARNING - Raid degraded on ' + gethostname()
     smtp = smtplib.SMTP(smtpserver)
     message = """\
From: %s
To: %s
Subject: %s

%s
""" % (smtpfrom, ", ".join(smtpto), smtpsubject, status)
     smtp.sendmail(smtpfrom, smtpto, message)
     smtp.quit()
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/10/check-apple-raids-and-email-when-there-is-a-problem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check OSX partitions and email results</title>
		<link>http://www.andydixon.com/2009/10/check-osx-partitions-and-email-results/</link>
		<comments>http://www.andydixon.com/2009/10/check-osx-partitions-and-email-results/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 12:55:51 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=165</guid>
		<description><![CDATA[I wrote a small Python script which gets a list of partitions and checks each one to make sure the partition is okay, and for the script to email the results.

#!/usr/bin/env python

import os
import string
import smtplib

from socket import gethostname

smtpserver = 'localhost'
smtpfrom = gethostname() + '@localhost'
smtpto = ['##recipient email##']

driveshandle = os.popen('/bin/df -h &#124; grep disk')
drives = driveshandle.read()
driveshandle.close()
drives [...]]]></description>
			<content:encoded><![CDATA[<p>I wrote a small Python script which gets a list of partitions and checks each one to make sure the partition is okay, and for the script to email the results.</p>
<pre>
#!/usr/bin/env python

import os
import string
import smtplib

from socket import gethostname

smtpserver = 'localhost'
smtpfrom = gethostname() + '@localhost'
smtpto = ['##recipient email##']

driveshandle = os.popen('/bin/df -h | grep disk')
drives = driveshandle.read()
driveshandle.close()
drives = drives.split('\n')

for drive in drives:

     diskinfo = ''
     if drive.find('dev') &gt; -1:
          partition = drive.split(' ')
          print 'Drive ' +partition[0]
          fsck = os.popen('/sbin/fsck_hfs -fy ' + partition[0])
          diskinfo = fsck.read()
          fsck.close()
          smtpsubject = 'File System Checks for ' + gethostname() + ', drive ' + drive
          smtp = smtplib.SMTP(smtpserver)
          message = """\
From: %s
To: %s
Subject: %s

%s
""" % (smtpfrom, ", ".join(smtpto), smtpsubject, diskinfo)
          smtp.sendmail(smtpfrom, smtpto, message)
          smtp.quit()

print 'completed'</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/10/check-osx-partitions-and-email-results/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSX Command Line Goodies</title>
		<link>http://www.andydixon.com/2009/10/osx-command-line-goodies/</link>
		<comments>http://www.andydixon.com/2009/10/osx-command-line-goodies/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 10:32:40 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Geeky]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=162</guid>
		<description><![CDATA[You can take a screenshot by command:
screencapture -C ~/screen.png
This will save a screenshot into the user&#8217;s home folder.
You can get system information:
/usr/sbin/system_profiler SPHardwareDataType
Which would show something like this:
Hardware:
    Hardware Overview:
      Model Name: iMac
      Model Identifier: iMac8,1
      Processor [...]]]></description>
			<content:encoded><![CDATA[<p>You can take a screenshot by command:</p>
<p><code>screencapture -C ~/screen.png</code></p>
<p>This will save a screenshot into the user&#8217;s home folder.</p>
<p>You can get system information:</p>
<p><code>/usr/sbin/system_profiler SPHardwareDataType</code></p>
<p>Which would show something like this:<br />
Hardware:</p>
<p>    Hardware Overview:</p>
<p>      Model Name: iMac<br />
      Model Identifier: iMac8,1<br />
      Processor Name: Intel Core 2 Duo<br />
      Processor Speed: 2.66 GHz<br />
      Number Of Processors: 1<br />
      Total Number Of Cores: 2<br />
      L2 Cache: 6 MB<br />
      Memory: 4 GB<br />
      Bus Speed: 1.07 GHz<br />
      Boot ROM Version: IM81.00C1.B00<br />
      SMC Version (system): 1.29f1<br />
      Serial Number (system): VM906KT5ZE3<br />
      Hardware UUID: FB5DEAE0-DAB6-56DD-A62B-0F38C384654A</p>
<p>Speaking- You can make the computer speak by commandline:</p>
<p><code>say -v Albert "Hello world"</code></p>
<p>Albert can be replaced with any of the following:</p>
<p>Agnes,Albert,BadNews,Bahh,Bells,Boing,Bruce,Bubbles,Cellos,Deranged,Fred,GoodNews,Hysterical,Junior,Kathy,Organ,Princess,Ralph,Trinoids,Vicki,Victoria,Whisper,Zarvox</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/10/osx-command-line-goodies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automatic checking of IMAP subfolders in Thunderbird</title>
		<link>http://www.andydixon.com/2009/10/automatic-checking-of-imap-subfolders-in-thunderbird/</link>
		<comments>http://www.andydixon.com/2009/10/automatic-checking-of-imap-subfolders-in-thunderbird/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 13:12:07 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Geeky]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=158</guid>
		<description><![CDATA[Open up the preferences dialog (either Tools -> Preferences or Edit -> Preferences), and click Advanced -> General -> Config Editor.
In the filter box type &#8216;mail.check&#8217; and double click on mail.check_all_imap_folders_for_new.
That should do it..
]]></description>
			<content:encoded><![CDATA[<p>Open up the preferences dialog (either Tools -> Preferences or Edit -> Preferences), and click Advanced -> General -> Config Editor.<br />
In the filter box type &#8216;mail.check&#8217; and double click on mail.check_all_imap_folders_for_new.</p>
<p>That should do it..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/10/automatic-checking-of-imap-subfolders-in-thunderbird/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Dreadnought Framework</title>
		<link>http://www.andydixon.com/2009/10/the-dreadnought-framework/</link>
		<comments>http://www.andydixon.com/2009/10/the-dreadnought-framework/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 19:19:47 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=146</guid>
		<description><![CDATA[A friend of mine and I are working on a pretty impressive project which will hopefully fill a niche in the IT market.
Its a pretty impressive amount of work, but we are both up for a challenge, and the chance to sink a few beers on a project meeting will be a necessity.
One major milestone [...]]]></description>
			<content:encoded><![CDATA[<p>A friend of mine and I are working on a pretty impressive project which will hopefully fill a niche in the IT market.<br />
Its a pretty impressive amount of work, but we are both up for a challenge, and the chance to sink a few beers on a project meeting will be a necessity.</p>
<p>One major milestone has been completed &#8211; the Dreadnought framework. Its basis is two files &#8211; index.php and _dreadnought.php. All heavy duty code is held in the dreadnought kernel &#8211; accessable through $dreadnought. Its very very simple. No access control, basic MySQL support but has a promising future.</p>
<p>I am developing a &#8216;blogging&#8217; module into it, and hopefully will move this site from wordpress into Dreadnought in the not too distant future.</p>
<p>The one thing I really love about the way I have designed dreadnought is that the templating system could not be easier. You have a html file and just add the tag &lt;DREADNOUGHT_CONTENT /&gt; and the code does the rest.<br />
I&#8217;m hoping to release the framework as open source soonish, but not until some more work has gone into it, including some rudimentary pre-flight checking of modules &#8211; ie to prevent a module from killing the framework&#8217;s kernel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/10/the-dreadnought-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mounting samba permanently</title>
		<link>http://www.andydixon.com/2009/09/mounting-samba-permanently/</link>
		<comments>http://www.andydixon.com/2009/09/mounting-samba-permanently/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 13:10:58 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Debian / Ubuntu]]></category>
		<category><![CDATA[Geeky]]></category>
		<category><![CDATA[centOS]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=144</guid>
		<description><![CDATA[A nice quick and easy one..
Add the following into /etc/fstab, replacing the parts with stars with your information.
//**SERVER**/**SHARE** /mnt/**MOUNTPOINT** smbfs rw,user,username=**USER**,password=**PASS** 0 0
make sure the location /mnt/**MOUNTPOINT** exists, chmodded correctly (eg 666) and then just mount it with:
mount /mnt/**MOUNTPOINT**
]]></description>
			<content:encoded><![CDATA[<p>A nice quick and easy one..</p>
<p>Add the following into /etc/fstab, replacing the parts with stars with your information.</p>
<p><code>//**SERVER**/**SHARE** /mnt/**MOUNTPOINT** smbfs rw,user,username=**USER**,password=**PASS** 0 0</code></p>
<p>make sure the location /mnt/**MOUNTPOINT** exists, chmodded correctly (eg 666) and then just mount it with:</p>
<p><code>mount /mnt/**MOUNTPOINT**</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/09/mounting-samba-permanently/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Blocking tor through iptables</title>
		<link>http://www.andydixon.com/2009/09/blocking-tor-through-iptables/</link>
		<comments>http://www.andydixon.com/2009/09/blocking-tor-through-iptables/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 13:02:18 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Geeky]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[centOS]]></category>

		<guid isPermaLink="false">http://www.andydixon.com/?p=142</guid>
		<description><![CDATA[I keep a database of tor hosts which gets updated quite often, and I have written a script in python which downloads the list and updates iptables so that they are all blocked.
It is recommended that the script gets added to cron so that the machines iptables keep up to date.
This script is ideal for [...]]]></description>
			<content:encoded><![CDATA[<p>I keep a database of tor hosts which gets updated quite often, and I have written a script in python which downloads the list and updates iptables so that they are all blocked.</p>
<p>It is recommended that the script gets added to cron so that the machines iptables keep up to date.</p>
<p>This script is ideal for schools and businesses to prevent people from circumventing content filtering, and also useful for servers to prevent abuse from &#8216;anonymous&#8217; people who use tor for hacking for denial of service.</p>
<p>The script can be found here (<a href="http://www.andydixon.com/blocktor.py">http://www.andydixon.com/blocktor.py</a>) and requires python (tested on v2.6)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.andydixon.com/2009/09/blocking-tor-through-iptables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
