<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jasper Rooswinkel</title>
	<atom:link href="http://www.jasperrooswinkel.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jasperrooswinkel.com</link>
	<description>Home of Jasper Rooswinkel</description>
	<lastBuildDate>Thu, 22 Dec 2011 16:39:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>Pushing a footer in HTML and CSS</title>
		<link>http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/</link>
		<comments>http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 15:21:44 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[footer]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=248</guid>
		<description><![CDATA[Although it seems a trivial thing, stretching a page to position the footer always at the bottom of the page is not obvious in HTML. Of course, we could easily position a footer by absolute or fixed positioning (which, completely off-topic, doesn&#8217;t work on an iPad btw), but this is not the same thing. What we would like to achieve is the footer being displayed at the bottom of the browser window, if all content fits on one page, while [...]]]></description>
			<content:encoded><![CDATA[<p>Although it seems a trivial thing, stretching a page to position the footer always at the bottom of the page is not obvious in HTML. Of course, we could easily position a footer by absolute or fixed positioning (which, completely off-topic, doesn&#8217;t work on an iPad btw), but this is not the same thing.</p>
<p>What we would like to achieve is the footer being displayed at the bottom of the browser window, if all content fits on one page, while being pushed off screen when the content exceeds the page fold. For this we have to use negative margins.</p>
<p><a title="Footer example" href="http://www.jasperrooswinkel.com/examples/footer-push/">Click here to see an example</a></p>
<p>First, make sure you wrap the footer in your HTML separately from the content of the page and add an extra div at the end of the content part. This div will take care of filling the space that is used by the footer. The following structure would work:</p>
<pre class="brush: xml;">
&lt;body&gt;
	&lt;div id=&quot;page_wrapper&quot;&gt;
		&lt;div id=&quot;content&quot;&gt;
			&lt;strong&gt;This is the content&lt;/strong&gt;
		&lt;/div&gt;
		&lt;div id=&quot;fillspace&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
	&lt;div id=&quot;footer_wrapper&quot;&gt;
		&lt;strong&gt;This is the footer&lt;/strong&gt;
	&lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Now, in your stylesheet, give the <em>page wrapper</em> a height of 100%. This will make sure that the content uses all available vertical space of your browser window. And here comes the sweet part: When combining this with a <em>negative bottom margin</em> that equals the height of the footer, your content area will &#8220;pull&#8221; the footer upwards, displaying it at the bottom of the area. A big hurray for negative margins:</p>
<pre class="brush: css;">
html {
	height:100%;
}

body {
	height:100%;
}

#page_wrapper {
	min-height:100%;
	height:auto !important;
	height:100%;
	margin:0 auto -100px auto; /* -100 is the negative footer height */
}

#content {
}

#footer_wrapper {
	width:100%;
	height:100px;
	background-color:#A62F00;
	color:#ffffff;
}

#fillspace {
	height:100px;
}
</pre>
<p>Finally, set the fillspace div to the same height as your footer. This will compensate for the negative margin for the content part of your page. If you&#8217;d leave this out, the content would interfere with your footer. Instead it&#8217;s being filled with a big nothing, exactly the size of your footer.</p>
<p>If you have visual columns (or some other kind of background) in your <em>page wrapper</em>, you could add them to the html-part of your CSS to create faux columns.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Pushing+a+footer+in+HTML+and+CSS+-+http://bit.ly/hNszgF&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/&amp;t=Pushing+a+footer+in+HTML+and+CSS" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/&amp;title=Pushing+a+footer+in+HTML+and+CSS&amp;summary=Although%20it%20seems%20a%20trivial%20thing%2C%20stretching%20a%20page%20to%20position%20the%20footer%20always%20at%20the%20bottom%20of%20the%20page%20is%20not%20obvious%20in%20HTML.%20Of%20course%2C%20we%20could%20easily%20position%20a%20footer%20by%20absolute%20or%20fixed%20positioning%20%28which%2C%20completely%20off-topic%2C%20doesn%27t%20work%20on%20an%20iPad%20btw%29%2C%20but%20this%20is%20not%20the%20same%20thin&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/&amp;title=Pushing+a+footer+in+HTML+and+CSS" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/&amp;title=Pushing+a+footer+in+HTML+and+CSS" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/&amp;title=Pushing+a+footer+in+HTML+and+CSS" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/&amp;title=Pushing+a+footer+in+HTML+and+CSS&amp;desc=Although%20it%20seems%20a%20trivial%20thing%2C%20stretching%20a%20page%20to%20position%20the%20footer%20always%20at%20the%20bottom%20of%20the%20page%20is%20not%20obvious%20in%20HTML.%20Of%20course%2C%20we%20could%20easily%20position%20a%20footer%20by%20absolute%20or%20fixed%20positioning%20%28which%2C%20completely%20off-topic%2C%20doesn%27t%20work%20on%20an%20iPad%20btw%29%2C%20but%20this%20is%20not%20the%20same%20thin" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/&amp;title=Pushing+a+footer+in+HTML+and+CSS" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/pushing-a-footer-in-html-and-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collapsable form sections in jQuery</title>
		<link>http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/</link>
		<comments>http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 18:50:19 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[checkbox]]></category>
		<category><![CDATA[CMS MS]]></category>
		<category><![CDATA[hide]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[show]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=241</guid>
		<description><![CDATA[I recently scripted a (very) easy solution to collapse part of a form, based on the state of a checkbox. The goal was to apply it to a form built using the Formbuilder module for CMS Made Simple, which was the main reason to keep it as simple as possible. It should fit nicely into the CMS Formbuilder back-end interface as I didn&#8217;t want to tweak this module (for more than one reason). The final solution is obvious &#8211; just [...]]]></description>
			<content:encoded><![CDATA[<p>I recently scripted a (very) easy solution to collapse part of a form, based on the state of a checkbox. The goal was to apply it to a form built using the <a title="Formbuilder" href="http://dev.cmsmadesimple.org/projects/formbuilder/" target="_blank">Formbuilder module for CMS Made Simple</a>, which was the main reason to keep it as simple as possible. It should fit nicely into the CMS Formbuilder back-end interface as I didn&#8217;t want to tweak this module (for more than one reason). The final solution is obvious &#8211; just the way I like it &#8211; and can be applied to any form, without interfering with&#8230; anything.</p>
<p>First, the following javascript should be included your source:</p>
<pre class="brush: jscript;">
function show_hide_section(section,checkbox)
{
	if ($(&quot;#&quot;+checkbox).is(':checked'))
	{
		$(section).show(&quot;slow&quot;);
	}
	else
	{
		$(section).hide(&quot;slow&quot;);
	}
}
</pre>
<p>To make this tiny piece of code work, be sure to include any version of jQuery as well using your favourite source, for example like this:</p>
<pre class="brush: xml;">
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Now, all that&#8217;s left to do is to call the <em>show_hide_section</em> function as soon as the checkbox is clicked, passing the section that should be shown or hidden. Let&#8217;s assume we have a section <em>field_address</em> (in which all involved <em>divs</em> have been given the class &#8220;field_address&#8221;):</p>
<pre class="brush: xml;">
&lt;input type=&quot;checkbox&quot; name=&quot;my_checkbox&quot; onclick='show_hide_section(&quot;.field_address&quot;,this.id)' id=&quot;my_checkbox&quot; /&gt;
&lt;label&gt;Yes, I have an address&lt;/label&gt;
</pre>
<p>By clicking the checkbox, the <em>field_address</em> class will be shown (if currently hidden) or hidden (if currently shown). A div-section containing the input fields will, obviously, look like this:</p>
<pre class="brush: xml;">
&lt;div class=&quot;field_address&quot;&gt;
Street:&lt;input type=&quot;text&quot; name=&quot;street&quot;&gt;
Postal code:&lt;input type=&quot;text&quot; name=&quot;postalcode&quot;&gt;
...
&lt;/div&gt;
</pre>
<p>Click <a title="Minds Interactive offerte" href="http://www.mindsinteractive.eu/offerte" target="_blank">here</a> to the end result in a live website. That&#8217;s all there is to it.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Collapsable+form+sections+in+jQuery+-+http://b2l.me/azet9n&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/&amp;t=Collapsable+form+sections+in+jQuery" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/&amp;title=Collapsable+form+sections+in+jQuery&amp;summary=I%20recently%20scripted%20a%20%28very%29%20easy%20solution%20to%20collapse%20part%20of%20a%20form%2C%20based%20on%20the%20state%20of%20a%20checkbox.%20The%20goal%20was%20to%20apply%20it%20to%20a%20form%20built%20using%20the%20Formbuilder%20module%20for%20CMS%20Made%20Simple%2C%20which%20was%20the%20main%20reason%20to%20keep%20it%20as%20simple%20as%20possible.%20It%20should%20fit%20nicely%20into%20the%20CMS%20Formbuilde&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/&amp;title=Collapsable+form+sections+in+jQuery" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/&amp;title=Collapsable+form+sections+in+jQuery" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/&amp;title=Collapsable+form+sections+in+jQuery" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/&amp;title=Collapsable+form+sections+in+jQuery&amp;desc=I%20recently%20scripted%20a%20%28very%29%20easy%20solution%20to%20collapse%20part%20of%20a%20form%2C%20based%20on%20the%20state%20of%20a%20checkbox.%20The%20goal%20was%20to%20apply%20it%20to%20a%20form%20built%20using%20the%20Formbuilder%20module%20for%20CMS%20Made%20Simple%2C%20which%20was%20the%20main%20reason%20to%20keep%20it%20as%20simple%20as%20possible.%20It%20should%20fit%20nicely%20into%20the%20CMS%20Formbuilde" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/&amp;title=Collapsable+form+sections+in+jQuery" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/collapsable-form-sections-in-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>From Mac Mail to mailing list</title>
		<link>http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/</link>
		<comments>http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 15:49:55 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Address book]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[mailing list]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=227</guid>
		<description><![CDATA[We decided it was time to update our mailing list with e-mail addresses of people that we did business with over the last years. Although we don&#8217;t use Mac Mail anymore &#8211; we have switched to Google Apps Premier -, I still have a lot of mails (and therefor addresses) stored in Mail. Exporting these addresses as .csv and importing them in my mailing software should be easy, I thought. However, this turned out not to be a standard scenario. [...]]]></description>
			<content:encoded><![CDATA[<p>We decided it was time to update our mailing list with e-mail addresses of people that we did business with over the last years. Although we don&#8217;t use Mac Mail anymore &#8211; we have switched to Google Apps Premier -, I still have a lot of mails (and therefor addresses) stored in Mail. Exporting these addresses as .csv and importing them in my mailing software should be easy, I thought. However, this turned out not to be a standard scenario.</p>
<p>Mail does not support the exporting of addresses to .csv format. Then, I figured by exporting my addresses from Mail into Address book, I would be able to extract them as .csv and store them in a spreadsheet for uploading to my E-mail Marketing software. Wrong again, because Address book doesn&#8217;t support such an export either. With the right tools it&#8217;s doable, however. Reason enough to write the procedure down for future reference.</p>
<h2>Exporting addresses from mail to Address book</h2>
<p>For exporting all the people you&#8217;ve addressed in Mail to your Address book application, open Mail and go to &#8220;Window&#8221; -&gt; &#8220;Previous Recipients&#8221;. If you&#8217;re only doing this for the purpose of creating a .csv file, you probably want to archive your existing Address book first to restore it later (deleting the addresses you&#8217;re going to add in the next step&#8230;). Select all addresses and click the bottom right button to copy them to Address book.</p>
<div id="attachment_228" class="wp-caption aligncenter" style="width: 513px"><a href="../wp-content/uploads/2010/10/addresbook-exporter.png"><img class="size-full wp-image-228" title="Address Book Exporter" src="../wp-content/uploads/2010/10/addresbook-exporter.png" alt="Address Book Exporter" width="503" height="277" /></a><br />
<p class="wp-caption-text">Address Book Exporter</p></div>
<h2>Creating a .csv file from Address book</h2>
<p>Because Address book doesn&#8217;t support .csv export, you should download the free <a title="Address book exporter" href="http://www.macupdate.com/info.php/id/9312/address-book-exporter" target="_blank">Address Book Exporter</a>. This is a cute little tool for exporting your Address book to .csv format (or other formats like Outlook or Yahoo &#8211; although I can&#8217;t think of a <em>good</em> reason why you would want this <img src='http://www.jasperrooswinkel.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ). Typically the kind of tool you&#8217;ve never heard of until you need it. Anyway, by clicking <em>Configure Settings</em> you can even choose which fields you&#8217;d like to export (you probably don&#8217;t need them all for your mailing list). After this click <em>Export Address Book</em> and you&#8217;ve just saved yourself hours of typing.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=From+Mac+Mail+to+mailing+list+-+http://b2l.me/ayz2af&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/&amp;t=From+Mac+Mail+to+mailing+list" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/&amp;title=From+Mac+Mail+to+mailing+list&amp;summary=We%20decided%20it%20was%20time%20to%20update%20our%20mailing%20list%20with%20e-mail%20addresses%20of%20people%20that%20we%20did%20business%20with%20over%20the%20last%20years.%20Although%20we%20don%27t%20use%20Mac%20Mail%20anymore%20-%20we%20have%20switched%20to%20Google%20Apps%20Premier%20-%2C%20I%20still%20have%20a%20lot%20of%20mails%20%28and%20therefor%20addresses%29%20stored%20in%20Mail.%20Exporting%20these%20ad&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/&amp;title=From+Mac+Mail+to+mailing+list" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/&amp;title=From+Mac+Mail+to+mailing+list" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/&amp;title=From+Mac+Mail+to+mailing+list" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/&amp;title=From+Mac+Mail+to+mailing+list&amp;desc=We%20decided%20it%20was%20time%20to%20update%20our%20mailing%20list%20with%20e-mail%20addresses%20of%20people%20that%20we%20did%20business%20with%20over%20the%20last%20years.%20Although%20we%20don%27t%20use%20Mac%20Mail%20anymore%20-%20we%20have%20switched%20to%20Google%20Apps%20Premier%20-%2C%20I%20still%20have%20a%20lot%20of%20mails%20%28and%20therefor%20addresses%29%20stored%20in%20Mail.%20Exporting%20these%20ad" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/&amp;title=From+Mac+Mail+to+mailing+list" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/from-mac-mail-to-mailing-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook OAuth 2.0 via Graph API using PHP and Zend</title>
		<link>http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/</link>
		<comments>http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 12:40:05 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[graphi api]]></category>
		<category><![CDATA[oauth]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=183</guid>
		<description><![CDATA[Recently I added OAuth authentication and some Facebook Graph API calls to Vizited for connecting users to their Facebook accounts, allowing them to share their public bookmarks through Facebook. If you have ever tried implementing OAuth, you&#8217;ve probably discovered that it&#8217;s quite a challenge the first time. It takes some reading and experimenting before it starts to make sense. Probably because the process exists of some steps (requests) that are a little bit confusing in the beginning. I&#8217;m a huge [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I added OAuth authentication and some Facebook Graph API calls to <a title="Vizited - Your bookmarks made izi" href="http://www.vizited.com/" target="_blank">Vizited</a> for connecting users to their Facebook accounts, allowing them to share their public bookmarks through Facebook. If you have ever tried implementing OAuth, you&#8217;ve probably discovered that it&#8217;s quite a challenge the first time. It takes some reading and experimenting before it starts to make sense. Probably because the process exists of some steps (requests) that are a little bit confusing in the beginning.</p>
<p>I&#8217;m a huge fan of the Zend Framework which didn&#8217;t make the task easier, because there are not a lot of examples available. I love Zend because it makes the PHP-part of my life a lot more fun and, besides this, Vizited is developed in Zend and I wanted to fit the OAuth thingy nicely in. In this article I will explain my approach which will hopefully help others that are struggling with the same idea. The principles in this article can easily be applied without Zend Framework as well.</p>
<p>Unfortunately I don&#8217;t have a Zend installation on this blog (yet), so I didn&#8217;t create a fully working example. I will show you the essential parts of the code I developed for Vizited and assure you it works. You can test it yourself by creating a free account on <a title="Vizited - Your bookmarks made izi" href="http://www.vizited.com/" target="_blank">Vizited</a> and linking it to Facebook (or Twitter or LinkedIn, which basically use the same technology for authentication). I&#8217;m happy to answer any questions you may have, just put them in the comments.</p>
<p>One other thing before you continue reading this: this tutorial is probably not fit for beginners. I&#8217;ll assume you have significant knowledge of PHP, Zend and maybe some Javascript, because it will be too much work to explain everything in full detail.</p>
<h2>Creating a Facebook Application and updating the Zend application.ini</h2>
<p>You should start by creating a <a title="Create a Facebook Application" href="http://developers.facebook.com/setup/" target="_blank">Facebook Application</a>. There&#8217;s a lot of information available online on how to do this. Although you may not be developing an application that will be displayed &#8220;widget-style&#8221; on a user&#8217;s Facebook account, you&#8217;ll still need an application for Graph API calls and the OAuth authentication flow.</p>
<p>After you&#8217;ve finished setting up the application in Facebook, you should end up with a <em>client_id </em>and a <em>client_secret</em> (which can be retrieved from the <em>Web Site</em> tab of your application configuration). These we will add to the <em>application.ini</em> in Zend, together with a callback URI, like this:</p>
<pre class="brush: php;">

facebook.client_id = &quot;&lt;your client id&gt;&quot;
facebook.client_secret = &quot;&lt;your client secret&gt;&quot;
facebook.redirect_uri = &quot;http://www.&lt;your domain&gt;.com/social/facebookcb/&quot;
</pre>
<p>For easy reference, I have the (good?) habit to add application.ini settings to my Zend Registry in my Bootstrap.php, like this:</p>
<pre class="brush: php;">

protected function _initConfig() {

	$aConfig    = $this-&gt;getOptions();
	Zend_Registry::set('facebook_client_id', $aConfig['facebook']['client_id']);
	Zend_Registry::set('facebook_client_secret', $aConfig['facebook']['client_secret']);
	Zend_Registry::set('facebook_redirect_uri', $aConfig['facebook']['redirect_uri']);

}
</pre>
<p>Now you&#8217;ll be able to very conveniently reference the attributes like this <em>Zend_Registry::get(&#8216;facebook_client_id&#8217;).</em></p>
<h2>Requesting authentication and authorization</h2>
<p>Authentication and authorization with Facebook exists of several steps, that are described <a title="Authentication with Facebook" href="http://developers.facebook.com/docs/authentication/" target="_blank">here</a>. To implement these steps, we have to create a controller in Zend that contains the necessary actions. As you could see in the <em>redirect_uri</em> in the <em>application.ini</em>, our controller is called <em>socialController</em>.</p>
<p>This controller has two main actions: <em>facebookauthAction</em> and <em>facebookcbAction</em>. The first one will start the authentication and authorization flow and handle the first redirect, the second one will handle the callback from Facebook. This is the code for starting the flow:</p>
<pre class="brush: php;">

public function facebookauthAction()
{
	$this-&gt;_helper-&gt;viewRenderer-&gt;setNoRender(true);

	if ($userid = Zend_Auth::getInstance()-&gt;getIdentity()-&gt;id)
	{
		// Get a Facebook authorization for the publish_stream and offline_access
		$url = 'https://graph.facebook.com/oauth/authorize?client_id=' .
			Zend_Registry::get('facebook_client_id') .
			'&amp;redirect_uri=' .
			Zend_Registry::get('facebook_redirect_uri') .
			'&amp;scope=publish_stream,offline_access';

			// Return URL that should be used for redirection in Javascript
			die (&quot;1|$url&quot;);
		}
		else
		{
			// No user logged in
			die (&quot;0|Please login first&quot;);
		}
	}
}
</pre>
<p>Line 8 is the most important one, this is were the URL is compiled. It uses the application.ini settings together with the <em>scope</em> parameter. Make sure you select the right scope for your purpose! The option <em>publish_stream</em> will allow you to post to the stream of a user, <em>offline_access</em> will allow you to do this, even if the user is logged out from Facebook. Details can be found on <a title="Permissions" href="http://developers.facebook.com/docs/authentication/permissions" target="_blank">this page</a>.</p>
<p>Less important, in my code I will only redirect the user if he&#8217;s already logged in to the local application (in this case Vizited), else I will ask him to login first. Line 5 takes care of this. Of course this is not required for Facebook.</p>
<p>In line 3 of this code, I turn off the rendering of the view for this action. The reason for this is that I call this action asynchronously from Javascript and I want the result to be returned to the script as well. The returned URL which is created in line 8 should be used to redirect the browser. I do it like this in my Javascript:</p>
<pre class="brush: jscript;">

// Out of context! jQuery is used to call the facebookauth action
...
$.get('/social/facebookauth/', getFacebookAuthReady);
...

function getFacebookAuthReady(response) {

	var ar_response = response.split(&quot;|&quot;);
	var responseCode = ar_response[0];
	var responseText = ar_response[1];

	if (responseCode == 1)
 	{
		// Go to URL for Facebook Authorization
 		window.location.href=responseText;
 	}
 	else
 	{
 		// Show error
		...
 	}
}
</pre>
<p>Basically, it doesn&#8217;t matter how you redirect to this URL (you could do this in your view or by using the redirect feature of Zend). I do it this way because I want to display an error to the user if he or she is not logged in. I hope this makes sense.</p>
<p>After you&#8217;ve implemented this code, you can test this action by entering <em>www.yourdomain.com/social/facebookauth/</em> in your browser which should direct you to Facebook, asking you to authorize your application.</p>
<h2>Handling the callback</h2>
<p>After the redirect to <em>graph.facebook.com/oauth/authorize </em>Facebook will ask the user to login (if not already logged in to Facebook) and to give the requesting application (your application!) permission to his or her account. Next, Facebook will redirect back to the <em>redirect_uri</em>. In our case, this is the <em>facebookcbAction</em> of the <em>socialController</em>. More specifically:</p>
<pre class="brush: php;">

public function facebookcbAction()
{
	$request = $this-&gt;getRequest();
	$params = $request-&gt;getParams();

	if (isset($params['code']))
	{
		// This is the callback from Facebook, get the code parameter
		$code = $params['code'];

		$url = 'https://graph.facebook.com/oauth/access_token';
		$arpost = array(
			'client_id' =&gt; Zend_Registry::get('facebook_client_id'),
			'redirect_uri' =&gt; Zend_Registry::get('facebook_redirect_uri'),
			'client_secret' =&gt; Zend_Registry::get('facebook_client_secret'),
			'code' =&gt; $code);

		// Now request the access_token
		$result = $this-&gt;requestFacebookAPI_GET($url,$arpost);

		if ($result === FALSE)
		{
			// Redirect to error page
			...
		}
		else
		{
			parse_str($result, $arresult);

			// Use the access_token to retrieve the user's profile
			$url = 'https://graph.facebook.com/me';
			$arpost = array('access_token' =&gt; $arresult['access_token']);

			$result = $this-&gt;requestFacebookAPI_GET($url,$arpost);

			if ($result === FALSE)
			{
				// Redirect to error page
				...
			}
			else
			{
				$arprofile = json_decode($result,true);

				$data = array(
					'id' =&gt; Zend_Auth::getInstance()-&gt;getIdentity()-&gt;id,
					'facebook_access_token' =&gt; $arresult['access_token'],
					'facebook_name' =&gt; $arprofile['name'],
					'facebook_id' =&gt;  $arprofile['id']
				);

				// Save this array in the database as part of the user profile
				// Redirect to success page
				....
			}
		}
	}
}
</pre>
<p>In line 6, we start with checking if the parameter <em>code</em> is returned by Facebook. This code should be exchanged for an <em>OAuth access token</em> for this user and without it we&#8217;re lost. The access token is the key to all the Graph requests we want to perform on behalve of this user. To exchange the code for the access token, we generate a new GET request for which we use the private method <em>requestFacebookAPI_GET</em> with the parameters as defined in line 12.</p>
<p>The homebrew <em>requestFacebookAPI_GET</em> method performs a cURL HTTP request and looks like this:</p>
<pre class="brush: php;">

private function requestFacebookAPI_GET($url, $arpost) {

	//
	// Create a cURL request to Facebook
	//
	$ch = curl_init();

	curl_setopt($ch, CURLOPT_URL, $url . &quot;?&quot; . http_build_query($arpost));
	curl_setopt($ch, CURLOPT_POST, false);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

	$result = curl_exec($ch);
	curl_close($ch);

   	return $result;

}
</pre>
<p>The result that is returned from this function is parsed after which we have the access token. In line 32 to 34 we use this access token to perform our first Facebook request that actually requires an access token (getting the users profile). The JSON result is then parsed and stored in an array, together with the access token, which you can save to your database for future use.</p>
<h2>Publish to the feed/wall of a user</h2>
<p>If you decided to obtain <em>publish_stream</em> rights in the authorization step, and the user allowed this, you will be able to publish messages to the user&#8217;s feed. I will show you a quick example on how to do this.</p>
<p>First, we&#8217;ll need to tweak the <em>requestFacebookAPI_GET</em> to <em>POST</em> instead of <em>GET</em> (trust me, this is not very obvious if you&#8217;re trying to figure this out without the right info, until you find <a title="POST to Facebook" href="http://developers.facebook.com/docs/reference/api/post" target="_blank">this page</a>):</p>
<pre class="brush: php;">

private function requestFacebookAPI_POST($url, $arpost) {

	//
	// Create a cURL request to Facebook
	//
	$ch = curl_init();

	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($arpost));
	curl_setopt($ch, CURLOPT_POST, true);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

	$result = curl_exec($ch);

	curl_close($ch);

   	return $result;

}
</pre>
<p>There are only tiny differences: <em>CURLOPT_POST</em> is set to <em>true</em> and the <em>CURLOPT_POSTFIELDS</em> are filled instead of the query string, which makes this a POST request. Obviously you could integrate the both in one method, but I decided not to. <img src='http://www.jasperrooswinkel.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  The overall point is that the Facebook Graph API requires part of its access through POST-requests and part through GET-requests.</p>
<p>Now let&#8217;s post something (anything) to the wall:</p>
<pre class="brush: php;">

// Get the access token of the user from the database and
// store it in the $access_token variable
...
$access_token = ...

// Now publish a link to the feed/wall of the user
$fburl = 'https://graph.facebook.com/me/feed';
$arpost = array(
	'link' =&gt; 'http://www.jasperrooswinkel.com/',
	'name' =&gt; 'Jasper Rooswinkel',
	'caption' =&gt; 'Home of Jasper Rooswinkel',
	'description' =&gt; 'This is very nice!',
	'access_token' =&gt; $access_token
);

$result = $this-&gt;requestFacebookAPI_POST($fburl,$arpost);
</pre>
<p>The result should appear on the wall of the user almost instantly. If not: verify your code, this is tricky and you should test it with simple content. If yes: great success! Btw. it&#8217;s a good idea to create a test account on Facebook before testing this on actual users, because all your friends will see the new posts.</p>
<p>That&#8217;s it for now. I hope this helps! <img src='http://www.jasperrooswinkel.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Facebook+OAuth+2.0+via+Graph+API+using+PHP+and+Zend+-+http://b2l.me/ax62va&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/&amp;t=Facebook+OAuth+2.0+via+Graph+API+using+PHP+and+Zend" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/&amp;title=Facebook+OAuth+2.0+via+Graph+API+using+PHP+and+Zend&amp;summary=Recently%20I%20added%20OAuth%20authentication%20and%20some%20Facebook%20Graph%20API%20calls%20to%20Vizited%20for%20connecting%20users%20to%20their%20Facebook%20accounts%2C%20allowing%20them%20to%20share%20their%20public%20bookmarks%20through%20Facebook.%20If%20you%20have%20ever%20tried%20implementing%20OAuth%2C%20you%27ve%20probably%20discovered%20that%20it%27s%20quite%20a%20challenge%20the%20fi&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/&amp;title=Facebook+OAuth+2.0+via+Graph+API+using+PHP+and+Zend" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/&amp;title=Facebook+OAuth+2.0+via+Graph+API+using+PHP+and+Zend" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/&amp;title=Facebook+OAuth+2.0+via+Graph+API+using+PHP+and+Zend" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/&amp;title=Facebook+OAuth+2.0+via+Graph+API+using+PHP+and+Zend&amp;desc=Recently%20I%20added%20OAuth%20authentication%20and%20some%20Facebook%20Graph%20API%20calls%20to%20Vizited%20for%20connecting%20users%20to%20their%20Facebook%20accounts%2C%20allowing%20them%20to%20share%20their%20public%20bookmarks%20through%20Facebook.%20If%20you%20have%20ever%20tried%20implementing%20OAuth%2C%20you%27ve%20probably%20discovered%20that%20it%27s%20quite%20a%20challenge%20the%20fi" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/&amp;title=Facebook+OAuth+2.0+via+Graph+API+using+PHP+and+Zend" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/facebook-oauth-20via-graph-api-using-php-and-zend-framework/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Creating an animated GIF using Fireworks in 8 simple steps</title>
		<link>http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/</link>
		<comments>http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/#comments</comments>
		<pubDate>Tue, 05 Oct 2010 16:03:38 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Artwork]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[cs4]]></category>
		<category><![CDATA[fireworks]]></category>
		<category><![CDATA[gif]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=179</guid>
		<description><![CDATA[It doesn&#8217;t get more old school than this: animated GIFs. However, on very rare occasions it&#8217;s the most simple and therefor most cost efficient solution for flicking a few images. Because I&#8217;m creating animated GIFs less than once a year (and today was that day) and I have to refresh my memory every time I do it, I decided to jot down 8 simple steps to creating an animated GIF using Fireworks (CS4). Yabadabadoo! Create a GIF image for each [...]]]></description>
			<content:encoded><![CDATA[<p>It doesn&#8217;t get more old school than this: animated GIFs. However, on very rare occasions it&#8217;s the most simple and therefor most cost efficient solution for flicking a few images. Because I&#8217;m creating animated GIFs less than once a year (and today was that day) and I have to refresh my memory every time I do it, I decided to jot down 8 simple steps to creating an animated GIF using Fireworks (CS4). Yabadabadoo!</p>
<ol>
<li>Create a GIF image for each frame in your animation, all of identical width and height;</li>
<li>Create a new document in Fireworks which has the same width and height;</li>
<li>Drag the first GIF to layer 1;</li>
<li>Add a new &#8220;state&#8221; (menu &#8220;Window&#8221; -&gt; &#8220;States&#8221; if not already in your panel);</li>
<li>Drag the next GIF to layer 1;</li>
<li>Repeat steps 4 and 5 for each frame;</li>
<li>Set the <em>State Delay</em> (the number right to the name of a state) for each state to a not so annoying value and test the animation using the &#8220;Preview&#8221; tab;</li>
<li>Export the result as an Animated GIF using the Export Wizard (menu &#8220;File&#8221;).</li>
</ol>
<p>How simple can it be? Jeeez&#8230; I hope I will remember to look at my blog next time I need this.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Creating+an+animated+GIF+using+Fireworks+in+8+simple+steps+-+http://b2l.me/aw5b9k&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/&amp;t=Creating+an+animated+GIF+using+Fireworks+in+8+simple+steps" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/&amp;title=Creating+an+animated+GIF+using+Fireworks+in+8+simple+steps&amp;summary=It%20doesn%27t%20get%20more%20old%20school%20than%20this%3A%20animated%20GIFs.%20However%2C%20on%20very%20rare%20occasions%20it%27s%20the%20most%20simple%20and%20therefor%20most%20cost%20efficient%20solution%20for%20flicking%20a%20few%20images.%20Because%20I%27m%20creating%20animated%20GIFs%20less%20than%20once%20a%20year%20%28and%20today%20was%20that%20day%29%20and%20I%20have%20to%20refresh%20my%20memory%20every%20t&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/&amp;title=Creating+an+animated+GIF+using+Fireworks+in+8+simple+steps" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/&amp;title=Creating+an+animated+GIF+using+Fireworks+in+8+simple+steps" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/&amp;title=Creating+an+animated+GIF+using+Fireworks+in+8+simple+steps" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/&amp;title=Creating+an+animated+GIF+using+Fireworks+in+8+simple+steps&amp;desc=It%20doesn%27t%20get%20more%20old%20school%20than%20this%3A%20animated%20GIFs.%20However%2C%20on%20very%20rare%20occasions%20it%27s%20the%20most%20simple%20and%20therefor%20most%20cost%20efficient%20solution%20for%20flicking%20a%20few%20images.%20Because%20I%27m%20creating%20animated%20GIFs%20less%20than%20once%20a%20year%20%28and%20today%20was%20that%20day%29%20and%20I%20have%20to%20refresh%20my%20memory%20every%20t" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/&amp;title=Creating+an+animated+GIF+using+Fireworks+in+8+simple+steps" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/creating-an-animated-gif-using-fireworks-in-8-simple-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smooth fullscreen background slideshow in jQuery</title>
		<link>http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/</link>
		<comments>http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 14:33:11 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[fade]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=153</guid>
		<description><![CDATA[After having a look at a variety of fullscreen slideshow effects in jQuery, I figured this could be done smoother (by waiting for images to actually load before displaying them and adding an optional grid) and in only a few lines of code. I use this effect for displaying a slideshow of images on the background of this blog and I cleaned op the code for anyone&#8217;s enjoyment. In this article I will walk through my ideas for anyone who&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>After having  a look at a variety of fullscreen slideshow effects in jQuery, I figured this could be done smoother (by waiting for images to actually load before displaying them and adding an optional grid) and in only a few lines of code. I use this effect for displaying a slideshow of images on the background of this blog and I cleaned op the code for anyone&#8217;s enjoyment. In this article I will walk through my ideas for anyone who&#8217;s interested in using this effect.</p>
<p><a title="Smooth fullscreen background slideshow in jQuery" href="http://www.jasperrooswinkel.com/examples/background-slideshow/" target="_blank">Click here to see the end result</a> | <a title="Download the source" href="/examples/background-slideshow/jquery-background-slideshow-jasperrooswinkel.zip">Click here to download the source</a></p>
<h2>Basic HTML structure</h2>
<p>The goal of this effect is to display the slideshow in the background, without interfering with the actual content of the website. The following document structure will take care of this:</p>
<pre class="brush: xml;">

&lt;body&gt;

&lt;!-- This is the main page --&gt;
&lt;div id=&quot;page_overlay&quot;&gt;
 &lt;div id=&quot;page_content&quot;&gt;
 Actual page content
 &lt;/div&gt;
&lt;/div&gt;

&lt;!-- The container for the description --&gt;
&lt;div id=&quot;image_description&quot;&gt;
 &lt;span id=&quot;image_artist&quot;&gt;&lt;/span&gt;&lt;br/&gt;
 &lt;a id=&quot;image_url&quot;&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;!-- The container for the background-image --&gt;
&lt;img id=&quot;bg&quot; style=&quot;display:none&quot; /&gt;

&lt;!-- The container for the grid on top of the background-image --&gt;
&lt;div id=&quot;bg_grid&quot;&gt;
&lt;/div&gt;

&lt;/body&gt;
</pre>
<p>The page content will be added to the section <em>page_content</em>. This section needs to be on top of the background and the background grid. The background grid (div with id <em>bg_grid</em>, which will contain a transparent .png existing of a single visible pixel and three transparent pixels) is put on top of the background image (img with id <em>bg</em>).</p>
<p>This stack is achieved by using fixed positioning on <em>bg_grid</em> as well as <em>bg</em> and giving <em>bg_grid</em> a higher z-index than <em>bg</em>. Furthermore, <em>page_content</em> needs to be positioned <em>relative</em> to make it float over the background and be flexible enough to contain any content you wish. The following CSS takes care of this all:</p>
<pre class="brush: css;">

#page_content {
 /* Display on top of slideshow */
 position:relative; /* This is very important! */
 z-index:2;
}

img#bg {
 /* Stretch background */
 position:fixed;
 top:0;
 left:0;
 height:100%;
 width:100%;
 z-index:0;
}

#bg_grid {
 position:fixed; /* This is very important! */
 top:0;
 left:0;
 height:100%;
 width:100%;
 background: url(grid.png) repeat;

 /* Display on top of background */
 z-index:1;
}
</pre>
<p>As you can see, the background is stretched simply by setting width and height to 100%. This works beautifully for landscape images, but may be disturbing if your images are portrait. This code will not solve that for you. The grid on top of the image can easily be turned off by deleting the background from <em>#bg_grid</em>.</p>
<h2>Script for fading the background images</h2>
<p>As promised, I will only use a few lines of code to make the magic happen. In the first part of the script, I define three arrays (aImages, aURL, aArtists) that contain the links to the images, the related URLs (that will be displayed in the description) and the related artists (also displayed in the description section). I will leave the array definitions out for now, as you can easily look these lines up in the example code. The core of the functionality is:</p>
<pre class="brush: jscript;">

$(document).ready(function() {

	/* Define the function that triggers to fade in the background */
	$(&quot;img#bg&quot;).load(function()
		{
			/* Fade in during 3 seconds */
			$(&quot;img#bg&quot;).fadeTo(3000,1);

			/* Animate the picture description during 1 second */
			setTimeout(function()
				{
					$(&quot;#image_description&quot;).animate({right: '+=150'}, 1000)
				}, 1000);

			/* Set the timeout to fade out after 10 seconds*/
			setTimeout(function()
				{
					$(&quot;#image_description&quot;).animate({right: '-=150'}, 1000);
					$(&quot;img#bg&quot;).fadeOut(3000);

					/* Load the next image after 4 seconds */
					setTimeout(LoadImages,4000);
				},10000);
 		});

	/* Start the slideshow one second after the page is ready */
	setTimeout(LoadImages,1000);

});

function LoadImage(iNr)
{

	/* Assign the new image to the background */
	$(&quot;img#bg&quot;).attr(&quot;src&quot;, aImages[iNr]);

	/* Assign the artist name to the description */
	$(&quot;#image_artist&quot;).html(aArtists[iNr]);

	/* Assign the image url to the description */
	$(&quot;a#image_url&quot;).attr(&quot;href&quot;, aURL[iNr]);
	$(&quot;a#image_url&quot;).html(&quot;for sale @canvasinabox.com&quot;);

};

function LoadImages()
{

	/* Select a new random image number */
	while(iPrev == iRnd)
	{
		iRnd = Math.floor(Math.random()*aImages.length);
	}

	/* Show the selected image */
	LoadImage(iRnd);

 	iPrev = iRnd;

};
</pre>
<p>To start the fade in, we add a handler with a function to the <em>bg</em> image element. For this we use the <a title="jQuery .load event" href="http://api.jquery.com/load-event/" target="_blank">load</a> event (in line 4) which triggers its handler after the image has been loaded into the browsers memory. This is very important, because the image will most likely not fade in smoothly if it&#8217;s not already loaded or in the browsers cache. The fade in may be half way or already completed before the image is loaded, which we don&#8217;t want. This function will also take care of animating the description and triggering the fade out after 10 seconds.</p>
<p>In line 27 we tell the browser to run <em>LoadImages</em> for the first time, one second after the page is ready. LoadImages (which starts on line 46) selects a random image number and makes sure this is not the same number as the image that was displayed before. It feeds this number to the LoadImage function (line 31) that actually loads the new image (thereby triggering line 4 when ready!).</p>
<p>Finally, the next image is loaded in line 22, four seconds after the fade out was started (which takes three seconds to finish). That&#8217;s all there is to it. Feel free to <a title="Download the source" href="/examples/background-slideshow/jquery-background-slideshow-jasperrooswinkel.zip">download the source</a> and use these ideas for your own projects.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Smooth+fullscreen+background+slideshow+in+jQuery+-+http://b2l.me/awk2mb&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/&amp;t=Smooth+fullscreen+background+slideshow+in+jQuery" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/&amp;title=Smooth+fullscreen+background+slideshow+in+jQuery&amp;summary=After%20having%20%20a%20look%20at%20a%20variety%20of%20fullscreen%20slideshow%20effects%20in%20jQuery%2C%20I%20figured%20this%20could%20be%20done%20smoother%20%28by%20waiting%20for%20images%20to%20actually%20load%20before%20displaying%20them%20and%20adding%20an%20optional%20grid%29%20and%20in%20only%20a%20few%20lines%20of%20code.%20I%20use%20this%20effect%20for%20displaying%20a%20slideshow%20of%20images%20on%20th&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/&amp;title=Smooth+fullscreen+background+slideshow+in+jQuery" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/&amp;title=Smooth+fullscreen+background+slideshow+in+jQuery" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/&amp;title=Smooth+fullscreen+background+slideshow+in+jQuery" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/&amp;title=Smooth+fullscreen+background+slideshow+in+jQuery&amp;desc=After%20having%20%20a%20look%20at%20a%20variety%20of%20fullscreen%20slideshow%20effects%20in%20jQuery%2C%20I%20figured%20this%20could%20be%20done%20smoother%20%28by%20waiting%20for%20images%20to%20actually%20load%20before%20displaying%20them%20and%20adding%20an%20optional%20grid%29%20and%20in%20only%20a%20few%20lines%20of%20code.%20I%20use%20this%20effect%20for%20displaying%20a%20slideshow%20of%20images%20on%20th" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/&amp;title=Smooth+fullscreen+background+slideshow+in+jQuery" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/smooth-fullscreen-background-slideshow-in-jquery/feed/</wfw:commentRss>
		<slash:comments>76</slash:comments>
		</item>
		<item>
		<title>Five essential Firefox Add-ons for webdesigners</title>
		<link>http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/</link>
		<comments>http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 09:22:54 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=121</guid>
		<description><![CDATA[Of course, listing five of your favourite anythings is not a very original concept for a blog. Especially when the first two are already so popular that it makes you want to pop-out your eyeballs. Sorry, but an undefined part of me just couldn&#8217;t resist writing this down anyway thereby adding more choices to your difficult life. Here&#8217;s my list. 1. Firebug Firebug is probably the most popular Firefox add-on for developers ever. I honestly couldn&#8217;t do without it, as [...]]]></description>
			<content:encoded><![CDATA[<p>Of course, listing five of your favourite anythings is not a very original concept for a blog. Especially when the first two are already so popular that it makes you want to pop-out your eyeballs. Sorry, but an undefined part of me just couldn&#8217;t resist writing this down anyway thereby adding more choices to your difficult life. Here&#8217;s my list.</p>
<h2><a title="Firebug Firefox Add-on" href="https://addons.mozilla.org/en-US/firefox/addon/1843/" target="_blank">1. Firebug</a></h2>
<div id="attachment_123" class="wp-caption alignright" style="width: 210px"><a href="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/9486.png"><img class="size-full wp-image-123 " title="Firebug" src="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/9486.png" alt="Firebug" width="200" height="150" /></a><p class="wp-caption-text">Firebug</p></div>
<p><a title="Firebug Firefox Add-on" href="https://addons.mozilla.org/en-US/firefox/addon/1843/" target="_blank">Firebug</a> is probably the most popular Firefox add-on for developers ever. I honestly couldn&#8217;t do without it, as it makes my debugging and developing so much easier. Microsoft must have seen this too because they integrated similar functionality in their Internet Explorer 8 (it&#8217;s called <a title="Developer Tools on MSDN" href="http://msdn.microsoft.com/en-us/library/dd565628%28VS.85%29.aspx" target="_blank">Developer Tools</a>).</p>
<p>Firebug is an add-on with add-ons. An interesting one is <a title="Pixel Perfect Firebug add-on" href="http://www.pixelperfectplugin.com/" target="_blank">Pixel Perfect</a>, which helps you with making your websites&#8230; pixel perfect. By displaying an overlay of your design you can improve the positioning of elements on your web pages. Nicely done.</p>
<h2><a title="Web Developer Add-on" href="https://addons.mozilla.org/nl/firefox/addon/60/" target="_blank">2. Web Developer</a></h2>
<div id="attachment_126" class="wp-caption alignright" style="width: 210px"><img class="size-full wp-image-126" title="Web Developer" src="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/11916.png" alt="Web Developer" width="200" height="122" /><p class="wp-caption-text">Web Developer</p></div>
<p><a title="Web Developer Add-on" href="https://addons.mozilla.org/nl/firefox/addon/60/" target="_blank">Web Developer</a> adds a toolbar to Firefox containing a lot of very neat and handy tools. However, since I started using Firebug, I&#8217;ve been using Web Developer less and less. But I still have it installed and up-to-date on all (er, two&#8230;) of my development machines.</p>
<p>The feature I use most is the <em>Ruler</em> (yes, I like to rule: menu Miscellaneous -&gt; Display Ruler) to measure the sizes of elements. In the end, maybe I would be perfectly happy with a &#8220;Just-another-Ruler&#8221; add on, but I don&#8217;t think this would get me to ditch Web Developer. It&#8217;s like this one team member that you can always rely upon.</p>
<h2><a title="ColorZilla Firefox Add-on" href="https://addons.mozilla.org/nl/firefox/addon/271/" target="_blank">3. ColorZilla</a></h2>
<div id="attachment_130" class="wp-caption alignright" style="width: 210px"><a href="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/254.png"><img class="size-full wp-image-130" title="ColorZilla" src="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/254.png" alt="ColorZilla" width="200" height="150" /></a><p class="wp-caption-text">ColorZilla</p></div>
<p>The recently-very-much-improved <a title="ColorZilla Firefox Add-on" href="https://addons.mozilla.org/nl/firefox/addon/271/" target="_blank">ColorZilla</a> add-on is another tool that makes my live just a little bit more worth living. What I love most is that you can color pick any color in your browser and it will return the hexcode for pasting in your CSS documents.</p>
<p>If you&#8217;re a bit lazy-in-a-good-way &#8211; like me &#8211; this is a great work-around for searching through your CSS document to refind a color and for matching colors to an image on your page. The latest version has some significant improvements and was debugged, so it&#8217;s becoming better and better.</p>
<h2><a title="1Password" href="http://agilewebsolutions.com/products/1Password" target="_blank">4. 1Password</a></h2>
<div id="attachment_141" class="wp-caption alignright" style="width: 210px"><a href="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/locked-app-v3-thumb1.jpg"><img class="size-full wp-image-141" title="1Password" src="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/locked-app-v3-thumb1.jpg" alt="1Password" width="200" height="126" /></a><p class="wp-caption-text">1Password</p></div>
<p>Although not a Firefox plug-in pur sang, <a title="1Password" href="http://agilewebsolutions.com/products/1Password" target="_blank">1Password</a> together with its excellent Firefox integration and toolbar is another utility anyone should have in his or her toolbox. It&#8217;s not free, but it&#8217;s worth every penny.</p>
<p>When developing and testing, you&#8217;ll probably be logging in and out of accounts all the time. Hosting accounts, MySQL databases, forums, sites, etc. 1Passwords stores all your passwords and automagically fills-in your login credentials. I, for example, currently have six Twitter accounts running for several projects, customers and testing purpose. 1Passwords facilitates me in switching between those accounts using one mouse click. This is very efficient.</p>
<p>If you&#8217;re using Dropbox, you can even <a title="Sync 1Password data file using Dropbox" href="http://help.agile.ws/1Password3/dropbox_syncing.html" target="_blank">sync your 1Password data file to multiple systems</a>. Love it!</p>
<h2><a title="Vizited Toolbar Firefox Add-on" href="https://addons.mozilla.org/en-US/firefox/addon/157777/" target="_blank">5. Vizited Toolbar</a></h2>
<div id="attachment_139" class="wp-caption alignright" style="width: 210px"><a href="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/Vizited-Toolbar.png"><img class="size-full wp-image-139" title="Vizited Toolbar" src="http://www.jasperrooswinkel.com/wp-content/uploads/2010/10/Vizited-Toolbar.png" alt="Vizited Toolbar" width="200" height="117" /></a><p class="wp-caption-text">Vizited Toolbar</p></div>
<p>Hugely biased I must admit that I use the <a title="Vizited Toolbar Firefox Add-on" href="https://addons.mozilla.org/en-US/firefox/addon/157777/" target="_blank">Vizited Toolbar</a> a lot for development purposes too. Although still in beta (what isn&#8217;t?), I use it to bookmark and organise websites that I visit during the day. I tag websites and articles as &#8220;inspiration&#8221;, &#8220;php&#8221;, &#8220;css&#8221;, etc. or with the clients name to group them and quickly retrieve them later on. Vizited really improved my personal workflow.</p>
<p>By using <a title="Vizited.com" href="http://www.vizited.com/" target="_blank">Vizited</a>, I experience that there two types of bookmarks. Bookmarks for sites that you visit and revisit the same day or week, which works excellent with Vizited because they will almost always be available right there on the first page of your private Vizited page. And another set of bookmarks that you will use for inspiration and want to share with the rest of the world. They should be tagged and be given good descriptions, so you can easily share (including your personal note) and retrieve them, even after a few months.</p>
<p>To use this toolbar, you need to create a (free) account on Vizited first (which will be instantly activated and you only need to fill in an alias and e-mail, so it&#8217;s not a big deal). After this you will have access to your bookmarks anywhere. End of commercial.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Five+essential+Firefox+Add-ons+for+webdesigners+-+File: /data/app/webapp/functions.php<br />Line: 7<br />Message: Too many connections&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/&amp;t=Five+essential+Firefox+Add-ons+for+webdesigners" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/&amp;title=Five+essential+Firefox+Add-ons+for+webdesigners&amp;summary=Of%20course%2C%20listing%20five%20of%20your%20favourite%20anythings%20is%20not%20a%20very%20original%20concept%20for%20a%20blog.%20Especially%20when%20the%20first%20two%20are%20already%20so%20popular%20that%20it%20makes%20you%20want%20to%20pop-out%20your%20eyeballs.%20Sorry%2C%20but%20an%20undefined%20part%20of%20me%20just%20couldn%27t%20resist%20writing%20this%20down%20anyway%20thereby%20adding%20more%20ch&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/&amp;title=Five+essential+Firefox+Add-ons+for+webdesigners" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/&amp;title=Five+essential+Firefox+Add-ons+for+webdesigners" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/&amp;title=Five+essential+Firefox+Add-ons+for+webdesigners" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/&amp;title=Five+essential+Firefox+Add-ons+for+webdesigners&amp;desc=Of%20course%2C%20listing%20five%20of%20your%20favourite%20anythings%20is%20not%20a%20very%20original%20concept%20for%20a%20blog.%20Especially%20when%20the%20first%20two%20are%20already%20so%20popular%20that%20it%20makes%20you%20want%20to%20pop-out%20your%20eyeballs.%20Sorry%2C%20but%20an%20undefined%20part%20of%20me%20just%20couldn%27t%20resist%20writing%20this%20down%20anyway%20thereby%20adding%20more%20ch" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/&amp;title=Five+essential+Firefox+Add-ons+for+webdesigners" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/five-essential-firefox-add-ons-for-webdesigners/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unexpected expiration of Zend_Auth sessions</title>
		<link>http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/</link>
		<comments>http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/#comments</comments>
		<pubDate>Thu, 30 Sep 2010 19:16:46 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Coding]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=100</guid>
		<description><![CDATA[I was struggling a bit with managing PHP sessions within the Zend Framework. More specifically, the session of an authenticated user expired after 24 minutes (1440 seconds), even though I instructed Zend to set the expiration to 86400 seconds (1 day), like this: $db = Zend_Db_Table::getDefaultAdapter(); $authAdapter = new Zend_Auth_Adapter_DbTable($db); $authAdapter-&#62;setTableName('users'); $authAdapter-&#62;setIdentityColumn('username'); $authAdapter-&#62;setCredentialColumn('password'); $auth = Zend_Auth::getInstance(); $result = $auth-&#62;authenticate($authAdapter); // Did the user provide the correct credentials? if ($result-&#62;isValid()) { // Store all userdata except the password in the session [...]]]></description>
			<content:encoded><![CDATA[<p>I was struggling a bit with managing PHP sessions within the Zend Framework. More specifically, the session of an authenticated user expired after 24 minutes (1440 seconds), even though I instructed Zend to set the expiration to 86400 seconds (1 day), like this:</p>
<pre class="brush: php; highlight: [18,19];">
$db = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($db);

$authAdapter-&gt;setTableName('users');
$authAdapter-&gt;setIdentityColumn('username');
$authAdapter-&gt;setCredentialColumn('password');

$auth = Zend_Auth::getInstance();
$result = $auth-&gt;authenticate($authAdapter);

// Did the user provide the correct credentials?
if ($result-&gt;isValid()) {

	// Store all userdata except the password in the session
	$data = $authAdapter-&gt;getResultRowObject(null,'password');
	$auth-&gt;getStorage()-&gt;write($data);

	$authSession = new Zend_Session_Namespace('Zend_Auth');
	$authSession-&gt;setExpirationSeconds(86400);

}
</pre>
<h2>How sessions work and what you should be aware of</h2>
<p>PHP stores the session ID in a cookie and, when a new request arrives, uses the session ID from the cookie to retrieve the session file from disk. If a session expires, this can have at least two causes 1) its session file on the server is gone or 2) the related cookie is no longer available. As PHP stores its sessions in a shared location (usually /tmp/), I figured someone or something else was tampering with my session files.</p>
<p>After having some deep thoughts, I came to the following conclusion. In a shared hosting environment, other PHP scripts are also putting their session files in /tmp/. This should not be a problem, however, garbage collection takes place on system wide intervals (which default to 1440 seconds) and (worse!) scripts from other users can even decide to override this interval (if you&#8217;re really trigger happy you can delete all session files, every minute). In summary: my sessions are not safe in /tmp/!</p>
<h2>Saving your session files in a different location</h2>
<p>Fortunately, Zend Framework (beyond version 1.8) offers a nice solution to store your session files in a different location. First you have to create a folder and chmod it to 777 so it&#8217;s writable for PHP. In this example I created the folder in &#8220;/application/../data/session/&#8221;. Next, you tell your application to change the save path of the sessions and the lifetime of your sessions by adding the following lines to your <em>application.ini</em> (86400 seconds = 24 hours):</p>
<pre class="brush: plain;">

resources.session.save_path = APPLICATION_PATH &quot;/../data/session/&quot;
resources.session.gc_maxlifetime = 86400
resources.session.remember_me_seconds = 86400
</pre>
<p>Finally, to make this work, you need to bootstrap &#8220;session&#8221;, by putting the following code in your <em>Bootstrap.php</em>:</p>
<pre class="brush: php;">

protected function _initSessions() {
 	$this-&gt;bootstrap('session');
}
</pre>
<p>To check if this worked, monitor the new sessions folder and, as soon as you log in, a new session file will appear. Deleting this file will log you out.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Unexpected+expiration+of+Zend_Auth+sessions+-+http://b2l.me/awjdjf&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/&amp;t=Unexpected+expiration+of+Zend_Auth+sessions" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/&amp;title=Unexpected+expiration+of+Zend_Auth+sessions&amp;summary=I%20was%20struggling%20a%20bit%20with%20managing%20PHP%20sessions%20within%20the%20Zend%20Framework.%20More%20specifically%2C%20the%20session%20of%20an%20authenticated%20user%20expired%20after%2024%20minutes%20%281440%20seconds%29%2C%20even%20though%20I%20instructed%20Zend%20to%20set%20the%20expiration%20to%2086400%20seconds%20%281%20day%29%2C%20like%20this%3A%0D%0A%0D%0A%5Bsourcecode%20language%3D%22php%22%20highlig&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/&amp;title=Unexpected+expiration+of+Zend_Auth+sessions" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/&amp;title=Unexpected+expiration+of+Zend_Auth+sessions" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/&amp;title=Unexpected+expiration+of+Zend_Auth+sessions" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/&amp;title=Unexpected+expiration+of+Zend_Auth+sessions&amp;desc=I%20was%20struggling%20a%20bit%20with%20managing%20PHP%20sessions%20within%20the%20Zend%20Framework.%20More%20specifically%2C%20the%20session%20of%20an%20authenticated%20user%20expired%20after%2024%20minutes%20%281440%20seconds%29%2C%20even%20though%20I%20instructed%20Zend%20to%20set%20the%20expiration%20to%2086400%20seconds%20%281%20day%29%2C%20like%20this%3A%0D%0A%0D%0A%5Bsourcecode%20language%3D%22php%22%20highlig" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/&amp;title=Unexpected+expiration+of+Zend_Auth+sessions" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/unexpected-expiration-of-zend_auth-sessions/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Firefox Profilemanager to the rescue</title>
		<link>http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/</link>
		<comments>http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/#comments</comments>
		<pubDate>Wed, 29 Sep 2010 19:22:08 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=88</guid>
		<description><![CDATA[One of the better kept secrets of Firefox &#8211; at least for me it was &#8211; is the option to run multiple independent user profiles in one installation. Quite a nifty feature and I found a great use for it recently. For one of our projects, Vizited, I&#8217;ve been working on a Firefox toolbar which triggered a few challenges. For developing this toolbar, I use several Firefox add ons (e.g. XUL Gear for buiding the xul files). Unfortunately, during development [...]]]></description>
			<content:encoded><![CDATA[<p>One of the better kept secrets of Firefox &#8211; at least for me it was &#8211; is the option to run multiple independent user profiles in one installation. Quite a nifty feature and I found a great use for it recently. For one of our projects, <a title="Vizited.com website" href="http://www.vizited.com/" target="_blank">Vizited</a>, I&#8217;ve been working on a Firefox toolbar which triggered a few challenges.</p>
<p>For developing this toolbar, I use several Firefox add ons (e.g. <a title="XUL Gear Firefox add on" href="https://addons.mozilla.org/en-US/firefox/addon/162046/" target="_blank">XUL Gear</a> for buiding the xul files). Unfortunately, during development of the toolbar, I regularly have to shutdown and restart Firefox to test changes in the code. This is not very convenient as this also causes the other add ons to close. Besides this, I rather test my toolbar in a &#8220;clean&#8221; set-up of Firefox instead of alongside my other third party plug-ins.</p>
<p style="text-align: center;">
<div id="attachment_89" class="wp-caption aligncenter" style="width: 340px"><a href="http://www.jasperrooswinkel.com/wp-content/uploads/2010/09/firefox_profiles_screenshot.jpg"><img class="size-full wp-image-89 " title="Firefox Profile Manager" src="http://www.jasperrooswinkel.com/wp-content/uploads/2010/09/firefox_profiles_screenshot.jpg" alt="Firefox Profile Manager" width="330" height="274" /></a><p class="wp-caption-text">Firefox Profile Manager</p></div>
<p>The &#8220;Profile Manager&#8221; takes care of both inconveniences. Details how to configure multiple profiles, can be found in the <a title="Mozilla Knowledge Base about Firefox ProfileManager" href="http://support.mozilla.com/en-US/kb/Managing%20profiles" target="_blank">Mozilla knowledge Base</a>. I will explain my approach in two command lines.</p>
<p>On Mac OSX you can easily start the Profile Manager in a terminal window (first quit your running Firefox instance):</p>
<p><code>/Applications/Firefox.app/Contents/MacOS/firefox-bin -ProfileManager</code></p>
<p>After configuring a profile, you can start multiple instances of Firefox like this (duh!):</p>
<p><code>/Applications/Firefox.app/Contents/MacOS/firefox-bin</code></p>
<p>For every instance you can choose a different profile in the pop-up. This way, Firefox will peacefully run multiple instances and you&#8217;ll be able to restart them individually. Isn&#8217;t that nice?</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=Firefox+Profilemanager+to+the+rescue+-+http://b2l.me/avphw3&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/&amp;t=Firefox+Profilemanager+to+the+rescue" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/&amp;title=Firefox+Profilemanager+to+the+rescue&amp;summary=One%20of%20the%20better%20kept%20secrets%20of%20Firefox%20-%20at%20least%20for%20me%20it%20was%20-%20is%20the%20option%20to%20run%20multiple%20independent%20user%20profiles%20in%20one%20installation.%20Quite%20a%20nifty%20feature%20and%20I%20found%20a%20great%20use%20for%20it%20recently.%20For%20one%20of%20our%20projects%2C%20Vizited%2C%20I%27ve%20been%20working%20on%20a%20Firefox%20toolbar%20which%20triggered%20a%20&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/&amp;title=Firefox+Profilemanager+to+the+rescue" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/&amp;title=Firefox+Profilemanager+to+the+rescue" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/&amp;title=Firefox+Profilemanager+to+the+rescue" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/&amp;title=Firefox+Profilemanager+to+the+rescue&amp;desc=One%20of%20the%20better%20kept%20secrets%20of%20Firefox%20-%20at%20least%20for%20me%20it%20was%20-%20is%20the%20option%20to%20run%20multiple%20independent%20user%20profiles%20in%20one%20installation.%20Quite%20a%20nifty%20feature%20and%20I%20found%20a%20great%20use%20for%20it%20recently.%20For%20one%20of%20our%20projects%2C%20Vizited%2C%20I%27ve%20been%20working%20on%20a%20Firefox%20toolbar%20which%20triggered%20a%20" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/&amp;title=Firefox+Profilemanager+to+the+rescue" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/firefox-profilemanager-to-the-rescu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to identify a font?</title>
		<link>http://www.jasperrooswinkel.com/how-to-identify-a-font/</link>
		<comments>http://www.jasperrooswinkel.com/how-to-identify-a-font/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 17:08:10 +0000</pubDate>
		<dc:creator>Jasper</dc:creator>
				<category><![CDATA[Fonts]]></category>

		<guid isPermaLink="false">http://www.jasperrooswinkel.com/?p=76</guid>
		<description><![CDATA[If you&#8217;re a (web)designer, you&#8217;ve probably experienced this problem more than once &#8211; at least I have. For a new design I asked my client to send me his logo. This is one of those projects where the logo is already available and the website should be designed &#8220;around&#8221; the logo. No problem, I&#8217;m flexible and luckily &#8211; although the client prepared me for this &#8211; I was sitting down when I received his slightly outdated logo in my mailbox. [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_78" class="wp-caption alignright" style="width: 250px"><a href="http://www.jasperrooswinkel.com/wp-content/uploads/2010/09/screenshot_whatthefont.png"><img class="size-full wp-image-78 " title="What The Font" src="http://www.jasperrooswinkel.com/wp-content/uploads/2010/09/screenshot_whatthefont.png" alt="What The Font" width="240" height="600" /></a><p class="wp-caption-text">Great success!</p></div>
<p>If you&#8217;re a (web)designer, you&#8217;ve probably experienced this problem more than once &#8211; at least I have. For a new design I asked my client to send me his logo. This is one of those projects where the logo is already available and the website should be designed &#8220;around&#8221; the logo. No problem, I&#8217;m flexible and luckily &#8211; although the client prepared me for this &#8211; I was sitting down when I received his slightly outdated logo in my mailbox.</p>
<p>Because we promised to keep the logo for now, and to start with designing the website first, for obvious reasons I was interested to identify the font that was used for the logo. But how? After feeding the correct mix of keywords to Google, it proposed me a rather elegant solution.</p>
<p>So, if you&#8217;re as ignorant as I am when it comes to naming fonts and/or typefaces, you should really check out <a title="What The Font on Myfonts.com" href="http://new.myfonts.com/WhatTheFont/" target="_blank">What The Font</a>. I had to crop and resize the text in the logo a bit, but then it actually unbelievably worked without much effort at all! The font was identified, including some alternatives. Make sure you follow the <a title="Tips" href="http://new.myfonts.com/WhatTheFont/tips.html" target="_blank">guidelines</a> and this will most likely simplify your life as well.</p>


<div class="shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-caring">
<ul class="socials">
		<li class="shr-twitter">
			<a href="http://twitter.com/home?status=How+to+identify+a+font%3F+-+http://b2l.me/avdrhe&amp;source=shareaholic" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="shr-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.jasperrooswinkel.com/how-to-identify-a-font/&amp;t=How+to+identify+a+font%3F" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="shr-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.jasperrooswinkel.com/how-to-identify-a-font/&amp;title=How+to+identify+a+font%3F&amp;summary=%0D%0A%0D%0AIf%20you%27re%20a%20%28web%29designer%2C%20you%27ve%20probably%20experienced%20this%20problem%20more%20than%20once%20-%20at%20least%20I%20have.%20For%20a%20new%20design%20I%20asked%20my%20client%20to%20send%20me%20his%20logo.%20This%20is%20one%20of%20those%20projects%20where%20the%20logo%20is%20already%20available%20and%20the%20website%20should%20be%20designed%20%22around%22%20the%20logo.%20No%20problem%2C%20I%27m%20fl&amp;source=Jasper Rooswinkel" rel="nofollow" class="external" title="Share this on LinkedIn">Share this on LinkedIn</a>
		</li>
		<li class="shr-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.jasperrooswinkel.com/how-to-identify-a-font/&amp;title=How+to+identify+a+font%3F" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="shr-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.jasperrooswinkel.com/how-to-identify-a-font/&amp;title=How+to+identify+a+font%3F" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="shr-delicious">
			<a href="http://delicious.com/post?url=http://www.jasperrooswinkel.com/how-to-identify-a-font/&amp;title=How+to+identify+a+font%3F" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="shr-comfeed">
			<a href="http://www.jasperrooswinkel.com/how-to-identify-a-font/feed" rel="nofollow" class="external" title="Subscribe to the comments for this post?">Subscribe to the comments for this post?</a>
		</li>
		<li class="shr-diigo">
			<a href="http://www.diigo.com/post?url=http://www.jasperrooswinkel.com/how-to-identify-a-font/&amp;title=How+to+identify+a+font%3F&amp;desc=%0D%0A%0D%0AIf%20you%27re%20a%20%28web%29designer%2C%20you%27ve%20probably%20experienced%20this%20problem%20more%20than%20once%20-%20at%20least%20I%20have.%20For%20a%20new%20design%20I%20asked%20my%20client%20to%20send%20me%20his%20logo.%20This%20is%20one%20of%20those%20projects%20where%20the%20logo%20is%20already%20available%20and%20the%20website%20should%20be%20designed%20%22around%22%20the%20logo.%20No%20problem%2C%20I%27m%20fl" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="shr-googlebuzz">
			<a href="http://www.google.com/buzz/post?url=http://www.jasperrooswinkel.com/how-to-identify-a-font/&amp;imageurl=" rel="nofollow" class="external" title="Post on Google Buzz">Post on Google Buzz</a>
		</li>
		<li class="shr-reddit">
			<a href="http://reddit.com/submit?url=http://www.jasperrooswinkel.com/how-to-identify-a-font/&amp;title=How+to+identify+a+font%3F" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="shr-technorati">
			<a href="http://technorati.com/faves?add=http://www.jasperrooswinkel.com/how-to-identify-a-font/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>

]]></content:encoded>
			<wfw:commentRss>http://www.jasperrooswinkel.com/how-to-identify-a-font/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

