<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
 <channel>
  <title>RSS</title>
  <link>http://stanlemon.net/index.html</link>
  <generator>PageSite 5.3.0beta9</generator>
  <language>en-us</language>
  <description />
  <lastBuildDate>Sun, 08 Nov 2009 14:56:52 -0500</lastBuildDate>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/stanlemon" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
   <title>jGrowl 1.2.1</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/jgrowl-1_2_1.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/beg-zgnY09s/jgrowl-1_2_1.html</link>
   <description>&lt;p&gt;jGrowl 1.2.1 has been released. You can find the changes &lt;a href="/projects/jgrowl"&gt;here&lt;/a&gt; and download the release &lt;a href="http://plugins.jquery.com/files/jgrowl-1.2.1.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/beg-zgnY09s" height="1" width="1"/&gt;</description>
   <pubDate>Thu, 01 Oct 2009 09:11:57 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/jgrowl-1_2_1.html</feedburner:origLink></item>
  <item>
   <title>Review: Mastering phpMyAdmin 3.1</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/mastering-phpmyadmin.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/Z-MvnfgkEGI/mastering-phpmyadmin.html</link>
   <description>&lt;img src="http://stanlemon.net/files/Mastering-phpMyAdmin.jpg" align="right" /&gt;

&lt;p&gt;When I started programming almost seven years ago it was with two technologies in hand, PHP and MySQL. I didn't understand either of these technologies out of the gate, but both could be easily installed on my Windows based laptop; and that summer I had some long train rides across the country to experiment during. MySQL was taking off like a wild fire at the time, with a growing community and various languages developing native bindings to connect to its server. This provided a huge incentive for using MySQL over other database servers. Other servers either relied on ODBC connections or they had immature API's with severely restricted bindings.&lt;/p&gt;

&lt;p&gt;MySQL solved a simple problem: where to store "my stuff" that my PHP application would use. I was a Windows guy at the time and I didn't know much about working from the terminal; in fact, you might even say I was intimidated by the command line. This provided me with a dilemma. I needed to formulate a data structure to work with my first PHP application and had no way to do it visually. This was long before the days of MySQL Query Browser and some of the other tools which have cropped up in recent times for working with MySQL. By the recommendation of a friend, I turned to phpMyAdmin to get started developing my first MySQL database.&lt;/p&gt;

&lt;p&gt;phpMyAdmin is one of those tools that most people take for granted. It's a truly excellent interface for MySQL and provides some very powerful features for interacting with a database. Most everyone is familiar with the core functionality of phpMyAdmin: its ability to create tables, explore tables, populate rows and even do certain maintenance operates on tables as well. But few are familiar with the real guts and glory of this fantastic open source tool.&lt;/p&gt;

&lt;p&gt;This brings me to a recent book from PACKT publishing, &lt;em&gt;Mastering phpMyAdmin 3.1 for Effective MySQL Management&lt;/em&gt;. If you're not familiar with PACKT publishing you should definitely explore their catalog. PACKT publishing is where you go after you've finished your first "Dummies" book and are looking for real meat and potatoes on a particular language, tool or technology. Each title published by PACKT very specifically addresses a topic with depth and thoroughness from a pro who actually knows what they're doing.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/Z-MvnfgkEGI" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 07 Jul 2009 14:45:29 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/mastering-phpmyadmin.html</feedburner:origLink></item>
  <item>
   <title>Rant on Web Security</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/rant-on-web-security.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/cfYdsZJMuG0/rant-on-web-security.html</link>
   <description>&lt;p&gt;I think I've reached my breaking point with superfluous web security implementations. I'm not talking about OAuth or OpenID or CAS or any of that stuff. Those things are good and serve their own purpose. What I'm talking about are the various safety mechanisms some websites are starting to use to ensure customer authentication. If you don't know what I'm talking about then check your local bank for starters, because banks and other financial institutions seem to love this sort of thing.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/cfYdsZJMuG0" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 30 Jun 2009 00:22:42 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/rant-on-web-security.html</feedburner:origLink></item>
  <item>
   <title>PHP + Phar + Sqlite</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/php-phar-sqlite.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/dQpvV7dGVVU/php-phar-sqlite.html</link>
   <description>&lt;img src="http://i.iinfo.cz/urs/osoft_1490922690php-logo-114733091459752.png" width="220" align="left" /&gt;

