<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0YASH88eSp7ImA9WxNUEkQ.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662</id><updated>2009-11-03T23:32:29.171Z</updated><title>Digital Me</title><subtitle type="html">Random contributions to digital noise.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://digitalmihailo.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><geo:lat>51.873</geo:lat><geo:long>-8.5409</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by/2.0/" /><link rel="self" href="http://feeds.feedburner.com/blogspot/digitalmihailo" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;C0YASH8zeSp7ImA9WxNUEkQ.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-1772790592719063155</id><published>2009-11-03T23:23:00.002Z</published><updated>2009-11-03T23:32:29.181Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T23:32:29.181Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="MonoDevelop" /><title>Install MonoDevelop Addins on Ubuntu</title><content type="html">I installed MonoDevelop from Add/Remove... which did not install all addins I wanted.&lt;br /&gt;Basically I was searching how to install NUnit addin for &lt;a href="http://monodevelop.com/"&gt;MonoDevelop&lt;/a&gt;. There's a &lt;a href="http://monodevelop.com/FAQ#Enabling_the_NUnit_Add-in"&gt;FAQ entry&lt;/a&gt; on how to enable it, but it is not very useful, though I did the last bit, creating symbolic link.&lt;br /&gt;&lt;br /&gt;Anyway, here's how to install it on Ubuntu:&lt;br /&gt;&lt;br /&gt;sudo apt-get install monodevelop-nunit&lt;br /&gt;&lt;br /&gt;If you just type&lt;br /&gt;&lt;br /&gt;sudo apt-get install monodevelop-&lt;br /&gt;&lt;br /&gt;and press Tab key twice it will list you all available addins. One very useful is monodevelop-versioncontrol,&lt;br /&gt;&lt;br /&gt;Useful links:&lt;br /&gt;&lt;a href="http://www.dijksterhuis.org/using-nunit-with-monodevelop/"&gt;Using NUnit with MonoDevelop&lt;/a&gt;&lt;br /&gt;&lt;a href="http://paulsiu.wordpress.com/2008/04/12/using-subversion-source-control-with-monodevelop/"&gt;Using Subversion with MonoDevelop&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-1772790592719063155?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=f-XQsbSzTKA:voitm0t0vO0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=f-XQsbSzTKA:voitm0t0vO0:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=f-XQsbSzTKA:voitm0t0vO0:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=f-XQsbSzTKA:voitm0t0vO0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=f-XQsbSzTKA:voitm0t0vO0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=f-XQsbSzTKA:voitm0t0vO0:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=f-XQsbSzTKA:voitm0t0vO0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=f-XQsbSzTKA:voitm0t0vO0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=f-XQsbSzTKA:voitm0t0vO0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=f-XQsbSzTKA:voitm0t0vO0:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=f-XQsbSzTKA:voitm0t0vO0:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/f-XQsbSzTKA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/1772790592719063155/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/11/install-monodevelop-addins-on-ubuntu.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/1772790592719063155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/1772790592719063155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/f-XQsbSzTKA/install-monodevelop-addins-on-ubuntu.html" title="Install MonoDevelop Addins on Ubuntu" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/11/install-monodevelop-addins-on-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08BRHk-fSp7ImA9WxNUEkk.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-8823002749320328298</id><published>2009-11-03T09:36:00.003Z</published><updated>2009-11-03T09:50:55.755Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T09:50:55.755Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><title>MySQL custom data folder in Linux</title><content type="html">This info relates to &lt;a href="http://www.archlinux.org/"&gt;Arch Linux&lt;/a&gt; and configuration of &lt;a href="http://www.mysql.com/"&gt;MySQL&lt;/a&gt; to use custom data folder. I followed instructions to &lt;a href="http://wiki.archlinux.org/index.php/MySQL"&gt;install MySQL on ArchWiki&lt;/a&gt;. It worked like a charm, everything was working perfectly, until I tried to change data folder.  Now, probably important thing to say is that I setup rc.conf to automatically start mysqld daemon. Google did not help this time :( since whatever I tried did not work. Even MySQL official documentation was of no help. Setting datadir in my.cnf did not help. But finally I found solution, and it was super easy:&lt;br /&gt;&lt;br /&gt;Edit file: /etc/conf.d/mysqld&lt;br /&gt;And enter your data folder there (/data/mysql in my case):&lt;br /&gt;MYSQLD_ROOT="/data/mysql"&lt;br /&gt;&lt;br /&gt;After that it worked. I don't know if this is Arch Linux specific, but I hope this will help someone not to loose as much time I did figuring out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-8823002749320328298?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=n_zxZmqk_No:79q3aDBAom4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=n_zxZmqk_No:79q3aDBAom4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=n_zxZmqk_No:79q3aDBAom4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=n_zxZmqk_No:79q3aDBAom4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=n_zxZmqk_No:79q3aDBAom4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=n_zxZmqk_No:79q3aDBAom4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=n_zxZmqk_No:79q3aDBAom4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=n_zxZmqk_No:79q3aDBAom4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=n_zxZmqk_No:79q3aDBAom4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=n_zxZmqk_No:79q3aDBAom4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=n_zxZmqk_No:79q3aDBAom4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/n_zxZmqk_No" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/8823002749320328298/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/11/mysql-custom-data-folder-in-linux.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8823002749320328298?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8823002749320328298?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/n_zxZmqk_No/mysql-custom-data-folder-in-linux.html" title="MySQL custom data folder in Linux" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/11/mysql-custom-data-folder-in-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0IHRnkyeCp7ImA9WxNUEUo.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-3971965428920634317</id><published>2009-11-02T13:38:00.003Z</published><updated>2009-11-02T15:25:37.790Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-02T15:25:37.790Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart - 0.5a5.1 released</title><content type="html">&lt;a href="https://addons.mozilla.org/en-US/firefox/downloads/file/68499/new_tab_jumpstart-0.5a5.1-fx+fn.xpi?confirmed"&gt;New version&lt;/a&gt; of &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8914"&gt;JumpStart&lt;/a&gt; is ready on AMO. Please report encountered issues &lt;a href="http://code.google.com/p/new-tab-jumpstart/issues/list"&gt;here&lt;/a&gt;, and post your questions at extension's &lt;a href="http://groups.google.com/group/new-tab-jumpstart"&gt;group page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's a short summary of changes:&lt;br /&gt;&lt;br /&gt;New locales (contribution by &lt;a href="http://www.babelzilla.org/"&gt;Babelzilla.org&lt;/a&gt; community): hu-HU, pl-PL, he-IL, de-DE, fr, pt-BR&lt;br /&gt;which with existing locales: en-US, sr-RS, ko-KR brings the number of supported locales to 9.&lt;br /&gt;&lt;br /&gt;Fixed ordering of locales - it now properly displays en-US if a locale is missing (Firefox 3.5 specific)&lt;br /&gt;Fixed refreshing tabs in background tabs (Firefox 3.5 specific, in Firefox 3.0 still refreshes only thumb from the active tab)&lt;br /&gt;Properties of thumbnails are made permanent now - not being flushed with history. This can be turned off through about:config&lt;br /&gt;Preferences and Bookmarks pages have improved appearance - contributions by Leszek(teo)Życzkowski&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Guys from &lt;a href="http://www.babelzilla.org"&gt;Babelzilla&lt;/a&gt; are awesome, provided 7 translations in a week (despite my screw-up in which all translations got lost and Chinese yet to be recovered). Thanks to erglo, Goofy, SiiiE, Cashman, teo, Ghelman, tawcw, markh, for contribution and help!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-3971965428920634317?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=Q0DwtyeQXL4:Rq8JIrmLvKU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=Q0DwtyeQXL4:Rq8JIrmLvKU:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=Q0DwtyeQXL4:Rq8JIrmLvKU:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=Q0DwtyeQXL4:Rq8JIrmLvKU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=Q0DwtyeQXL4:Rq8JIrmLvKU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=Q0DwtyeQXL4:Rq8JIrmLvKU:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=Q0DwtyeQXL4:Rq8JIrmLvKU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=Q0DwtyeQXL4:Rq8JIrmLvKU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=Q0DwtyeQXL4:Rq8JIrmLvKU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=Q0DwtyeQXL4:Rq8JIrmLvKU:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=Q0DwtyeQXL4:Rq8JIrmLvKU:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/Q0DwtyeQXL4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/3971965428920634317/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/11/jumpstart-05a51-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/3971965428920634317?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/3971965428920634317?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/Q0DwtyeQXL4/jumpstart-05a51-released.html" title="JumpStart - 0.5a5.1 released" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/11/jumpstart-05a51-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08EQnk-fip7ImA9WxNWFkU.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-5154130140988181881</id><published>2009-10-16T10:00:00.005+01:00</published><updated>2009-10-16T10:36:43.756+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-16T10:36:43.756+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart - 0.5a5 released</title><content type="html">Finally &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8914"&gt;official new version&lt;/a&gt;. It took some time to do lots of internal changes to the extension, so from the outside it may not look that much different, but insides changed completely. This will allow us to roll out fixes and new versions much faster - at least monthly as opposed to bi-yearly.&lt;br /&gt;&lt;br /&gt;Firstly thanks to &lt;a href="https://addons.mozilla.org/en-US/firefox/user/8"&gt;Chris&lt;/a&gt; and Forrest. Forrest submitted Korean translation and more importantly made me fix localization support for the extension. Recently Chris joined to help with development and contributed with fixing almost all UI to XUL which improved layout and performance, and he will be contributing more in the future hopefully making JumpStart much prettier.&lt;br /&gt;And thanks to everyone else joining in &lt;a href="http://groups.google.com/group/new-tab-jumpstart/"&gt;discussions&lt;/a&gt; and reporting bugs.&lt;br /&gt;&lt;br /&gt;Some activities and plans:&lt;br /&gt;I have submitted JumpStart for translation on &lt;a href="http://www.babelzilla.org/index.php"&gt;Babelzilla&lt;/a&gt;, please go there and &lt;a href="http://www.babelzilla.org/index.php?option=com_wts&amp;amp;Itemid=203"&gt;login or register&lt;/a&gt; if you wish to help and translate it to your language.&lt;br /&gt;Please submit all bugs found on extension's &lt;a href="http://code.google.com/p/new-tab-jumpstart/issues/list"&gt;project page&lt;/a&gt;. I'll be submitting all bugs I find there too.&lt;br /&gt;There are also plans to move JumpStart related content to a separate site, I'll let you know as soon as I do that.&lt;br /&gt;&lt;br /&gt;At the end some release notes for version 0.5a5:&lt;br /&gt;&lt;br /&gt;Notable known issues:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Clicking tags on bookmarks page performs very slowly on Firefox 3.5. It seems that it is a Firefox issue with particular search I'm using, the issue is being investigated at the moment&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Notable Changes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;turned off auto refresh by default&lt;/li&gt;&lt;li&gt; refreshing thumbs on page view rather then automatically&lt;/li&gt;&lt;li&gt; fixed issue on some Windows XP systems caused by latest system patches&lt;/li&gt;&lt;li&gt;using Firefox's places database to store thumbnails so better conforming to privacy and history setup - when you clear your history your thumbs are gone too&lt;/li&gt;&lt;li&gt; improved layout by almost exclusively using XUL&lt;/li&gt;&lt;li&gt;fixed history issues that were causing TabView to be shown in the list of closed pages on Firefox 3.5&lt;/li&gt;&lt;li&gt;support for MidBrowser&lt;/li&gt;&lt;li&gt; basic support for Fennec&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/8701140473288307662-5154130140988181881?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=6-LPExaWEbA:7_EX-_2gyhI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=6-LPExaWEbA:7_EX-_2gyhI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=6-LPExaWEbA:7_EX-_2gyhI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=6-LPExaWEbA:7_EX-_2gyhI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=6-LPExaWEbA:7_EX-_2gyhI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=6-LPExaWEbA:7_EX-_2gyhI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=6-LPExaWEbA:7_EX-_2gyhI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=6-LPExaWEbA:7_EX-_2gyhI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=6-LPExaWEbA:7_EX-_2gyhI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=6-LPExaWEbA:7_EX-_2gyhI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=6-LPExaWEbA:7_EX-_2gyhI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/6-LPExaWEbA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/5154130140988181881/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/10/jumpstart-05a5-released.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/5154130140988181881?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/5154130140988181881?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/6-LPExaWEbA/jumpstart-05a5-released.html" title="JumpStart - 0.5a5 released" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/10/jumpstart-05a5-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYBRXkzcSp7ImA9WxNXGUQ.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-2277042410019519876</id><published>2009-10-08T10:55:00.003+01:00</published><updated>2009-10-08T11:19:14.789+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-08T11:19:14.789+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart - prerelease</title><content type="html">I have prepared a &lt;a href="http://new-tab-jumpstart.googlecode.com/files/jumpstart-0.5a4.3.xpi"&gt;pre-release of the JumpStart&lt;/a&gt;. To install it you have to download it and then drop it from the saved location onto Firefox. New release will be on AMO probably some time during this weekend. There are still some tests to be done but the version is pretty solid.&lt;br /&gt;&lt;br /&gt;Some notable fixes/features include:&lt;br /&gt;- turned off auto refresh by default&lt;br /&gt;- refreshing thumbs on page view rather then automatically&lt;br /&gt;- fixed code that was causing issues on some Windows XP systems after latest security patches&lt;br /&gt;- using Firefox's places database to store thumbnails so better conforming to privacy and history setup - when you clear your history your thumbs are gone too&lt;br /&gt;- handling of cases when there is no history data available - default page layout is shown instead of empty page&lt;br /&gt;- updating the list of thumbs while you browse when there is no data in history available yet - e.g. new profile, clean install (still experimental)&lt;br /&gt;- improved layout by almost exclusively using XUL&lt;br /&gt;- fixed bookmarks page on Firefox 3.5&lt;br /&gt;- fixed history issues that were causing TabView to be shown in the list of closed pages on Firefox 3.5&lt;br /&gt;- support for MidBrowser&lt;br /&gt;- basic support for Fennec&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-2277042410019519876?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=MD8w3nnB890:qdnmQpG5fVs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=MD8w3nnB890:qdnmQpG5fVs:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=MD8w3nnB890:qdnmQpG5fVs:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=MD8w3nnB890:qdnmQpG5fVs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=MD8w3nnB890:qdnmQpG5fVs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=MD8w3nnB890:qdnmQpG5fVs:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=MD8w3nnB890:qdnmQpG5fVs:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=MD8w3nnB890:qdnmQpG5fVs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=MD8w3nnB890:qdnmQpG5fVs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=MD8w3nnB890:qdnmQpG5fVs:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=MD8w3nnB890:qdnmQpG5fVs:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/MD8w3nnB890" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/2277042410019519876/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/10/jumpstart-prerelease.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/2277042410019519876?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/2277042410019519876?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/MD8w3nnB890/jumpstart-prerelease.html" title="JumpStart - prerelease" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/10/jumpstart-prerelease.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UCSXk4fip7ImA9WxNTFk8.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-1252902517198088117</id><published>2009-08-18T21:08:00.003+01:00</published><updated>2009-08-18T22:01:08.736+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-18T22:01:08.736+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="heroku" /><category scheme="http://www.blogger.com/atom/ns#" term="thoth" /><title>Deploying Thoth to Heroku</title><content type="html">This is a short instruction how to use &lt;a href="http://wiki.github.com/rgrove/thoth/"&gt;Thoth&lt;/a&gt; with &lt;a href="http://heroku.com/"&gt;Heroku&lt;/a&gt;. Thoth is a Ruby blog engine, and Heroku is a Ruby hosting platform - there is a convenient free hosting plan. Instructions are targeted towards the latest version of Thoth - 0.3.0.&lt;br /&gt;I'll keep this brief however, first goes disclaimer:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I don't develop in Ruby, I haven't done anything in Ruby yet. All I know about Ruby and Rails is from a book I read long time ago, going through it lightning fast without much retention. There are possible better ways to do this however this approach works. Anyhow, no guarantees.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Get and install the latest version&lt;/span&gt;&lt;br /&gt;First of all there is no official 0.3.0 release, or at least I could not find it. Version 0.2.1 did not work on my machine so I had to get the latest version of code, created a gem out of it, installed it and it worked fine after that. Instructions how to get the latest version are at the &lt;a href="http://wiki.github.com/rgrove/thoth/"&gt;Thoth homepage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create a thoth site&lt;/span&gt;&lt;br /&gt;On the same page are instructions how to run it. Create a site, give it whatever name, you'll need to copy those file later on to your heroku application. After following all instructions you can test your new thoth blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create a heroku app&lt;/span&gt;&lt;br /&gt;Create your heroku application following instructions from &lt;a href="http://docs.heroku.com/quickstart"&gt;the quick start&lt;/a&gt;. You'll need to install git and setup &lt;a href="http://docs.heroku.com/git#setting-up-ssh-public-keys"&gt;ssh public key&lt;/a&gt;. Create heroku application, copy all files from your previously created thoth site, initialize git repository and add files to git. Now everything is practicaly the same as in the quick start - except I could not create thoth site into already existing folder.&lt;br /&gt;&lt;br /&gt;Now goes exciting stuff - how to make this really work on heroku.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Getting it all to work&lt;/span&gt;&lt;br /&gt;Since there isn't official 0.3.0 version of thoth we need to unpack it into vendor/gems folder of our heroku application first. Then config.ru has to be fixed so that version of thoth is used:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Dir.glob(File.dirname(__FILE__) + "/vendor/gems/*").each do |path|&lt;br /&gt; gem_name = File.basename(path.gsub(/-[\d\.]+$/, ''))&lt;br /&gt; $LOAD_PATH &amp;lt;&amp;lt; path + "/lib/"&lt;br /&gt; require gem_name&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;#require 'thoth'&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;So &lt;span style="font-style: italic;"&gt;require 'thoth'&lt;/span&gt; is basically replaced by the code to load all gems from vendor folder - got a bit of help from &lt;a href="http://www.dcmanges.com/blog/rails-first-class-vendor-gems"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Now specify all required gems. You can read &lt;a href="http://docs.heroku.com/gems"&gt;detailed instructions on installing gems on heroku &lt;/a&gt;or just create .gems file with following contents:&lt;br /&gt;&lt;br /&gt;innate --version 2009.06.12&lt;br /&gt;ramaze --version 2009.06.12&lt;br /&gt;cssmin&lt;br /&gt;jsmin&lt;br /&gt;sanitize&lt;br /&gt;&lt;br /&gt;Fix thoth.config file to use correct database connection:&lt;br /&gt;&lt;br /&gt;  db: &lt;%= ENV['DATABASE_URL'] || ('sqlite:///'+ (Thoth::HOME_DIR) +'/db/live.db') %&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;It's postgresql but it seems to be working for now. Another setting needs to be changed and that is url:&lt;br /&gt;    # Base URL of your site. This is necessary in order for Thoth to know how&lt;br /&gt;    # to construct links. Be sure to set this correctly or links may not work.&lt;br /&gt;    url: http://someappname.heroku.com/&lt;br /&gt;&lt;br /&gt;Now everything is almost ready, the only thing left is database. You need to run thoth --migrate to crate ./db/live.db sqlite database. Then push it to heroku following &lt;a href="http://docs.heroku.com/taps"&gt;instructions&lt;/a&gt;, basically one command - something like: heroku db:push sqlite://db/live.db&lt;br /&gt;&lt;br /&gt;After this you can push the whole application to heroku and it should work.&lt;br /&gt;&lt;br /&gt;Peace of cake, now you have your free personal blog in Ruby.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-1252902517198088117?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=dNjhrSxPhTM:jrPkb9NOplE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=dNjhrSxPhTM:jrPkb9NOplE:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=dNjhrSxPhTM:jrPkb9NOplE:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=dNjhrSxPhTM:jrPkb9NOplE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=dNjhrSxPhTM:jrPkb9NOplE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=dNjhrSxPhTM:jrPkb9NOplE:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=dNjhrSxPhTM:jrPkb9NOplE:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=dNjhrSxPhTM:jrPkb9NOplE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=dNjhrSxPhTM:jrPkb9NOplE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=dNjhrSxPhTM:jrPkb9NOplE:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=dNjhrSxPhTM:jrPkb9NOplE:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/dNjhrSxPhTM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/1252902517198088117/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/08/deployingthothtoheroku.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/1252902517198088117?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/1252902517198088117?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/dNjhrSxPhTM/deployingthothtoheroku.html" title="Deploying Thoth to Heroku" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/08/deployingthothtoheroku.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQBRH8_eCp7ImA9WxNTFEs.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-5664203920751637529</id><published>2009-08-16T23:28:00.003+01:00</published><updated>2009-08-16T23:39:15.140+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-16T23:39:15.140+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart is up on google code</title><content type="html">I have recently uploaded source code to &lt;a href="http://code.google.com/p/new-tab-jumpstart/"&gt;google code&lt;/a&gt;.&lt;br /&gt;The plan is to more frequently publish intermediate releases, and &lt;a href="http://new-tab-jumpstart.googlecode.com/files/jumpstart-0.5a4.1.xpi"&gt;0.5a4.1&lt;/a&gt; is the first one.&lt;br /&gt;It features improved refresh of the thumbs, localized to Korean (thanks Forrest) and Serbian, made a bit faster by moving thumbs storage to places database.&lt;br /&gt;Hopefully I will be able to push improvements as soon as they happen so changes will be rather small for every release.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-5664203920751637529?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=j7oHmvT0U8c:x90QQGNCJK4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=j7oHmvT0U8c:x90QQGNCJK4:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=j7oHmvT0U8c:x90QQGNCJK4:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=j7oHmvT0U8c:x90QQGNCJK4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=j7oHmvT0U8c:x90QQGNCJK4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=j7oHmvT0U8c:x90QQGNCJK4:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=j7oHmvT0U8c:x90QQGNCJK4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=j7oHmvT0U8c:x90QQGNCJK4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=j7oHmvT0U8c:x90QQGNCJK4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=j7oHmvT0U8c:x90QQGNCJK4:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=j7oHmvT0U8c:x90QQGNCJK4:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/j7oHmvT0U8c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/5664203920751637529/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/08/jumpstart-is-up-on-google-code.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/5664203920751637529?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/5664203920751637529?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/j7oHmvT0U8c/jumpstart-is-up-on-google-code.html" title="JumpStart is up on google code" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/08/jumpstart-is-up-on-google-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8DSHkyfCp7ImA9WxJVFks.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-1936740818591925435</id><published>2009-07-03T22:50:00.002+01:00</published><updated>2009-07-03T23:41:19.794+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-03T23:41:19.794+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Extensions" /><title>Testing Extension Localization</title><content type="html">Due to some latest feedback and offers for translation I started looking at localizing &lt;a href="http://digitalmihailo.blogspot.com/search/label/JumpStart"&gt;JumpStart&lt;/a&gt;. That is something that I have been putting off for a long time. I guess I needed some reminding that localization is not something nice to have, it is really a must.&lt;br /&gt;All is well, it's not really hard to localize an extension - well at least not technically, finding right phrases for translation is another story. But how to test this now? I completely switched to &lt;a href="http://www.ubuntu.com/"&gt;Linux&lt;/a&gt; at home so this short tip is for Linux users.&lt;br /&gt;&lt;br /&gt;If you want to start your &lt;a href="http://www.getfirefox.com/"&gt;Firefox&lt;/a&gt; under a different locale from the one set at the system level you have to use command that goes something like this:&lt;br /&gt;&lt;pre style="font-weight: bold;"&gt;LANGUAGE=en_US LANG=en_US.UTF-8 firefox -no-remote -P&lt;i&gt;&lt;i&gt; "your_profile_name"&lt;/i&gt;&lt;/i&gt;&lt;/pre&gt;(&lt;a href="http://kb.mozillazine.org/Command_line_arguments"&gt;Firefox command line arguments&lt;/a&gt;)&lt;br /&gt;If your locale is in fact en_US :) and you want to test Serbian for example you could change your language like this:&lt;br /&gt;&lt;pre style="font-weight: bold;"&gt;LANGUAGE=sr_RS LANG=sr_RS.UTF-8 firefox -no-remote -P&lt;i&gt;&lt;i&gt; "your_profile_name"&lt;/i&gt;&lt;/i&gt;&lt;/pre&gt; You could even use language that is not installed on your machine, for example I don't have German locales installed but I can still use de_DE to test my extension:&lt;br /&gt;&lt;pre style="font-weight: bold;"&gt;LANGUAGE=de_DE LANG=de_DE.UTF-8 firefox -no-remote -P&lt;i&gt;&lt;i&gt; "your_profile_name"&lt;/i&gt;&lt;/i&gt;&lt;/pre&gt; The Firefox obviously won't be shown in language you don't have installed on your machine but your extension will be showing it if you have it localized for the language.&lt;br /&gt;&lt;br /&gt;I dug out this information from &lt;a href="https://lists.ubuntu.com/archives/ubuntu-users/2006-March/068736.html"&gt;some old Ubuntu forum thread&lt;/a&gt;, hope you find it useful. If you have better way of doing this please let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-1936740818591925435?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=srWOPPNtIqs:7XGGYhq94RI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=srWOPPNtIqs:7XGGYhq94RI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=srWOPPNtIqs:7XGGYhq94RI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=srWOPPNtIqs:7XGGYhq94RI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=srWOPPNtIqs:7XGGYhq94RI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=srWOPPNtIqs:7XGGYhq94RI:G79ilh31hkQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=G79ilh31hkQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=srWOPPNtIqs:7XGGYhq94RI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=srWOPPNtIqs:7XGGYhq94RI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=srWOPPNtIqs:7XGGYhq94RI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=srWOPPNtIqs:7XGGYhq94RI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=srWOPPNtIqs:7XGGYhq94RI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/srWOPPNtIqs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/1936740818591925435/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/07/testing-extension-localization.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/1936740818591925435?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/1936740818591925435?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/srWOPPNtIqs/testing-extension-localization.html" title="Testing Extension Localization" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/07/testing-extension-localization.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMR34zeCp7ImA9WxJTFUw.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-4425083969477814109</id><published>2009-04-23T10:33:00.006+01:00</published><updated>2009-04-23T20:14:46.080+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-23T20:14:46.080+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart - version 0.5a3.4</title><content type="html">New version of &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8914"&gt;JumpStart&lt;/a&gt; is available. All &lt;a href="http://groups.google.com/group/new-tab-jumpstart"&gt;feedback&lt;/a&gt; is very appreciated.&lt;br /&gt;&lt;br /&gt;Most notable changes:&lt;br /&gt;* Added options menu to the logo button&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3qhD-19YgiQ/SfC9ro4b0rI/AAAAAAAAC2A/FMD2Tkxsb0o/s1600-h/buttonmenu.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 207px; height: 197px;" src="http://4.bp.blogspot.com/_3qhD-19YgiQ/SfC9ro4b0rI/AAAAAAAAC2A/FMD2Tkxsb0o/s400/buttonmenu.jpg" alt="" id="BLOGGER_PHOTO_ID_5327966916585444018" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;* Added info page to the preferences window so some basic compatibility information shown&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3qhD-19YgiQ/SfC9r0noVWI/AAAAAAAAC2I/SWUifHbaz6Q/s1600-h/infopanel.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 284px; height: 400px;" src="http://2.bp.blogspot.com/_3qhD-19YgiQ/SfC9r0noVWI/AAAAAAAAC2I/SWUifHbaz6Q/s400/infopanel.jpg" alt="" id="BLOGGER_PHOTO_ID_5327966919736186210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;* Fixed some issues with popup showing blank (most noticeable on Linux)&lt;br /&gt;* Added experimental bookmarks page - suggestions welcome&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3qhD-19YgiQ/SfC9r5AyRvI/AAAAAAAAC2Q/PbcINHfnndw/s1600-h/bookmarkslink.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 241px; height: 48px;" src="http://4.bp.blogspot.com/_3qhD-19YgiQ/SfC9r5AyRvI/AAAAAAAAC2Q/PbcINHfnndw/s400/bookmarkslink.jpg" alt="" id="BLOGGER_PHOTO_ID_5327966920915437298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3qhD-19YgiQ/SfC9sCpw3ZI/AAAAAAAAC2Y/zZZ0hfMCE2Y/s1600-h/bookmarkstags.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 288px; height: 400px;" src="http://3.bp.blogspot.com/_3qhD-19YgiQ/SfC9sCpw3ZI/AAAAAAAAC2Y/zZZ0hfMCE2Y/s400/bookmarkstags.jpg" alt="" id="BLOGGER_PHOTO_ID_5327966923503230354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Other changes:&lt;br /&gt;Supports Firefox 3.5&lt;br /&gt;Fixed preferences button in the add-ons dialog&lt;br /&gt;Fixed toolbar button for smaller icons&lt;br /&gt;Not showing toolbar button by default&lt;br /&gt;Zoom removed&lt;br /&gt;Removed options menu from the main menu&lt;br /&gt;Redesigned preferences window&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-4425083969477814109?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=_N7QhIUfdK8:A4YdjXWE6bc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=_N7QhIUfdK8:A4YdjXWE6bc:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=_N7QhIUfdK8:A4YdjXWE6bc:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=_N7QhIUfdK8:A4YdjXWE6bc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=_N7QhIUfdK8:A4YdjXWE6bc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=_N7QhIUfdK8:A4YdjXWE6bc:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=_N7QhIUfdK8:A4YdjXWE6bc:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=_N7QhIUfdK8:A4YdjXWE6bc:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=_N7QhIUfdK8:A4YdjXWE6bc:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=_N7QhIUfdK8:A4YdjXWE6bc:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/_N7QhIUfdK8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/4425083969477814109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/04/jumpstart-version-05a34.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/4425083969477814109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/4425083969477814109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/_N7QhIUfdK8/jumpstart-version-05a34.html" title="JumpStart - version 0.5a3.4" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3qhD-19YgiQ/SfC9ro4b0rI/AAAAAAAAC2A/FMD2Tkxsb0o/s72-c/buttonmenu.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">8</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/04/jumpstart-version-05a34.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYAQXk8cCp7ImA9WxJTEk4.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-558655284007216397</id><published>2009-04-20T15:07:00.004+01:00</published><updated>2009-04-20T15:19:00.778+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-20T15:19:00.778+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Extensions" /><category scheme="http://www.blogger.com/atom/ns#" term="XUL" /><title>XUL Schema</title><content type="html">I have published &lt;a href="http://xulschema.codeplex.com"&gt;XUL Schema on CodePlex&lt;/a&gt;. It is fairly complete and it should work correctly for most scenarios. Get the latest &lt;a href="http://xulschema.codeplex.com/SourceControl/ListDownloadableCommits.aspx"&gt;source code&lt;/a&gt; and follow instructions from the &lt;a href="http://xulschema.codeplex.com"&gt;home page&lt;/a&gt;. Here are some &lt;a href="http://xulschema.codeplex.com/Wiki/View.aspx?title=Feature%20Screenshots"&gt;screenshots&lt;/a&gt;.&lt;br /&gt;All &lt;a href="http://xulschema.codeplex.com/Thread/List.aspx"&gt;comments&lt;/a&gt; are welcome. If something is not working correctly please &lt;a href="http://xulschema.codeplex.com/Thread/List.aspx"&gt;report&lt;/a&gt; and I'll surely look in to it.&lt;br /&gt;Again, consider this work in progress, it should work correctly for most of the scenarios but there are scenarios where it will break - for example templates with HTML contents. While I'm developing my extensions I keep updating the schema so from time to time check out the latest version of the code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-558655284007216397?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=44HPMow3nSs:e9wQ8ku4gdY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=44HPMow3nSs:e9wQ8ku4gdY:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=44HPMow3nSs:e9wQ8ku4gdY:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=44HPMow3nSs:e9wQ8ku4gdY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=44HPMow3nSs:e9wQ8ku4gdY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=44HPMow3nSs:e9wQ8ku4gdY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=44HPMow3nSs:e9wQ8ku4gdY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=44HPMow3nSs:e9wQ8ku4gdY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=44HPMow3nSs:e9wQ8ku4gdY:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=44HPMow3nSs:e9wQ8ku4gdY:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/44HPMow3nSs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/558655284007216397/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/04/xul-schema.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/558655284007216397?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/558655284007216397?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/44HPMow3nSs/xul-schema.html" title="XUL Schema" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/04/xul-schema.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIGQXk_eyp7ImA9WxVbFEk.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-8943520462742574798</id><published>2009-03-30T20:55:00.005+01:00</published><updated>2009-03-30T21:55:20.743+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T21:55:20.743+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Extensions" /><title>Filtering Bookmarks by Tags in Your Extension</title><content type="html">It is not possible to filter by multiple tags in bookmarks window in Firefox. So I thought to try to see how it can be done. This exercise is interesting too to see how &lt;a href="https://developer.mozilla.org/en/XUL_Tutorial/Templates"&gt;templates&lt;/a&gt; &lt;a href="https://developer.mozilla.org/En/XUL/Template_Guide/SQLite_Templates"&gt;work&lt;/a&gt; and how to change the query for &lt;a href="http://www.csie.ntu.edu.tw/%7Epiaip/docs/CreateMozApp/mozilla-chp-10-sect-4.html"&gt;template&lt;/a&gt; in runtime. I prepared a XUL window that is just enough to demonstrate the point.&lt;br /&gt;First of all get to know &lt;a href="https://developer.mozilla.org/en/Places"&gt;Places&lt;/a&gt;, the heart of the Firefox's bookmarks and history management system. &lt;a href="https://developer.mozilla.org/en/The_Places_database"&gt;The Places database&lt;/a&gt; is where Firefox keeps all it's records on your bookmarks and history, and it is simply &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt; db/file. &lt;a href="http://people.mozilla.org/%7Edietrich/places-erd.png"&gt;Here's the schema&lt;/a&gt; and the database itself can be found at Firefox's profiles folder, the file is named places.sqlite. You can view it using &lt;a href="http://sourceforge.net/projects/sqlitebrowser/"&gt;SQLite Database Browser&lt;/a&gt;.&lt;br /&gt;With all the links out of the way lets look at the example file:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"&lt;br /&gt;      xmlns:html="http://www.w3.org/1999/xhtml"&lt;br /&gt;      title="Bookmarks - Test"&lt;br /&gt;       &amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="application/x-javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;  var someSelectionQuery =&lt;br /&gt;  'select p.title as title ' +&lt;br /&gt;  'from moz_bookmarks_roots r ' +&lt;br /&gt;  'join moz_bookmarks tagsRoot on r.folder_id = tagsRoot.id ' +&lt;br /&gt;  'join moz_bookmarks tags on tagsRoot.id = tags.parent ' +&lt;br /&gt;  'join moz_bookmarks b on b.parent = tags.id ' +&lt;br /&gt;  'join moz_places p on b.fk = p.id ' +&lt;br /&gt;  "where r.root_name = 'tags' and tags.title in ({tags}) " +&lt;br /&gt;  'group by b.fk ' +&lt;br /&gt;  'having count(b.fk) = {count}';&lt;br /&gt;&lt;br /&gt;  function doOnSelect(tagList){&lt;br /&gt;  var items = tagList.selectedItems;&lt;br /&gt;  var count = tagList.selectedCount;&lt;br /&gt;  var query = document.getElementById('bookmarkslistQuery');&lt;br /&gt;&lt;br /&gt;  var tags = '';&lt;br /&gt;  var countStr = count + '';&lt;br /&gt;&lt;br /&gt;  for(var i=0; i &amp;amp;lt; count; i++){&lt;br /&gt;    if(i != 0) tags += ',';&lt;br /&gt;    tags += "'" + tagList.selectedItems[i].label + "'";&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  var realQuery = someSelectionQuery.replace('{tags}', tags);&lt;br /&gt;  realQuery = realQuery.replace('{count}', countStr);&lt;br /&gt;  &lt;br /&gt;  query.textContent = realQuery;&lt;br /&gt;&lt;br /&gt;  var ml = document.getElementById('mainList');&lt;br /&gt;  ml.builder.rebuild();&lt;br /&gt;  }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;listbox datasources="profile:places.sqlite" ref="*" querytype="storage" seltype="multiple" id="tagsList" onselect="doOnSelect(this);"&amp;gt;&lt;br /&gt;  &amp;lt;template&amp;gt;&lt;br /&gt;    &amp;lt;query&amp;gt;&lt;br /&gt;      select tags.title&lt;br /&gt;        from moz_bookmarks_roots r&lt;br /&gt;        join moz_bookmarks tagsRoot on r.folder_id = tagsRoot.id&lt;br /&gt;        join moz_bookmarks tags on tagsRoot.id = tags.parent&lt;br /&gt;        where r.root_name = 'tags'&lt;br /&gt;    &amp;lt;/query&amp;gt;&lt;br /&gt;    &amp;lt;action&amp;gt;&lt;br /&gt;      &amp;lt;listitem uri="?" label="?title"/&amp;gt;&lt;br /&gt;    &amp;lt;/action&amp;gt;&lt;br /&gt;  &amp;lt;/template&amp;gt;&lt;br /&gt;&amp;lt;/listbox&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;listbox datasources="profile:places.sqlite" ref="*" querytype="storage" id="mainList"&amp;gt;&lt;br /&gt;  &amp;lt;template&amp;gt;&lt;br /&gt;    &amp;lt;query id="bookmarkslistQuery"&amp;gt;&lt;br /&gt;      select b.title as title&lt;br /&gt;      from moz_bookmarks_roots r&lt;br /&gt;      join moz_bookmarks tagsRoot on r.folder_id = tagsRoot.id&lt;br /&gt;      join moz_bookmarks tags on tagsRoot.id = tags.parent&lt;br /&gt;      join moz_bookmarks b on b.parent = tags.id&lt;br /&gt;    &amp;lt;/query&amp;gt;&lt;br /&gt;    &amp;lt;action id="blaction"&amp;gt;&lt;br /&gt;      &amp;lt;listitem uri="?" label="?title"/&amp;gt;&lt;br /&gt;    &amp;lt;/action&amp;gt;&lt;br /&gt;  &amp;lt;/template&amp;gt;&lt;br /&gt;&amp;lt;/listbox&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/window&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OK, lets quickly go through this. Lets skip the JavaScript part at the beginning, at the end there are two &lt;a href="https://developer.mozilla.org/en/XUL/listbox"&gt;listbox&lt;/a&gt; elements that have templates. The first listbox is showing a list of your tags. It's very simple SQLite template. Datasource attribute defines the datasource on which the query will be executed. In this case the file is profile:places.sqlite, and that is Places database, other required attribute is querytype which is marking that our datasource is a SQLite file. We have very simple template that has only &lt;a href="https://developer.mozilla.org/en/XUL/query"&gt;query&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en/XUL/action"&gt;action&lt;/a&gt; elements. Query is just a SQLite query, simple, once you figure out what is where in the database. And template is using tag titles as labels in &lt;a href="https://developer.mozilla.org/en/XUL/listitem"&gt;listitem&lt;/a&gt;. What it will do is just render a list of tags, and by selecting tags bookmarks will be filtered.&lt;br /&gt;The second listbox is rendering all tagged bookmarks, that's just to show something until a tag is selected. The label is name of bookmarked page. It is pretty much the same thing as with tags listbox. It is going to be a bit different though, since the query is going to be changed dynamically.&lt;br /&gt;So finally the JavaScript. doOnSelect function is doing all the work (well there's no other function there). On selection of tag, multiple can be selected, the function is just making a list of tag names separated by commas, updating the someSelectionQuery to include filter on tags. There is a little trick on group by and having - we're just making sure that particular place has the exact number of occurences as the number of tags selected. Basically all selected tags have to be parents of the bookmarked page, so that is what the query is checking. Oh, I forgot to mention &lt;a href="https://wiki.mozilla.org/Places/Places_SQL_queries_best_practices"&gt;Places SQL queries best practices&lt;/a&gt;.&lt;br /&gt;At the end of the function we need to call builder.rebuild() on the templated element to update the content since the query is changed, it won't be updated by itself.&lt;br /&gt;Phew, lots of work for such an ugly screen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-8943520462742574798?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=bWcUYN-Glb4:zYl5fTSddM8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=bWcUYN-Glb4:zYl5fTSddM8:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=bWcUYN-Glb4:zYl5fTSddM8:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=bWcUYN-Glb4:zYl5fTSddM8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=bWcUYN-Glb4:zYl5fTSddM8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=bWcUYN-Glb4:zYl5fTSddM8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=bWcUYN-Glb4:zYl5fTSddM8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=bWcUYN-Glb4:zYl5fTSddM8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=bWcUYN-Glb4:zYl5fTSddM8:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=bWcUYN-Glb4:zYl5fTSddM8:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/bWcUYN-Glb4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/8943520462742574798/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/03/filtering-bookmarks-by-tags-in-your.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8943520462742574798?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8943520462742574798?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/bWcUYN-Glb4/filtering-bookmarks-by-tags-in-your.html" title="Filtering Bookmarks by Tags in Your Extension" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/03/filtering-bookmarks-by-tags-in-your.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENQn8_fCp7ImA9WxVVFUQ.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-7089925614027187304</id><published>2009-03-08T23:03:00.006Z</published><updated>2009-03-09T11:38:13.144Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-09T11:38:13.144Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IIS" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net" /><title>Setup Your Virtual Folder During Deployment</title><content type="html">After manually &lt;a href="http://digitalmihailo.blogspot.com/2009/01/setup-http-handler-for-particular.html"&gt;setting http handlers for a particular folder in IIS 5 and 6&lt;/a&gt; and then seeing how it can be done &lt;a href="http://digitalmihailo.blogspot.com/2009/02/setup-your-iis-programmatically.html"&gt;programmatically&lt;/a&gt; we are ready to use it in our deployment.&lt;br /&gt;It is quite simple actually. Here are the things we need to do:&lt;br /&gt;&lt;br /&gt;1. Create &lt;a href="http://msdn.microsoft.com/en-us/library/k8kzx145.aspx"&gt;web setup&lt;/a&gt; project&lt;br /&gt;2. &lt;a href="http://msdn.microsoft.com/en-us/library/9cdb5eda.aspx"&gt;Create custom installer action&lt;/a&gt; (it's in VB though, but it is simple enough)&lt;br /&gt;3. Override &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.commit.aspx"&gt;Commit&lt;/a&gt; method of the created &lt;a href="http://msdn.microsoft.com/en-us/library/system.configuration.install.installer.aspx"&gt;installer&lt;/a&gt; class&lt;br /&gt;4. Add your action to be executed in the commit phase of the setup&lt;br /&gt;&lt;br /&gt;Steps 1 and 2 should be straight forward, however steps 3 and 4 require some more explanation. First of all the web setup project exposes two useful properties through &lt;a href="http://msdn.microsoft.com/en-us/library/aw5hzsah.aspx"&gt;Installation Address User Interface Dialog Box&lt;/a&gt; (that's just where you select your site and virtual folder): &lt;span style="font-weight: bold;"&gt;TARGETSITE&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;TARGETVDIR&lt;/span&gt;. These are as their names suggest: site (its metabase value) and virtual folder where the deployment will occur. That simplifies our life in a way that we can get a reference to our virtual folder's metabase entry like this:&lt;br /&gt;&lt;div style="border: 1px solid rgb(102, 102, 102); overflow: auto;"&gt;&lt;pre&gt;&lt;code&gt;&lt;br /&gt;webSiteId = Context.Parameters["TARGETSITE"];&lt;br /&gt;webSiteId = webSiteId.Substring(webSiteId.LastIndexOf('/') + 1);&lt;br /&gt;&lt;br /&gt;virtualDirectory = Context.Parameters["TARGETVDIR"];&lt;br /&gt;&lt;br /&gt;var myVirtualDir = new System.DirectoryServices.DirectoryEntry(&lt;br /&gt;"IIS://localhost/W3SVC/" + webSiteId +"/ROOT/" + virtualDirectory);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Piece of cake right?&lt;br /&gt;Now, what have we done is get TARGETSITE parameter, and we took just the site's id (because the format doesn't exactly fit), we used TARGETVDIR and composed the path we can use in DirectoryEntry constructor. After getting the directory entry you just do your configuration magic.&lt;br /&gt;There is one piece of the puzzle missing - how do we get those context parameters into our custom installer action? As &lt;a href="http://msdn.microsoft.com/en-us/library/aw5hzsah.aspx"&gt;the documentation&lt;/a&gt; says the parameters are available, however we still need to pass them into our action as part of the custom action data. Nothing easier:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3qhD-19YgiQ/SbRZ3xSsFJI/AAAAAAAACLU/MetTyoOuQtM/s1600-h/CustomActionData.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 101px;" src="http://2.bp.blogspot.com/_3qhD-19YgiQ/SbRZ3xSsFJI/AAAAAAAACLU/MetTyoOuQtM/s400/CustomActionData.JPG" alt="" id="BLOGGER_PHOTO_ID_5310968675236058258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Or in plain text: /TARGETVDIR="[TARGETVDIR]" /TARGETSITE="[TARGETSITE]"&lt;br /&gt;And at the end, the answer to &lt;span style="font-style: italic;"&gt;Why do we do this in the commit phase&lt;/span&gt;? Because the web setup will overwrite anything you change before the commit phase. It is creating the virtual folder, or setting default configuration to it if it already exists, in the commit phase. This means that not before the commit phase that you have the correct starting point for your changes.&lt;br /&gt;&lt;br /&gt;So to conclude: nothing ground breaking, just lots of simple little steps that you cannot really quickly figure out from confusing MSDN; unless, of course you are making your living out of deployment projects and you knew all this already.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-7089925614027187304?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=uLolMUuqMZI:qQksOeb-6bI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=uLolMUuqMZI:qQksOeb-6bI:4cEx4HpKnUU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=uLolMUuqMZI:qQksOeb-6bI:4cEx4HpKnUU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=uLolMUuqMZI:qQksOeb-6bI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=uLolMUuqMZI:qQksOeb-6bI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=uLolMUuqMZI:qQksOeb-6bI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=uLolMUuqMZI:qQksOeb-6bI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?i=uLolMUuqMZI:qQksOeb-6bI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=uLolMUuqMZI:qQksOeb-6bI:l6gmwiTKsz0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=l6gmwiTKsz0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?a=uLolMUuqMZI:qQksOeb-6bI:YwkR-u9nhCs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/digitalmihailo?d=YwkR-u9nhCs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/uLolMUuqMZI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/7089925614027187304/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/03/setup-your-virtual-folder-during.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/7089925614027187304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/7089925614027187304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/uLolMUuqMZI/setup-your-virtual-folder-during.html" title="Setup Your Virtual Folder During Deployment" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_3qhD-19YgiQ/SbRZ3xSsFJI/AAAAAAAACLU/MetTyoOuQtM/s72-c/CustomActionData.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/03/setup-your-virtual-folder-during.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIHQns5cSp7ImA9WxVXF08.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-7529173695200962634</id><published>2009-02-15T17:44:00.002Z</published><updated>2009-02-15T18:45:33.529Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-15T18:45:33.529Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IIS" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net" /><title>Setup your IIS programmatically</title><content type="html">When I was &lt;a href="http://digitalmihailo.blogspot.com/2009/01/setup-http-handler-for-particular.html"&gt;setting http handlers for a particular folder in IIS 5 and 6&lt;/a&gt; one of the requirements was to do it programmatically. Using &lt;a href="http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.aspx"&gt;System.DirectoryServices.DirectoryEntry&lt;/a&gt; seems to be the easiest way to do it.&lt;br /&gt;Getting access to your IIS configuration is simple:&lt;br /&gt;&lt;br /&gt;new System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC")&lt;br /&gt;&lt;br /&gt;That's it. This will give you access to the sites folder or your IIS. You would need to go through children nodes and find your site, and then through its children all they way down to the virtual folder you want to setup. Now if you know exactly which site you want to setup you could access it by simply using full path, like this:&lt;br /&gt;&lt;br /&gt;new System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/1/ROOT/MyTestSite")&lt;br /&gt;&lt;br /&gt;If you have more then one web site and more then one virtual folder to deal with things are not that simple anymore. But it's not too complex either.  &lt;a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1352"&gt;IIS 6.0 Resource Toolkit&lt;/a&gt; is your friend here. Whatever you see in Metabase explorer you can find/change programmatically. For example to get the list of all web sites on your local IIS you could do the following:&lt;br /&gt;&lt;br /&gt;var iis = new System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC");&lt;br /&gt;var sites = (from DirectoryEntry entry in iis.Children&lt;br /&gt;                    where entry.SchemaClassName == "IIsWebServer"&lt;br /&gt;                    select entry).ToList();&lt;br /&gt;&lt;br /&gt;This will list you all web sites you have on your IIS.  The root folder is normally imediatelly beneath website, you can get it like this (in this example from the first web site):&lt;br /&gt;&lt;br /&gt;var root = (from DirectoryEntry entry in sites[0].Children&lt;br /&gt;                    where entry.Name == "ROOT"&lt;br /&gt;                    select entry).FirstOrDefault();&lt;br /&gt;&lt;br /&gt;And now find a virtual folder you are looking for:&lt;br /&gt;&lt;br /&gt;var virtualFolder&lt;br /&gt;                = (from DirectoryEntry entry in root.Children&lt;br /&gt;                    where entry.Name == "MyTestSite"&lt;br /&gt;                     select entry).FirstOrDefault();&lt;br /&gt;&lt;br /&gt;So the pattern is clear, we go through children and we are finding what we want. Editing settings is pretty easy, if you want to create a virtual folder all you need to do is add a child to the root folder, or some other virtual folder:&lt;br /&gt;&lt;br /&gt;            root.Children.Add("AnotherVirtualFolder", "&lt;a id="ctl00_rs1_mainContentContainer_ctl01" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl01',this);" href="http://msdn.microsoft.com/en-us/library/ms524579.aspx"&gt;IIsWebVirtualDir&lt;/a&gt;");&lt;br /&gt;            root.CommitChanges();&lt;br /&gt;&lt;br /&gt;You need to call CommitChanges method to, errr ..., commit changes you've just made, otherwise they won't be applied. Or you can add custom web folder:&lt;br /&gt;&lt;br /&gt;            var myTargetFolder = virtualFolder.Children.Add("Scripts", "&lt;a id="ctl00_rs1_mainContentContainer_ctl01" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl01',this);" href="http://msdn.microsoft.com/en-us/library/ms526026.aspx"&gt;IIsWebDirectory&lt;/a&gt;");&lt;br /&gt;            virtualFolder.CommitChanges();&lt;br /&gt;&lt;br /&gt;And now you can change properties on your folder, or on anything else really:&lt;br /&gt;&lt;br /&gt;            myTargetFolder.Properties["ScriptMaps"].Clear();&lt;br /&gt;            myTargetFolder.Properties["ScriptMaps"].Add(@".js,c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll,1");&lt;br /&gt;            myTargetFolder.CommitChanges();&lt;br /&gt;&lt;br /&gt;Again take a peek in your metabase explorer to see what you can change. In this case ScriptMaps is an array so if we want to handle only *.js files in our folder we clear all entries and then add just the one we are interested in.&lt;br /&gt;&lt;br /&gt;Well it's pretty simple, now you can do whatever you want with your IIS. Interestingly, if you want to manipulate the Metabase during installation things might be even simpler, however there are couple of cavets along the way. More on that soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-7529173695200962634?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=CKwdOeZz"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=yKUFMhAX"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=yKUFMhAX" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=f7yQpAO8"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=f7yQpAO8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=hKKZbBA3"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=A5xcTYW6"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=A5xcTYW6" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=nmqqvshV"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=msF5CSQc"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/2unbVxlDufM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/7529173695200962634/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/02/setup-your-iis-programmatically.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/7529173695200962634?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/7529173695200962634?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/2unbVxlDufM/setup-your-iis-programmatically.html" title="Setup your IIS programmatically" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/02/setup-your-iis-programmatically.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMAQ3o4fSp7ImA9WxVRFE0.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-5663095308419060437</id><published>2009-01-19T22:34:00.010Z</published><updated>2009-01-19T23:07:22.435Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-19T23:07:22.435Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IHttpHandler" /><category scheme="http://www.blogger.com/atom/ns#" term="IIS" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.Net" /><title>Setup Http Handler For a Particular Folder in IIS 5 and 6</title><content type="html">The other day I was setting up my custom &lt;a href="http://www.asp.net/"&gt;ASP.Net&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ihttphandler.aspx"&gt;http handler&lt;/a&gt; in IIS 7. Easy and painless. Using IIS manager just go to the folder you like and configure it, a snap. I tried to do the same thing in IIS 5.1 (the same thing with IIS 6), but no such luck. If you want to do it in a virtual folder, then that's not a problem - &lt;a href="http://msdn.microsoft.com/en-us/library/bb515343.aspx"&gt;it's easy to set it up&lt;/a&gt;. However I wanted to set it up on a particular subfolder - no luck, IIS manager does not give you that option.&lt;br /&gt;I was handling .js files so setting the handler on the top folder was a bit of an inconvenience. Luckily it is just a limitation of the IIS manager, not the IIS itself. What you need is to get yourself Metabase explorer which is a part of the &lt;a href="http://www.iis.net/downloads/default.aspx?tabid=34&amp;amp;g=6&amp;amp;i=1352"&gt;IIS 6.0 Resource Toolkit&lt;/a&gt; and do a simple surgery.&lt;br /&gt;Here is what I did:&lt;br /&gt;I added folders beneath my virtual directory - Test in this case (Scripts and Dynamic), and added ScriptMaps key:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3qhD-19YgiQ/SXUDJmQvNmI/AAAAAAAABnU/ejbN6Pm3esU/s1600-h/Dynamic+folder2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 565px; height: 173px;" src="http://1.bp.blogspot.com/_3qhD-19YgiQ/SXUDJmQvNmI/AAAAAAAABnU/ejbN6Pm3esU/s400/Dynamic+folder2.jpg" alt="" id="BLOGGER_PHOTO_ID_5293140400468342370" border="0" /&gt;&lt;/a&gt;Normally it would inherit ScriptMaps from Test folder something like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3qhD-19YgiQ/SXUD7rqcO9I/AAAAAAAABns/K9v5_PEupRM/s1600-h/Test+folder2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 291px; height: 400px;" src="http://2.bp.blogspot.com/_3qhD-19YgiQ/SXUD7rqcO9I/AAAAAAAABns/K9v5_PEupRM/s400/Test+folder2.jpg" alt="" id="BLOGGER_PHOTO_ID_5293141260911786962" border="0" /&gt;&lt;/a&gt;I want it to handle only .js files so I added the key ScriptMaps (since it was inherited from the virtual directory it was not showing up in the list of keys):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3qhD-19YgiQ/SXUDySmpVjI/AAAAAAAABnk/TbwAR7oS0jI/s1600-h/ScriptMaps+properties+at+dynamic2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 292px; height: 400px;" src="http://2.bp.blogspot.com/_3qhD-19YgiQ/SXUDySmpVjI/AAAAAAAABnk/TbwAR7oS0jI/s400/ScriptMaps+properties+at+dynamic2.jpg" alt="" id="BLOGGER_PHOTO_ID_5293141099566159410" border="0" /&gt;&lt;/a&gt;And added a value for my files:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3qhD-19YgiQ/SXUDoFl1a1I/AAAAAAAABnc/EvijTOL5f0E/s1600-h/ScriptMaps+at+Dynamic2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 291px; height: 400px;" src="http://1.bp.blogspot.com/_3qhD-19YgiQ/SXUDoFl1a1I/AAAAAAAABnc/EvijTOL5f0E/s400/ScriptMaps+at+Dynamic2.jpg" alt="" id="BLOGGER_PHOTO_ID_5293140924274404178" border="0" /&gt;&lt;/a&gt;or in plain text that is:&lt;br /&gt;.js,c:\windows\microsoft.net\framework\v2.0.50725\aspnet_isapi.dll,1&lt;br /&gt;note the . (dot) at the beginning and the path to the ASP.Net isapi filter might be different on your machine.&lt;br /&gt;And that's it, I am only handling files I want to be handled by me in this folder, I can setup other file types if I wish in future. You still need to &lt;a href="http://msdn.microsoft.com/en-us/library/46c5ddfy.aspx"&gt;register your http handler&lt;/a&gt;, slight variation to the explanation is to put &lt;span style="font-style: italic;"&gt;Scripts\Dynamic\*.js&lt;/span&gt; (in this case) for path attribute value.&lt;br /&gt;I will add post on how to set this programatically soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-5663095308419060437?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=h3i7DmUH"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=82PMNcsq"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=82PMNcsq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=dGX8g9PV"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=dGX8g9PV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=GRZCx2RZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=CZzgJRAV"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=CZzgJRAV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=eqQGEwVW"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=7Jme7SDU"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/IsTyVhdhcVM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/5663095308419060437/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2009/01/setup-http-handler-for-particular.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/5663095308419060437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/5663095308419060437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/IsTyVhdhcVM/setup-http-handler-for-particular.html" title="Setup Http Handler For a Particular Folder in IIS 5 and 6" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_3qhD-19YgiQ/SXUDJmQvNmI/AAAAAAAABnU/ejbN6Pm3esU/s72-c/Dynamic+folder2.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2009/01/setup-http-handler-for-particular.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AGSXg_fSp7ImA9WxRXEEw.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-6225387523029970440</id><published>2008-10-12T22:33:00.010+01:00</published><updated>2008-10-14T22:28:48.645+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-14T22:28:48.645+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart - version 0.5a3</title><content type="html">New version of &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8914"&gt;JumpStart&lt;/a&gt; available.&lt;br /&gt;Among some minor fixes here are the new features:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;More thumbs&lt;/span&gt;&lt;br /&gt;Depending on the your resolution now you can have more thumbs on the page:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3qhD-19YgiQ/SPJt19cLLdI/AAAAAAAABRA/cwtFquQx420/s1600-h/16+even+more+small+thumbs.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3qhD-19YgiQ/SPJt19cLLdI/AAAAAAAABRA/cwtFquQx420/s400/16+even+more+small+thumbs.jpg" alt="" id="BLOGGER_PHOTO_ID_5256384488888020434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Using options menu you can now set number of thumbs you want. If you choose to show smaller thumbs you can fit even more of the thumbs on the screen. I managed to fit 24, however for the screen shot I could not think of more interesting sites so only 13 on this picture.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Note&lt;/span&gt;: Thumbs are refreshed after Firefox starts (30 seconds delay), all thumbs are refreshed at the same time so you might experience some slow down if you choose lots of thumbs. More intelligent refresh is scheduled for the next release, hopefully next weekend.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pin a thumb&lt;/span&gt;&lt;br /&gt;Now you can pin a thumb. Pinned thumbs will appear always and will appear at the beginning of the list.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3qhD-19YgiQ/SPJu9tYdlZI/AAAAAAAABRI/6ET2nCuKQ9w/s1600-h/06+close%26pin.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3qhD-19YgiQ/SPJu9tYdlZI/AAAAAAAABRI/6ET2nCuKQ9w/s400/06+close%26pin.jpg" alt="" id="BLOGGER_PHOTO_ID_5256385721528063378" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When you hover over a thumb it will show two icons, one like X and one resembling pin. Click on the pin icon to pin the thumb, pin icon will turn red, another click on the pin icon to unpin it.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Note&lt;/span&gt;: The pinned items will appear at the beginning of the list on the next Firefox start (will improve that in one of the next versions)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exclude site from being shown as thumb&lt;/span&gt;&lt;br /&gt;You can now exclude sites from appearing as thumbs if you wish. Similarly as with pin, hover over thumb and click on the X icon to mark it for exclusion, click again to un-mark it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3qhD-19YgiQ/SPJvzE6vZjI/AAAAAAAABRQ/kc8jC0gYeik/s1600-h/03+close%26pin.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3qhD-19YgiQ/SPJvzE6vZjI/AAAAAAAABRQ/kc8jC0gYeik/s400/03+close%26pin.jpg" alt="" id="BLOGGER_PHOTO_ID_5256386638378919474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JumpStart removed from the history and closed tabs&lt;/span&gt;&lt;br /&gt;Now when you close a tab showing JumpStart it will not appear in the list of closed tabs. Also, it will be removed from history once you navigate off the tab showing JumpStart.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Showing JumpStart on browser start&lt;/span&gt;&lt;br /&gt;Once you start browser, if it would normally show blank page or home page (if tabs are not restored), the start page will be replaced by JumpStart. This can be turned off from preferences.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Toolbar button to show JumpStart&lt;/span&gt;&lt;br /&gt;There is a convenient toolbar button to show JumpStart in current tab. It is immediately following URL bar. It can be removed or turned back on through preferences. Or it's position can be changed by customizing toolbar.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Menu item for setting options&lt;/span&gt;&lt;br /&gt;There is a menu option now for setting JumpStart preferences. Mind though, preferences window is really ugly. I will be working on general apperience of the extension for the next release, I promise.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3qhD-19YgiQ/SPJxrJthTDI/AAAAAAAABRY/VnrF8cvclBc/s1600-h/07+menu.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3qhD-19YgiQ/SPJxrJthTDI/AAAAAAAABRY/VnrF8cvclBc/s400/07+menu.jpg" alt="" id="BLOGGER_PHOTO_ID_5256388701249948722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3qhD-19YgiQ/SPJxzncyrhI/AAAAAAAABRg/coFYOo_6isI/s1600-h/08+Prefs.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_3qhD-19YgiQ/SPJxzncyrhI/AAAAAAAABRg/coFYOo_6isI/s400/08+Prefs.jpg" alt="" id="BLOGGER_PHOTO_ID_5256388846671801874" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3qhD-19YgiQ/SPJx6UBD8jI/AAAAAAAABRo/xUXeNM-W8l0/s1600-h/09+Prefs.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_3qhD-19YgiQ/SPJx6UBD8jI/AAAAAAAABRo/xUXeNM-W8l0/s400/09+Prefs.jpg" alt="" id="BLOGGER_PHOTO_ID_5256388961714303538" border="0" /&gt;&lt;/a&gt;As you can see, there are two tabs in the preferences: General and Thumbs. In the general section options are:&lt;br /&gt;- Show On New Tab : should JumpStart be shown when you open a new tab&lt;br /&gt;- Show On Startup : should JumpStart be shown immediately when you start the browser&lt;br /&gt;- Show Toolbar Button : show JumpStart toolbar button&lt;br /&gt;Thumbs section is more interesting, it shows:&lt;br /&gt;- Zoom Thumbs : if switched on thumbs will be shown a bit bigger on hover&lt;br /&gt;- Show Small : there are two sizes of thumbs now, if you choose small then you can fit even more of them on the screen&lt;br /&gt;- Numer of Thumbs per Line : how many thumbs you wish to appear on one line&lt;br /&gt;- Number of Thumb Lines : how many thumb lines should be there&lt;br /&gt;All the other things on the panel can be ignored, they are just there to add to ugliness and are not functional (well total number of thumbs is interesting for information purposes)&lt;br /&gt;&lt;br /&gt;Plan for the next version is to improve refreshing of thumbs, improve search, and improve overall appearance of the extension. I'll fix some functionality, tighten it up in general.&lt;br /&gt;&lt;br /&gt;As always, your feedback is much appreciated. I'll answer all the &lt;a href="http://groups.google.com/group/new-tab-jumpstart"&gt;questions/suggestions&lt;/a&gt; as soon as possible.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*** New Screenshot ***&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Almost like Chrome&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_3qhD-19YgiQ/SPUO6Dl9gNI/AAAAAAAABRw/SqvW0MPbhkQ/s1600-h/almost+like+chrome+2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_3qhD-19YgiQ/SPUO6Dl9gNI/AAAAAAAABRw/SqvW0MPbhkQ/s400/almost+like+chrome+2.jpg" alt="" id="BLOGGER_PHOTO_ID_5257124530584649938" border="0" /&gt;&lt;/a&gt;Yes, that's Firefox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-6225387523029970440?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=IhHOZfVD"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=7CjUMteW"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=7CjUMteW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=JU822BkA"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=JU822BkA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=yTOk9jDk"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=e3DSjtkM"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=e3DSjtkM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=B9ktMz2b"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=2pWIqjfh"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/C064_JtuBL8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/6225387523029970440/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/10/jumpstart-version-05a3.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/6225387523029970440?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/6225387523029970440?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/C064_JtuBL8/jumpstart-version-05a3.html" title="JumpStart - version 0.5a3" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3qhD-19YgiQ/SPJt19cLLdI/AAAAAAAABRA/cwtFquQx420/s72-c/16+even+more+small+thumbs.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">5</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/10/jumpstart-version-05a3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIDR3s8fip7ImA9WxRQGE4.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-4453027277579006270</id><published>2008-09-29T20:10:00.009+01:00</published><updated>2008-10-12T19:52:56.576+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-12T19:52:56.576+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart - plan for next version</title><content type="html">&lt;span style="font-weight: bold;"&gt;* Updated&lt;/span&gt; - Sorry about the delay. I have updated the plan for the next version. I'll try to include some screen shots today too.&lt;br /&gt;&lt;br /&gt;Next version of &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8914"&gt;JumpStart&lt;/a&gt; is planned for &lt;strike style="font-weight: bold;"&gt;5th&lt;/strike&gt; &lt;span style="font-weight: bold;"&gt;12th&lt;/span&gt; October. Here is the list of things I would like to do until then, and some preview of things already implemented. (I'll add screen shots as I finish each of these)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Showing JumpStart on browser start&lt;/span&gt; - &lt;span style="color: rgb(0, 153, 0);"&gt;DONE&lt;/span&gt;&lt;br /&gt;Something that makes sense - if there is only one page and is either blank or homepage JumpStart is shown. This can be overridden through options dialog.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Button to show JumpStart on toolbar&lt;/span&gt; - &lt;span style="color: rgb(0, 153, 0);"&gt;DONE&lt;/span&gt;&lt;br /&gt;Sometimes it is useful to show the content without opening new tab.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Menu item for setting options &lt;/span&gt;- &lt;span style="color: rgb(0, 153, 0);"&gt;DONE&lt;/span&gt;&lt;br /&gt;In tools menu now there is menu option to show options dialog for the extension.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;More thumbs &lt;/span&gt;- &lt;span style="color: rgb(0, 153, 0);"&gt;DONE&lt;/span&gt;&lt;br /&gt;Thumbs can now fill the whole useful area of window, there are two sizes to choose from - small and large thumbs. Depending on resolution the number of thumbs will be offered to choose from.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pin thumb &lt;/span&gt;- &lt;span style="color: rgb(0, 153, 0);"&gt;DONE&lt;/span&gt;&lt;br /&gt;Pin your favorite thumbs so they will always appear &lt;strike&gt;at the same position&lt;/strike&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Exclude site from being shown as thumb&lt;/span&gt; - &lt;span style="color: rgb(0, 153, 0);"&gt;DONE&lt;/span&gt;&lt;br /&gt;By one click remove site from the list of shown thumbs&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JumpStart removed from the history&lt;/span&gt; - &lt;strike&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;IN PROGRESS&lt;/span&gt;&lt;/strike&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;DONE&lt;/span&gt;&lt;br /&gt;It won't show up on back button pressed, nor at closed items.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Refresh thumbs&lt;/span&gt; - &lt;strike&gt;&lt;span style="color: rgb(255, 102, 0);"&gt;PLANNED&lt;/span&gt;&lt;/strike&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;NEXT VERSION&lt;/span&gt;&lt;br /&gt;At present thumbs are being refreshed after restart of Firefox. New refresh strategies are there now: on some interval, then all at the same time or one-by-one.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Improved search&lt;/span&gt; -&lt;span style="color: rgb(255, 0, 0);"&gt; NEXT VERSION&lt;/span&gt;&lt;br /&gt;Search is currently searching only through the history, I want to make it work for all installed search plug-ins. In future I want to improve the whole feature. I'm still thinking about it.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;New bookmark features &lt;/span&gt;- &lt;span style="color: rgb(255, 0, 0);"&gt;NEXT VERSION&lt;/span&gt;&lt;br /&gt;Google bookmarks?&lt;br /&gt;&lt;br /&gt;This all is something I will be working, it might not get into the 0.5a3 version but it will get into the final release pretty soon.&lt;br /&gt;&lt;br /&gt;And I promise I'll work on the logo :) My wife absolutely hate it, and I didn't get much better feedback from others. I plan to deliver final 0.5 version at the end of October so by then I should change it.&lt;br /&gt;&lt;br /&gt;As always, your feedback is critical. There is a &lt;a href="http://groups.google.com/group/new-tab-jumpstart"&gt;Google group setup &lt;/a&gt;so please start a new discussion with ideas, critics or praise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-4453027277579006270?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=qv527CLX"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=zXhKo6Mz"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=zXhKo6Mz" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=jjfCpE00"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=jjfCpE00" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=P0jFHmW3"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=g4GVocdM"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=g4GVocdM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=v4nK6pC3"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=nesz2tSe"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/GMJUDvkje3g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/4453027277579006270/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/09/jumpstart-plan-for-next-version.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/4453027277579006270?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/4453027277579006270?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/GMJUDvkje3g/jumpstart-plan-for-next-version.html" title="JumpStart - plan for next version" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/09/jumpstart-plan-for-next-version.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEHQXY6fSp7ImA9WxRREEk.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-3849352938972262944</id><published>2008-09-22T00:46:00.006+01:00</published><updated>2008-09-22T01:17:10.815+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-22T01:17:10.815+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart - version 0.5a2</title><content type="html">New version of JumpStart is available.&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8914"&gt;https://addons.mozilla.org/en-US/firefox/addon/8914&lt;/a&gt;. If the site does not show New Tab JumpStart 0.5a2 in the name of the add-on then check out: &lt;a href="https://addons.mozilla.org/en-US/firefox/addons/versions/8914"&gt;https://addons.mozilla.org/en-US/firefox/addons/versions/8914&lt;/a&gt;; sometimes it takes them some time to refresh it, but oddly it shows up in the list of all versions.&lt;br /&gt;Some new stuff there, some fixes too, here is the list off top of my head:&lt;br /&gt;Thumbnails are now clickable.&lt;br /&gt;Delayed thumbnail update - refresh of the thumbnails is initiated about 1 minute after&lt;br /&gt;the browser is started.&lt;br /&gt;Recently closed list fixed and improved, now it shows closed tabs as they happen.&lt;br /&gt;Added some basic preferences&lt;br /&gt;Gmail support - there were issues with Gmail in previous version so it was filtered out, now is showing OK in thumbnails&lt;br /&gt;Support for Firefox 3.1a1&lt;br /&gt;Fixed problem with new window opened from JavaScript&lt;br /&gt;Fixed unicode problem with extension's cache file&lt;br /&gt;Thumbnail zoom - new feature, see screen shots - it has to be turned on from the add-on options.&lt;br /&gt;Lots of other minor tweaks and improved quality.&lt;br /&gt;&lt;br /&gt;I created &lt;a href="http://groups.google.com/group/new-tab-jumpstart"&gt;discussion group&lt;/a&gt; for the extension where you can post your feedbacks, suggestions, report issues, they are all very much appreciated. The thread regarding the current version is there too so please let me know &lt;a href="http://groups.google.com/group/new-tab-jumpstart/browse_thread/thread/64785de162e6379d"&gt;how do you find this version&lt;/a&gt;.&lt;br /&gt;Next version is to be expected in two weeks time, I'll be blogging on what's planned for it soon, so stay tuned.&lt;br /&gt;&lt;br /&gt;And now screen shots:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3qhD-19YgiQ/SNbhziCEl_I/AAAAAAAABOw/5WsQOH7dUd0/s1600-h/screen.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3qhD-19YgiQ/SNbhziCEl_I/AAAAAAAABOw/5WsQOH7dUd0/s400/screen.jpg" alt="" id="BLOGGER_PHOTO_ID_5248630691171964914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This looks similar to the previous version. But here is some noticeable difference:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3qhD-19YgiQ/SNbiZ1wimwI/AAAAAAAABO4/dW7LeCVRzTs/s1600-h/zoom.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3qhD-19YgiQ/SNbiZ1wimwI/AAAAAAAABO4/dW7LeCVRzTs/s400/zoom.jpg" alt="" id="BLOGGER_PHOTO_ID_5248631349302172418" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is a kind of zoom, so the thumbnail is better seen. It is turned off by default, you can turn it on by going to menu: Tools -&gt; Add-ons, click Options button of the New Tab JumpStart add-on, check Zoom Thumbs option on the dialog and press OK. Simple :) Here is the previous sentence but in picture:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3qhD-19YgiQ/SNbjIeEQ4FI/AAAAAAAABPA/8YG1-UesTlc/s1600-h/setupzoom.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3qhD-19YgiQ/SNbjIeEQ4FI/AAAAAAAABPA/8YG1-UesTlc/s400/setupzoom.jpg" alt="" id="BLOGGER_PHOTO_ID_5248632150396297298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'll probably make it by default turned on from the next version unless I get really bad feedback :) This is a step forward to make additional changes in future - more thumbs, more options, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-3849352938972262944?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=lpJzTJ6s"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=yyNpSjEH"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=yyNpSjEH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=pY31Sc04"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=pY31Sc04" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=o9bLAAI6"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=JOrKQXUn"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=JOrKQXUn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=IiSN1AE7"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=RRVryT3m"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/OekRei4jZ9M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/3849352938972262944/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/09/jumpstart-version-05a2.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/3849352938972262944?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/3849352938972262944?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/OekRei4jZ9M/jumpstart-version-05a2.html" title="JumpStart - version 0.5a2" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_3qhD-19YgiQ/SNbhziCEl_I/AAAAAAAABOw/5WsQOH7dUd0/s72-c/screen.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/09/jumpstart-version-05a2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkABSX8zcSp7ImA9WxRSFkQ.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-62384190579783669</id><published>2008-09-17T15:57:00.010+01:00</published><updated>2008-09-18T00:39:18.189+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-18T00:39:18.189+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><category scheme="http://www.blogger.com/atom/ns#" term="JumpStart" /><title>JumpStart your web experience</title><content type="html">New add-on available for Firefox - &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/8914"&gt;New Tab JumpStart&lt;/a&gt;. When you open a new tab you will get immediate access to your most frequently used sites, bookmarks, closed tabs, history search. Similar to Google's Chrome new tab feature.&lt;br /&gt;Here are some screen shots:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3qhD-19YgiQ/SNEg-MsA7NI/AAAAAAAABOY/RX6KqGsgJwE/s1600-h/screenShot1.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3qhD-19YgiQ/SNEg-MsA7NI/AAAAAAAABOY/RX6KqGsgJwE/s400/screenShot1.JPG" alt="" id="BLOGGER_PHOTO_ID_5247011293793152210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_3qhD-19YgiQ/SNEhGpYVjdI/AAAAAAAABOg/KVl6U6uRXwk/s1600-h/screenShot2.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_3qhD-19YgiQ/SNEhGpYVjdI/AAAAAAAABOg/KVl6U6uRXwk/s400/screenShot2.JPG" alt="" id="BLOGGER_PHOTO_ID_5247011438934199762" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Features are:&lt;br /&gt;- Preview of your most frequently accessed sites (it has delayed load and thumbnails caching)&lt;br /&gt;- Latest bookmarks&lt;br /&gt;- List of recently closed tabs&lt;br /&gt;- Search your history&lt;br /&gt;All this on opening empty tab.&lt;br /&gt;&lt;br /&gt;This is still fresh and thus still needs you to login to add-on site to download it. It is work in progress and expect improvements soon. As soon as I have code in good enough shape I will publish it on Codeplex.&lt;br /&gt;&lt;br /&gt;Of course all feedback and comments welcome.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://addons.mozilla.org/en-US/firefox/addon/8914"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3qhD-19YgiQ/SNEgmUA_9PI/AAAAAAAABOQ/zrD2AZkfITc/s400/JumpStartLogo.png" alt="" id="BLOGGER_PHOTO_ID_5247010883443356914" border="0" /&gt;&lt;/a&gt;&lt;span style="font-weight: bold;"&gt;* UPDATE *&lt;/span&gt;&lt;br /&gt;I have just got feedback that with &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/1122"&gt;Tab Mix Plus&lt;/a&gt; add-on the new tab is not showing. Tab Mix Plus is overriding some browser events that JumpStart is using. So if you wish both add-ons to peacefully coexist setup Tab Mix Plus to open: chrome://jumpstart/content/tabView.xul on new tab. Go to Tools -&gt; Tab Mix Plus Options, here's the screen shot of what to do:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3qhD-19YgiQ/SNGUmhk-UBI/AAAAAAAABOo/E3Oa_b-7wrk/s1600-h/tabMixPlusSetup.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_3qhD-19YgiQ/SNGUmhk-UBI/AAAAAAAABOo/E3Oa_b-7wrk/s400/tabMixPlusSetup.jpg" alt="" id="BLOGGER_PHOTO_ID_5247138430432727058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;After that JumpStart works as it should.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-62384190579783669?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=0yC0S76K"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=44351swp"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=44351swp" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=K5VfkFwH"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=K5VfkFwH" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=CM1ohQTd"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=1QWJ5BHv"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=1QWJ5BHv" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=dl0tS5Ge"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=GIMNfnvU"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/7PHo-0Td3GQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/62384190579783669/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/09/jumpstart-your-web-experience.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/62384190579783669?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/62384190579783669?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/7PHo-0Td3GQ/jumpstart-your-web-experience.html" title="JumpStart your web experience" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3qhD-19YgiQ/SNEg-MsA7NI/AAAAAAAABOY/RX6KqGsgJwE/s72-c/screenShot1.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/09/jumpstart-your-web-experience.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08GSHg9cSp7ImA9WxRTEU4.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-7064500024767832562</id><published>2008-08-30T21:46:00.004+01:00</published><updated>2008-08-30T22:30:29.669+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-30T22:30:29.669+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Ajax.NET" /><title>Ajax.NET: Disable buttons until postback finishes</title><content type="html">When developing Web Forms in ASP.NET it is usually the case that we have multiple postbacks on a page. When there are Ajax calls as well it can easily happen that we can have multiple outstanding postbacks - e.g. postback by dropdown list immediately followed by a button click, or simply multiple button clicks. Due to various reasons those calls can end up in different sequence on the server (e.g. network latency). For some we might not care, but for some the sequence might be important.&lt;br /&gt;What I'm showing here is a simple client solution to the problem. It will simply disable buttons while the postback ends thus preventing user to click on them until the postback had finished.&lt;br /&gt;&lt;pre name="code" class="js"&gt;&lt;br /&gt;&amp;lt;script language="javascript" type="text/javascript"&amp;gt;&lt;br /&gt;//on the page submit we want to disable buttons until the call is finished&lt;br /&gt;// and then reenable them&lt;br /&gt;(function() {&lt;br /&gt;  //add on the page load event that will register our scripts&lt;br /&gt;  //for all significant events&lt;br /&gt;  Sys.Application.add_load(setupButtonDisablers);&lt;br /&gt;&lt;br /&gt;  function setupButtonDisablers() {&lt;br /&gt;     //subscribe to on page load and submit events&lt;br /&gt;     //on page load we will enable buttons&lt;br /&gt;     Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(onPageLoad);&lt;br /&gt;     //on page submit we will disable them&lt;br /&gt;     Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(onSubmit);&lt;br /&gt;     //remove setup code so it will never be called again&lt;br /&gt;     Sys.Application.remove_load(setupButtonDisablers);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  //on page load - enable all the relevant buttons&lt;br /&gt;  function onPageLoad() {&lt;br /&gt;     findAndEnable('&lt;%= MyButton1.ClientId %&gt;');&lt;br /&gt;     findAndEnable('&lt;%= MyButton2.ClientId %&gt;');&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  //on page submit - disable all the relevant buttons&lt;br /&gt;  function onSubmit() {&lt;br /&gt;     findAndDisable('&lt;%= MyButton1.ClientId %&gt;');&lt;br /&gt;     findAndDisable('&lt;%= MyButton2.ClientId %&gt;');&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function findAndDisable(id) {&lt;br /&gt;     findAndSetDisabledProperty(id, true);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  function findAndEnable(id) {&lt;br /&gt;     findAndSetDisabledProperty(id, false);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  //finds and sets disabled property of a searched control&lt;br /&gt;  function findAndSetDisabledProperty(id, value) {&lt;br /&gt;     var control = $get(id);&lt;br /&gt;     if (control) {&lt;br /&gt;         control.disabled = value;&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt;})();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is fairly simple code, without comments it would be really short. What it does is subscribing to page submit and load events and is disabling and enabling buttons respectively. Just put it somewhere on a part of the page that will be loaded first time the page loads.&lt;br /&gt;You can make this more complicated if you need to do something specific depending on which element caused the postback by using different signature for onSubmit function. Here is documentation for the &lt;a href="http://msdn.microsoft.com/en-us/library/bb397432.aspx"&gt;beginRequest&lt;/a&gt; event. Basically it will accept sender and args and you can use args.get_postBackElement() for example and make decisions what to do with your page elements then - hide them, disable them, animate them, whatever.&lt;br /&gt;&lt;br /&gt;And at the end, remember that despite all the effort done on the client side you will always have to handle any eventuality on the server. Always remember, any client input is evil and it has to be validated - in this case postback sequence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-7064500024767832562?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=T5JwXtuF"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=RQiuumm4"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=RQiuumm4" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=5PCNup14"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=5PCNup14" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=LdD9Oxyp"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=xHq26hie"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=xHq26hie" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=OksypHH3"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=5pltBvzY"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/S1WMpl1N-Fg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/7064500024767832562/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/08/ajaxnet-disable-buttons-while-postback.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/7064500024767832562?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/7064500024767832562?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/S1WMpl1N-Fg/ajaxnet-disable-buttons-while-postback.html" title="Ajax.NET: Disable buttons until postback finishes" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/08/ajaxnet-disable-buttons-while-postback.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUDQHo4fCp7ImA9WxdaGUs.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-1784362645984749705</id><published>2008-08-28T22:34:00.005+01:00</published><updated>2008-08-28T22:51:11.434+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-28T22:51:11.434+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Project" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><title>XML Schema for Install.rdf available on Codeplex</title><content type="html">I just published the first version of the XML Schema for the Install.rdf file (Mozilla Add on Install Manifest file) on &lt;a href="http://www.codeplex.com/installRdfSchema"&gt;Codeplex&lt;/a&gt;. More information on the file is here: &lt;a href="http://developer.mozilla.org/en/install.rdf"&gt;Install.rdf on Mozilla Developer Center&lt;/a&gt;. The schemes are published under MPL 1.1 license.&lt;br /&gt;Add on Manager enabled XUL applications (Firefox, Mozilla, Songbird, Flock, ...) are using install.rdf file to get description of the add on being installed. With this schemas you can get better support in your favourite IDE. Here are some screenshots from my Visual Studio:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_3qhD-19YgiQ/SLcb9V0R6aI/AAAAAAAABHo/teR8Cb1h2Jo/s1600-h/Intellisense.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 520px; height: 226px;" src="http://4.bp.blogspot.com/_3qhD-19YgiQ/SLcb9V0R6aI/AAAAAAAABHo/teR8Cb1h2Jo/s400/Intellisense.jpg" alt="" id="BLOGGER_PHOTO_ID_5239687432111253922" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_3qhD-19YgiQ/SLccIExc21I/AAAAAAAABHw/C6kdVdzwkvQ/s1600-h/Applications.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_3qhD-19YgiQ/SLccIExc21I/AAAAAAAABHw/C6kdVdzwkvQ/s400/Applications.jpg" alt="" id="BLOGGER_PHOTO_ID_5239687616514546514" border="0" /&gt;&lt;/a&gt;You can see more screenshots on the project's &lt;a href="http://www.codeplex.com/installRdfSchema/Wiki/View.aspx?title=Feature%20Screenshots"&gt;wiki&lt;/a&gt;.&lt;br /&gt;Most of the elements have regex validation, and wherever I could I added some enumeration support as seen on the picture above. However there might be errors so if you find any please report them on project's &lt;a href="http://www.codeplex.com/installRdfSchema/WorkItem/List.aspx"&gt;issue tracking&lt;/a&gt;.&lt;br /&gt;All suggestions are welcome. I added &lt;a href="http://www.codeplex.com/installRdfSchema/Thread/View.aspx?ThreadId=34423"&gt;discussion thread&lt;/a&gt; just for that purpose. If you know how to setup your favourite IDE to use this files add them there and I will update wiki accordingly. I have already added instructions for Visual Studio.&lt;br /&gt;In future I plan to add more features - wizards, possibly some kind of management tools, etc. However this is in probably distant future since I don't have much time. What you could expect in the near future is XUL schema under MPL license. I'm half way there so I hope I'll publish it in next couple of weeks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-1784362645984749705?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=HpksfiYy"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=kLbJZfgs"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=kLbJZfgs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=xtDc1yp0"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=xtDc1yp0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=epxUu7Im"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=1MDkgu6s"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=1MDkgu6s" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=Xi3INB6H"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=Dj7juUon"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/no-YN-ZdnLw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/1784362645984749705/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/08/xml-schema-for-installrdf-available-on.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/1784362645984749705?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/1784362645984749705?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/no-YN-ZdnLw/xml-schema-for-installrdf-available-on.html" title="XML Schema for Install.rdf available on Codeplex" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3qhD-19YgiQ/SLcb9V0R6aI/AAAAAAAABHo/teR8Cb1h2Jo/s72-c/Intellisense.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">7</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/08/xml-schema-for-installrdf-available-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMNRXwzeSp7ImA9WxdVE0k.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-5621945289053083234</id><published>2008-07-18T01:08:00.004+01:00</published><updated>2008-07-18T01:54:54.281+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-18T01:54:54.281+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JSMock" /><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><title>Extend JsMock to Support Custom Argument Matcher</title><content type="html">I needed some custom argument matching in my mocks today. I am using &lt;a href="http://jsmock.sourceforge.net/"&gt;JSMock&lt;/a&gt; for JavaScript mocking and I find it a bit limited when it comes to argument matching. It mostly satisfies my needs but occasionally I need it to be a bit more flexible, generally speaking. Now, what I introduced is not something that xMock frameworks usually have but JavaScript is a dynamic language and some things are simply different compared to "static" languages (OK, I admit, I've used only &lt;a href="http://www.nmock.org/"&gt;NMock&lt;/a&gt; so far, but I can't be much wrong here).&lt;br /&gt;&lt;br /&gt;To use JSMock you need only jsmock.js. The only change required in the original code is in __delegateMatching method of the ArgumentMatcher, changes are marked red:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(102, 102, 102); overflow: auto;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;__delegateMatching: function(expected, actual) {&lt;br /&gt;  if( expected == null ) {&lt;br /&gt;   return this.__match( expected, actual );&lt;br /&gt;  }&lt;br /&gt;  else if( expected.constructor == TypeOf ) {&lt;br /&gt;   return this.__match(expected.type, actual.constructor);&lt;br /&gt;  }&lt;br /&gt;  else if( expected.constructor == Array ) {&lt;br /&gt;   return this.__matchArrays(expected, actual);&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color: rgb(255, 0, 0);"&gt;else if( expected.constructor == CustomMatch){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;   if(!expected.match){&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;    throw new Error("Custom matcher not available");&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;   }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;   return expected.match(expected.object, actual);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;  }&lt;/span&gt;&lt;br /&gt;  else {&lt;br /&gt;   return this.__match(expected, actual);&lt;br /&gt;  }&lt;br /&gt; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;So that was just one added if clause. All I am saying there is if the expected argument is of CustomMatch then use its custom matcher method instead of original matching logic. There is of course the implementation of CustomMatch that is required:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(102, 102, 102); overflow: auto;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function CustomMatch(object){&lt;br /&gt; this.object = object;&lt;br /&gt; this.Using = function(customMatcher){&lt;br /&gt;   if(typeof(customMatcher) != 'function'){&lt;br /&gt;     throw new Error("Can only take constructors");&lt;br /&gt;   }&lt;br /&gt;   this.match = customMatcher;&lt;br /&gt;   return this;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;CustomMatch.Match = function(object){&lt;br /&gt; return new CustomMatch(object);&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Usage is simple, as one of the expected arguments use something like the following construct:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;CustomMatch.Match(expectedObject).Using(customMatchFunction)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;Where expectedObject is obviously object that you want to match to the actual argument and the customMatchFunction is the function to use for custom matching, it expects two arguments and returns boolean. So usage might look something like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(102, 102, 102); overflow: auto;"&gt;&lt;br /&gt;&lt;pre&gt;var expectedObject = { fieldOne : 1, fieldTwo : 2 };&lt;br /&gt;var customMatchFunction(expected, actual){&lt;br /&gt; return expected.fieldOne == actual.fieldOne &amp;amp;&amp;amp; expected.fieldTwo == actual.fieldTwo;&lt;br /&gt;};&lt;br /&gt;&lt;code&gt;&lt;br /&gt;someMock.expects().someMethod(CustomMatch.Match(expectedObject).Using(customMatchFunction));&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;In your custom matching function you can basically do whatever you want, you could use closure and ignore expected object, or extend the CustomMatch to support something like this: CustomMatch.Use(function(actual){ return actual.fieldOne == 1 &amp;amp;&amp;amp; actual.fieldTwo == 2;});&lt;br /&gt;&lt;br /&gt;If you are using &lt;a href="http://en.wikipedia.org/wiki/Object_literal"&gt;object literals&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Duck_typing"&gt;duck typing&lt;/a&gt; this kind of mock functionality might come handy.&lt;br /&gt;That is something you don't have in C# or Java, C# 3.0 comes closest to object literals with &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/05/15/new-orcas-language-feature-anonymous-types.aspx"&gt;anonymous types&lt;/a&gt; but they are by far of less usability, and they have nothing close to duck typing.&lt;br /&gt;I hope you find this small extension justified and, more importantly, useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-5621945289053083234?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=5Oc4KL65"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=bsHsV1KL"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=bsHsV1KL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=zz1SxNsz"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=zz1SxNsz" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=OFeKzBHV"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=kfUaT1X1"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=kfUaT1X1" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=Rk9V66vq"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=5gSMA9yf"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/u1adnbRnfBg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/5621945289053083234/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/07/extend-jsmock-to-support-custom.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/5621945289053083234?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/5621945289053083234?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/u1adnbRnfBg/extend-jsmock-to-support-custom.html" title="Extend JsMock to Support Custom Argument Matcher" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/07/extend-jsmock-to-support-custom.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4DQXc4eip7ImA9WxVWF08.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-8466960976231652072</id><published>2008-07-07T21:03:00.003+01:00</published><updated>2009-02-27T10:02:50.932Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-27T10:02:50.932Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Net History" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox Add-on" /><title>Firebug Net Panel History Overlay version 0.3.0</title><content type="html">New version of the &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/7189"&gt;Firebug Net Panel History Overlay&lt;/a&gt; is available. This version requires Firebug version 1.2.0b4; that's the latest version at the moment. The previous version of the history add-on was making Firebug to hang; some functions from Firebug that I used changed as well as some of the NetMonitor and NetPanel behaviours so it was causing hang.&lt;br /&gt;Due to behaviour changes it might happen that with new versions of the Firebug I will have to tweak history add-on but will keep close eye on Firebug changes and if required will update the add-on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-8466960976231652072?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=LxFNiBu3"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=nTpHzCjh"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=nTpHzCjh" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=Ds1ExS1G"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=Ds1ExS1G" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=BgZKFa7o"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=MthfOeig"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=MthfOeig" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=OC0VkOYf"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=nVZ0ompN"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/gbwZF3m15-Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/8466960976231652072/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/07/firebug-net-panel-history-overlay.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8466960976231652072?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8466960976231652072?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/gbwZF3m15-Y/firebug-net-panel-history-overlay.html" title="Firebug Net Panel History Overlay version 0.3.0" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/07/firebug-net-panel-history-overlay.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEAQ38_cCp7ImA9WxdWEUQ.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-8746724895211850231</id><published>2008-07-04T18:18:00.003+01:00</published><updated>2008-07-04T18:30:42.148+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-04T18:30:42.148+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><title>Setup Data-Driven Tests in Visual Studio to use Excel</title><content type="html">I prefer simplicity of Excel files for my data-driven unit tests in Visual Studio - both 2005 and 2008. However the new test data source wizard is not supporting Excel files so the connection has to be setup manually.&lt;br /&gt;It is not too hard to set it up, all that is required is addition of &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.datasourceattribute.aspx"&gt;DataSourceAttribute&lt;/a&gt; to your test method:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(102, 102, 102); overflow: auto;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;[TestMethod]&lt;br /&gt;[DeploymentItem("testData.xls")]&lt;br /&gt;[DataSource(“System.Data.Odbc”,&lt;br /&gt;@”Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=testData.xls;DefaultDir=.”,&lt;br /&gt;“Sheet1$”, DataAccessMethod.Sequential)]&lt;br /&gt;&lt;br /&gt;public void SomeTest(){&lt;br /&gt; //some testing&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.webtesting.deploymentitemattribute.aspx"&gt;DeploymentItemAttribute &lt;/a&gt;is there so testData.xls file would be deployed with the test and thus make the test independent of a machine on which it is run. More about using Excel to drive your unit tests with some tips you can find here: &lt;a href="http://blog.decaresystems.ie/index.php/2008/07/01/data-driven-unit-testing-and-excel-in-visual-studio/"&gt;Data-Driven Unit Testing using Excel in Visual Studio&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-8746724895211850231?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=xrqUVf2W"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=sAS9ukMq"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=sAS9ukMq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=h3VWYBTq"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=h3VWYBTq" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=ydcdbjsx"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=SpdAYbRx"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=SpdAYbRx" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=InRKJKAA"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=cCManYrW"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/R8flYXt2b5g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/8746724895211850231/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/07/setup-data-driven-tests-in-visual.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8746724895211850231?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8746724895211850231?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/R8flYXt2b5g/setup-data-driven-tests-in-visual.html" title="Setup Data-Driven Tests in Visual Studio to use Excel" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/07/setup-data-driven-tests-in-visual.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHSHcyeip7ImA9WxdXFkQ.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-9096702964363961944</id><published>2008-06-28T15:57:00.009+01:00</published><updated>2008-06-28T23:22:19.992+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-28T23:22:19.992+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Book review" /><category scheme="http://www.blogger.com/atom/ns#" term="Agile" /><title>Inspired by a book: Planning Extreme Programming</title><content type="html">I have just finished reading the book: &lt;a href="http://www.amazon.com/gp/product/0201710919?ie=UTF8&amp;amp;tag=nevermindthet-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0201710919"&gt;Planning Extreme Programming (The XP Series)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=nevermindthet-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0201710919" alt="" style="border: medium none  ! important; margin: 0px ! important;" border="0" height="1" width="1" /&gt; and I have to say I found it brilliant. I read it in a day and could not put it down until I finally finished it around 3 am.&lt;br /&gt;First of all the book is short, some 160 pages long, and that is very good! Simply everything is up to the point, you would not want to take anything out. It is concise, understandable, written in easy to follow language. Every paragraph brings some new value. And at the end it does not have ton of useless code examples, it does not have much of the examples though, but they were enough for me and most possibly any more would just be a distraction.&lt;br /&gt;I strongly believe that any book should not be more then 200 or so pages long. Everything longer just puts me off. It is likely I won't have time to read it in continuation and at the end I won't know what I read in the beginning or at least how the things I'm reading now relate to the things I read two weeks ago. I like the &lt;a href="http://www.martinfowler.com/bliki/DuplexBook.html"&gt;Duplex Book&lt;/a&gt; idea, maybe that is why I enjoy reading Martin Fowler's books, it is like they are just the right size (or is it the content ;) )&lt;br /&gt;&lt;br /&gt;Let me get back to the book. Even though the book is mostly project manager oriented developers should definitely read it. Sometimes I have difficulties explaining what is wrong with the process to our managers. Sometimes it is just a kind of a gut feeling, however you need far more solid arguments if you want to challenge some decisions regarding your project/process/whatever.  The book nicely explains what the agile is all about and now I can safely say that I can easily explain to anyone why something is not agile or something is, and suggest improvements. And that alone is why it is worth reading.&lt;br /&gt;One thing developer will definitely like is chapter about estimates. It just hits the spot. I recognized all the problems I had with my estimates (well more with project managers to be honest) and now I have a working plan how to improve my estimates even when not working on agile projects. And the advice to stop using the phrase: "I don't have enough time" with the phrase "I have too much to do" is simply brilliant, and what is more important it is usually more accurate.&lt;br /&gt;&lt;br /&gt;So what have I learned from this book? The key to agile development is communication with the customer. If there is no proper and timely communication with the customer, if the customer is most of the time unavailable for clarifications regarding the functionality, you can't do agile. Without this key ingredient agile is not possible. The second key to agile is response to customer changes - the customer has the right and will change his mind and we should enable him to do so.&lt;br /&gt;What the book also points is that all projects are different and what worked for one might not work for another one. So I guess being flexible when it comes to the process is a must. If something works for your project then use it, don't just blindly follow the process.&lt;br /&gt;&lt;br /&gt;What you might notice I did not mention technology, testing, frequent releases, stand-up meetings or pair programming in the key elements? Your technology and practices should be determined by your  project and your process, not vice verse. While it is very questionable if you can build software of decent quality without proper unit tests you might very well do without stand-up meetings and pair programming. At the end of the day use what works for you, don't force something that is not going to fit. Being agile should be company's strategy it is not a matter of simply coming and saying: great lets go agile.&lt;br /&gt;&lt;br /&gt;Read the book, you'll feel better. I found what mistakes I made and what problems I might have prevented if I had educated arguments. It adds great value in couple of days reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-9096702964363961944?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=zTk3wrZl"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=A7GrhrY0"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=A7GrhrY0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=Scx6al7i"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=Scx6al7i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=UBTlv9ls"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=mLc3dwln"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=mLc3dwln" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=eSgFA4RR"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=NSdNHxwZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/BDWZbrUoix4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/9096702964363961944/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/06/inspired-by-book-planning-extreme.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/9096702964363961944?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/9096702964363961944?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/BDWZbrUoix4/inspired-by-book-planning-extreme.html" title="Inspired by a book: Planning Extreme Programming" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/06/inspired-by-book-planning-extreme.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIERXY7eyp7ImA9WxdWFEs.&quot;"><id>tag:blogger.com,1999:blog-8701140473288307662.post-8870986728837512488</id><published>2008-06-22T23:42:00.005+01:00</published><updated>2008-07-07T21:28:24.803+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-07T21:28:24.803+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="JSUnit" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>Make JSUnit work in Firefox 3.0</title><content type="html">I lost hours figuring out this one. I was getting an error: Permission denied to get property Window.xbDEBUG, and eventually getting timeout on running my test page. The first error was happening on different lines of code while I was debugging in Firebug. At the end it was probably some concurrency issue, timeout was happening due to &lt;a href="http://www.jsunit.net/"&gt;JSUnit &lt;/a&gt;test runner not being able to load my test file.&lt;br /&gt;Now, of course I checked if the file exists, and it did exist. I figured out that it cannot load file since it is stuck in function: isPageLoaded in testContainerController.html. Why? At the end I found an answer in an unlikely place: &lt;a href="http://siliconforks.com/jscoverage/faq.html"&gt;Why doesn't my test suite run under JSCoverage in Firefox 3&lt;/a&gt;?&lt;br /&gt;The problem is in the tightened Firefox security regarding local files, and security.fileuri.origin_policy parameter is not the correct one as suggested by the FAQ, it is new configuration parameter that superseded it:&lt;br /&gt;&lt;a href="http://kb.mozillazine.org/Security.fileuri.strict_origin_policy"&gt;Security.fileuri.strict_origin_policy&lt;/a&gt;, it should be set to false so JSUnit will run correctly. The article is mumbling something about suggesting to keep it true for the improved security sake, but I'm too tired of banging my head of the wall to really pay attention.&lt;br /&gt;&lt;br /&gt;*** UPDATE ***&lt;br /&gt;I just realised that the version of JSUnit I'm using ( 2.2alpha11 ) is not working correctly when you brows for the test page. I am getting an error:&lt;br /&gt;Reading Test Page file:///someTest.html timed out.&lt;br /&gt;Make sure that the file exists and is a Test Page.&lt;br /&gt;The page does not exist since I browsed to a different file - file:///c:\temp\someTest.html. So there is a bug with loading page.&lt;br /&gt;However it works if I supply the test page through testPage url parameter like this:&lt;br /&gt;file:///.../testRunner.html?testpage=c:/temp/someTest.html&lt;br /&gt;If the tests were not working after fixing the configuration then this might be the next thing to try out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8701140473288307662-8870986728837512488?l=digitalmihailo.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=zNiN9YdR"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=41" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=Mj8USRQE"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=Mj8USRQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=AFN1CLhC"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=AFN1CLhC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=vKcIHuwF"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=43" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=A76yPTQo"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?i=A76yPTQo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=kaH3bcvq"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=54" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?a=LD7jIgpW"&gt;&lt;img src="http://feeds.feedburner.com/~f/blogspot/digitalmihailo?d=45" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/digitalmihailo/~4/fw9x0eDKg_Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://digitalmihailo.blogspot.com/feeds/8870986728837512488/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://digitalmihailo.blogspot.com/2008/06/make-jsunit-work-in-firefox-30.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8870986728837512488?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8701140473288307662/posts/default/8870986728837512488?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/digitalmihailo/~3/fw9x0eDKg_Y/make-jsunit-work-in-firefox-30.html" title="Make JSUnit work in Firefox 3.0" /><author><name>Mihailo Lalevic</name><uri>http://www.blogger.com/profile/12483199537802588561</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="02507463482837725635" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total><feedburner:origLink>http://digitalmihailo.blogspot.com/2008/06/make-jsunit-work-in-firefox-30.html</feedburner:origLink></entry></feed>
