<?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>HTMLCenter Web Development Blog &#187; General Tutorials</title>
	<atom:link href="http://www.htmlcenter.com/blog/category/general-web-tutorials/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.htmlcenter.com</link>
	<description>Web Development Help and Tutorials</description>
	<lastBuildDate>Sat, 11 Feb 2012 02:57:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Adding an ICS Event File to Google Calendar</title>
		<link>http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/</link>
		<comments>http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 21:53:04 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[google calendar]]></category>
		<category><![CDATA[ical]]></category>
		<category><![CDATA[icalendar]]></category>
		<category><![CDATA[ics]]></category>
		<category><![CDATA[outlook]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=2205</guid>
		<description><![CDATA[If you register for webinars, conferences, meetings, etc. on a somewhat regular basis, you are probably familiar with ICS files. An ICS file is an iCalendar file; and can contain a single event or an entire calendar feed. Online registrations and event notices tend to make use of these files quite a bit, because they [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/ical-files-for-single-google-calendar-events/' rel='bookmark' title='iCal Files for Single Google Calendar Events'>iCal Files for Single Google Calendar Events</a></li>
<li><a href='http://www.htmlcenter.com/blog/gmails-add-to-calendar/' rel='bookmark' title='Gmail&#8217;s &#8220;Add to Calendar&#8221;'>Gmail&#8217;s &#8220;Add to Calendar&#8221;</a></li>
<li><a href='http://www.htmlcenter.com/blog/beyond-compare-a-nice-file-comparison-utility/' rel='bookmark' title='Beyond Compare &#8211; A Nice File Comparison Utility'>Beyond Compare &#8211; A Nice File Comparison Utility</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>If you register for webinars, conferences, meetings, etc. on a somewhat regular basis, you are probably familiar with ICS files. An ICS file is <a href="http://en.wikipedia.org/wiki/ICalendar">an iCalendar file</a>; and can contain a single event or an entire calendar feed. Online registrations and event notices tend to make use of these files quite a bit, because they offer a one-click method for people to add the events to their calendars.</p>
<p>If you&#8217;re using Outlook, Thunderbird, iCal or just about any other desktop calendar program, you simply download the file, open it and save the event to your calendar.</p>
<p>However, if you&#8217;re using Google Calendar, things get a little bit trickier. There&#8217;s no simple way to open the file and have Google Calendar take over from there. Instead, you basically have to understand how Google Calendar expects ICS files to be used (why the system uses this logic is kind of beyond me; but that&#8217;s the way things are). Google Calendar, for some reason, does not seem to expect people to use ICS files to add individual events regularly. Instead, it uses the logic that an ICS file should include a calendar &#8220;feed&#8221;, similar to a website&#8217;s RSS feed, that would contain a complete list of events.<span id="more-2205"></span></p>
<p>Therefore, if you want to add an event to your Google Calendar using the ICS file that was provided by the event&#8217;s organizer, you have to treat it, in your mind, as a separate calendar rather than an individual event.</p>
<ol>
<li>To start, you need to go to your &#8220;Calendar Settings&#8221; in your Google Calendar.</li>
<li>On that screen, you need to click &#8220;Import calendar&#8221;. Yes, I&#8217;m aware that you&#8217;re trying to add an individual event, not an entire calendar, but this is the language Google chose to use for this feature.</li>
<li>Browse to find the ICS file you want to add to your calendar and click &#8220;Import&#8221;</li>
</ol>

<a href='http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/google-ical-01/' title='google-ical-01'><img width="150" height="150" src="http://www.htmlcenter.com/wp-content/uploads/2011/08/google-ical-01-150x150.png" class="attachment-thumbnail" alt="Step 1" title="google-ical-01" /></a>
<a href='http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/google-ical-02/' title='google-ical-02'><img width="150" height="150" src="http://www.htmlcenter.com/wp-content/uploads/2011/08/google-ical-02-150x150.png" class="attachment-thumbnail" alt="Step 2" title="google-ical-02" /></a>
<a href='http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/google-ical-03/' title='google-ical-03'><img width="150" height="150" src="http://www.htmlcenter.com/wp-content/uploads/2011/08/google-ical-03-150x150.png" class="attachment-thumbnail" alt="Step 3" title="google-ical-03" /></a>

<p>That&#8217;s all there is to it. Once you&#8217;ve done that, the event will show up on your calendar.</p>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/ical-files-for-single-google-calendar-events/' rel='bookmark' title='iCal Files for Single Google Calendar Events'>iCal Files for Single Google Calendar Events</a></li>
<li><a href='http://www.htmlcenter.com/blog/gmails-add-to-calendar/' rel='bookmark' title='Gmail&#8217;s &#8220;Add to Calendar&#8221;'>Gmail&#8217;s &#8220;Add to Calendar&#8221;</a></li>
<li><a href='http://www.htmlcenter.com/blog/beyond-compare-a-nice-file-comparison-utility/' rel='bookmark' title='Beyond Compare &#8211; A Nice File Comparison Utility'>Beyond Compare &#8211; A Nice File Comparison Utility</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gmail&#8217;s &#8220;Add to Calendar&#8221;</title>
		<link>http://www.htmlcenter.com/blog/gmails-add-to-calendar/</link>
		<comments>http://www.htmlcenter.com/blog/gmails-add-to-calendar/#comments</comments>
		<pubDate>Thu, 25 Aug 2011 18:43:51 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[google calendar]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=2197</guid>
		<description><![CDATA[A while back, Google unveiled a new feature in Gmail that automatically scans the message currently being viewed, checks for a date and time in the message body, and, if found, adds a link allowing you to add the item directly to your Google Calendar (as shown in the image on the right). Lately, I&#8217;ve [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/' rel='bookmark' title='Adding an ICS Event File to Google Calendar'>Adding an ICS Event File to Google Calendar</a></li>
<li><a href='http://www.htmlcenter.com/blog/ical-files-for-single-google-calendar-events/' rel='bookmark' title='iCal Files for Single Google Calendar Events'>iCal Files for Single Google Calendar Events</a></li>
<li><a href='http://www.htmlcenter.com/blog/google-hosted-apps-and-sending-mail-from-a-web-server/' rel='bookmark' title='Google Hosted Apps and Sending Mail From a Web Server'>Google Hosted Apps and Sending Mail From a Web Server</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-2198" style="float: right; margin: 0 0 1em 1em; border: none;" title="Gmail Add to calendar" src="http://www.htmlcenter.com/wp-content/uploads/2011/08/add-to-calendar.png" alt="" width="245" height="127" />A while back, Google unveiled a new feature in Gmail that automatically scans the message currently being viewed, checks for a date and time in the message body, and, if found, adds a link allowing you to <a href="http://www.google.com/support/calendar/bin/answer.py?hl=en&amp;answer=47802">add the item directly to your Google Calendar</a> (as shown in the image on the right). Lately, I&#8217;ve noticed that that algorithm has improved greatly. I used to see the &#8220;Add to calendar&#8221; feature only appear in very rare cases, but I am now seeing it almost every time I am viewing a message that I want to add to my calendar.<span id="more-2197"></span></p>
<p>When you click the &#8220;add&#8221; link, your Google calendar opens in a separate window. The &#8220;New event&#8221; screen is pre-populated with a title that generally consists of some text that was found before the date/time. The date and the time are also completed. I think Google uses the default duration that you have set in your calendar &#8211; I haven&#8217;t yet seen one where an duration was explicitly included in the email message, so I don&#8217;t know if Google picks up on that or not. The description of the event is normally populated with the full text of the email message (in plain text, though, so any tables or images that were included in the message are lost).</p>
<p>There is currently a minor issue with this new feature, though. If you use Google&#8217;s multiple sign-on feature to stay signed into multiple accounts, the &#8220;add&#8221; link always leads to your default (the first) Google account&#8217;s calendar. So, if you&#8217;re viewing the Gmail for an account other than the first one you signed into, you&#8217;re going to either see the calendar for that first account or, in my case, see a message asking you to sign up for Google Calendar.</p>
<p>The fix is simple, however. Instead of clicking on the link, right-click on it and copy it. Then, open a new tab and paste the link in. Go back to your mail and look for a &#8220;<code>/u/</code>&#8221; followed by another number. For instance, the link to your current mail account might be something like: <code>https://mail.google.com/mail/u/1/?shva=1#inbox</code>. Then, go back to the tab into which you pasted the calendar link, and add &#8220;<code>/b/</code>&#8221; followed by that number into the address immediately after the word calendar in the link.</p>
<p>For instance, if the Calendar link starts off something like: <code>http://www.google.com/calendar/event?action=TEMPLATE</code>, and your mail link is the same as I showed above, you would add &#8220;<code>/b/1</code>&#8221; to the calendar link so that it starts with <code>http://www.google.com/calendar/b/1/event?action=TEMPLATE</code> instead.</p>
<p><img class="alignnone size-medium wp-image-2199" style="float: right; margin: 0 0 1em 1em; border: none;" title="google-event-add" src="http://www.htmlcenter.com/wp-content/uploads/2011/08/google-event-add-300x155.png" alt="" width="300" height="155" />Once you&#8217;ve modified the URL, hit Enter to load the page, and you should see the page you need to add the item to the appropriate calendar.</p>
<p>One other fix I would like to see would be for Google to add a link to the &#8220;related email&#8221; somewhere in the event information (the way it does with Tasks). Other than those, though, this feature has proven to be extremely handy when adding meetings to my calendars.</p>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/' rel='bookmark' title='Adding an ICS Event File to Google Calendar'>Adding an ICS Event File to Google Calendar</a></li>
<li><a href='http://www.htmlcenter.com/blog/ical-files-for-single-google-calendar-events/' rel='bookmark' title='iCal Files for Single Google Calendar Events'>iCal Files for Single Google Calendar Events</a></li>
<li><a href='http://www.htmlcenter.com/blog/google-hosted-apps-and-sending-mail-from-a-web-server/' rel='bookmark' title='Google Hosted Apps and Sending Mail From a Web Server'>Google Hosted Apps and Sending Mail From a Web Server</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/gmails-add-to-calendar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Securing Filezilla</title>
		<link>http://www.htmlcenter.com/blog/securing-filezilla/</link>
		<comments>http://www.htmlcenter.com/blog/securing-filezilla/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 02:34:52 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[filezilla]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[passwords]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[truecrypt]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=2135</guid>
		<description><![CDATA[As you may or may not know, Filezilla, the extremely popular FTP client, stores all of your FTP passwords in plain text on your hard drive. While I strongly disagree with this practice, I also understand that there are reasons not to do so. It would be really nice to have some sort of option [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/truecrypt-the-best-disk-encryption-utility/' rel='bookmark' title='TrueCrypt &#8212; The Best Disk Encryption Utility'>TrueCrypt &#8212; The Best Disk Encryption Utility</a></li>
<li><a href='http://www.htmlcenter.com/blog/filezilla/' rel='bookmark' title='Filezilla'>Filezilla</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://filezilla-project.org/"><img class="alignnone size-thumbnail wp-image-2144" style="float: right; margin: 0 0 1em 1em; border: none;" title="Filezilla Logo - 380x380" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/380px-FileZilla_logo.svg_-150x150.png" alt="" width="150" height="150" /></a>As you may or may not know, <a href="http://filezilla-project.org/">Filezilla</a>, the extremely popular FTP client, stores all of your FTP passwords in plain text on your hard drive. While I strongly disagree with this practice, I also understand that there are reasons not to do so. It would be really nice to have some sort of option to encrypt the passwords, but I don&#8217;t see that happening any time in the near future.</p>
<p>There are actually multiple levels of danger in using Filezilla (and, presumably, many other FTP clients). Unlike a Web browser, where, if you choose not to use the password manager none of your passwords are stored; Filezilla still stores all of the details from your most recent connection in a file called filezilla.xml and all of the details from your 10 most recent connections (at least, the ones you make by typing the information into the Filezilla interface; which is the only way to connect if you are not using the Site Manager) in a file called recentservers.xml, even if you choose not to use the Site Manager. These are plain old XML files with all of the information stored in plain, non-encrypted text. The format of the entries looks similar to the following.<span id="more-2135"></span></p>
<pre><code>&lt;Server&gt;
	&lt;Host&gt;example.com&lt;/Host&gt;
	&lt;Port&gt;22&lt;/Port&gt;
	&lt;Protocol&gt;1&lt;/Protocol&gt;
	&lt;Type&gt;0&lt;/Type&gt;
	&lt;User&gt;username&lt;/User&gt;
	&lt;Pass&gt;password&lt;/Pass&gt;
	&lt;Logontype&gt;1&lt;/Logontype&gt;
	&lt;TimezoneOffset&gt;0&lt;/TimezoneOffset&gt;
	&lt;PasvMode&gt;MODE_DEFAULT&lt;/PasvMode&gt;
	&lt;MaximumMultipleConnections&gt;0&lt;/MaximumMultipleConnections&gt;
	&lt;EncodingType&gt;Auto&lt;/EncodingType&gt;
	&lt;BypassProxy&gt;0&lt;/BypassProxy&gt;
&lt;/Server&gt;</code></pre>
<p>As you can imagine, this poses a serious potential security risk.</p>
<h2>What&#8217;s The Solution?</h2>
<p>Unfortunately, there isn&#8217;t really an ideal solution. I would imagine that any FTP program is going to be vulnerable to various security holes no matter what; and the more convenient the program is to use, the more potential holes there will be.</p>
<p>However, there are two potential methods you can use to try to make things a little more secure.</p>
<p>The first is described in <a href="http://sww.co.nz/an-alternative-to-storing-passwords-in-filezilla-or-other-ftp-clients/">a post from Stellar Web Works</a>, in which Aidan Curran explains how to use a password management program to store your information, and send it to Filezilla automatically. The important part of this process is to throw Filezilla into &#8220;kiosk mode&#8221;, which stops it from storing any of the information from your recent connections.</p>
<p>The other option is to encrypt the stored data yourself, using a program like TrueCrypt. You can do this by following these simple steps:</p>
<ol>
<li>Download and install TrueCrypt (available for Windows, Mac and Linux).</li>
<li>Open TrueCrypt and press the Create Volume button.<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-01.png"><img class="alignnone size-medium wp-image-2136" title="fz-truecrypt-step-01" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-01-300x257.png" alt="" width="300" height="257" /></a></li>
<li>Select the most appropriate option (in most cases, you&#8217;ll just want to use the &#8220;Create an encrypted file container&#8221; option &#8211; for purposes of this tutorial, this is the option that was chosen).<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-02.png"><img class="alignnone size-medium wp-image-2137" title="fz-truecrypt-step-02" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-02-300x184.png" alt="" width="300" height="184" /></a></li>
<li>Choose whether you want this volume to be a standard volume or a hidden volume (which is protected by two separate passwords &#8211; one to unencrypt a false container and a second to unencrypt the true container).<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-03.png"><img class="alignnone size-medium wp-image-2138" title="fz-truecrypt-step-03" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-03-300x184.png" alt="" width="300" height="184" /></a></li>
<li>Click the &#8220;Select File&#8221; button, navigate to the area on your hard drive in which you want the file to be stored. Type a filename (whatever you want it to be) into the filename box and press the &#8220;Save&#8221; button.<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-04.png"><img class="alignnone size-medium wp-image-2139" title="fz-truecrypt-step-04" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-04-300x184.png" alt="" width="300" height="184" /></a></li>
<li>Choose encryption and hashing algorithms. Whatever you choose should be just fine.<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-05.png"><img class="alignnone size-medium wp-image-2140" title="fz-truecrypt-step-05" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-05-300x184.png" alt="" width="300" height="184" /></a></li>
<li>Decide how large you want the file to be (for the purposes of this tutorial, the file doesn&#8217;t need to be larger than a 100-200 kilobytes, but if you want to store other files in this area, you should choose whatever size you want &#8211; these containers cannot be easily resized, so make sure it&#8217;s big enough from the beginning).<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-06.png"><img class="alignnone size-medium wp-image-2141" title="fz-truecrypt-step-06" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-06-300x184.png" alt="" width="300" height="184" /></a></li>
<li>If you choose a large enough filesize, TrueCrypt will ask whether or not you plan to store large files (greater than 4 gigs) in the volume (not shown).</li>
<li>Enter the password that you want to use to encrypt/decrypt the data. TrueCrypt recommends that you use a password at least 20 characters long (and will throw a dismissable warning message if you use a shorter password).<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-07.png"><img class="alignnone size-medium wp-image-2142" title="fz-truecrypt-step-07" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-07-300x184.png" alt="" width="300" height="184" /></a></li>
<li>Choose the appropriate filesystem (in most cases, you can leave this set to the default that TrueCrypt uses) and click the &#8220;Format&#8221; button.<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-08.png"><img class="alignnone size-medium wp-image-2143" title="fz-truecrypt-step-08" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-08-300x184.png" alt="" width="300" height="184" /></a></li>
</ol>
<p>Once you&#8217;ve followed those steps, you will officially have an encrypted file container on your hard drive. Any items you store in that container will be encrypted and decrypted on-the-fly by TrueCrypt. The next thing you need to do is to mount your new file container.</p>
<ol>
<li>Open TrueCrypt.</li>
<li>Choose an available drive letter from the list (make sure you choose one that will consistently be available on your computer).</li>
<li>Click the &#8220;Select File&#8221; button and locate the file container you created.</li>
<li>Click the &#8220;Mount&#8221; button.</li>
<li>Enter the password you used when creating the volume.<br />
<a href="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-10.png"><img class="alignnone size-medium wp-image-2145" title="fz-truecrypt-step-10" src="http://www.htmlcenter.com/wp-content/uploads/2011/06/fz-truecrypt-step-10-300x257.png" alt="" width="300" height="257" /></a></li>
<li>Press the Exit button to minimize/hide TrueCrypt.</li>
<li>Navigate to the drive you used to mount the volume.</li>
</ol>
<p>Once there, you can create a new folder (like &#8220;filezilla&#8221;). Then, figure out where Filezilla is currently storing your configuration files.</p>
<p>On Windows XP, they are located in <code>C:\Documents and Settings\USERNAME\Application Data\filezilla</code>. On Windows 7, they are located in <code>C:\Users\USERNAME\AppData\Roaming\Filezilla</code>. I don&#8217;t, offhand, know where the files are stored on Linux or Mac, but I&#8217;m sure the paths are probably fairly similar.</p>
<p>You&#8217;ll then want to copy all of the files from that folder and paste them into the folder you just created within your encrypted volume; and then delete the originals.</p>
<p>Locate the Filezilla program on your hard drive, create a new XML file in that folder called fzdefaults.xml, paste in the following code, modify the value of the &#8220;Config Location&#8221; element and save it.</p>
<pre><code>&lt;FileZilla3&gt;
    &lt;Settings&gt;
      &lt;Setting name="Config Location"&gt;D:/filezilla/&lt;/Setting&gt;
      &lt;Setting name="Kiosk mode"&gt;0&lt;/Setting&gt;
      &lt;Setting name="Disable update check"&gt;0&lt;/Setting&gt;
    &lt;/Settings&gt;
&lt;/FileZilla3&gt;</code></pre>
<p>From that point forward, Filezilla will begin using your encrypted file container as the location for its configuration files. Any server addresses, usernames and passwords saved by Filezilla will be saved there, instead of in the default location.</p>
<h2>Important Note</h2>
<p>Once you do this, you will need to make sure your encrypted volume is mounted before you start Filezilla. If you don&#8217;t, Filezilla will pop up a series of about 10 or 15 error alerts in a row, followed by 2 or 3 more when you try to do anything in the program, followed by about 5 more when you close the program (most indicating that Filezilla couldn&#8217;t write to the non-existent settings files).</p>
<h2>Extreme Solution</h2>
<p>Of course, if you only have one or two websites to which you connect with Filezilla or you are really, really good at remembering passwords and config settings, you could always run Filezilla in &#8220;kiosk mode&#8221; all the time.</p>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/truecrypt-the-best-disk-encryption-utility/' rel='bookmark' title='TrueCrypt &#8212; The Best Disk Encryption Utility'>TrueCrypt &#8212; The Best Disk Encryption Utility</a></li>
<li><a href='http://www.htmlcenter.com/blog/filezilla/' rel='bookmark' title='Filezilla'>Filezilla</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/securing-filezilla/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iCal Files for Single Google Calendar Events</title>
		<link>http://www.htmlcenter.com/blog/ical-files-for-single-google-calendar-events/</link>
		<comments>http://www.htmlcenter.com/blog/ical-files-for-single-google-calendar-events/#comments</comments>
		<pubDate>Tue, 21 Jun 2011 19:34:51 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[google calendar]]></category>
		<category><![CDATA[ical]]></category>
		<category><![CDATA[ics]]></category>
		<category><![CDATA[outlook]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=2132</guid>
		<description><![CDATA[Over the past few months, I have been going round-and-round trying to figure out how to link to individual events in a Google Calendar, allowing visitors to add the event to their own calendars. Google does a nice job of providing functionality to add an event to your own Google calendar, but they don&#8217;t seem [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/' rel='bookmark' title='Adding an ICS Event File to Google Calendar'>Adding an ICS Event File to Google Calendar</a></li>
<li><a href='http://www.htmlcenter.com/blog/gmails-add-to-calendar/' rel='bookmark' title='Gmail&#8217;s &#8220;Add to Calendar&#8221;'>Gmail&#8217;s &#8220;Add to Calendar&#8221;</a></li>
<li><a href='http://www.htmlcenter.com/blog/using-jquery-to-attach-events-to-future-elements/' rel='bookmark' title='Using jQuery to Attach Events to Future Elements'>Using jQuery to Attach Events to Future Elements</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Over the past few months, I have been going round-and-round trying to figure out how to link to individual events in a Google Calendar, allowing visitors to add the event to their own calendars. Google does a nice job of providing functionality to add an event to your own Google calendar, but they don&#8217;t seem to offer any functionality to add an event to other calendars.</p>
<p>Google does, however, provide a link to an iCal file for each calendar&#8217;s feed; which allows you to add the calendar itself to your own calendar program (Outlook, etc.). The problem with that, obviously, is that, instead of adding a single event (maybe a concert or conference you want to attend, a public meeting, etc.), it adds all of the events from that calendar.<span id="more-2132"></span></p>
<h2>A Possible Solution</h2>
<p>After a lot of digging, head-desking and testing, I think I might have found a solution, though. When you read an XML/Atom feed from a Google calendar, there is an &lt;id&gt; element for each event listed in the feed. That &lt;id&gt; element is actually a URL/permalink for the event, and leads to an XML file with just that event&#8217;s data in it.</p>
<p>Once I discovered that, I decided to do some further testing. In the <a href="http://code.google.com/apis/calendar/data/2.0/reference.html#Event_feeds">Google calendar API reference</a>, it mentions that you can use a URL structure like the following to get the feed for an individual event:</p>
<pre><code>https://www.google.com/calendar/feeds/userID/visibility/projection/eventID</code></pre>
<p>If you compare that to the URL structure that Google provides for an individual calendar&#8217;s feed (the whole calendar):</p>
<pre><code>https://www.google.com/calendar/feeds/userID/visibility/projection</code></pre>
<p>then compare that to the URL structure that Google provides for an individual calendar&#8217;s iCal feed (again, the whole calendar):</p>
<pre><code>https://www.google.com/calendar/ical/userID/visibility/projection.ics</code></pre>
<p>you might start to notice some similarities.</p>
<h3>The Event&#8217;s iCal URL Structure</h3>
<p>It turns out (I still have some testing to do, but my preliminary testing indicates that it works), if you use a URL structure like the following, you should be able to grab an iCal file (.ics) for an individual event:</p>
<pre><code>https://www.google.com/calendar/feeds/userID/visibility/projection/eventID.ics</code></pre>
<p>So, how do you do that? Well, simply grab the value of the &lt;id&gt; element from the calendar feed, then replace the string <code>/feeds/</code> with the string <code>/ical/</code> and append the file extension <code>.ics</code> to the end.</p>
<h2>A Potential Issue</h2>
<p>One last potential issue arises when you do that, though. Outlook (and, presumably, other calendar programs) still interprets the downloaded .ics file as a calendar feed rather than an individual event/appointment. When you open the file in Outlook, rather than displaying the normal &#8220;Appointment&#8221; edit dialog, it actually opens it as an entirely new calendar.</p>
<p>That can be corrected, though, by cracking open the downloaded .ics file and removing the line that begins with:</p>
<pre><code>X-WR-CALNAME:</code></pre>
<p>Once that line is no longer in the .ics file, Outlook will open the file as an individual event/appointment for you to save to your calendar, rather than opening it as a whole new calendar.</p>
<p>Obviously, you wouldn&#8217;t want to require your users to do that themselves, so you&#8217;d probably want to write your own script that retrieves the file from Google&#8217;s server (possibly caching it for a while if you don&#8217;t edit events very often), locates the line mentioned above, removes it, saves the file in a temporary location on your server and then prompts the user to download it.</p>
<h2>Thoughts?</h2>
<p>As I mentioned, I still have some testing to do with this, but I&#8217;d love feedback on the concept. Have you tried this before? Am I missing anything obvious?</p>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/adding-an-ics-event-file-to-google-calendar/' rel='bookmark' title='Adding an ICS Event File to Google Calendar'>Adding an ICS Event File to Google Calendar</a></li>
<li><a href='http://www.htmlcenter.com/blog/gmails-add-to-calendar/' rel='bookmark' title='Gmail&#8217;s &#8220;Add to Calendar&#8221;'>Gmail&#8217;s &#8220;Add to Calendar&#8221;</a></li>
<li><a href='http://www.htmlcenter.com/blog/using-jquery-to-attach-events-to-future-elements/' rel='bookmark' title='Using jQuery to Attach Events to Future Elements'>Using jQuery to Attach Events to Future Elements</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/ical-files-for-single-google-calendar-events/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Simple Picasa Tip</title>
		<link>http://www.htmlcenter.com/blog/a-simple-picasa-tip/</link>
		<comments>http://www.htmlcenter.com/blog/a-simple-picasa-tip/#comments</comments>
		<pubDate>Sun, 19 Dec 2010 14:19:00 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[copy photo]]></category>
		<category><![CDATA[export photo]]></category>
		<category><![CDATA[photo organization]]></category>
		<category><![CDATA[picasa]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=1910</guid>
		<description><![CDATA[With the end of the year drawing near, I&#8217;ve been spending a lot of time reviewing and organizing my photos from the past 12 months. Every year, I put together a DVD slideshow of photographs to hand out to family and friends. This year, I decided to use Picasa to help me identify the photos [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/picasa-facial-recognition/' rel='bookmark' title='Picasa Facial Recognition'>Picasa Facial Recognition</a></li>
<li><a href='http://www.htmlcenter.com/blog/a-simple-introduction-to-css/' rel='bookmark' title='A Simple Introduction to CSS'>A Simple Introduction to CSS</a></li>
<li><a href='http://www.htmlcenter.com/blog/two-windows-7-tips/' rel='bookmark' title='Two Windows 7 Tips'>Two Windows 7 Tips</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>With the end of the year drawing near, I&#8217;ve been spending a lot of time reviewing and organizing my photos from the past 12 months. Every year, I put together a DVD slideshow of photographs to hand out to family and friends.</p>
<p>This year, I decided to use Picasa to help me identify the photos that I wanted to include in the DVD. However, once I found the photos I wanted within Picasa, I didn&#8217;t really know how to get them organized in a way that I could import them into Nero Vision.</p>
<p>First, I tried dragging them into a new Windows folder. I thought that worked, until I realized that the photos actually got moved from their original folders into the new folder. That was not at all what I wanted to do. I wanted to create copies; I didn&#8217;t want to move them.</p>
<p>After a bit of searching online, I found a helpful little tip. Once you select the photos you want in Picasa, you can go to the &#8220;<strong>File</strong>&#8221; menu and click &#8220;<strong>Export Picture to Folder</strong>&#8220;. From there, you can locate the folder to which you want to export the photo(s). I have no idea why this option isn&#8217;t available in the context menu when you select photos, but, to me, it would make a lot of sense to add that option there. Until then, I&#8217;ll keep on using the File menu to copy my photos.</p>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/picasa-facial-recognition/' rel='bookmark' title='Picasa Facial Recognition'>Picasa Facial Recognition</a></li>
<li><a href='http://www.htmlcenter.com/blog/a-simple-introduction-to-css/' rel='bookmark' title='A Simple Introduction to CSS'>A Simple Introduction to CSS</a></li>
<li><a href='http://www.htmlcenter.com/blog/two-windows-7-tips/' rel='bookmark' title='Two Windows 7 Tips'>Two Windows 7 Tips</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/a-simple-picasa-tip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a New SourceForge SVN Repository</title>
		<link>http://www.htmlcenter.com/blog/creating-a-new-sourceforge-svn-repository/</link>
		<comments>http://www.htmlcenter.com/blog/creating-a-new-sourceforge-svn-repository/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 13:44:57 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[sourceforge]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[tortoise]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=1837</guid>
		<description><![CDATA[I recently started a new project on SourceForge, attempting to open the source of the content management system I&#8217;ve been developing for my current employer over the last few years. Unfortunately, the whole process of creating a new project on SourceForge caused more frustration than developing the CMS in the first place. While creating a [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/nominate-your-favorite-sourceforge-projects/' rel='bookmark' title='Nominate Your Favorite SourceForge Projects'>Nominate Your Favorite SourceForge Projects</a></li>
<li><a href='http://www.htmlcenter.com/blog/creating-a-headerfooter-to-be-used-on-all-pages/' rel='bookmark' title='Creating a Header/Footer to be Used on all Pages'>Creating a Header/Footer to be Used on all Pages</a></li>
<li><a href='http://www.htmlcenter.com/blog/creating-a-photo-slideshow-with-nero-vision/' rel='bookmark' title='Creating A Photo Slideshow With Nero Vision'>Creating A Photo Slideshow With Nero Vision</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I recently started a new project on SourceForge, attempting to open the source of the content management system I&#8217;ve been developing for my current employer over the last few years. Unfortunately, the whole process of creating a new project on SourceForge caused more frustration than developing the CMS in the first place. While creating a new project is extremely simple, and uploading a packaged archive of your project&#8217;s files is easy, attempting to set up a new SVN repository so that you can begin versioning your application is beyond difficult (especially for a complete newbie to version control systems like me).</p>
<p>There are tutorials all over the Web that give you pieces of the information that you need, but I couldn&#8217;t really find any that gave me step-by-step instructions explaining how to turn the batch of source files I had on my hard drive to having a fully functional SVN repository containing those files on the SourceForge server.<span id="more-1837"></span></p>
<p>In this article, I hope to walk you through the steps I took to get things set up initially. For the purposes of this article, I am assuming that you already have the initial source code on your computer. This article is intended for developers that have an established project, but don&#8217;t have versioning control set up.</p>
<p>To begin with, create a new directory on your hard drive to store the files you want to add to the repository. Copy your source files into that directory, make sure they are organized and that you&#8217;ve cleaned up a lot of the extraneous files that aren&#8217;t part of your project.</p>
<p>Then, you should visit <a href="http://www.shokhirev.com/nikolai/programs/SVN/svn.html">Nikolai Shokhirev&#8217;s &#8220;Practical guide to subversion on Windows with TortoiseSVN&#8221;</a>. Follow the steps he outlines there (especially the part in the &#8220;<a href="http://www.shokhirev.com/nikolai/programs/SVN/svn.html#Step-by-step">Step-by-step setup</a>&#8221; section). Once you&#8217;ve followed his guide, you should have a new SVN repository set up on your computer.</p>
<p>For the next few steps, I didn&#8217;t find a good way to perform these tasks using Windows, so I had to fire up Linux in a virtual machine (VM). I used VirtualBox and made sure that the hard drive on which my new SVN repository is set up was listed as one of the VirtualBox &#8220;shared folders&#8221;.</p>
<p>Once the Linux VM is up and running (you can use a live disc so that you don&#8217;t have to go through the process of actually installing Linux on the VM), open up the terminal and mount the shared folder you set up in VirtualBox. Start by creating a new directory on the Linux drive so that the files have somewhere to go when you mount the drive. To do that, run a command similar to the following:</p>
<p><code>sudo mkdir /windows</code></p>
<p>That command will create a new directory called &#8220;windows&#8221; at the root of the Linux file system. In order to proceed, you will need to enter the &#8220;root&#8221; password for the Linux system.</p>
<p>Then, mount the VirtualBox shared folder in Linux by running a command similar to the following:</p>
<p><code>sudo mount.vboxsf cdrive /windows</code></p>
<p>In the example above, &#8220;cdrive&#8221; is the name that I assigned to the shared folder through VirtualBox. If you assign a different name to your shared folder, you&#8217;ll need to substitute that name in place of &#8220;cdrive&#8221;.</p>
<p>Once you&#8217;ve mounted the drive, you should now have access to your new SVN repository from within the VM. Now, you need to create a dump (backup) file of your repository. To do so, run a command similar to the following from within the terminal window:</p>
<p><code>svnadmin dump /windows/Projects/MyProject &gt; /windows/Projects/MyProjectDump.bak</code></p>
<p>Obviously, if your SVN repository is located somewhere other than &#8220;\Projects\MyProject&#8221; on your Windows drive, you&#8217;ll need to adjust the location of the repository (the first argument after the &#8220;dump&#8221; command) and probably the location of the dump file (the second argument).</p>
<p>Once you have the dump file created, you should find the newly created file in Windows and zip it up using WinZip or a similar program.</p>
<p>Next, you&#8217;ll need to access the SourceForge Interactive Shell. <a href="https://sourceforge.net/apps/trac/sourceforge/wiki/Shell%20service#PuTTYclient">Instructions for accessing the shell using PuTTY</a> (as well as other SSH clients) can be found on the SourceForge wiki. If you are using PuTTY, be sure to follow all of the instructions provided in that section, as the connection will fail if you don&#8217;t set the &#8220;Connection &gt; SSH&#8221; and &#8220;Connection &gt; Data&#8221; settings properly.</p>
<p>Once you login to the Interactive Shell, you will need to start by typing sf-help to get information about connecting to your project folder through SFTP (you&#8217;ll need SFTP access in order to upload the dump file you created). When you type sf-help, you should see quite a few lines of output. Near the bottom of the output, you will see something along the lines of &#8220;For direct access to this shell, use <span style="color: #f00;">shell2</span>.sourceforge.net on port <span style="color: #f00;">22006</span>&#8220;. The portions shown in red will be different for each user, so take note of those.</p>
<p>The next thing you will need to do is &#8220;checkout&#8221; the current repository on the SourceForge server. Assuming this is a new project, the repository should be completely empty, but you still need to check it out in order to work with it. You will check out the repository by executing the following command in the Interactive Shell session you have open in Windows:</p>
<p><code>adminrepo --checkout svn</code></p>
<p>Next, switch back over to your Linux VM (you can conceivably do this using an FTP client like Filezilla, but I found it easier to perform these actions using the Linux terminal) and type the following command:</p>
<p><code>sftp -o Port=<span style="color: #f00;">22006</span> <span style="color: #f00;">SFUSERNAME</span>@<span style="color: #f00;">shell2</span>.sourceforge.net</code></p>
<p>Again, the portions highlighted in <span style="color: #f00;">red</span> will need to be modified to match your specific information.</p>
<p>Once you&#8217;ve connected successfully through SFTP, you now need to upload your dump file to the SourceForge server. To do so, use a command like the following:</p>
<p><code>put /windows/MyProjectDump.zip ./userweb/htdocs</code></p>
<p>That will upload the MyProjectDump.zip file to a folder on the SourceForge server that you should have permissions to write in.</p>
<p>Next, you should switch back to the Interactive Shell session you have open in Windows and unzip the dump file using the following commands (the first command moves you into the userweb/htdocs directory to make the rest of the actions easier):</p>
<p><code>cd ./userweb/htdocs<br />
unzip MyProjectDump.zip</code></p>
<p>Once the file has been unzipped, you can then load the contents of the dump file into your new SourceForge repository. To do so, you will need to run a command in the Interactive Shell session on Windows similar to:</p>
<p><code>svnadmin load /svnroot/PROJECTNAME &lt; MyProjectDump.bak</code></p>
<p>Finally, you need to commit the changes you made to the repository. To do that, you will check the repo back in by running the following command in the Interactive Shell session on Windows.</p>
<p><code>adminrepo --save svn</code></p>
<p>Once you&#8217;ve followed all of those steps, you should have a brand new SVN repository on SourceForge that contains all of the files from your project.</p>
<p>Most of the SourceForge-related steps I described above can be found in the &#8220;<a href="https://sourceforge.net/apps/trac/sourceforge/wiki/Shell%20service">Shell Service</a>&#8221; and &#8220;<a href="https://sourceforge.net/apps/trac/sourceforge/wiki/Subversion%20import%20instructions#ImportingaSubversiondumpfile">Subversion Import Instructions</a>&#8221; articles in the SourceForge wiki. More information about the command-line version of SFTP and its commands can be found in <a href="http://linux.about.com/od/commands/l/blcmdl1_sftp.htm">About.com&#8217;s article on SFTP</a>.</p>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/nominate-your-favorite-sourceforge-projects/' rel='bookmark' title='Nominate Your Favorite SourceForge Projects'>Nominate Your Favorite SourceForge Projects</a></li>
<li><a href='http://www.htmlcenter.com/blog/creating-a-headerfooter-to-be-used-on-all-pages/' rel='bookmark' title='Creating a Header/Footer to be Used on all Pages'>Creating a Header/Footer to be Used on all Pages</a></li>
<li><a href='http://www.htmlcenter.com/blog/creating-a-photo-slideshow-with-nero-vision/' rel='bookmark' title='Creating A Photo Slideshow With Nero Vision'>Creating A Photo Slideshow With Nero Vision</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/creating-a-new-sourceforge-svn-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing WordPress Through SSH</title>
		<link>http://www.htmlcenter.com/blog/installing-wordpress-through-ssh/</link>
		<comments>http://www.htmlcenter.com/blog/installing-wordpress-through-ssh/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 21:37:23 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[PHP Tutorials]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=1834</guid>
		<description><![CDATA[While it is possible to download a ZIP file with the source files for WordPress, unzip it on your computer and then upload the individual files to a client’s Web server, it is generally much easier (assuming the client’s Web server has SSH capabilities) to perform all of those tasks directly on the server. Following [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/my-first-official-wordpress-plugin/' rel='bookmark' title='My First Official WordPress Plugin'>My First Official WordPress Plugin</a></li>
<li><a href='http://www.htmlcenter.com/blog/wordpress-and-zeus-part-1-getting-permalinks-working/' rel='bookmark' title='WordPress and Zeus Part 1: Getting Permalinks Working'>WordPress and Zeus Part 1: Getting Permalinks Working</a></li>
<li><a href='http://www.htmlcenter.com/blog/wordpress-launches-plugin-compatibility-checker/' rel='bookmark' title='WordPress Launches Plugin Compatibility Checker'>WordPress Launches Plugin Compatibility Checker</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>While it is possible to download a ZIP file with the source files for WordPress, unzip it on your computer and then upload the individual files to a client’s Web server, it is generally much easier (assuming the client’s Web server has SSH capabilities) to perform all of those tasks directly on the server. Following are instructions explaining how to do so. The first few steps of these instructions are written assuming that you are using a Windows computer, but the actions after connecting to SSH will be the same no matter which system you are using.<span id="more-1834"></span></p>
<ol>
<li>If you have not already done so, you will need to download and install an SSH terminal program such as PuTTY (<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html</a>). <em>If you are using a Linux or Macintosh computer, SSH is natively available through the terminal that comes pre-installed on those systems. </em></li>
<li>Connect to the Web server through SSH. With PuTTY, you will open the PuTTY program, then type in the IP address or FTP address for the client’s Web server, with the “Port” set to 22. Make sure that “SSH” is selected as the “Connection Type”, then click the “Open” button.</li>
<li>A new terminal window will open and will then prompt you for a username. Enter the FTP username that the client provided.</li>
<li>You will then be prompted for a password. Enter the FTP password the client provided.</li>
<li>Then, use the “cd” (change directory) command to navigate to the root Web-accessible directory. For all Site5 accounts, you will initially be logged into the user’s “home” directory, so you will use the following command to move into the root Web-accessible directory:<br />
<code>cd public_html</code></li>
<li>Then, use WGET to retrieve the latest version of WordPress from the WordPress server.<br />
<code>wget http://wordpress.org/latest.tar.gz</code><br />
The tar-ball will then be downloaded into the current directory on the Web server.</li>
<li>Next, you will need to extract the contents of that tar-ball. Use the following command to do so.<br />
<code>tar –xvzf latest.tar.gz ./</code><br />
That will extract all of the contents of “latest.tar.gz” into the current (public_html) directory on the Web server. However, all of those files will be contained within a directory called “wordpress,” so you will need to move them.</li>
<li>Move the files out of the “wordpress” directory and into the “public_html” directory.<br />
<code>mv –f wordpress/* ./</code></li>
<li>Remove the “wordpress” directory.<br />
<code>rm –f ./wordpress</code></li>
<li>Visit the client’s website (type the domain name into your Web browser). You should then be redirected to the WordPress installation file. From there, you will receive instructions explaining how to finish the installation process. You will need to create a new database and a database user for that new DB.</li>
</ol>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/my-first-official-wordpress-plugin/' rel='bookmark' title='My First Official WordPress Plugin'>My First Official WordPress Plugin</a></li>
<li><a href='http://www.htmlcenter.com/blog/wordpress-and-zeus-part-1-getting-permalinks-working/' rel='bookmark' title='WordPress and Zeus Part 1: Getting Permalinks Working'>WordPress and Zeus Part 1: Getting Permalinks Working</a></li>
<li><a href='http://www.htmlcenter.com/blog/wordpress-launches-plugin-compatibility-checker/' rel='bookmark' title='WordPress Launches Plugin Compatibility Checker'>WordPress Launches Plugin Compatibility Checker</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/installing-wordpress-through-ssh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Are Your Websites Color-Accessible?</title>
		<link>http://www.htmlcenter.com/blog/are-your-websites-color-accessible/</link>
		<comments>http://www.htmlcenter.com/blog/are-your-websites-color-accessible/#comments</comments>
		<pubDate>Sat, 23 Oct 2010 15:09:52 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[Usability Tutorials]]></category>
		<category><![CDATA[accessibility]]></category>
		<category><![CDATA[color]]></category>
		<category><![CDATA[color blindness]]></category>
		<category><![CDATA[contrast a]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[wcag]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=1830</guid>
		<description><![CDATA[As many of you already know, the Web Content Accessibility Guidelines (WCAG) recommend a specific amount of contrast between backgrounds and text on your websites. Unfortunately, very few people probably actually test their websites to ensure that they meet those guidelines. As a color-blind person, I find a lot of websites that are extremely difficult [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/designing-websites-for-older-users/' rel='bookmark' title='Designing websites for older users'>Designing websites for older users</a></li>
<li><a href='http://www.htmlcenter.com/blog/color-schemer-studio/' rel='bookmark' title='Color Schemer Studio'>Color Schemer Studio</a></li>
<li><a href='http://www.htmlcenter.com/blog/accessible-forms-guidelines/' rel='bookmark' title='Guidelines for Accessible Forms'>Guidelines for Accessible Forms</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.htmlcenter.com/wp-content/uploads/2010/10/contrast-a-screen-shot.png"><img class="alignnone size-thumbnail wp-image-1831" style="float: right; margin: 0 0 1em 1em; border: none;" title="Contrast-A Screen Shot" src="http://www.htmlcenter.com/wp-content/uploads/2010/10/contrast-a-screen-shot-e1287846468977-150x150.png" alt="Contrast-A Screen Shot" width="150" height="150" /></a>As many of you already know, the <a href="http://www.w3.org/TR/WCAG20/#visual-audio-contrast">Web Content Accessibility Guidelines (WCAG) recommend a specific amount of contrast between backgrounds and text</a> on your websites. Unfortunately, very few people probably actually test their websites to ensure that they meet those guidelines. As a color-blind person, I find a lot of websites that are extremely difficult to read because of poor contrast between backgrounds and text.</p>
<p>I&#8217;m honestly not sure why many of us (including myself, on many occasions) don&#8217;t check the color contrast on our websites. While it&#8217;s difficult to measure and quantify the contrast through conventional means, there are quite a few really nice tools that make it a snap.<span id="more-1830"></span></p>
<p>The tool I&#8217;ve found most useful is called Contrast-A. Contrast-A is available as a <a href="http://www.dasplankton.de/ContrastA/">Web-based application</a> and as an <a href="http://www.adobe.com/cfusion/marketplace/index.cfm?event=marketplace.offering&amp;marketplaceid=1&amp;offeringid=10763">Adobe AIR application</a>, so it can easily be used on all platforms. To use Contrast-A, you simply enter one color value (in hexadecimal or RGB), then enter the second color value. Contrast-A will then show a sample of the first color as a foreground and the second color as a background, and vice-versa. Samples of larger text (18px or larger) and normal text (~12px) are shown in the display, along with a color wheel.</p>
<p>Then, below the samples, is information about the contrast between the two current colors and a simple checklist letting you know if the two colors have enough contrast to meet the WCAG recommendation. Finally, Contrast-A even includes a color-deficiency simulator to attempt to let you see how the contrast appears to users with various color-deficiencies.</p>
<p><a href="http://www.dasplankton.de/ContrastA/">Contrast-A</a> is a very handy tool, offers a great amount of information and is extremely simple to use. If you are not contrast-testing your website with a tool like Contrast-A, you really should be. As a color-blind user, I implore you to do proper contrast-testing to make it easier for me to use your sites.</p>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/designing-websites-for-older-users/' rel='bookmark' title='Designing websites for older users'>Designing websites for older users</a></li>
<li><a href='http://www.htmlcenter.com/blog/color-schemer-studio/' rel='bookmark' title='Color Schemer Studio'>Color Schemer Studio</a></li>
<li><a href='http://www.htmlcenter.com/blog/accessible-forms-guidelines/' rel='bookmark' title='Guidelines for Accessible Forms'>Guidelines for Accessible Forms</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/are-your-websites-color-accessible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check Your Sites With Google</title>
		<link>http://www.htmlcenter.com/blog/check-your-sites-with-google/</link>
		<comments>http://www.htmlcenter.com/blog/check-your-sites-with-google/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 16:25:41 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[Bing]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[malicious]]></category>
		<category><![CDATA[malware]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[vulnerability]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=1805</guid>
		<description><![CDATA[Earlier this week, I received a report that something fishy was going on with one of my websites. The report indicated that some sort of spam had infiltrated the site, informing users about great deals on pharmaceuticals. Needless to say, since we had not recently gone into the business of selling drugs (legal or otherwise), [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/google-hosted-apps-and-sending-mail-from-a-web-server/' rel='bookmark' title='Google Hosted Apps and Sending Mail From a Web Server'>Google Hosted Apps and Sending Mail From a Web Server</a></li>
<li><a href='http://www.htmlcenter.com/blog/using-google-to-serve-up-mootools-or-jquery/' rel='bookmark' title='Using Google to Serve Up MooTools or JQuery'>Using Google to Serve Up MooTools or JQuery</a></li>
<li><a href='http://www.htmlcenter.com/blog/notifying-google-of-a-major-site-overhaul/' rel='bookmark' title='Notifying Google of a Major Site Overhaul'>Notifying Google of a Major Site Overhaul</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Earlier this week, I received a report that something fishy was going on with one of my websites. The report indicated that some sort of spam had infiltrated the site, informing users about great deals on pharmaceuticals. Needless to say, since we had not recently gone into the business of selling drugs (legal or otherwise), this was a bit suspicious.</p>
<p>I headed to the page that was included in the report and checked it out in about 20 different ways. I opened it in each of the five browsers I have installed; I viewed the regular source of the page; I viewed the generated source (after the JavaScript has run and modified the source) of the page and couldn&#8217;t find anything about the pharmaceuticals reported in the message.<span id="more-1805"></span></p>
<p>Then, I happened to notice that the user agent listed in the report was &#8220;googlebot&#8221;. On a whim, I decided to run a quick Google search of our website (use the &#8220;site:&#8221; prefix, followed by your site&#8217;s URL) to see what Google had to say about the situation. Sure enough, some of our Google listings had the spammy titles and meta descriptions shown in the report.</p>
<p>After a lot of digging, I finally discovered that there is a nasty hack out there that somehow tunnels into your website, watches what you do, then inserts itself into random places; essentially hijacking your site. It is virtually undetectable if you never look for your own website on search engines. It only affects the way your site is rendered when googlebot, msnbot or the Yahoo! slurp is used to view it. For all regular visitors, your website is still the same as it&#8217;s always been.</p>
<p>The first thing I found was a file called &#8220;indexd.php&#8221; stored in the root of our public HTML directory. I downloaded that file to my computer and removed it from the Web server. After taking a look in the file, I found some pretty frightening information. This was a script that essentially scans your entire Web server looking for any and all possible vulnerabilities. Among many other things, it searches for all common variations of &#8220;conf&#8221;, &#8220;config&#8221;, etc. files on your server; it searches for all .htaccess and .htpasswd files; it searches for all of the common apache configuration files (httpd.conf, vhosts.conf, etc.); it searches for all files owned by apache, all files owned by root and much, much more. It also attempts to bruteforce some of the passwords used on the system.</p>
<p>It then injects random strings that will present the spam information to search robots, and finds a way to completely take over your website through that.</p>
<p>At the top of the indexd.php file, I found a reference to something called the &#8220;WebShell by oRB&#8221;. After a Google search (through which I had to be extremely careful, as more then 3/4 of the results appeared to lead to hacker/cracker sites telling you how to use the script rather than telling you how to get rid of it), I found out that this is apparently a variation of an older hacking script known as c99Shell. After a bit more research, I found that this exploit can be used as a trojan, as a simple Web script (if they can somehow gain access to simply upload files to your server) and a few other variations.</p>
<p>I also found that a good way to try to locate the hacked files is to perform a search on your Web server (using grep or a similar tool) to look for any strings that start with <code>eval(base64_decode(</code>, as the hackers insert the spam messages as base64_encoded strings (so you can&#8217;t simply do a search looking for the specific pharmaceutical information, I suppose).</p>
<p>Whenever you find files that include that code, you need to determine whether they are files that belong on your system or not. If they are, then you should remove the malicious code and resave them (if at all possible, it&#8217;s also probably a good idea to rename them). If they do not belong on your system, remove them altogether.</p>
<p>Then, run a grep search looking for files that reference the file you just modified or removed. Modify those files appropriately, as well.</p>
<p>After I found and rectified the first batch, I proceeded to change my password, the password of the server&#8217;s root user, the MySQL username and password and more. I also set out changing the names of some of the files that were hacked or that might have been vulnerable based on the information in the indexd.php file. I changed our DirectoryIndex file from index.php to something completely unrelated (if you&#8217;re going to do that, make sure you update your .htaccess file(s) appropriately, too). I changed our configuration file (the filename initially included the word &#8220;config&#8221;) and a few others.</p>
<p>The next day, I found that the hack had re-presented itself on our server. Once again, I did a search for the hacked files. I found them and remediated the situation again. The next day, it was back again. This time, they had used a <code>preg_replace()</code> statement instead of an <code>eval(base64_decode())</code> statement (so, make sure you look for those, too).</p>
<p>They had also modified our main .htaccess file so that it redirected whenever a search engine spider came along to a phantom file called &#8220;wp-status.php&#8221; (this particular website doesn&#8217;t even run on WordPress, it just uses it for one small portion of the site) that the hack had generated. I removed the wp-status.php file and corrected our .htaccess file again.</p>
<p>At some point throughout this entire process, I also locked down the permissions on our server quite a bit. I was surprised to find out that, since apache actually requests and serves the files and documents on a Web server, as long as apache (or whatever your apache user is called on your server) is either the owner of the file or is in the group that owns the file, you don&#8217;t need to grant &#8220;others&#8221; any permissions to those files or directories at all. I was able to run <code>chmod -R o-rwx</code> on our entire Web directory without any negative consequences (of course, depending on your server configuration, that may not be the case for you).</p>
<p>Finally, I decided to shut down and restart our entire Web server (not just apache, but the whole box). Once it started back up again, the hack was back. I had to search for and remove even more hacked files. This led me to believe that the issue wasn&#8217;t simply one of having uploaded a malicious file or two to our server, the server itself was infected.</p>
<p>I asked our host to install an anti-virus solution on the server for us. I then ran the scanner. Although it didn&#8217;t detect any threats or issues, the exploit does not seem to have returned since it was installed. I am keeping my fingers crossed.</p>
<p>The moral of the story is, make sure you&#8217;re checking your websites in Google (and other search engines). I found two tools that are helpful in this.</p>
<ol>
<li><a href="http://www.google.com/webmasters/">Google Webmaster Tools</a> offers an experimental feature called &#8220;Fetch as Googlebot&#8221; that will send a request, as the googlebot, to the URL you provide. It will then return the full headers and source of the page it retrieved.<br />
However, I also found out that this tool apparently has a weekly request limit (not mentioned anywhere on the page on which the tool is located), so if you request too many pages throughout the week, they&#8217;ll cut you off and won&#8217;t let you use the service anymore for a few days.</li>
<li>There is a Firefox extension called <a href="http://chrispederick.com/work/user-agent-switcher/">User Agent Switcher</a> that lets you change the user-agent used by Firefox. You can then use Firefox to see what GoogleBot, MSNBot and Yahoo! Slurp see when they visit your site.</li>
</ol>
<p>Thankfully, in our case, we caught the issue before it wreaked major havoc on our search results. Yes, Google indexed and cached a handful of pages on our site with the spam information, but not nearly as many as it could have. Since we caught it when we did, Google had only caught the pages on our site that are crawled most often, which means that, having hopefully eliminated the issue, Google is already fixing our results in its index.</p>
<p>Also, in our case, it doesn&#8217;t look like the hack gained access to our database (I imagine that, on other sites, the hack does more than just hack specific files, I&#8217;m sure it injects all kinds of nasty code into the database, too), so we were extremely lucky on that account.</p>
<p>Have you run across this issue before? If so, do you have any advice other than what I&#8217;ve laid out here? I&#8217;m hoping that the issue is gone, but I&#8217;m also still extremely worried that it will come back. I can&#8217;t imagine that I somehow managed to eradicate it altogether, so I&#8217;m really just waiting for the other shoe to drop. If you have any thoughts or tips as to where this thing might be hiding itself on our server, please share.</p>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/google-hosted-apps-and-sending-mail-from-a-web-server/' rel='bookmark' title='Google Hosted Apps and Sending Mail From a Web Server'>Google Hosted Apps and Sending Mail From a Web Server</a></li>
<li><a href='http://www.htmlcenter.com/blog/using-google-to-serve-up-mootools-or-jquery/' rel='bookmark' title='Using Google to Serve Up MooTools or JQuery'>Using Google to Serve Up MooTools or JQuery</a></li>
<li><a href='http://www.htmlcenter.com/blog/notifying-google-of-a-major-site-overhaul/' rel='bookmark' title='Notifying Google of a Major Site Overhaul'>Notifying Google of a Major Site Overhaul</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/check-your-sites-with-google/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Some Handy Windows Keyboard Shortcuts</title>
		<link>http://www.htmlcenter.com/blog/some-handy-windows-keyboard-shortcuts/</link>
		<comments>http://www.htmlcenter.com/blog/some-handy-windows-keyboard-shortcuts/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 20:52:31 +0000</pubDate>
		<dc:creator>Curtiss</dc:creator>
				<category><![CDATA[General Tutorials]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[shortcuts]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.htmlcenter.com/?p=1801</guid>
		<description><![CDATA[The other day on Friendfeed, I noticed Matt Mastracci posted a link to an article explaining how and why additional keys were added to and removed from Mac (and PC) keyboards. It is an interesting read, but I found something even more interesting to me in the comments at the end of the article. One [...]
Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/opening-new-windows-in-windows-7/' rel='bookmark' title='Opening New Windows in Windows 7'>Opening New Windows in Windows 7</a></li>
<li><a href='http://www.htmlcenter.com/blog/two-windows-7-tips/' rel='bookmark' title='Two Windows 7 Tips'>Two Windows 7 Tips</a></li>
<li><a href='http://www.htmlcenter.com/blog/how-the-scroll-wheel-should-work-in-windows/' rel='bookmark' title='How The Scroll Wheel Should Work in Windows'>How The Scroll Wheel Should Work in Windows</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The other day on Friendfeed, I noticed <a href="http://friendfeed.com/mmastrac/34764bb7/i-completely-forgot-had-contextual-menu-key-on">Matt Mastracci posted a link</a> to an article explaining how and <a href="http://www.roughlydrafted.com/2007/08/11/how-apple-keyboards-lost-a-logo-and-windows-pcs-gained-one/">why additional keys were added to and removed from Mac (and PC) keyboards</a>. It is an interesting read, but I found something even more interesting to me in the comments at the end of the article.</p>
<p>One commenter <a href="http://www.roughlydrafted.com/2007/08/11/how-apple-keyboards-lost-a-logo-and-windows-pcs-gained-one/#comment-2930">posted a handful of keyboard shortcuts you can use in Windows.</a> Before reading the comment, I always thought that the &#8220;Windows&#8221; key on my keyboards did nothing more than open and close the &#8220;Start&#8221; menu (as did the author of the article, it seems). The commenter, however, pointed out that it also can be used to perform some pretty handy actions in Windows (I have only tested them on Windows 7, so I can&#8217;t comment as to how far back they are compatible with Windows or whether or not they are compatible with Linux in any way).</p>
<p>Following are the shortcuts he pointed out:<span id="more-1801"></span></p>
<ul>
<li>win+d = show desktop (minimize all windows)</li>
<li>win+e = open explorer (same as finder)</li>
<li>win+l = lock the computer (so no one tinkers with it)</li>
<li>win+r = open “run” dialog (terminal commandline)</li>
<li>win+pause|break = open computer properties (add to domain, remove hardware and so on)</li>
</ul>
<p>Related posts:<ol>
<li><a href='http://www.htmlcenter.com/blog/opening-new-windows-in-windows-7/' rel='bookmark' title='Opening New Windows in Windows 7'>Opening New Windows in Windows 7</a></li>
<li><a href='http://www.htmlcenter.com/blog/two-windows-7-tips/' rel='bookmark' title='Two Windows 7 Tips'>Two Windows 7 Tips</a></li>
<li><a href='http://www.htmlcenter.com/blog/how-the-scroll-wheel-should-work-in-windows/' rel='bookmark' title='How The Scroll Wheel Should Work in Windows'>How The Scroll Wheel Should Work in Windows</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.htmlcenter.com/blog/some-handy-windows-keyboard-shortcuts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

