<?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>Edward Stafford</title>
	<atom:link href="http://www.edwardstafford.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.edwardstafford.com</link>
	<description>Technologist, Artist, and Geek</description>
	<lastBuildDate>Wed, 10 Jun 2026 09:35:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>
	<item>
		<title>How To: Fixing CakePHP Broken GET Query Strings</title>
		<link>https://www.edwardstafford.com/how-to-fixing-cakephp-broken-get-query-strings/</link>
					<comments>https://www.edwardstafford.com/how-to-fixing-cakephp-broken-get-query-strings/#comments</comments>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Tue, 09 Oct 2012 19:07:37 +0000</pubDate>
				<category><![CDATA[Code Mode]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[web development]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/?p=438</guid>

					<description><![CDATA[After getting familiar with CakePHP 2.x for a little while, writing an application, I had a need to perform an AJAX action Â using the query string of an HTTP GET request. I&#8217;ve done it countless times using straight PHP, ASP.Net, even custom constructed requests from C# desktop applications. Â How difficult could it be? After all, &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/how-to-fixing-cakephp-broken-get-query-strings/" class="more-link">Continue reading<span class="screen-reader-text"> "How To: Fixing CakePHP Broken GET Query Strings"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>After getting familiar with CakePHP 2.x for a little while, writing an application, I had a need to perform an AJAX action Â using the query string of an HTTP GET request. I&#8217;ve done it countless times using straight PHP, ASP.Net, even custom constructed requests from C# desktop applications. Â How difficult could it be? After all, the idea behind these PHP frameworks is to take all the heavy lifting out of writing your code, right? I set out writing the AJAX links to construct my query string using <a title="CakePHP JsHelper" href="http://book.cakephp.org/2.0/en/core-libraries/helpers/js.html" target="_blank">CakePHP&#8217;s JsHelper</a>.</p>
<p>I started out by writing a simple query string with a single key/value and then retrieving it with some AJAX. It worked perfectly! Then I added a few more key/value pairs to the string and that&#8217;s when things went down hill. Apparently, I stumbled on to bug in the way CakePHP handles and encodes URL Query strings. Funny thing is, this bug was discovered and fixed in a previous version of the framework, but some how found it&#8217;s way into the code base again in version 2.x. Research revealed a number of work-arounds and hacks, most included editing a core file or two. I, however, did not want to have to resort to messing with core files of the framework, because they would likely be overwritten again after a version update or upgrade, leaving me back where I started. Instead I decided to &#8220;repair&#8221; the parts of the query string that CakePHP broke.</p>
<h2><span id="more-438"></span>So, How did CakePHP Break the Query String Anyway?</h2>
<p>A typical URL Query String should look something like this after it&#8217;s sent to the browser.</p>
<blockquote><p>http://www.domain.com/?<strong><span style="text-decoration: underline;">Key1</span>=firstvalue&amp;<span style="text-decoration: underline;">Key2</span>=secondvalue&amp;<span style="text-decoration: underline;">Key3</span>=thirdvalue</strong></p></blockquote>
<p>The query string itself is all the text that appears <strong>AFTER</strong> the &#8216;<strong>?</strong>&#8216;. In this case the query string is</p>
<blockquote><p><strong>Key1=firstvalue&amp;Key2=secondvalue&amp;Key3=thirdvalue</strong></p></blockquote>
<p>The string consists of three parameters and their values, each seperated by the &#8216;<em><strong>&amp;</strong></em>&#8216; character. Where URL Query Strings are concerned, the<em><strong> &amp;</strong></em> character is used as a delimiter to show where one key/value pair ends, and the next begins.</p>
<div>
<ol>
<li>Key1 = firstvalue</li>
<li>Key2 = secondvalue</li>
<li>Key3 = thirdvalue</li>
</ol>
</div>
<div>Now we should be able to pull each of the key / value pairs with some simple code. The problem with CakePHP, however is that it encodes &#8220;special&#8221; characters in the URL string before sending it off. Â So the &amp; character is encoded and sent as <strong>&amp;amp;</strong>. After this happens, our Query String now looks like</div>
<blockquote>
<div><strong><strong>Key1</strong>=firstvalue<span style="color: #ff0000;">&amp;amp;</span>Key=secondvalue<span style="color: #ff0000;">&amp;amp;</span>Key3=thirdvalue</strong></div>
</blockquote>
<div>Notice how the second and third key/value pairs have now changed. Â Remember, the <em><strong>&amp;</strong></em> character is used as the delimiter between key/value pairs, so that everything after the<em><strong> &amp;</strong></em> character is read as part of the key/value pair up to the next <strong><em>&amp;</em></strong> character. The result is thatÂ the key names now appear to beÂ <strong>amp;Key2</strong>andÂ <strong>amp;Key3</strong></div>
<div>
<ol>
<li>Key1= firstvalue</li>
<li><strong><span style="color: #ff0000;">amp;Key2</span></strong> = secondvalue</li>
<li><strong><span style="color: #ff0000;">amp;Key3</span></strong>= thirdvalue</li>
</ol>
</div>
<div>Now, when we try to pull the Key2 or Key3 values in our application, they don&#8217;t exist.</div>
<h2>Wonderful, So How Can We Fix This?</h2>
<p>To be honest, this is more of a work-around thanÂ a &#8220;fix&#8221;, but one that I think is feasible until CakePHP developers fix the underlying problem. What we&#8217;re doing here undoing the damage the CakePHP did by taking the &#8216;broken&#8217; query string and rebuilding it again with the correct delimiters and key names.</p>
<blockquote><p>if($this-&gt;request-&gt;is(&#8216;ajax&#8217;)){<br />
$temparray = $this-&gt;params[&#8216;url&#8217;];</p>
<p style="padding-left: 30px;">foreach($this-&gt;params[&#8216;url&#8217;] as $key =&gt; $value){</p>
<p style="padding-left: 60px;">if(strpos($key, &#8216;amp;&#8217;) !== false){<br />
$newkey = str_replace(&#8216;amp;&#8217;,&#8221;,$key);<br />
unset($temparray[$key]);<br />
$temparray[$newkey] = $value;<br />
}</p>
<p style="padding-left: 30px;">}<br />
$this-&gt;layout = &#8216;ajax&#8217;;<br />
if($this-&gt;<em>Model</em>-&gt;save($temparray)){<br />
echo &#8216;success&#8217;;<br />
}<br />
else{<br />
echo &#8220;&lt;br&gt;&lt;strong&gt;OOPS! something went wrong, refresh the page to reset your list&lt;/strong&gt;&#8221;;<br />
}<br />
$this-&gt;autoRender = false;<br />
exit();</p>
<p>else{<br />
$this-&gt;Session-&gt;setFlash(&#8220;Not an AJAX request!&#8221;);<br />
$this-&gt;redirect(&#8216;/<em>Model</em>/<em>View</em>&#8216;);<br />
}</p></blockquote>
<h2>Break It Down</h2>
<p>To see what&#8217;s happening here, lets step through code.</p>
<ul>
<li><strong>if($this-&gt;request-&gt;is(&#8216;ajax&#8217;)){</strong><br />
The first line checks to see if the page contains an AJAX request. If it does, then the code continues into the IF block and continues.</li>
<li><strong>$temparrayÂ = $this-&gt;params[&#8216;url&#8217;];</strong><br />
If the page does contain our AJAX request, this line creates a new variable called temparray and sets it&#8217;s value to an associative array created by using CakePHP &#8216;params&#8217; attribute with the URL parameter.Â Â Basically, we&#8217;re just creating a copy of the associative array of Query String parameters. We create a copy of the original string because CakePHP will not allow us to alter the params array directly.</li>
<li><strong>foreach($this-&gt;params[&#8216;url&#8217;] as $key =&gt; $value){</strong><br />
Next we start a foreach loop to iterate through all the URL parameters to access each parameter of the associative array setting the paramaterÂ name as $key and it&#8217;s value as $value.</li>
<li><strong>if(strpos($key, &#8216;amp;&#8217;) !== false){</strong><br />
Next, as we loop through each item in our array, we&#8217;re checking the string of each parameter name ($key) to see if it contains the encoded <strong>&amp;</strong> stringÂ <strong>&amp;amp;Â </strong>that CakePHP created.</li>
<li><strong>$newkey = str_replace(&#8216;amp;&#8217;,&#8221;,$key);</strong><br />
If there is a match, we remove the <strong>ONLY</strong> the <strong>amp;</strong> portion of the string. We leave the leading <em><strong>&amp;</strong></em> alone as we still need that as part of the new query string. Note here that the &#8221; passed in the st_replace function is two single quotations and not one double. We&#8217;re replacing the <strong>amp;Â </strong> found in the string with an empty string. Once we have our new string minus the<strong> amp;</strong> portion, we assign it to the $newkey variable.</li>
<li><strong>unset($temparray[$key]);</strong><br />
Now that we have the new parameter name with delimeter, we need to reconstruct the array by first removing the old array key.</li>
<li><strong>$temparray[$newkey] = $value;</strong><br />
Then, we add our newly created key <strong>$newkey</strong> and assign to it the original paired value, <strong>$value.</strong></li>
<li><strong>} Â }</strong><br />
The next two lines contain our closing brackets for the conditional IF block and next for the foreach loop.</li>
<li><strong>$this-&gt;layout = &#8216;ajax&#8217;;Â </strong><br />
This line is just telling CakePHP to use our AJAX layout. Moving on&#8230;</li>
<li><strong>Â if($this-&gt;<em>Model</em>-&gt;save($temparray)){</strong><br />
Now we can use our &#8220;New&#8221; array with any of CakePHP&#8217;s functions, classes etc. In this example, I&#8217;m using a conditional If statement and passing the array as part of CakePHP&#8217;s save function to update a bit of data in my database.</li>
<li><strong>echo &#8216;success&#8217;;</strong><br />
If the data update is successful, send the &#8220;success&#8221;Â string back Â so that our AJAX handler can update the page.</li>
<li><strong>}</strong><br />
The next line contains the bracket that closes our conditional If statement</li>
<li><strong>else{</strong><br />
After that we have the followup to our If condition. If the data saved, do something, if not, do something <strong>else</strong>.</li>
<li><strong>echo &#8220;&lt;br&gt;&lt;strong&gt;OOPS! something went wrong, refresh the page to reset your list&lt;/strong&gt;&#8221;;</strong><br />
As part of the if / else condition, if the data update failed, then we send the error message backÂ Â so that our AJAX handler can update the page.</li>
<li><strong>$this-&gt;autoRender = false;</strong><br />
This line tells CakePHP not to render the page after we finish working our magic. Because we&#8217;re using AJAX to update the page, we don&#8217;t need CakePHP to keep reloading and rendering the page. AJAX is taking care of that for us.</li>
<li><strong>exit();</strong><br />
Next, if we got this far, there should be nothing else for us to do and we can tell CakePHP to wrap it up and quit doing anything further.</li>
<li><strong>else{</strong><br />
This <em>else</em> condition is the alternative to our beginning <em>Â If</em> statement &#8211; <em><strong>if($this-&gt;request-&gt;is(&#8216;ajax&#8217;))</strong></em>. If the page received a request, but not from our AJAX handler, then we need to do something about it.</li>
<li><strong>$this-&gt;Session-&gt;setFlash(&#8220;Not an AJAX request!&#8221;);</strong><br />
If the page received a request, but not from our AJAX handler, the we&#8217;re telling CakePHP to set a notification message to show on the page and inform the viewer that the request was <strong>&#8220;Not an AJAX request!&#8221;</strong></li>
<li><strong>$this-&gt;redirect(&#8216;/<em>Model</em>/<em>View</em>&#8216;);<br />
</strong>Finally, continuing with the alternative else actions, we need to tell CakePHP to redirect us back to a page (Model/View). Otherwise, because the example code used here called a Controller function using AJAX without an associated view, CakePHP would choke and complain about missing View files. <strong>IF</strong> you are calling a Controller function from AJAX that <strong>DOES</strong> have an associated CakePHP view, then you will not need this line.</li>
<li><strong>}</strong><br />
And to wrap it all up is the closing bracket bring our final else block to a close.</li>
</ul>
<p>This sample was used as part of an existing application with specific conditions and goals. Some of the details in this How To may not apply to the specifics of your situation and this article should be used only as a guide.</p>
<p>That&#8217;s it. This is just one way to overcome the URL query string bug in CakePHP. There are other ways as well. I hope this at least helps in some way. Good luck and happy coding.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.edwardstafford.com/how-to-fixing-cakephp-broken-get-query-strings/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>How To: Read Only DataGridView Control, C#</title>
		<link>https://www.edwardstafford.com/how-to-read-only-datagridview-control-c/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 16 Aug 2012 02:36:01 +0000</pubDate>
				<category><![CDATA[Code Mode]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[How-to]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/?p=412</guid>

					<description><![CDATA[Quick Tip: By Default, DataGridView control columns are set as editable, but in many cases, you may not want your grid data to be edited, or you may want to set your own controls that enable when and how the data get edited. The following C# code snippet will set the DataGridView columns of your &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/how-to-read-only-datagridview-control-c/" class="more-link">Continue reading<span class="screen-reader-text"> "How To: Read Only DataGridView Control, C#"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p><strong>Quick Tip:<br />
</strong>By Default, DataGridView control columns are set as editable, but in many cases, you may not want your grid data to be edited, or you may want to set your own controls that enable when and how the data get edited. The following C# code snippet will set the DataGridView columns of your DataGridView to ReadOnly.</p>
<p style="padding-left: 30px;"><strong>foreach(DataGridViewColumn dc in My_DataGridView.Columns){</strong><br />
<strong> dc.ReadOnly = true;</strong><br />
<strong> }</strong></p>
<p>This snippet iterates through the Â DataGridView.Columns collection and sets Â the ReadOnly property for each DataGridViewColumn item referenced as dc to true (boolean).</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Microsoft Security Intelligence Report Volume 8</title>
		<link>https://www.edwardstafford.com/microsoft-security-intelligence-report-volume-8/</link>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Thu, 29 Apr 2010 15:20:49 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/2010/04/29/microsoft-security-intelligence-report-volume-8/</guid>

					<description><![CDATA[The Microsoft Security Intelligence Report (SIR) is a comprehensive and wide-ranging study of the evolving threat landscape, and addresses such topics as software vulnerability disclosures and exploits, malicious software (malware), and potentially unwanted software. Volume 8 of the Security Intelligence Report (SIR v8) covers July 2009 through December 2009. It includes data derived from more &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/microsoft-security-intelligence-report-volume-8/" class="more-link">Continue reading<span class="screen-reader-text"> "Microsoft Security Intelligence Report Volume 8"</span></a></p>]]></description>
										<content:encoded><![CDATA[<div class='posterous_autopost'>
<div class="posterous_bookmarklet_entry">
<p>The Microsoft Security Intelligence Report (SIR) is a comprehensive and wide-ranging study of the evolving threat landscape, and addresses such topics as software vulnerability disclosures and exploits, malicious software (malware), and potentially unwanted software.</p>
<p>Volume 8 of the Security Intelligence Report (SIR v8) covers July 2009 through December 2009. It includes data derived from more than 500 million computers worldwide, each running Windows. It also draws data from some of the busiest services on the Internet, such as Windows Live Hotmail and Bing.</p>
<p>In this volume, the analysis is from the perspective of the three Microsoft Trustworthy Computing Security Centers in addition to several Microsoft product groups.</p>
<p><img fetchpriority="high" decoding="async" src="http://posterous.com/getfile/files.posterous.com/edstafford/bClIeGpzgowfpiEFxvgtqyetqkAdBGjsdEgjdbJmyJdfzdlvkfnABHngipAp/media_httpwwwmicrosof_amfky.png.scaled500.png" width="472" height="259"/> </p>
<div class="posterous_quote_citation">via <a href="http://www.microsoft.com/security/about/sir.aspx">microsoft.com</a></div>
<p>Microsoft has released volume 8 of their Security Intelligence Report. 248 pages of in-depth information about malware, spam, malicious Web sites, vulnerabilities, and exploits with Mitigation Strategy, advice and best practices from Microsoft&#8217;s own IT organization. Should make for some good weekend reading.</p>
</div>
<p style="font-size: 10px;">  <a href="http://posterous.com">Posted via web</a>   from <a href="http://edstafford.posterous.com/microsoft-security-intelligence-report-volume-0">Ed&#8217;s Posterous</a>  </p>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Technology and IT Training on a Budget.</title>
		<link>https://www.edwardstafford.com/technology-and-it-training-on-a-budget/</link>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Tue, 20 Apr 2010 14:00:26 +0000</pubDate>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[training]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/?p=310</guid>

					<description><![CDATA[Keeping your skills sharp with free online training and educational resources. In my opinion, one of the biggestÂ challengesÂ faced by IT and Technology Professionals is keeping up with technology. It&#8217;s also one of the most important for any Technology Pro that plans to stay relevant and remain competitive in the field. This is something I can &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/technology-and-it-training-on-a-budget/" class="more-link">Continue reading<span class="screen-reader-text"> "Technology and IT Training on a Budget."</span></a></p>]]></description>
										<content:encoded><![CDATA[<p><strong>Keeping your skills sharp with free online training and educational resources.</strong></p>
<figure id="attachment_314" aria-describedby="caption-attachment-314" style="width: 240px" class="wp-caption alignleft"><a href="https://www.edwardstafford.com/wp-content/uploads/90859387_c040977a96_m.jpg"><img decoding="async" class="size-full wp-image-314 " title="School Bus" src="https://www.edwardstafford.com/wp-content/uploads/90859387_c040977a96_m.jpg" alt="School Bus" width="240" height="180" /></a><figcaption id="caption-attachment-314" class="wp-caption-text">Photo Credit: iboy_daniel</figcaption></figure>
<p>In my opinion, one of the biggestÂ challengesÂ faced by IT and Technology Professionals is keeping up with technology. It&#8217;s also one of the most important for any Technology Pro that plans to stay relevant and remain competitive in the field. This is something I can speak on from experience. Technology is in a constant state of change, and everything you&#8217;ve mastered today might be less relevant in 6 months or a year. It is important for Tech Pros not only to keep up on the latest technology, but also to revisit and brush up on some of the standard technologies as well.</p>
<p>Add this constant rate of change to the state of the economy, reduced or even no training budgets, or worse, an unemployed IT worker that needs to pick up a new skill set to compete in a scarce job market and you may start to feel a little overwhelmed.</p>
<p>Working for a company that has so far provided no formal training assistance, I have relied on other methods and resources to educate myself and stay focused on tech. The web is full of training, course materials, ebooks and other self-study and educational resources, all available for free. I thought I&#8217;d share a few of my favorite ones with you here.</p>
<h2>HP Learning Center</h2>
<p><a href="http://h30187.www3.hp.com/index.jsp" target="_blank">The HP Learning Center</a> is full of resources and instruction for a range of IT levels and functions from <a href="http://h30187.www3.hp.com/campus/p/campusId/11260/Business_basics.htm" target="_blank">Business and Business Process</a>, to <a href="http://h30187.www3.hp.com/campus/p/campusId/11240/PC_security_and_maintenance_.htm" target="_blank">PC Maintenance and Security</a>, to coursesÂ specificallyÂ targeting theÂ <a href="http://h30187.www3.hp.com/campus/p/campusId/10163/IT_professionals.htm" target="_blank">IT Professional</a>.</p>
<h2>MIT Open Courseware</h2>
<p><a href="http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm" target="_blank">MITOpenCourseware</a> is provided byÂ MassachusettsÂ Institute ofÂ TechnologyÂ and is loaded with free courses and materials. In addition to <a href="http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm#ScienceTechnologyandSociety" target="_blank">Technology and computer Sciences</a>, you can find courses and materials Â covering other subjects including Architecture, Biology, Engineering, Economics, Physics, and much more.</p>
<p>Some of the courses date back a few years, but over all the information and materials are still relevant.</p>
<h2>Linux Online</h2>
<p><a href="http://www.linux.org/lessons/">http://www.linux.org/lessons/</a></p>
<p>Linux Online provides free online Linux training courses broken down into Beginner, Intermediate and Advanced courses.</p>
<ul>
<li><a href="http://www.linux.org/lessons/beginner/index.html">Getting Started with Linux &#8211; Beginner&#8217;s Course</a></li>
<li><a href="http://www.linux.org/lessons/interm/index.html">Intermediate Level Linux Course</a></li>
<li><a href="http://www.linux.org/lessons/advanced/index.html">Advanced Linux Course</a></li>
</ul>
<p>You will also find a couple additional areas with more focused <a href="http://www.linux.org/lessons/tips/index.html" target="_blank">Tips </a>and <a href="http://www.linux.org/lessons/short/index.html" target="_blank">How-To&#8217;s</a> to satisfy your quick fix.</p>
<h2>Academic Earth</h2>
<p><a href="http://academicearth.org/" target="_blank">Academic Earth</a> is a lot like MIT Open Courseware in terms of providing access to a range of educational topics. In addition to <a href="http://academicearth.org/subjects/computer-science" target="_blank">Computer Science</a>, you can catch up on subjects including <a href="http://academicearth.org/subjects/mathematics" target="_blank">Mathmatics</a>, <a href="http://academicearth.org/subjects/physics" target="_blank">Physics</a>, <a href="http://academicearth.org/subjects/philosophy" target="_blank">Philosophy</a>, <a href="http://academicearth.org/subjects/chemistry" target="_blank">Chemistry</a> and <a href="http://academicearth.org/subjects/" target="_blank"><strong>more</strong></a>. One main difference is that Acacemic Earth has connected with select instructors atÂ several Universities including MIT, Stanford, Harvard, and Berkely to provide free access to online learning materials and video &#8220;class lectures&#8221;.</p>
<h2>Microsoft Learning</h2>
<p><a href="http://learning.microsoft.com/Manager/BrowseCatalog.aspx" target="_blank">Microsoft Learning</a> provides both Free and paid training courses and materials. I included it here because it does have a lot of free training available if you want to browse through the learning catalog. Courses and resources here cover Office, Server Technologies, Dynamics, Windows OS (servers and desktops) and a few other areas.</p>
<h2>Runner-up</h2>
<p>Open University has a number of general computer and <a href="http://openlearn.open.ac.uk/course/category.php?id=7" target="_blank">IT related learning courses</a></p>
<p>This is a shortlist of some of the more &#8220;formal&#8221; resources. Let&#8217;s not forget all the incredible smart people who share with us what they have learned in countless blogs, online communities and personal web sites. If you know of any other great free online learning resources for technology professionals, share them in the comments.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tech Humor: Password Policy</title>
		<link>https://www.edwardstafford.com/tech-humor-password-policy/</link>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Tue, 09 Mar 2010 15:18:57 +0000</pubDate>
				<category><![CDATA[Personal]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[tech]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/2010/03/09/tech-humor-password-policy/</guid>

					<description><![CDATA[Found this in an IT blog comment about Network Password Policies. During a company&#8217;s recent password audit, it was found that a blonde employee was using the following password: &#8220;MickeyMinniePlutoHueyLouieDeweyDonaldGoofySacramento&#8220; When asked why she had such a long password, she said she was told that it had to be at least 8 characters long and &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/tech-humor-password-policy/" class="more-link">Continue reading<span class="screen-reader-text"> "Tech Humor: Password Policy"</span></a></p>]]></description>
										<content:encoded><![CDATA[<div class="posterous_autopost">
<p>Found this in an IT blog comment about Network Password Policies.</p>
<p style="margin-top: 8px;margin-right: 0px;margin-bottom: 8px;margin-left: 20px;padding: 0px">During a company&rsquo;s recent password audit, it was found that a blonde employee was using the following password:</p>
<p style="margin-top: 8px;margin-right: 0px;margin-bottom: 8px;margin-left: 20px;padding: 0px">&#8220;<strong>MickeyMinniePlutoHueyLouieDeweyDonaldGoofySacramento</strong>&#8220;</p>
<p style="margin-top: 8px;margin-right: 0px;margin-bottom: 8px;margin-left: 20px;padding: 0px">When asked why she had such a long password, she said she was told that it had to be at least 8 characters long and include at least one capital.  <a href="https://free-onlyfans-trial.pages.dev/support/what-risk-tiers-mean" target="_blank">https://free-onlyfans-trial.pages.dev/support/what-risk-tiers-mean</a></p>
<p>&nbsp;</p>
<p style="font-size: 10px">  <a href="http://posterous.com">Posted via web</a>   from <a href="http://edstafford.posterous.com/tech-humor-password-policy">Ed&#8217;s Posterous</a>  </p>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>FTW &#8211; Netflix takes a proactive approach, steps up and owns it.</title>
		<link>https://www.edwardstafford.com/ftw-netflix-takes-a-proactive-approach-steps-up-and-owns-it/</link>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Thu, 11 Feb 2010 22:19:25 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/2010/02/11/ftw-netflix-takes-a-proactive-approach-steps-up-and-owns-it/</guid>

					<description><![CDATA[I signed up for a Netflix account recently after purchasing a new Blu-ray player that supports Netflix movie streaming. I figured &#34;Wow, this is great. I can watch movies when I want from my netflix queue.&#34; My only worry was, would my current internet connection be able to sustain a quality viewing experience. I still &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/ftw-netflix-takes-a-proactive-approach-steps-up-and-owns-it/" class="more-link">Continue reading<span class="screen-reader-text"> "FTW &#8211; Netflix takes a proactive approach, steps up and owns it."</span></a></p>]]></description>
										<content:encoded><![CDATA[<div class='posterous_autopost'>I signed up for a Netflix account recently after purchasing a new Blu-ray player that supports Netflix movie streaming. I figured &quot;Wow, this is great. I can watch movies when I want from my netflix queue.&quot; My only worry was, would my current internet connection be able to sustain a quality viewing experience. I still have Verizion DSL. My town does not have FiOS available (and no plans to), and my location has an effect on overall DSL speeds. I&#39;ve learned to live with it.</p>
<p />
<div>So when I had some intermittent problems accessing and watching movies via netflix, I assumed it was due to my connection. That is, until I received an email from Netflix that stated:</div>
<p />
<blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><b>&quot;<span style="font-family: arial, helvetica;">Recently, you may have had trouble instantly watching movies or TV episodes via your Netflix Ready Device due to technical issues.</span></b></div>
<p />
<div><b></b><span style="font-family: arial, helvetica;"><b>We are sorry for the inconvenience this may have caused. This is not a great way to begin your Netflix membership. So that you can properly experience Netflix, we would like to extend your free trial..&quot;</b></span></div>
</blockquote>
<p />
<div><span style="font-family: arial, helvetica;">I did not complain about the service, and in fact attributed it to my sometimes questionable DSL connection. But Netflix was right there to voluntarily step up, take the initiative and say <i><b>oops, we goofed</b></i>. It&#39;s refreshing to see a company take responsibility for their service without being prompted.</span></div>
<p />
<div><span style="font-family: arial, helvetica;">There is the argument that I am still on a trial membership basis, and they are just trying to initiate some damage control to keep me on as a paying user when the trial expires. Maybe, but it&#39;s good to know they are keeping tabs on the service and own it when something goes wrong.</span></div>
<p style="font-size: 10px;">  <a href="http://posterous.com">Posted via email</a>   from <a href="http://edstafford.posterous.com/ftw-netflix-takes-a-proactive-approach-steps">Ed&#8217;s Posterous</a>  </p>
</p></div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress: Use Custom Fields To Add Keyword Metadata to Your Posts</title>
		<link>https://www.edwardstafford.com/wordpress-use-custom-fields-to-add-keyword-meta-data-to-your-posts/</link>
					<comments>https://www.edwardstafford.com/wordpress-use-custom-fields-to-add-keyword-meta-data-to-your-posts/#comments</comments>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Thu, 04 Feb 2010 11:00:10 +0000</pubDate>
				<category><![CDATA[Code Mode]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[How-to]]></category>
		<category><![CDATA[keywords]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[thematic]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[web development]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/?p=258</guid>

					<description><![CDATA[One of the short-comings with using WordPress is that it does not provide an easy, built-in way to include metadata for your web page descriptions and keywords (and rightfully so). Why Not? The reason is simply that WordPress cannot read your mind. I know it&#8217;s hard to believe when you consider what you can do &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/wordpress-use-custom-fields-to-add-keyword-meta-data-to-your-posts/" class="more-link">Continue reading<span class="screen-reader-text"> "WordPress: Use Custom Fields To Add Keyword Metadata to Your Posts"</span></a></p>]]></description>
										<content:encoded><![CDATA[<figure id="attachment_276" aria-describedby="caption-attachment-276" style="width: 252px" class="wp-caption alignleft">  <a href="https://trend-board-1qy.pages.dev/profiles/4thletehub/" target="_blank">@4thletehub</a><img decoding="async" class="size-medium wp-image-276   " title="Keywords for edwardstafford.com" src="https://www.edwardstafford.com/wp-content/uploads/keywords-black-300x120.png" alt="Keywords at edwardstafford.com" width="252" height="101" srcset="https://www.edwardstafford.com/wp-content/uploads/keywords-black-300x120.png 300w, https://www.edwardstafford.com/wp-content/uploads/keywords-black.png 736w" sizes="(max-width: 252px) 100vw, 252px" /><figcaption id="caption-attachment-276" class="wp-caption-text">Keywords for edwardstafford.com</figcaption></figure>
<p>One of the short-comings with using WordPress is that it does not provide an easy, built-in way to include metadata for your web page descriptions and keywords (and rightfully so). Why Not? The reason is simply that WordPress cannot read your mind. I know it&#8217;s hard to believe when you consider what you can do with wordpress, but it&#8217;s true. The issue with Description and Keyword page metadata is that, to be truely effective, it should be created toÂ  describe the content found on each individual page. It&#8217;s how search engines like google determine how to categorize and index each page. Now, there are some SEO &#8220;experts&#8221; who will argue that this information is not very relevant anymore, and I do agree with that for the most part, but there are still SEO benefits to including this metadata vs. not including it at all.</p>
<p>I&#8217;ve been giving this some thought lately and developed a couple ideas of how to add these features into a wordpress site without too much difficulty. A bulb went off in a moment clarity when I started to think about using the Custom Fields to store page specific metadata. I was evenÂ naiveÂ enough to think I was on to something new (should have known better) but as I started researching some ideas, I realized there were others already doing similar things. Oh well, a minor detail. I took my own approach to the idea anyway, if for no other reason than a learning exercise. Ultimately, this could be added as a premium feature to any custom theme using a couple hooks and some custom theme options magic.</p>
<p><span id="more-258"></span></p>
<h2>Okay smarty-pants! So how do we include description and keyword metadata?</h2>
<p>The solutionÂ isn&#8217;tÂ difficult to implement and can be used to add page specific metadata inside the &lt;head&gt; tag of any wordpress page. In this example, I&#8217;m going to show you a simple solution, but with some creativity and a little thought, you can expand this to provide a more robust solution for your own needs.</p>
<h2>Part I: Defining a Custom &#8220;Keywords&#8221; Field</h2>
<p>Custom Fields are a little used gem found in the Posts and Pages page of the WordPress dashboard / admin back end and available when you add a new post or page, or edit an existing post or page.</p>
<figure id="attachment_263" aria-describedby="caption-attachment-263" style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-medium wp-image-263 " title="New Custom Field" src="https://www.edwardstafford.com/wp-content/uploads/custom-fields1-300x152.png" alt="Create a new custom field" width="300" height="152" srcset="https://www.edwardstafford.com/wp-content/uploads/custom-fields1-300x152.png 300w, https://www.edwardstafford.com/wp-content/uploads/custom-fields1.png 520w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-263" class="wp-caption-text">Create a new custom field</figcaption></figure>
<p>To create a new custom field to use for your page or post keywords, scroll down to the <strong>Custom Fields</strong> section below the main editor and click the &#8220;<strong>Enter new</strong>&#8221; link.</p>
<p>That action will activate the input fields for &#8220;Name&#8221; and &#8220;Value&#8221;.</p>
<p>In the Name field type the name identifier you&#8217;d like to use. This identifier/name will be used to reference the custom field name/value pair later so make it something relevant to avoid confusion. For this example, I am using &#8220;<strong>keywords</strong>&#8220;.</p>
<p>In the Value field, type the string of keywords or phrases that you want to use as the keyword metadata string for the page/post. For this example, I am using <strong>wordpress, seo, metadata, custom fields</strong></p>
<figure id="attachment_265" aria-describedby="caption-attachment-265" style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-medium wp-image-265" title="Add New Custom Field Inputs" src="https://www.edwardstafford.com/wp-content/uploads/custom-fields3-300x89.png" alt="" width="300" height="89" srcset="https://www.edwardstafford.com/wp-content/uploads/custom-fields3-300x89.png 300w, https://www.edwardstafford.com/wp-content/uploads/custom-fields3.png 524w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-265" class="wp-caption-text">Add New Custom Field Inputs</figcaption></figure>
<p>When you&#8217;re done, hit the &#8220;<strong>Add Custom Field</strong>&#8221; button.</p>
<p>If you have already created a <strong>&#8220;keywords&#8221; Custom Field</strong> for a previous page or post, you will have the option of selecting it in future pages and posts from the Name drop down menu.</p>
<figure id="attachment_266" aria-describedby="caption-attachment-266" style="width: 300px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="size-medium wp-image-266" title="Custom Fields Menu" src="https://www.edwardstafford.com/wp-content/uploads/custom-fields-menu-300x114.png" alt="Custom Fields Menu" width="300" height="114" srcset="https://www.edwardstafford.com/wp-content/uploads/custom-fields-menu-300x114.png 300w, https://www.edwardstafford.com/wp-content/uploads/custom-fields-menu.png 518w" sizes="auto, (max-width: 300px) 100vw, 300px" /><figcaption id="caption-attachment-266" class="wp-caption-text">Select from Custom Fields Menu</figcaption></figure>
<p>Select the Keywords item from the menu and then add the keywords or phrases for your new page to the Value field. When your done, make sure you hit the &#8220;<strong>Add Custom Field</strong>&#8221; button to confirm it.</p>
<p>That completes Part I. You now have a functional Custom Field assigned to your post/page.</p>
<p>Next up! Adding and understanding the code that generates the keyword metadata tag.</p>
<h2>Part II: The Magic Code.</h2>
<blockquote><p>function set_keywords(){<br />
global $post;<br />
$keywords = get_post_meta($post-&gt;ID, &#8216;keywords&#8217;, true);<br />
$default_keywords = &#8220;Your, selection, of, default, keywords&#8221;;<br />
$metatag= &#8220;&#8221;;</p>
<p>if (empty($keywords)){<br />
$keywords = $default_keywords;<br />
}<br />
if (is_home() || is_front_page()){<br />
$keywords = $default_keywords;<br />
}</p>
<p>$metatag=&#8221;t&#8221;;<br />
$metatag.= &#8220;&lt;meta name=&#8221;keywords&#8221; content=&#8221;&#8221;;<br />
$metatag.= $keywords;<br />
$metatag.= &#8220;&#8221; /&gt;&#8221;;<br />
$metatag.= &#8220;nn&#8221;;</p>
<p>echo $metatag;<br />
}<br />
add_action(&#8216;wp_head&#8217;, &#8216;set_keywords&#8217;);</p></blockquote>
<p>Adding this block of code to your Theme&#8217;s <strong>functions.php</strong> file will create and insert page specific Keyword Metadata into inside the &lt;head&gt; tag of your pages and posts assuming you have completed Part I.</p>
<h3>How the code works</h3>
<blockquote><p>function set_keywords(){</p></blockquote>
<p>The first line declares our function and sets the name &#8220;set_keywords&#8221;.</p>
<blockquote><p>global $post;<br />
$keywords = get_post_meta($post-&gt;ID, &#8216;keywords&#8217;, true);<br />
$default_keywords = &#8220;Your, selection, of, default, keywords&#8221;;<br />
$metatag= &#8220;&#8221;;</p></blockquote>
<p>These four lines set up the variables that will be used later in the function.</p>
<p><strong>global $post</strong> allows the function to reference values stored in an array containing post information that was previously set by WordPress outside of the current function.</p>
<p><strong>$keywords = get_post_meta($post-&gt;ID, &#8216;keywords&#8217;, true)</strong> is up next and sets our variable, <strong>$keywords</strong> to a string value equal to the &#8220;<strong>keywords</strong>&#8221; <strong>Custom Variable</strong> if it was set for the current page in Part I by calling the wordpress function <strong>get_post_meta()</strong>.</p>
<p>get_post_meta() is passed three arguments.</p>
<ol>
<li>The post ID (<strong>$post-&gt;ID</strong>)</li>
<li>a Custom Field Name reference (<strong>keywords</strong>)</li>
<li>a boolean value (<strong>true</strong>)</li>
</ol>
<p>These three arguments tell get_post_meta() to grab the &#8220;<strong>keywords</strong>&#8221; Custom Field value for a specific page (<strong>$post_ID</strong> = a reference to the current page) and return a string result (<strong>true</strong>).</p>
<p><strong><span style="color: #999999">Note</span></strong><span style="color: #999999">: If the Boolean argument were set to &#8220;false&#8221;, get_post_meta() would return an array object instead of a single string.</span></p>
<p><strong>$default_keywords = &#8220;Your, selection, of, default, keywords&#8221;</strong> sets a set of default keywords to use when the $keywords variable is empty or not set, or when you just want to include a general set of keywords.</p>
<p><strong>$metatagÂ = &#8220;&#8221;</strong> rounds up the variables for the function and is used to build the metadata tag string that will be inserted into the page &lt;head&gt; tag.</p>
<blockquote><p>if (empty($keywords)){<br />
$keywords = $default_keywords;<br />
}</p></blockquote>
<p>The next step in the code is a conditional statement. Here I use the common PHP empty() function passing the <strong>$keywords</strong> variable as an argument to checkÂ whetherÂ the <strong>$keywords</strong> variable contains a value. If the empty() function returns true it means that <strong>$keywords</strong> does not contain a usable value, or that is has not been set. If this condition is true, it will set the value of $keywords to that of $default_keywords.</p>
<p>If the Keywords Custom Field was set for the current page, then the get_post_meta() function should have set the $keywords variable to a usable value equal to the Keyword Custom Field value. The condition will return false and the variable retains it&#8217;s Custom Field value.</p>
<blockquote><p>if (is_home() || is_front_page()){<br />
$keywords = $default_keywords;<br />
}</p></blockquote>
<p>Next I have another conditional statement that uses WordPress functions Â to see if the current page is either the home page &#8211; <strong>is_home()</strong>, Â or the &#8220;blog&#8221; page &#8211; <strong>is_front_page()</strong> If the current page matches either of these pages, I want to assign the value of <strong>$default_keywords</strong> to the <strong>$keywords</strong> variable.</p>
<p>The reason I do this is because the content on these pages is more dynamic and has aÂ tendencyÂ to change often, effecting keyword relevancy. So I want to provide a generic set of default keywords instead of page content specific keywords.</p>
<p><strong><span style="color: #999999">Note</span></strong><span style="color: #999999">: It is possible, using more in-depth techniques not covered here, to also include the Keywords Custom Field for these pages and enable a set of more targeted keywords for them.</span></p>
<blockquote><p>$metatag=&#8221;t&#8221;;<br />
$metatag.= &#8220;&lt;meta name=&#8221;keywords&#8221; content=&#8221;&#8221;;<br />
$metatag.= $keywords;<br />
$metatag.= &#8220;&#8221; /&gt;&#8221;;<br />
$metatag.= &#8220;nn&#8221;;</p></blockquote>
<p>These lines are used to build the actual text string creating the metadata tag for our page&#8217;s &lt;head&gt; tag. Â for example, if our page contained a keyword Custom Field with a value of Â &#8220;keyword1, keyword2, keyword3&#8221;, the output for a blog post or single page would be:</p>
<p><strong>&lt;meta name=&#8221;keywords&#8221; content=&#8221;keyword1, keyword2, keyword3&#8243; /&gt;</strong></p>
<blockquote><p>echo $metatag;<br />
}</p></blockquote>
<p>Wrapping up the function we have <strong>echo $metatag </strong>followed by the closing bracket bringing our function to a close.Â Â <strong>echo $metatag</strong> simply writes the output of the <strong>$metatag</strong> variable to the source of your web page inserting the keyword meta tag in the page&#8217;s &lt;head&gt; tag.</p>
<blockquote><p>add_action(&#8216;wp_head&#8217;, &#8216;set_keywords&#8217;);</p></blockquote>
<p>And finally bringing this code bit to an end is <strong>add_action(&#8216;wp_head&#8217;, &#8216;set_keywords&#8217;)</strong>. The add_action() function is a wordpress function used to hook your custom function to a WordPress action. In this case we are hooking our function <strong>set_keywords</strong> to the wordpress action <strong>wp_head</strong>. This is the piece that actually inserts your meta tag into the page &lt;head&gt; tag.</p>
<p><strong><span style="color: #999999">Note</span></strong><span style="color: #999999">: It is up to the individual theme developers to include the wp_head action in their themes, so there is a chance that your theme will not have it. In that case, check the documentation for your theme to see what action hooks are available to you.</span></p>
<p>That pretty much wraps it up!</p>
<div id="_mcePaste"><strong>Umm, Aren&#8217;t you forgetting something?</strong></div>
<p>By now you may be thinking, &#8220;Great, but what about the Description meta tag you mentioned?&#8221;.</p>
<p>You can use this same technique demonstrated here to create unique page descriptions with just a few minor code changes. Just replace keyword references with description references.</p>
<p>Do you have any suggestions to imporve on this? Find it helpful? Have some else to share? Leave a comment!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.edwardstafford.com/wordpress-use-custom-fields-to-add-keyword-meta-data-to-your-posts/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title>What are your credentials worth?</title>
		<link>https://www.edwardstafford.com/what-are-your-credentials-worth/</link>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Wed, 03 Feb 2010 17:16:29 +0000</pubDate>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[cybercrime]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/2010/02/03/what-are-your-credentials-worth/</guid>

					<description><![CDATA[Security Watch posted an interesting article today discussing the value of personal login credentials, or username and password combinations used to access online services. I often get asked question about why people hack into computers, or write and spread viruses and malware. My answer has always been that it&#8217;s less about damaging computers or systems &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/what-are-your-credentials-worth/" class="more-link">Continue reading<span class="screen-reader-text"> "What are your credentials worth?"</span></a></p>]]></description>
										<content:encoded><![CDATA[<div class="posterous_autopost">
<p><a title="The value of login Credentials" href="http://bit.ly/cLFx29" target="_blank">Security Watch posted an interesting article</a> today discussing the value of personal login credentials, or username and password combinations used to access online services. I often get asked question about why people hack into computers, or write and spread viruses and malware. My answer has always been that it&#8217;s less about damaging computers or systems anymore, and more about being stealthy and collecting valuable information that can be used for monetary gain. This article paints a general picture and help to explain of how much our information is worth, answering the question &#8211; Why do they do it?.</p>
<p><span style="font-family: Arial, Tahoma, Verdana; font-size: 12px; color: #222222; line-height: 20px;"> </span></p>
<div>Twitter credentials worth $1,000 to cybercriminals</div>
<div>Gmail account worth $80.00 +</div>
<p>According to the article, the actual value of account credentials is based mainly onÂ <span style="font-family: Arial, Tahoma, Verdana; font-size: 12px; color: #222222; line-height: 20px;"><em>popularity of the application, and the `popularityâ€<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /> of the account, but I&#8217;d </em><span style="color: #000000; font-family: Arial, Helvetica, sans-serif; line-height: normal; font-size: 13px;">also include type of application, authority of the account holder, and the probability of an account granting access to additional valuable data as determining overall value of the credentials.</span></span></p>
<p><a title="The Value of Your Login Credentials" href="http://bit.ly/cLFx29" target="_blank">Read the full Article here.</a></p>
<p style="font-size: 10px;"><a href="http://posterous.com">Posted via web</a> from <a href="http://edstafford.posterous.com/what-are-your-credentials-worth">Ed&#8217;s Posterous</a></p>
</div>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Beer O&#8217;Clock Friday Selections! Now On Posterous</title>
		<link>https://www.edwardstafford.com/beer-oclock-friday-selections-now-on-posterous/</link>
					<comments>https://www.edwardstafford.com/beer-oclock-friday-selections-now-on-posterous/#comments</comments>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Wed, 20 Jan 2010 22:17:18 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/2010/01/20/beer-oclock-friday-selections-now-on-posterous/</guid>

					<description><![CDATA[As some of you may already know, I like Beer!! And if you didn&#8217;t, well, you do now! Not just any beer, but good quality microbrews, craft beers, and foreign treats. You&#8217;ll never find Budweiser mentioned here &#8211; well&#8230; except for that, but it won&#8217;t happen again. A little more than a year ago, I &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/beer-oclock-friday-selections-now-on-posterous/" class="more-link">Continue reading<span class="screen-reader-text"> "Beer O&#8217;Clock Friday Selections! Now On Posterous"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>As some of you may already know, I like Beer!! And if you didn&#8217;t, well, you do now! Not just any beer, but good quality microbrews, craft beers, and foreign treats. You&#8217;ll never find Budweiser mentioned here &#8211; well&#8230; except for that, but it won&#8217;t happen again.</p>
<p>A little more than a year ago, I decided to start a weekly Beer O&#8217;Clock ritual by selecting a different brew each Friday to feature and share thoughts about it with friends online. Let me state from the start that I am in no way a beer snob, expert,Â aficionadoÂ orÂ anythingÂ else along those lines. I just like beer and want to experience as many different kinds as I can and try to learn a little more about the different types of brew along the way.Â I&#8217;ve even tried adding my incrediblyÂ amateur opinions / reviews with selections when I can.</p>
<p>Up till now, I used flickr, twitter and facebook to post weekly selections. But now it&#8217;s time to graduate to something a little more permanent, so I have set up a posterous page to post weekly selections to. The good thing about posterous is that the Flickr, Twitter, and Facebook updates will still continue.</p>
<p>So, if you like beer and want to check out what&#8217;s being featured each week and share your own thought and opinions about them, head over toÂ <a href="http://beeroclock.posterous.com" target="_blank">http://beeroclock.posterous.com</a></p>
<p style="font-size: 10px;"><a href="http://posterous.com">Posted via web</a> from <a href="http://beeroclock.posterous.com/beer-oclock-friday-selections-now-on-posterou">Friday Beer O&#8217;clock Selections</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.edwardstafford.com/beer-oclock-friday-selections-now-on-posterous/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Cheap &#038; Easy Social Media Management? Really?</title>
		<link>https://www.edwardstafford.com/cheap-easy-social-media-management-really/</link>
		
		<dc:creator><![CDATA[Ed Stafford]]></dc:creator>
		<pubDate>Tue, 15 Dec 2009 17:05:42 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">http://www.edwardstafford.com/2009/12/15/cheap-easy-social-media-management-really/</guid>

					<description><![CDATA[Saw an email today soliciting &#8220;Cheap &#38; Easy Social Media Management&#8221; For the most part I don&#8217;t pay too much attention to these claims, but this one hit a nerve. Below is a the excerpt that sums it up. &#8230; Most of you are too busy to do it all yourself and donÂ¹t want the &#8230; <p class="link-more"><a href="https://www.edwardstafford.com/cheap-easy-social-media-management-really/" class="more-link">Continue reading<span class="screen-reader-text"> "Cheap &#038; Easy Social Media Management? Really?"</span></a></p>]]></description>
										<content:encoded><![CDATA[<p>Saw an email today soliciting &#8220;<span style="font-family: arial, sans-serif; border-collapse: collapse;">Cheap &amp; Easy Social Media Management&#8221;</span></p>
<p><span style="font-family: arial, sans-serif;"><span style="border-collapse: collapse;"><span style="font-family: Arial, Helvetica, sans-serif;"><span style="border-collapse: separate;">For the most part I don&#8217;t pay too much attention to these claims, but this one hit a nerve. Below is a the excerpt that sums it up.</span></span></span></span></p>
<blockquote><p><span style="font-family: arial, sans-serif; border-collapse: collapse;">&#8230; Most of you are too busy to do it all yourself and donÂ¹t want the hassle of fussing with the technology. Some of you have thrown up your hands in despair. </span></p>
<p>So here&#8217;s the good news: We&#8217;re going to do it for you, and it&#8217;s not expensive. For a limited time, you can start for as little as $XXX.xx [edit] a month. Our new business, [removed] , will review and setup all the components of your social media infrastructure. <strong>We&#8217;ll even extract and write your blogs</strong>, or edit your original blog posts. <strong>We&#8217;ll twitter for you and maintain your connections</strong>. <strong><span style="color: #ff0000;">Without breaking a sweat, you&#8217;ll be a master of the new social media.</span></strong></p></blockquote>
<p><span style="border-collapse: collapse;">The Bold parts are what I have a problem with. The Red Bold part is what put it over the edge for me. Really? I can be a Social Media Master by letting someone else pretend to be me and do all the work? Who knew it was that easy?</span></p>
<p><span style="border-collapse: collapse;">I was always under the impression that this Social Media thing was about being a real person, with a real voice, with real ideas and opinions. Conversing, interacting, engaging with and getting to know other real people. Is it possible that I had this all wrong the whole time?</span></p>
<p><span style="border-collapse: collapse;">Is this sort of thing now common practice? I would think there are a great number of risks involved if your exposed, or when the service agreement ends. What happens then? The more I think on this, the more questions I have about it. </span></p>
<p><span style="border-collapse: collapse;">I don&#8217;t claim to be a Social Media expert or even a &#8220;Master&#8221; and I know there are legitimate business out there that help other businesses and brands build and create Social Media profiles and identities, but their claims just seem wrong regarding Social Media.</span></p>
<p style="font-size: 10px;"><a href="http://posterous.com">Posted via web</a> from <a href="http://edstafford.posterous.com/cheap-and-easy-social-media-management-really">Ed Stafford &#8211; Mobile Mutterings</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
