<?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>Bram.us &#187; Webdevelopment</title>
	<atom:link href="http://www.bram.us/category/webdevelopment/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bram.us</link>
	<description>A rather geeky/technical weblog by Bram(us) Van Damme</description>
	<lastBuildDate>Sat, 04 Feb 2012 11:59:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>MAMP Pro slow name resolving with .local vhosts in Lion (fix)</title>
		<link>http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/</link>
		<comments>http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 14:39:07 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[lion]]></category>
		<category><![CDATA[mamp]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[webdev]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=6870</guid>
		<description><![CDATA[An issue I&#8217;ve encountered with MAMP Pro since having upgraded to OS X Lion was that requests to vhosts served via MAMP took their time to load: after about 3 to 5 seconds of loading, the site would finally load. &#8230; <a href="http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>An issue I&#8217;ve encountered with MAMP Pro since having upgraded to OS X Lion was that requests to <em>vhosts</em> served via MAMP took their time to load: after about 3 to 5 seconds of loading, the site would finally load.</p>
<p>The most tricky part in this issue is that it only happens if you have a domain ending in <code>.local</code>, such as <code>mysite.local</code>. If you&#8217;d rename the site to <code>mysite.dev</code>, it&#8217;d be &mdash; &#8230; beware, buzzword coming up &#8230; &mdash; <em>snappy</em> again.</p>
<p>Turns out, after a few <a href="http://www.flickr.com/photos/bramus/2998573943/">Google Search Coupons</a>, that <a href="https://discussions.apple.com/message/15834652#15834652">the culprit is Bonjour</a> <em>(emphasis mine)</em>:</p>
<blockquote><p>The Multicast DNS feature of Bonjour technology allows devices on a local network to connect to each other by name without a separate DNS server. By default, any hostname ending in .local is treated as a Bonjour host rather than by querying the DNS server entries in Network preferences.</p>
<p>Though the .local domain is not defined as a valid top-level domain on the Internet, some private networks have DNS servers that assign hostnames in the .local domain. <strong>By default Mac OS X does not use the DNS server to resolve these names.</strong> This may result in unexpected failures to connect to .local hostnames defined by your server.</p></blockquote>
<p>To fix this problem (without having to rename each vhost) you need to add IPv6 entries for each of your vhosts in your <code>/etc/hosts</code> file:</p>
<pre class="brush: plain; title: ; notranslate">::1 mysite.local
fe80::1%lo0 mysite.local
127.0.0.1 mysite.local</pre>
<p>After that, <code>.local</code> vhosts load fast again. I&#8217;ve created <a href="http://bugs.mamp.info/view.php?id=4136">an issue on the MAMP bug tracker</a> for this, requesting the author to automatically add IPv6 entries to the hosts file when creating/editing a vhost. Hope to see this fixed in a future version. For now, the fix above will have to do.</p>
<p><del>Note that after restarting MAMP, the IPv6 entries will be gone &#8230; yeah, so that bug needs to fixed soon (either by Apple, or by MAMP). If you don&#8217;t want all the hassle after a restart, you might consider renaming your vhosts to <code>.dev</code> (anything but <code>.local</code> will do)</del> <ins><strong>UPDATE 2011.12.18:</strong> If you tab-delimit the vhosts (a rather unknown trick) for the <code>::1</code> entry, MAMP won&#8217;t delete it when reloading MAMP/adding a new vhost. Eventually, your hosts file will look like something this:</p>
<pre class="brush: plain; title: ; notranslate">##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1	localhost
255.255.255.255	broadcasthost
::1	localhost	mysite.local	myothersite.local	anothersite.local	yetanothersite.local
fe80::1%lo0	localhost
127.0.0.1 mysite.local
127.0.0.1 myothersite.local
127.0.0.1 anothersite.local
127.0.0.1 yetanothersite.local</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The end of IE6 is near, isn&#039;t it?</title>
		<link>http://www.bram.us/2009/04/14/the-end-of-ie6-is-near-isnt-it/</link>
		<comments>http://www.bram.us/2009/04/14/the-end-of-ie6-is-near-isnt-it/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 15:26:34 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[ie8]]></category>
		<category><![CDATA[internet explorer]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1989</guid>
		<description><![CDATA[Apparently many out there are under the impression that IE8 will be installed overnight on all Windows machines automagically by which IE6 will die a sudden death. Right, right? WRONG! If you have read the announcement carefully you&#8217;ll notice that &#8230; <a href="http://www.bram.us/2009/04/14/the-end-of-ie6-is-near-isnt-it/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.bram.us/wordpress/wp-content/uploads/2009/04/ie8.gif" style="display: block; float: left; width: 80px; height: 80px; margin: 0 10px 10px 0;" />Apparently many out there are under the impression that IE8 will be installed overnight on all Windows machines <em>automagically</em> by which IE6 will die a sudden death. Right, right? <strong>WRONG!</strong><br style="clear: both;" /></p>
<p><span id="more-1989"></span></p>
<p>If you have read <a href="http://www.google.be/url?sa=t&#038;source=web&#038;ct=res&#038;cd=2&#038;url=http%3A%2F%2Fblogs.msdn.com%2Fie%2Farchive%2F2009%2F04%2F10%2Fprepare-for-automatic-update-distribution-of-ie8.aspx&#038;ei=9p_kSeHsI9vR-Qa42pyHCQ&#038;usg=AFQjCNHdQhftFOg2k6QG0kTorAH504HD5g&#038;sig2=mZPtSVDNteBfVZwFz2hXQg">the announcement</a> carefully you&#8217;ll notice that the installer file indeed will be pushed out to Windows users, yet they&#8217;d still have to opt-in (<em>viz. click an &#8220;I accept and install&#8221; button</em>).</p>
<p style="text-align: center;"><img src="http://ieblog.members.winisp.net/images/wuwelcomevista.png"><br />See those buttons there?</p>
<blockquote><p>&ldquo;<em>IE8 will not automatically install on machines. Users must opt-in to install IE8. Users will see a Welcome screen that offers choices: Ask later, install now, or don’t install.</em>&rdquo;</p></blockquote>
<p>Above that the update won&#8217;t be pushed to Windows 2000 users; Heck, even IE7 isn&#8217;t available to them (yes, some companies still run Win2K as it works for them &#8211; the &ldquo;<em>if it ain&#8217;t broken, don&#8217;t fix (upgrade) it</em>&rdquo;-mentality in action.</p>
<p>In the end, it&#8217;ll be upon the users individually and the sysadmins if they will install it or not; And that&#8217;s where things might go wrong.</p>
<p>As long as the users won&#8217;t embrace IE8 (<em>or are given the option not to embrace it at all, as they are doing now with the opt-in</em>), then I&#8217;m quite sure it won&#8217;t spread like a wildfire due to various reasons be it fear of change, bad word of mouth, etc.</p>
<p>Think about it; Would a regular user like your next-door neighbor, the lady across the street, etc. install it if they heard bad things about the new version (<em>it takes only 1 user with a bad review to make this happen &#8211; &ldquo;Hey dude, it slowed down my computer, don&#8217;t install it or it&#8217;ll slow down yours too.&rdquo;</em>)? Will they be able to adopt to the sudden change when moving from IE6? Will they even tend to upgrade if the current version installed works for them? Will they upgrade from IE7 to IE8 knowing that the previous move (from IE6 to IE7) broke some websites?</p>
<p>No, I don&#8217;t think so. Heck, I know some savvy dudes out there sticking with Office 2003 because the change to 2007 was <em>too much</em> for them. Not talking about my mum (<em>who works with 2K7 btw</em>) here, but some (<em>self-proclaimed?</em>) IT guys! And no, that&#8217;s no joke.</p>
<p style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2009/04/monopoly-go-to-jail-card.jpg" width="452" height="260" /><br />Go directly to jail, do not pass go</p>
<p>I think it&#8217;s quite clear that I&#8217;m not convinced (yet) this will turn out <em>just fine</em>, yet I can only hope for the best outcome. I know what I&#8217;ll have to do though: spend my time telling every non-savvy guy/gal out there that IE8 just rocks and is the greatest (<em>although we all do know that&#8217;s not true given the other players out there</em>) and they all should install it.</p>
<p>Oh boy do I hope that within a few months I&#8217;ll be writing a post apologizing for this one, and labeling the info here as faulty.</p>
<p>Time.will.tell</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2009/04/14/the-end-of-ie6-is-near-isnt-it/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The lazy programmer at work: _eoo and your Javascript Objects</title>
		<link>http://www.bram.us/2009/02/22/the-lazy-programmer-at-work-_eoo-and-your-javascript-objects/</link>
		<comments>http://www.bram.us/2009/02/22/the-lazy-programmer-at-work-_eoo-and-your-javascript-objects/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 17:41:19 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1925</guid>
		<description><![CDATA[I admit: I&#8217;m a lazy programmer. If there&#8217;s anything I can do to reduce code, I&#8217;m in. Above that: if there&#8217;s anything I can do to avoid mistakes and errors, I&#8217;m in too. In order to have less errors/mistakes whilst &#8230; <a href="http://www.bram.us/2009/02/22/the-lazy-programmer-at-work-_eoo-and-your-javascript-objects/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.bram.us/wordpress/wp-content/uploads/2009/02/lazy.gif" alt="" title="lazy" width="80" height="80" style="display: block; float: left; margin: 0 10px 10px 0;" />I admit: I&#8217;m a lazy programmer. If there&#8217;s anything I can do to reduce code, I&#8217;m in. Above that: if there&#8217;s anything I can do to avoid mistakes and errors, I&#8217;m in too. In order to have less errors/mistakes  whilst whipping up some Javascript Objects I&#8217;ve created a little trick: the use of the <code>_eeo</code> datamember.<br style="clear: both;" /></p>
<p><span id="more-1925"></span></p>
<h2>Objects in Javascript</h2>
<div class="BramusBlock">
<p>Whenever you create an object in JS, you do somehting like this (<em>at least that&#8217;s how I do it</em>):</p>
<pre class="brush: jscript; title: ; notranslate">// A Javascript Object
var MyJsObject = {
	param1: true,
	param2: false,
	func1 : function() {
		// my code here
	}
}</pre>
<p>Whenever you expand that object, one would add a new function/param to the object, separated by a comma:</p>
<pre class="brush: jscript; title: ; notranslate">// Expanding the Object
var MyJsObject = {
	param1: true,
	param2: false,
	param3: &quot;Yes we can&quot;,
	func1 : function() {
		// my code here
	},
	func2 : function() {
		// my code here
	}
}</pre>
<p>Now, I myself have noticed that sometimes I forget to add a comma, like so:</p>
<pre class="brush: jscript; title: ; notranslate">// This will fail
var MyJsObject = {
	param1: true,
	param2: false,
	param3: &quot;Yes we can&quot;
	func1 : function() {
		// my code here
	},
	func2 : function() {
		// my code here
	}
}</pre>
<p>The above of course won&#8217;t go undetected, as <strong>it will produce an error</strong>. Using Firebug you&#8217;ll get this lovely error, pointing you immediately towards the errorous file:</p>
<p><img src="http://www.bram.us/wordpress/wp-content/uploads/2009/02/picture-3.png" alt="" title="Error!" width="499" height="120" class="alignnone size-full wp-image-1926" /></p>
<p>Another mistake one can make is to have an extra comma after your very last function. This &#8211; for example &#8211; can happen when you delete a function from the object:</p>
<pre class="brush: jscript; title: ; notranslate">// This will fail, will it?
var MyJsObject = {
	param1: true,
	param2: false,
	param3: &quot;Yes we can&quot;,
	func1 : function() {
		// my code here
	},
}</pre>
<p>The problem with the above is that <strong>it won&#8217;t give an error in Firefox</strong> (<em>my weapon of choice</em>), allowing to code along without even knowing I&#8217;ve left a lost comma at the very end of my JS file!</p>
</div>
<h2>The real problem here</h2>
<div class="BramusBlock">
<p>The real problem of the problem above is that it actually will give an error in &#8211; <em>yeah, you&#8217;ve guessed it</em> &#8211; Internet Explorer.</p>
<p>As many webdevelopers I test sites in IE not that often: I first get my stuff straight in Firefox, and then test IE and start fixing the errors.</p>
<p>Now, there&#8217;s a problem with &ldquo;the problem of the problem&rdquo;: IE gives an error, but &#8211; <em>again, you&#8217;ve guessed it right</em> &#8211; it totally isn&#8217;t descriptive; You get something like: &ldquo;<code>Line: 10; Char: 1; Error: Expected identifier, string or number; Code: 0; File: yourpage.html</code>&rdquo;</p>
<p>The error given is worthless as neither the correct file nor the correct line-number is mentioned in the error! Finding the file that&#8217;s causing the error can take quite some time if you have lots of JS files.</p>
</div>
<h2>Introducing <code>_eeo</code></h2>
<div class="BramusBlock">
<p>In order to <em>never ever</em> mistakenly produce such an error I use this little trick: the very last datamember/property/whatever-you-like-to-call-it of every Object I write is a dummy parameter <code>_eeo</code>, which is short for <code>End Of Object</code>. This <code>_eeo</code> <strong>always</strong> is the last datamember of the Object, as seen below:</p>
<pre class="brush: jscript; title: ; notranslate">// &quot;Bramus! The lazy programmer&quot; at work
var MyJsObject = {
	param1: true,
	param2: false,
	param3: &quot;Yes we can&quot;,
	func1 : function() {
		// my code here
	},
	_eeo: true
}</pre>
<p>Using the <code>_eeo</code> trick, one can never &#8211; mistakenly &#8211; have a lost comma at the end and one must always add a comma when adding new functions/datamembers (which you do before the <code>_eoo</code> param). This reduces mistakes, as there&#8217;s no doubt anymore <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Turns out that this little trick is <em>that</em> good, that my former colleagues at <a href="http://www.netlash.com/">Netlash</a> and <a href="http://en.netlog.com/go/developer">Netlog</a> are <a href="http://twitter.com/oemebamo/statuses/1102193849">using</a> this trick too nowadays <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2009/02/22/the-lazy-programmer-at-work-_eoo-and-your-javascript-objects/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Accessing data saved in the class property of DOM-elements with jQuery</title>
		<link>http://www.bram.us/2009/02/09/accessing-data-saved-in-the-class-property-of-dom-elements-with-jquery/</link>
		<comments>http://www.bram.us/2009/02/09/accessing-data-saved-in-the-class-property-of-dom-elements-with-jquery/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 20:01:56 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1914</guid>
		<description><![CDATA[A few weeks ago former colleague Jurriaan wrote a PrototypeJS extension to accessing data stored within classes of HTML elements. Basically it comes down to assigning extra classes (classes such as gender_male for example, which represent a property and a &#8230; <a href="http://www.bram.us/2009/02/09/accessing-data-saved-in-the-class-property-of-dom-elements-with-jquery/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="/wordpress/wp-content/uploads/2008/10/jquery.gif" style="display: block; float: left; margin: 0 10px 10px 0;" alt="" title="" />A few weeks ago former colleague <a href="http://www.jurriaanpersyn.com/">Jurriaan</a> wrote <a href="http://www.jurriaanpersyn.com/archives/2009/01/21/accessing-data-saved-in-the-class-property-of-dom-elements-with-prototype/">a PrototypeJS extension to accessing data stored within classes of HTML elements</a>. Basically it comes down to assigning extra classes (<em>classes such as <code>gender_male</code> for example, which represent a property and a value</em>) on an element, which you then read/write via Jurriaan&#8217;s extension. As this way of assigning data is a technique I&#8217;ve been using too, I took the liberty of writing a jQuery blend of his script.</p>
<p><span id="more-1914"></span></p>
<h2>Ow ow, what is this all about?</h2>
<div class="BramusBlock">
<p>I suggest you read <a href="http://www.jurriaanpersyn.com/archives/2009/01/21/accessing-data-saved-in-the-class-property-of-dom-elements-with-prototype/">Jurriaan&#8217;s excellent post on the subject</a> if you&#8217;re not acquainted with the subject. It situates the problem and explains the necessity of this plugin.</div>
<h2>Cool, any demo?</h2>
<div class="BramusBlock">
<p>Elementary my dear Watson, elementary:</p>
<p style="text-align: center;"><a href="http://www.bram.us/demo/projects/jquery_classdata/" title="jQuery ClassData Demo"><img src="http://www.bram.us/wordpress/wp-content/uploads/2009/02/jquery-classdata-demo.gif" alt="" title="jQuery ClassData Demo" width="500" height="132" class="alignnone size-full wp-image-1919" /></a></p>
</div>
<h2>Gimme gimme gimme (Download)!</h2>
<div class="BramusBlock">
<p><a href="https://github.com/bramus/jquery_classdata/">Find the source on GitHub</a> (click on the Download button)</p>
</div>
<h2>Okay I downloaded it: How to I use this thing / Any differences between yours and Jurriaan&#8217;s version?</h2>
<div class="BramusBlock">
<p>Usage is simple: include the script after you&#8217;ve included jQuery. From then on you can use the <code>classData()</code> function on a jQuery Object:</p>
<pre class="brush: jscript; title: ; notranslate">// Set data - this will set the class 'extradata_yes' on the elements that match the selector (note that the plugin does not break chaining)
$('.mySelector').classData('extradata','yes').css('backgroundColor','lime');
// Get data - alerts the extradata value of the elements that match the selector
alert($('.mySelector').classData('extradata'));
</pre>
<p>Please note that the setting of data does not break jQuery&#8217;s chaining.</p>
<p>As you might have noticed the getter and setter functions are non-existent: there&#8217;s one function to handle both the mutation and accessing of the data (this differs from Jurriaan&#8217;s approach: he has two functions)</p>
<p>Now, you might have noticed that there&#8217;s no way to set the glue (which defaults to an underscore) used in the call itself. Therefor an extra function comes in handy: <code>classDataGlue()</code>. Via that function you can set glue before getting and/or setting data.</p>
<pre class="brush: jscript; title: ; notranslate">// Set data with custom glue - this will set the class 'extradata-yes' on the elements that match the selector (note that the plugin does not break chaining)
$('.mySelector').classDataGlue('-').classData('extradata','yes').css('backgroundColor','lime');
// Alert current glue (note that we need to have a jQuery object for this)
alert($('').classDataGlue());
// Get data (note that the glue is still known to the plugin) - alerts the extradata value of the elements that match the selector
alert($('.mySelector').classData('extradata'));
// Get data that uses % as glue:
alert($('.mySelector').classDataGlue('%').classData('otherdata'));
</pre>
<p>Again note that the setting of the <code>classDataGlue</code> does not break jQuery&#8217;s chaining. Also note that when you set the glue, the calls that happen after it will still use that glue (<em>viz: once the glue is set, it keeps using that glue. Make an extra call to <code>classDataGlue()</code> to set it to an other value</em>).</p>
</div>
<h2 id="donate" style="margin-top: 25px;">Thanks a bunch, how can I thank you?</h2>
<div class="BramusBlock">
<p>You may always leave a comment below and/or &#8211; <em>it certainly is no obligation but it would most certainly put a smile on my face</em> &#8211; make a donation.</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" style="border: 0;" name="submit" alt="Make a donation" /><img alt="" style="border: 0;" src="https://www.paypal.com/nl_NL/i/scr/pixel.gif" width="1" height="1" /><br />
<input type="hidden" name="cmd" value="_xclick" style="display: none;" />
<input type="hidden" name="business" value="paypal@bram.us" style="display: none;" />
<input type="hidden" name="item_name" value="Bram Van Damme (Bram.us)" style="display: none;" />
<input type="hidden" name="no_shipping" value="0" style="display: none;" />
<input type="hidden" name="no_note" value="1" style="display: none;" />
<input type="hidden" name="currency_code" value="EUR" style="display: none;" />
<input type="hidden" name="tax" value="0" style="display: none;" />
<input type="hidden" name="lc" value="BE" style="display: none;" />
<input type="hidden" name="bn" value="PP-DonationsBF" style="display: none;" /></form>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2009/02/09/accessing-data-saved-in-the-class-property-of-dom-elements-with-jquery/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Using Dropbox as an automatic and free Web Publishing solution</title>
		<link>http://www.bram.us/2008/12/15/using-dropbox-as-a-free-web-publishing-solution/</link>
		<comments>http://www.bram.us/2008/12/15/using-dropbox-as-a-free-web-publishing-solution/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 18:31:55 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[instsrv]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[srvany]]></category>
		<category><![CDATA[windows server]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1848</guid>
		<description><![CDATA[In addition to having moved my mail to Google Apps for your Domain I decided to take it to the next level about a month ago by using Dropbox for storing both personal as professional (viz. 3RDS-related) data in the &#8230; <a href="http://www.bram.us/2008/12/15/using-dropbox-as-a-free-web-publishing-solution/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/dropbox.png" alt="" title="Dropbox" width="80" height="80" style="display: block; float: left; margin: 0 15px 10px 0;" />In addition to <a href="http://www.bram.us/2008/08/16/calling-all-digital-nomads-switch-your-mail-and-other-stuff-to-google-apps-yesterday/">having moved my mail to Google Apps for your Domain</a> I decided to take it to the next level about a month ago by using <a href="https://www.getdropbox.com/referrals/NTM5Mzk3Mzk">Dropbox</a> for storing both personal as professional (viz. <a href="http://www.3rds.be/about-3rds/">3RDS</a>-related) data <em>in the cloud</em>. This decision made me more mobile than ever, as I can access any file, any time, any place; This as wellf from my PC as from my Mac as from any other Computer that&#8217;s connected to the internet. Over the weekend I raised the bar again and started experimenting with Dropbox resulting in a method by which one can (<em>ab?</em>)use that very same Dropbox as an <strong><em>automagic</em> Web Publishing Solution</strong> (as an alternative to SVN and other technologies).<br style="clear: both;" /></p>
<p><span id="more-1848"></span></p>
<h2>Why use Dropbox?</h2>
<div class="BramusBlock">
<p>It&#8217;s quite simple: Dropbox is as easy as it can be! Just install the client and drag and drop your data into your Dropbox (<em>which is a folder located on your hard drive</em>). From there on all syncing goes automatically, no need for one to manually invoke a <code>commit</code> command or anything like that. By this I always have the latest versions of all my files available on both my PC and my Mac.</p>
<p style="text-align: center;"><object width="425" height="344"><param name="movie" value="https://s3.amazonaws.com/scast/beta/flvplayer.swf"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="https://s3.amazonaws.com/scast/beta/flvplayer.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />Dropbox Intro Video</p>
<p>The great thing about Dropbox is that it supports Windows, OSX and Linux (<em>unlike Live Mesh, <a href="http://twitter.com/bramus/status/1016463080">which I&#8217;ve also tried</a></em>) and also provides you a web interface (<em>LM also provides you one</em>).</p>
<p>However, the greatest feature (<em>which I only discovered this weekend</em>) is the sharing functionality: one can share parts of his Dropbox with other Dropbox users. It&#8217;s in this feature that I saw an opportunity to experiment &#8230;</p>
</div>
<h2>The idea</h2>
<div class="BramusBlock">
<p class="download-link" style="height: auto; padding: 10px;">It might be good to know that the current project I&#8217;m working on is from a client who has his own dedicated Windows2003 Server which I co-administer. On that server, IIS is configured to serve several sites over HTTP and one Sharepoint Portal over HTTPS. RDP access is available to me (<em>only after establishing a VPN connection first</em>) thus I basically have full access to the server.</p>
<p>Now, the idea I came up with was to create a new Dropbox account for the project (<em>from here on named <code>dropbox-project</code></em>) and <strong>share</strong> the folder containing the project&#8217;s web files of my Dropbox (<em>from here on named <code>dropbox-bramus</code></em>) with <code>dropbox-project</code>. By that <code>dropbox-project</code> will always have the latest files from <code>dropbox-bramus</code> (<em>and vice versa</em>)</p>
<p style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/dropbox-sharing.gif" alt="" title="Dropbox-sharing" width="500" height="247" class="alignnone size-full wp-image-1853" /><br /><em>The two Dropbox accounts, sharing 14MB in total.</em></p>
<p>By using the sharing functionality I&#8217;d also be keeping my personal files (<em>and files from other projects</em>) private from <code>dropbox-project</code> (which is the whole idea behind the sharing feature, otherwise I&#8217;d just add the client his server as a computer that connects to <code>dropbox-bramus</code>)</p>
<p style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/dropbox-sharing-folderview.gif" alt="" title="dropbox-sharing-folderview" width="436" height="339" class="alignnone size-full" /><br /><em>The two Dropbox accounts, folder comparison.</em></p>
<p>After having shared the files I&#8217;d install the Dropbox Client onto the client&#8217;s server and configure it to connect to <code>dropbox-project</code>. By this the server will always have the newest files whenever I save a new version on my computer.</p>
<p>The final step then would be to configure the webserver (IIS in this case) in such a manner that the Document Root of the <code>http://www.project.com/</code> site points to the Dropbox Folder. By this the site will immediately be updated whenver I save a file in <code>dropbox-bramus</code>. As an extra, files that are uploaded via the site will appear into <code>dropbox-project</code>, and thus <code>dropbox-bramus</code> too <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>
<h2>The procedure</h2>
<div class="BramusBlock">
<p class="alert">Although this guide is written for Windows Server running IIS it can easily be transformed to Windows Server running Apache. The only difference is that step 2 will differ (<em>I&#8217;ve written down instructions for IIS</em>)</p>
<p><strong>UPDATE 2011.10.04:</strong> Joe Hewitt has <a href="http://joehewitt.com/2011/10/03/dropbox-is-my-publish-button">instructions on how to configure/install a likewise setup on a Linux host</a>.</p>
<p>It only takes three steps in order to get your Dropbox running as a Web Publishing solution. However, you won&#8217;t be able to do so if you don&#8217;t have full access to the server.</p>
<ol>
<li>Installing Dropbox on the server</li>
<li>Sharing data between multiple Dropbox accounts</li>
<li>Configuring the webserver</li>
<li>Running Dropbox as a service</li>
</ol>
<h3>1. Installing Dropbox on the server</h3>
<div class="BramusBlock">
<p>This is the most easy step there is:</p>
<ul>
<li>Start a Remote Desktop connection to the server</li>
<li>On the server, download the Dropbox client from <a href="https://www.getdropbox.com/referrals/NTM5Mzk3Mzk">getdropbox.com</a> and install it.</li>
<li>During the install, choose a custom location for your Dropbox if you want to (<em>I chose to locate the dropbox on the D drive, as all webfiles of all the virtual servers are located on that drive</em>). Note that when &#8211; for example &#8211; you choose <code>D:\path\to\my\site\</code> as the Dropbox path, it will be located in <code>D:\path\to\my\site\My Dropbox</code>. This is something that cannot be prevented unfortunately <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </li>
<li>Once installed configure Dropbox to log in with the <code>dropbox-project</code> account</li>
</ul>
<p><em>Don&#8217;t close your RDP session yet, we&#8217;ll still need to tweak some stuff on the server <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </em></p>
<p class="download-link" style="height: auto; padding: 10px;"><em>Note:</em> If you are obsessed with having your data of your virtual servers tightly structured (<em>and you are an advanced user</em>) you can use <a href="http://wiki.getdropbox.com/TipsAndTricks/SyncOtherFolders">a symlink in order to have your <code>wwwroot</code>/<code>default_www</code> outside your &ldquo;My Dropbox&rdquo; folder</a>.</p>
</div>
<h3>2. Sharing data between multiple Dropbox accounts</h3>
<div class="BramusBlock">
<h4>2.1 Send an invite from your main account to share a folder with your project account</h4>
<ul>
<li>Go to <a href="https://www.getdropbox.com/referrals/NTM5Mzk3Mzk">getdropbox.com</a> and log in with your main Dropbox account (in my case <code>dropbox-bramus</code>)</li>
<li>Navigate to the folder(s) you want to share (<em>most likely the ones with the <code>default_www</code>/<code>wwwroot</code> files in</em>) and select &ldquo;Share this&rdquo; from the toolbar
<div style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/dropbox-share.gif" alt="" title="dropbox-share" width="500" height="97" class="aligncenter size-full wp-image-1859" style="border: 1px solid #E8E8E8; margin-top: 10px;" /></div>
</li>
<li>Type in the e-mailaddress you registered <code>dropbox-project</code> with, in order to invite that user and finally click on the &ldquo;Share Folder&rdquo; button.</li>
</ul>
<h4>2.2 Accept the invite with your project account in order to access the share</h4>
<ul>
<li>Log out out of <a href="https://www.getdropbox.com/referrals/NTM5Mzk3Mzk">getdropbox.com</a> and then log in with your Project Dropbox account (in my case <code>dropbox-project</code>)</li>
<li>As the &ldquo;Recent Event&rdquo; listing you&#8217;ll see a notification of an invite. Click on it
<div style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/dropbox-recentevents.gif" alt="" title="dropbox-recentevents" style="border: 1px solid #E8E8E8; margin-top: 10px;" width="436" height="79" class="aligncenter size-full wp-image-1860" /></div>
</li>
<li>At the invite screen click on the Accept button and the folder will appear in your Dropbox</li>
</ul>
</div>
<h3>3. Configuring the webserver</h3>
<div class="BramusBlock">
<p class="alert"><strong>CAUTION:</strong> Be sure to set the proper read/write permissions for your <code>IIS_USR</code> (<em>or user running the Application Pool</em>) on the Dropbox Folder if needed! If you do not do this it could be possible that uploads don&#8217;t work anymore or &#8211; even worse &#8211; that your entire site doesn&#8217;t work anymore.</p>
<ul>
<li>If you&#8217;ve closed your RDP session with the server, re-open it</li>
<li>You&#8217;ll notice that Dropbox will tell you that several files got updated, this is the sharing in action <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Now, open up IIS, go to the properties of your virtual server and point your IIS home directory to (a folder in) your Dropbox Folder and press OK.
<div style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/iis-home-directory.gif" alt="" title="iis-home-directory" width="461" height="453" class="alignnone size-full wp-image-1861" style="margin-top: 10px;" /></div>
</li>
<li>Navigate to your site and verify that it&#8217;s working</li>
<ul>
<p>If you want you can perform a little test (<strong>Make sure your RDP connection to the server is established!</strong>):</p>
<ul>
<li>Open up a file on your computer (or on the server), edit it and save it.</li>
<li>Verify that both the server and your computer have the updated file</li>
<li>Verify that the file actually got updated on the URL</li>
</ul>
<p>Kewl, it&#8217;s working! We have just built our free Web Publishing solution &#8230; <strong>or haven&#8217;t we?</strong></p>
</div>
<h3>Why it it&#8217;s working now and won&#8217;t work anymore.</h3>
<div class="BramusBlock">
<p>The Dropbox Client is a program that starts whenever your log in (<em>check <code>Start &gt; Programs &gt; Startup</code>, you&#8217;ll see a link to Dropbox.exe there</em>). With the RDP connection open, we are obviously logged in to the server, thus Dropbox is running. However, when closing your RDP session (viz. logging out), the Dropbox Client won&#8217;t run anymore.</p>
<p>You can test this yourself: close your still open RDP connection and edit a file on your local computer. Then go online to see the changes, yet you wont see them. When you then establish an RDP connection, you&#8217;ll see the files getting updated.</p>
</div>
<h3>What now?</h3>
<div class="BramusBlock">
<p>So, what now? Quite simple: make it so that Dropbox.exe is ran whenever the server is running. Even with no users logged in.</p>
<p>Hmmz, now that sounds oddly familiar:</p>
<blockquote><p><strong><a href="http://en.wikipedia.org/wiki/Windows_service">Windows Service</a></strong>:</p>
<p>&ldquo;<em>On Microsoft Windows operating systems, <strong>a Windows service is a long-running executable</strong> that performs specific functions and which is designed not to require user intervention. Windows services <strong>can be configured to start when the operating system is booted and run in the background as long as Windows is running</strong>, or they can be started manually when required. They are similar in concept to a Unix daemon.</em>&rdquo;</p>
</blockquote>
</div>
<h3>4. Running Dropbox as a Service</h3>
<div class="BramusBlock">
<p class="download-link" style="height: auto; padding: 10px;"><em>Note</em>: this guide (<em>Abstracted from <a href="http://www.msfn.org/board/How-to-run-a-program-as-a-Service-t83272.html">the MSFN forums</a>.</em>) can be applied to any application. Heck, if you want you can even run notepad as a service!</p>
<p>In order to run Dropbox as a Service, we can use <code>instsrv.exe</code> and <code>srvany.exe</code>, both tools provided by Microsoft (<em>published as part of the Resource Kits</em>).</p>
<p>If these files are not on your server, you can <a href="http://www.tacktech.com/download.cfm?file=microsoft/service/srvany.zip">download them</a>. In my case they already were on the server, more precisely in the <code>C:\Program Files\Windows Resource Kits\Tools\</code> folder.</p>
<ol>
<li>Remove the link to Dropbox.exe from the Startup folder. By this Dropbox doesn&#8217;t get run when you log in over RDP.</li>
<li>Right click the Dropbox icon in your system tray and select Exit. By this we close the running Dropbox Client (no fear, we&#8217;re going to start it soon again).</li>
<li>Create a new DOS command prompt and run the following command
<pre class="brush: plain; title: ; notranslate">path\instsrv.exe Dropbox path\srvany.exe</pre>
<p>
where <em>path</em> is the path to where instrv.exe and srvany.exe are located and <em>Dropbox</em> is the service we are about to create. If all goes well you&#8217;ll see a result like this:</p>
<div style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/Dropbox-Service.gif" alt="" title="Dropbox-Service" width="668" height="183" class="alignnone size-full" style="margin-top: 10px;" /></div>
</li>
<li>Open up regedit and locate the following key (<em>Replace Dropbox by the service name you chose in step 2</em>):
<pre class="brush: plain; title: ; notranslate">HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Dropbox</pre>
<p>Right click that key in the left column, select &ldquo;Edit&rdquo;, select &ldquo;Add Key&rdquo; and name it <code>Parameters</code></p>
<p>In the newly created Parameters key, add a new Value (<em>again from the edit menu</em>)with the following settings:
<ul>
<li>Value Name: <code>Application</code></li>
<li>Data Type: <code>REG_SZ</code></li>
<li>String: <code>C:\Program Files\Dropbox\Dropbox.exe</code></li>
</ul>
<p>You should end up with a structure like this:</p>
<div style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/Dropbox-Service-Regedit.gif" alt="" title="Dropbox-Service-Regedit" width="592" height="255" class="alignnone size-full" style="margin-top: 10px;" /></div>
</li>
<li>
<p>Open up <code>services.msc</code> and locate the <em>Dropbox</em> service which is not running yet.</p>
<p style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/Dropbox-Service-mmc-1.gif" alt="" title="" style="border: 1px solid #E8E8E8;" /></p>
<p>Right click it and select properties.</p>
<p>In the first tab, set <code>startup type</code> to <code>Automatic</code></p>
<p style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/Dropbox-Service-mmc-2.gif" alt="" title="" /></p>
<p>In the second tab, let the service run under a specified account (<em>most likely with administrator privileges &#8211; <strong>SEE NOTE BELOW</strong></em>)</p>
<p style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/Dropbox-Service-mmc-3.gif" alt="" title="" /></p>
<p>Click OK and start the service</p>
<p style="text-align: center;"><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/Dropbox-Service-mmc-4.gif" alt="" title="" style="border: 1px solid #E8E8E8;" /></p>
<p>Do a little test by closing your RDP connection and editing a file locally. If the file also has changed on the site itself, then it&#8217;s working. If not, check your event log (<code>Start &gt; Run &gt; Eventvwr</code>)</p>
<p><strong>That&#8217;s it, we&#8217;ve successfully installed Dropbox as a Service &#8211; and along with that we&#8217;ve created our own $0 Web Publishing solution <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
</li>
</ol>
<div class="alert" style="margin-bottom: 14px;">
<p><strong>Important Note</strong>: At the MSFN forums I read:</p>
<blockquote><p><em>One problem I ran into with this method was task tray entries. Some programs won&#8217;t work if their task tray entry fails. If the software you want to run wants to put an icon in the task tray you can try enabling &#8220;Allow service to interact with the desktop&#8221; on the &#8220;Log On&#8221; tab of the Service properties. If that doesn&#8217;t work you could also try disabling the task tray entry for the program.</em></p></blockquote>
<p>I first tried that and the service started indeed. However, syncing did not work. Therefore I chose to run the service as an other user, which has admin privileges (as described above). By this I&#8217;m certain that the Dropbox service will have read/write privileges on the Dropbox folder.</p>
</div>
</div>
</div>
<h2>Help; It&#8217;s not working, I&#8217;m running IIS7/Apache, etc.</h2>
<div class="BramusBlock">
<p>I&#8217;m quite sure you&#8217;ll find a way of getting it to run. If you find it, feel free to document it and ping this post.</p>
</div>
<h2>Make a donation</h2>
<div class="BramusBlock">
<p>It certainly is no obligation but it would put a smile on my face <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" style="border: 0;" name="submit" alt="Make a donation" /><img alt="" style="border: 0;" src="https://www.paypal.com/nl_NL/i/scr/pixel.gif" width="1" height="1" /><br />
<input type="hidden" name="cmd" value="_xclick" style="display: none;" />
<input type="hidden" name="business" value="paypal@bram.us" style="display: none;" />
<input type="hidden" name="item_name" value="Bram Van Damme (Bram.us)" style="display: none;" />
<input type="hidden" name="no_shipping" value="0" style="display: none;" />
<input type="hidden" name="no_note" value="1" style="display: none;" />
<input type="hidden" name="currency_code" value="EUR" style="display: none;" />
<input type="hidden" name="tax" value="0" style="display: none;" />
<input type="hidden" name="lc" value="BE" style="display: none;" />
<input type="hidden" name="bn" value="PP-DonationsBF" style="display: none;" /></form>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2008/12/15/using-dropbox-as-a-free-web-publishing-solution/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Enabling Image Upload in Staff Panel of Kayako Support Suite</title>
		<link>http://www.bram.us/2008/12/09/enabling-image-upload-in-staff-panel-of-kayako-support-suite/</link>
		<comments>http://www.bram.us/2008/12/09/enabling-image-upload-in-staff-panel-of-kayako-support-suite/#comments</comments>
		<pubDate>Tue, 09 Dec 2008 16:05:28 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[kayako]]></category>
		<category><![CDATA[supportsuite]]></category>
		<category><![CDATA[upload]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1836</guid>
		<description><![CDATA[When it comes to features and functionality Kayako Supportsuite is a fine product indeed. One of the things that is lacking though is the ability to upload new images to the server in order for you to insert them into &#8230; <a href="http://www.bram.us/2008/12/09/enabling-image-upload-in-staff-panel-of-kayako-support-suite/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/kayako-supportsuite.gif" style="display: block; width: 80px; height: 80px; float: left; margin: 0 10px 10px 0;" alt="" title="" />When it comes to features and functionality <a href="http://www.kayako.com/solutions/supportsuite/">Kayako Supportsuite</a> is a fine product indeed. One of the things that is lacking though is the ability to upload new images to the server in order for you to insert them into a KB article for example. Took me a little while, but I found out how to enable the functionality straight into the WYSIWYG editor that comes with Kayako (which is the extremely outdated HTMLArea). Quite sure I&#8217;ll be making some other guys out there very happy with this guide, as this is a much requested feature <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <br style="clear: both;" /></p>
<p><span id="more-1836"></span></p>
<h2>Obtaining and installing the needed HTMLArea Image Manager  Plugin</h2>
<div class="BramusBlock">
<ul>
<li>Download HTMLArea Image Manager from <a href="http://sourceforge.net/projects/imgmngedt">http://sourceforge.net/projects/imgmngedt</a> (<em><a href="http://downloads.sourceforge.net/imgmngedt/htmlarea_wei_01_04_2004.zip?modtime=1080777600&#038;big_mirror=0">ddl</a></em>)</li>
<li>Open the archive and extract the <code>ImageManager</code> folder from <code>Copy of htmlarea_wei_31_03_2004/plugins/</code> in the archive to <code>yourKayakoInstallPath/includes/htmlArea/plugins/</code> so that you end up with the following directory structure: <code>yourKayakoInstallPath/includes/htmlArea/plugins/ImageManager/</code></li>
<li>Open up the freshly extracted <code>yourKayakoInstall/includes/htmlArea/plugins/ImageManager/config.inc.php</code> and change the <code>$IMConfig['base_dir']</code> and <code>$IMConfig['base_url']</code> variables to reflect your setup. The other params in the config file can be changed but in most cases they&#8217;ll work <em>out of the box</em>.</li>
<li>Save that file and you&#8217;re done.</li>
</ul>
<p>For example: if we want our images to be located at <code>http://support.company.com/images/</code> then we configure the two params as so:</p>
<pre class="brush: php; title: ; notranslate">$IMConfig['base_url'] = 'http://support.company.com/images'; // no trailing slash!
$IMConfig['base_dir'] = '/home/support/default_www/images'; // no trailing slash!
</pre>
<p class="alert"><strong>IMPORTANT:</strong> Don&#8217;t forget to set the write permissions on the path!</p>
</div>
<h2>Loading the needed HTMLArea Image Manager  Plugin</h2>
<div class="BramusBlock">
<ul>
<li>Locate <code>yourKayakoInstallPath/themes/admin_default/cpheader.tpl</code> and find the line where it reads <code>//HTMLArea.loadPlugin("TableOperations");</code> (line 53)</li>
<li>On the next line, insert:
<pre class="brush: php; title: ; notranslate">&lt;{if $htmlarea eq true}&gt;HTMLArea.loadPlugin(&quot;ImageManager&quot;);&lt;{/if}&gt;</pre>
</li>
<li>Save that file and you&#8217;re done.</li>
</ul>
<p class="alert">It could be possible that you need to rebuild your Kayako SupportSuite cache: From the admin zone, navigate to <code>Diagnostics</code> in the left tree and select <code>Rebuild Cache</code></p>
</div>
<h2>The Result</h2>
<div class="BramusBlock">
<p>Now, when writing a KB article (for example) and with the WYSIWYG editor enabled, the functionality of the Insert Image Icon will be replaced: instead of entering an URL to an existing image, you&#8217;ll now see an image browser from where you can upload new files onto the server.</p>
<p style="text-align: center;"><a href='http://www.bram.us/wordpress/wp-content/uploads/2008/12/kayako-supportsuite-upload.jpg'><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/12/kayako-supportsuite-upload.jpg" alt="" title="kayako-supportsuite-upload" width="500" height="406" /></a></p>
</div>
<h2>My advice to Kayako</h2>
<div class="BramusBlock">
<p>Dear Kayako,</p>
<p>it would be awesome of you guys to drop HTMLArea in the 4.0 release of SupportSuite in favor of using TinyMCE with the addition of a little custom plugin in order to enable image upload. (<em>If you need any help on this, feel free to contact me.</em>)</p>
<p>Now that I have your attention: I&#8217;m quite sure the new release &#8211; <em>whenever it comes out</em> &#8211; will have a full XHTML overhaul, along with a spiffy new design; Just like <a href="http://www.kayako.com/">your new website</a> which totally rocks.</p>
<p>The addition of some clever usage of Ajax throughout the staff and admin areas (<em>drag and drop to sort items for example</em>) also is on my wishlist, yet given your new website I&#8217;m quite sure you&#8217;ll manage.</p>
<p>Regards, and keep up the good work.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2008/12/09/enabling-image-upload-in-staff-panel-of-kayako-support-suite/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PS_BRAMUS.TextConvert: PSD2TXT and TXT2PSD for the masses!</title>
		<link>http://www.bram.us/2008/10/30/ps_bramustextconvert-psd2txt-and-txt2psd-for-the-masses/</link>
		<comments>http://www.bram.us/2008/10/30/ps_bramustextconvert-psd2txt-and-txt2psd-for-the-masses/#comments</comments>
		<pubDate>Thu, 30 Oct 2008 17:40:47 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[import]]></category>
		<category><![CDATA[photoshop]]></category>
		<category><![CDATA[psd2txt]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[txt2psd]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1821</guid>
		<description><![CDATA[What if you could extract all text strings from a PSD file into a TXT file? Sure, it&#8217;s possible, thanks to PS_BRAMUS.TextExport, the PSD2TXT script I wrote a few months ago. Now, what if you wanted to do that in &#8230; <a href="http://www.bram.us/2008/10/30/ps_bramustextconvert-psd2txt-and-txt2psd-for-the-masses/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img alt="JSX" title="JSX" id="image240b" style="margin: 0px 10px 5px 0px; display: block; float: left" src="http://www.bram.us/wordpress/wp-content/uploads/2006/08/jsxfile1.gif" />What if you could extract all text strings from a PSD file into a TXT file? Sure, it&#8217;s possible, thanks to <code><a href="http://www.bram.us/2008/03/16/ps_bramustextexport-13-automatically-export-all-text-layers-from-photoshop-psd-to-a-text-file/">PS_BRAMUS.TextExport</a></code>, the PSD2TXT script I wrote a few months ago. Now, what if you wanted to do that in the opposite direction and import strings from a TXT file into a PSD file (viz. TXT2PSD)? Look no further, <code>PS_BRAMUS.TextConvert</code> is here, and does both!<br style="clear: both;" /></p>
<p><span id="more-1821"></span></p>
<h2 style="margin-top: 25px;">What is <code>PS_BRAMUS.TextConvert</code></h2>
<div class="BramusBlock">
<p class="alert">Don&#8217;t like reading? Member of the lazyweb? Savvy enough? You might as well just <a href="#example">skip to the example</a> then <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><code>PS_BRAMUS.TextConvert</code> is the successor of <code>PS_BRAMUS.TextExport</code> and consists out of two scripts:</p>
<ol>
<li><code>PS_BRAMUS.TextConvert.Export</code> (PSD2TXT)</li>
<li><code>PS_BRAMUS.TextConvert.Import</code> (TXT2PSD)</li>
</ol>
<p>The first script is a modded version of <code>PS_BRAMUS.TextExport</code> which scans your PSD file for text strings. After retrieving all text, the output is saved into a TXT file in your Documents folder.</p>
<p>The second script is the counterpart: it reads in TXT files (which you first exported via the first script) and replaces all text layers with the new content in your PSD file.</p>
</div>
<h2 style="margin-top: 25px;">Is <code>PS_BRAMUS.TextConvert</code> something for me?</h2>
<div class="BramusBlock">
<p><code>PS_BRAMUS.TextConvert</code> is ideal for agencies/companies who need to translate Photoshop mockups: Export all text layers via <code>PS_BRAMUS.TextConvert.Export</code> to a text file, send that text file to the translation agency and let them do the translation, then import the translated file via <code>PS_BRAMUS.TextConvert.Import</code> into the PSD file.</p>
<p><img src="http://farm4.static.flickr.com/3253/2986296259_94f1b5934a_o.gif" alt="PS_BRAMUS.TextConvert" title="PS_BRAMUS.TextConvert"/></p>
<p>Of course its usage is not limited to the example above. The <code>Export</code> part of <code>PS_BRAMUS.TextConvert</code> can be used for (speed)slicing for example</p>
</div>
<h2 style="margin-top: 25px;">Requirements</h2>
<div class="BramusBlock">
<ul>
<li>Photoshop CS2 or newer is required</li>
<li><code>PS_BRAMUS.TextConvert</code> has been tested and verified working with Photoshop CS2 and CS3 (<em>CS4 untested but should work. Can anyone verify?</em>)</li>
</ul>
</div>
<h2 id="download" style="margin-top: 25px;">Download / License</h2>
<div class="BramusBlock">
<p><code>PS_BRAMUS.TextConvert</code> released under a <a href="http://creativecommons.org/licenses/by-sa/2.5/">creative commons Attribution-ShareAlike 2.5 license</a>. Should you use the script within a commercial context, or for any other reason you fancy, please consider <a href="#donate">clicking the PayPal donate button</a>.</p>
<p style="text-align: center;"><a href="http://www.bram.us/wordpress/wp-content/uploads/2008/10/ps_bramustextconvert-10.zip" class="button button-big"><strong>&#9660;</strong> Download PS_BRAMUS.TextConvert 1.0</a></p>
<p><small>Note: <code>PS_BRAMUS.TextConvert</code> was made possible by means of <a href="http://www.lexiapark.com/">lexia:park</a>, Barcelona, Spain.</small></p>
</div>
<h2 style="margin-top: 25px;">Installation</h2>
<div class="BramusBlock">
<ul>
<li>Download <code>PS_BRAMUS.TextConvert</code> from the link above</li>
<li>Extract it to the <em>Presets/Scripts</em> folder of your Photoshop installation folder (<em>defaults to <code>C:\Program Files\Adobe\Adobe Photoshop CS3\Presets\Scripts</code> on Windows</em>)</li>
<li>Restart Photoshop if it was already running (<strong>important!</strong>)</li>
</ul>
</div>
<h2 style="margin-top: 25px;">How to use <code>PS_BRAMUS.TextConvert</code></h2>
<div class="BramusBlock">
<p>Once installed, usage is simple:</p>
<h3>1. Exporting text (PSD2TXT)</h3>
<p><a href='http://farm4.static.flickr.com/3217/2987196938_c0e86a4351_o.jpg' title='PS_BRAMUS.TextConvert.Export' style='display: block; margin: 0 0 12px 12px; float: right;' rel='lightbox[textconvert1]'><img src='http://farm4.static.flickr.com/3217/2987196938_0e7de52fd2_m.jpg' alt='PS_BRAMUS.TextConvert.Export' style='display: block;  margin: 0 auto 0;' /></a></p>
<ul>
<li>In Photoshop go to <em>File</em> &gt; <em>Scripts</em> and select <code>PS_BRAMUS.TextConvert.Export-1.0</code> from the list to export all text.</li>
<li>Per open PSD file, a <em><code>TextConvert-[NAME_OF_YOUR_PSD_FILE].txt</code></em> file will appear in your Documents folder<br />(<em>if multiple files are open, you can choose to only run <code>PS_BRAMUS.TextConvert.Export</code> on the currently active file or on all files</em>)</li>
<li>After the export was done, you&#8217;ll get a little notification of this<br />(<em>if  <code>PS_BRAMUS.TextConvert.Export</code> ran with a single file, the .txt file will open instead)</em></li>
</ul>
<h3>2. Reworking text</h3>
<ul>
<li>Locate the exported .txt file in your Documents folder and open it with your favorite text editor</li>
<li>Translate the strings you find in there, but make sure that you leave the <code>[BEGIN /XXXX ]</code> and <code>[END /XXXX ]</code> lines untouched! (<em>If changed importing will fail</em>)</li>
<li>Save the text file with the same name in the same location.</li>
</ul>
<h3>3. Importing text (TXT2PSD)</h3>
<p><a href='http://farm4.static.flickr.com/3047/2986340185_4876c7eed5_o.jpg' title='PS_BRAMUS.TextConvert.Import' style='display: block; margin: 0 0 12px 12px; float: right;' rel='lightbox[textconvert1]'><img src='http://farm4.static.flickr.com/3047/2986340185_f83f4bcce9_m.jpg' alt='PS_BRAMUS.TextConvert.Import' style='display: block;  margin: 0 auto 0;' /></a></p>
<ul>
<li>In Photoshop go to <em>File</em> &gt; <em>Scripts</em> and select <code>PS_BRAMUS.TextConvert.Import-1.0</code> from the list to import all text.</li>
<li>Per open PSD file, the script will look if the <em><code>TextConvert-[NAME_OF_YOUR_PSD_FILE].txt</code></em> file exists in your Documents folder, read it in (if it exists) and update the text layers of your PSD file<br />(<em>if multiple files are open, you can choose to only run <code>PS_BRAMUS.TextConvert.Import</code> on the currently active file or on all files</em>)</li>
<li>After the import was done, you&#8217;ll get a little notification of the number of files updated<br /><em>(if no txt files were found, then it will state that 0 files where changed)</em></li>
</ul>
<h3>Warning!</h3>
<ul>
<li>Please note that <code>PS_BRAMUS.TextConvert.Import</code> is not compatible with any version <code>PS_BRAMUS.TextExport</code>!</li>
<li>Please note that in between the running of the Export and Import <strong>NO CHANGES TO THE PSD FILE</strong> can be done!</li>
</ul>
</div>
<h2 id="example" style="margin-top: 25px;">Example</h2>
<div class="BramusBlock">
<p>Given the fact that the image pictured on the left is a normal Photoshop file (<em>viz. background layer, image elements on different layers, text layers, layer groups, etc</em>) I&#8217;m quite sure the figure below explains it all:</p>
<p><a href="http://farm4.static.flickr.com/3293/2986442779_3990e5b069_o.jpg" title="PS_BRAMUS.TextConvert.Example" rel="lightbox[textconvert1]"><img src="http://farm4.static.flickr.com/3293/2986442779_f250edfd2a.jpg?v=1225387823" alt="PS_BRAMUS.TextConvert.Example" /></a></p>
<p>Now, did you <a href="#download">download</a> <code>PS_BRAMUS.TextConvert</code> already?</p>
</div>
<h2 id="donate" style="margin-top: 25px;">Make a donation</h2>
<div class="BramusBlock">
<p>It certainly is no obligation but it would most certainly put a smile on my face <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but04.gif" style="border: 0;" name="submit" alt="Make a donation" /><img alt="" style="border: 0;" src="https://www.paypal.com/nl_NL/i/scr/pixel.gif" width="1" height="1" /><br />
<input type="hidden" name="cmd" value="_xclick" style="display: none;" />
<input type="hidden" name="business" value="paypal@bram.us" style="display: none;" />
<input type="hidden" name="item_name" value="Bram Van Damme (Bram.us)" style="display: none;" />
<input type="hidden" name="no_shipping" value="0" style="display: none;" />
<input type="hidden" name="no_note" value="1" style="display: none;" />
<input type="hidden" name="currency_code" value="EUR" style="display: none;" />
<input type="hidden" name="tax" value="0" style="display: none;" />
<input type="hidden" name="lc" value="BE" style="display: none;" />
<input type="hidden" name="bn" value="PP-DonationsBF" style="display: none;" /></form>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2008/10/30/ps_bramustextconvert-psd2txt-and-txt2psd-for-the-masses/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>jQuery.serializeAnything : Serialize anything (and not just forms!)</title>
		<link>http://www.bram.us/2008/10/27/jqueryserializeanything-serialize-anything-and-not-just-forms/</link>
		<comments>http://www.bram.us/2008/10/27/jqueryserializeanything-serialize-anything-and-not-just-forms/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 16:39:51 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[serialize]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1703</guid>
		<description><![CDATA[Code snippet I found somewhere in my archive: jQuery.serializeAnything() is a jQuery Extension that serializes any element you specify, in contrast to jQuery&#8217;s builtin serialize() function which is limited to serializing form elements only. Usage is simple: place the contents &#8230; <a href="http://www.bram.us/2008/10/27/jqueryserializeanything-serialize-anything-and-not-just-forms/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="/wordpress/wp-content/uploads/2008/10/jquery.gif" style="display: block; float: left; margin: 0 10px 10px 0;" alt="" title="" />Code snippet I found somewhere in my archive: <code>jQuery.serializeAnything()</code> is a jQuery Extension that serializes any element you specify, in contrast to jQuery&#8217;s builtin <code><a href="http://docs.jquery.com/Ajax/serialize">serialize()</a></code> function which is limited to serializing <code>form</code> elements only.<br style="clear: both;" /></p>
<p><span id="more-1703"></span></p>
<pre class="brush: jscript; title: ; notranslate">/* @projectDescription jQuery Serialize Anything - Serialize anything (and not just forms!)
 * @author Bramus! (Bram Van Damme)
 * @version 1.0
 * @website: http://www.bram.us/
 * @license : BSD
*/
(function($) {
	$.fn.serializeAnything = function() {
		var toReturn	= [];
		var els 		= $(this).find(':input').get();
		$.each(els, function() {
			if (this.name &amp;&amp; !this.disabled &amp;&amp; (this.checked || /select|textarea/i.test(this.nodeName) || /text|hidden|password/i.test(this.type))) {
				var val = $(this).val();
				toReturn.push( encodeURIComponent(this.name) + &quot;=&quot; + encodeURIComponent( val ) );
			}
		});
		return toReturn.join(&quot;&amp;&quot;).replace(/%20/g, &quot;+&quot;);
	}
})(jQuery);</pre>
<p>Usage is simple: place the contents above in a .js file (<code>jquery.serializeanything.js</code> for example), refer to that file from your head element AFTER you referenced the <code>jquery.js</code> file, and use it just as you would call the <code>serialize()</code> function in your code: <code>$('#myElement').serializeAnything()</code>.</p>
<p>Hf!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2008/10/27/jqueryserializeanything-serialize-anything-and-not-just-forms/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>GM_BRAMUS.in.spire.us, v2 &#8211; Preview thumbnails for Delicious!</title>
		<link>http://www.bram.us/2008/10/15/gm_bramusinspireus-v2-preview-thumbnails-for-delicious/</link>
		<comments>http://www.bram.us/2008/10/15/gm_bramusinspireus-v2-preview-thumbnails-for-delicious/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 21:25:14 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[delicious]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[preview]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1814</guid>
		<description><![CDATA[For all you GreaseMonkey lovers out there: GM_BRAMUS.in.spire.us got updated to work with the *new* Delicious! Head over to http://userscripts.org/scripts/show/8020 to install this new version]]></description>
			<content:encoded><![CDATA[<p><img id="image430" src="http://www.bram.us/wordpress/wp-content/uploads/2007/03/gm_bramus.gif" alt="GM_BRAMUS" title="GM_BRAMUS" style="margin: 0px 10px 5px 0px; display: block; float: left" />For all you <a href="http://www.greasespot.net/" title="GreaseMonkey">GreaseMonkey</a> lovers out there: <a href="http://www.bram.us/2007/03/20/gm_bramusinspireus/">GM_BRAMUS.in.spire.us</a> got updated to work with the *<a href="http://blog.delicious.com/blog/2008/07/oh-happy-day.html">new</a>* <a href="http://delicious.com/">Delicious</a>! Head over to <a href="http://userscripts.org/scripts/show/8020" title="GM_BRAMUS.in.spire.us">http://userscripts.org/scripts/show/8020</a> to install this new version <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2008/10/15/gm_bramusinspireus-v2-preview-thumbnails-for-delicious/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Barcamp Ghent</title>
		<link>http://www.bram.us/2008/10/09/barcamp-ghent/</link>
		<comments>http://www.bram.us/2008/10/09/barcamp-ghent/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 12:12:36 +0000</pubDate>
		<dc:creator>Bramus!</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[barcamp]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[TinyMCE]]></category>
		<guid isPermaLink="false">http://www.bram.us/?p=1813</guid>
		<description><![CDATA[On November 29 I&#8217;ll be one of the 100 attendees at Barcamp Ghent 2. As one might expect, I&#8217;ll be doing a javascript related presentation, however I&#8217;m not quite sure what you guys want to hear me talking about. Hereby &#8230; <a href="http://www.bram.us/2008/10/09/barcamp-ghent/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.bram.us/wordpress/wp-content/uploads/2008/10/barcampghent.jpg" alt="" title="barcampghent" width="80" height="68" style="margin: 6px 10px 16px 0; float: left; display: block;" />On November 29 I&#8217;ll be one of the 100 attendees at <a href="http://en.wikipedia.org/wiki/BarCamp">Barcamp</a> <a href="http://barcampgent2.wikispaces.com/">Ghent 2</a>. As one might expect, I&#8217;ll be doing a javascript related presentation, however I&#8217;m not quite sure what you guys want to hear me talking about.<br style="clear: both;" /></p>
<p><span id="more-1813"></span></p>
<p>Hereby a small list of topics I <strong>could</strong> talk about (<em>titles are knocked up quickly, will most likely change</em>):</p>
<ul>
<li>TinyMCE hacks &#8216;n tweaks</li>
<li>Your first TinyMCE plugin</li>
<li>jQuery UI Widgets: Who, what, where and &#8211; most importantly &#8211; how (to write your own)?</li>
<li>From Prototype to jQuery (aka backdropping jQuery functionality into Prototype)<br />(<em>yes, in addition to <a href="http://www.bram.us/2008/08/11/backdropping-jquery-functions-into-prototypejs/">this article</a>, but then a bit more in depth and extensive</em>)</li>
<li>&#8230;</li>
</ul</p>
<p style="text-align: center;"><img src='http://farm3.static.flickr.com/2334/2372729440_ace035ece8.jpg?v=0' alt='' /><br /><em>Barcamp Ghent 1 (<a href="http://flickr.com/photos/bartclaeys/2372729440/">#</a>)</em></p>
<p>I myself prefer one of the last two; Which one(s) do you prefer? Or do you want me to talk about something else (&ldquo;<em>Planning your holiday, web 2.0 style</em>&rdquo; for example could be a subject to talk about)?</p>
<p>Ooh, it must be noted that the slides (not the talk) will be in English, as I&#8217;ll be posting them here too &#8230; so even if you&#8217;re not going or don&#8217;t understand Dutch, feel free to cast your vote <img src='http://www.bram.us/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Thanks,<br />B!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bram.us/2008/10/09/barcamp-ghent/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

