<?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>Delaware Web Designers - Inclind, Inc Internet Professionals &#187; How To&#8217;s</title>
	<atom:link href="http://www.delawarewebdesigner.com/category/how-tos/feed" rel="self" type="application/rss+xml" />
	<link>http://www.delawarewebdesigner.com</link>
	<description>Inclind, Inc - Delaware Web Designers - Professional Delaware Web Design Since 1999</description>
	<lastBuildDate>Wed, 12 May 2010 16:21:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Sync Files in Drupal Using Services and xmlrpc()</title>
		<link>http://www.delawarewebdesigner.com/how-tos/sync-files-in-drupal-using-services-and-xmlrpc.htm</link>
		<comments>http://www.delawarewebdesigner.com/how-tos/sync-files-in-drupal-using-services-and-xmlrpc.htm#comments</comments>
		<pubDate>Tue, 05 Jan 2010 14:24:08 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[Drupal Development]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[drupal modules]]></category>
		<category><![CDATA[content distributing in drupal]]></category>
		<category><![CDATA[sync files with drupal xmlrpc]]></category>
		<category><![CDATA[using drupal xmlrpc]]></category>
		<category><![CDATA[using Services module in drupal]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/?p=486</guid>
		<description><![CDATA[In a previous entry we explored content syncing/distributing using the Services module and XMLRPC in Drupal. We learned how to create a method, its callback, how to invoke it through xmlrpc from another server, and how to create or update a node based on that data.
Lets take a look at how you bring in files [...]]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://www.delawarewebdesigner.com/tech-stuff/sync-drupal-content-using-services-and-xmlrpc.htm">previous entry</a> we explored content syncing/distributing using the <a href="http://www.drupal.org/project/services" target="_blank">Services</a> module and XMLRPC in Drupal. We learned how to create a method, its callback, how to invoke it through xmlrpc from another server, and how to create or update a node based on that data.</p>
<p>Lets take a look at how you bring in files as part of that node as well. From the previous example, before calling node_save($node), I call another function to process files. Name it however you wish. My module is called homes_sync, so my hooks and functions begin with that as per Drupal standards.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">homes_sync_get_files<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sessid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// save the node object</span>
node_save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>homes_sync_get_files() is passed the $node object and will return it after adding (or removing) data. To have a reliable file sync, we need to only update files if they are newer, and remove them if they no longer exist.</p>
<p>In this specific example, the project I am working on has two CCK file fields. One is for a floorplan (a PDF) and the other is an image field. In a node, there is only 1 floorplan, but can be up to 2 dozen images. If you had a more generic node that just has a CCK filefield of &#8216;client_files&#8217; for example, your code would be slightly different.</p>
<p>Before we add any files to the node, the first thing we should do is compare the list of files from the remote site to the local site. We start that off by getting $files via xmlrpc, and loading the node object if $node->nid is present. If any are found on the local site, and not the remote site, we can safely remove them from the node object. The two arrays are iterated over and remove files if necessary.</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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> homes_sync_get_files<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sessid</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000088;">$files</span> <span style="color: #339933;">=</span> xmlrpc<span style="color: #009900;">&#40;</span>REMOTE_SERVICES_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'file.getHomeFiles'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sessid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// first, compare list of files from parent server with local files</span>
	<span style="color: #666666; font-style: italic;">// if our local files has something the parent server doesnt have</span>
	<span style="color: #666666; font-style: italic;">// it was probably deleted. so we need to unset it from the node object</span>
	<span style="color: #666666; font-style: italic;">// when it gets passed back through node_save, cck should delete it proper</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nid</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000088;">$current_files</span> <span style="color: #339933;">=</span> node_load<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_files</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #339933;">!</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #666666; font-style: italic;">// we have files locally, but none on the parent server. 	</span>
			<span style="color: #666666; font-style: italic;">// remove all</span>
			<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Remote copy of @node no longer has files. Removing all local files for @node.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@node'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">elseif</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_files</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// build comparison arrays</span>
&nbsp;
			<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$remote_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$remote_files</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$remote_file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>	
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_files</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$local_floorplan_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$local_files</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$local_floorplan_file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$current_files</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$local_image_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$local_files</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$local_image_file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #666666; font-style: italic;">// now lets see whats missing</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$local_files</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$remote_files</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
				<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$local_files</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$local_file</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: #339933;">!</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$local_file</span><span style="color: #339933;">,</span> <span style="color: #000088;">$remote_files</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;">// parent site does not have this file in the node anymore</span>
						<span style="color: #000088;">$files_to_delete</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$local_file</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files_to_delete</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$files_to_delete</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files_to_delete</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$file_to_delete</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
						<span style="color: #666666; font-style: italic;">// CCK field arrays exist in node objects even if they have no data</span>
						<span style="color: #666666; font-style: italic;">// we can assume if the first record is NULL, there is no data</span>
&nbsp;
						<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
							<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$file_key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$floorplan</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: #000088;">$file_to_delete</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
									watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@file file does not exist on parent server anymore for @node. Removing.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@file'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@node'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
									<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$file_key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
								<span style="color: #009900;">&#125;</span>
							<span style="color: #009900;">&#125;</span>
						<span style="color: #009900;">&#125;</span>
&nbsp;
						<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #009900; font-weight: bold;">NULL</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
							<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$image_key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$image</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: #000088;">$file_to_delete</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
									watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@image image does not exist on parent server anymore for @node. Removing.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@image'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$image</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@node'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
									<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$image_key</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
								<span style="color: #009900;">&#125;</span>
							<span style="color: #009900;">&#125;</span>
						<span style="color: #009900;">&#125;</span>
						<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$floorplan</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
						<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$image</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #009900;">&#125;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$remote_files</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$local_files</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Now that we are through with our deletion process, we can begin processing the remote files. For each file id ($fid) we call xmlrpc and get all the data and the file itself and bring it down to our local site. Based on the file extension, we begin building a query so we can look to see if this file exists locally, and what its last timestamp was. We do this so we know if a file should be replaced or not. For example, if you have MyHome.PDF on your local site, and a new version is uploaded on the remote site, simply comparing file names is not good enough. With a filename and a timestamp comparison, you are certain that it should be processed.</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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$files</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$fid</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$remote_file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$file</span> <span style="color: #339933;">=</span> xmlrpc<span style="color: #009900;">&#40;</span>REMOTE_SERVICES_URL<span style="color: #339933;">,</span> <span style="color: #0000ff;">'file.get'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sessid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #666666; font-style: italic;">// set filepath to save to</span>
				<span style="color: #666666; font-style: italic;">// decode our content file</span>
&nbsp;
				<span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filepath'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> file_directory_path<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$file_data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">base64_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'file'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// set content type db table, and field to search on.</span>
				<span style="color: #666666; font-style: italic;">// Load up the CCK field</span>
&nbsp;
				<span style="color: #000088;">$filetype</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'.'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$filetype</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'pdf'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$content_table</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'content_type_homes'</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$fid_field</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'field_floorplan_fid'</span><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: #000088;">$content_table</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'content_field_image'</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$fid_field</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'field_image_fid'</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #000088;">$file_details</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #666666; font-style: italic;">// check if it's the same file coming over</span>
				<span style="color: #666666; font-style: italic;">// only applies if the node exists in the first place. otherwise its a new import on a new home</span>
				<span style="color: #666666; font-style: italic;">// if there is a file match we dont want to do anything but skip the creation</span>
				<span style="color: #666666; font-style: italic;">// i think if you dont keep the node-&gt;file field prefilled, and returns those fields empty, it causes the file deletion on the server</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nid</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
					<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT f.filename, f.fid, f.filepath, f.timestamp FROM {files} f
											INNER JOIN {<span style="color: #009933; font-weight: bold;">%s</span>} ctype ON f.fid = ctype.<span style="color: #009933; font-weight: bold;">%s</span>
										WHERE f.filename = '<span style="color: #009933; font-weight: bold;">%s</span>'&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$content_table</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fid_field</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
&nbsp;
					<span style="color: #000088;">$file_details</span> <span style="color: #339933;">=</span> db_fetch_array<span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_details</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$file_details</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'timestamp'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'timestamp'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
					<span style="color: #666666; font-style: italic;">// if file exists and has not changed remotely, skip it</span>
&nbsp;
					watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@file already exists for @home. Skipping.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@file'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$file_details</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@home'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> 
&nbsp;
					<span style="color: #666666; font-style: italic;">// save file</span>
					<span style="color: #666666; font-style: italic;">// REPLACE because we can be certain we will not have duplicate files</span>
					<span style="color: #666666; font-style: italic;">// so we will only ever receive unique ones here</span>
&nbsp;
					file_save_data<span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_data</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filepath'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> FILE_EXISTS_REPLACE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #666666; font-style: italic;">//write record in files table</span>
					drupal_write_record<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'files'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT fid,filepath FROM {files} WHERE filename = '<span style="color: #009933; font-weight: bold;">%s</span>'&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #000088;">$file_details</span> <span style="color: #339933;">=</span> db_fetch_object<span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #000088;">$file_data</span> <span style="color: #339933;">=</span> field_file_load<span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_details</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Uploaded @file into @home.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@file'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$full_file</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'filename'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'@home'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
					<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$file_data</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
						<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$filetype</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'pdf'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
							<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_floorplan</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$file_data</span><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: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_image</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$file_data</span><span style="color: #339933;">;</span>
						<span style="color: #009900;">&#125;</span>
&nbsp;
					<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$node</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>After the file is saved to the file system and database, <a href="http://api.lullabot.com/field_file_load" target="_blank">field_file_load()</a> is called to load the file data. With a populated array now, we can add that to our node object by simply putting $node->field_floorplan[] = $file_data or $node->field_image[] = $file_data to append the existing array with data. The $node object is returned, and node_save($node) is immediately called, and our node data and file data are saved. Just like that, we have a simple content distribution system from one parent site to potentially many remote sites.</p>
<p>This is just a simple example, your mileage may vary. We are utilizing this technology to hook companies together under different Drupal installations on different servers. Using <a href="http://www.drupal.org/project/services" target="_blank">Services</a> you could also distribute <a href="http://www.drupal.org/project/views" target="_blank">Views</a> configurations, users, and system settings.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/how-tos/sync-files-in-drupal-using-services-and-xmlrpc.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sync Drupal Content Using Services and xmlrpc()</title>
		<link>http://www.delawarewebdesigner.com/tech-stuff/sync-drupal-content-using-services-and-xmlrpc.htm</link>
		<comments>http://www.delawarewebdesigner.com/tech-stuff/sync-drupal-content-using-services-and-xmlrpc.htm#comments</comments>
		<pubDate>Sat, 19 Dec 2009 01:52:37 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Drupal Development]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[drupal modules]]></category>
		<category><![CDATA[drupal node service]]></category>
		<category><![CDATA[drupal Services API]]></category>
		<category><![CDATA[drupal services module]]></category>
		<category><![CDATA[drupal xmlrpc]]></category>
		<category><![CDATA[push content with drupal services]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/?p=427</guid>
		<description><![CDATA[Have you ever wondered how to push custom content from one Drupal site to another Drupal site?
There are a handful of ways to do this. One way would be to create an external database connection, talk to it, and update the data in our database through raw PHP. But that&#8217;s not really good, not to [...]]]></description>
			<content:encoded><![CDATA[<p>Have you ever wondered how to push custom content from one Drupal site to another Drupal site?</p>
<p>There are a handful of ways to do this. One way would be to create an external database connection, talk to it, and update the data in our database through raw PHP. But that&#8217;s not really good, not to mention slow, and also very <em>un</em> Drupal.</p>
<p>Another way would be to utilize Domain Access, and publish content to affiliated sites. That works in some cases, but what if these sites are independent from each other with different companies managing them? You would then have the nightmare of dealing with prefixed tables, back-end training issues, and the occasional node overlap from misconfiguring Domain Access.</p>
<p>A third way would be to utilize FeedAPI (or its successor, Feeds), to read from an RSS feed. Then you could parse and import that content at regular intervals. Sounds great, but if you plan on importing custom node types that have extensive CCK fields, files and images, prepare to sit down and code plugins and parsers galore to support CCK as data sources to target.</p>
<p>The third way is the one I thought I could get working. It seems so simple in theory that you can create an RSS/XML/JSON data structure with Views, and then tell Feeds to take that feed and parse it. True, it works if you are using a basic content type like Story or Page, but all bets are off once CCK comes into play- and who doesn&#8217;t use CCK these days? Hats off to Alex Barth / Development Seed though on Feeds, its a great start and sure to grow into a monster data consuming module. I do want to use for future projects, just not for this function.</p>
<p>One way that most people are not aware of is to take advantage of Drupal&#8217;s XML-RPC functions through the <a href="http://drupal.org/project/Services" target="_blank">Services</a> module. In short, the <a href="http://drupal.org/project/Services" target="_blank">Services</a> module provides:</p>
<blockquote><p><strong>A standardized solution of integrating external applications with Drupal. Service callbacks may be used with multiple interfaces like XMLRPC, JSON, REST, SOAP, AMF, etc. This allows a Drupal site to provide web services via multiple interfaces while using the same callback code.</strong></p></blockquote>
<p>So, then we got the idea to have the &#8216;master&#8217; Drupal site act as a SOAP server with the <a href="http://drupal.org/project/Services" target="_blank">Services</a> module, and provide our own custom services in order to get the job done. This runs once an hour, requires no user interaction, fails silently, and only requires two modules. Effectively, it also allows us to not have to use:</p>
<ul>
<li>Domain Access</li>
<li>FeedAPI/Feeds</li>
<li>Multi-site Setup</li>
</ul>
<p>The benefit of this is every site can run independently from one another and be customized various ways, while still receiving key content from the parent website. Thus is the beauty of XMLRPC/SOAP.</p>
<p>The next part was to create my own custom method so I can request a list of node ID&#8217;s from the parent server. There is no method of getting all node ID&#8217;s out of the box, but you can easily create them. Here is what I came up with:</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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// CODE ON PARENT SERVER</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> homes_service_service<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">return</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
			<span style="color: #0000ff;">'#method'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'node.getAllHomes'</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'#callback'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'homes_service_node_get_all_homes'</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'#return'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'array'</span><span style="color: #339933;">,</span>
			<span style="color: #0000ff;">'#help'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Return a list of node id\'s that are of the Home content type.'</span><span style="color: #339933;">,</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> homes_service_node_get_all_homes<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT nid FROM {node} WHERE type = &quot;%s&quot;'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'homes'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$home</span> <span style="color: #339933;">=</span> db_fetch_array<span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</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: #000088;">$home</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nid'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$homes</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$home</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>	
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$homes</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// CODE ON REMOTE SERVERS</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> homes_sync_get_node_list<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// user authentication code here</span>
	<span style="color: #666666; font-style: italic;">// connect as 'services' user with 'services' role</span>
	<span style="color: #666666; font-style: italic;">// that way, drupal permissions are respected</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">// user.login method used</span>
	<span style="color: #666666; font-style: italic;">// we get a successful login if the return is an array and the array values match our login information</span>
        <span style="color: #666666; font-style: italic;">// this needs a little more work so the parent server knows exactly who is requesting information       </span>
&nbsp;
	<span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'user'</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$password</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$authenticate</span> <span style="color: #339933;">=</span> xmlrpc<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://upgrade.beracahhomes.com/services/xmlrpc'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'user.login'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$password</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$authenticate</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$authenticate</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'user'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">===</span> <span style="color: #000088;">$user</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$authenticate</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'user'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'status'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000088;">$node_ids</span> <span style="color: #339933;">=</span> xmlrpc<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://www.parentsite.com/services/xmlrpc'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'node.getAllHomes'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>xmlrpc_error<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$error</span> <span style="color: #339933;">=</span> xmlrpc_error<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Error getting node list from parent server. Error: @error.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@error'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$error</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_CRITICAL<span style="color: #009900;">&#41;</span><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: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node_ids</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$nid</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$nodes</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$nid</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
			variable_set<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'parent_home_nodes'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nodes</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Successfully retrieved node list from parent server.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_NOTICE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	homes_sync_perform_update<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> homes_sync_perform_update<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000088;">$node_ids</span> <span style="color: #339933;">=</span> variable_get<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'parent_home_nodes'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$node_ids</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$nid</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> xmlrpc<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://www.parentsite.com/services/xmlrpc'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'node.get'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nid</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> db_fetch_array<span style="color: #009900;">&#40;</span>db_query<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SELECT n.nid, n.title, n.type FROM {node} n WHERE n.title = &quot;%s&quot; AND n.type = &quot;%s&quot;'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'homes'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>xmlrpc_error<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$error</span> <span style="color: #339933;">=</span> xmlrpc_error<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			watchdog<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'homes_sync'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Could not perform XMLRPC request. Error: @error.'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'@error'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$error</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> WATCHDOG_CRITICAL<span style="color: #009900;">&#41;</span><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: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000088;">$node</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nid'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nid</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$result</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
&nbsp;
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">type</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">uid</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">status</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'status'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">created</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'created'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">changed</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'changed'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">comment</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'comment'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">promote</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'promote'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">moderate</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'moderate'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sticky</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'sticky'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tnid</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tnid'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">translate</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'translate'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">body</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'body'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">teaser</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'teaser'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">format</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'format'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'data'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">path</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'path'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_type</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'field_type'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_number_of_bathrooms</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'field_number_of_bathrooms'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_number_of_bedrooms</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'field_number_of_bedrooms'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_number_of_floors</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'field_number_of_floors'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
				<span style="color: #000088;">$node</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">field_square_footage</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'field_square_footage'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'value'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
				node_save<span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
				<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$node</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span>	
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> homes_sync_cron<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	homes_sync_get_node_list<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p><strong>For some reason, I can&#8217;t have two instances of wp-syntax in a single post, so bear with me. The above code is part of two seperate modules, one on the parent server, and one on the remote server (as notated with the PHP comment).</strong></p>
<p>The module code (after CODE ON PARENT SERVER)  resides on the parent server. This uses hook_service to talk to Services, and says expose node.getAllHomes as a request. That request method then calls the homes_service_node_get_all_homes function, which does a SQL query returns an array of node id&#8217;s that I am looking for.</p>
<p>I could easily return all nodes as their full node objects, but for performance reasons, I&#8217;d rather get a short list and save them on the receiving end. That way, I can create/update a handful at a time instead of all at once, which lightens the load on the database and application server.</p>
<p>On the receiving end, we need some code that creates the request that is sent to the parent server. Using hook_cron, I can send this request on an automated basis. The module code (after CODE ON REMOTE SERVERS) looks for the node list locally, and constructs single requests to retrieve node data one at a time. From there, it constructs a node object and saves it all with node_save. If the node already exists, based on type and title (our node ID&#8217;s will not match, but our title certainly will, since child sites cannot create or edit these nodes) it grabs the node ID from the local database and puts that in with the node object. node_save is a great function that can handle creating or updating data with the same structure. So, if the update runs again and passes us the same data, it will recognize it already has it, and update the record instead of create duplicates. Slick.</p>
<p>So what do we have? If we deploy the remote code on multiple remote sites, they can all sync up specific content with the parent website without anyone having to do anything special. So long as the parent site admin provides content, everyone will get it.</p>
<p>This is a quick implementation of course. I am fleshing out the authentication further as well as staggering the amount of data updated every cron run. With the core functionality in place, I can focus on security and speed. The next step is retrieving files and images using the same methods, and I will go over that in another post when I get a chance.</p>
<p>I hope fellow Drupalers found this useful, because I found that documentation on this is touch and go (and probably a reason not many utilize XMLRPC/Services). It&#8217;s a very powerful feature.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/tech-stuff/sync-drupal-content-using-services-and-xmlrpc.htm/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>High Quality Website Photos</title>
		<link>http://www.delawarewebdesigner.com/how-tos/high-quality-website-photos.htm</link>
		<comments>http://www.delawarewebdesigner.com/how-tos/high-quality-website-photos.htm#comments</comments>
		<pubDate>Sun, 25 Jan 2009 19:27:02 +0000</pubDate>
		<dc:creator>shaun</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[How To's]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/how-tos/high-quality-website-photos.htm</guid>
		<description><![CDATA[Websites should present an image of quality to the public. Nowhere is this more apparent as in the area of website photography. A common mistake made by many website owners is undervaluing this very important facet of a website’s overall presentation. A professionally designed website can be made to appear not-so-professional by the careless use [...]]]></description>
			<content:encoded><![CDATA[<p>Websites should present an image of quality to the public. Nowhere is this more apparent as in the area of website photography. A common mistake made by many website owners is undervaluing this very important facet of a website’s overall presentation. A professionally designed website can be made to appear not-so-professional by the careless use of less-than-optimal photography.</p>
<p>With today’s increasingly capable camera’s in terms of storage and megapixels as well as features, many amateurs mistakenly believe that high quality equipment can replace the experience and skill of a professional photographer. This is rarely the case. You may shoot wonderful photos of your children or pets or your favorite vacation spots, but that seldom qualifies you to take quality photos that truly represent your staff, your products, or your location well. </p>
<p>Nonetheless, with all the preceding disclaimers, you might decide to give it a whirl. If that’s the case, here a few tips to consider.</p>
<p>Ten Tips to Great Photography</p>
<ol>
<li>Hire a professional. If you have the budget, this is usually the best choice.</li>
<li>Use a high quality camera. It’s less about megapixels than it is about the lens. Generally, a name brand camera with a large lens will give the best results. Consider renting or borrowing a good camera rather than using your personal pocket-sized camera.</li>
<li>Provide sufficient lighting. Either indirect sunshine (shade on a bright day) or lots of artificial lights are best. Don’t depend on the camera to compensate. Light your subjects well.</li>
<li>Use a tripod and the camera’s timer. A decent tripod can be purchased at your local discount store for less than $50. This will reduce the blur caused by<br />
the camera’s movement while the shutter is open. This becomes increasingly more important in lower light and increased distance. </li>
<li>Using the timer. Using the camera’s timer will reduce the blur even more when on a tripod.</li>
<li>Acquire the right tools. Photoshop, Photoshop Elements, and PaintShop Pro are a few products worthy of consideration at different costs and capabilities.</li>
<li>Take the time to learn the tools. Depending your preferences and learning style, courses, books, and online courseware are all viable choices.</li>
<li>Add appropriate text over the image as a call to action. Photos add life to a website. Text can add value to the photo by leading your customers to the next step of contacting you or making a purchase.</li>
<li>Purchase stock photography. If you can’t afford a professional, many websites sell high-quality photos at reasonable costs, many less than $10 per photo. Read the licensing details carefully.</li>
<li>Hire a professional. If you have the budget, this is usually the best choice.</li>
<p>Good presentation of good photos, along with quality copy and solid layout, can add real value to your website. Your website is indeed the only view of your company or organization that many potential customers, suppliers, and employees will ever see. Don’t make the mistake of skimping on photography.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/how-tos/high-quality-website-photos.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Why Should You Use Gmail (Google Mail)?</title>
		<link>http://www.delawarewebdesigner.com/how-tos/why-should-you-use-gmail-google-mail.htm</link>
		<comments>http://www.delawarewebdesigner.com/how-tos/why-should-you-use-gmail-google-mail.htm#comments</comments>
		<pubDate>Tue, 19 Aug 2008 01:11:07 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/how-tos/why-should-you-use-gmail-google-mail.htm</guid>
		<description><![CDATA[I&#8217;ve been using Google Mail since around 2004 when it was invite-only. After the first few emails, I was hooked. I killed my existing Hotmail, Yahoo! and other random accounts laying around. They simply provided few features, and demanded money for features that are basically standard in any mail client like Outlook. I email pretty [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using Google Mail since around 2004 when it was invite-only. After the first few emails, I was hooked. I killed my existing Hotmail, Yahoo! and other random accounts laying around. They simply provided few features, and demanded money for features that are basically standard in any mail client like Outlook. I email pretty frequently, so it is important that I have a feature rich service available to me anytime, anywhere.</p>
<p>So why Gmail? For starters, its really simple to import existing contacts into your system from your other accounts. Gmail also supports POP3 and IMAP- <strong>for free</strong>. This means that you can use any email client like Mozilla Thunderbird (also free) from any desktop and connect to your email. Last time I checked, Hotmail and Yahoo! both charged an annual fee to do this which is ridiculous. It isolates customers who don&#8217;t want to be tied to a web interface all the time. My storage cap at that time was like 250 MB, a ridiculously small amount. So it was no contest to switch to Gmail, who offer 6 GB to 8 GB per account, almost enough to last a lifetime (I have 7000 email conversations in my inbox).</p>
<p>Included with Gmail is Google Docs, Google&#8217;s online alternative to Microsoft Office. It is a lightweight application for basic word processing or spreadsheet creation. You can also share access with other Gmail clients (coworkers, friends, employees) by putting in their email address into the access list. They can then access the files and make revisions without ever having to connect to a server or downloading / uploading files, its all done from the web interface. And if that isn&#8217;t enough, Google Talk is embedded into the mailbox sections loaded with your contact list. If they also use Gmail, you can IM directly through Gmail instantly through the power of <a href="http://en.wikipedia.org/wiki/AJAX" target="_blank">AJAX</a>.</p>
<p>For those that are tech savvy like me and own an iPhone or iPod Touch, Gmail is supported fully either through Safari or the device&#8217;s Mail application- which to me is even more addictive than the Blackberry (Crackberry).</p>
<p>All of these reasons alone are enough to cut ties with other email services and sign up with Google. If that wasn&#8217;t enough, check out this article detailing <strong><a href="http://justcreativedesign.com/2008/08/18/what-is-the-best-free-email-account-googles-gmail/" target="_blank">10 Reasons To Switch To Gmail</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/how-tos/why-should-you-use-gmail-google-mail.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stylus for iPhone / iPod Touch</title>
		<link>http://www.delawarewebdesigner.com/how-tos/stylus-for-iphone-ipod-touch.htm</link>
		<comments>http://www.delawarewebdesigner.com/how-tos/stylus-for-iphone-ipod-touch.htm#comments</comments>
		<pubDate>Thu, 31 Jul 2008 17:09:21 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[How To's]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[iPhone / iPod Touch]]></category>
		<category><![CDATA[iPhone Apps]]></category>
		<category><![CDATA[iPhone Development]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/how-tos/stylus-for-iphone-ipod-touch.htm</guid>
		<description><![CDATA[There&#8217;s no doubt that the iPhone / iPod touch are the worlds smallest efficient mobile multimedia devices, but its one drawback echoed around the world is the varying difficulty users have in typing on it. If you have large fingers, you may register a few letters or multiple keypresses in one touch. This can make [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s no doubt that the iPhone / iPod touch are the worlds smallest efficient mobile multimedia devices, but its one drawback echoed around the world is the varying difficulty users have in typing on it. If you have large fingers, you may register a few letters or multiple keypresses in one touch. This can make texting, emailing, and typing URLs frustrating. What&#8217;s a discouraged user to do?</p>
<p>Thankfully, there is a solution. The good folks at Ten One Design came up with a stylus unique for the iPhone / iPod Touch glass surface- a felt tipped stylus. Not only can this be used to make you a more efficient typer, but it can double as a drawing tool as well for drawing or sketching applications. Games that require sliding (such as Tetris, or Aurora Feint) can be better fit with the stylus as well, saving the screen from oil and smudges from dirty fingers.</p>
<p><a href="http://www.tenonedesign.com/stylus.php" title="iPhone Stylus" target="_blank">http://www.tenonedesign.com/stylus.php </a></p>
<p><a href="http://www.tenonedesign.com/stylus.php" title="iPhone Stylus" target="_blank" style="margin: 0pt auto; text-align: center"></a></p>
<p style="text-align: center"><a href="http://www.tenonedesign.com/stylus.php" title="iPhone Stylus" target="_blank" style="margin: 0pt auto; text-align: center"><img src="http://www.delawarewebdesigner.com/wp-content/iphone_gun_sep.jpg" alt="iphone_gun_sep.jpg" style="margin: 5px auto; padding: 3px" border="0" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/how-tos/stylus-for-iphone-ipod-touch.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top 5 Best iPhone Apps</title>
		<link>http://www.delawarewebdesigner.com/blurbs/top-5-best-iphone-apps.htm</link>
		<comments>http://www.delawarewebdesigner.com/blurbs/top-5-best-iphone-apps.htm#comments</comments>
		<pubDate>Mon, 28 Jul 2008 17:27:23 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Blurbs]]></category>
		<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Reviews]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[iPhone AppStore]]></category>
		<category><![CDATA[iPhone Apps]]></category>
		<category><![CDATA[iPhone Development]]></category>
		<category><![CDATA[iPhone Jailbreak]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/blurbs/top-5-best-iphone-apps.htm</guid>
		<description><![CDATA[I love my iPod Touch. I was a bit weary back in March about the decision to buy the 32GB model but now it&#8217;s paid off. With the recent firmware update (available for 10 bucks through iTunes) comes a new little program called AppStore. AppStore is basically iTunes for iPhone/iPod specific software, with plenty of [...]]]></description>
			<content:encoded><![CDATA[<p>I love my iPod Touch. I was a bit weary back in March about the decision to buy the 32GB model but now it&#8217;s paid off. With the recent firmware update (available for 10 bucks through iTunes) comes a new little program called AppStore. AppStore is basically iTunes for iPhone/iPod specific software, with plenty of freebies. There has always been the ability to run Web Apps, which is to say connecting to a website and running an application- but this is so much better. This lets you download software to keep, more responsive, more slick, and better designed.</p>
<p><span id="more-101"></span>For those who don&#8217;t know, the iPhone and iPod Touch are identical (the iPod has no phone capability, obviously). As long as iPhone is on AT&amp;T, I&#8217;ll never have one. I don&#8217;t think I would want my phone and iPod as one anyway for various reasons, but I digress.</p>
<p>The AppStore boasts a few hundred applications with more on the way. Apple is encouraging developers around the world to develop for the iPhone, and even make a little money too (some apps are free, others cost anywhere from 1.99 to 99.99).  The SDK has been available for some time now, and there are tons of unique apps on AppStore. Ironically, its the free ones that seem to be the best (the paid ones are poorly to mediocrely scored). Users weigh in on AppStore apps with reviews, for usability, performance, purpose, stability. It&#8217;s like a condensed version of an Amazon product page.</p>
<p>I browse the AppStore daily for new apps or updates. My only complaint with it so far, if not the only one, is that there isn&#8217;t a section to see &#8216;New&#8217; apps.  I can&#8217;t tell if these are mixed in with the listings, but they are not easy to spot unless you have a pretty good memory. Perhaps a future update will make this easier to view.</p>
<p>I am an avid music lover, so I was quite thrilled to find the following apps on AppStore. Incidentally, they are what I consider the best current apps on AppStore so far, basically because they saved me from having to invest in Sirius or XM Radio (I have a huge disdain for FM radio- its disgusting crap that never changes because the industry is so messed up, but thats a whole other topic). Now with these I have immensely supplemented my playlist of ~3000 mp3s with free streaming music:</p>
<ol>
<li><a href="http://en.wikipedia.org/wiki/AOL_Radio">AOL Radio</a> &#8211; Besides AOL Instant Messenger, this has to be hands down the best thing AOL has ever put out, period. With tons of stations at your fingertips, there is always something brand new just a tap away. So long as you have a data connection, you have music, and its all totally free. On top of that, you can mark favorites, or tap to purchase the track from an online store, and see a list of recently listened to songs for purchasing. This alone is worth the investment for an iPod Touch / iPhone. But wait, theres more.</li>
<li><a href="http://en.wikipedia.org/wiki/Last.fm" target="_blank">Last.fm</a> &#8211; Last.fm was another internet service that I was a heavy user of. It works based on delivering songs to you from picking genres you like. The userbase tags songs and artists so the results that stream to you are fine tuned. I used this a lot last year to discover new music and now its on the iPod Touch / iPhone too. It also keeps complete logs of what you&#8217;ve listened to on your account page. Can&#8217;t get any better than that.<a href="http://en.wikipedia.org/wiki/Last.fm" target="_blank"> </a></li>
<li><a href="http://en.wikipedia.org/wiki/Pandora_(music_service)" target="_blank">Pandora</a> &#8211; I remember when Pandora was an technical demo of sorts back in my first year of college (2000). I was quite impressed at the level of accuracy and the algorithm behind Pandora that makes it such a great / unique service. It&#8217;s very simple: Pandora lets you input your favorite bands, and based on what you put in, it creates playlists for you of music it believes you will enjoy. There are so many factors and ways it indexes music its insane- and for me, it&#8217;s rarely off the mark. Over 400 different musical attributes (see <a href="http://en.wikipedia.org/wiki/List_of_Music_Genome_Project_attributes" title="List of Music Genome Project attributes">List of Music Genome Project attributes</a>) are considered when selecting the next song. These 400 attributes are combined into larger groups called focus traits. There are 2,000 focus traits. Examples of these are rhythm <a href="http://en.wikipedia.org/wiki/Syncopation" title="Syncopation">syncopation</a>, key <a href="http://en.wikipedia.org/wiki/Tonality" title="Tonality">tonality</a>, vocal <a href="http://en.wikipedia.org/wiki/Harmonies" class="mw-redirect" title="Harmonies">harmonies</a> and displayed instrumental proficiency. It&#8217;s almost like Pandora can read your mind.<a href="http://en.wikipedia.org/wiki/Pandora_(music_service)" target="_blank"> </a></li>
<li><a href="http://iphoneapppodcast.com/tuner-iphone-app-review" target="_blank">Tuner</a> &#8211; Tuner is very similar to AOL Radio, but with full listings of Internet radio stations, or ShoutCast radio stations. These are indie stations created by users and their own playlists. There is just so much music here its insane. Comedy and talk as well. I heard this app was pulled from AppStore though, but I cannot confirm.</li>
<li><a href="http://iphoneapppodcast.com/weatherbug-iphone-app-review" target="_blank">WeatherBug</a> &#8211; Normally I wouldn&#8217;t dare ever suggest to anyone to put WeatherBug on their computer, due to its bugginess and spyware/adware it throws on your PC. But for a portable device like the iPod Touch / iPhone, it&#8217;s indispensable. If only the device&#8217;s Weather program was more robust I wouldn&#8217;t need this. But when you live at the beach, this is a must have- especially for the Google Map Weather Radar mashup.</li>
</ol>
<p>This is just the start for what AppStore will have. It will only get better as time goes on. The top 5 apps above are free, with the exception of Tuner ($5.99).</p>
<p>The games are great too. One game, Super Monkey Ball (first released as a GameCube title, unbelievable) uses the accelerometers to guide the ball through the mazes. Just a glimpse of what is possible with the future of handhelds in general. It&#8217;s been said that the iPod Touch alone is as powerful as the Sega Dreamcast, a console from 2000/2001 which saw its demise when the Playstation 2 was released. That is pretty damn powerful, as most fans (including me) still have/use the Dreamcast from time to time. Mine is loaded with 800 classic Nintendo games. Child of the 80&#8217;s. <img src='http://www.delawarewebdesigner.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Get one of these. You&#8217;ll be glad you did.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/blurbs/top-5-best-iphone-apps.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Security</title>
		<link>http://www.delawarewebdesigner.com/tech-stuff/user-security.htm</link>
		<comments>http://www.delawarewebdesigner.com/tech-stuff/user-security.htm#comments</comments>
		<pubDate>Fri, 02 May 2008 16:55:12 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Delaware Web Design]]></category>
		<category><![CDATA[Delaware Web Designer]]></category>
		<category><![CDATA[Delaware Web Development]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[Web Applications]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/tech-stuff/user-security.htm</guid>
		<description><![CDATA[User security is a pretty big deal these days, and as I prep my follow up to Avoid Identity Theft I had another thought to write about.
One of my favorite things to do is guess someones password. Why? Because I can usually guess it. After analyzing someones intelligence and technical prowess, you can gauge how [...]]]></description>
			<content:encoded><![CDATA[<p>User security is a pretty big deal these days, and as I prep my follow up to <a href="http://www.delawarewebdesigner.com/blurbs/avoid-identity-theft-pt-1.htm" target="_blank">Avoid Identity Theft</a> I had another thought to write about.</p>
<p>One of my favorite things to do is guess someones password. Why? Because I can usually guess it. After analyzing someones intelligence and technical prowess, you can gauge how difficult their password probably is. Pete likes to throw random accounts at me and I&#8217;ll guess the password for fun. Usually get it on the third or fourth try. Ask Kevin Howett, I could regularly guess his AIM/MSN Zone passwords quite regularly back in the day.</p>
<p>Here&#8217;s the scary part. Most users in the real world day to day business use passwords that are far too weak to even have any use. You would be surprised how many people use &#8216;password&#8217; or &#8216;name123&#8242; or just &#8216;name&#8217; as a password. Tons. Or their birthdate, car, dogs name, or sports team name. This won&#8217;t protect you against anything, and choosing a password you can remember does not give you the benefits of a password at all. By just being a regular word like &#8216;toyota&#8217; or &#8216;bill123&#8242; any skilled cracker/hacker is going to get into your account no sweat.</p>
<p>Why? Well, they will tell you that choosing a password is hard. I don&#8217;t disagree with them. Having to think of something no one else is expected to discover is hard. There are services that can assist you with this.</p>
<p>A <a href="http://www.goodpassword.com/" target="_blank">good password</a> is one no one can guess, and one that would hinder even the best hacker or brute force app out there. That is why I am recommending to you to use <a href="http://www.goodpassword.com/" target="_blank">Good Password</a>. It will assist you in <a href="http://www.goodpassword.com/" target="_blank">generating a password randomly</a> or from a phrase of your liking.</p>
<p>While these may be hard for you to remember, don&#8217;t be discouraged. This is for your (and the company you work for) protection. I would suggest, if you must, to write them down and keep it in your wallet, or a place no one but you has access to.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/tech-stuff/user-security.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Avoid Identity Theft Pt 1</title>
		<link>http://www.delawarewebdesigner.com/blurbs/avoid-identity-theft-pt-1.htm</link>
		<comments>http://www.delawarewebdesigner.com/blurbs/avoid-identity-theft-pt-1.htm#comments</comments>
		<pubDate>Fri, 18 Apr 2008 18:40:43 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Blurbs]]></category>
		<category><![CDATA[Delaware Web Design]]></category>
		<category><![CDATA[Delaware Web Development]]></category>
		<category><![CDATA[Delaware Website Design]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[Inclind Management]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[Web Applications]]></category>

		<guid isPermaLink="false">http://www.delawarewebdesigner.com/blurbs/avoid-identity-theft-pt-1.htm</guid>
		<description><![CDATA[A while back, I posted an article dealing with internet security and protecting your identity:
http://www.delawarewebdesigner.com/rants-raves/protecting-your-computer.htm
http://www.delawarewebdesigner.com/blurbs/the-information-you-should-never-share-online.htm
Recently I have been advising clients on certain basic steps they can take to ensure they do not become a victim of identity theft. It has happened to me before, and it is a complete pain in the ass to reverse [...]]]></description>
			<content:encoded><![CDATA[<p>A while back, I posted an article dealing with internet security and protecting your identity:</p>
<p><a href="http://www.delawarewebdesigner.com/rants-raves/protecting-your-computer.htm" title="Delaware Web Designer">http://www.delawarewebdesigner.com/rants-raves/protecting-your-computer.htm</a></p>
<p><a href="http://www.delawarewebdesigner.com/blurbs/the-information-you-should-never-share-online.htm" title="Delaware Web Designer">http://www.delawarewebdesigner.com/blurbs/the-information-you-should-never-share-online.htm</a></p>
<p>Recently I have been advising clients on certain basic steps they can take to ensure they do not become a victim of identity theft. It has happened to me before, and it is a complete pain in the ass to reverse everything. Fortunately I caught on fast on the day it was happening (while my bank account was being drained, when 5 figures goes to 2 you know something&#8217;s up.) and was able to reverse and resolve the situation in 2 days, recover my money and my good name. I did however have to obtain all new bank account, credit card numbers, checks and the like. Others haven&#8217;t been so lucky.<br />
<span id="more-77"></span></p>
<p><strong><a href="http://en.wikipedia.org/wiki/Identity_theft" target="_blank">Identity theft</a></strong> is the fastest growing cyber crime in the <strong>world</strong>. The Internet is still a very young technology, and all things considered, still somewhat of a lawless frontier. With so many ways to remain anonymous online, its easy for people to hack, steal, and dupe people out of personal information such as financial info, credit card numbers, bank accounts, or even simple address and phone number. Almost 99% of the time, unless its easily traceable and/or major damage, law enforcement does not have either the time or resources to help you.</p>
<p>If you think you are safe while using services and sites like Paypal, Ebay, Amazon, or online banking, think again.</p>
<p>The most common way people lose their identity is through an email phishing method. Occasionally you will get an email that seems legitimate from a well known company, like Bank of America, Paypal, WaMu, or Hotmail. Check the &#8216;From:&#8217; field, the email address looks real. Hmm, so you open it up, and it reads something like: </p>
<p>&#8220;Please update your personal information for our records&#8221; &#8230; with a lot of other corporate sounding reading material. Typically followed with &#8220;http://www.somecompany.com/login&#8221;. It&#8217;s second nature for us IT people to just click delete, but most people will believe this is a real email, and click whatever link it tells you to click. A simple hover on the link with the cursor will display where that link ACTUALLY links to, so, while the link appears to be &#8220;http://www.somecompany.com/login&#8221;, its actually masked and ends up at a hackers website. You can easily tell by hovering on the link, because most fraudulent links will look like jibberish or not even have the correct parent domain.</p>
<p>For example, &#8216;http://somecompany.secure.foo.bar.2.com/login/index.php&#8217; would be the actual destination of the link in the email. What does this mean? This means that, while you think you may be clicking a link from SomeCompany, and going to SomeCompany&#8217;s website, you are actually being directed to another place, most likely the site has been setup to look just like where you intended (or thought) you were going in the first place. What happens then is you try to log in on the fake website, and it tells you login failed, check your password. Really, what just happened was you sent your login credentials to the hacker running the site, who then goes and uses it to log into your account at the real website, change your password, and bam you just lost your account to someone who is going to do whatever they want with it. This is quite common with PayPal and eBay, as I have seen many emails like this (I frequently use both services).</p>
<h3>So, how can I protect myself?</h3>
<p>There are a few simple steps you can do to protect yourself.</p>
<ol>
<li><strong>Email</strong><br />If you receive an email from a company advising you to update account information, or to verify your identity, the best thing to do is go directly to their website (don&#8217;t click any links in the email, do this yourself in the browser), log in, and check your account yourself. Especially for something like PayPal, this is the quickest way to determine if any account activity has occurred or administrative messages/alerts are pending for you.</li>
<li><strong>Validate the Website</strong><br />If you wind up at a login page, check to see that it is SSL secured (most, if not all, are) who issued it, and what the URL is. If something seems strange, don&#8217;t do anything further. Your best bet, like above, is to go to the parent site and log in from there. Don&#8217;t follow any links from other sites or search engines which can easily be spoofed.</li>
<li><strong><a href="http://www.delawarewebdesigner.com/blurbs/choosing-a-web-browser.htm" target="_blank" title="Delaware Web Design">Use a Secure Browser</a></strong><br />By default, most users use Internet Explorer 6 or 7. You can take additional steps to protect yourself from various types of hacks by using <a href="http://www.delawarewebdesigner.com/blurbs/choosing-a-web-browser.htm" target="_blank" title="Delaware Web Design">Mozilla Firefox or Opera browsers</a>. For example, when visiting a secure web site, Opera encrypts data using either SSL 3 or TLS, both of which are highly secure encryption protocols. It then adds information about the site&#8217;s security to the address bar. Users may also click a button on the address bar to check if a web site is a fraudulent or &#8220;phishing&#8221; site. Both companies ensure the browser actively protects you, and are extremely quick to patch any vulnerabilities found. In comparison, Internet Explorer was left to sit over a year before receiving any security patching or updates.</li>
<li><strong>Invest in Software</strong><br />You should have some form of protection on your computer to guard against malware, spyware, and adware. Like phishing, these are other methods that hackers use to not only get personal information, but gain backdoor access to your PC and execute commands. Typically they include keystroke loggers and other things that retrieve data and send it back to the source. Norton and Symantec are the most &#8216;known&#8217; names, but there are more alternatives out there that surpass both. <a href="http://us.trendmicro.com/us/home/" target="_blank">Trend Micro</a>, <a href="http://www.lavasoft.com/" target="_blank">LavaSoft</a>, <a href="http://free.grisoft.com/" target="_blank">AVG</a>, and <a href="http://www.pandasecurity.com/usa/" target="_blank">Panda Security</a> all are excellent solutions for anti-virus and *ware handling. Add in a firewall like <a href="http://www.zonealarm.com/store/content/home.jsp" target="_blank">ZoneAlarm</a>, and you&#8217;ve stepped up security by a huge degree. Don&#8217;t simply rely on Windows Security or Windows Firewall (Windows XP), it simply cannot protect you enough.</li>
<li><strong>Consider a Monitoring Service</strong><br />Services like <a href="http://www.lifelock.com/" target="_blank">LifeLock</a> will protect you against someone attempting to use your name or social security number in order to do things like apply for credit at a bank. <a href="http://www.lifelock.com/" target="_blank">LifeLock</a> is awesome.</li>
</ol>
<p>I will have part 2 ready in a few weeks, where I will cover software usage, and what software to <strong>not</strong> use to protect your identity.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/blurbs/avoid-identity-theft-pt-1.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Information You Should Never Share Online</title>
		<link>http://www.delawarewebdesigner.com/blurbs/the-information-you-should-never-share-online.htm</link>
		<comments>http://www.delawarewebdesigner.com/blurbs/the-information-you-should-never-share-online.htm#comments</comments>
		<pubDate>Fri, 21 Sep 2007 01:51:12 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Blurbs]]></category>
		<category><![CDATA[Custom Website Design]]></category>
		<category><![CDATA[Delaware Web Design]]></category>
		<category><![CDATA[Delaware Website Design]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[Inclind]]></category>
		<category><![CDATA[Inclind Management]]></category>
		<category><![CDATA[Search Engine Optimization]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[Web 2.0]]></category>
		<category><![CDATA[Web Applications]]></category>

		<guid isPermaLink="false">http://blog.inclind.com/?p=24</guid>
		<description><![CDATA[As a continuation of the post I created a couple days ago, I&#8217;d like to share this article with you written by the folks over at mint.com which reinforces some of the basic concepts I stated in my post. Like I said, protecting your online privacy is very important and should be taken seriously by [...]]]></description>
			<content:encoded><![CDATA[<p>As a continuation of the post I created a couple days ago, I&#8217;d like to share this article with you written by the folks over at <a href="http://www.mint.com" target="_blank">mint.com</a> which reinforces some of the basic concepts I stated in my post. Like I said, protecting your online privacy is very important and should be taken seriously by newbies or veterans of the internet when you submit any information on the web.</p>
<p>From <a href="http://www.mint.com" target="_blank">mint.com</a>:</p>
<p>According to a recent report by the <em>San Jose Mercury News</em>, <a href="http://www.sophos.com/security/topic/facebook.html">Sophos</a>, a Boston-based Internet security company, was able to acquire highly personal information from 40% of the nearly 200 Facebook users who chose to add “Freddi Staur” as a friend in their Facebook accounts.  Freddi Staur doesn’t exist, except as a toy on the desk of some Sophos employee.  The company created a fictional person on Facebook to illustrate how vulnerable people can be when using social networks.</p>
<p><span id="more-24"></span>Why is Mint bringing this story to you?  Well, securing your personal information on social networking sites isn’t only a matter of privacy.  It’s also an important step in preventing identity theft.  If you share personal information online, you make it easier for identity thieves to make off with your life story (and credit cards, and social security number, and so on) without a second thought.  Victims of identity theft can suffer significant financial losses, and can spend years working to “clear their name.”   Read any of <a href="http://www.mint.com/blog/train-wreck/tuesday-train-wreck-my-mom-stole-my-identity/">Identity Theft Horror Stories</a> our readers have shared with us… We don’t want to have this happen to you.</p>
<p>Secondly, as a new web service in the personal finance space, we’ve given a lot of thought to what we can do to make a web experience as private and anonymous as possible.  In fact, you’ll be able to register for Mint using only your email address, zip code and password.  And since we don’t share or sell your data with anyone, your privacy will be thoroughly protected, and TRUSTe verified.</p>
<p>We thought we should share with you what we know about how to evaluate and protect your privacy and identity online. The Freddi Staur story got us focused on the issues relative to the popular “social networks,” so let’s answer the big question:</p>
<blockquote><p>How do you protect your personal information while still enjoying the social and professional benefits that Facebook, MySpace and LinkedIn have to offer?</p></blockquote>
<p>At Mint, we want you to understand:</p>
<ul>
<li>The information you should and shouldn’t share</li>
<li>How you can actively set limits on the information you do share, and</li>
<li>How these sites treat your information differently.</li>
</ul>
<h3><font color="#3366ff">The Information You Should Never Share Online</font></h3>
<p>Some information is so central to your personal safety and so revealing of your individual identity that you should never make it available on the public area of any website.  Think of these as the Three Off-Limit Facts about you:</p>
<ul>
<li>Your social security number</li>
<li>Your phone numbers</li>
<li>Your home address</li>
</ul>
<h3><font color="#3366ff">Information You May Choose to Provide Online</font></h3>
<p>Facebook, MySpace, LinkedIn and similar sites have become incredibly popular precisely because of their social factor: they help you stay in touch with friends or business contacts, and make new ones as well. To take advantage of their benefits, though, these services need you to share some personal information.  That’s where we throw the caution flag, because you have to:</p>
<ul>
<li>Understand the information you share with the site.</li>
<li>Understand what information the site will share by default and with whom.</li>
<li>Actively use controls the site provides to better protect your information.</li>
<li>Understand how the company providing the site will use your information themselves.</li>
</ul>
<h3><font color="#3366ff">Understand the information you share</font></h3>
<p>Sites typically ask for some personal information at two points:  registration and profile development. These sites typically require some or all of the following information from you to set up an account:</p>
<ul>
<li>Name</li>
<li>E-mail address</li>
<li>Zip code</li>
<li>Birth date</li>
<li>Gender</li>
</ul>
<p style="text-align: center"><a href="http://farm2.static.flickr.com/1171/1336584467_d7e15acdf4_o.jpg"><img src="http://farm2.static.flickr.com/1171/1336584467_4ed4f2e916_m.jpg" title="Facebook Registration Page" alt="Facebook Registration Page" height="184" width="195" /></a>     <a href="http://farm2.static.flickr.com/1288/1336584423_35a9ff5a05_o.jpg"><img src="http://farm2.static.flickr.com/1288/1336584423_47769df2df_m.jpg" title="LInkedIn Registration Page" alt="LInkedIn Registration Page" height="184" width="143" /></a>     <a href="http://farm2.static.flickr.com/1286/1336584555_27bfb194e2_o.jpg"><img src="http://farm2.static.flickr.com/1286/1336584555_aeeb85781b_m.jpg" title="MySpace Registration Page" alt="MySpace Registration Page" height="184" width="123" /></a></p>
<p>After registering, you’ll probably want to add information to your profile to get the most out of the site. After all, isn’t this “private profile” supposed to represent <em>you</em>? Many people often add a slew of other identifying bits after registration to flesh themselves out. Common additions like school and work locations, contact information, your friends, groups and networks you join, and personal interests and activities are all there to give your profile <em>personality</em>. Right? True, but be aware it’s giving your profile <em>publicity</em>, too.</p>
<p>And when you look across all the information you’ve shared, it’s pretty clear that any stranger with bad intentions — and access to this information — has a great head start in knowing who and where you are, and if you’re a high potential target for identity theft.  They know how to contact you, too, and what information they might use to lure you into slipping them some of the Three Off-Limit Facts that open the door to your financial life and personal security.</p>
<h3><font color="#3366ff">Understanding Your Options</font></h3>
<p>Each of the three sites we’ve highlighted takes a slightly a different approach to sharing your information, so we’ll look at each separately.</p>
<p><strong>Facebook</strong></p>
<p><strong>Default Settings:</strong>  Facebook’s information philosophy — and default setting — is to share almost everything that you’ve included in your Facebook account.  That means if you’ve never changed your privacy settings, your Facebook profile is shared with not only all your friends and groups, but also with everyone in every network you join.</p>
<p>That’s a lot of sharing.</p>
<p>Luckily, though, Facebook gives you options to limit that outlandish profile broadcasting. Here’s where to start reigning in your information.</p>
<p><strong>Information Control Options:</strong>  The good news is that unlike many social websites, Facebook provides their users with an arsenal of privacy control and settings.</p>
<p>When you sign into your Facebook profile, take a look at the upper right-hand corner of the page, and click on the “Privacy” link next to the “Logout” link:</p>
<p style="text-align: center"><img src="http://farm2.static.flickr.com/1103/1337470428_a25181867e.jpg" title="Facebook Privacy Control Settings" alt="Facebook Privacy Control Settings" border="1" height="500" width="472" /></p>
<p>In this page, you have control over:</p>
<ul>
<li>Information you share in your profile</li>
<li>Information people see when they search for you</li>
<li>Information on actions you take with other people</li>
<li>Information available to others when you contact them</li>
<li>Privacy controls for applications you’ve added to your account</li>
</ul>
<p><strong>Important Facebook privacy settings to note:</strong></p>
<p>Search settings:  By default, everyone can find your profile listing in a public search. This includes users on Facebook, and potentially people searching on Google, Yahoo, and MSN.</p>
<p>If you want to keep yourself searchable like this, you should strictly limit the information you’re leaving on that public listing. We highly recommend, though, that you don’t “go public” and instead uncheck the box “Allow anyone to see my public search listing.”</p>
<p>Profile settings: Here’s where you have control over the contact information you provide to other people.  If you’re in one or more of Facebook’s Networks, you have the option of either displaying your contact information to only your friends, or to everyone. Again, Mint recommends that you limit sharing to only your friends and that you specify “no one” can see your contact e-mail.</p>
<p>Are all of these settings giving you a headache?  Set your profile to “No Networks” and many of these settings will remain inactive. This makes it less likely that you will unknowingly share information you don’t want to provide to strangers.</p>
<p><strong>MySpace</strong></p>
<p><strong>Default Settings:</strong>  By default, people on MySpace can see when you’re online. Your profile and photo is also set to be viewable by everyone.</p>
<p><strong>Information Control Options:</strong>  MySpace’s privacy options are very limited, but changing three key settings can provide you with some important privacy protection:</p>
<p style="text-align: center"><img src="http://farm2.static.flickr.com/1089/1337470062_4349e7244d.jpg" title="MySpace Privacy Control Settings" alt="MySpace Privacy Control Settings" border="1" height="253" width="500" /></p>
<ul>
<li>Online Now: By un-checking this box, other users won’t know when you’re actively on your account.</li>
<li>Profile Viewable By: By selecting “My Friends Only,” you limit the ability for strangers to find your personal information.</li>
<li>Photos: By un-checking this box, you prevent your photos from being emailed and shared by other users.</li>
</ul>
<p>You should be aware that MySpace does not have individual privacy controls for each section of information you provide.  Whenever you decide to add information to your MySpace profile, you should take extra care in deciding what you divulge.</p>
<p style="text-align: center"><img src="http://farm2.static.flickr.com/1055/1336584777_2aa4198310.jpg" title="MySpace Basic Information Settings" alt="MySpace Basic Information Settings" border="1" height="295" width="500" /></p>
<p><strong>LinkedIn</strong></p>
<p><strong>Default Settings:</strong> By default, your LinkedIn public profile is set to display your full profile information.  That means any information you provided will be available publicly.  Thankfully, there are choices available to you to take control of your privacy.</p>
<p><strong>Information Control Settings:</strong>  LinkedIn provides you with much more control over the information you share with other users.  Unfortunately, these controls are scattered throughout the site.</p>
<p>To get started, click on the “Accounts &amp; Settings” link on the top right corner of LinkedIn, and then on the “My Public Profile” link under the Profile Settings section.  You will now be on this page:</p>
<p style="text-align: center"><a href="http://farm2.static.flickr.com/1148/1337470272_a1e2063986_o.jpg"><img src="http://farm2.static.flickr.com/1148/1337470272_ef7235cb15_m.jpg" title="LinkedIn Public Profile Settings" alt="LinkedIn Public Profile Settings" height="240" width="203" /></a></p>
<p>Now you have two options: turn off your public profile so that no one out of your LinkedIn Network can view your information, or limit the type of information other people can see.  If you’re concerned about your privacy, we recommend that you turn off your public profile.</p>
<p>The other settings choices are fairly straightforward.  You should note that if you choose to have your public profile on, LinkedIn requires that you make available your basic information such as name, industry, location, and numbers of recommendations.</p>
<p>LinkedIn also provides further privacy controls under the “Privacy Settings” section of the Settings page.  Although each of these settings is on a separate page, LinkedIn provides great descriptions to each of the settings available to you, and what those settings can do.</p>
<p>Two settings to note in this area: “Profile Views,” where you can set what will be shown to other LinkedIn users when you view their profiles; and “Notifying My Network,” where you can control how or when people in your network are notified when you make significant changes to your profile.</p>
<p>In the “Name &amp; Location” settings page, you have the option to display only your first name and last initial.  When you set your locations, LinkedIn does a good job of simply sharing your regional area — not your specific city — to other LinkedIn users.</p>
<h3><font color="#3366ff">Understanding Their Privacy Policy</font></h3>
<p>An important part in being proactive about your personal information is to examine a website’s privacy policy.  That policy document explains how the website’s parent company plans to share (or commits <em>not</em> to share) the information you provide with other large populations of strangers — namely its employees, its parent company, subsidiaries, advertisers, and the like.</p>
<p>Things to consider when you read a privacy policy:</p>
<ul>
<li>Is the privacy policy easy to read and understand?</li>
<li>Will they share or sell your information?</li>
<li>How recently was it updated?</li>
</ul>
<p style="text-align: center"> <a href="http://farm2.static.flickr.com/1282/1336585591_5fe30cc6c1_o.jpg"><img src="http://farm2.static.flickr.com/1282/1336585591_d8b1829a5e_m.jpg" title="Facebook Privacy Policy" alt="Facebook Privacy Policy" height="165" width="141" /></a>     <a href="http://farm2.static.flickr.com/1213/1337471082_6922432c74_o.jpg"><img src="http://farm2.static.flickr.com/1213/1337471082_e9f48b536b_m.jpg" title="LinkedIn Privacy Policy" alt="LinkedIn Privacy Policy" height="165" width="195" /></a>     <a href="http://farm2.static.flickr.com/1130/1337470728_f72ce3261f_o.jpg"><img src="http://farm2.static.flickr.com/1130/1337470728_11307e253a_m.jpg" title="MySpace Privacy Policy" alt="MySpace Privacy Policy" height="165" width="142" /></a></p>
<p>Let’s apply some of the considerations listed above to each of the social networking websites:</p>
<ul>
<li>Will they sell your information?  Sites that share and sell your information expose you to greater privacy risks.  Obviously, the more people with access to your information, the more opportunities for identity theft.
<ul>
<li>Facebook and MySpace: Neither states that they will not sell your personal information.  It’s safe to assume that they are reserving the right to do so.</li>
<li>LinkedIn:  LinkedIn clearly states that they will never rent or sell your personal identifiable information to third parties for marketing purposes.</li>
</ul>
</li>
<li>How recently was it updated?  Sites should be updating their policies whenever new services and features are introduced which affect the privacy of your personal information.  If you see that the social networking sites you use are frequently adding new features, you should expect to see that their privacy policies are reviewed and updated regularly.  How recently were these sites’ privacy policies updated?
<ul>
<li>Facebook (May 24, 2007) and LinkedIn (July 14, 2006):  both updated within the last 14 months. Not bad.</li>
<li>MySpace (August 26, 2005):  you may want to consider whether their policy is current enough to protect the information you may have added in any new features they’ve added over the past 2 years.</li>
</ul>
</li>
</ul>
<h3><font color="#3366ff">Mint’s View on Privacy</font></h3>
<p>These sites offer real benefits to their users, as shown through their popularity.  But they also come with considerable risks to your privacy and identity.  You should protect your “virtual self” with the same common sense that you apply in the real world.  Mint’s point of view is:</p>
<ol>
<li>You should never share your phone numbers, physical addresses, or social security number information on public websites.</li>
<li>You should take the time to understand how the information you do choose to provide will be shared.  There are three key questions to answer <em>before</em> you open accounts and complete “profiles” (or to answer <em>today</em> if you already have an account):
<ul>
<li>What’s shown to friends/contacts?</li>
<li>What’s shared with strangers on the site?</li>
<li>What’s shown publicly on search engines?</li>
</ul>
</li>
<li>You also need to be proactive in finding and using the controls these sites provide to protect your personal information and reduce your exposure to identity theft.</li>
<li>You should understand how the companies that provide these sites will use your information. Key questions to answer:
<ul>
<li>Will they share or sell your information?</li>
<li>How up-to-date is their Privacy Policy?</li>
</ul>
</li>
</ol>
<p>You can also take immediate steps today to give yourself an extra layer of privacy:</p>
<ul>
<li>Visit TRUSTe and read the <a href="http://www.truste.org/consumers/consumer_tips.php">ten tips on protecting your personal information on the Internet</a>.</li>
<li>Check out Privacy Rights Clearinghouse’s fact sheets on <a href="http://www.privacyrights.org/netprivacy.htm">Internet Privacy</a> and <a href="http://www.privacyrights.org/financial.htm">Financial Privacy</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/blurbs/the-information-you-should-never-share-online.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Protecting Your Computer, and Your Identity</title>
		<link>http://www.delawarewebdesigner.com/rants-raves/protecting-your-computer.htm</link>
		<comments>http://www.delawarewebdesigner.com/rants-raves/protecting-your-computer.htm#comments</comments>
		<pubDate>Wed, 19 Sep 2007 01:05:13 +0000</pubDate>
		<dc:creator>Kevin Quillen</dc:creator>
				<category><![CDATA[Blurbs]]></category>
		<category><![CDATA[Delaware Web Design]]></category>
		<category><![CDATA[Delaware Website Design]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[How To's]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Inclind]]></category>
		<category><![CDATA[Inclind Management]]></category>
		<category><![CDATA[Rants & Raves]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tech Stuff]]></category>
		<category><![CDATA[Web Applications]]></category>

		<guid isPermaLink="false">http://blog.inclind.com/?p=22</guid>
		<description><![CDATA[As the internet and technology zips along every hour of every day, literally hundreds of new threats arise in the form of spyware, malware, adware, worms, virii, you name it. For you, the user, it is imperative that you be proactive in protection of your machine, instead of reactive (waiting until something happens to take [...]]]></description>
			<content:encoded><![CDATA[<p>As the internet and technology zips along every hour of every day, literally hundreds of new threats arise in the form of <a href="http://en.wikipedia.org/wiki/Spyware" target="_blank">spyware</a>, <a href="http://en.wikipedia.org/wiki/Malware" target="_blank">malware</a>, <a href="http://en.wikipedia.org/wiki/Adware" target="_blank">adware</a>, <a href="http://en.wikipedia.org/wiki/Computer_worm" target="_blank">worms</a>, <a href="http://en.wikipedia.org/wiki/Computer_virus" target="_blank">virii</a>, you name it. For you, the user, it is imperative that you be proactive in protection of your machine, instead of reactive (waiting until something happens to take action).  The more proactive you are in applying security, the more you can stop spreading junk that comes through your inbox or browser, and more importantly, protect your identity.</p>
<p>There are lots of <a href="http://www.newegg.com/Product/ProductList.aspx?Submit=ENE&amp;N=2060350377+4802&amp;name=Top+Sellers" target="_blank">retail software suites</a> that can accomplish the basic protection you need for your computer. But lets take a look at some free offerings that you can find on the internet that can do just as good of a job and be used in conjunction with <a href="http://www.newegg.com/Product/ProductList.aspx?Submit=ENE&amp;N=2060350377+4802&amp;name=Top+Sellers" target="_blank">Norton type packages</a>, adding an additional 60-80% more protection.</p>
<p><span id="more-22"></span>Firstly, lets start at the largest point of entry on your computer other than your inbox, the browser. Most people unwittingly use Internet Explorer, since it comes packaged in with Windows. Version 6 (XP) and to an extent, version 7 (XP/Vista) are very lacking when it comes to protection from spyware and adware on the internet.  Those open to change should switch to <a href="http://www.mozilla.com/en-US/firefox/?from=getfirefox" target="_blank">Firefox</a>, the best browser in town and second most installed browser on computers in the world (and that number is climbing by the day). <a href="http://www.mozilla.com/en-US/firefox/?from=getfirefox" target="_blank">Firefox</a> is totally free and will let you install plugins made by users, and this is where the value lies.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/browse/type:1/cat:12" target="_blank">From the plugins page</a>, search or look for the following plugins:</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/1865" target="_blank">AdBlock Plus</a> &#8211; <em>Ever been annoyed by all those ads and banners on the internet that often take longer to download than everything else on the page? Install Adblock Plus now and get rid of them.</em></p>
<p>With this plugin installed, right-click on a banner and choose &#8220;Adblock&#8221; from the context menu &#8211; the banner won&#8217;t be downloaded again. Maybe even replace parts of the banner address with star symbols to block similar banners as well. Or you select a filter subscription when Adblock Plus starts up the first time, then even this simple task will usually be unnecessary: the filter subscription will block most advertisements fully automatically.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/722" target="_blank">NoScript</a> &#8211; <em>Winner of the &#8220;2006 PC World World Class Award&#8221;, this tool makes Firefox the safest browser around.</em></p>
<p>Winner of the &#8220;2006 PC World World Class Award&#8221;, this tool provides extra protection to your Firefox.</p>
<p>It allows JavaScript, Java and other executable content to run only from trusted domains of your choice, e.g. your home-banking web site, and guards the &#8220;trust boundaries&#8221; against cross-site scripting attacks (XSS).</p>
<p>Such a preemptive approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality.</p>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/3383" target="_blank">KeyScrambler Personal</a> &#8211; <em>KeyScrambler Personal encrypts your keystrokes at the kernel driver level to protect your login information from keyloggers.</em></p>
<p>When you type on your keyboard, the keys travel along a path within the operating system before it arrives at your browser. Keyloggers plant themselves along this path and observe and record your keystrokes. The collected information is then sent to the criminals who will use it to steal from you.</p>
<p>KeyScrambler defeats keyloggers by encrypting your keystrokes at the keyboard driver level, deep within the operating system. When the encrypted keystrokes reach your browser, KeyScrambler then decrypts them so you see exactly the keys you&#8217;ve typed. Keyloggers can only record the encrypted keys, which are completely indecipherable.</p>
<p>Unlike anti-virus and anti-spyware programs that depend on recognition to remove keyloggers that they know about, KeyScrambler will protect you from both known and unknown keyloggers. What&#8217;s more, KeyScrambler provides protection without getting in your way. You don&#8217;t have anything to learn about the program and you don&#8217;t have to do anything differently, but with KeyScrambler your important personal information will be a whole lot safer.</p>
<p>Why are these important? <a href="https://addons.mozilla.org/en-US/firefox/addon/1865" target="_blank">AdBlock Plus</a> will allow you to filter out advertisements of any type on the websites you visit. Some advertisements, like Google Ads and Google AdSense, are harmless and their intent is just that, an advertisement. However, there are more sinister companies out there that create advertisements that look like real advertisements, and when you click and follow it to the website, any number of things could happen. You could be installing spyware, adware, or just had personal information phished from you. Popular phishing methods try to mimic familiar advertisements or alerts. The most typical type of phishing alert is something that looks like a standard Windows dialogue box that states &#8216;Click Here To Protect Your Pc Now!&#8217;. The average user tends to click on this, since it looks so much like anything else Windows would tell you in a dialouge box. With combined efforts of <a href="https://addons.mozilla.org/en-US/firefox/addon/1865" target="_blank">AdBlock Plus</a> and <a href="https://addons.mozilla.org/en-US/firefox/addon/722" target="_blank">NoScript</a>, you can effectively eliminate 80% of these malicious efforts to infect your computer. <a href="https://addons.mozilla.org/en-US/firefox/addon/722" target="_blank">NoScript</a> allows you to permit/block websites at the domain level to run scripts, like Javascript, which is another method used in order to get into your machine.</p>
<p>So far, you&#8217;ve invested <strong>$0.00</strong> in protecting your computer. Not bad, huh?</p>
<p>Next, try to monitor your browsing habits and those that use the computer, such as family members or friends. If they tend to visit popular sites like MySpace, CollegeHumor and the like, its possible they could run into malicious ads or phishing attempts. MySpace in particular is a hotbed of activity for spam, spyware, adware, virii, and phishing with hundreds of accounts getting hijacked daily. One of the most frequent ways this starts is by using template generator sites for your layout, or clicking images or ads in another persons generated layout. Some providers of these have malicious intent when deploying, in order to gain access to MySpace accounts for even <em>more</em> phishing and scam campaigns. You should educate those in your household that have internet access to sites like these.</p>
<p>If you use services online like Amazon, PayPal, or eBay, a simple email over MySpace could give away your personal information in under a second. You can use the plugins above as methods of stopping these attempts.</p>
<p>Typically, you can tell that you are getting a fake/spam email on an online web service like MySpace or YouTube one of the following ways:</p>
<ol>
<li>It is from someone you don&#8217;t know (this alone should throw up a mental flag).</li>
<li>It is from someone you know, but sounds very cryptic / message is all jibberish with links.</li>
<li>It is from someone you know, but it doesn&#8217;t sound like &#8216;them&#8217;. i.e. they beg you to click on a link, or urge you to try out a strange website.</li>
<li>The content is something like &#8220;I got $50 Off Instantly By Clicking Here!&#8221;, with an image, or link.</li>
</ol>
<p>Your computer security, online privacy, and identity are very important and it is critical to keep them in check. I hope you take some of the advice listed here to heart, because identity theft / fraud is the fastest growing crime in the world. You can take steps to prevent it from happening to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.delawarewebdesigner.com/rants-raves/protecting-your-computer.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
