<?xml version="1.0"?><!-- generator="b2evolution/0.9.1" -->
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Africa's OSS/Linux All Blogs</title>
		<link>http://orderweb.biz/blogs/index.php?blog=1</link>
		<description>Track All Blogs</description>
		<language>en-UK</language>
		<docs>http://backend.userland.com/rss</docs>
		<admin:generatorAgent rdf:resource="http://b2evolution.net/?v=0.9.1"/>
		<ttl>60</ttl>
				<item>
			<title>New Zealand Info Directory</title>
			<link>http://orderweb.biz/blogs/index.php?blog=9&amp;title=new_zealand_info_directory&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1</link>
			<pubDate>Mon, 30 Aug 2010 16:57:09 +0000</pubDate>
						<category domain="main">News</category>			<guid isPermaLink="false">122@http://orderweb.biz/blogs</guid>
			<description>http://new-zealand-info.co.nz/directory/ Today we have launched our New Zealand Info Directory under new-zealand-info.co.nz domain name. Users of Google.co.nz will benefit most as our directory covers New Zealand domain names only. Directory will grow as we discover more .nz web sites</description>
			<content:encoded><![CDATA[<p><a href="http://new-zealand-info.co.nz/directory/">http://new-zealand-info.co.nz/directory/</a></p>	<p>Today we have launched our New Zealand Info Directory under new-zealand-info.co.nz domain name. Users of Google.co.nz will benefit most as our directory covers New Zealand domain names only. Directory will grow as we discover more .nz web sites
</p>
]]></content:encoded>
			<comments>http://orderweb.biz/blogs/index.php?blog=1&amp;p=122&amp;c=1&amp;tb=1&amp;pb=1#comments</comments>
		</item>
				<item>
			<title>Google Application Engine and DataStore Data Removal</title>
			<link>http://orderweb.biz/blogs/index.php?blog=5&amp;title=google_application_engine_and_datastore_&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1</link>
			<pubDate>Fri, 27 Aug 2010 18:24:26 +0000</pubDate>
						<category domain="main">General</category>			<guid isPermaLink="false">121@http://orderweb.biz/blogs</guid>
			<description>Google App Engine has free quota limit of 1.00 GBytes for Total Stored Data. My current application has exceeded that limit causing system to generate 500 Internal Error messages. There is no easy way to remove data from DataStore.

My trick is to delete records in batch and using loop until you get DeadlineExceededError Exception. Typically I can remove 1000 rows per call

You can schedule cron job to execute this code every hour so old records are deleted automatically


start=time.time()

date_keep=(datetime.date.today()-datetime.timedelta(days=30)).isoformat()

sql="SELECT &#95;&#95;key&#95;&#95; FROM TBL_TOP_URL WHERE UPDATED &#60; DATE('"+date_keep+"') LIMIT 100"
print sql
    
rows=[None]
while len(rows) &#60;&#62; 0:
    query = db.GqlQuery(sql)
    rows = query.fetch(100)
    print 'len(rows):',len(rows)
    db.delete(rows)
        
    print time.time() - start
    if len(rows) &#62; 0:
        print rows[-1].id()





</description>
			<content:encoded><![CDATA[	<p>Google App Engine has free quota limit of 1.00 GBytes for Total Stored Data. My current application has exceeded that limit causing system to generate 500 Internal Error messages. There is no easy way to remove data from DataStore.</p>
	<p>My trick is to delete records in batch and using loop until you get DeadlineExceededError Exception. Typically I can remove 1000 rows per call</p>
	<p>You can schedule cron job to execute this code every hour so old records are deleted automatically</p>
<pre>
start=time.time()

date_keep=(datetime.date.today()-datetime.timedelta(days=30)).isoformat()

sql="SELECT &#95;&#95;key&#95;&#95; FROM TBL_TOP_URL WHERE UPDATED &lt; DATE('"+date_keep+"') LIMIT 100"
print sql
    
rows=[None]
while len(rows) &lt;&gt; 0:
    query = db.GqlQuery(sql)
    rows = query.fetch(100)
    print 'len(rows):',len(rows)
    db.delete(rows)
        
    print time.time() - start
    if len(rows) &gt; 0:
        print rows[-1].id()

</pre>]]></content:encoded>
			<comments>http://orderweb.biz/blogs/index.php?blog=1&amp;p=121&amp;c=1&amp;tb=1&amp;pb=1#comments</comments>
		</item>
				<item>
			<title>Python 3D GPS tracks plotting with elevation</title>
			<link>http://orderweb.biz/blogs/index.php?blog=5&amp;title=python_3d_gps_tracks_plotting_with_eleva&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1</link>
			<pubDate>Wed, 31 Mar 2010 07:17:34 +0000</pubDate>
						<category domain="main">General</category>			<guid isPermaLink="false">120@http://orderweb.biz/blogs</guid>
			<description>http://orderweb.biz/gpx3d/ Python is open source software and mature language. You can create commercial software using free tools with Python.

I have developed GPS tracks plotting software with elevation information in 3D space. Mapsource gives you only 2 dimensional view so gradient is not visible and you loose a lot of information

I have used wxPython for the GUI and py2exe to create software distribution package