&lt;p&gt;I was reminded the other day of cool a mashup of PHP, Phar and Sqlite can be. Hopefully you know what &lt;a href="http://php.net"&gt;PHP&lt;/a&gt; is, but it's possible you haven't heard of Phar yet. Phar is a file format that can contain an entire application in a single file. It is available via the &lt;a href="http://pear.php.net"&gt;PEAR&lt;/a&gt; library through the &lt;a href="http://pear.php.net/package/PHP_Archive"&gt;PHP_Archive&lt;/a&gt; package. Think of Phar in terms similar to &lt;a href="http://en.wikipedia.org/wiki/JAR_(file_format)"&gt;Jar&lt;/a&gt; for Java. It allows you to ship around an entirely functioning application in a single file that can be executed by the interpreter it was written for. Since Phar debuted as a PEAR library it's also been developed into a native extension via the &lt;a href="http://pecl.php.net/package/phar"&gt;Pecl&lt;/a&gt; repository, and I'm happy to report it will be moved into the core for &lt;a href="http://cvs.php.net/viewvc.cgi/php-src/NEWS?view=markup&amp;pathrev=PHP_5_3"&gt;PHP 5.3&lt;/a&gt;. Lastly there is &lt;a href="http://sqlite.org"&gt;Sqlite&lt;/a&gt; which beginning with version 5 of PHP has been bundled and embedded into its core. Currently you get the 2.x API via the native methods (&lt;em&gt;sqlite_*()&lt;/em&gt;) and the 3.X API via &lt;a href="http://us.php.net/pdo"&gt;PDO&lt;/a&gt;. In 5.3 this will change though, and you'll get access to 5.3 in the native methods as well, which is nothing short of wonderful.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/dQpvV7dGVVU" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:42:26 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/php-phar-sqlite.html</feedburner:origLink></item>
  <item>
   <title>jGrowl 1.1.2 &amp; 1.2.0</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/jgrowl-1-1-2-1-2-0.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/VJjp8ZbyHF4/jgrowl-1-1-2-1-2-0.html</link>
   <description>&lt;p&gt;I've released two new versions of jGrowl this evening, the first is 1.1.2 and includes minor changes to 1.1.1. Nothing serious or exciting there. The other release is an initial beta of 1.2.0 which offers pooling capabilities. What I've noticed is that sometimes too many messages get sent to jGrowl at a given time and messages which are the bottom of a listing can expire before they ever come into view by the user. This really defeats the purpose and functionality, so I've been trying to figure out how to avoid this problem. Messages are pooled into a queue and will only be rendered in the event that the pool has now reached its pooling size. By default this functionality is turned off, however I've included an example file that enables this functionality and sets the pool size to 5 messages. For those who use jGrowl and have run into this issue I highly recommend trying out the 1.2 beta. I haven't decided if anything else is going into 1.2 yet, so you may be looking at a final release... who knows, only time will tell! :) Anyhow, feel free to provide me with feedback on this recent change. You can find these releases on the jQuery plugin page &lt;a href="http://plugins.jquery.com/project/jGrowl"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/VJjp8ZbyHF4" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:40:00 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/jgrowl-1-1-2-1-2-0.html</feedburner:origLink></item>
  <item>
   <title>jGrowl 1.2.0beta2</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/jgrowl-1-2-0beta2.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/F4iO0X3BCHc/jgrowl-1-2-0beta2.html</link>
   <description>&lt;p&gt;A new beta of jGrowl 1.2.0 has been uploaded on the &lt;a href="http://plugins.jquery.com/project/jGrowl"&gt;jQuery plugin page&lt;/a&gt;. This latest beta fixes several syntax errors if you went to compress the library or obfuscate it, as well as fixes a major bug in the log callback. That error would have occurred in the event that a custom option object did not define a log callback. If you run into any issues or have any suggestion please feel free to send them to me. Otherwise, you can download this release &lt;a href="http://plugins.jquery.com/files/jgrowl-1.2.0-beta2.tar.gz"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/F4iO0X3BCHc" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:39:40 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/jgrowl-1-2-0beta2.html</feedburner:origLink></item>
  <item>
   <title>Using PHP to Schedule Things</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/using-php-to-schedule-things.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/vwuW5g8xt9M/using-php-to-schedule-things.html</link>
   <description>&lt;p&gt;Unlike some other languages, PHP does not continue to run in the background even when "stuff" stops happening. Compare PHP to Java for example and you'll see what I mean. This can pose problems for large requests, where perhaps the browser gets locked up longer than most users are willing to sit by and endure. This can cause problems. One of the issues I've also run into deals with updating static content. Sometimes content changes, and in order to detect static content changes you have often have to do some work which calls into question the benefit of static content, or resort to caching which brings its own set of problems. Other times you just need to do something at a given interval or period, say for example checking to see if an RSS feed has changed. You may want to do this every 30 minutes. Your options are to check the time when a user access a page and decide if you should do some background work or resort to a cronjob and let it take care of this business. Most of the time one of these two options will work just fine.&lt;/p&gt;

