<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6865603202419850914</id><updated>2012-02-10T17:19:30.724Z</updated><title type='text'>Snarl Blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-436253162298354044</id><published>2012-02-10T17:00:00.000Z</published><updated>2012-02-10T17:19:30.731Z</updated><title type='text'>R2.6 Alpha 1 Now Available</title><content type='html'>Snarl 2.6 Alpha 1 is now available for download!&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Please&lt;/i&gt;&amp;nbsp;do note that this is an Alpha release so it might do the occasional odd thing. &amp;nbsp;It won't reformat your C: drive or phone an international speaking clock for you; but certain bits may not work as expected - or at all for that matter. &amp;nbsp;That said,&amp;nbsp;you can easily revert back to an earlier release without losing your settings (they're forwards- and backwards-compatible).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you're interested in trying it out, I really would appreciate feedback on how easy (or otherwise) the revised preferences are to navigate. &amp;nbsp;You can provide feedback &lt;a href="http://groups.google.com/group/snarl-discuss/?pli=1" target="_blank"&gt;here&lt;/a&gt;, as a comment to this post, or on our &lt;a href="http://snarl.uservoice.com/forums/144294-feature-requests" target="_blank"&gt;UserVoice page&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Still interested? &amp;nbsp;Of course you are! &amp;nbsp;Get it &lt;a href="https://sourceforge.net/projects/snarlwin/files/Snarl/Current%20Beta/" target="_blank"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-436253162298354044?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/436253162298354044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/02/r26-alpha-1-now-available.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/436253162298354044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/436253162298354044'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/02/r26-alpha-1-now-available.html' title='R2.6 Alpha 1 Now Available'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-915330166629494429</id><published>2012-02-09T18:34:00.001Z</published><updated>2012-02-09T18:34:11.104Z</updated><title type='text'>New App: Sick Beard</title><content type='html'>Dave (who's a human, not a bot) posted a few days ago to remind me that &lt;a href="http://sickbeard.com/" target="_blank"&gt;Sick Beard&lt;/a&gt; supports GNTP and, therefore, supports Snarl :)&lt;br /&gt;&lt;br /&gt;I've just gotten around to trying it out and, you know what? He's right! &amp;nbsp;The download is an Alpha release so please take this into consideration if you give it a try. &amp;nbsp;If you do, then just enable "Growl" in the notification settings page, enter the required information (I used 127.0.0.1:23053 as the IP address and that worked fine) and click the Register button. &amp;nbsp;Easy!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-D8PybxMMQxQ/TzQROm1HnFI/AAAAAAAAAJo/bN8ACtGH90A/s1600/sickbeard_on_snarl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="81" src="http://2.bp.blogspot.com/-D8PybxMMQxQ/TzQROm1HnFI/AAAAAAAAAJo/bN8ACtGH90A/s320/sickbeard_on_snarl.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-915330166629494429?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/915330166629494429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/02/new-app-sick-beard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/915330166629494429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/915330166629494429'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/02/new-app-sick-beard.html' title='New App: Sick Beard'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-D8PybxMMQxQ/TzQROm1HnFI/AAAAAAAAAJo/bN8ACtGH90A/s72-c/sickbeard_on_snarl.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-6342100951374419047</id><published>2012-02-08T21:12:00.001Z</published><updated>2012-02-08T21:12:35.499Z</updated><title type='text'>R2.6 Progress</title><content type='html'>Subscriptions are - I think - now working.  It's a bit confusing as I've been forced to test it by subscribing to myself (that is 127.0.0.1) which does get a bit complicated when you're trying to debug the socket code :)&lt;br /&gt;&lt;br /&gt;I know I promised an Alpha for review - give me a few days to test it across two different computers and I'll get it posted.&lt;br /&gt;&lt;br /&gt;The good news is that the config (except the network stuff - but it won't break things) is both forwards and backwards compatible so if you get fed up with it (or the worst happens) it'll be easy to roll back to R2.5.1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-6342100951374419047?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/6342100951374419047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/02/r26-progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6342100951374419047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6342100951374419047'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/02/r26-progress.html' title='R2.6 Progress'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-3766499748085079382</id><published>2012-02-03T17:30:00.000Z</published><updated>2012-02-04T09:32:06.798Z</updated><title type='text'>R2.6 Subscriptions and Forwarding</title><content type='html'>[This is the fourth revision of this post. &amp;nbsp;Okay, so I have writer's block...]&lt;br /&gt;&lt;br /&gt;I mentioned in a previous post that the network forwarding side of things was up in the air with me torn between having it as a Snarl-managed piece or as a redirector. &amp;nbsp;On the face of it, having network forwarding managed by a redirector seemed to make sense but, after actually trying it out, &amp;nbsp;I settled on keeping it Snarl-managed. &amp;nbsp;There are two main reasons for this:&lt;br /&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;It makes more sense for the forwarders themselves to be kept in the top-level &lt;b&gt;[Network]&lt;/b&gt; page alongside subscribers and (eventually) listeners;&lt;/li&gt;&lt;li&gt;For forwarding to work, the sender must have access to the information of the &lt;i&gt;application&lt;/i&gt;&amp;nbsp;that generated the notification so it can send the classes to the remote computer - redirectors don't have access to this level of information.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;So, right now R2.6 supports:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Forwarding to remote computers via SNP 3.0 and GNTP;&lt;/li&gt;&lt;li&gt;Subscriptions from remote computers via SNP 3.0 and GNTP;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;Forwarders are still defined in the &lt;b&gt;[Network-&amp;gt;Forwarding]&lt;/b&gt; page but now they simply define the destination computers&amp;nbsp;(yes, you can assign multiple addresses) to forward to, the protocol to use and a descriptive name for the forward:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-1yhvhrIgSmQ/TywOwGEcnYI/AAAAAAAAAJA/sj1U8NA9OIA/s1600/forwarding.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://4.bp.blogspot.com/-1yhvhrIgSmQ/TywOwGEcnYI/AAAAAAAAAJA/sj1U8NA9OIA/s320/forwarding.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A forwarder doesn't actually take effect until you assign it to a notification class (unless you click the&amp;nbsp;&lt;b&gt;Test&lt;/b&gt;&amp;nbsp;button of course, in which case you should see a test notification appear on the destination computers).&lt;br /&gt;&lt;br /&gt;To assign a forwarder to a class, pick&amp;nbsp;the notification class you want to forward, select the &lt;b&gt;[Network] &lt;/b&gt;page in the side panel and tick all the forwarders you want to use:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-3JVUepwbmvE/TywO5QCO1HI/AAAAAAAAAJI/Qd9FwCvvb48/s1600/class-network-config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-3JVUepwbmvE/TywO5QCO1HI/AAAAAAAAAJI/Qd9FwCvvb48/s320/class-network-config.png" width="281" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's now a &lt;b&gt;Send to subscribers&lt;/b&gt;&amp;nbsp;toggle button here as well. &amp;nbsp;Enabling this causes any notifications generated using this class to be sent to all subscribed computers - which is effectively the same as forwarding it, except it's the remote computer asking for the notification, not the other way around.&lt;br /&gt;&lt;br /&gt;Remote computers which have subscribed are now listed in the lower part of&amp;nbsp;&lt;b&gt;[Network-&amp;gt;Subscriptions]&lt;/b&gt;:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-zRC2O3Nf9fM/TywPewSculI/AAAAAAAAAJQ/yv9YW4f3BdA/s1600/subscriptions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://1.bp.blogspot.com/-zRC2O3Nf9fM/TywPewSculI/AAAAAAAAAJQ/yv9YW4f3BdA/s320/subscriptions.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;You'll get notified whenever a subscriber connects, so you know who's interested in your notifications. &amp;nbsp;You can turn this off if you want and I plan to add functionality to allow for selective ignoring of subscribers as well. &amp;nbsp;Here's the notification for no particular reason:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-0AJ5iGPuHGQ/TywQAMqi4NI/AAAAAAAAAJY/vwmtncerLaA/s1600/new_subscriber.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-0AJ5iGPuHGQ/TywQAMqi4NI/AAAAAAAAAJY/vwmtncerLaA/s1600/new_subscriber.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And here's the &lt;b&gt;[Network-&amp;gt;General]&lt;/b&gt; page too, relatively unchanged:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Oz6mT6UqC_g/TywQNcYl5oI/AAAAAAAAAJg/0SFB191fUX4/s1600/network-general.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://4.bp.blogspot.com/-Oz6mT6UqC_g/TywQNcYl5oI/AAAAAAAAAJg/0SFB191fUX4/s320/network-general.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-3766499748085079382?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/3766499748085079382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/02/r26-subscriptions-and-forwarding.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3766499748085079382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3766499748085079382'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/02/r26-subscriptions-and-forwarding.html' title='R2.6 Subscriptions and Forwarding'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-1yhvhrIgSmQ/TywOwGEcnYI/AAAAAAAAAJA/sj1U8NA9OIA/s72-c/forwarding.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-2114534915624092926</id><published>2012-02-01T09:17:00.004Z</published><updated>2012-02-01T09:32:06.690Z</updated><title type='text'>R2.6 News</title><content type='html'>Development of R2.6 continues at a lightning pace and we're getting close to having an Alpha available for those who're interested in trying it and commenting on it.&lt;br /&gt;&lt;br /&gt;The panel rework is almost complete with everything slotting into place nicely. &amp;nbsp;Once done, I plan to turn my hand to the core styles to try to bring them all up to the same level of functionality. &amp;nbsp;In the meantime, as R2.6 brings with it a step change in the way you manage notifications, I thought I'd write a bit about that to bring everyone up to speed.&lt;br /&gt;&lt;br /&gt;Firstly, there's now a real distinction between styles which generate on-screen content and those which send the notification elsewhere, so much so that the latter have been named to &lt;i&gt;redirectors&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The Notifications page has a bunch of sub-tabs that let you configure everything to do with how the notification appears and behaves at a global level. &amp;nbsp;Most of the tabs are concerned with the on-screen display, however one of the sub-tabs is titled &lt;b&gt;Redirection&lt;/b&gt;, and this is where you can pick one or more redirectors to use to send the notification elsewhere. &amp;nbsp;What's really cool here is that you can now configure &lt;i&gt;each&lt;/i&gt; redirector to take effect based on your presence, so you can have all notifications displayed using &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;Corporate/Standard&lt;/span&gt; but then redirect them to &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;Prowl/Standard&lt;/span&gt; while you're away and &lt;span style="color: #0b5394; font-family: 'Courier New', Courier, monospace;"&gt;Run File/Log This Please&lt;/span&gt; while you're active and busy, for example.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-m8o_-odNS5I/TykEDf47ShI/AAAAAAAAAIg/_k_Sfjkm-N8/s1600/global_redirection.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://2.bp.blogspot.com/-m8o_-odNS5I/TykEDf47ShI/AAAAAAAAAIg/_k_Sfjkm-N8/s320/global_redirection.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Redirectors are also configurable on a per-class basis and replace the clunky process that involved ticking boxes.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zKs_OFHYfPo/TykEoHwewJI/AAAAAAAAAIo/hqpzs2M65ek/s1600/class_redirection.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="174" src="http://4.bp.blogspot.com/-zKs_OFHYfPo/TykEoHwewJI/AAAAAAAAAIo/hqpzs2M65ek/s320/class_redirection.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;More separation has taken place with the presence selection buttons. &amp;nbsp;Previously, they controlled both the&amp;nbsp;display and redirection&amp;nbsp;of notifications, now&amp;nbsp;they only control the on-screen display settings so you can now have notifications redirected to Prowl while you're away (as we saw above) but also have the on-screen copy logged as missed - that way, when you get back to your desk, you can easily review them.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-GY-9dKnO64o/TykE-NZM1jI/AAAAAAAAAIw/8e5C-ITTP2E/s1600/global_presence.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://4.bp.blogspot.com/-GY-9dKnO64o/TykE-NZM1jI/AAAAAAAAAIw/8e5C-ITTP2E/s320/global_presence.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There is still some stuff that's up in the air. &amp;nbsp;Currently, notification forwarding is still managed inside its own page and applies globally to everything, so you can get misleading notifications like "My App Registered" appearing when in fact it's simply a forwarded notification from another computer. &amp;nbsp;The current thinking is that notification forwarding should be handled by a redirector, that way:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Remote computers can be grouped together within schemes;&lt;/li&gt;&lt;li&gt;Notifications can be forwarded on a global or per-class basis simply by assigning the appropriate redirector;&lt;/li&gt;&lt;li&gt;Extensibility is improved as the redirector could be included as a third-party add-on.&lt;/li&gt;&lt;/ul&gt;That's it for now - there's been a whole load of other functionality improvements, but more on those next time. &amp;nbsp;I'll leave you with a quick snap of the &lt;b&gt;AddOns &lt;/b&gt;page showing the new style engines list...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-e4PbFf83iHM/TykFcKryI5I/AAAAAAAAAI4/JQiSm7koWdk/s1600/styleengines.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" src="http://1.bp.blogspot.com/-e4PbFf83iHM/TykFcKryI5I/AAAAAAAAAI4/JQiSm7koWdk/s320/styleengines.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-2114534915624092926?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/2114534915624092926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/02/r26-news.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/2114534915624092926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/2114534915624092926'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/02/r26-news.html' title='R2.6 News'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-m8o_-odNS5I/TykEDf47ShI/AAAAAAAAAIg/_k_Sfjkm-N8/s72-c/global_redirection.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-4099259900812982902</id><published>2012-01-30T20:45:00.001Z</published><updated>2012-01-30T20:52:22.858Z</updated><title type='text'>Snarl 2.5.1 Released</title><content type='html'>Snarl 2.5.1 is now available for download from &lt;a href="http://www.getsnarl.info/"&gt;getsnarl.info&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The full list of changes can be found at the download sites (and is included in the package), but here's a few of the major changes:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Can now copy and paste selected missed or historical notifications to the clipboard;Revised AudioMon extension;&lt;/li&gt;&lt;li&gt;New Scroller style engine - includes two new redirect styles which display the notification content on-screen in different scrolling formats;&lt;/li&gt;&lt;li&gt;The style engine which provides the Speech style was missing from the previous installation.  A new, fully revised, version of the Speech style is now included;&lt;/li&gt;&lt;li&gt;Included beta version of Script style engine which allows for creation of styles using VBScript;&lt;/li&gt;&lt;li&gt;Updated SysInfo extension now includes "My Computer" action in volume mounted notifications.  Selecting this action opens the Windows My Computer folder;&lt;/li&gt;&lt;li&gt;Per-user settings are now created by Snarl, not the installer.  This resolves an issue when installing Snarl on Windows 7 using a non-administrator account, and improves the installation experience generally;&lt;/li&gt;&lt;li&gt;Style engine and extension links are now stored in the Snarl installation folder under \styles\ and \extensions\ respectively.  This improves the experience when using Snarl in a multi-user environment;&lt;/li&gt;&lt;li&gt;Start menu content is now created in the all users folder;&lt;/li&gt;&lt;li&gt;Fixed bug in Clock+ extension which would generate incorrect content in some cases;&lt;/li&gt;&lt;li&gt;Prowl redirect style now supports new "sensitivity" parameter;&lt;/li&gt;&lt;li&gt;In addition to the above, there have been many bug fixes, security enhancements and cosmetic changes.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-4099259900812982902?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/4099259900812982902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/snarl-251-available.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/4099259900812982902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/4099259900812982902'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/snarl-251-available.html' title='Snarl 2.5.1 Released'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-6061418109595751595</id><published>2012-01-28T20:52:00.001Z</published><updated>2012-01-28T21:23:06.618Z</updated><title type='text'>The rework continues...</title><content type='html'>You know when you realise what the something is that's been niggling at you for months? &amp;nbsp;Well, I think I finally realised that I've not been happy with Snarl's preferences panel for a long time - and neither have many of you I think. &amp;nbsp;Best of all though, I think I've found a solution...&lt;br /&gt;&lt;br /&gt;So, today, the panel has undergone a major transformation. &amp;nbsp;Some pages have gone, some have been renamed, and some are new - it's still a work-in-progress but I'm so pleased with how it's gone so far I thought I'd share it here.&lt;br /&gt;&lt;br /&gt;Firstly, &lt;b&gt;[Apps]&lt;/b&gt; has been renamed to &lt;b&gt;[Applications]&lt;/b&gt; and it's now the first thing you see when the panel opens:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-aoJk1yaJo_Q/TyRbCJgK21I/AAAAAAAAAHw/nbFOaaoPKSQ/s1600/applications.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://4.bp.blogspot.com/-aoJk1yaJo_Q/TyRbCJgK21I/AAAAAAAAAHw/nbFOaaoPKSQ/s320/applications.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;i&gt;Aside:&lt;/i&gt; you'll notice that AudioMon is selected and the &lt;b&gt;Settings...&lt;/b&gt; button is &lt;i&gt;enabled&lt;/i&gt;. &amp;nbsp;That's right - finally, you can configure extensions from this page, just as you can with regular applications.&lt;br /&gt;&lt;br /&gt;Next up is &lt;b&gt;[Notifications]&lt;/b&gt; which is an amalgamation of parts of various pages - this is where it gets really cool:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-6QPkGRGtNKw/TyRbFSK6qGI/AAAAAAAAAII/sKVMQUGihtQ/s1600/noti-basics.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://3.bp.blogspot.com/-6QPkGRGtNKw/TyRbFSK6qGI/AAAAAAAAAII/sKVMQUGihtQ/s320/noti-basics.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;So, this page is split into five sub-pages. &amp;nbsp;First of which (above) is called &lt;b&gt;[The Basics]&lt;/b&gt;, which should give an indication as to the sort of things you'll find in it. &amp;nbsp;Most importantly, you can now select the default style here! &amp;nbsp;Just pick the one you want, and the scheme you fancy and you get a little preview of it below.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;You can set the default notification duration on this page and the &lt;b&gt;Test Settings&lt;/b&gt;&amp;nbsp;button let's you try out how it will all look.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-hIo-xwSX1a8/TyRbEnNPLlI/AAAAAAAAAIA/hloZ0G6reG4/s1600/noti-appearance.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://4.bp.blogspot.com/-hIo-xwSX1a8/TyRbEnNPLlI/AAAAAAAAAIA/hloZ0G6reG4/s320/noti-appearance.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The &lt;b&gt;[Appearance]&lt;/b&gt; sub-page is largely unchanged, except for a slight re-shuffling of controls. &amp;nbsp;As its name suggests, this page is mainly focused around how the notifications will look.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-EkuVACHLNJU/TyRbF80wJ3I/AAAAAAAAAIQ/WCBCUbqKL5w/s1600/noti-layout.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://2.bp.blogspot.com/-EkuVACHLNJU/TyRbF80wJ3I/AAAAAAAAAIQ/WCBCUbqKL5w/s320/noti-layout.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;[Layout]&lt;/b&gt; is all about where notifications will appear, specifically which monitor and then which corner of it to start from.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4gqXHK5GV-k/TyRbGtSArjI/AAAAAAAAAIU/qsc2-lFuwJ8/s1600/noti-sounds.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://1.bp.blogspot.com/-4gqXHK5GV-k/TyRbGtSArjI/AAAAAAAAAIU/qsc2-lFuwJ8/s320/noti-sounds.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;[Sounds]&lt;/b&gt; is pretty much unchanged, except they have their own page again now!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-D9RXTtyiRM4/TyRbD7xBO7I/AAAAAAAAAH4/qbOQaxbf7zk/s1600/noti-advanced.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://4.bp.blogspot.com/-D9RXTtyiRM4/TyRbD7xBO7I/AAAAAAAAAH4/qbOQaxbf7zk/s320/noti-advanced.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;And, lastly, an &lt;b&gt;[Advanced]&lt;/b&gt; page which covers things like automatic content detection and visual aids.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;You'll also note the renamed &lt;b&gt;[AddOns]&lt;/b&gt; and &lt;b&gt;[Options]&lt;/b&gt; pages - these are still in a state of flux, so I'll post more about them once they're a bit more stable.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-6061418109595751595?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/6061418109595751595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/rework-continues.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6061418109595751595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6061418109595751595'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/rework-continues.html' title='The rework continues...'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-aoJk1yaJo_Q/TyRbCJgK21I/AAAAAAAAAHw/nbFOaaoPKSQ/s72-c/applications.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-1771153074020493962</id><published>2012-01-27T17:11:00.000Z</published><updated>2012-01-27T17:11:11.998Z</updated><title type='text'>Revised Panel Layout</title><content type='html'>There was a suggestion a while back to re-organise Snarl's Preferences Panel. &amp;nbsp;I need a lot of convincing to do this sort of thing as knowing where a certain setting is quickly becomes second nature to users, so moving them around easily causes frustration and loss of productivity.&lt;br /&gt;&lt;br /&gt;That said, I was doing some work on the User Guide today (which Google lost for me, grrr) and it caused me to take a second look at the layout of the panel. &amp;nbsp;The following is the result of a quick shuffle around of the &lt;b&gt;[General]&lt;/b&gt; and &lt;b&gt;[Advanced]&lt;/b&gt; tabs (with the former taking the place of the latter):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-9fnrvlheWsw/TyLTEY5_X8I/AAAAAAAAAHo/lHmdcV665S8/s1600/revised_prefs.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://3.bp.blogspot.com/-9fnrvlheWsw/TyLTEY5_X8I/AAAAAAAAAHo/lHmdcV665S8/s320/revised_prefs.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It now means:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The &lt;b&gt;[Apps]&lt;/b&gt; page is now the first thing displayed when the panel appears;&lt;/li&gt;&lt;li&gt;All of Snarl's general tweaks are now in one page;&lt;/li&gt;&lt;li&gt;Additional sub-pages can easily be added if further break-out is necessary.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Good? &amp;nbsp;Worth putting in 2.5.1? &amp;nbsp;Should wait till 2.6? &amp;nbsp;Let me have your thoughts...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-1771153074020493962?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/1771153074020493962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/revised-panel-layout.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1771153074020493962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1771153074020493962'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/revised-panel-layout.html' title='Revised Panel Layout'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-9fnrvlheWsw/TyLTEY5_X8I/AAAAAAAAAHo/lHmdcV665S8/s72-c/revised_prefs.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-3766267409193927190</id><published>2012-01-26T18:00:00.000Z</published><updated>2012-01-26T18:00:05.200Z</updated><title type='text'>Snarl 2.5.1 Beta 2 Released</title><content type='html'>Snarl 2.5.1 Beta 2 is now available directly from &lt;a href="https://sourceforge.net/projects/snarlwin/files/Snarl/Current%20Beta/" target="_blank"&gt;here&lt;/a&gt;, or via the "Download latest beta" link on http://www.getsnarl.info. &amp;nbsp;I've already mentioned a number of the key new features that have gone in, but here's a quick re-cap:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Revised Runnable style engine;&lt;/li&gt;&lt;li&gt;New Scripted style engine - allows for VBScript-based styles to be created;&lt;/li&gt;&lt;li&gt;New Scroller style engine, including two work-in-progress scrolling styles;&lt;/li&gt;&lt;li&gt;New AudioMon extension which has been extensively revised;&lt;/li&gt;&lt;li&gt;Speech style reinstated;&lt;/li&gt;&lt;li&gt;Updated SysInfo extension;&lt;/li&gt;&lt;li&gt;Can now copy selected missed or historical notifications to clipboard;&lt;/li&gt;&lt;li&gt;Bug fixes to Snarl Framework;&lt;/li&gt;&lt;li&gt;Lots of bug fixes and minor improvements to Snarl itself.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Enjoy!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-3766267409193927190?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/3766267409193927190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/snarl-251-beta-2-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3766267409193927190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3766267409193927190'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/snarl-251-beta-2-released.html' title='Snarl 2.5.1 Beta 2 Released'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-5660222928022732290</id><published>2012-01-24T23:51:00.001Z</published><updated>2012-01-24T23:51:33.104Z</updated><title type='text'>Beta 2 held, for good reason</title><content type='html'>2.5.1 Beta 2 has passed testing but I've decided to hold it and re-release with all the recent fixes I've made applied.  Thanks goes to all the contributors who've posted bug reports and feature suggestions and it just seems silly to release a beta with a bunch of known (and fixed) problems.Stand by though: it's just a case of packaging it all up and Beta 2 will be ready for release!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-5660222928022732290?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/5660222928022732290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/beta-2-held-for-good-reason.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/5660222928022732290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/5660222928022732290'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/beta-2-held-for-good-reason.html' title='Beta 2 held, for good reason'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-484639507202559941</id><published>2012-01-21T19:44:00.001Z</published><updated>2012-01-21T19:44:23.546Z</updated><title type='text'>Scroller styles</title><content type='html'>I meant to post some pics, but forgot. &amp;nbsp;Here they are...&lt;br /&gt;&lt;br /&gt;First Person Shooter 0.1 Alpha (yes, I agree, the red is a bit freaky looking - it didn't look quite so bad on my laptop display):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0dqPZtY2s4I/TxsVKez16ZI/AAAAAAAAAHM/BHjXdgZPrKM/s1600/fps.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://3.bp.blogspot.com/-0dqPZtY2s4I/TxsVKez16ZI/AAAAAAAAAHM/BHjXdgZPrKM/s320/fps.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;News Ticker 0.1 Alpha. &amp;nbsp;The scrolling message stops when you mouse-over the ticker. &amp;nbsp;I'm probably going to add support for actions and the default callback before it goes 1.0:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-n1T6QCVEzDo/TxsVLbJU4eI/AAAAAAAAAHU/afHui3MS4WA/s1600/ticker.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="180" src="http://2.bp.blogspot.com/-n1T6QCVEzDo/TxsVLbJU4eI/AAAAAAAAAHU/afHui3MS4WA/s320/ticker.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-484639507202559941?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/484639507202559941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/scroller-styles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/484639507202559941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/484639507202559941'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/scroller-styles.html' title='Scroller styles'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-0dqPZtY2s4I/TxsVKez16ZI/AAAAAAAAAHM/BHjXdgZPrKM/s72-c/fps.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-1852066599037957544</id><published>2012-01-21T13:02:00.003Z</published><updated>2012-01-21T13:02:56.194Z</updated><title type='text'>Developer Guide updated</title><content type='html'>Documenting Snarl, it's API, styles and extensions is a massive and on-going piece of work. &amp;nbsp;These last few days I've made a number of changes to the &lt;a href="https://sites.google.com/site/snarlapp/developers/developer-guide" target="_blank"&gt;Developer Guide&lt;/a&gt;, and have finally gotten around to populating some of the major gaps in it - so much so that I thought it'd be worth sharing the fact!&lt;br /&gt;&lt;br /&gt;Whether you're an existing developer, a potential developer, or just someone who's reading this blog - take a look at it and let me know what you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-1852066599037957544?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/1852066599037957544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/developer-guide-updated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1852066599037957544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1852066599037957544'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/developer-guide-updated.html' title='Developer Guide updated'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-7279031732397561749</id><published>2012-01-20T18:00:00.000Z</published><updated>2012-01-20T18:00:00.035Z</updated><title type='text'>R2.5.1 Beta 2 due soon, brings more styles...</title><content type='html'>R2.5.1 Beta 2 is just going through it's final paces on my variety of VMs but it brings with it a lot of new stuff so, before I forget it all, I thought I'd do a quick post on what's new...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Styles&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I've included a bunch of style engines in this release, most of which should be considered experimental (and, as such, might not make it into the 2.5.1 final release) - and one which seems to have been completely missed from the installation package.&lt;br /&gt;&lt;br /&gt;The missing one is sapi.styleengine which provides the Speech style. &amp;nbsp;I'm not sure at what point this went missing from the installation, but it's back now and the style itself has been revised, reworked and now bears a shiny 1.0 release against its name. &amp;nbsp;When it loads up, it will present all the different voices you have installed as schemes so you can use a different voice for each notification class, should you wish. &amp;nbsp;It also respects priority notifications now, and will interrupt speaking an existing notification if a priority one appears.&lt;br /&gt;&lt;br /&gt;Next up is a revised version of the Runnable style engine. &amp;nbsp;This should be considered experimental at best and it shouldn't really have ended up in the R2.5 release as I don't think it's quite ready for general use. &amp;nbsp;That said, I've made some changes to it which might improve things, specifically:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It now loads its styles from %COMMONAPPDATA% and %APPDATA% (in that order)&lt;/li&gt;&lt;li&gt;The default wait time for a style to complete its stuff is now 750ms&lt;/li&gt;&lt;li&gt;Lots of debug output now included&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;I'd appreciate feedback on this, and I'd really be interested if anyone fancies &lt;a href="https://sites.google.com/site/snarlapp/developers/creating-addons/runnable-styles" target="_blank"&gt;writing their own runnable style&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Alongside this, I've included effectively a developer release / alpha version of the scripted style engine which I've mentioned in recent posts here. &amp;nbsp;This is very much a work in progress but it's advanced enough for me to be able to convert the runnable Cobalt (Anarchic) style over, so I thought it'd be worth including. &amp;nbsp;And, once again, I'd really be interested in hearing if people fancy creating their own styles using this engine.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lastly, there's another brand new style engine which has actually been in development for quite some time now. &amp;nbsp;I finally got around to pulling all the various bits and pieces together in time to get it included in this beta. &amp;nbsp;It's called "scroller", which might give a hint to the type of styles it provides.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At the moment it provides two styles: FPS and News Ticker. &amp;nbsp;FPS is a vertically scrolling window which mimics the info console that appears in many First Person Shooter games; News Ticker is a horizontally scrolling window which displays the notification in a similar way to the tickers on television news channels.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Both are configurable, however neither have a UI at the moment so you'll have to tinker with their&amp;nbsp;configuration&amp;nbsp;files manually for now - I'll provide more details on those in a future post. &amp;nbsp;Once again, they're out there for comment.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Extensions&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Only SysInfo has been changed in this release. &amp;nbsp;It now supports monitoring your external IP address and it's had some cosmetic enhancements to some of the notifications it generates.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Snarl&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The main changes to Snarl are the way it manages extensions and style engines behind the scenes. &amp;nbsp;This is mainly in response to issues people have been having when installing on Windows 7 with non-administrative accounts. &amp;nbsp;I think I've found and resolved all the path issues now but, again, I encourage feedback on this. &amp;nbsp;All the changes are completely backwards compatible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Standby for a release announcement!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-7279031732397561749?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/7279031732397561749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/r251-beta-2-due-soon-brings-more-styles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/7279031732397561749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/7279031732397561749'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/r251-beta-2-due-soon-brings-more-styles.html' title='R2.5.1 Beta 2 due soon, brings more styles...'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-635106627684485685</id><published>2012-01-18T18:00:00.000Z</published><updated>2012-01-18T18:00:03.723Z</updated><title type='text'>More on scripting...</title><content type='html'>We now have scripted styles!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The code needs refining, and I'm not convinced I should be using the melon graphics.library over rolling my own equivalent, but things are working well enough already for me to be able to convert the Cobalt (Anarchic) Runnable Style into an equivalent scripted style.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here it is in Snarl's style list:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Q4a9y8rXa4E/TxaUPRkFTVI/AAAAAAAAAG0/Ce4vTZlloSs/s1600/cobalt-in-snarl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" src="http://4.bp.blogspot.com/-Q4a9y8rXa4E/TxaUPRkFTVI/AAAAAAAAAG0/Ce4vTZlloSs/s320/cobalt-in-snarl.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And here are some resulting notification captures of it:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0BZSb3a0fYY/TxaUYoOKmCI/AAAAAAAAAG8/MZ8bO_C-_Qg/s1600/cobalt-dark-priority.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="126" src="http://2.bp.blogspot.com/-0BZSb3a0fYY/TxaUYoOKmCI/AAAAAAAAAG8/MZ8bO_C-_Qg/s320/cobalt-dark-priority.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Y88_d0FcoZI/TxaUY9p-DtI/AAAAAAAAAHA/WubcSKse6oA/s1600/cobalt-light.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="126" src="http://4.bp.blogspot.com/-Y88_d0FcoZI/TxaUY9p-DtI/AAAAAAAAAHA/WubcSKse6oA/s320/cobalt-light.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And, just for the hell of it, here's the VBScript which creates it:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Function style_Init()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; ' // provide information about our style here&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; With style.info&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .format = "display"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .name = "Cobalt Scripted"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .description = "A clean, sleek-looking style (powered by VBScript)"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .version = 0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .revision = 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .icon = style.path &amp;amp; "icon.png"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .schemes = "Light;Dark"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; End With&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;End Function&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Sub style_Draw()&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; ' // need to draw our content here&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; ' // on entry:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; ' // &amp;nbsp; "view" is an mfxView&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; ' // &amp;nbsp; "style.notification" is a list of the notification elements&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; ' // all we do is draw our content in "view" :)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Dim pbIcon&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Dim xEdge&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Dim sz&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Dim pxTitle&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Dim pxText&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Const TITLE_TEXT_GAP = 2&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Const MARGIN_SIZE = 20&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;Const POPUP_WIDTH = 350&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; With view&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .SizeTo 350, 78&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Set pbIcon = load_image_obj(style.notification.ValueOf("icon"))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; xEdge = MARGIN_SIZE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; If is_valid_image((pbIcon)) Then _&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; xEdge = xEdge + 32 + 10&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; If style.notification.ValueOf("title") &amp;lt;&amp;gt; "" Then&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetFont "Arial", 9, True &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Set pxTitle = measure_string(style.notification.ValueOf("title"), new_BRect(xEdge, 0, .Width - MARGIN_SIZE, 16384))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; End If&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; If style.notification.ValueOf("text") &amp;lt;&amp;gt; "" Then&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetFont "Arial", 9&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Set pxText = measure_string(style.notification.ValueOf("text"), new_BRect(xEdge, 0, .Width - MARGIN_SIZE, 16384))&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; End If&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; ' /* final size */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .SizeTo POPUP_WIDTH, _&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MAX(MARGIN_SIZE + MARGIN_SIZE + TITLE_TEXT_GAP + 32, _&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;  &lt;/span&gt;MARGIN_SIZE + pxTitle.Height + TITLE_TEXT_GAP + pxText.Height + MARGIN_SIZE)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; ' /* background */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .EnableSmoothing True&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .TextMode = 4&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;   &lt;/span&gt;'// MFX_TEXT_ANTIALIAS&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Select Case style.notification.ValueOf("scheme")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Case "light"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(250, 250, 250)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .FillRoundRect .Bounds, 4, 4&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(0, 0, 0, 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetLowColour rgba(0, 0, 0, 32)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .FillRoundRect .Bounds, 4, 4, 3&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Case Else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(22, 22, 22)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .FillRoundRect .Bounds, 4, 4&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(0, 0, 0, 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetLowColour rgba(0, 0, 0, 255)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .FillRoundRect .Bounds, 4, 4, 3&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; End Select&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; ' /* priority */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; If string_as_long(style.notification.ValueOf("priority")) &amp;gt; 0 Then&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(236, 59, 0, 220)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .StrokeRect .Bounds, 2&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; End If&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; ' /* icon */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .DrawScaledImage (pbIcon), new_BPoint(MARGIN_SIZE, MARGIN_SIZE), new_BPoint(32, 32)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; ' /* title */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .SetFont "Arial", 9, True &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Select Case style.notification.ValueOf("scheme")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Case "light"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(0, 0, 0)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Case Else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(255, 255, 255)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; End Select&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; pxTitle.OffsetBy xEdge, MARGIN_SIZE&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .DrawString style.notification.ValueOf("title"), (pxTitle), 0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; ' /* text */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .SetFont "Arial", 9&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Select Case style.notification.ValueOf("scheme")&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Case "light"&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(0, 0, 0, 198)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; Case Else&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; .SetHighColour rgba(255, 255, 255, 198)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; End Select&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; pxText.OffsetBy xEdge, MARGIN_SIZE + pxTitle.Height + TITLE_TEXT_GAP&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; &amp;nbsp; .DrawString style.notification.ValueOf("text"), (pxText), 0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp; End With&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;End Sub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-635106627684485685?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/635106627684485685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/more-on-scripting.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/635106627684485685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/635106627684485685'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/more-on-scripting.html' title='More on scripting...'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-Q4a9y8rXa4E/TxaUPRkFTVI/AAAAAAAAAG0/Ce4vTZlloSs/s72-c/cobalt-in-snarl.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-6468991658139180408</id><published>2012-01-16T17:41:00.002Z</published><updated>2012-01-16T17:41:28.804Z</updated><title type='text'>Styles and extensions in Notepad?</title><content type='html'>Want to create styles and/or extensions for Snarl? &amp;nbsp;Don't have an expensive development environment to hand? &amp;nbsp;Then keep on reading...&lt;br /&gt;&lt;br /&gt;The next major Snarl release will feature support for scripted extensions and styles. &amp;nbsp;Initially support will be limited to VBScript, but I expect JScript to come along very soon after and I'm really hoping I can include support for newer languages (Python for example) as well.&lt;br /&gt;&lt;br /&gt;The code for scripted extensions is already nearly done and is currently running in a simple test bed that proxies Snarl and, in a complete change in my usual practice, you can even read the &lt;a href="https://sites.google.com/site/snarlapp/developers/creating-addons/scripted-extensions-reference"&gt;Scripted Extension Reference&lt;/a&gt; now as it's already online!&lt;br /&gt;&lt;br /&gt;Scripted styles will work in a very similar way, and you'll be able to build both display and redirect styles.&lt;br /&gt;&lt;br /&gt;So, dust off Notepad.exe, swot up on &lt;a href="http://msdn.microsoft.com/en-us/library/t0aew7h6"&gt;VBScript&lt;/a&gt;, and get cracking - the SDK will be available very soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-6468991658139180408?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/6468991658139180408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/styles-and-extensions-in-notepad.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6468991658139180408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6468991658139180408'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/styles-and-extensions-in-notepad.html' title='Styles and extensions in Notepad?'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-8987039368881277283</id><published>2012-01-05T10:13:00.001Z</published><updated>2012-01-05T10:14:29.364Z</updated><title type='text'>New Apps!</title><content type='html'>First up, thanks to some excellent feedback from a user, Sven has recently completely rewritten his FileSystemSnarl application. &amp;nbsp;Here's what new in 2.0:&lt;br /&gt;&lt;div class="p1"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Cleaner layout&lt;/li&gt;&lt;li&gt;Placeholders in all notification classes (titles and bodies)&lt;/li&gt;&lt;li&gt;Persistent settings&lt;/li&gt;&lt;li&gt;"Jump start" option (directly start watching when folder name is valid)&lt;/li&gt;&lt;li&gt;Minimize to tray on startup option&lt;/li&gt;&lt;li&gt;Uses the latest Snarl API&lt;/li&gt;&lt;li&gt;New installer&lt;/li&gt;&lt;li&gt;Now licensed under BSD license&lt;/li&gt;&lt;/ul&gt;And some pics...&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/-CxwgY4-5Z-o/TwV08AwtQTI/AAAAAAAAAF4/WtvkpWGjXDM/s1600/488090543.png" imageanchor="1" style="clear: left; margin-bottom: 1em;"&gt;&lt;img border="0" height="191" src="http://1.bp.blogspot.com/-CxwgY4-5Z-o/TwV08AwtQTI/AAAAAAAAAF4/WtvkpWGjXDM/s320/488090543.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-e1e6qJ7sJBI/TwV09DfK_LI/AAAAAAAAAF8/J1D5hKvbmMs/s1600/489060212.png" imageanchor="1" style="clear: left; margin-bottom: 1em;"&gt;&lt;img border="0" height="158" src="http://3.bp.blogspot.com/-e1e6qJ7sJBI/TwV09DfK_LI/AAAAAAAAAF8/J1D5hKvbmMs/s200/489060212.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;/div&gt;Secondly,&amp;nbsp;Pako's &lt;a href="http://www.eventghost.net/"&gt;EventGhost&lt;/a&gt;&amp;nbsp;Snarl plugin is finally ready. &amp;nbsp;I've got to say that that this is an amazing piece of work, not least as it's all written in Python!&lt;br /&gt;&lt;br /&gt;Some pics:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-eUn11CpzJI8/TwV3mtY3K9I/AAAAAAAAAGg/cSCoBbgkdYc/s1600/Notification.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="73" src="http://3.bp.blogspot.com/-eUn11CpzJI8/TwV3mtY3K9I/AAAAAAAAAGg/cSCoBbgkdYc/s320/Notification.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-RF4j3BUhldM/TwV3nV6JPJI/AAAAAAAAAGk/IuOsqgUOKsA/s1600/Notification%25252BMenu.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="157" src="http://1.bp.blogspot.com/-RF4j3BUhldM/TwV3nV6JPJI/AAAAAAAAAGk/IuOsqgUOKsA/s320/Notification%25252BMenu.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can download the plugin &lt;a href="http://www.eventghost.net/forum/viewtopic.php?f=9&amp;amp;t=3587"&gt;here&lt;/a&gt;, and&amp;nbsp;he's also made available his &lt;a href="http://sourceforge.net/p/pysnarl/code/9/tree/"&gt;Snarl Python bindings&lt;/a&gt; for others to use too - how cool is that?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-8987039368881277283?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/8987039368881277283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/new-apps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8987039368881277283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8987039368881277283'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/new-apps.html' title='New Apps!'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-CxwgY4-5Z-o/TwV08AwtQTI/AAAAAAAAAF4/WtvkpWGjXDM/s72-c/488090543.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-3352831267746164063</id><published>2012-01-04T10:46:00.002Z</published><updated>2012-01-04T10:48:35.817Z</updated><title type='text'>New "sensitivity" Parameter</title><content type='html'>Day-to-day I use the Prowl style to forward notifications to my iPhone while I'm away from my computer. &amp;nbsp;I've noticed however that sometimes I get notifications which contain information (people's names, phone numbers - even site addresses) that I'd rather not traverse the Internet or sit on a third-party server somewhere.&lt;br /&gt;&lt;br /&gt;To combat this, I added a "redact if user is away" setting to my Outlook AddOn. &amp;nbsp;It works, but it's clunky and it only works for that one AddOn - what about all my other notifications?&lt;br /&gt;&lt;br /&gt;Initially I thought about adding &lt;span style="background-color: #fff2cc; font-family: 'Courier New', Courier, monospace;"&gt;alt-title&lt;/span&gt;&amp;nbsp;and &lt;span style="background-color: #fff2cc; font-family: 'Courier New', Courier, monospace;"&gt;alt-text&lt;/span&gt;&amp;nbsp;arguments to the notify command which would be passed to redirect styles as &lt;span style="background-color: #fff2cc; font-family: 'Courier New', Courier, monospace;"&gt;title&lt;/span&gt;&amp;nbsp;and &lt;span style="background-color: #fff2cc; font-family: 'Courier New', Courier, monospace;"&gt;text&lt;/span&gt;&amp;nbsp;respectively when the user is away. &amp;nbsp;This is good, but it's still clunky.&lt;br /&gt;&lt;br /&gt;Then it hit me - use a "sensitivity" value in a notification. &amp;nbsp;We can already assign priorities to notifications, so why not a sensitivity rating?&lt;br /&gt;&lt;br /&gt;So here we are, Snarl 2.5.1 will include support for &lt;span style="background-color: #fff2cc; font-family: 'Courier New', Courier, monospace;"&gt;sensitivity=some_value&lt;/span&gt;&amp;nbsp;in notifications. &amp;nbsp;In fact, Snarl itself won't pay any attention to it; it'll just pass it verbatim to the selected style, but I'm updating certain redirect styles to change their behaviour based on the value passed.&lt;br /&gt;&lt;br /&gt;As for defined values, my view is that it will be an unsigned integer ranging from 0 to 128. &amp;nbsp;The current set of pre-defined values are:&lt;br /&gt;&lt;br /&gt;0 - Normal (i.e. not sensitive)&lt;br /&gt;16 - Personal&lt;br /&gt;32 - Private&lt;br /&gt;48 - Confidential&lt;br /&gt;64 - Restricted&lt;br /&gt;80 - Secret&lt;br /&gt;96 - Top Secret&lt;br /&gt;&lt;br /&gt;The coders amongst you will see that these values translate into 0x00, 0x10, 0x20 and 0x30 respectively, which gives us some margin for more granular definitions in the future (e.g. Personal - No Contractors could be 0x11). &amp;nbsp;The even more astute will note that the first four are the values from the Outlook &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.olsensitivity.aspx"&gt;&lt;span style="background-color: #fff2cc; font-family: 'Courier New', Courier, monospace;"&gt;OlSensitivity&lt;/span&gt;&lt;/a&gt; enumeration multiplied by 16.&lt;br /&gt;&lt;br /&gt;Values 112 and 128 are currently undefined and it's unlikely values 64-96 will be of frequent use, but they're defined nonetheless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-3352831267746164063?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/3352831267746164063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/new-sensitivity-parameter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3352831267746164063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3352831267746164063'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/new-sensitivity-parameter.html' title='New &quot;sensitivity&quot; Parameter'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-1380183819239809500</id><published>2012-01-03T12:03:00.001Z</published><updated>2012-01-03T12:03:10.460Z</updated><title type='text'>Site Redesign</title><content type='html'>The Snarl website has had a minor facelift to welcome in the new year. &amp;nbsp;You'll have probably already noticed the News page simply redirects to this blog and that news posts are no longer published to the front page.&lt;br /&gt;&lt;br /&gt;The Styles, Extensions and Developer pages are also undergoing some rework too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-1380183819239809500?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/1380183819239809500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/site-redesign.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1380183819239809500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1380183819239809500'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/site-redesign.html' title='Site Redesign'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-8521068629167239597</id><published>2012-01-01T09:48:00.001Z</published><updated>2012-01-01T09:48:50.594Z</updated><title type='text'>Happy New Year!</title><content type='html'>I'd just like to wish all our users, developers and readers a very Happy New Year and I hope 2012 is a good one for you. &amp;nbsp;We have some fantastic features planned for Snarl (the roadmap is now good through 3.0 and even into 4.0) and we have a bunch of other projects on the go - so here's to the next 12 months!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-8521068629167239597?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/8521068629167239597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2012/01/happy-new-year.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8521068629167239597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8521068629167239597'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2012/01/happy-new-year.html' title='Happy New Year!'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-1073245419294907007</id><published>2011-12-29T20:28:00.001Z</published><updated>2011-12-29T20:30:24.508Z</updated><title type='text'>New Feedback Site</title><content type='html'>After a suggestion on the forum (which was +1&amp;#39;d several times) to have a better way of handling feature suggestions (no, the irony isn&amp;#39;t lost on me), I&amp;#39;ve set up a feedback page for Snarl using &lt;a href="http://uservoice.com"&gt;uservoice.com&lt;/a&gt; as it seems to have all the features we need and that&amp;#39;s pretty impressive given the price (it&amp;#39;s free).&lt;p&gt;Although it&amp;#39;s not live on the home page just yet, I thought I&amp;#39;d post a note here in case people want to try it out.&lt;p&gt;&lt;a href="http://snarl.uservoice.com/"&gt;http://snarl.uservoice.com/&lt;/a&gt;&lt;p&gt;Feel free to post suggestions about Snarl, the website - and the feedback site :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-1073245419294907007?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/1073245419294907007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2011/12/new-feedback-site.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1073245419294907007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1073245419294907007'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2011/12/new-feedback-site.html' title='New Feedback Site'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-3878879770147108501</id><published>2011-09-23T19:05:00.000+01:00</published><updated>2011-09-23T19:05:15.145+01:00</updated><title type='text'>R2.5 Beta 2 Progress</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;R2.5 Beta 2 is shaping up nicely thanks to some fantastic suggestions by people on the discussion forum. &amp;nbsp;In fact, I'm so pleased with progress, I thought it was about time I shared some more detail.&lt;br /&gt;&lt;br /&gt;First up we have unification of notification history with the missed notifications panel. &amp;nbsp;The latter has now gone and has been replaced with a list of missed notifications in a sub-page of the [History] page, as per the following:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-YDEQdRcW244/TnzIH__a4bI/AAAAAAAAAEU/u3rBcNTNP7A/s1600/history.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="295" src="http://4.bp.blogspot.com/-YDEQdRcW244/TnzIH__a4bI/AAAAAAAAAEU/u3rBcNTNP7A/s320/history.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So now you have all of your notifications easily accessible and - thanks again to a suggestion from a contributor, you can now reply any notification from either of the lists simply by double-clicking its entry.&lt;br /&gt;&lt;br /&gt;Next, we have the new Style Defaults concept. &amp;nbsp;These control the appearance of Snarl's default style but, because they're stored in a separate configuration file, they can be easily read by other styles - the concept being that all styles should offer a "use Snarl defaults" option alongside their own customisations. &amp;nbsp;This allows styles to provide their own look and feel while still aligning with the user's own requirements.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-a1OBaf_f-AM/TnzJsZoSaSI/AAAAAAAAAEY/_LmNOmW4Gnw/s1600/styledefaults.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://3.bp.blogspot.com/-a1OBaf_f-AM/TnzJsZoSaSI/AAAAAAAAAEY/_LmNOmW4Gnw/s320/styledefaults.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Finally we have a new, slightly unusual, unmanaged style called &lt;b&gt;Outlook Logger&lt;/b&gt;. &amp;nbsp;As the name implies, this style simply takes the notification content, turns it into an email and plonks it into your Outlook inbox. &amp;nbsp;Sounds a bit limited in use, but it's a neat way of being able to permanently store certain notifications should you want to (and you can always forward them on).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-3878879770147108501?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/3878879770147108501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2011/09/r25-beta-2-progress.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3878879770147108501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3878879770147108501'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2011/09/r25-beta-2-progress.html' title='R2.5 Beta 2 Progress'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-YDEQdRcW244/TnzIH__a4bI/AAAAAAAAAEU/u3rBcNTNP7A/s72-c/history.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-8198610192602288082</id><published>2011-09-15T13:55:00.000+01:00</published><updated>2011-09-15T13:57:27.637+01:00</updated><title type='text'>Dev Corner #2: Hiding In The Open</title><content type='html'>The hide action is much maligned - but is this fair?&lt;br /&gt;&lt;br /&gt;In most cases, yes, the &lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;hide&lt;/span&gt;&lt;/strong&gt; action is a Bad Bad Thing because it takes control of notifications away from the user and gives it back to the application. Generally speaking, there should be no occasion when an application needs to programmatically remove a notification - how would it know if the user had finished reading it for example?&amp;nbsp; The closest sensible scenario where removing a notification is reasonable would be when the state the notification is alerting the user to no long exists - the most obvious example being a low power notification which is removed when the user re-connects the AC supply.&lt;br /&gt;&lt;br /&gt;That said, I recently added a new feature to the Clock+ extension. The feature allows for the display of the current time and date when the user holds the TAB key down, or moves the mouse pointer to a certain screen corner. The notification is only on-screen for as long as the key is held/mouse is in the screen corner (or until it times out) so it must be programmatically hidden when the key is released/mouse exits - step forward the &lt;strong&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, Courier, monospace;"&gt;hide&lt;/span&gt;&lt;/strong&gt; action...&lt;br /&gt;&lt;br /&gt;So, in conclusion, the hide action is a Bad Thing but, like many things that are bad for you, when used in moderation&amp;nbsp;and with&amp;nbsp;good reasoning, it can be a Good Thing.&amp;nbsp;&amp;nbsp;Almost.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-8198610192602288082?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/8198610192602288082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2011/09/dev-corner-2-hiding-in-open.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8198610192602288082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8198610192602288082'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2011/09/dev-corner-2-hiding-in-open.html' title='Dev Corner #2: Hiding In The Open'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-1069186705060064265</id><published>2011-09-07T17:17:00.000+01:00</published><updated>2011-09-07T17:17:16.283+01:00</updated><title type='text'>Dev Corner #1: The new V42 API</title><content type='html'>The Snarl Windows API has changed considerably over the years with V42 finally providing unification with the various network protocols and - most importantly - a completely extensible model which will grow and flex without the need for major reworking.&lt;br /&gt;&lt;br /&gt;With the move to V42, there's also a shift in the ethos behind how your app interacts with Snarl - and that's what this article is about.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The world before V42&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Prior to V42, the only way to interact with Snarl was to acquire a &lt;i&gt;token &lt;/i&gt;(a 32-bit number issued by Snarl unique to the current session) via one of the various registration functions.  Once a token had been acquired, the application could then interact with Snarl.While a sound model, there were two key issues:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Languages which don't easily support obtaining return values (specifically command-lines and scripts) don't fit well;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Handling re-registration - for example, if Snarl is unloaded and restarted by the user while the application is running.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Dealing with these issues can be complex and time-consuming for the application developer - something which clearly goes against the whole Snarl ethos.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;The V42 Model&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The V42 API introduces the concept of &lt;i&gt;application signatures&lt;/i&gt; and &lt;i&gt;UIDs&lt;/i&gt;&amp;nbsp;(unique identifiers) that are provided by the application itself.  This is significant: it now means the application is in total control of interacting with Snarl, not the other way round.  Here's a conceptual register/notify/unregister cycle:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;register?app-sig=my/app&amp;amp;title=My App&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;notify?app-sig=my/app&amp;amp;title=Hello, world!&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;unregister?app-sig=my/app&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On the face of it this doesn't do anything clever, but you'll notice there is now no reliance on anything returned by Snarl - in fact you could quite easily write these three lines into three separate batch files, scripts or apps and the effect would be the same.&lt;br /&gt;&lt;br /&gt;This new model also significantly improves dealing with Snarl disappearing spuriously.  Instead of the older "register-on-start" model, applications should now adopt a "register-the demand" model, as demonstrated by the following pseudo code:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #741b47; font-family: 'Courier New', Courier, monospace;"&gt;Sub show_a_notification(title, text)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #741b47; font-family: 'Courier New', Courier, monospace;"&gt;If register(sig) &amp;gt; 0 Then notify(sig, title, text)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #741b47; font-family: 'Courier New', Courier, monospace;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #741b47; font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #741b47; font-family: 'Courier New', Courier, monospace;"&gt;Sub tidy_up()&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #741b47; font-family: 'Courier New', Courier, monospace;"&gt;unregister(sig)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #741b47; font-family: 'Courier New', Courier, monospace;"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The application now calls s&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;span class="Apple-style-span" style="color: #741b47;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;how_a_notification()&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;whenever it wants to display a notification.  This registers the application with Snarl and, if successful, displays the notification.  When the application ends, it calls&amp;nbsp;t&lt;span class="Apple-style-span" style="color: #741b47; font-family: 'Courier New', Courier, monospace;"&gt;idy_up()&lt;/span&gt; to unregister.Ultimately, the application no longer needs to track the state of Snarl, which means the pseudo code should be good for pretty much any programming environment out there.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-1069186705060064265?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/1069186705060064265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2011/09/dev-corner-1-new-v42-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1069186705060064265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1069186705060064265'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2011/09/dev-corner-1-new-v42-api.html' title='Dev Corner #1: The new V42 API'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-9144568573756357504</id><published>2011-01-05T23:18:00.000Z</published><updated>2011-01-05T23:18:23.071Z</updated><title type='text'>GNTP Progress</title><content type='html'>I finally got around to updating my Java installation to 1.6 so I could try out Daniel's test app.&lt;br /&gt;&lt;br /&gt;Things got off to a bit of a rocky start with an immediate GPF by Snarl but I soon discovered this was down to the fact that I wasn't handling big packets correctly (the demo registers 6 notification types, 5 of which have PNG icons) - in this case around 56KB.&lt;br /&gt;&lt;br /&gt;So, back to the drawing board and a few hours later we now have this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/TST8BqPUneI/AAAAAAAAADk/2Lq_ylUCYlY/s1600/jgntp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="290" src="http://2.bp.blogspot.com/_3gkleephBdE/TST8BqPUneI/AAAAAAAAADk/2Lq_ylUCYlY/s400/jgntp.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The code isn't in Snarl just yet; it's still in my GNTP listener/forwarder test app but I'm pretty pleased with the results so far. &amp;nbsp;I still need to re-do notification handling (and, of course, other stuff like subscribing and encryption handling is still a little way off) but it's getting there...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-9144568573756357504?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/9144568573756357504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2011/01/gntp-progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/9144568573756357504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/9144568573756357504'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2011/01/gntp-progress.html' title='GNTP Progress'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3gkleephBdE/TST8BqPUneI/AAAAAAAAADk/2Lq_ylUCYlY/s72-c/jgntp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-8750297951094772596</id><published>2010-12-30T19:54:00.000Z</published><updated>2010-12-30T19:54:30.211Z</updated><title type='text'>Snarl Loves Growl</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TRzhxv3nSJI/AAAAAAAAADg/wjfD-92BBOg/s1600/snarl_loves_growl.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="148" src="http://4.bp.blogspot.com/_3gkleephBdE/TRzhxv3nSJI/AAAAAAAAADg/wjfD-92BBOg/s320/snarl_loves_growl.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It's simplistic at the moment, but Snarl now has support for the GNTP protocol which has been adopted by the Mac Growl team and will feature in their next major release of Growl.&lt;br /&gt;&lt;br /&gt;Those of you on the Snarl developer programme will be able to test this for yourselves in R2.4 DR7, due out shortly.&lt;br /&gt;&lt;br /&gt;Happy New Year from the Snarl team!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-8750297951094772596?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/8750297951094772596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/12/snarl-loves-growl.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8750297951094772596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8750297951094772596'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/12/snarl-loves-growl.html' title='Snarl Loves Growl'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3gkleephBdE/TRzhxv3nSJI/AAAAAAAAADg/wjfD-92BBOg/s72-c/snarl_loves_growl.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-4046605409025188588</id><published>2010-12-22T14:07:00.000Z</published><updated>2010-12-22T14:08:01.168Z</updated><title type='text'>R2.4 progress</title><content type='html'>A few more pics showing recent progress on R2.4, mainly around the network connectivity side of things:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TRIC_ybW7VI/AAAAAAAAADM/kAu-yf8jfQw/s1600/net1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="272" src="http://4.bp.blogspot.com/_3gkleephBdE/TRIC_ybW7VI/AAAAAAAAADM/kAu-yf8jfQw/s400/net1.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The above shows a Growl UDP-based application and a native SNP 2.0 application connected to Snarl. &amp;nbsp;Notice the new emblems which appear in the notification indicating the application has registered remotely (i.e. via IP) and that indicate the notification has actions available.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3gkleephBdE/TRIDw9OSN7I/AAAAAAAAADQ/zpIv5BxOQFg/s1600/net2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="276" src="http://3.bp.blogspot.com/_3gkleephBdE/TRIDw9OSN7I/AAAAAAAAADQ/zpIv5BxOQFg/s400/net2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Quick snapshot showing a notification generated via the Growl UDP interface. &amp;nbsp;Note, again, the emblem in the notification indicating the notification was received via an IP connection.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TRIEBk47PsI/AAAAAAAAADU/j5SaK4oYqzA/s1600/net3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="297" src="http://4.bp.blogspot.com/_3gkleephBdE/TRIEBk47PsI/AAAAAAAAADU/j5SaK4oYqzA/s400/net3.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This shot shows off the new password-protection feature being implemented in R2.4. &amp;nbsp;When registering, an application can supply a password which subsequent notification requests must also supply. &amp;nbsp;If an invalid password is supplied the application will receive an "Authentication Failed" response. &amp;nbsp;Note the further emblem which indicates the application is password-protected.&lt;br /&gt;&lt;br /&gt;One thing worth noting is that the Win32 and SNP2.0 API's are now almost completely merged so any improvements mentioned against one apply just as much to the other.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TRIFFdHbz0I/AAAAAAAAADY/xu2LBmciCng/s1600/net4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="299" src="http://4.bp.blogspot.com/_3gkleephBdE/TRIFFdHbz0I/AAAAAAAAADY/xu2LBmciCng/s400/net4.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This last shot shows SNP2.0 responses in effect. &amp;nbsp;When a notification is clicked, closed, or times out, a response packet is sent to the socket which created it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-4046605409025188588?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/4046605409025188588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/12/r24-progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/4046605409025188588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/4046605409025188588'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/12/r24-progress.html' title='R2.4 progress'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3gkleephBdE/TRIC_ybW7VI/AAAAAAAAADM/kAu-yf8jfQw/s72-c/net1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-1360759773410180496</id><published>2010-12-14T09:13:00.000Z</published><updated>2010-12-14T09:13:36.373Z</updated><title type='text'>WTF?!</title><content type='html'>Says it all (hopefully)...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TQc0OBZD6RI/AAAAAAAAADA/h0TOHkwpva4/s1600/req-intro.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="249" src="http://4.bp.blogspot.com/_3gkleephBdE/TQc0OBZD6RI/AAAAAAAAADA/h0TOHkwpva4/s320/req-intro.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Only one requester can be active at any one time, if another requester is created, it's stacked on top of the previous one, like so:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TQc0gLXz3BI/AAAAAAAAADE/01cOsLvGTn4/s1600/req-stack.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="247" src="http://4.bp.blogspot.com/_3gkleephBdE/TQc0gLXz3BI/AAAAAAAAADE/01cOsLvGTn4/s320/req-stack.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Requesters cannot be on-screen&amp;nbsp;indefinitely. &amp;nbsp;The "2" in the bottom right corner indicates the requester has 2 seconds left before it's closed by Snarl. &amp;nbsp;A close button may be added to the requester so the user can quickly dismiss it without explicitly selecting an action.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TQc1Nbk8KhI/AAAAAAAAADI/D88j8_DDvVk/s1600/req-email.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="128" src="http://4.bp.blogspot.com/_3gkleephBdE/TQc1Nbk8KhI/AAAAAAAAADI/D88j8_DDvVk/s320/req-email.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-1360759773410180496?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/1360759773410180496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/12/wtf.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1360759773410180496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/1360759773410180496'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/12/wtf.html' title='WTF?!'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3gkleephBdE/TQc0OBZD6RI/AAAAAAAAADA/h0TOHkwpva4/s72-c/req-intro.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-6737066368340996233</id><published>2010-12-07T17:27:00.000Z</published><updated>2010-12-07T17:27:47.050Z</updated><title type='text'>New feature: Actions</title><content type='html'>A continued request is to allow notifications to have multiple choices - specifically in the form of buttons which appear within the notification itself. &amp;nbsp;I've continually resisted implementing this as I strongly believe that any notification which requires buttons is actually a system requester.&lt;br /&gt;&lt;br /&gt;That said, I agree it is sometimes useful to allow the user quick access to a small number of options from within a notification - the oft-used example is a 'new mail' notification which would have options to reply, open or delete the message.&lt;br /&gt;&lt;br /&gt;A while ago I added the ability to include a menu which is activated when the user right-clicks the notification. &amp;nbsp;While this functionality is useful, it's not seen significant take-up and requires the notification to somehow inform the user that a menu is available if they were to right-click.&lt;br /&gt;&lt;br /&gt;Building on this in R2.4 comes "actions". &amp;nbsp; Actions are added to a notification via a new API function &amp;nbsp;-sn42AddAction() - once the notification has been displayed successfully (you receive a non-zero value from either sn41EZNotifty() or sn41Notify()).&lt;br /&gt;&lt;br /&gt;An action can currently have a label and an option command. &amp;nbsp;The command is processed in the same way as the default acknowledge is handled so paths to files and folders, URLs and !bang commands can all be used.&lt;br /&gt;&lt;br /&gt;If no command is specified then Snarl will send the calling application a new notification (SNARL_NOTIFICATION_ACTION) with the one-based index of the action in the upper word of wParam. &amp;nbsp; This is almost identical to the way the right-click menu works now.&lt;br /&gt;&lt;br /&gt;Once a notification has at least one action assigned, a new button will appear alongside the notification's close button. &amp;nbsp;Clicking this button pops open a menu with the actions listed.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3gkleephBdE/TP5uJqM7hdI/AAAAAAAAAC8/HRvUiPEtlQ8/s1600/actions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://3.bp.blogspot.com/_3gkleephBdE/TP5uJqM7hdI/AAAAAAAAAC8/HRvUiPEtlQ8/s320/actions.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The above screen grab is from the "Actions" sample app. &amp;nbsp;It creates a notification and assigns four actions to it. &amp;nbsp;Selecting a particular action causes the app's background colour to be set accordingly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-6737066368340996233?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/6737066368340996233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/12/new-feature-actions.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6737066368340996233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6737066368340996233'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/12/new-feature-actions.html' title='New feature: Actions'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3gkleephBdE/TP5uJqM7hdI/AAAAAAAAAC8/HRvUiPEtlQ8/s72-c/actions.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-286656637274534288</id><published>2010-11-12T17:07:00.000Z</published><updated>2010-11-12T17:07:34.541Z</updated><title type='text'>New 'Corporate' Style</title><content type='html'>Building on the new functionality provided by V42 styles, here's "Corporate" which includes not only a dedicated meter (like Droid) but also includes subtext and a 'badge' value.&lt;br /&gt;&lt;br /&gt;The subtext component can be of any length (it wraps to fit), but the badge can only contain a maximum of 4 characters. &amp;nbsp;A bit limiting? &amp;nbsp;Maybe, but as you can see from these two screenshots, it can be used very effectively.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3gkleephBdE/TN10NGQXcmI/AAAAAAAAAC0/0B47TZBSRPM/s1600/football.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_3gkleephBdE/TN10NGQXcmI/AAAAAAAAAC0/0B47TZBSRPM/s1600/football.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3gkleephBdE/TN10NTjelII/AAAAAAAAAC4/rtk4uORpvLw/s1600/weather.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_3gkleephBdE/TN10NTjelII/AAAAAAAAAC4/rtk4uORpvLw/s1600/weather.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Two schemes are provided - Standard (shown above) and Light - Light is just the same, except the text is black and the background (unless customised by the calling app) is grey.&lt;br /&gt;&lt;br /&gt;You can check it all out for yourself as it's in R2.4 Beta 1!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-286656637274534288?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/286656637274534288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/11/new-corporate-style.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/286656637274534288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/286656637274534288'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/11/new-corporate-style.html' title='New &apos;Corporate&apos; Style'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3gkleephBdE/TN10NGQXcmI/AAAAAAAAAC0/0B47TZBSRPM/s72-c/football.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-7942022015119474200</id><published>2010-11-12T11:34:00.000Z</published><updated>2010-11-12T11:40:12.181Z</updated><title type='text'>R2.4 Beta 1 Released</title><content type='html'>R2.4 Beta 1 can be downloaded from www.fullphat.net (click on the "Download latest beta" link).&lt;br /&gt;&lt;br /&gt;Improvements are numerous and include:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;New V42 styles (see previous post) "Corporate" and "Droid";&lt;/li&gt;&lt;li&gt;Notification merging (see previous post);&lt;/li&gt;&lt;li&gt;Queuing of low priority notifications;&lt;/li&gt;&lt;li&gt;Notification scaling;&lt;/li&gt;&lt;li&gt;Custom notification sounds now working;&lt;/li&gt;&lt;li&gt;New snarl.library COM object;&lt;/li&gt;&lt;li&gt;Lots of bug fixes and feature tweaks.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Grab it now!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-7942022015119474200?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/7942022015119474200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/11/r24-beta-1-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/7942022015119474200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/7942022015119474200'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/11/r24-beta-1-released.html' title='R2.4 Beta 1 Released'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-9152381336645978033</id><published>2010-11-05T11:22:00.000Z</published><updated>2010-11-05T11:22:11.224Z</updated><title type='text'>New Style Features (and a new style)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/TNPjex_LraI/AAAAAAAAACw/q5X78W6388U/s1600/new_styles.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_3gkleephBdE/TNPjex_LraI/AAAAAAAAACw/q5X78W6388U/s1600/new_styles.png" /&gt;&lt;/a&gt;&lt;/div&gt;This is something I've been thinking about for a long while but it's only when I actually looked at it properly that I realised it was incredibly easy to implement. &amp;nbsp;With the addition of a single new flag in the style engine type library, it's now possible for styles to request the original unabridged notification content.&lt;br /&gt;&lt;br /&gt;You may be wondering what this actually is - well, simply put, V41 did away with the inflexible data type that holds the notification content while it's being passed from an application to Snarl and replaced it with a single byte array that holds the notification content as a packed string (in UTF8 format).&lt;br /&gt;&lt;br /&gt;The "packed string" is not as scary as it sounds, it's a simple structured format that I use in a lot of apps; an example looks thus:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;title::New style features#?text::Notifications can now have lots of new stuff in them#?icon::icon.png&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is what gets passed to Snarl and Snarl then breaks it up and sends the title, text, icon path to the style instance. &amp;nbsp;That's what normally happens anyway...&lt;br /&gt;&lt;br /&gt;Now, if a style uses the new &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;S_STYLE_V42_CONTENT&lt;/span&gt;&lt;/span&gt; flag, things change significantly. &amp;nbsp;Firstly, the 'title' field the style receives is actually the sending application's name (this may be expanded on); secondly, the 'text' field now contains the entire unabridged original packed string.&lt;br /&gt;&lt;br /&gt;The impact of this is significant: not only does it mean that styles can now display additional information (see image above), it also means that applications and styles can cooperate to display information specific to the application. &amp;nbsp;For example, a style could accept a value passed from an application which it would use as its background colour.&lt;br /&gt;&lt;br /&gt;So, how does an application send extra information? &amp;nbsp;Well, it could do so right now using &lt;b&gt;sn41Notify()&lt;/b&gt; and &lt;b&gt;sn41Update()&lt;/b&gt; but these are quite cumbersome and require a lot of hand-cranking on the app's part. &amp;nbsp;To make things easier, &lt;b&gt;sn41EZNotify()&lt;/b&gt; and &lt;b&gt;sn41EZUpdate()&lt;/b&gt; have been modified to include an optional &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;AdditionalData&lt;/span&gt;&lt;/span&gt; parameter. &amp;nbsp;This parameter can contain custom information formatted as a packed string.&lt;br /&gt;&lt;br /&gt;There's a new style that demonstrates all this working in harmony called Droid which is part of the meter style engine. &amp;nbsp;Here's how it looks:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/TNPjeirH7hI/AAAAAAAAACs/Mwj7CifHw9Y/s1600/droid.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/_3gkleephBdE/TNPjeirH7hI/AAAAAAAAACs/Mwj7CifHw9Y/s320/droid.png" width="150" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This new functionality will be rolled across all styles over time; we're just using Droid as a test bed for now. &amp;nbsp;And, in case you're wondering - all this is fully backwards and forwards compatible with the current (and previous) releases of Snarl; it's just extra functionality available if you want it.&lt;br /&gt;&lt;br /&gt;Droid uses a custom "percent" value to draw the meter. &amp;nbsp;If this value is missing then the meter is simply not drawn, so the notification right at the top of the post was created as follows:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;sn41EZNotify ( n, "", "New Style Features", "blah", , , , , , , "percent::50" )&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-9152381336645978033?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/9152381336645978033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/11/new-style-features-and-new-style.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/9152381336645978033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/9152381336645978033'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/11/new-style-features-and-new-style.html' title='New Style Features (and a new style)'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3gkleephBdE/TNPjex_LraI/AAAAAAAAACw/q5X78W6388U/s72-c/new_styles.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-6421480336010607444</id><published>2010-10-29T17:49:00.000+01:00</published><updated>2010-10-29T17:50:11.838+01:00</updated><title type='text'>And it's not just about Snarl you know...</title><content type='html'>You might be wondering why the new SysInfo extension doesn't have a settings panel even though it does have user configurable settings. &amp;nbsp;Well, part of the reason is that SysInfo was deemed critical to the R2.3 release so, in order to at least get R2.3 out this year, the view was taken that a GUI for its settings wasn't &lt;i&gt;that&lt;/i&gt; critical.&lt;br /&gt;&lt;br /&gt;The other reason is that the Prefs Kit is currently undergoing a huge refurbishment and the current Prefs Kit just doesn't really cut the mustard where SysInfo is concerned.&lt;br /&gt;&lt;br /&gt;So, here are some screenshots of what SysInfo's powered-by-Prefs-Kit-2.0 settings panel will eventually look like...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/TMr6DUWFU2I/AAAAAAAAACg/8AIdABqUSns/s1600/pk20a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://2.bp.blogspot.com/_3gkleephBdE/TMr6DUWFU2I/AAAAAAAAACg/8AIdABqUSns/s320/pk20a.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/TMr6D0sdvPI/AAAAAAAAACk/S3jq3omys1g/s1600/pk20b.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://2.bp.blogspot.com/_3gkleephBdE/TMr6D0sdvPI/AAAAAAAAACk/S3jq3omys1g/s320/pk20b.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3gkleephBdE/TMr6EQA7wQI/AAAAAAAAACo/qJUtEVIOtT8/s1600/pk20c.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://1.bp.blogspot.com/_3gkleephBdE/TMr6EQA7wQI/AAAAAAAAACo/qJUtEVIOtT8/s320/pk20c.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Please excuse the misplaced RAM icon - I will find a better one between now and when it's actually released.&lt;br /&gt;&lt;br /&gt;For those of you interested in the nuts and bolts of this, Prefs Kit 2.0 actually uses an updated misc.resource and the completely new &lt;a href="https://sourceforge.net/apps/mediawiki/melon/index.php?title=Main_Page"&gt;melon 4&lt;/a&gt; to do its drawing. &amp;nbsp;It's all still a fair way from release but it's progressing well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-6421480336010607444?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/6421480336010607444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/10/and-its-not-just-about-snarl-you-know.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6421480336010607444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6421480336010607444'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/10/and-its-not-just-about-snarl-you-know.html' title='And it&apos;s not just about Snarl you know...'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3gkleephBdE/TMr6DUWFU2I/AAAAAAAAACg/8AIdABqUSns/s72-c/pk20a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-8143648398198358784</id><published>2010-10-27T13:00:00.000+01:00</published><updated>2010-10-27T19:52:49.261+01:00</updated><title type='text'>R2.4...</title><content type='html'>Ok, so R2.31 is now out and that's mainly a bug-fix release. &amp;nbsp;So here's what's currently in the R2.4 alpha code-base...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Notification Resizing&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TMhtv2El-PI/AAAAAAAAACc/4oGgjDtoSa0/s1600/resize.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="193" src="http://4.bp.blogspot.com/_3gkleephBdE/TMhtv2El-PI/AAAAAAAAACc/4oGgjDtoSa0/s200/resize.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;The same notification before and&lt;br /&gt;after changing size to fit the&lt;br /&gt;additional text&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;Notifications will now resize automatically to fit updated content. &amp;nbsp;As existing notifications are not moved to&amp;nbsp;accommodate&amp;nbsp;the newly resized notification, there is the chance that one notification may overlap other notifications. &amp;nbsp; However, access to a partially hidden notification is still possible via the new pop-to-front feature introduced in R2.31 whereby notifications will automatically move to the foreground when the mouse pointer passes over them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Notification Scaling&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A global scaling value can now be applied to all on-screen notifications. &amp;nbsp;The scaling value can be below 100% to have notifications display smaller than normal, or above 100% to have notifications display larger than normal. &amp;nbsp; This has two key uses:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A user can maximize their available screen space by making notifications display smaller than they usually do;&lt;/li&gt;&lt;li&gt;Partially-sighted users may find notifications easier to read if they are displayed larger than normal.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Notification Merging&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TMhtpj6dHWI/AAAAAAAAACI/fYlUIMn47pw/s1600/merged.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="157" src="http://4.bp.blogspot.com/_3gkleephBdE/TMhtpj6dHWI/AAAAAAAAACI/fYlUIMn47pw/s200/merged.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;A new notification was created for&lt;br /&gt;the third line of text because a&lt;br /&gt;different title was used&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;If a notification is created with the (new) SNARL41_NOTIFICATION_ ALLOWS_MERGING flag, Snarl will look to see if there is a notification already visible for which the following are true:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;It allows merging;&lt;/li&gt;&lt;li&gt;It's from the same notification class;&lt;/li&gt;&lt;li&gt;Has the same title.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;If a match is found, the existing notification's token is returned and the on-screen content is modified as follows:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Icon is changed to that of the new notification;&lt;/li&gt;&lt;li&gt;The new notification's sound is played (if one exists);&lt;/li&gt;&lt;li&gt;The new notification's text is appended to the existing notification's text (a line feed is inserted automatically);&lt;/li&gt;&lt;li&gt;The new notification's timeout setting is added to whatever timeout is remaining.&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Notification Overflow&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/TMhtu3GOzUI/AAAAAAAAACU/MPd5gYFStlw/s1600/overflow.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="134" src="http://2.bp.blogspot.com/_3gkleephBdE/TMhtu3GOzUI/AAAAAAAAACU/MPd5gYFStlw/s200/overflow.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;After line 8 appears, line 2 is replaced&lt;br /&gt;with an ellipsis and line 3 scrolls&amp;nbsp;off&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;This feature controls the amount of text a notification can display by limiting the number of discrete lines (a discrete line being one that either begins or ends with a linefeed) that a notification can display. &amp;nbsp;If the notification attempts to display more than the allowed number of lines (&lt;i&gt;n&lt;/i&gt;), the second line is replaced by an ellipsis followed by the remaining &lt;i&gt;n&lt;/i&gt;-2 visible lines and the third line of text disappears into the void.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;Queued Notifications&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Starting with R2.4, only one low priority notification may be visible on screen at any one time (note that this applies only to Snarl-managed notifications; unmanaged notifications which display content on screen are exempt from this rule).&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/TMhtvUF9XXI/AAAAAAAAACY/OdKfHPnpm7Y/s1600/queue.png" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="87" src="http://4.bp.blogspot.com/_3gkleephBdE/TMhtvUF9XXI/AAAAAAAAACY/OdKfHPnpm7Y/s200/queue.png" width="200" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Example low-priority notification&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;with a badge showing the user&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;that there are 3 more low-priority&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;notifications in the queue&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;If Snarl is asked to display a low priority notification and one is already displayed, Snarl will queue the new notification and display the number of queued notifications in a badge on the visible notification. &amp;nbsp;When the visible notification times out, is dismissed by the user or is removed programmatically, the next notification in the queue is displayed.&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Other Features&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;The user can now check for Snarl updates manually via a new button on the General page;&lt;/li&gt;&lt;li&gt;A new escape sequence ("\+") can be used when updating a notification to append the notification text passed to the text already displayed in the notification;&lt;/li&gt;&lt;li&gt;Clicking the "&lt;application&gt; Registered" notification now opens the Class configuration panel for that application.&lt;/application&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-8143648398198358784?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/8143648398198358784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/10/r24.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8143648398198358784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8143648398198358784'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/10/r24.html' title='R2.4...'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3gkleephBdE/TMhtv2El-PI/AAAAAAAAACc/4oGgjDtoSa0/s72-c/resize.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-7476928362190707117</id><published>2010-08-13T22:32:00.000+01:00</published><updated>2010-08-13T22:32:49.841+01:00</updated><title type='text'>Quick SNP/HTTP Guide...</title><content type='html'>For those of you trialing R2.3 RC2, you'll see the new SNP/HTTP extension which, as the name implies, allows you to send notifications to Snarl via HTTP. &amp;nbsp;This is especially useful for browser-based applications which are limited to where they can send data outside of their browser bubble.&lt;br /&gt;&lt;br /&gt;Firstly, there are two key things to note:&lt;br /&gt;&lt;br /&gt;1. SNP 2.0 is similar but not the same as previous versions of SNP;&lt;br /&gt;2. HTTP is currently the only medium supported for SNP 2.0; other methods will follow over time.&lt;br /&gt;&lt;br /&gt;Taking those two caveats into consideration, here's the basic syntax:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://{computer}/{command}[?data=value[&amp;amp;data=value[&amp;amp;...]]]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The first thing you can try (from any browser) is a quick test. &amp;nbsp;Enter the following into the address bar of your browser and click 'Go':&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://127.0.0.1/test&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You should see a notification generated by the SNP/HTTP extension appear on the screen. &amp;nbsp;Assuming this worked okay, let's register a test application:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://127.0.0.1/register?id=application/vnd-fullphat.test&amp;amp;title=My%20Test%20App&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If everything went ok, you should receive the following in the browser window:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SNP/2.0/0/OK/XXX&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is a standard SNP response. &amp;nbsp;The sections are:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SNP/version/result/hint/data&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Version is, as you would expect, always 2.0 for now.&lt;br /&gt;&lt;br /&gt;The zero is the status code (these are documented) but zero means success.&lt;br /&gt;&lt;br /&gt;The hint (in this case "OK") is simply an English representation of the status value.&lt;br /&gt;&lt;br /&gt;The last parameter (data) is not always returned as it depends on the command being issued. &amp;nbsp;Registering an application does return a value however - the token of the application's registration with Snarl.&lt;br /&gt;&lt;br /&gt;To unregister our test application with Snarl, simply do:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://127.0.0.1/unregister?token=XXX&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Where 'XXX' was the token returned after registering. &amp;nbsp;You should get a:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;SNP/2.0/0/OK&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Response (note the lack of a data parameter).&lt;br /&gt;&lt;br /&gt;Next time - adding classes and generating notifications!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-7476928362190707117?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/7476928362190707117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/08/quick-snphttp-guide.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/7476928362190707117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/7476928362190707117'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/08/quick-snphttp-guide.html' title='Quick SNP/HTTP Guide...'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-8357996552073921043</id><published>2010-06-09T20:04:00.000+01:00</published><updated>2010-06-09T20:05:43.134+01:00</updated><title type='text'>New Slideshow Style</title><content type='html'>&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;a href="http://itunes.apple.com/us/app/mill-colour/id318704758?mt=8"&gt;Mill Colour&lt;/a&gt; for the iPhone is a lovely little app and the "Mill Archive" photo collection is the inspiration for this new style dubbed "Slideshow".&amp;nbsp; It's intended to be used with landscape images (which are scaled to fit horizontally mainting the aspect ratio) and with notifications with short text.&amp;nbsp; It's a meter-enabled style (displaying between 0 and 5 stars) and, I think, looks gorgeous (with apologies to Steve Jobs)...&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/TA_lgJ6oFvI/AAAAAAAAABo/pbMErN-1Y50/s1600/slideshow-top.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qu="true" src="http://2.bp.blogspot.com/_3gkleephBdE/TA_lgJ6oFvI/AAAAAAAAABo/pbMErN-1Y50/s320/slideshow-top.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3gkleephBdE/TA_liP01PcI/AAAAAAAAABw/B6gQcn2SQ1o/s1600/slideshow-bottom.png" imageanchor="1" style="cssfloat: right; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qu="true" src="http://3.bp.blogspot.com/_3gkleephBdE/TA_liP01PcI/AAAAAAAAABw/B6gQcn2SQ1o/s320/slideshow-bottom.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3gkleephBdE/TA_lk-ys_fI/AAAAAAAAAB4/vcZMAw2_o0c/s1600/slideshow-both.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qu="true" src="http://1.bp.blogspot.com/_3gkleephBdE/TA_lk-ys_fI/AAAAAAAAAB4/vcZMAw2_o0c/s320/slideshow-both.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-8357996552073921043?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/8357996552073921043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/06/new-slideshow-style.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8357996552073921043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8357996552073921043'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/06/new-slideshow-style.html' title='New Slideshow Style'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3gkleephBdE/TA_lgJ6oFvI/AAAAAAAAABo/pbMErN-1Y50/s72-c/slideshow-top.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-5301358305630198673</id><published>2010-06-09T20:02:00.001+01:00</published><updated>2010-06-09T20:02:55.197+01:00</updated><title type='text'>Timestamps</title><content type='html'>&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;A requested feature now added to R2.3 Beta 1 is that of timestamps on notifications.&amp;nbsp; The timestamp is listed in a new submenu off the notification's menu and is also (optionally) displayed in the bottom right corner of the notification when the user moves the mouse pointer over the notification, as follows:&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_3gkleephBdE/TA_lT4OYbCI/AAAAAAAAABg/PYdAXOfJwYY/s1600/timestamp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qu="true" src="http://1.bp.blogspot.com/_3gkleephBdE/TA_lT4OYbCI/AAAAAAAAABg/PYdAXOfJwYY/s320/timestamp.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-5301358305630198673?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/5301358305630198673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/06/timestamps.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/5301358305630198673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/5301358305630198673'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/06/timestamps.html' title='Timestamps'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3gkleephBdE/TA_lT4OYbCI/AAAAAAAAABg/PYdAXOfJwYY/s72-c/timestamp.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-6728684554731197148</id><published>2010-06-09T20:02:00.000+01:00</published><updated>2010-06-09T20:05:16.545+01:00</updated><title type='text'>New Clock Style</title><content type='html'>&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Recently SnarlClock+ popped up its little hourly reminder and I thought to myself that it would be cool if it could actually display the time in the notification rather than a static icon.&amp;nbsp; That led be to wonder if it would be even better to simply have a notification which displays a pre-defined string as a time - and with that a new style - Clock - was born...&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;It's available in two formats - Analog and Digital&amp;nbsp;- and will display a time from a specially formatted notification text (format&amp;nbsp;is: YYYYMMDDHHMMSS) which should be pretty self explanatory.&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Here's it in action:&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3gkleephBdE/TA_k4syfnPI/AAAAAAAAABQ/zcvl6fmPo9k/s1600/clock-analog.png" imageanchor="1" style="cssfloat: left; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qu="true" src="http://3.bp.blogspot.com/_3gkleephBdE/TA_k4syfnPI/AAAAAAAAABQ/zcvl6fmPo9k/s320/clock-analog.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3gkleephBdE/TA_k7jCzykI/AAAAAAAAABY/McyC6OlhHYk/s1600/clock-digital.png" imageanchor="1" style="cssfloat: left; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" qu="true" src="http://3.bp.blogspot.com/_3gkleephBdE/TA_k7jCzykI/AAAAAAAAABY/McyC6OlhHYk/s320/clock-digital.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-6728684554731197148?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/6728684554731197148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/06/new-clock-style.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6728684554731197148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6728684554731197148'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/06/new-clock-style.html' title='New Clock Style'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3gkleephBdE/TA_k4syfnPI/AAAAAAAAABQ/zcvl6fmPo9k/s72-c/clock-analog.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-8627700743705553212</id><published>2010-05-10T21:12:00.000+01:00</published><updated>2010-05-10T21:12:51.477+01:00</updated><title type='text'>Release 2.3 Alpha 2 General Availability</title><content type='html'>Sven and I have been running this release without major issue since February this year so I thought it would make sense to release it to the wider community. &amp;nbsp;Please be aware that it should still be considered an alpha release (as such, please assume it will be more buggy and unpredictable that a beta release).&lt;br /&gt;&lt;br /&gt;R2.3A2 will replace any existing Snarl installation you already have (unless you tell the installer to install it somewhere else) but it will act as if Snarl has never been previously installed. &amp;nbsp;This means (a) the "first run" draw test window will appear and your existing settings will not be transferred. &amp;nbsp;Your pre-R2.3A2 settings will be preserved however.&lt;br /&gt;&lt;br /&gt;SourceForge's 'new' file release system is as useless as always but, with a following wind, you should be able to find it under the 'Latest Dev Release' folder here:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://sourceforge.net/projects/snarlwin/files/"&gt;https://sourceforge.net/projects/snarlwin/files/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-8627700743705553212?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/8627700743705553212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/05/release-23-alpha-2-general-availability.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8627700743705553212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/8627700743705553212'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/05/release-23-alpha-2-general-availability.html' title='Release 2.3 Alpha 2 General Availability'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-202859893060301927</id><published>2010-05-06T19:51:00.000+01:00</published><updated>2010-05-06T19:51:15.893+01:00</updated><title type='text'>psych:OS (and Halon) Current State</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_3gkleephBdE/S-ML8I0xntI/AAAAAAAAABI/QETbacYiT60/s1600/how_it_looks_now.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_3gkleephBdE/S-ML8I0xntI/AAAAAAAAABI/QETbacYiT60/s320/how_it_looks_now.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The above is a screenshot of the current &lt;i&gt;working&lt;/i&gt; parts of psych:OS and (indirectly) Halon. &amp;nbsp;I should stress that this is not a mock-up, composite or any other kind of retouched image; it's directly from my development system. &amp;nbsp;The only re-touching was to remove the Windows task bar by cropping the image vertically. &amp;nbsp;Desktop icons don't appear as they were temporarily switched off before I hit Print Screen.&lt;br /&gt;&lt;br /&gt;So, this is psych:OS as it currently stands. &amp;nbsp;The menu bar appears along the top of the screen and can be moved horizontally along the screen edge by holding CTRL while dragging it. &amp;nbsp;The floating green bar is a psych:OS toolbar hosting a number of plugins. &amp;nbsp;The first one (displaying a large pointer icon) is a text grabber tool - drag the pointer over a window and it will grab the text contained within it into the clipboard (the menu bar shows the current window text as you move the pointer around).&lt;br /&gt;&lt;br /&gt;The next plugin along is a 'running apps' plugin which, not surprisingly, displays icons for which applications are currently running. &amp;nbsp;Clicking an icon will either display a menu showing the individual application windows that are open or will simply activate the only window if the app only has one window open. &amp;nbsp;Right-clicking pops up a context menu with the usual Show All, Hide All, etc. options and offers the ability to keep the icon in the plugin even after all windows have been closed (very similar to the OS X "Keep in Dock" functionality).&lt;br /&gt;&lt;br /&gt;The third plugin is a simple recycle bin manager and the final plugin is just a test one that tracks mouse movement outside of the plugin.&lt;br /&gt;&lt;br /&gt;The three 'normal' windows are provided by Halon. &amp;nbsp;The 'Clock' one is pretty obvious, as is the 'Alert' one; the 'Demo Window' is just that - a sandpit for me to test views in.&lt;br /&gt;&lt;br /&gt;Not visible via a screenshot is the underlying messaging system - clicking the 'Click Me!' button in the demo window pops up the Alert window (which currently shows some handy information). &amp;nbsp;This Alert window is currently display mode-less at the moment; the next job is to handle it modally.&lt;br /&gt;&lt;br /&gt;Some other minor points:&lt;br /&gt;&lt;br /&gt;Windows can be set to be resizable horizontally, vertically or both. &amp;nbsp;At the moment the code is a simple yes/no (i.e. resize on or off) - code will be added to force resizing along a single axis if only one sizing flag is specified. &amp;nbsp;Windows which can be resized are identifiable by two small lines in the bottom right corner of the window's border.&lt;br /&gt;&lt;br /&gt;Inactive windows are displayed at 75% active opacity and are coloured grey; active windows are displayed at a configurable opacity (95% by default). &amp;nbsp;When a window is resized or dragged around the screen by the user, the opacity (while the size/move operation is in progress) is dropped to 70% active opacity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-202859893060301927?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/202859893060301927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/05/psychos-and-halon-current-state.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/202859893060301927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/202859893060301927'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/05/psychos-and-halon-current-state.html' title='psych:OS (and Halon) Current State'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_3gkleephBdE/S-ML8I0xntI/AAAAAAAAABI/QETbacYiT60/s72-c/how_it_looks_now.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-4965921478340575212</id><published>2010-04-25T21:55:00.000+01:00</published><updated>2010-04-25T21:55:54.424+01:00</updated><title type='text'>Halon Milestone Achieved</title><content type='html'>Some explanation is probably required here...&lt;br /&gt;&lt;br /&gt;"Halon" is the name of a melon component that's been in development in one form or another for about 10 years.&amp;nbsp; This may sound both dramatic and nonsense but - and I've actually checked this - the concept (which began as Cloud:9ine Flexihosts) was introduced in 2001.&lt;br /&gt;&lt;br /&gt;Ultimately, Halon is highly comparable to the BeOS Interface Kit, which handles the creation and display of windows on screen and the contents that appear therein.&amp;nbsp; The content of a Halon window is created through the construction of one of more views.&amp;nbsp; Currently a view can be created directly via VB6 or indirectly through the use of more modern programming languages which still support COM object access.&amp;nbsp; Other methods (e.g.&amp;nbsp;script-based) will&amp;nbsp;follow.&lt;br /&gt;&lt;br /&gt;The specific milestone that has been achieved is a supportable, managable way of&amp;nbsp;creating objects and handling events without the need for complex interfaces has now been completed - and it's taken the better&amp;nbsp;part of the last 10 years to achieve this.&amp;nbsp; The current system version (36) of Halon is an indication of the number of previously failed iterations.&lt;br /&gt;&lt;br /&gt;In the short term, Halon will be utilised to provide the ability for psych:OS toolbar plugins to create detached floating windows.&amp;nbsp; Longer term, Halon will be utilised to draw the psych:OS menubar, floating toolbars and also it will feature as a key component of two forthcoming applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-4965921478340575212?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/4965921478340575212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/04/halon-milestone-achieved.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/4965921478340575212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/4965921478340575212'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/04/halon-milestone-achieved.html' title='Halon Milestone Achieved'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-2446064882203032560</id><published>2010-04-07T22:41:00.000+01:00</published><updated>2010-04-07T22:42:47.359+01:00</updated><title type='text'>We're Not Dead (TM)</title><content type='html'>Snarl is not dead!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just thought I'd better mention that in case rumours were beginning to formulate or circulate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In fact, I'm going to post some snaps of Snarl and psych:OS (yes, it's now a full phat product) very soon...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-2446064882203032560?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/2446064882203032560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2010/04/were-not-dead-tm.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/2446064882203032560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/2446064882203032560'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2010/04/were-not-dead-tm.html' title='We&apos;re Not Dead (TM)'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-3312658290238193074</id><published>2009-07-14T21:01:00.000+01:00</published><updated>2009-07-14T21:03:22.657+01:00</updated><title type='text'>Indicative Roadmap</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just something I've been kicking around...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3gkleephBdE/SlzkXrlQkvI/AAAAAAAAAA8/Ff8eUivKHCs/s1600-h/roadmap.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 178px;" src="http://1.bp.blogspot.com/_3gkleephBdE/SlzkXrlQkvI/AAAAAAAAAA8/Ff8eUivKHCs/s320/roadmap.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5358408752151171826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-3312658290238193074?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/3312658290238193074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2009/07/indicative-roadmap.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3312658290238193074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/3312658290238193074'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2009/07/indicative-roadmap.html' title='Indicative Roadmap'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_3gkleephBdE/SlzkXrlQkvI/AAAAAAAAAA8/Ff8eUivKHCs/s72-c/roadmap.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-2581386596156314592</id><published>2009-05-28T10:20:00.000+01:00</published><updated>2009-05-28T10:29:28.772+01:00</updated><title type='text'>R2.2 as of 28 May...</title><content type='html'>&lt;div&gt;On startup:&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_3gkleephBdE/Sh5XtkpBXJI/AAAAAAAAAAc/STAO3Szmc3E/s1600-h/current.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5340802648549448850" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 241px; TEXT-ALIGN: center" alt="" src="http://4.bp.blogspot.com/_3gkleephBdE/Sh5XtkpBXJI/AAAAAAAAAAc/STAO3Szmc3E/s400/current.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Mouse-over the welcome message (it's set to view-only mode):&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/Sh5X1mT_ZhI/AAAAAAAAAAk/RF4lYO7qMi8/s1600-h/mouse_over.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5340802786437064210" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 241px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_3gkleephBdE/Sh5X1mT_ZhI/AAAAAAAAAAk/RF4lYO7qMi8/s400/mouse_over.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The new SnarlClock+ extension:&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_3gkleephBdE/Sh5YlUIbWvI/AAAAAAAAAAs/MnJqMbzx6Tk/s1600-h/snarl_clock_plus.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5340803606190447346" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 241px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_3gkleephBdE/Sh5YlUIbWvI/AAAAAAAAAAs/MnJqMbzx6Tk/s400/snarl_clock_plus.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;The upcoming Sony(TM) Playstation(TM) style - still a work-in-progress:&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/Sh5ZJumbfFI/AAAAAAAAAA0/ToxegYBLFms/s1600-h/psp.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5340804231770897490" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 400px; CURSOR: hand; HEIGHT: 241px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_3gkleephBdE/Sh5ZJumbfFI/AAAAAAAAAA0/ToxegYBLFms/s400/psp.jpg" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-2581386596156314592?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/2581386596156314592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2009/05/r22-as-of-28-may.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/2581386596156314592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/2581386596156314592'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2009/05/r22-as-of-28-may.html' title='R2.2 as of 28 May...'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_3gkleephBdE/Sh5XtkpBXJI/AAAAAAAAAAc/STAO3Szmc3E/s72-c/current.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-5295122825561659247</id><published>2009-05-13T23:25:00.001+01:00</published><updated>2009-05-13T23:26:00.443+01:00</updated><title type='text'>Nominate us!</title><content type='html'>&lt;p&gt;Why not nominate Snarl as best Source Forge project? :)&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://sourceforge.net/community/cca09/nominate/?project_name=Snarl&amp;project_url=http://snarlwin.sourceforge.net/"&gt;&lt;img src="http://sourceforge.net/images/cca/cca_nominate.png" border="0"/&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-5295122825561659247?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/5295122825561659247/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2009/05/nominate-us.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/5295122825561659247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/5295122825561659247'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2009/05/nominate-us.html' title='Nominate us!'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6865603202419850914.post-6932274375456005666</id><published>2009-05-13T19:19:00.000+01:00</published><updated>2009-05-16T08:13:08.549+01:00</updated><title type='text'>R2.2 Update</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_3gkleephBdE/SgsRqlIa7PI/AAAAAAAAAAU/_vc9VlegTOc/s1600-h/may-09-new-styles.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5335377606770093298" style="margin: 0px auto 10px; display: block; width: 400px; height: 240px; text-align: center;" alt="" src="http://2.bp.blogspot.com/_3gkleephBdE/SgsRqlIa7PI/AAAAAAAAAAU/_vc9VlegTOc/s400/may-09-new-styles.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Welcome to the new Snarl blog!&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Things may have been quiet on the surface (and even on CVS if you're follow code updates on there) but that's because I've been working on the style engines - and the good news is, it's almost done.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;The original plan was to use the existing style type library as distributed with R2.1 but it ended up with so many tweaks, kludges and duplicated code within Snarl itself to cope with the V1 and V2 styles that it became ridiculous.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;So, frustrating though it was, I created a brand new type library loosely based on the V2 interfaces. This has now been incorporated into Snarl and most of the style engines - certainly all the engines which are more than 75% complete - have been converted over to work with it, and at the same time I've also been able to incorporate numerous fixes, tweaks and such like into Snarl itself.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Anyhow, always end with a song. I can't sing so a screenshot showing the 'Pebble' style (now renamed to 'Just Black') and the modified default style in action (along with the forthcoming SnarlToDo extension) will have to do.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6865603202419850914-6932274375456005666?l=snarl-development.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://snarl-development.blogspot.com/feeds/6932274375456005666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://snarl-development.blogspot.com/2009/05/r22-update.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6932274375456005666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6865603202419850914/posts/default/6932274375456005666'/><link rel='alternate' type='text/html' href='http://snarl-development.blogspot.com/2009/05/r22-update.html' title='R2.2 Update'/><author><name>Chris</name><uri>http://www.blogger.com/profile/04475623408145050440</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_3gkleephBdE/SgsRqlIa7PI/AAAAAAAAAAU/_vc9VlegTOc/s72-c/may-09-new-styles.jpg' height='72' width='72'/><thr:total>6</thr:total></entry></feed>
