<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
<channel>
    <title>mysiteonline™</title>
    <link>http://life.mysiteonline.org/</link>
    <description>Brendon Kozlowski's Home on the Web.</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4 - http://www.s9y.org/</generator>
    <pubDate>Thu, 22 Jul 2010 19:34:48 GMT</pubDate>

    <image>
        <url>http://life.mysiteonline.org/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: mysiteonline™ - Brendon Kozlowski's Home on the Web.</title>
        <link>http://life.mysiteonline.org/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>jQuery: Edit Content Inline on Dynamically Created Elements</title>
    <link>http://life.mysiteonline.org/archives/199-jQuery-Edit-Content-Inline-on-Dynamically-Created-Elements.html</link>
            <category>Programming</category>
    
    <comments>http://life.mysiteonline.org/archives/199-jQuery-Edit-Content-Inline-on-Dynamically-Created-Elements.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=199</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=199</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    Unless you&#039;ve been living under a rock while learning jQuery, everyone should have learned of the .live() call within the jQuery JavaScript toolkit. If you haven&#039;t, shove that rock aside - the .live() method takes the place of bind() (which is the more powerful, and base method of .click(), .blur(), etc...) for elements that are created dynamically at runtime. If you dynamically create elements after the DOM has loaded, and assume generalized JavaScript functions you&#039;ve written to target these new elements (we&#039;ll presume you&#039;re targeting a &quot;findMe&quot; class) will work. Well it won&#039;t, unless you use .live().&lt;br /&gt;