&lt;p&gt;I'm a firm believer that an out-of-the-box application should be as stupid-proof as possible, and that as the application packager I should assume the user knows nothing and do everything I can to make installation seamless. &lt;a href="http://stanlemon.net/index/articles/php-phar-sqlite.html"&gt;This is why I use a Phar to distribute app's and have them extract their own SQLite database, for example.&lt;/a&gt; With this line of thinking it's just not safe to assume the user has the slightest clue about cronjob's or how to set them up, let alone have access to them. So, what do you do?&lt;/p&gt;

&lt;p&gt;Initially I assumed I would setup a single cronjob and call a single script which would dictate scheduling for programmatically designed "jobs". This would allow any one of my various modules to create a job on the fly programmatically and not have to concern itself with the particulars of how that job would be executed. Sounds fine, but still doesn't solve my dummy proof approach. Then I stumbled across this code snippet in the PHP manual while looking at &lt;a href="http://us3.php.net/ignore_user_abort"&gt;&lt;em&gt;ignore_user_abort()&lt;/em&gt;&lt;/a&gt;...&lt;/p&gt;
&lt;pre class="code"&gt;
&amp;lt;?php
ignore_user_abort(); // run script in background
set_time_limit(0); // run script forever
$interval=60*15; // do every 15 minutes...
do{
   // add the script that has to be ran every 15 minutes here
   // ...
   sleep($interval); // wait 15 minutes
}while(true);
?&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Some purists won't like this code, but I think it's golden! I've been running some tests locally, and as best I can tell if you're smart about your "job" code you won't run into any issues. Part of the trick is remembering to make sure the scheduling script is running. I do this by updating a row in a database to indicate the last time the scheduler ran, and if that last scheduler execution exists outside of a given range (say twenty minutes with the above example), then I trigger the scheduler again. For this to work, though, keep in mind the scheduler needs to be triggered with an http request. You can do this either in the HTML-word using javascript or something similar, ie. an AJAX request to the scheduler. Or you can use PHP itself like this...&lt;/p&gt;
&lt;pre class="code"&gt;
&amp;lt;?php 
$ctx = stream_context_create(array( 
    'http' =&amp;gt; array( 
        'timeout' =&amp;gt; 1 
        ) 
    ) 
); 
file_get_contents("http://www.mydomain.com/scheduler", 0, $ctx); 
?&amp;gt;
&lt;/pre&gt;

&lt;p&gt;Notice this will timeout right away, the purpose is to initiate the scheduler and not to actually see what the scheduler is doing or wait for it. Another important thing to note is that you'll want to check to make sure the scheduler isn't already running when you go to start up the scheduler. I realize we just covered spawning the scheduler, but in the actual scheduler code you want to double check it's not running. It's entirely possible depending on your setup that a scheduler could get triggered when another scheduler is executing, and you want to be assure to avoid tying up your apache processes with unnecessary instances of the scheduler.&lt;/p&gt;

&lt;p&gt;As a final precaution, realize that you need to be smart about your code in the scheduler. You need to aware of variable usage and what you're doing to the memory allotted to PHP. I suggest even going so far as to maybe evaluate memory usage in the scheduler itself, shutdown the scheduler when necessary and spawn a subsequent scheduler process. You also have to deal with error handling, both from PHP and from user-land. Cron takes output and e-mails it to you, that's an option, or an external log file is an option. Either way you want to be aware of errors and make sure the right people know about them.&lt;/p&gt;