GPS tracks data is read from .GPX file which needs to be exported from Mapsource

Have a look if you own GPS device such as Garmin or others</description>
			<content:encoded><![CDATA[<p><a href="http://orderweb.biz/gpx3d/">http://orderweb.biz/gpx3d/</a></p>	<p>Python is open source software and mature language. You can create commercial software using free tools with Python.</p>
	<p>I have developed GPS tracks plotting software with elevation information in 3D space. Mapsource gives you only 2 dimensional view so gradient is not visible and you loose a lot of information</p>
	<p>I have used wxPython for the GUI and py2exe to create software distribution package</p>
	<p>GPS tracks data is read from .GPX file which needs to be exported from Mapsource</p>
	<p>Have a <a href="http://orderweb.biz/gpx3d/">look</a> if you own GPS device such as Garmin or others
</p>
]]></content:encoded>
			<comments>http://orderweb.biz/blogs/index.php?blog=1&amp;p=120&amp;c=1&amp;tb=1&amp;pb=1#comments</comments>
		</item>
				<item>
			<title>Canada Information Directory</title>
			<link>http://orderweb.biz/blogs/index.php?blog=9&amp;title=canada_information_directory&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1</link>
			<pubDate>Mon, 08 Feb 2010 16:52:55 +0000</pubDate>
						<category domain="main">News</category>			<guid isPermaLink="false">119@http://orderweb.biz/blogs</guid>
			<description>http://canada-info.ca/directory/ February is launch of our Canada Info Directory. Currently there is over 100,000 domains in the database but it will grow slowly as we discover more .ca sites</description>
			<content:encoded><![CDATA[<p><a href="http://canada-info.ca/directory/">http://canada-info.ca/directory/</a></p>	<p>February is launch of our Canada Info Directory. Currently there is over 100,000 domains in the database but it will grow slowly as we discover more .ca sites
</p>
]]></content:encoded>
			<comments>http://orderweb.biz/blogs/index.php?blog=1&amp;p=119&amp;c=1&amp;tb=1&amp;pb=1#comments</comments>
		</item>
				<item>
			<title>Automated backup using ssh and encryption to safeguard data</title>
			<link>http://orderweb.biz/blogs/index.php?blog=6&amp;title=automated_backup_using_ssh_and_encryptio&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1</link>
			<pubDate>Wed, 20 Jan 2010 12:57:43 +0000</pubDate>
						<category domain="main">General</category>			<guid isPermaLink="false">118@http://orderweb.biz/blogs</guid>
			<description>Linux server is better than Swiss army knife. Using pipes you can join commands together to process and transform data.

Task: 

Automatically backup entire folder to encrypted file and upload in secure manner to backup server using minimum of disk space.

Code:

#
# install as cronjob, must escape any % as \% otherwise it becomes newline
#
tar cvf - /home/tom | gpg --no-tty --passphrase-file pass.txt -c - | ssh user@backup.com "cat > tom.tar.gpg"



Explanation:
--no-tty is required for cronjob as there is no tty attached during execution
pass.txt will contain your symmetrical password


#
# create tarball containing entire folder and send output to stdout
#
tar cvf - /home/tom

#
# read from stdin and encrypt data stream using pass phrase in file pass.txt
#
| gpg --no-tty --passphrase-file pass.txt -c -

#
# read from stdin data stream and send via secure shell to backup server as tom.tar.gpg
#
| ssh user@backup.com "cat > tom.tar.gpg"


for more info try

man tar
man gpg
man ssh


 </description>
			<content:encoded><![CDATA[	<p>Linux server is better than Swiss army knife. Using pipes you can join commands together to process and transform data.</p>
	<p>Task: </p>
	<p>Automatically backup entire folder to encrypted file and upload in secure manner to backup server using minimum of disk space.</p>
	<p>Code:</p>
	<blockquote><p>
#<br />
# install as cronjob, must escape any % as \% otherwise it becomes newline<br />
#<br />
tar cvf - /home/tom | gpg --no-tty --passphrase-file pass.txt -c - | ssh <a href="mailto:user@backup.com">user@backup.com</a> "cat > tom.tar.gpg"</p>
	</blockquote>
	<p>Explanation:<br />
--no-tty is required for cronjob as there is no tty attached during execution<br />
pass.txt will contain your symmetrical password</p>
	<blockquote><p>
#<br />
# create tarball containing entire folder and send output to stdout<br />
#<br />
tar cvf - /home/tom</p>
	<p>#<br />
# read from stdin and encrypt data stream using pass phrase in file pass.txt<br />
#<br />
| gpg --no-tty --passphrase-file pass.txt -c -</p>
	<p>#<br />
# read from stdin data stream and send via secure shell to backup server as tom.tar.gpg<br />
#<br />
| ssh <a href="mailto:user@backup.com">user@backup.com</a> "cat > tom.tar.gpg"
</p></blockquote>
	<p>for more info try</p>
	<blockquote><p>
man tar<br />
man gpg<br />
man ssh
</p></blockquote>
]]></content:encoded>
			<comments>http://orderweb.biz/blogs/index.php?blog=1&amp;p=118&amp;c=1&amp;tb=1&amp;pb=1#comments</comments>
		</item>
			</channel>
</rss>
