<?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>Andrew Odri &#187; dreamweaver</title>
	<atom:link href="http://blog.affirmix.com/category/dreamweaver/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.affirmix.com</link>
	<description>Flash Platform and Dreamweaver Stuff</description>
	<lastBuildDate>Thu, 17 Sep 2009 22:39:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Code Hinting In The Dreamweaver Extensibility API</title>
		<link>http://blog.affirmix.com/2009/05/06/code-hinting-in-the-dreamweaver-extensibility-api/</link>
		<comments>http://blog.affirmix.com/2009/05/06/code-hinting-in-the-dreamweaver-extensibility-api/#comments</comments>
		<pubDate>Wed, 06 May 2009 23:49:12 +0000</pubDate>
		<dc:creator>Andrew Odri</dc:creator>
				<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[auto]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[coloring]]></category>
		<category><![CDATA[completion]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[extensibility]]></category>
		<category><![CDATA[hinting]]></category>

		<guid isPermaLink="false">http://blog.affirmix.com/?p=246</guid>
		<description><![CDATA[
After many battles with the quirks in the Dreamweaver API, code completion is now working quiet nicely. After trawling through the code hinting documentation, and getting some help from the Adobe team, it turns out that it&#8217;s actually not all that difficult to get working if you adhere closely to a prescribed structure. 
One few [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/876b311c32bc49539e659eda5312d631" alt="Dreamweaver Code Hints" /></p>
<p>After many battles with the quirks in the Dreamweaver API, code completion is now working quiet nicely. After trawling through the <a href="http://help.adobe.com/en_US/Dreamweaver/10.0_Extending/WS5b3ccc516d4fbf351e63e3d117f53d62b7-7fd7.html" target="_blank">code hinting documentation</a>, and getting some help from the Adobe team, it turns out that it&#8217;s actually not all that difficult to get working if you adhere closely to a prescribed structure. <span id="more-246"></span></p>
<p>One few thing to keep in mind: start off simple. Don&#8217;t add any language or file restrictions in until everything is proven to work. I learn best from examples, so here is an example that defines packages and classes, which use static properties and methods, as well as and instance properties and methods:</p>
<pre><code>&lt;codehints xmlns:MMString=&quot;http://www.adobe.com/schemes/data/string/&quot;&gt;
	&lt;menugroup MMString:name=&quot;CodeHints_Example&quot; id=&quot;CodeHints_Example&quot; name=&quot;Example Code Hints&quot; enabled=&quot;true&quot;&gt;
		&lt;description&gt;
			&lt;![CDATA[Example Code Hints]]&gt;
		&lt;/description&gt;
		&lt;!--
			This is how a package is defined.
				- Each tier must be defined by an independant menu element
				- The pattern attribute must be used
				- The pattern value must be followed by a dot
		--&gt;
		&lt;menu pattern=&quot;package.&quot; casesensitive=&quot;true&quot;&gt;
			&lt;menuitem label=&quot;firsttier&quot; icon=&quot;shared/mm/images/hintPackage.gif&quot; /&gt;
		&lt;/menu&gt;
		&lt;menu pattern=&quot;package.firsttier.&quot; casesensitive=&quot;true&quot;&gt;
			&lt;menuitem label=&quot;secondtier&quot; icon=&quot;shared/mm/images/hintPackage.gif&quot; /&gt;
		&lt;/menu&gt;
		&lt;menu pattern=&quot;package.firsttier.secondtier.&quot; casesensitive=&quot;true&quot;&gt;
			&lt;menuitem label=&quot;ExampleClass&quot; icon=&quot;shared/mm/images/hintClass.gif&quot; /&gt;
		&lt;/menu&gt;
		&lt;!--
			This is how a class constructor is defined.
				- The pattern attribute must be used
				- The pattern value must be the absolute path to the class
				- The pattern value must also contain any parameters that need to be passed to the constructor
		--&gt;
		&lt;function pattern=&quot;package.firsttier.secondtier.ExampleClass(Object parameter)&quot; casesensitive=&quot;true&quot; icon=&quot;shared/mm/images/hintClass.gif&quot; /&gt;
		&lt;!--
			This is how static class members are defined.
				- The pattern value must be the absolute path to the class
				- The pattern value must be followed by a dot
				- Static properties and events must be menuitem elements that are children of the menu element
				- Static methods must be menuitem elements that are children of the menu element, with a label element the ends with an opening parenthesis
				- Static methods must also be function elements that are siblings of the menu element
				- Static methods must also contain any parameters that need to be passed to the function
		--&gt;
		&lt;menu pattern=&quot;package.firsttier.secondtier.ExampleClass.&quot; casesensitive=&quot;true&quot;&gt;
			&lt;menuitem label=&quot;staticProperty&quot; icon=&quot;shared/mm/images/hintProperty.gif&quot; /&gt;

			&lt;menuitem label=&quot;staticMethod&quot; value=&quot;staticMethod(&quot; icon=&quot;shared/mm/images/hintFunction.gif&quot; /&gt;
		&lt;/menu&gt;
		&lt;function pattern=&quot;package.firsttier.secondtier.ExampleClass.staticMethod(Integer id, String value)&quot; icon=&quot;shared/mm/images/hintFunction.gif&quot; /&gt;
		&lt;!--
			This is how instance class members are defined.
				- The classpattern attribute must be used, and not the pattern attribute
				- The classpattern value must be the absolute path to the class
				- Instance properties must be property elements that are children of the menu element
				- Instance methods must be function elements that are children of the menu element
				- Instance methods must also contain any parameters that need to be passed to the function
		--&gt;
		&lt;menu classpattern=&quot;package.firsttier.secondtier.ExampleClass&quot;&gt;
			&lt;property label=&quot;instanceProperty&quot; icon=&quot;shared/mm/images/hintProperty.gif&quot; /&gt;

			&lt;method pattern=&quot;append(ExampleClass childExampleClass)&quot; icon=&quot;shared/mm/images/hintFunction.gif&quot; /&gt;
			&lt;method pattern=&quot;remove(ExampleClass childExampleClass)&quot; icon=&quot;shared/mm/images/hintFunction.gif&quot; /&gt;
		&lt;/menu&gt;
	&lt;/menugroup&gt;
&lt;/codehints&gt;</code></pre>
<p>There are a few ways to get this up and running, and much of what you need to get going will be contained in the <a href="http://help.adobe.com/en_US/Dreamweaver/10.0_Extending/WS5b3ccc516d4fbf351e63e3d117f53d62b7-7fd7.html" target="_blank">code hints tag reference</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.affirmix.com/2009/05/06/code-hinting-in-the-dreamweaver-extensibility-api/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Live *.ste Dreamweaver Password Encoder and Decoder</title>
		<link>http://blog.affirmix.com/2009/05/05/live-ste-dreamweaver-password-encoder-and-decoder/</link>
		<comments>http://blog.affirmix.com/2009/05/05/live-ste-dreamweaver-password-encoder-and-decoder/#comments</comments>
		<pubDate>Tue, 05 May 2009 23:02:15 +0000</pubDate>
		<dc:creator>Andrew Odri</dc:creator>
				<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[decode]]></category>
		<category><![CDATA[decrypt]]></category>
		<category><![CDATA[encode]]></category>
		<category><![CDATA[encrypt]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[live]]></category>
		<category><![CDATA[online]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[recovery]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[ste]]></category>

		<guid isPermaLink="false">http://blog.affirmix.com/?p=251</guid>
		<description><![CDATA[I noticed that a lot of the traffic currently going to this post is coming from people wanting to encode and decode passwords from a *.ste file online. You can now do this using the form below:


function encodePassword(input)
{
    var top = 0;
    var output = '';

    [...]]]></description>
			<content:encoded><![CDATA[<p>I noticed that a lot of the traffic currently going to <a href="http://blog.affirmix.com/2008/08/28/encoded-passwords-in-ste-site-definition-files/">this post</a> is coming from people wanting to encode and decode passwords from a *.ste file online. You can now do this using the form below:</p>

<script type="text/javascript">
function encodePassword(input)
{
    var top = 0;
    var output = '';

    for(var i = 0; i < input.length; i++){
        var currentChar = input.charCodeAt(i);
        if(currentChar < 0 || currentChar > 0xFFFF){return(false);}
        if(top != 0){
            if(0xDC00 <= currentChar && currentChar <= 0xDFFF){
                output += dec2hex(0x10000 + ((top - 0xD800) << 10) + (currentChar - 0xDC00) + i) + '';
                top = 0;
                continue;
                // Insert alert for below failure
            }else{return(false);}
        }
        if(0xD800 <= currentChar && currentChar <= 0xDBFF){top = currentChar;}
        else{output += dec2hex(currentChar + i) + '';}
    }

    return(output);
}

function dec2hex(input){return(input+0).toString(16).toUpperCase();}

function decodePassword(input)
{
    var output = "";

    if(input.length == 0){return("");}

    for(var i = 0; i < input.length / 2; i++){
        var currentHex = parseInt(input.substr(i * 2, 2), 16);
            if(currentHex <= 0xFFFF){
                output += String.fromCharCode(currentHex - i);
            }else if(currentHex <= 0x10FFFF){
                currentHex -= 0x10000
                output += String.fromCharCode(0xD800 | (currentHex >> 10)) + String.fromCharCode(0xDC00 | (currentHex & 0x3FF) - i);
            }else{
                //Insert alert for below failure
                return(false);
        }
    }

    return(output);
}
</script>

<form style="margin-bottom: 10px;">
<label for="encoded">To to decode: <input type="text" value="" id="encoded" name="encoded" /></label><input type="button" value="Decode" id="decode" name="encode" onclick="document.getElementById('decoded').value = decodePassword(document.getElementById('encoded').value);" /><br />
<label for="decoded">To to encode: <input type="text" value="" id="decoded" name="decoded" /></label><input type="button" value="Encode" id="encode" name="decode" onclick="document.getElementById('encoded').value = encodePassword(document.getElementById('decoded').value);" /><br />
</form>]]></content:encoded>
			<wfw:commentRss>http://blog.affirmix.com/2009/05/05/live-ste-dreamweaver-password-encoder-and-decoder/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MMNotes.localURLToFilePath &amp; MMNotes.filePathToLocalURL Workaround In The Dreamweaver Extensibility API</title>
		<link>http://blog.affirmix.com/2009/04/22/mmnoteslocalurltofilepath-mmnotesfilepathtolocalurl-workaround-in-the-dreamweaver-extensibility-api/</link>
		<comments>http://blog.affirmix.com/2009/04/22/mmnoteslocalurltofilepath-mmnotesfilepathtolocalurl-workaround-in-the-dreamweaver-extensibility-api/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 00:14:57 +0000</pubDate>
		<dc:creator>Andrew Odri</dc:creator>
				<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[dwscripts]]></category>
		<category><![CDATA[extensibility]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[filepath]]></category>
		<category><![CDATA[filepathtolocalurl]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[localurl]]></category>
		<category><![CDATA[localurltofilepath]]></category>
		<category><![CDATA[mmnotes]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[workaround]]></category>

		<guid isPermaLink="false">http://blog.affirmix.com/?p=240</guid>
		<description><![CDATA[
If you have worked with the Dreamweaver Extensibility API, you may have noticed that the MMNotes.localURLToFilePath and MMNotes.filePathToLocalURL functions do not work correctly on Mac OS X.
Below is the code that I used to get around this issue:
function localURLToFilePath(localURL)
{
	return (dreamweaver.isOSX()) ? localURL.replace(/^file:\/\/\/([\d\w\s\\_-]+)(.+$)/, "/Volumes/$1$2") : MMNotes.localURLToFilePath(localURL);
}

function filePathToLocalURL(filePath)
{
	return (dreamweaver.isOSX()) ? "file://" + filePath : MMNotes.filePathToLocalURL(filePath);
}
Hope that saves [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/491151bf10914022946ce4dfee4c7896" alt="Dreamweaver Paths" /></p>
<p>If you have worked with the Dreamweaver Extensibility API, you may have noticed that the <a href="http://help.adobe.com/en_US/Dreamweaver/10.0_API_Ref/WS5b3ccc516d4fbf351e63e3d117f9e05b25-7fd7.html" target="_blank">MMNotes.localURLToFilePath</a> and <a href="http://help.adobe.com/en_US/Dreamweaver/10.0_API_Ref/WS5b3ccc516d4fbf351e63e3d117f9e05b25-7ff7.html" target="_blank">MMNotes.filePathToLocalURL</a> functions do not work correctly on Mac OS X.</p>
<p>Below is the code that I used to get around this issue:</p>
<pre><code>function localURLToFilePath(localURL)
{
	return (dreamweaver.isOSX()) ? localURL.replace(/^file:\/\/\/([\d\w\s\\_-]+)(.+$)/, "/Volumes/$1$2") : MMNotes.localURLToFilePath(localURL);
}

function filePathToLocalURL(filePath)
{
	return (dreamweaver.isOSX()) ? "file://" + filePath : MMNotes.filePathToLocalURL(filePath);
}</code></pre>
<p>Hope that saves you some time!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.affirmix.com/2009/04/22/mmnoteslocalurltofilepath-mmnotesfilepathtolocalurl-workaround-in-the-dreamweaver-extensibility-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dreamweaver Template Tutorial</title>
		<link>http://blog.affirmix.com/2008/10/14/dreamweaver-template-tutorial/</link>
		<comments>http://blog.affirmix.com/2008/10/14/dreamweaver-template-tutorial/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 05:25:01 +0000</pubDate>
		<dc:creator>Andrew Odri</dc:creator>
				<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[miscellaneous]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.affirmix.com/?p=51</guid>
		<description><![CDATA[
I just came across a simple, well written tutorial on creating and publishing templates with Dreamweaver, posted in N.Design Studio&#8217;s tutorial section. This is 101 for most web design pro&#8217;s, but many people interested in Konductor still wonder how a lot of this stuff is accomplished within Dreamweaver. This article gives you a nice overview [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/f7e6be4ddd0b4d7792b0a838d7b92268" alt="Dreamweaver Template" /></p>
<p>I just came across a <a href="http://www.ndesign-studio.com/resources/dreamweaver/dreamweaver-template/">simple, well written tutorial</a> on creating and publishing templates with Dreamweaver, posted in N.Design Studio&#8217;s tutorial section. This is 101 for most web design pro&#8217;s, but many people interested in Konductor still wonder how a lot of this stuff is accomplished within Dreamweaver. This article gives you a nice overview of what is involved in the typical design process in Dreamweaver, which should in turn give you a clearer understanding of the angle we are taking with the Konductor Dreamweaver Extension.</p>
<p>Of course a lot of the time consuming / technical / annoying stuff is made a little easier with the Konductor Extension <img src='http://blog.affirmix.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.affirmix.com/2008/10/14/dreamweaver-template-tutorial/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dreamweaver Goodness</title>
		<link>http://blog.affirmix.com/2008/10/02/dreamweaver-goodness/</link>
		<comments>http://blog.affirmix.com/2008/10/02/dreamweaver-goodness/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 08:20:34 +0000</pubDate>
		<dc:creator>Andrew Odri</dc:creator>
				<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[konductor]]></category>
		<category><![CDATA[extension]]></category>

		<guid isPermaLink="false">http://blog.affirmix.com/?p=30</guid>
		<description><![CDATA[
I has been a little while since updates, but there has been a reason for that &#8211; I have been working hard! I know a lot of Konductor&#8217;s focus is on the AIR application, and for good reason, but the Dreamweaver extension definitely warrants some attention too.
I will post more detailed information soon, but here [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/019e613a07344c23a7fe2e5e6c80713f" alt="Dreamweaver Property Inspector" /></p>
<p>I has been a little while since updates, but there has been a reason for that &#8211; I have been working hard! I know a lot of Konductor&#8217;s focus is on the AIR application, and for good reason, but the Dreamweaver extension definitely warrants some attention too.</p>
<p>I will post more detailed information soon, but here is what we&#8217;ve got working in the extension since the <a href="http://ca.youtube.com/watch?v=Ej2obn24mdE" target="_blank">demo video</a>:</p>
<ul>
<li>Automatic updates (this is an exciting one for me &#8211; big thanks to the Extension Manager CS4 team for making this super easy in the new version!)</li>
<li>Menu management using standards compliant XHTML and CSS (again, this looks great in Dreamweaver CS4 as you now get the nice, accurate WebKit rendered previews for dropdown menus)</li>
<li>Intuitive interface (if something is not right with your design, or has a chance of causing some problems, the designer is made aware of this and offered the likely solution with the click of a button &#8211; this is huge for new designers, as Dreamweaver can be a little daunting at times&#8230;)</li>
</ul>
<p>Also, I&#8217;ve been working with the pre-release builds of Dreamweaver CS4 and Extension Manager CS4, and they really do add a lot of cool new features. To be perfectly honest, when I started playing around with the new Dreamweaver I thought it was just CS3 with a new skin, WebKit rendering, and Subversion support. But after using it, and especially after developing for it, I have found that it adds a lot of value. More on that later too.</p>
<p>Anyways, thats it for now. Stay tuned for more updates, there is a lot of exciting stuff coming down the pipe.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.affirmix.com/2008/10/02/dreamweaver-goodness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encoded Passwords In *.ste Site Definition Files</title>
		<link>http://blog.affirmix.com/2008/08/28/encoded-passwords-in-ste-site-definition-files/</link>
		<comments>http://blog.affirmix.com/2008/08/28/encoded-passwords-in-ste-site-definition-files/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 18:38:00 +0000</pubDate>
		<dc:creator>Andrew Odri</dc:creator>
				<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[konductor]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[decode]]></category>
		<category><![CDATA[decrypt]]></category>
		<category><![CDATA[demonstration]]></category>
		<category><![CDATA[encode]]></category>
		<category><![CDATA[encrypt]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[solution]]></category>
		<category><![CDATA[ste]]></category>

		<guid isPermaLink="false">http://blog.affirmix.com/?p=14</guid>
		<description><![CDATA[UPDATE: You can either encode or decode a Dreamweaver password using the form in this post.
I came across a little undocumented behaviour in the Dreamweaver API the other day. The Site.importSite() function (which will import a site from a Dreamweaver site definition file, or *.ste) expects the pw attribute of the remoteinfo element to be [...]]]></description>
			<content:encoded><![CDATA[<p>UPDATE: You can either encode or decode a Dreamweaver password using <a href="http://blog.affirmix.com/2009/05/05/live-ste-dreamweaver-password-encoder-and-decoder/">the form in this post</a>.</p>
<p>I came across a little undocumented behaviour in the Dreamweaver API the other day. The <a href="http://livedocs.adobe.com/en_US/Dreamweaver/9.0_API/dwr_site_si_52.html">Site.importSite()</a> function (which will import a site from a Dreamweaver site definition file, or *.ste) expects the pw attribute of the remoteinfo element to be encoded&#8230; but as what? <span id="more-18"></span></p>
<p>Well it turns out each character has to be encoded as a hexadecimal code point, then you have to add  the characters position in the string to this number. For example, lets take the string AAA. The character A has a hex code point of 41. So AAA could look like 414141. Now if we add the characters position in the string to its hex code point, we get 414243. Not too hard, but not exactly obvious either.</p>
<p>In order to dynamically build an *.ste file from Dreamweaver that takes a user defined password, I wrote a little javascript function that will encode a Dreamweaver password:</p>
<pre><code>function encodePassword(input)
{
    var top = 0;
    var output = '';

    for(var i = 0; i &lt; input.length; i++){
        var currentChar = input.charCodeAt(i);
        if(currentChar &lt; 0 || currentChar &gt; 0xFFFF){return(false);}
        if(top != 0){
            if(0xDC00 &lt;= currentChar &amp;&amp; currentChar &lt;= 0xDFFF){
                output += dec2hex(0x10000 + ((top - 0xD800) &lt;&lt; 10) + (currentChar - 0xDC00) + i) + '';
                top = 0;
                continue;
                // Insert alert for below failure
            }else{return(false);}
        }
        if(0xD800 &lt;= currentChar &amp;&amp; currentChar &lt;= 0xDBFF){top = currentChar;}
        else{output += dec2hex(currentChar + i) + '';}
    }

    return(output);
}

function dec2hex(input){return(input+0).toString(16).toUpperCase();}</code></pre>
<p>Problem solved! Hope that helps someone else out there too&#8230;</p>
<p>UPDATE: I have a password decoder available in javascript too&#8230;</p>
<pre><code>function decodePassword(input)
{
    var output = "";

    if(input.length == 0){return("");}

    for(var i = 0; i &lt; input.length / 2; i++){
        var currentHex = parseInt(input.substr(i * 2, 2), 16);
            if(currentHex &lt;= 0xFFFF){
                output += String.fromCharCode(currentHex - i);
            }else if(currentHex &lt;= 0x10FFFF){
                currentHex -= 0x10000
                output += String.fromCharCode(0xD800 | (currentHex &gt;&gt; 10)) + String.fromCharCode(0xDC00 | (currentHex &amp; 0x3FF) - i);
            }else{
                //Insert alert for below failure
                return(false);
        }
    }

    return(output);
}</code></pre>
<p><script type="text/javascript">function encodePassword(input)
{
    var top = 0;
    var output = '';</p>
<p>    for(var i = 0; i < input.length; i++){
        var currentChar = input.charCodeAt(i);
        if(currentChar < 0 || currentChar > 0xFFFF){return(false);}
        if(top != 0){
            if(0xDC00 <= currentChar &#038;&#038; currentChar <= 0xDFFF){
                output += dec2hex(0x10000 + ((top - 0xD800) << 10) + (currentChar - 0xDC00) + i) + '';
                top = 0;
                continue;
                // Insert alert for below failure
            }else{return(false);}
        }
        if(0xD800 <= currentChar &#038;&#038; currentChar <= 0xDBFF){top = currentChar;}
        else{output += dec2hex(currentChar + i) + '';}
    }</p>
<p>    return(output);
}</p>
<p>function dec2hex(input){return(input+0).toString(16).toUpperCase();}</p>
<p>function decodePassword(input)
{
    var output = "";</p>
<p>    if(input.length == 0){return("");}</p>
<p>    for(var i = 0; i < input.length / 2; i++){
        var currentHex = parseInt(input.substr(i * 2, 2), 16);
            if(currentHex <= 0xFFFF){
                output += String.fromCharCode(currentHex - i);
            }else if(currentHex <= 0x10FFFF){
                currentHex -= 0x10000
                output += String.fromCharCode(0xD800 | (currentHex >> 10)) + String.fromCharCode(0xDC00 | (currentHex &#038; 0x3FF) - i);
            }else{
                //Insert alert for below failure
                return(false);
        }
    }</p>
<p>    return(output);
}</script></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.affirmix.com/2008/08/28/encoded-passwords-in-ste-site-definition-files/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Streamlining Dreamweaver &#8211; Part 1</title>
		<link>http://blog.affirmix.com/2008/07/24/streamlining-dreamweaver-part-1/</link>
		<comments>http://blog.affirmix.com/2008/07/24/streamlining-dreamweaver-part-1/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 22:57:00 +0000</pubDate>
		<dc:creator>Andrew Odri</dc:creator>
				<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[konductor]]></category>
		<category><![CDATA[demonstration]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.affirmix.com/?p=4</guid>
		<description><![CDATA[Most people who use Dreamweaver have their own way of doing things. We don&#8217;t want to force them to do something they don&#8217;t want to. Our goal in making a an extension for Dreamweaver is to be as non-intrusive as possible, but still make life a little easier. Here is one we are planning on [...]]]></description>
			<content:encoded><![CDATA[<p>Most people who use Dreamweaver have their own way of doing things. We don&#8217;t want to force them to do something they don&#8217;t want to. Our goal in making a an extension for Dreamweaver is to be as non-intrusive as possible, but still make life a little easier. Here is one we are planning on doing that.</p>
<p>If you want to use Dreamweaver&#8217;s templating features, step number one is defining a &#8220;Site&#8221;. While it may not be obvious, finding the menu item to do this isn&#8217;t too hard. (Site -&gt; New Site&#8230;)</p>
<p>However, I have found the setup process can be quiet involved. I did a quick test, and found out that it is a 7 step process to set up a site that allows you create your template, put it on a server, and test it out.</p>
<p>Here is a little screenshot gallery of the easiest, fastest way to do this in Dreamweaver (that I know of at least)&#8230;</p>
<p><a href="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/2037c4dac9924058a2fcf7359dc9d48e"><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-thumbnails/2037c4dac9924058a2fcf7359dc9d48e/256.jpg" alt="" /></a></p>
<p><a href="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/6abe039f9e1e4fe58b1c9e9258d1580a"><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-thumbnails/6abe039f9e1e4fe58b1c9e9258d1580a/256.jpg"/></a></p>
<p><a href="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/79526881217d4588abb0f7839faccda3"><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-thumbnails/79526881217d4588abb0f7839faccda3/256.jpg"/></a></p>
<p><a href="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/df96689f543447efaaa884af4ddb6551"><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-thumbnails/df96689f543447efaaa884af4ddb6551/256.jpg"/></a></p>
<p><a href="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/debf07d5e6ca4f6ba2dd4b30ec28b554"><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-thumbnails/debf07d5e6ca4f6ba2dd4b30ec28b554/256.jpg"/></a></p>
<p><a href="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/14c4983d50914cf189e5135bfb355f74"><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-thumbnails/14c4983d50914cf189e5135bfb355f74/256.jpg"/></a></p>
<p><a href="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/5549e5f37c1b45998bfb6eae3e42502b"><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-thumbnails/5549e5f37c1b45998bfb6eae3e42502b/256.jpg" alt="" /></a></p>
<p>The best thing about Konductor is that a lot of these settings either stay the same, or they can be worked out automatically. We know what the FTP server will be, and we can control how testing takes place. We can also work out some more advanced stuff behind the scenes once we know who the user is (like the FTP upload path and so forth). So we have been able to cut down this process to one step! Check it out&#8230;</p>
<p><a href="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-assets/568286de38ec4b5a9060d4cc3204d56e"><img src="http://api.photoshop.com/home_ef38c0dde81745679f534f6507a6abff/adobe-px-thumbnails/568286de38ec4b5a9060d4cc3204d56e/256.jpg"/></a></p>
<p>I know this is a pretty minor thing, but it does save time searching through your emails for FTP settings, remembering FTP upload paths and so forth. I&#8217;ll post some more in this series about how we plan to streamline the design process in Dreamweaver, without changing it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.affirmix.com/2008/07/24/streamlining-dreamweaver-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