&lt;p&gt;Well, happy scheduling!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/vwuW5g8xt9M" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:38:56 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/using-php-to-schedule-things.html</feedburner:origLink></item>
  <item>
   <title>Dates and Javascript</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/dates-and-javascript.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/F8LyPLvLrRs/dates-and-javascript.html</link>
   <description>&lt;p&gt;Dates and timestamps and things of this sort have often been the bane of my existence when working with javascript. For whatever reason javascript never came out-of-the-box with handy dandy date utilities to make working with those types of variables painless. I'm slightly spoiled, because in PHP you can do just about anything with &lt;a href="http://php.net/strtotime"&gt;strtotime()&lt;/a&gt; and the formatting options of &lt;a href="http://php.net/date"&gt;date()&lt;/a&gt;. PHP 5 tossed in the &lt;a href="php.net/datetime"&gt;DateTime&lt;/a&gt; object and then things became really fun. Likewise, when I work in the world of Java there is &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html"&gt;SimpleDateFormat&lt;/a&gt; and the far superior &lt;a href="http://joda-time.sourceforge.net/"&gt;Joda&lt;/a&gt;. Most of the time I just let these things do the grunt work when it comes to dates and I let Javascript feed off of their superiority.&lt;/p&gt;

&lt;p&gt;Today I stumbled into &lt;a href="http://www.datejs.com"&gt;Datejs&lt;/a&gt;, which is a Javascript library that takes from the best elements of the Java and PHP world, mixes them together and tacks on some excellent jQuery-style chaining to make what is by far the best date solution for Javascript I have seen to date. There are formatting features for outputting dates, conversion features for reading in dates, modification and comparison methods and best of all a series of chainable function to build dates, ie. &lt;em&gt;Date.today().next().thursday();&lt;/em&gt;. How cool is that?!? I'm bundled this into just about everything I do, if I include jQuery or some other primary library into a project I expect to be tucking this in with it. Too often am I stuck with a date conundrum, so it's better to have this utility around.&lt;/p&gt;

&lt;p&gt;Bottom line, if you're doing javascript work of any kind and haven't already found this gem - go download it &lt;strong&gt;now()&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/F8LyPLvLrRs" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:38:28 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/dates-and-javascript.html</feedburner:origLink></item>
  <item>
   <title>jGrowl 1.2.0beta3</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/jgrowl-1-2-0beta3.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/48JFcFFUaYI/jgrowl-1-2-0beta3.html</link>
   <description>&lt;p&gt;I've just release jGrowl 1.2.0beta3 over at the &lt;a href="http://plugins.jquery.com/project/jGrowl"&gt;jQuery plugin page&lt;/a&gt;. This release includes some minor changes based on user feedback to the way that a notification is closed. Currently the triggers occur by the little "x" close button or by way of time elapsed or by way of the "close all" button. While it's possible to introduce your own trigger for closing a notification (for example, click anywhere on the node), it's not as easy to implement. Subsequently, the closing off a notification has been moved such that at any time you can call, &lt;em&gt;jQuery("div.jGrowl").trigger("jGrowl.close);&lt;/em&gt; and the close operation will be initiated.&lt;/p&gt;

&lt;p&gt;You can download this release &lt;a href="http://plugins.jquery.com/files/jgrowl-1.2.0beta3.gz"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/48JFcFFUaYI" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:38:13 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/jgrowl-1-2-0beta3.html</feedburner:origLink></item>
  <item>
   <title>Updates to Sanctus.org</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/updates-to-sanctus-org.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/c7Wl_QT4yWk/updates-to-sanctus-org.html</link>
   <description>&lt;p&gt;I've upload some updates to &lt;a href="http://sanctus.org"&gt;sanctus.org&lt;/a&gt; tonight, they include fixes to the existing iPhone optimized version (for those curious, just go to the normal site in your iPhone/iPod Touch), fixes to the Sundays after Christmas and New Years, fixes to some backend logic that no one cares about, the addition of text-links to Libronix (little icons at the end of Scripture readings) and the ability to go directly to a date by doing... http://sanctus.org/lectionary.html#YYYY-mm-dd where YYYY-mm-dd is the year - two digit month - two digit date, ie. 2009-01-05.&lt;/p&gt;