&lt;br /&gt;
Now that we have that out of the way, another one of jQuery&#039;s really great features that mimics why Wordpress is so great - all of the user contributed plugins, whether they&#039;re efficient or not, the fact that someone else has already created a solution for you, and is willing to share it with you (most likely for free) is awesome. One such type of plugin that I was looking for today, and knew I&#039;d want to eventually use at some point, was an edit-in-place, or inline edit plugin - something that allowed me to edit content from within the DOM, such as in a DIV container (not in a textbox - or at least not initially rendered in one) dynamically.&lt;br /&gt;
&lt;br /&gt;
In my case today, I was experimenting with dynamically creating elements that might need to be edited after being created. My first gut-instinct thought? Yup, you guessed it: .live(). I replaced the call to .bind() in &lt;a href=&quot;http://arashkarimzadeh.com/index.php/jquery/7-editable-jquery-plugin.html&quot;&gt;the plugin&lt;/a&gt;&#039;s source and voilà! Nothing. It didn&#039;t work. The jQuery code in the plugin had been optimized beyond a point where I was comfortable to modify it further and understand what I was doing in order to make it work (which was kind of pathetic, but I digress).&lt;br /&gt;
&lt;br /&gt;
So, how could I solve my little problem?  Quite easily - I wasn&#039;t really thinking.&lt;br /&gt;
&lt;br /&gt;
The call to instantiate an event on targeted objects after the DOM is ready is something like this:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;$(&#039;div.editable&#039;).editable();&lt;/textarea&gt;I was scratching my head, trying to figure out if I&#039;d have to uninstantiate all elements and reinstantiate the event bubbling throughout the DOM each time I created a dynamically created element. I was over-thinking it. Instead, all I had to do was create the event on that newly created element on the element&#039;s creation itself. Ooh, hard. I know, I know - I&#039;m brilliant!&lt;br /&gt;
&lt;br /&gt;
jQuery v1.4+ example code:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;var pickSummary = $(&#039;&lt;div&gt;&#039;, {&#039;text&#039;: &#039;Hello World!&#039;}).addClass(&#039;editable&#039;).appendTo($(&#039;body&#039;)).editable({type:&#039;textarea&#039;});&lt;/textarea&gt;Easy and simple.&lt;br /&gt;
You can see how to further use and extend Arash Karimzadeh&#039;s jQuery &lt;a href=&quot;http://arashkarimzadeh.com/index.php/jquery/7-editable-jquery-plugin.html&quot;&gt;Editable plugin&lt;/a&gt;, or if you&#039;d prefer a more popular plugin for inline editing with jQuery, there&#039;s also Mika Tuupola&#039;s &lt;a href=&quot;http://www.appelsiini.net/projects/jeditable&quot;&gt;Jeditable&lt;/a&gt; plugin. According to the comments Mika intends to add .live() support soon, but until he does this should work just fine.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;strong&gt;&quot;Why did you choose Editable over Jeditable if Jeditable is more popular?&quot;&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;
In this specific case I didn&#039;t want to submit anything back to the server on edit, and it seemed like Jeditable was all about saving back to a data store somewhere. Editable just seemed simpler for what I was working on at the moment.&lt;br /&gt;
&lt;br /&gt;
Happy programming! 
    </content:encoded>

    <pubDate>Thu, 22 Jul 2010 12:34:48 -0700</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/199-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Edit a Wordpress Article with PHP and XML-RPC</title>
    <link>http://life.mysiteonline.org/archives/198-Edit-a-Wordpress-Article-with-PHP-and-XML-RPC.html</link>
    
    <comments>http://life.mysiteonline.org/archives/198-Edit-a-Wordpress-Article-with-PHP-and-XML-RPC.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=198</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=198</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    I had created a topic discussing how to create an interface to add new posts to a Wordpress blog using PHP and XML-RPC. It was something I had needed for work. Unfortunately for many of my site visitors and readers from Google, I never had the need to edit an article, but many of them did. I no longer had a development installation of Wordpress and I don&#039;t particularly like Wordpress (due to its spaghetti like codebase).&lt;br /&gt;
&lt;br /&gt;
The people have spoken though, and I have listened. I reinstalled Wordpress to see if I could get an edit action to work. This is a two step process, you must first get the contents of the post, and then submit the edited version back to Wordpress. The tricky part here is modifying the date field.&lt;br /&gt;
&lt;br /&gt;
If you haven&#039;t read my first post on &lt;a href=&quot;http://life.mysiteonline.org/archives/161-Automatic-Post-Creation-with-Wordpress,-PHP,-and-XML-RPC.html&quot;&gt;adding a new post in Wordpress with PHP and XML-RPC&lt;/a&gt;, you&#039;ll want to read that. There I cover all of the basics you would be better off knowing before tackling an edit straight from this code (it won&#039;t make much sense otherwise).&lt;br /&gt;
&lt;br /&gt;
Using the same IXR library that I used in the post creation article, we&#039;ll use a similar approach to retrieve an article. There are two ways to get article information - if we know the ID of the article we can simply use &lt;tt&gt;metaWeblog.getPost&lt;/tt&gt;, or we can get a list of recent posts (with a maximum limit of - I believe - 15) using &lt;tt&gt;metaWeblog.getRecentPosts&lt;/tt&gt;.&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;if (!$client-&gt;query(&#039;metaWeblog.getPost&#039;,&#039;1&#039;, &#039;username&#039;,&#039;password&#039;)) {
	die(&#039;An error occurred - &#039;.$client-&gt;getErrorCode().&#039;:&#039;.$client-&gt;getErrorMessage());
}
$request = $client-&gt;getResponse();&lt;/textarea&gt;&lt;br /&gt;
A simple print_r() of $response will give me the following:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;Array
(
    [dateCreated] =&gt; IXR_Date Object
        (
            [year] =&gt; 2010
            [month] =&gt; 05
            [day] =&gt; 07
            [hour] =&gt; 01
            [minute] =&gt; 33
            [second] =&gt; 49
            [timezone] =&gt; 
        )

    [userid] =&gt; 1
    [postid] =&gt; 1
    [description] =&gt; Welcome to WordPress. This is your first post. Edit or delete it, then start blogging! WAHOO! WAHOO!
    [title] =&gt; Hello world!
    [link] =&gt; http://example.com/?p=1
    [permaLink] =&gt; http://example.com/?p=1
    [categories] =&gt; Array
        (
            [0] =&gt; Uncategorized
        )

    [mt_excerpt] =&gt; 
    [mt_text_more] =&gt; 
    [mt_allow_comments] =&gt; 1
    [mt_allow_pings] =&gt; 1
    [mt_keywords] =&gt; 
    [wp_slug] =&gt; hello-world
    [wp_password] =&gt; 
    [wp_author_id] =&gt; 1
    [wp_author_display_name] =&gt; username
    [date_created_gmt] =&gt; IXR_Date Object
        (
            [year] =&gt; 2010
            [month] =&gt; 05
            [day] =&gt; 07
            [hour] =&gt; 01
            [minute] =&gt; 33
            [second] =&gt; 49
            [timezone] =&gt; 
        )

    [post_status] =&gt; publish
    [custom_fields] =&gt; Array
        (
        )

    [sticky] =&gt; 
)
&lt;/textarea&gt;&lt;br /&gt;
As I said, the tricky part here is the date. If we want to modify the date, we need to supply the IXR_Client object an IXR_Date object. But how do you do that?  Well, looking at the IXR class code, the constructor needs to be supplied either an ISO date, or a timestamp.  Since it&#039;s easy to supply a timestamp, I&#039;ll do that for this example.&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;$newDate = new IXR_Date(strtotime(&#039;now&#039;));
$content = array(
	&#039;title&#039; =&gt; $request[0][&#039;title&#039;],
	&#039;description&#039; =&gt; $request[0][&#039;description&#039;].&#039; &lt;p&gt;I&#039;ve added this text to the end of the entry.&lt;/p&gt;&#039;,
	&#039;dateCreated&#039; =&gt; $newDate,
	&#039;categories&#039; =&gt; $request[0][&#039;categories&#039;]
);&lt;/textarea&gt;&lt;br /&gt;
I used strtotime() with &quot;now&quot; as the passed parameter so that we&#039;ll get back a timestamp for the current time. This is just an example, make it fit to your needs. I&#039;ve also put in the necessary data required for the $content variable, and used most of the variables from the previous metaWeblog.getPost request. So...now we simply call the actual query for metaWeblog.editPost:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;$published = ($request[0][&#039;post_status&#039;] == &#039;publish&#039;);
if(!$client-&gt;query(&#039;metaWeblog.editPost&#039;, $request[0][&#039;postid&#039;], &#039;username&#039;, &#039;password&#039;, $content, $published)){
	die(&#039;An error occurred editing the post - &#039;.$client-&gt;getErrorCode().&#039;:&#039;.$client-&gt;getErrorMessage());
}&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s it. metaWeblog.editPost is pretty easy as long as you have the right data being sent to it.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Note: I will NOT be indulging questions pertaining to anything beyond the scope of this article, such as custom fields or any type of plugin that modifies the standard behavior.&lt;/strong&gt; 
    </content:encoded>

    <pubDate>Sun, 09 May 2010 20:44:50 -0700</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/198-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>SWFObject 2.x and Zoomify</title>
    <link>http://life.mysiteonline.org/archives/197-SWFObject-2.x-and-Zoomify.html</link>
            <category>Web Development</category>
    
    <comments>http://life.mysiteonline.org/archives/197-SWFObject-2.x-and-Zoomify.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=197</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=197</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    &lt;a href=&quot;http://www.zoomify.com/&quot;&gt;Zoomify&lt;/a&gt; is a software company/product that allows for continuous zooming on extremely large image data (JPEG2000) by first separating the original image in to many parts, and then using Flash (and XML) to dynamically piece them together again within a viewer. It works quite well (you can see an example from their website). They have a free &quot;express&quot; version; a version that comes bundled as part of Adobe Photoshop (CS3 or above - File -&gt; Export -&gt; Zoomify); a version that allows you to modify the look and feel of the view with XML (retail product), a version that contains the FLA source code (retail), and their flagship product, the Enterprise version which allows you to house everything necessary for simplistic creation all on the server...including everything all of the other versions offer, as well as more features and the ability to simply upload images directly to the server for parsing.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/swfobject/&quot;&gt;SWFObject&lt;/a&gt; is a JavaScript utility used for dynamically (or statically assisted) inserting of Flash media to a web page. If a user does not have Flash (or the correct version), it will automatically prompt them to download and install it. If they do not have JavaScript enabled, whatever content you were originally going to replace with the JavaScript will simply show instead. It also is unobtrusive, is Adobe&#039;s recommended way of embedding Flash to a web page, and has been time-tested to cover many edge-cases of its use.&lt;br /&gt;
&lt;br /&gt;
Zoomify is a great tool to use in places where fine detail is needed to be viewed, but either a slow connection or speedy access is required to the content (plus, who wants to wait over 30 seconds for an image to load?). With working in a library, I&#039;ve found it&#039;s an &lt;strong&gt;excellent&lt;/strong&gt; tool for displaying historic images - such as digital archives. These high resolution images are not really useful in a regular web-centric view, but once you add the ability to zoom in to see detail, such as a person&#039;s face from something which was originally a 1.5&quot;x3&quot; panoramic scene - well, even I was in awe. ...and it&#039;s quick!&lt;br /&gt;
&lt;br /&gt;
The problem with Zoomify is that by default, the free tools (for download from their website, or the one included in Photoshop) export an HTML page with EMBED and OBJECT tags directly in the HTML. If you work for a local/federal government or state owned library in the US, you are legally obliged to follow standards, and the EMBED tag is not an HTML standard and therefore breaks standards compatibility. What to do? Use SWFObject - it dynamically inserts the necessary code to get your browser to render the Flash movie on the page. Unfortunately, there&#039;s little information (if any?) on getting Zoomify to work with SWFObject out there on the web. Before I discovered I had a typo in my code, I emailed Zoomify support to ask about it and they emailed me back with Adobe&#039;s own version of AC_RunActiveContent.js - however &lt;a href=&quot;http://www.adobe.com/devnet/flashplayer/articles/swfobject.html&quot;&gt;Adobe recommends the use of SWFObject&lt;/a&gt; over their own JS implementation. I intend to thank Zoomify for trying, and giving them a link to this article entry. After all, they&#039;re more specialized as Flash developers so I can&#039;t fault them and their product really does seem to be the best (perhaps they accidentally attached the wrong project archive, who knows). &lt;a href=&quot;http://www.seadragon.com/developer/silverlight/&quot;&gt;Microsoft&#039;s Seadragon&lt;/a&gt; claimed to be revolutionary, and I had already been using Zoomify for about a year, and Zoomify felt more responsive and more people use Flash. Oh well, Microsoft. It&#039;s still cool.&lt;br /&gt;
&lt;br /&gt;
Sorry for my rambling, on to some substance.&lt;br /&gt;
&lt;br /&gt;
Zoomify provides the following HTML code by default in the HTML template that it creates for you:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;&lt;OBJECT CLASSID=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; CODEBASE=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0&quot; WIDTH=&quot;400&quot; HEIGHT=&quot;400&quot; ID=&quot;theMovie&quot;&gt;
	&lt;PARAM NAME=&quot;FlashVars&quot; VALUE=&quot;zoomifyImagePath=example_img&amp;zoomifyNavigatorVisible=false&quot;&gt;
	&lt;PARAM NAME=&quot;BGCOLOR&quot; VALUE=&quot;#000000&quot;&gt;
	&lt;PARAM NAME=&quot;MENU&quot; VALUE=&quot;FALSE&quot;&gt;
	&lt;PARAM NAME=&quot;SRC&quot; VALUE=&quot;example_img/zoomifyViewer.swf&quot;&gt;
	&lt;EMBED FlashVars=&quot;zoomifyImagePath=example_img&amp;zoomifyNavigatorVisible=false&quot; SRC=&quot;example_img/zoomifyViewer.swf&quot; BGCOLOR=&quot;#000000&quot; MENU=&quot;false&quot; PLUGINSPAGE=&quot;http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash&quot;  WIDTH=&quot;400&quot; HEIGHT=&quot;400&quot; NAME=&quot;theMovie&quot;&gt;&lt;/EMBED&gt;
&lt;/OBJECT&gt;&lt;/textarea&gt;&lt;br /&gt;
So ignoring all of the classid, codebase, and other junk we don&#039;t completely care about, let&#039;s look at the actual values being passed to the browser through the PARAM tags within the OBJECT tag. These are the values we&#039;ll need to pass to SWFObject.&lt;br /&gt;
&lt;br /&gt;
SWFObject separates its value passing to two variables, &lt;tt&gt;flashvars&lt;/tt&gt; and &lt;tt&gt;params&lt;/tt&gt;. &lt;strong&gt;FlashVars&lt;/strong&gt;, found above, is its own PARAM variable, containing multiple values URL encoded. In this example, we have the variable &lt;tt&gt;zoomifyImagePath&lt;/tt&gt; with a value of &quot;example_img&quot;, and &lt;tt&gt;zoomifyNavigator&lt;/tt&gt; set to false. The navigator is a small box that hovers over your image (full opacity) showing where you&#039;re viewing within the overall aspect of the original image.  That takes care of the &lt;strong&gt;flashvars&lt;/strong&gt; values, not to the &lt;strong&gt;params&lt;/strong&gt; which is everything else. &lt;tt&gt;bgcolor&lt;/tt&gt; is, of course, the background color for the flash stage, which will be covered up by your image data, so you can optionally ignore it if you&#039;d like. &lt;tt&gt;menu&lt;/tt&gt;...to be honest I don&#039;t know what this does, I changed the values and saw no difference and even removed it.  &lt;tt&gt;src&lt;/tt&gt; is the source, or location of the Zoomify viewing flash application that is used to actually view your data. This is a relative path to your viewer file. If you will be using this script in more than a single place on your website, I strongly recommend you only use one viewer and point all of them to that single viewer.  Also notice the &lt;tt&gt;HEIGHT&lt;/tt&gt; and &lt;tt&gt;WIDTH&lt;/tt&gt; attributes to both the EMBED and OBJECT tags here. You can change them if you don&#039;t care about standards support and SWFObject, but they must match.&lt;br /&gt;
&lt;br /&gt;
So how do we set up SWFObject with the knowledge now in our hands?  Well, let&#039;s take a look at a standard (dynamic) SWFObject call.&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;swfobject.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
//class object -&gt; method call ( &quot;location of SWF&quot;, &quot;the element ID on the page you wish to replace&quot;, &quot;width&quot;, &quot;height&quot;, &quot;Minimum flash version required&quot;, 
//	&quot;path to Flash player installer/detection&quot;, &quot;any flash vars to pass&quot;, &quot;any parameters to pass&quot; );
swfobject.embedSWF(&quot;myContent.swf&quot;, &quot;myContent&quot;, &quot;300&quot;, &quot;120&quot;, &quot;9.0.0&quot;, &quot;expressInstall.swf&quot;, flashvars, params);
&lt;/script&gt;&lt;/textarea&gt;&lt;br /&gt;
So going from the example there, and the data we&#039;ve collected, it seems pretty simple! But wait, what exactly is the &lt;strong&gt;zoomifyImagePath&lt;/strong&gt;? Should that have some sort of file extension? Well, no, and that&#039;s what threw me, honestly (quite silly, really). The Flash file knows to look for the XML file in the folder that you&#039;re telling it to look in, so all you need to do is send the location of the folder (relative URL) and it&#039;ll do the rest. So let&#039;s see what that would look like:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;swfobject.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var flashvars = {
	zoomifyImagePath:&#039;example_img&#039;,
	zoomifyNavigatorVisible:&#039;false&#039;
};
var params = {
	src: &#039;example_img/zoomifyViewer.swf&#039;
};
swfobject.embedSWF(&quot;example_img/zoomifyViewer.swf&quot;, &quot;replaceMe&quot;, &quot;400&quot;, &quot;400&quot;, &quot;9.0.98&quot;, &quot;expressInstall.swf&quot;, flashvars, params);
&lt;/script&gt;
&lt;div&gt;&lt;p id=&quot;replaceMe&quot;&gt;This text should be replaced, if it is not, you have JavaScript disabled.&lt;/p&gt;&lt;/div&gt;&lt;/textarea&gt;&lt;br /&gt;
The &lt;tt&gt;flashvars&lt;/tt&gt; and &lt;tt&gt;params&lt;/tt&gt; variables expected by swfobject.embedSWF are JavaScript objects, not simple variables (or rather, variables with object notation) as the variables themselves hold variables.&lt;br /&gt;
&lt;br /&gt;
That&#039;s it. Keep in mind that the example above didn&#039;t use the &lt;tt&gt;bgcolor&lt;/tt&gt;, or &lt;tt&gt;menu&lt;/tt&gt; values. I also didn&#039;t use the &quot;attributes&quot; variable that can be passed to SWFObject where you can define the id, name, class, and align values. It&#039;s unnecessary for this example so I skipped it, as is showing a callback method (unnecessary that is).&lt;br /&gt;
&lt;br /&gt;
Mix that together with a little modal magic and you have something a little bit nicer, such as what I did in the following page:&lt;br /&gt;
&lt;a href=&quot;http://www.sspl.org/research/local_history/collections/veterans/&quot;&gt;Honoring Saratoga County Veterans&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy! 
    </content:encoded>

    <pubDate>Tue, 04 May 2010 19:28:39 -0700</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/197-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>U.S. Public Education and Technology</title>
    <link>http://life.mysiteonline.org/archives/195-U.S.-Public-Education-and-Technology.html</link>
    
    <comments>http://life.mysiteonline.org/archives/195-U.S.-Public-Education-and-Technology.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=195</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=195</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    &lt;h2&gt;&quot;Are You Smarter Than a Fifth Grader™&quot;?&lt;/h2&gt;&lt;br /&gt;
Although this cliché&#039;d phrase has definitely been overused, the premise of the show of the same name just screams volumes to me. I remember learning all of that information during my education in school. I most definitely don&#039;t remember the vast majority of it today; nor is there much reason for me to have to (save being on that show to win some money). Think to yourself: exactly what percentage of the things we learned are we truly using in our lives today? How much of it did we need to lead a fulfilling life, or to prepare us for our jobs?&lt;br /&gt;
&lt;br /&gt;
It seems that kids are simply assembly line workers from a database repository. Let&#039;s see how much generic information we can fill them up with. Not only that, but we&#039;re telling them what to learn, we&#039;re not suggesting that they learn things that pertain to their own interests, the New York State Regents diploma doesn&#039;t really mesh well with that.&lt;br /&gt;
&lt;br /&gt;
Even with the ideology of pushing as broad of a range of topics on to children so they&#039;ll know (or discover) what interests them, when we do need to know something that we learned in school, how much of that do we typically have to look up again anyway? I am here to say honestly and truthfully - I am NOT smarter than a Fifth grader.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Workforce Intelligence&lt;/h2&gt;&lt;br /&gt;
But how does that work in to technology? I might not be smarter than a fifth grader, but I can find the information much quicker than most fifth graders that I know. Why? I&#039;ve taught myself how to use computers, applications, and how to successfully navigate the internet (and which websites I should try first, second, or third).  I&#039;ll be honest in that I have had official educational &quot;training&quot; in these areas, but 85% of what I know in this field is all self-taught, and that pertained to me pre-workforce as well as what I&#039;m doing currently. However, this is me, not my entire organization.&lt;br /&gt;
&lt;br /&gt;
Many of my coworkers have something called &quot;book smarts&quot;, or &quot;social smarts&quot; (a people person), or they&#039;re able to apply knowledge logically to situations. It&#039;s interesting to watch the different types work to solve similar situations. However, out of each group, many of them are limited in their technical knowledge and experience. They were not exposed to computers in their education, and now that they&#039;re in the workforce (and have been for some time) they&#039;re lacking a serious tool for their livelihood in the workforce itself.&lt;br /&gt;
&lt;br /&gt;
Is education to blame? Continuing education? The speed of technological advances versus &lt;strong&gt;required&lt;/strong&gt; training and funding?  Perhaps it&#039;s change itself which is to blame as some people just are not good at dealing with change.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Generation Gap&lt;/h2&gt;&lt;br /&gt;
Perhaps it&#039;s actually a generation gap.  I often hear that, &quot;Kids grew up with that stuff,&quot; or, &quot;I don&#039;t need it, I can do my job without it.&quot; Although both might be true, (1)you were engrossed in it while things were changing around you, and (2)you can do it better (more efficiently) with it.  Alternatively, I&#039;ve also heard, &quot;Why do I need to know Algebra, I can use a calculator!&quot; from the younger generation. Since I am part of that younger generation, I do agree with it.  &quot;Oh no!&quot;&lt;br /&gt;
&lt;br /&gt;
Think about it: if a company&#039;s computer system goes down entirely, does the business remain open or do they close operations?  Can it be done by hand?  It sure can!  Do most managers want to take the risk of extra possibility for human error to occur? From my experience, not likely. So again I ask, what is the point? In an ever-increasing world of electronic media, answers, and communication, there&#039;s little need for advanced mathematics (algebra was a poor example, I use algebra all the time, but how about Matrices? They were fun as hell to me, like a math-based Sudoku puzzle, but I&#039;ve never used it since).  Obviously if you&#039;re going to be working as a mathematician you&#039;d need to know it, study it, learn and re-learn it, but for the vast majority of us, why are we being force-fed this extensive knowledge when we could simply look it up on-demand after getting the simpler introductions to it instead?&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Technology in the Classrooms&lt;/h2&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;No cellphones&lt;/li&gt;
&lt;li&gt;No computers&lt;/li&gt;
&lt;li&gt;No group work&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
So how exactly does this mimic preparation for the workforce?&lt;br /&gt;
Do I use my cellphone at/for work? Yes.&lt;br /&gt;
Do I use a computer at work? (lol) Yes. Only two departments don&#039;t use a computer, although every staff member has an account to access our system.&lt;br /&gt;
&lt;br /&gt;
So again, I ask, why are we removing technology in the classrooms when we should be encouraging it? Even on tests, if we are in &quot;crunchtime&quot; on the job and need to be more efficient, we may use our computers; yet children aren&#039;t allowed? Sometimes proving that you can solve the answer in more important than how you solved the answer (keeping in mind copyrights).&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;College Capstone Courses versus Apprenticeship&lt;/h2&gt;&lt;br /&gt;
Perhaps my colleges weren&#039;t as beneficial in this regard as other colleges, but the capstone courses were made to theoretically mimic a real-life situation in business. Rarely did it seem like a business. We had other &quot;departments&quot; (courses) we were working for at any given time, we only went to work 2 or 3 days out of the week, and the &quot;boss&quot; wasn&#039;t ever worried about a deadline or economic downturn. How much experience did this really give me? Well, it actually did give a lot of experience as the courses were made to mix topics learned throughout our years there in to a single unified curriculum for the semester...however, it is no where near the amount of experience that could have been gained had we had an apprenticeship instead. Being able to work under someone in the exact same field that you aspire to be a part of, see the actual causes and effects from things done (or not done), feel real pressures, and take home true lessons that couldn&#039;t be learned in a classroom. (This is all assuming the apprenticeship itself wasn&#039;t run by someone working out of their garage.)&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;Final Thoughts&lt;/h2&gt;&lt;br /&gt;
I have to at least quickly mention &quot;No Child Left Behind&quot;. I think the ideals behind it were magnificent. I think the actual implementation of it is the most dreadful thing I&#039;ve ever witnessed happen to the public educational institution in a long time. Some people just will be held back. For instance: I am terrible at remembering Computer Networking topics. It was the hardest course I&#039;ve ever taken. I managed to get a B-, and I was proud of that B-. Alternatively, I can sleep through other classes and get better than a B-. Some people are just better at certain things than others. &lt;strong&gt;If you force everyone to an equal footing, you&#039;ve already failed your students.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Personally, I favor specialized career training such as what areas in Europe are doing. If we know we are bored out of our skull over History and we just want to work on cars to be an automotive technician, LET US. We&#039;ll be better at it, and you&#039;ll be better for it!  However, we need specialized training for everyone. If only a small portion of the student body is given this opportunity, that minority will be ridiculed for being &quot;different&quot; by their peers. Yes, it&#039;s important.&lt;br /&gt;
&lt;br /&gt;
Anyhow, getting back the main point: Specialized training in schools would go a long way to realizing a better system. We should be embracing technology and the changes that come with it, not sticking to old arbitrary thoughts of, &quot;Well if I did it, you should too&quot;. I learned how to type at 120wpm by the time I was 16; you&#039;re 46, I think you should too. ...does that sound reasonable to you? No?&lt;br /&gt;
&lt;br /&gt;
Whatever the case may be, our system needs a drastic look at how it&#039;s currently being implemented, and compared closely to successful systems overseas. I support teachers and the education system itself; but it also needs an overhaul. Example: Horrible tenured teachers should not be locked in to their jobs; they should be held accountable just like anyone else. I hope some day some more fruitful changes come around from great ideas through our politicians. 
    </content:encoded>

    <pubDate>Mon, 19 Apr 2010 12:00:00 -0700</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/195-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>20Couch - A new web-based Twitter Client</title>
    <link>http://life.mysiteonline.org/archives/196-20Couch-A-new-web-based-Twitter-Client.html</link>
            <category>Software</category>
    
    <comments>http://life.mysiteonline.org/archives/196-20Couch-A-new-web-based-Twitter-Client.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=196</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=196</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    Note: My review is of version 1.02, and the current version is already at either 1.06 or 1.07, fixing a few of the issues I had described in my discussion.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve had the luxury recently to test out an application recently built to make it easier to follow along with our Twitter conversations.  It&#039;s taken me about 4 weeks to finally get my review up on the web. Why? Because video/screen capture recording programs suck, that&#039;s why. After trying 3 different applications and trying to fix the video from one of them after-the-fact (which I took 2 days alone trying to fix it), I gave up and downloaded the trial of Camtasia Studio.  Ironically, Camtasia crashed on me during post-processing. Thankfully I saved the project moments before.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Anyway...&lt;/strong&gt; I did a video review so that I could talk freely for as long as I wanted without posting 20 odd pictures and causing huge scrolling. Unfortunately because the video was 20 minutes long, I couldn&#039;t upload it to Youtube (I couldn&#039;t get Camtasia to recognize my Youtube account information to upload it for me anyway), so it&#039;s currently an external link hosted on my own website.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://mysiteonline.org/videos/20couch/20couch.html&quot;&gt;Check it out here!&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Update:&lt;/strong&gt; I&#039;m happy to announce that since I&#039;ve skipped 5 minor versions (1.02 -&gt; 1.07), 20Couch now has the ability to mark posts as read by a set timeframe:&lt;br /&gt;
- all&lt;br /&gt;
- older than 6 hours&lt;br /&gt;
- older than a day&lt;br /&gt;
- older than 2 days&lt;br /&gt;
- older than a week&lt;br /&gt;
&lt;br /&gt;
Still no individual markings, but this is loads better. Also, this week was a code-storm week for Matt, developing one minor release each day of the week. Thanks for all of the hard work, Matt. Might I suggest some documentation on plugin and skin support?  &lt;img src=&quot;http://life.mysiteonline.org/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; 
    </content:encoded>

    <pubDate>Thu, 15 Apr 2010 07:56:26 -0700</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/196-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Style Switcher with jQuery</title>
    <link>http://life.mysiteonline.org/archives/194-Style-Switcher-with-jQuery.html</link>
            <category>Web Development</category>
    
    <comments>http://life.mysiteonline.org/archives/194-Style-Switcher-with-jQuery.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=194</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=194</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    While developing an Adobe AIR application using CSS/HTML/JS, I decided I wanted to allow for templating of the application. The default template has the ability to switch view states (horizontal, or vertical). Since I&#039;m building the application with CSS, HTML and JavaScript (with jQuery), I thought that in order to create this effect, I&#039;d use a style switcher.&lt;br /&gt;
&lt;br /&gt;
I then thought...hey, I wonder if this would work in browsers other than the WebKit version I&#039;ve been testing under?!&lt;br /&gt;
&lt;br /&gt;
It worked in Firefox 3.6.3, Opera 10.51, Chrome 5.0.342.8 beta, and Internet Explorer 6 (although my test CSS was broken in IE6). Opera 10.50 (tested first) had an issue with loading the secondary CSS on first attempt, but had it cached after that. 10.51 loaded everything just fine, but I can&#039;t be sure if it was still cached from the attempt with 10.50, or if 10.51 fixed an unknown issue to help fix it.&lt;br /&gt;
&lt;br /&gt;
So, how did I do it?&lt;br /&gt;
&lt;br /&gt;
Back in the day, Firefox had a little-known and not-often-used feature that allowed web-designers to incorporate multiple CSS layouts/designs right in the site, and the users could choose on-the-fly which UI they&#039;d like to use (on each session) by going to &lt;u&gt;V&lt;/u&gt;iew, Page St&lt;u&gt;y&lt;/u&gt;le, and then choose the style you wanted - if more than a single style was available from within the code. To give users this option, you include secondary stylesheets after the first, but in the link element, you specify that it&#039;s an &lt;strong&gt;alternative&lt;/strong&gt; stylesheet, as so:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;html&quot;&gt;&lt;link media=&quot;screen&quot; title=&quot;horizontal&quot; href=&quot;http://life.mysiteonline.org/css/horiz-style.css&quot; type=&quot;text/css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;link media=&quot;screen&quot; title=&quot;horizontal&quot; href=&quot;http://life.mysiteonline.org/css/vert-style.css&quot; type=&quot;text/css&quot; rel=&quot;alternative stylesheet&quot; /&gt;&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
I originally started with this concept and tried swapping out the primary for the secondary and vice versa.  Unfortunately this had some issues during development that may have been related to some other problems, but I dropped this attempt (but if Opera has a problem with caching, this route would solve that).  Instead, I simply changed the &lt;strong&gt;href&lt;/strong&gt; property of the link element. It was easier to target with jQuery without using URL matching/REGEX, or arbitrary naming of the &lt;strong&gt;rel&lt;/strong&gt; property.&lt;br /&gt;
&lt;br /&gt;
Anyhow, here&#039;s the code that I used (in this example, I am clicking on a button with ID of &quot;switch&quot;):&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;//do the CSS style toggle change
$(&#039;#switch&#039;).bind(&#039;click&#039;, function(e){
	$(&#039;#application&#039;).fadeOut(200,function(){
		var cssStyle = $(&quot;link[media=&#039;screen&#039;][href]&quot;).attr(&#039;href&#039;);
		if(cssStyle == &#039;/css/vert-style.css&#039;){
			$(&quot;link[media=&#039;screen&#039;]&quot;).attr(&#039;href&#039;, &#039;/css/horiz-style.css&#039;);
		}else{
			$(&quot;link[media=&#039;screen&#039;]&quot;).attr(&#039;href&#039;, &#039;/css/vert-style.css&#039;);
		}
		$(&#039;#application&#039;).fadeIn(200);
	});
});&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
What this is doing:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Bind an onClick event to the element with an id of &quot;switch&quot;&lt;/li&gt;
&lt;li&gt;find the LINK element of a media type of screen that contains an href property and assign it to the variable &quot;cssStyle&quot;&lt;/li&gt;
&lt;li&gt;fade out the application (or a website wrapper?)&lt;/li&gt;
&lt;li&gt;swap the CSS style for another (inline), depending on what&#039;s currently loaded&lt;/li&gt;
&lt;li&gt;fade the application (or website wrapper) back in with new style&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
...and we now have our style swapped out (quickly and easily) for an entirely new style. 
    </content:encoded>

    <pubDate>Wed, 07 Apr 2010 07:41:52 -0700</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/194-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Adobe AIR 2.0</title>
    <link>http://life.mysiteonline.org/archives/192-Adobe-AIR-2.0.html</link>
            <category>Programming</category>
    
    <comments>http://life.mysiteonline.org/archives/192-Adobe-AIR-2.0.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=192</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=192</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    As I was redesigning the interface to my &quot;&lt;a href=&quot;http://life.mysiteonline.org/archives/173-Reference-Stat-Tracking-UI-Almost-Complete.html&quot;&gt;RefStat&lt;/a&gt;&quot; (Reference Statistics Tracking) application, I came across &lt;a href=&quot;http://cookbooks.adobe.com/post_WebKit_with_the_SquirrelFish_Extreme_AIR_2_0-16750.html&quot;&gt;a web page&lt;/a&gt; that claimed support for CSS3 in Adobe AIR, so immediately began creating the new interface using Safari 4 as a testing ground for my UI. After &lt;em&gt;almost&lt;/em&gt; completing it, it was brought to my attention that this would not be available until version 2 of AIR was released. I am still using v1.5.x.  Not awesome.&lt;br /&gt;
&lt;br /&gt;
The good news however, is that there is a public release of AIR 2.0 Beta 2 for download, which gives me hope that the stable release is not too far away.  Since I am also waiting on an update to the tooltip library I am using, this wait hopefully won&#039;t be too long after I am ready for it.&lt;br /&gt;
&lt;br /&gt;
New features in Adobe AIR 2.0 that I am looking forward to:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;UDP packet support (interfacing with some game servers)&lt;/li&gt;
&lt;li&gt;TCP/open socket listening (acts as server)&lt;/li&gt;
&lt;li&gt;~30% more efficient than AIR 1.x&lt;/li&gt;
&lt;li&gt;WebKit version updated to Safari 4.0.3 equivalent&lt;/li&gt;
&lt;li&gt;(Better?) Printer support&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Features planned for my redesigned UI (v2):&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;8+ more buttons? 800x600 or less resolution? No problem anymore! The buttons wrap and the app scales.&lt;/li&gt;
&lt;li&gt;Templates/Skinning support&lt;/li&gt;
&lt;li&gt;No more color coded buttons (in default templates)&lt;/li&gt;
&lt;li&gt;Redone UI in my template won&#039;t have the hover bug for tooltips (mouseout from inside AIR app, thinks you&#039;re still hovering)...AIR 2.0 might fix this on its own.&lt;/li&gt;
&lt;li&gt;On-the-fly template switching&lt;/li&gt;
&lt;li&gt;Refactored object class&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
I might add a graph rendering to display current stats for the day too as I&#039;ve been asked for it, but it wasn&#039;t meant to view reports, only create the data used for them. This seems less important to me than the user interface and code updates though (template/skinning was so users could switch between horizontal and vertical displays depending on their desktop icon arrangements or resolution).&lt;br /&gt;
&lt;br /&gt;
Current mockup (without tooltip) rendered by Safari 4.0.5 for Windows.&lt;br /&gt;
&lt;div class=&quot;serendipity_imageComment_center&quot; style=&quot;width: 600px&quot;&gt;&lt;div class=&quot;serendipity_imageComment_img&quot;&gt;&lt;img class=&quot;serendipity_image_center&quot; width=&quot;600&quot; height=&quot;100&quot; src=&quot;http://life.mysiteonline.org/uploads/refstats.jpg&quot; alt=&quot;&quot;  /&gt;&lt;/div&gt;&lt;div class=&quot;serendipity_imageComment_txt&quot;&gt;Reference Statistics Tracker for SSPL v2&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
I never claimed to be a UI designer. &lt;img src=&quot;http://life.mysiteonline.org/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; The handles on the left/right sides are &quot;grip&quot; or handle areas in order to move the application. The resize/change template button is not yet implemented in this template (though all controls would be in the orange group). The notepad is the new feedback button (in place of the &quot;T|&quot; from before), and of course minimize and close. The image shows a hover state, not a mouse-down state.  The colors are meant to be similar to our library&#039;s &quot;official&quot; color (#621E27 or close variations). 
    </content:encoded>

    <pubDate>Fri, 19 Mar 2010 10:27:54 -0700</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/192-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>jQuery Printed Footer Links</title>
    <link>http://life.mysiteonline.org/archives/191-jQuery-Printed-Footer-Links.html</link>
            <category>Web Development</category>
    
    <comments>http://life.mysiteonline.org/archives/191-jQuery-Printed-Footer-Links.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=191</wfw:comment>

    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=191</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    I was randomly perusing the web and stumbled across an older interesting &lt;a href=&quot;http://www.alistapart.com/articles/improvingprint/&quot;&gt;List Apart article&lt;/a&gt; (September 19, 2005 to be exact).  In it, the author used JavaScript to create a list of all links found on the page, and then create a footer with a footnote-like list. I was using simple CSS to display the URL of the hyperlink in print display media, but that doesn&#039;t work in some browsers (IE), and worse off it can really mess up the visual order of the page.&lt;br /&gt;
&lt;br /&gt;
Inspired by the article&#039;s intentions, I decided to use some jQuery to whip up a similar solution &lt;em&gt;and I took the opportunity to use jQuery 1.4&#039;s new syntax for object creation&lt;/em&gt; (so this is 1.4 code only - see comments for a 1.3.x solution).  Differences? I exclude hyperlinks set to the hash symbol (#) which shouldn&#039;t be found anyway (graceful degredation people!), &quot;mailto&quot; links, and I don&#039;t find link element&#039;s citations (blockquote &quot;cite&quot; property).  I also believe his script would grab image information, but I&#039;m not entirely sure, mine only searches hyperlinks.  I also opted not to exclude listings of duplicate hyperlink values. If it&#039;s found twice, it lists it in the footer twice. Less JS processing, and more clear to the visitor (in my opinion).&lt;br /&gt;
&lt;br /&gt;
Expected Issues: It requires JavaScript (and the jQuery library included on your page). If JavaScript is enabled but CSS is disabled, the hidden content will be visible to the user.&lt;br /&gt;
&lt;br /&gt;
On to the code!&lt;br /&gt;
&lt;br /&gt;
First thing&#039;s first, we should find the links in our code that we&#039;d like to target.  For &lt;strong&gt;my&lt;/strong&gt; situation, I have a content class defined on my page for all content, and the column that contains the actual body is called &quot;.col2_right&quot; (yes, I know, ignore the fact of the poor naming scheme).  So, in jQuery, we&#039;re going to target all hyperlinks found in the col2_right and content classes, but we don&#039;t want to include links to hashes or mailto links. I&#039;ve also removed listing to nofollow links, but that is my choice (probably not a good one, but I digress).&lt;br /&gt;
&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;var links = $(&#039;.col2_right.content a[href]:not([href^=#],[href^=mailto],[rel=nofollow])&#039;);&lt;/textarea&gt;&lt;br /&gt;
We&#039;ll also need some sort of container to keep these found links wrapped in.  I chose to use a fieldset and legend, you could just as easily create a DIV and a H2 or other tags for your own purposes. I also want to create an ordered list to match the found hyperlinks.&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;var footnotesWrapper = $(&#039;&lt;fieldset&gt;&#039;, {
	css: {
		clear: &#039;both&#039;
	}
}).addClass(&#039;print_only&#039;);
var footnotesLabel = $(&#039;&lt;legend&gt;&#039;, {
	text: &#039;Website Addresses Used in the Document&#039;
}).appendTo(footnotesWrapper);

//create an OL to hold the footnotes
var footnoteList = $(&#039;&lt;ol&gt;&#039;).appendTo(footnotesWrapper);&lt;/textarea&gt;&lt;br /&gt;
Here comes the real center, meaty goodness of the script: looping through our list of found hyperlinks, creating a little notification text next to the hyperlink&#039;s text, and add the hyperlink URL itself to the footnote section in the ordered list as a list item.&lt;br /&gt;
&lt;br /&gt;
We use jQuery&#039;s each() method to loop through the items in the array, grab the link&#039;s URL so that we can do some testing on it, and modify it&#039;s value for inclusion in to the footnotes. Some links may be relative URLs, but that doesn&#039;t mean much to someone who doesn&#039;t know what a relative URL is. In fact, it would probably confuse me too at first. I happen to know that my domain forces www for the subdomain so I&#039;ve added that in, fix that up as you like. I then create a span tag to hold the associated footnote number (the ListApart article used a superscript tag, I found regular text is more easily readable), add a class to it so it&#039;s only visible when printed, and create my list item element with the URL from our link, and place those elements in to the document in the appropriate places with the appendTo jQuery function.&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;$.each(links, function(i){
	var linkText = $(this).text();
	var linkValue = $(this).attr(&#039;href&#039;);
	if(linkValue.substring(0,1) === &#039;/&#039;){
		linkValue = &#039;http://www.&#039;+document.location.host + linkValue;
	}
	//create element to hold span with class to hide except on print
	var newElement = $(&#039;&lt;span&gt;&#039;, {
		text: &#039; [&#039;+ ++i +&#039;]&#039;
	}).addClass(&#039;print_only&#039;).appendTo($(this));

	var listEntry = $(&#039;&lt;li&gt;&#039;, {
		text: linkValue
	}).appendTo(footnoteList);
});&lt;/textarea&gt;&lt;br /&gt;
Last but not least, we append our entire footnote to the end of our content body section.  The full code is below.&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript&quot;&gt;$(document).ready(function(){
	//get the container and target
	var links = $(&#039;.col2_right.content a[href]:not([href^=#],[href^=mailto],[rel=nofollow])&#039;);

	if($(links).length){
		//create a container and heading for the footnotes
		var footnotesWrapper = $(&#039;&lt;fieldset&gt;&#039;, {
			css: {
				clear: &#039;both&#039;
			}
		}).addClass(&#039;print_only&#039;);
		var footnotesLabel = $(&#039;&lt;legend&gt;&#039;, {
			text: &#039;Website Addresses Used in the Document&#039;
		}).appendTo(footnotesWrapper);

		//create an OL to hold the footnotes
		var footnoteList = $(&#039;&lt;ol&gt;&#039;).appendTo(footnotesWrapper);

		$.each(links, function(i){
			var linkText = $(this).text();
			var linkValue = $(this).attr(&#039;href&#039;);
			if(linkValue.substring(0,1) === &#039;/&#039;){
				linkValue = &#039;http://www.&#039;+document.location.host + linkValue;
			}
			//create element to hold span with class to hide except on print
			var newElement = $(&#039;&lt;span&gt;&#039;, {
				text: &#039; [&#039;+ ++i +&#039;]&#039;
			}).addClass(&#039;print_only&#039;).appendTo($(this));

			var listEntry = $(&#039;&lt;li&gt;&#039;, {
				text: linkValue
			}).appendTo(footnoteList);
		});

		// append the heading and &lt;ol&gt; to the target
		$(&#039;.col2_right.content&#039;).append(footnotesWrapper);
	}
});&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
Note the added &quot;if&quot; statement to check the length of the links variable. If it is empty, we did not find any links and don&#039;t want to create any extra markup when printing the page.&lt;br /&gt;
&lt;br /&gt;
Oh, and the CSS: &quot;.print_only { display:none; }&quot; This should be placed in your normal style sheet, and leave it out from your print style sheet. If you don&#039;t have a print style sheet, extend it a bit: @media print { .print_only { display:none; } }&lt;br /&gt;
&lt;br /&gt;
Note: Thanks to Stiles to provide some fixes and compatibility changes for jQuery 1.3.x. 
    </content:encoded>

    <pubDate>Mon, 08 Mar 2010 11:52:51 -0800</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/191-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Website Render Time with PHP &gt;= 5.1</title>
    <link>http://life.mysiteonline.org/archives/190-Website-Render-Time-with-PHP-5.1.html</link>
            <category>PHP</category>
    
    <comments>http://life.mysiteonline.org/archives/190-Website-Render-Time-with-PHP-5.1.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=190</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=190</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    In CakePHP v1.3.x, there will no longer be an automatic dump of tons of information (probably because the DebugKit plugin can handle all of that information for us) when in debug mode. However, in my non-CakePHP websites, and even in my Cake websites, I have become accustomed to viewing the source to see a full render time for the page in an HTML comment.  Thanks to the help of &quot;jnay&quot; over at &lt;a href=&quot;http://cakeqs.org/eng/questions/view/what_do_i_set_in_the_controller_to_send_total_render_time_to_the_view&quot;&gt;CakeQs.org&lt;/a&gt;, I&#039;ve found out about a new (as of PHP 5.1) $_SERVER variable argument called &quot;REQUEST_TIME&quot;.  It holds the UNIX timestamp of the initiation of the call.&lt;br /&gt;
&lt;br /&gt;
By using this variable, along with the optional boolean argument for microtime (as of PHP 5.0.0), we can determine the HTML render time of our application with the following calculation in either our footer view/template, or controller (preferably in the last possible iteration of your project&#039;s render):&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot;&gt;&lt;?php
	echo microtime(true) - $_SERVER[&#039;REQUEST_TIME&#039;];
?&gt;&lt;/textarea&gt;&lt;br /&gt;
The echo is optional and used only as an example here; it simply depends on how you use the calculation in your script(s)/framework(s). This is much easier than starting the timer in the header and calculating the difference in the footer like I had to do in the PHP 4 days!&lt;br /&gt;
&lt;br /&gt;
Remember, this is only for trivial estimations and comparisons. If you need to thoroughly evaluate your script(s) for time efficiency you should be using something else, such as &lt;a href=&quot;http://xdebug.org/&quot;&gt;Xdebug&lt;/a&gt; and a form of CacheGrind for your choice of OS. 
    </content:encoded>

    <pubDate>Tue, 02 Mar 2010 08:35:01 -0800</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/190-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>YSlow: Getting a better score and a faster site.</title>
    <link>http://life.mysiteonline.org/archives/189-YSlow-Getting-a-better-score-and-a-faster-site..html</link>
            <category>Web Development</category>
    
    <comments>http://life.mysiteonline.org/archives/189-YSlow-Getting-a-better-score-and-a-faster-site..html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=189</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=189</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    I decided that it was finally time I took a serious look at increasing the YSlow score for our websites. I was under the impression that browsers would automatically cache (by default anyway) certain graphic elements to save on bandwidth, but our staff website has a repeating background image for a left hand navigation bar, and it would disappear for a fraction of a second while reloading the other page; this told me that something was not right, and YSlow might be the answer I was looking for (and that my PHP framework of choice was not to blame).&lt;br /&gt;
&lt;br /&gt;
YSlow:&lt;br /&gt;
Initial Score: 67&lt;br /&gt;
&lt;br /&gt;
I choose the smallest size images exported from Photoshop, and if I ever use a PNG, I use a great tool called &quot;&lt;a href=&quot;http://benhollis.net/software/pnggauntlet/&quot;&gt;PNGGuantlet&lt;/a&gt;&quot; (Windows only) which compresses PNGs while also removing the alpha channel problems that make PNGs appear with different colors than they were intended to.  I also have compressed my main JS file, and CSS file(s). All XHTML should be valid (unless I updated a link and forget to escape an ampersand), the DOCTYPE is listed, character set is given, and all non-background images contain height and width properties.  Oh, I also have a default favicon.ico file.  These are all good recommendations to do regardless, and in doing so YSlow gave me a pretty decent score (albeit, not that great if it was a test in school).&lt;br /&gt;
&lt;br /&gt;
Two modifications to YSlow&#039;s scoring:&lt;br /&gt;
1. I am not Amazon. I don&#039;t necessarily need a CDN for my content.&lt;br /&gt;
2. I don&#039;t need a subdomain to house my CSS, JS, and images. If I end up storing videos, that already has a subdomain set up and ready.&lt;br /&gt;
&lt;br /&gt;
Therefore, I modified YSlow&#039;s grading scheme. To do so, there is a dropdown menu to the right of the 4 tabs in the YSlow toolbar, it is labelled &quot;YSlow(V2)&quot;. Click the &quot;Edit&quot; button to the immediate right of that.  In my scheme, I disabled &quot;Use a Content Delivery Network (CDN)&quot; and &quot;Use cookie-free domains&quot;. You cannot overwrite the rule set, so you have to save it as something else, I named mine &quot;SSPL&quot; since that is the website domain that I care about (for work). Different websites have different criteria, so it only makes sense to name it something related to the website you are concerned about. Go through and uncheck what you don&#039;t believe applies to you. If you&#039;re uncertain, leave it checked.  This little configuration raises my grade up already - that was easy.&lt;br /&gt;
&lt;br /&gt;
Here are the .htaccess rules I&#039;ve added to raise my own score, what they&#039;re for and why I chose to make them:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;plain&quot;&gt;# Optimization settings
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript text/css application/javascript text/json application/json
Header unset ETag
FileETag None
ExpiresActive On
ExpiresDefault &quot;modification plus 10 years&quot;&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
Enable GZip&#039;ing of components:&lt;br /&gt;
The AddOutputFilterByType DEFLATE [list of mimetypes] was the command I used to gzip the particularly listed files that have such a MIME-Type: html, txt, js, css, js (variation), json, json (variation). Some browsers read JSON and JavaScript as an application mime-type whereas others read it as a text type, I figured I would simply cover my bases. Although these are ASCII types, you could just as easily gzip binary types, such as GIF, JPG, or PDF (though theoretically they should already be compressed and you&#039;re just adding extra work for the server).&lt;br /&gt;
&lt;br /&gt;
Configure ETags:&lt;br /&gt;
From what I have read, ETags are a mixed breed. They can have some benefits, but they can also have some detractions. Again, considering that I&#039;m not Amazon and I will be enabling the Expires heading, I opted to simply disable ETags. You can disable ETags in Apache under an .htaccess file with the unset rule above, along with the FileETag None to cover most supporting browsers (one would hope). I wasn&#039;t able to find any examples on how to properly &quot;configure&quot; ETags so that YSlow would not complain other than to simply turn them off. ETags, from what I&#039;ve read, are a variation on telling the browser to cache certain files in a certain manner, but it doesn&#039;t work on any website that is run on multiple servers for the same content. Either way, I opted for the Expires heading which made ETags rather redundant from what I could tell.&lt;br /&gt;
&lt;br /&gt;
Enabling an Expires Heading:&lt;br /&gt;
It appears that in Apache, by default, Expires headings are disabled, and just like mod_rewrite, you must explicitly tell Apache that you wish to use it, so the first thing you have to do is turn it on: &quot;ExpiresActive On&quot;. Once that is done, there are a few ways to set the expiry time; I opted to use a human readable implementation, and YSlow expects a &quot;far future&quot; date (from the date last modified). As one of my sites is currently built with HTML files pulling in a template, the original files won&#039;t typically be modified for a long time, so I had to make my future date a FAR future date (10 years from last modification) - your experience may vary. For further information on Expires, take a look at the &lt;a href=&quot;http://httpd.apache.org/docs/2.0/mod/mod_expires.html&quot;&gt;Apache documentation for mod_expires&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Additional speed enhancements:&lt;br /&gt;
I recently read that if you have a framework that may take some time figuring out what data must be displayed prior to even getting it to the server, it may be a good idea to flush the buffer so that the data that &lt;strong&gt;can&lt;/strong&gt; be sent to the browser can be sent prior to everything else - such as the document head which contains the page title, CSS, and sometimes JS. That way, while the rest of the page is being rendered by the server, the JS/CSS has time to download. This is actually why I decided to leave my JS at the top of my website rather than placing it in the footer. I live by graceful degredation, but if the page loads before the JS does, it can also cause a screen flicker which is against accessibility guidelines for HTML. In this case, it was possible speed for accessibility - I choose accessibility. I personally really don&#039;t want me, or my client(s) getting sued for accessibility issues because &quot;Oh hey, it loads a second faster now!&quot;. If you had an interactive rich website such as Facebook or MySpace, I&#039;d imagine you&#039;d have to place JS in the footer and have a separate, accessible domain for others...if that&#039;s even easily possible. Anyway, what I did with flushing the output buffer was to (in PHP) modify my template file, I called PHP&#039;s &lt;strong&gt;flush()&lt;/strong&gt; function after the closing HEAD tag in the HTML template file.&lt;br /&gt;
&lt;br /&gt;
Anyway, with those small tweaks and tricks, I was able to get my score up to 96. I have a B in 3 categories: &lt;br /&gt;
1. Expires header issue (CDN of ajax.googleapis.com, it won&#039;t recognize my CDN) as a CDN has a non-far future expiration date in the called JS file.&lt;br /&gt;
2. Minify CSS and JS - it is minified, so I&#039;m not sure what it wants from me. The filesize is probably too large for an A.&lt;br /&gt;
3. Put JavaScript at the Bottom - I already explained why I don&#039;t want to do this, but I&#039;ve left the rule in anyway.&lt;br /&gt;
&lt;br /&gt;
Now my site seems to be a bit more responsive, and the background image I mentioned before no longer disappears and reappears (unless I press refresh really, really fast, confusing the browser&#039;s cache I guess). 
    </content:encoded>

    <pubDate>Sun, 28 Feb 2010 14:06:05 -0800</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/189-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Cassie Print Station - Automatically Close the Window</title>
    <link>http://life.mysiteonline.org/archives/188-Cassie-Print-Station-Automatically-Close-the-Window.html</link>
            <category>Programming</category>
    
    <comments>http://life.mysiteonline.org/archives/188-Cassie-Print-Station-Automatically-Close-the-Window.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=188</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=188</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    Cassie is a PC Reservation Management system software built for libraries, or other venues that wish to offer multiple PCs for the public to use. It also has a print management station.  Unfortunately, as of the current version, when a user goes to view their own print jobs, their account window stays active &quot;forever&quot; until they, or someone else clicks on the &quot;Close&quot; button.  When using with a JAMEX corporation coinbox, it also doesn&#039;t give the user their change until the window is closed (insert $1.00 for a $0.60 charge, it won&#039;t expell the $0.40 until the window is closed).&lt;br /&gt;
&lt;br /&gt;
This is a bit of a problem.&lt;br /&gt;
&lt;br /&gt;
I&#039;ve used AutoIT, an automation scripting language, to automate the process of a user clicking on the close button. The makers of Cassie didn&#039;t make it easy though, I was unable to detect the actual button, thankfully ALT+F4 worked (ESC worked until the JAMEX portion was added, for some reason it stopped working afterward).&lt;br /&gt;
&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;plain&quot;&gt;#include &lt;Timers.au3&gt;

;declare variables
$idletime = 0;
$seconds_to_wait = 45;
$action_time = 1000 * $seconds_to_wait;

while 1
	$idletime = _Timer_GetIdleTime();
	If $idletime &gt;= $action_time Then
		WinWait(&quot;[CLASS:#32770; TITLE:Show Print Jobs]&quot;);
		If Not WinActive(&quot;[CLASS:#32770; TITLE:Show Print Jobs]&quot;) Then WinActivate(&quot;[CLASS:32770; TITLE:Show Print Jobs]&quot;);
		WinWaitActive(&quot;[CLASS:#32770; TITLE:Show Print Jobs]&quot;);
		Send(&quot;!{F4}&quot;);	issues an ALT+F4 command via mimicked keyboard input
	EndIf
	Sleep(100);			wait 100 milliseconds before checking again
WEnd&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
This uses the included Timers.au3 file to do most of the dirty work in detecting an idle state. If the computer is left idle for 45 seconds, it will issue ALT+F4 and close the window. ALT+F4 cannot close the application itself in this instance (and won&#039;t be issued unless that window exists and is active anyway).  Although it checks every 100 milliseconds and runs at all times that the computer is turned on, I tested the resources it takes up...it was &lt;em&gt;barely&lt;/em&gt; noticeable on an old P4 @ 2.80 GHz w/2.86 GB RAM (my work PC).  This application (once compiled with AutoIT) should be placed in the Windows&#039; Startup folder (or a respective registry key). 
    </content:encoded>

    <pubDate>Fri, 19 Feb 2010 20:05:48 -0800</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/188-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Enabling SSL (HTTPS) via htaccess Only if Matching a Specific Domain</title>
    <link>http://life.mysiteonline.org/archives/187-Enabling-SSL-HTTPS-via-htaccess-Only-if-Matching-a-Specific-Domain.html</link>
            <category>Web Development</category>
    
    <comments>http://life.mysiteonline.org/archives/187-Enabling-SSL-HTTPS-via-htaccess-Only-if-Matching-a-Specific-Domain.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=187</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=187</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    I had a momentary stumble today that I (somehow) couldn&#039;t get through my head. Perhaps it&#039;s just because it&#039;s been so long since I&#039;ve worked with mod_rewrite, but regardless of that, here&#039;s the situation and the solution:&lt;br /&gt;
&lt;br /&gt;
&quot;The Situation&quot; said that the situation is:&lt;br /&gt;
I had multiple conditions that needed to be met before a rule should be run, otherwise it should be ignored.&lt;br /&gt;
I am running (and require) SSL on my production server.&lt;br /&gt;
I am &lt;strong&gt;not&lt;/strong&gt; running SSL on my development box.&lt;br /&gt;
I didn&#039;t want multiple .htaccess files in my SVN repository.&lt;br /&gt;
&lt;br /&gt;
The solution:&lt;br /&gt;
&quot;Duh.&quot; Multiple RewriteCond in a row (separated by a newline) all must be met before the RewriteRule is run.&lt;br /&gt;
&lt;br /&gt;
The resulting .htaccess took the following form:&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;plain&quot;&gt;&lt;IfModule mod_rewrite.c&gt;
    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteCond %{HTTP_HOST} ^employees\.sspl\.org [NC]
    RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
&lt;/IfModule&gt;&lt;/textarea&gt;&lt;br /&gt;
The last 3 lines dealing with rewrite in my .htaccess file are related to the code library I&#039;m using, and are not pertinent to the problem here.  The important lines are as follows:&lt;br /&gt;
&lt;strong&gt;RewriteCond %{HTTPS} !=on&lt;br /&gt;
RewriteCond %{HTTP_HOST} ^staff\.sspl\.org [NC]&lt;br /&gt;
RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
The first condition tests to see if SSL (https protocol) is not being used in the request.&lt;br /&gt;
The second condition tests that the domain&#039;s host is &quot;employees.sspl.org&quot; (URL changed to protect the innocent).&lt;br /&gt;
If both tests pass, then I redirect the user to the host (and path &quot;/$1&quot;) while using the https protocol (SSL).  Done. 
    </content:encoded>

    <pubDate>Thu, 18 Feb 2010 09:19:08 -0800</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/187-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Interesting Links from the Web - January 2010 Edition (Part 2)</title>
    <link>http://life.mysiteonline.org/archives/186-Interesting-Links-from-the-Web-January-2010-Edition-Part-2.html</link>
            <category>iTechnology</category>
    
    <comments>http://life.mysiteonline.org/archives/186-Interesting-Links-from-the-Web-January-2010-Edition-Part-2.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=186</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=186</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    Twitter can be a real boon for learning new things and finding interesting little projects so long as you manage to follow the right people.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page&quot;&gt;Sticky Footer: Alternative Approach&lt;/a&gt; - This takes an alternative approach using only a single conditional statement for IE and supports IE5.5+, with 100% valid CSS and HTML&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.zenfulcreations.com/resources/worksheets/design_contract.htm&quot;&gt;Design Contract Template&lt;/a&gt; - A template for contractual jobs in design, alter to your own use (quite verbose)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://designshack.co.uk/articles/css/15-tips-for-designing-terrific-tables&quot;&gt;15 Tips for Designing Tables&lt;/a&gt; - A nice resource on using CSS and JS to markup and add interaction to your tables, a nice new take on it with good examples&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://m.sixrevisions.com/user-interface/rich-text-editors-for-2010-and-beyond/&quot;&gt;A review of Rich Text Editors&lt;/a&gt; - Not just your grandma&#039;s WYSIWYG Editor...great thorough review&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://jilion.com/sublime/video&quot;&gt;An HTML5 Video Player&lt;/a&gt; - Created with JavaScript and HTML5 markup; no Flash here folks!&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.microsofttranslator.com/Widget/?ref=MSTWidget&quot;&gt;Microsoft&#039;s Translator Widget&lt;/a&gt; - This thing is the coolest translator I think I&#039;ve ever seen. It loads the translated version progressively via AJAX without any new page load -- with a loading bar to boot!&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.microsofttranslator.com/Widget/?ref=MSTWidget&quot;&gt;Free SEO Toolkit for IIS&lt;/a&gt; - I don&#039;t use IIS, but for those that do, this would be an enormous help, watch the video to see (good to watch even if you don&#039;t use IIS)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.appsheriff.com/web-apps/script/dygraphs-create-interactive-zoomable-charts/&quot;&gt;Dygraphs&lt;/a&gt; - Interactive, zoomable, plottable, QUICK JavaScript-based graphing library - it might give Highcharts.js a run for its money on line graphs (it&#039;s basically all this does, unfortunately)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://icondock.com/free/vector-social-media-icons&quot;&gt;Vector Social Media Icons&lt;/a&gt; - I&#039;m not usually one to be excited enough about icons to tell people about them, but the fact that the author supplied two versions of the icons in vector format is pretty darn cool (32x32 and 16x16; 32x32 never scales well to 16x16 size, and 16x16 size is made especially for that size and doesn&#039;t look good stretched out)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.awayback.com/revised-font-stack/&quot;&gt;Revised Font Stack&lt;/a&gt; - Looking for more fonts to use in your CSS without requiring @font-face or sIFR?  OS&#039;s have updated their default font base, check here to see what more options us web developers might have nowadays&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://jqtouch.com/&quot;&gt;jQTouch&lt;/a&gt; - &quot;A jQuery plugin for mobile web development on the iPhone, iPod Touch, and other forward-thinking devices.&quot; Check out the demo, it&#039;s sick...in the good sense.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://freeappaday.com/&quot;&gt;Free App A Day.com&lt;/a&gt; - For all you iPod Touch and iPhone users, check out this site for some free apps!  (Don&#039;t say I never gave you anything!) 
    </content:encoded>

    <pubDate>Fri, 05 Feb 2010 19:06:50 -0800</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/186-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Server Load, Take 2</title>
    <link>http://life.mysiteonline.org/archives/185-Server-Load,-Take-2.html</link>
            <category>PHP</category>
    
    <comments>http://life.mysiteonline.org/archives/185-Server-Load,-Take-2.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=185</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=185</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    So I worked on the CakePHP plugin for Prowl a bit more, and in doing so, I created shell-based access to the plugin.  I can now send Prowl messages from the console (i.e.: I can run PHP via cron to check on things and send myself the results, if necessary).  A shell task I created was for server load, as a followup to my &lt;a href=&quot;http://life.mysiteonline.org/archives/183-iPhone-Server-Alerting-on-High-Load.html&quot;&gt;previous post&lt;/a&gt;.  In working this out, I&#039;ve modified the output for CakePHP&#039;s Shell::out() method so that it auto-wraps and indents a bit more nicely (my ticket in the LighthouseApp is &lt;a href=&quot;http://cakephp.lighthouseapp.com/projects/42648/tickets/274-enhancement-easier-auto-formatting-for-shell-output-patch-offered-awaiting-feedback&quot;&gt;here&lt;/a&gt;).  Time for some output examples:&lt;br /&gt;
&lt;br /&gt;
Issuing the Load Alert help call: &lt;tt&gt;cake prowl load_alert help&lt;/tt&gt;&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot; &gt;---------------------------------------------------------------
CakePHP Prowl Load Alert Console Task
Usage: cake prowl load_alert &lt;params values&gt; &lt;args&gt;
Description: This task tests the current server load and issues a Prowl message (if required) to the passed parameter list of Prowl APIs indicating the server load.
---------------------------------------------------------------
Parameters:
        -silent &lt;false&gt;

Commands:
        help
                Shows this help message.

Arguments:
        apikey
                Up to 5 comma separated Prowl API keys
&lt;/textarea&gt;&lt;br /&gt;
&lt;br /&gt;
Sending a message is as simple as: &lt;tt&gt;cake prowl msg [apikey]&lt;/tt&gt; ... it can get as advanced as &lt;tt&gt;cake prowl msg [apikey] [priority] [application] [event] [description]&lt;/tt&gt;&lt;br /&gt;
&lt;br /&gt;
The output for running the load alert command?&lt;br /&gt;
&lt;textarea name=&quot;code&quot; class=&quot;php&quot; &gt;Checking for high server load...
Server load: 4.81 5.25 6.44
Server is running with an acceptable load.&lt;/textarea&gt;&lt;br /&gt;
If it&#039;s above my arbitrarily set values, it&#039;ll send a different warning depending on the level to my Prowl-enabled device.  By sending a &quot;-silent 1&quot; parameter to the command message, output is disabled (perfect for cron).&lt;br /&gt;
&lt;br /&gt;
Please note that I don&#039;t have any styling for shell output (something I&#039;ll have to fix) so the pasted character spacing and newlines won&#039;t work as expected in my example output. 
    </content:encoded>

    <pubDate>Fri, 29 Jan 2010 19:48:36 -0800</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/185-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>
<item>
    <title>Interesting Links from the Web - January 2010 Edition</title>
    <link>http://life.mysiteonline.org/archives/184-Interesting-Links-from-the-Web-January-2010-Edition.html</link>
            <category>iTechnology</category>
    
    <comments>http://life.mysiteonline.org/archives/184-Interesting-Links-from-the-Web-January-2010-Edition.html#comments</comments>
    <wfw:comment>http://life.mysiteonline.org/wfwcomment.php?cid=184</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://life.mysiteonline.org/rss.php?version=2.0&amp;type=comments&amp;cid=184</wfw:commentRss>
    

    <author>nospam@example.com (Brendon Kozlowski)</author>
    <content:encoded>
    I&#039;ve signed up for &quot;&lt;a href=&quot;http://project52.info/&quot;&gt;Project 52&lt;/a&gt;&quot;, and I&#039;ve already missed last week, only the third week in.  That being said, the whole point of Project 52 is to get people using their blog, to post more.  There is a goal, but the ultimate goal is simply to post more.&lt;br /&gt;
&lt;br /&gt;
A lot of my lack of success is simply trying to come up with real valuable content each and every week.  I must realize that it&#039;s simply not going to be possible - at least not up to my own standards.  That&#039;s not to say that I can&#039;t still post interesting things, just not necessarily the type of stuff I&#039;d want to write about with gusto and enthusiasm - but still kinda cool.  I mean, we learn things on an almost daily (if not hourly) rate as web developers.  Why can&#039;t I simply zero in on one and discuss it?  Or, perhaps mention all the neat things I&#039;ve found in a particular week if I simply don&#039;t have time to write a full article on something I&#039;m working on (which is what happened this past week - I was shipping furniture to my new house in a rental truck from out of state).&lt;br /&gt;
&lt;br /&gt;
Anyhow, here are some interesting links that I&#039;ve found (mostly from Smashing Magazine&#039;s Twitter account) within the past week or so (in no particular order):&lt;br /&gt;
&lt;br /&gt;
 - &lt;a href=&quot;http://m.webdesignerdepot.com/2008/12/why-mood-boards-matter/&quot;&gt;Why Mood Boards Matter&lt;/a&gt;: A look in to a quick way of getting a client on board with your end-result design without actually showcasing any direct portion of the site.  An interesting approach that I had heard of and seen, but this iteration looks much nicer and more professional (the 2nd example).&lt;br /&gt;
&lt;br /&gt;
 - &lt;a href=&quot;http://postageapp.com/benefits-features&quot;&gt;PostageApp&lt;/a&gt;: &quot;The easier way to send email from web apps&quot;.  This service offers a (currently) freely available (beta) API to send emails, also allowing for reporting services and debugging for such tasks.  Quite the interesting little project, and could be extremely useful and handy.&lt;br /&gt;
&lt;br /&gt;
 - &lt;a href=&quot;http://www.uptimerobot.com/&quot;&gt;Uptime Robot&lt;/a&gt;: I currently am using &lt;a href=&quot;http://mon.itor.us/&quot;&gt;mon.itor.us&lt;/a&gt; for my website uptime reporting.  However, I originally signed up for the IM chat based alerting, and it only worked for the first two-three weeks.  They adjusted the alerting mechanism to only alert via email when it had X number of consecutive bad pings...it might be time to evaluate a competitor, and here&#039;s one of them!&lt;br /&gt;
&lt;br /&gt;
 - &lt;a href=&quot;http://jqueryplugins.weebly.com/jquerysheet.html&quot;&gt;jQuery Sheet&lt;/a&gt;: To quote their own description - &quot;jQuery.sheet addresses the web-based spreadsheet or &quot;websheet&quot; in a different, simple, approach - using html, you simply load the sheet from a url, and you save it to a url... Simple.  Or write your own approch. jQuery.sheet manages the sheet creation, viewing, and editing processes, you simply build your application around it.&quot; Quite interesting, and although I don&#039;t currently have a use for it, it&#039;s definitely something that I could see being very useful and powerful.&lt;br /&gt;
&lt;br /&gt;
 - &lt;a href=&quot;http://sikuli.org/&quot;&gt;Project Sikuli&lt;/a&gt;: This project is quite different.  It appears (from a quick glance) to be a scripting language to help automate tasks.  That&#039;s nothing new.  The new part is the fact that it uses screenshot captures to do the scripting.  Yes, that&#039;s correct.  I honestly can&#039;t do it justice to talk about it, so check out the site and watch the video and read up on it if it sounds at all interesting.&lt;br /&gt;
&lt;br /&gt;
 - &lt;a href=&quot;http://www.whitesmoke.com/&quot;&gt;WhiteSmoke Writer 2010&lt;/a&gt;: The new version adds &quot;writing review&quot;, which according to the quick animated Flash file on their homepage, might even be useful for me.  It suggests changes to grammar to make a &quot;negative sentence&quot; neutral, or positive.  This is something I sometimes have issues with when it was not intended.  If I start a business of my own on the side, it&#039;s the last thing I want to do to my clients, so this might be worth a purchase, or at least an evaluation/consideration.&lt;br /&gt;
&lt;br /&gt;
 - &lt;a href=&quot;http://supportdetails.com/&quot;&gt;SupportDetails.com&lt;/a&gt;: Although it&#039;s such an easy concept and execution (practically anyone could create this service), it&#039;s got a nice UI and...hey, I didn&#039;t think of it first. SupportDetails.com grabs the details of your current session data and allows you to mail it to someone.  Let&#039;s say a website visitor is claiming there&#039;s this weird bug on your site, but you just can&#039;t see it.  This could possibly identify the odd combination of software/resolution/settings that could cause the issue.  At the very least, it&#039;s a simple and neat idea.&lt;br /&gt;
&lt;br /&gt;
...and saved for last just because...  &lt;a href=&quot;http://midascode.co.uk/blog/the-ultimate-pc-chair/&quot;&gt;The Ultimate PC Chair&lt;/a&gt;: I want one for work.  Quoted from the linked blog discussing it: &quot;&lt;strong&gt;NOTE TO MY BOSS&lt;/strong&gt; – Dear Mr Boss, I am certain that my productivity would increase by 60,000% if you bought me this chair &lt;br /&gt;
&lt;strong&gt;DISCLAIMER:&lt;/strong&gt; There is also a chance that I will be so comfy that I will fall asleep during work hours.&quot; 
    </content:encoded>

    <pubDate>Mon, 25 Jan 2010 19:12:50 -0800</pubDate>
    <guid isPermaLink="false">http://life.mysiteonline.org/archives/184-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by/3.0/</creativeCommons:license>
</item>

</channel>
</rss>