&lt;p&gt;For those that have been asking, an iCal file is on the way. The file generated from the old sanctus.org site ended on 12/31/08 so if nothing else I need it. I'm verifying dates and things of that sort and then need to figure out a place to post it. There's also the possibility of a Libronix Lectionary file coming as well. If you're in need of these resources and would like to see it and others please consider a donation to help support the Lutheran Lectionary Project. All donations go to defer the cost of hosting and bandwidth.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pax Christi&lt;/em&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/c7Wl_QT4yWk" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:37:52 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/updates-to-sanctus-org.html</feedburner:origLink></item>
  <item>
   <title>More Updates to Sanctus.org</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/more-updates-to-sanctus-org.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/_EjASgRePvo/more-updates-to-sanctus-org.html</link>
   <description>&lt;p&gt;The updates keep rolling out... I've done some more UI enhancements, including a toolbar at the bottom which will show you pericopes as you hover over days. I've also added the Gradual, Verse and Tract to Sundays - I have not yet had time to put these together for festivals where they are available. Each proper can also be collapsed by clicking on it's respective title and they can be universally collapsed and expanded with a +/- sign in the upper right corner of the day's header. I've straightened out some display issues with commemorations and other labels as well. I also have exciting news... Today I received from a friend who has been helping me with data entry about 85% of the daily lectionary from LSB (basically the non-festal portion), and will begin working to integrate this into sanctus.org soon. Keep an eye out, that and the new iCal export are just around the corner.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/_EjASgRePvo" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:37:25 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/more-updates-to-sanctus-org.html</feedburner:origLink></item>
  <item>
   <title>Why Tumblr is Cool</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/why-tumblr-is-cool.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/9rOghfeAcTA/why-tumblr-is-cool.html</link>
   <description>&lt;p&gt;Social networking and social media are exploding. &amp;nbsp;Facebook is on the verge of&amp;nbsp;surpassing&amp;nbsp;MySpace in its user base, and Twitter seems to be the next best thing to sliced bread. &amp;nbsp;In the midst of these newer social medium there's still blogging and let's not forget the world of social bookmarking or social photo sharing. &amp;nbsp;The problem now is that there are just too many networks, too many options to socialize on.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/9rOghfeAcTA" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:36:40 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/why-tumblr-is-cool.html</feedburner:origLink></item>
  <item>
   <title>jGrowl 1.2.0</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/jgrowl-1-2-0.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/Q1wK4aAditg/jgrowl-1-2-0.html</link>
   <description>&lt;p&gt;I released jGrowl 1.2.0 the other day over on the jQuery plugin page. It's basically the same as the last beta, with just some minor tweaks and improvements. The big change in 1.2.0 is a queue for notifications to prevent the screen from filling up with notifications and posting them outside of the user's scope of view. More info is available &lt;a href="http://stanlemon.net/projects/jgrowl.html"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/Q1wK4aAditg" height="1" width="1"/&gt;</description>
   <pubDate>Tue, 19 May 2009 11:36:18 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/jgrowl-1-2-0.html</feedburner:origLink></item>
  <item>
   <title>Twitterpate Nuances</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/twitterpate-nuances.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/mK3-jCxeZLQ/twitterpate-nuances.html</link>
   <description>&lt;p&gt;Some people have noticed that twitterpate has a little more to it then just threading, so I thought I'd post to detail what I've tried to do with this initial release of twitterpate...&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Moving on up the conversation:&lt;/strong&gt; When a new reply comes up in a conversation you'll notice that the entire conversation is shifted to the top of your timeline.&amp;nbsp; This is because in the world of twitterpate the whole conversation is new - something has changed.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;Auto-updating tweets:&lt;/strong&gt; Leave the window open with twitterpate for a little while and you may see some new tweets appear at the top.&amp;nbsp; Every 75 seconds twitterpate runs off and checks to see if any new tweets have arrived and if they have it automatically inserts into your timeline, moving conversations up and doing what twitterpate does best... thread!&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;New unread tweets:&lt;/strong&gt; When the auto-updater fires off and finds new tweets you'll know what they are because they're marked differently.&amp;nbsp; Right now this just works for tweets in real time, but I hope to add support to older tweets via cookies and some other cool stuff.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;Expanding links:&lt;/strong&gt; Link rot is a huge concern for the twitter ecosystem, and personally I find looking at those itty-bitty shortened urls annoying.&amp;nbsp; Plus, they're a security concern and a phisher's best friend!&amp;nbsp; So twitterpate automatically tries to expand url's in tweets out of their shortened form.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;Link hash tags:&lt;/strong&gt; Everybody uses them, so why not turn them into links automatically?&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;Group by day:&lt;/strong&gt; Tweets are grouped by day to give you more of a "timeline" feels to your timeline.&amp;nbsp; This also offers a way of collapsing and hiding yesterday's tweets so you can keep current with your twitter ecosystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since I'm on a roll talking about twitterpate let me tell you about some of the things I'd like to do too...&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Offer psuedo-group support/filtering:&lt;/strong&gt; You know, like you've seen in TweetDeck and other desktop clients, but in a clean web interface.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;Marking read/unread memory:&lt;/strong&gt; Right now new tweets from the auto-updater are distinguished from the tweets present when you load, but as I mentioned above...&amp;nbsp; I want to keep your read-tweets marked in a cookie to transcend visits.&lt;/li&gt;

    &lt;li&gt;&lt;strong&gt;And...&lt;/strong&gt;&amp;nbsp; You fill in the blanks!&amp;nbsp; I want to stick with twitter's simplicity, but I'm also curious what power-user type features can b added to twitterpate to make it even handier to use.&amp;nbsp; If you have ideas, let me know!&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/mK3-jCxeZLQ" height="1" width="1"/&gt;</description>
   <pubDate>Sun, 19 Apr 2009 18:34:17 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/twitterpate-nuances.html</feedburner:origLink></item>
  <item>
   <title>Twitterpate Update #1</title>
   <guid isPermaLink="false">http://stanlemon.net/index/articles/twitterpate-update-1.html</guid>
   <author>stan</author>
   <link>http://feedproxy.google.com/~r/stanlemon/~3/MBdvXYmB5HU/twitterpate-update-1.html</link>
   <description>&lt;p&gt;Just a brief update on &lt;a href="http://twitterpate.info"&gt;twitterpate&lt;/a&gt; development... &amp;nbsp;An assortment of bugs related to how dates were handled have been fixed. Time stamps and relative times may have previously appeared inacurate due to timezone issues. &amp;nbsp;Additionally, relative time stamps will now update in real time and thus always properly reflect the accurate time. &amp;nbsp;Links in tweets now have a target attribute on them, meaning they will properly open up in a new tab or window depending on your browser's settings.&lt;/p&gt;

&lt;p&gt;There is a known issue that I have not had time to deal with which involves the auto-delivery for dates which were not present on the page when you load the page. &amp;nbsp;This is especially&amp;nbsp;noticeable&amp;nbsp;if you leave your browser open and midnight arrives. &amp;nbsp;Things will appear to simply stop delivering, when it fact the page just doesn't have any place to put the new tweets. &amp;nbsp;As soon as I get some free time I will fix this issue and update &lt;a href="http://twitterpate.info"&gt;twitterpate&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I've added some experimental thumbnail displaying for twitpic images, but&amp;nbsp;admittedly&amp;nbsp;I'm not&amp;nbsp;satisfied&amp;nbsp;with how these are rendering. &amp;nbsp;If you have some advice on what to do here I'd really appreciate the feedback.&lt;/p&gt;

&lt;p&gt;If you double click on the "reply" icon next to a tweet, it will now fill in your status box for retweeting the post. &amp;nbsp;I think at some point it'd be best to have a separate icon for this action, but on the other hand I'm trying to avoid cluttering the interface as well. &amp;nbsp;If users find either the double click action annoying or elusive I'll look into changing this.&lt;/p&gt;

&lt;p&gt;If you click on a tweet's avatar that will now trigger the reply-action, this parallels what a number of desktop twitter clients do. &amp;nbsp;This was suggested to me by my friend Jon Kohlmeier, and seems like a good idea all around.&lt;/p&gt;

&lt;p&gt;I'm looking to possibly include url shortening in the tweet box. &amp;nbsp;If I do it will be entirely optional and I hope to offer more then just tinurl. &amp;nbsp;My gut right now tells me to utilize the same services that &lt;a href="http://tweetdeck.com"&gt;TweetDeck&lt;/a&gt; supports, but I'm curious if anyone has any other feedback on the matter?&lt;/p&gt;

&lt;p&gt;I'm also looking for some type of graphic/header/banner for twitterpate. &amp;nbsp;I'm not a graphic designer by trade, so I've been searching through other's work and have sent out some requests. &amp;nbsp;If you're interested in helping me at all, drop me a line on my contact page.&lt;/p&gt;

&lt;p&gt;Lastly, if you hadn't noticed... &lt;a href="http://twitterpate.info"&gt;Twitterpate&lt;/a&gt; has now moved to &lt;a href="http://twitterpate.info"&gt;http://twitterpate.info&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/stanlemon/~4/MBdvXYmB5HU" height="1" width="1"/&gt;</description>
   <pubDate>Sun, 19 Apr 2009 18:33:32 -0400</pubDate>
     <feedburner:origLink>http://stanlemon.net/index/articles/twitterpate-update-1.html</feedburner:origLink></item>
 </channel>
</rss>
