<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.6" -->
<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/"
	>

<channel>
	<title>http://blog.sLajax.com</title>
	<link>http://blog.slajax.com</link>
	<description>secure lightweight ajax solutions</description>
	<pubDate>Tue, 26 Aug 2008 19:46:44 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Why I only use Linux at work.</title>
		<link>http://blog.slajax.com/2008/08/12/why-i-only-use-linux-at-work/</link>
        <customfield>ubuntu_logo.jpg</customfield>
		<comments>http://blog.slajax.com/2008/08/12/why-i-only-use-linux-at-work/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 16:55:50 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[linux]]></category>

		<category><![CDATA[ubuntu]]></category>

		<category><![CDATA[custom]]></category>

		<category><![CDATA[desktop]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/?p=45</guid>
		<description><![CDATA[Thanks to the awesome CTO [1] and Senior Python Programmer [2] at fotoglif.com [3] where I worked previously, Linux has become much more then a novelty in my tool set. While working there, I made the decision that I would go forth and adopt Ubuntu as my exclusive desktop of choice in all new projects simply because of how practical and customizable the operating system is.
Since then I have picked up more then a few new tricks, and have converted 3 (that I know of) below average windows users into fully functional members of the Linux community.
Now lets get down to the features that make Linux a much more flexible desktop for solving an ever changing number of work related issues, and red tape.

1) Workspace. Better Workspace.

Upon arriving at my new job, I was less then stoked to see that every person in the place had a second LCD monitor except for me. Desktop space can be a real pain in the ass for a UI programmer because of the constant refreshing required to see changes in the browser. Albeit I am a master of the alt tab, and have been known to ninja kick my way through a few builds this way, it's less then a good way to avoid carpel tunnel [4]. So the answer is simple in this case. Multiple desktops, which as you can see, can be easily integrated into the compiz window manager to make a pretty awesome cubic 3 dimensional desktop experience. From the following video, you'll be able to see the reason why I no longer care if I have a second monitor. I'm too busy flipping from desktop to desktop:


2) Software. Free Software.
This is a pretty good reason no matter what the situation is, however almost anyone who has worked in a larger company can tell you about the headache that its normally required to interface with the IT department so that you can get a piece of software that will assist you in your task. Well with Linux, the answer is as simple as sudo apt-get install software-package or if you can't find it, build it. The later being a motto that I have adopted more and more recently.
3) Security and piece of mind
I've worked at a few places where management is more then aggressive about banning and prohibiting any sort of IM, or un-work-related surfing activities. This often spawns rumors of packet sniffing, and other things that are less then desirable to me. The answer to this is simply an SSH tunnel. Very simply any Linux machine can be tunneled using the following ssh command:
ssh -D port username@hostname.com
Once this is done, you can then use System -&#62; Preference Network Proxy to point your connection to localhost:port using a SOCKS proxy.
I normally refrain from setting the proxy at this level however because it is fairly global. Instead I set the proxy in each application (mail, im, firefox) independently, allowing for better customization. For Firefox this is particularly important if you are running a localhost development environment. I suggest you use Foxy Proxy [5] to configure patterns for host names that use the proxy and host names that do not. Now that you are tunneling through your favourite remote server, you have the piece of mind knowing that your web traffic is not open to prying eyes.
And there you have it. These are the 3 main reasons why I have decided to exlcusively use Linux/Ubuntu for any work related project. It should be kept in mind that these reasons are much more particular to Linux in a whole then Ubuntu [6] itself, which is simply my perferred flavor of Linux. Also, there are many other great reasons, such as cron jobs, lynx, raggle and plain CLI that make Linux perfect as a work desktop, so I'd be happy to hear why you do you don't perfer Linux.

[1] http://walled.net
[2] http://agentultra.com
[3] http://fotoglif.com
[4] http://agentultra.comhttp://en.wikipedia.org/wiki/Carpal_tunnel_syndrome
[5] http://foxyproxy.mozdev.org/
[6] http://ubuntu.org]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Thanks to the awesome <a title="Walled.net" href="http://walled.net" target="_blank">CTO</a> and <a title="Agent Ultra" href="http://agentultra.com" target="_blank">Senior Python Programmer</a> at <a title="fotoglif.com - it pays to share" href="http://fotoglif.com" target="_blank">fotoglif.com</a> where I worked previously, Linux has become much more then a novelty in my tool set. While working there, I made the decision that I would go forth and adopt Ubuntu as my exclusive desktop of choice in all new projects simply because of how practical and customizable the operating system is.</p>
<p style="text-align: left;">Since then I have picked up more then a few new tricks, and have converted 3 (that I know of) below average windows users into fully functional members of the Linux community.</p>
<p style="text-align: left;">Now lets get down to the features that make Linux a much more flexible desktop for solving an ever changing number of work related issues, and red tape.</p>

<p style="text-align: left;">1) <strong>Workspace. Better Workspace.
</strong>
<p style="text-align: left;">Upon arriving at my new job, I was less then stoked to see that every person in the place had a second LCD monitor except for me. Desktop space can be a real pain in the ass for a UI programmer because of the constant refreshing required to see changes in the browser. Albeit I am a master of the alt tab, and have been known to ninja kick my way through a few builds this way, it&#8217;s less then a good way to avoid <a title="Carpal Tunnel" href="http://agentultra.comhttp://en.wikipedia.org/wiki/Carpal_tunnel_syndrome" target="_blank">carpel tunnel</a>. So the answer is simple in this case. Multiple desktops, which as you can see, can be easily integrated into the compiz window manager to make a pretty awesome cubic 3 dimensional desktop experience. From the following video, you&#8217;ll be able to see the reason why I no longer care if I have a second monitor. I&#8217;m too busy flipping from desktop to desktop:</p>

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="http://www.youtube.com/v/ZxfSwzhSn1c&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/ZxfSwzhSn1c&amp;hl=en&amp;fs=1" allowfullscreen="true"></embed></object>
<p style="text-align: left;">2) <strong>Software. Free Software.</strong></p>
<p style="text-align: left;">This is a pretty good reason no matter what the situation is, however almost anyone who has worked in a larger company can tell you about the headache that its normally required to interface with the IT department so that you can get a piece of software that will assist you in your task. Well with Linux, the answer is as simple as sudo <em>apt-get install software-package</em> or<em> if you can&#8217;t find it, build it</em>. The later being a motto that I have adopted more and more recently.</p>
<p style="text-align: left;">3) <strong>Security and piece of mind</strong></p>
<p style="text-align: left;">I&#8217;ve worked at a few places where management is more then aggressive about banning and prohibiting any sort of IM, or un-work-related surfing activities. This often spawns rumors of packet sniffing, and other things that are less then desirable to me. The answer to this is simply an <em>SSH tunnel</em>. Very simply any Linux machine can be tunneled using the following ssh command:</p>
<p style="text-align: left;">ssh -D port username@hostname.com</p>
<p style="text-align: left;">Once this is done, you can then use System -&gt; Preference Network Proxy to point your connection to localhost:port using a SOCKS proxy.</p>
<p style="text-align: left;">I normally refrain from setting the proxy at this level however because it is fairly global. Instead I set the proxy in each application (mail, im, firefox) independently, allowing for better customization. For Firefox this is particularly important if you are running a localhost development environment. I suggest you use <a title="Foxy Proxy" href="http://foxyproxy.mozdev.org/" target="_blank">Foxy Proxy</a> to configure patterns for host names that use the proxy and host names that do not. Now that you are tunneling through your favourite remote server, you have the piece of mind knowing that your web traffic is not open to prying eyes.</p>
<p style="text-align: left;">And there you have it. These are the 3 main reasons why I have decided to exlcusively use Linux/Ubuntu for any work related project. It should be kept in mind that these reasons are much more particular to Linux in a whole then <a title="Ubuntu" href="http://ubuntu.org" target="_blank">Ubuntu</a> itself, which is simply my perferred flavor of Linux. Also, there are many other great reasons, such as cron jobs, lynx, raggle and plain CLI that make Linux perfect as a work desktop, so I&#8217;d be happy to hear why you <strong>do</strong> you <strong>don&#8217;t</strong> perfer Linux.</p>]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/08/12/why-i-only-use-linux-at-work/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Javascript Cross Domain Ajax</title>
		<link>http://blog.slajax.com/2008/07/23/javascript-cross-domain-ajax/</link>
        <customfield>dojo.png</customfield>
		<comments>http://blog.slajax.com/2008/07/23/javascript-cross-domain-ajax/#comments</comments>
		<pubDate>Wed, 23 Jul 2008 17:16:23 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[api]]></category>

		<category><![CDATA[blast radius]]></category>

		<category><![CDATA[frameworks]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[crossdomain]]></category>

		<category><![CDATA[http]]></category>

		<category><![CDATA[mashup]]></category>

		<category><![CDATA[x-domain]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/?p=32</guid>
		<description><![CDATA[Since I joined Blast Radius [1] I have been introduced to a lot of new and interesting development practices, frameworks and designs that I have always read or heard about, but was never really forced or motivated to imply in my daily progression.
One such framework I wrote briefly about is Mojo [2]. Being a framework that has evolved from the Dojo Toolkit [3] my interest peaked this morning when I read a very interesting article on Ajaxian [4] about cross domain transport.


Originally as more of a low level technologist who only picked up ajax and interface development as a smooth view state for communicating with my middle tier controllers I found Javascript to be very much lacking the web services department. Very often the techniques that have been traditionally used consist of one of two strategies for x-domain communication;

1- A remote javascript include is served using:



This is usually a server side script that generates the file contents based on the parameters, and then either renders content locally into your DOM, or provides you with a set of methods that will allow you to manipulate the content. This is not a very secure model and does not allow you to interact with raw xml data very robustly, but as long as you trust the source that is rending the content, it is quite efficient.

2- By matter of Proxy.
This method I've used very often for direct communication with XML, SOAP, or REST gateways. Generally, I will develop the interface layer to communicate with a server side controller which will then use Curl to invoke the remote data, process and return as an JSON object. I find this method to be very robust, and allows you to create a very extensible gateway for your Javascript cross domain requests.


With that said, the post I read this morning is indicating that a new methodology for cross-domain scripting is emerging in the Dojo framework. By way of the property window.name one can make a remote request and retrieve data without exploiting the ever so wonderful cross domain security model that we are subject to in all our favorite browsers. This concept is very new but interesting. It opens up a whole new world of client side mash-up possibilities that are sure to get the creative juices flowing in the client side development space. Here is an example of it would be implemented:


dojox.io.windowName.send(method, args); // simple method
// deferred result

var deferred = dojox.io.windowName.send("GET", {url:"http://somesite.com/resource"});
deferred.addCallback(function(result){
  alert("The request returned " + result);
});





[1] http://blog.slajax.com/2008/06/17/relocating-to-vancouver-senior-interface-developer/
[2] http://blog.slajax.com/2008/07/17/first-week-at-blast-radius-over/
[3] http://dojotoolkit.com
[4] http://ajaxian.com/archives/windowname-meet-dojoxiowindowname]]></description>
			<content:encoded><![CDATA[Since I <a href="http://blog.slajax.com/2008/06/17/relocating-to-vancouver-senior-interface-developer/" target="_blank">joined Blast Radius</a> I have been introduced to a lot of new and interesting development practices, frameworks and designs that I have always read or heard about, but was never really forced or motivated to imply in my daily progression.
One such framework I wrote briefly about is <a href="http://blog.slajax.com/2008/07/17/first-week-at-blast-radius-over/"  target="_blank">Mojo</a>. Being a framework that has evolved from the <a href="http://dojotoolkit.com"  target="_blank">Dojo Toolkit</a> my interest peaked this morning when I read a very interesting article on <a href="http://ajaxian.com/archives/windowname-meet-dojoxiowindowname" target="_blank">Ajaxian</a> about cross domain transport.
<br/><br/>

Originally as more of a low level technologist who only picked up ajax and interface development as a smooth view state for communicating with my middle tier controllers I found Javascript to be very much lacking the web services department. Very often the techniques that have been traditionally used consist of one of two strategies for x-domain communication;
<br/><br/>
1- <strong>A remote javascript include is served using:</strong><br/>
<div class='codeWrapper'><div class='codeTitle'>javascript<span class='codeInstruct'>hover edges to scroll</span></div><code><pre>&nbsp;
&lt;script type=<span style="color: #3366CC;">'text/javascript href='</span>http:<span style="color: #009900; font-style: italic;">//remotehost/js/api.js?param=1&amp;param2'&gt;</span></pre></code></div>
This is usually a server side script that generates the file contents based on the parameters, and then either renders content locally into your DOM, or provides you with a set of methods that will allow you to manipulate the content. This is not a very secure model and does not allow you to interact with raw xml data very robustly, but as long as you trust the source that is rending the content, it is quite efficient.
<br/><br/>
2- <strong>By matter of Proxy.</strong><br/>
This method I&#8217;ve used very often for direct communication with XML, SOAP, or REST gateways. Generally, I will develop the interface layer to communicate with a server side controller which will then use Curl to invoke the remote data, process and return as an JSON object. I find this method to be very robust, and allows you to create a very extensible gateway for your Javascript cross domain requests.
<br/><br/>

With that said, the post I read this morning is indicating that a new methodology for cross-domain scripting is emerging in the Dojo framework. By way of the property <i>window.name</i> one can make a remote request and retrieve data without exploiting the ever so wonderful cross domain security model that we are subject to in all our favorite browsers. This concept is very new but interesting. It opens up a whole new world of client side mash-up possibilities that are sure to get the creative juices flowing in the client side development space. Here is an example of it would be implemented:

<div class='codeWrapper'><div class='codeTitle'>javascript<span class='codeInstruct'>hover edges to scroll</span></div><code><pre>&nbsp;
dojox.<span style="color: #006600;">io</span>.<span style="color: #006600;">windowName</span>.<span style="color: #006600;">send</span><span style="color: #66cc66;">&#40;</span>method, args<span style="color: #66cc66;">&#41;</span>; <span style="color: #009900; font-style: italic;">// simple method</span>
<span style="color: #009900; font-style: italic;">// deferred result</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> deferred = dojox.<span style="color: #006600;">io</span>.<span style="color: #006600;">windowName</span>.<span style="color: #006600;">send</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"GET"</span>, <span style="color: #66cc66;">&#123;</span>url:<span style="color: #3366CC;">"http://somesite.com/resource"</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
deferred.<span style="color: #006600;">addCallback</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>result<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
  <span style="color: #000066;">alert</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">"The request returned "</span> + result<span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;</pre></code></div>


]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/07/23/javascript-cross-domain-ajax/feed/</wfw:commentRss>
		</item>
		<item>
		<title>First week at Blast Radius over</title>
		<link>http://blog.slajax.com/2008/07/17/first-week-at-blast-radius-over/</link>
        <customfield>../uploads/2008/07/blast_front_door.jpg</customfield>
		<comments>http://blog.slajax.com/2008/07/17/first-week-at-blast-radius-over/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 00:52:49 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[blast radius]]></category>

		<category><![CDATA[blast]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[job]]></category>

		<category><![CDATA[radius]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/?p=31</guid>
		<description><![CDATA[

So as of monday my first full week at Blast Radius [1] is completed. As you can see from the terribly pixelated photo above, I found it with no issues. It just so happens that my apartment is much closer then I originally thought. I literally have been leaving for work 2 minutes before I start, which still leaves enough time for an ever so terrible tasting 7/11 coffee.

Last week was full of a lot of orientation, but I did my best to take it in stride and quickly dive into learning the way things work here. I've started learning Mojo, which is an amazing interface development framework that uses the power of Dojo [2] to create a very robust and abstract environment for developers. The code is structured very strongly in a Java style pattern and I'm finding that I'm adapting to it very well. I'll have a post or two more very shortly about my experience learning it and it's details which might provide someone coming after me a starting place.

That all said, I'm happy to be settled and in my new work environment with some amazingly talented developers. It's been so long since I've worked with people who were as keen on interface development as I am. It was a long drive and a big decision to move out here, but I'm very glad I did it and cannot wait to continue to learn everything there is to learn about the experienced beast that is Blast. Tomorrow I'll start "OpX" training which will help me understand and adapt to the very agile and fast past development cycles that have made this company so successful.

[1] http://blastradius.com
[2] http://dojotoolkit.com]]></description>
			<content:encoded><![CDATA[<img class="aligncenter size-full wp-image-26" title="blast_front_door" src="http://blog.slajax.com/wp-content/uploads/2008/07/blast_front_door.jpg" alt="Blast Radius Sign" width="500" height="100" />
<br/><br/>
So as of monday my first full week at <a title="Blast Radius Website" href="http://blastradius.com" target="_blank">Blast Radius</a> is completed. As you can see from the terribly pixelated photo above, I found it with no issues. It just so happens that my apartment is much closer then I originally thought. I literally have been leaving for work 2 minutes before I start, which still leaves enough time for an ever so terrible tasting 7/11 coffee.
<br/><br/>
Last week was full of a lot of orientation, but I did my best to take it in stride and quickly dive into learning the way things work here. I&#8217;ve started learning Mojo, which is an amazing interface development framework that uses the power of <a title="Dojo Toolkit" href="http://dojotoolkit.com" target="_blank">Dojo</a> to create a very robust and abstract environment for developers. The code is structured very strongly in a Java style pattern and I&#8217;m finding that I&#8217;m adapting to it very well. I&#8217;ll have a post or two more very shortly about my experience learning it and it&#8217;s details which might provide someone coming after me a starting place.
<br/><br/>
That all said, I&#8217;m happy to be settled and in my new work environment with some amazingly talented developers. It&#8217;s been so long since I&#8217;ve worked with people who were as keen on interface development as I am. It was a long drive and a big decision to move out here, but I&#8217;m very glad I did it and cannot wait to continue to learn everything there is to learn about the experienced beast that is Blast. Tomorrow I&#8217;ll start &#8220;OpX&#8221; training which will help me understand and adapt to the very agile and fast past development cycles that have made this company so successful.]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/07/17/first-week-at-blast-radius-over/feed/</wfw:commentRss>
		</item>
		<item>
		<title>BC or Bust - Halfway Point</title>
		<link>http://blog.slajax.com/2008/06/23/bc-or-bust-halfway-point/</link>
        <customfield></customfield>
		<comments>http://blog.slajax.com/2008/06/23/bc-or-bust-halfway-point/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 08:55:08 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[relocating]]></category>

		<category><![CDATA[roadtrip]]></category>

		<category><![CDATA[vancouver]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/?p=23</guid>
		<description><![CDATA[
I always knew that Canada was a very large country, but I never realized exactly how large until we passed Sault St Marie and lobbed ourselves around the Huron and Lake Superior. The truth is that northern Ontario doesn't have much to it. Lots of shoreline, a few Can-ops, and at least one or two places to stop that will make you regret rolling off the highway.

So far the trip has been pretty productive. For the cheesy details I suggest you read the elderly ramblings [1] of our senior passenger. Albeit bless him for starting a blog, but I think someone should install grammar check on his palm treo.



Tonight we're stopped in Brandon Manitoba. Approximately 490 km east of Regina. We're stopped in a Super 8 motel and the lot of them are snoring their faces off across the room. I'm glad their here, it wouldn't be the same alone.

So far we've made great time, and only been stopped by the cops once. The funny part is that it wasn't me driving. The van is holding up great, and I've gotten quite used to the trailer. We're going to be in the rockies in no time.

[1] http://crosscanada08.blogspot.com/]]></description>
			<content:encoded><![CDATA[<img style="float: left;" src="http://blog.slajax.com/wp-content/images/relocate/driving1.jpg" alt="" width="154" height="115" />
I always knew that Canada was a very large country, but I never realized exactly how large until we passed Sault St Marie and lobbed ourselves around the Huron and Lake Superior. The truth is that northern Ontario doesn&#8217;t have much to it. Lots of shoreline, a few Can-ops, and at least one or two places to stop that will make you regret rolling off the highway.<br/><br/><br/>

So far the trip has been pretty productive. For the cheesy details I suggest you read the <a href="http://crosscanada08.blogspot.com/" target="_blank">elderly ramblings</a> of our senior passenger. Albeit bless him for starting a blog, but I think someone should install grammar check on his palm treo.<br/><br/>

<img style="float: left;" src="http://blog.slajax.com/wp-content/images/relocate/portage_main.jpg" alt="" width="172" height="128" /><img style="float: left;" src="http://blog.slajax.com/wp-content/images/relocate/driving2.jpg" alt="" width="173" height="129" />

Tonight we&#8217;re stopped in Brandon Manitoba. Approximately 490 km east of Regina. We&#8217;re stopped in a Super 8 motel and the lot of them are snoring their faces off across the room. I&#8217;m glad their here, it wouldn&#8217;t be the same alone.<br/><br/>

So far we&#8217;ve made great time, and only been stopped by the cops once. The funny part is that it wasn&#8217;t me driving. The van is holding up great, and I&#8217;ve gotten quite used to the trailer. We&#8217;re going to be in the rockies in no time.]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/06/23/bc-or-bust-halfway-point/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Relocating to Vancouver - Senior Interface Developer</title>
		<link>http://blog.slajax.com/2008/06/17/relocating-to-vancouver-senior-interface-developer/</link>
        <customfield>blast.jpg</customfield>
		<comments>http://blog.slajax.com/2008/06/17/relocating-to-vancouver-senior-interface-developer/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 18:44:49 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[jobs]]></category>

		<category><![CDATA[blast radius]]></category>

		<category><![CDATA[career]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[vancouver]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/?p=18</guid>
		<description><![CDATA[I've been working hard over the last few years in Toronto to perfect my craft, and I knew eventually I would be relocating to the west coat again for work. It had always been my dream to do what I'm doing now, only with the mountains and coast line by my side. It was all too hard to find good work starting out in this industry. I found Toronto to have a ton of opportunity, and I learned a whole lot from all of it, but regrettably even though I've enjoyed my time in Toronto, it never really felt like home. Maybe it's because I still at heart feel like I belong in a small town, or maybe coastal regions and mountains just put life into perspective for me but it has been a long time coming and I am filled with mixed emotions but happy to announce that I will be leaving Toronto next Friday  for a Senior Interface Developer position at 
.

   Blast is a very reputable company and from all of the talks I've had with them over the last year it sounds like I will be working with a really talented group of developers who I already have a lot in common with programmatically, and will be able to learn and share a lot with. This move is going to be amazing.

The over all plan is that I will be driving from Toronto to Vancouver in my van, with a trailer. I'm bringing along my brother and father for company, so it will be an amazingly good feeling to spend some time with them. I haven't spent much time with either of them since I moved here, and I am really excited for my little brother to see all the different parts of our beautiful Canadian countryside. With all that said, I'll be posting a lot more details here and at my music / tour blog http://giverhard.com as the trip moves along. 
]]></description>
			<content:encoded><![CDATA[I&#8217;ve been working hard over the last few years in Toronto to perfect my craft, and I knew eventually I would be relocating to the west coat again for work. It had always been my dream to do what I&#8217;m doing now, only with the mountains and coast line by my side. It was all too hard to find good work starting out in this industry. I found Toronto to have a ton of opportunity, and I learned a whole lot from all of it, but regrettably even though I&#8217;ve enjoyed my time in Toronto, it never really felt like home. Maybe it&#8217;s because I still at heart feel like I belong in a small town, or maybe coastal regions and mountains just put life into perspective for me but it has been a long time coming and I am filled with mixed emotions but happy to announce that <strong>I will be leaving Toronto next Friday</strong>  for a <strong>Senior Interface Developer</strong> position at <br/><br/>
<center><a href='http://blastradius.com/' target='_blank'><img src="http://blog.slajax.com/wp-content/images/blast_logo.jpg" alt="Blast Radius - Vancouver" border="0"/></a>.
</center>
 <br/> <br/> Blast is a very reputable company and from all of the talks I&#8217;ve had with them over the last year it sounds like I will be working with a really talented group of developers who I already have a lot in common with programmatically, and will be able to learn and share a lot with. This move is going to be amazing.

The over all plan is that I will be driving from Toronto to Vancouver in my van, with a trailer. I&#8217;m bringing along my brother and father for company, so it will be an amazingly good feeling to spend some time with them. I haven&#8217;t spent much time with either of them since I moved here, and I am really excited for my little brother to see all the different parts of our beautiful Canadian countryside. With all that said, I&#8217;ll be posting a lot more details here and at my music / tour blog http://giverhard.com as the trip moves along. 
]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/06/17/relocating-to-vancouver-senior-interface-developer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Re: PHP Obsolete</title>
		<link>http://blog.slajax.com/2008/06/17/re-php-obsolete/</link>
        <customfield>agent_ultra.jpg</customfield>
		<comments>http://blog.slajax.com/2008/06/17/re-php-obsolete/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 18:27:26 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[php]]></category>

		<category><![CDATA[agent ultra]]></category>

		<category><![CDATA[rebuttle]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/?p=20</guid>
		<description><![CDATA[My good friend Mr Ultra writes [1] that he believes PHP is soon to be an obsolete language because of it's late adoption of such ever so necessary concepts such as  namespaces. I personally will have to disagree.

I believe that the successful adoption of PHP being so high has a direct relation to the amount of new websites that have come to the forefront of this second web. Consider this, without marijuana, would anyone ever start using crack? The answer might be yes, but for the majority of people it's simply true that PHP is a gateway language and therefore an overabundance of things such as name spaces and public private methods were never really necessary in early cases because projects were simple and confined. I will agree that there certainly are enterprise situations where these rules come into effect, but for the majority of developers who use this platform, these things are not a necessity as they are often scripting more so the programming.

I firmly believe that an over abundance of environment functions, and flexibility with run-time compiled code makes PHP originally an agile function based development language that has only recently introduced object standards.  Traditionally it has been an entry point for just about anyone to learn web, and although I realize that we don't want just anyone behind the reigns of a monster, it has only recently been adopted in large scale projects that would require such low level pragmatic rules.

I am happy that PHP is adopting these properties, but I am even more happy that it will maintain it's high level ability for people to easily script in an object oriented fashion without being locked into these rules and properties that seem to almost define lower level languages.

With that said, as long as PHP maintains it's stable implementation curve unlike Actionscript 3, I believe that it will remain at the middle class of the programming eco-system as a very popular choice for developers and web hosting companies.

[1] http://agentultra.com/?p=108]]></description>
			<content:encoded><![CDATA[My good friend Mr Ultra <a href="http://agentultra.com/?p=108" target="_blank">writes</a> that he believes PHP is soon to be an obsolete language because of it&#8217;s late adoption of such ever so necessary concepts such as  <em>namespaces</em>. I personally will have to disagree.<br/><br/>

I believe that the successful adoption of PHP being so high has a direct relation to the amount of new websites that have come to the forefront of this second web. Consider this, without marijuana, would anyone ever start using crack? The answer might be yes, but for the majority of people it&#8217;s simply true that PHP <em>is</em> a gateway language and therefore an overabundance of things such as name spaces and public private methods were never really necessary in early cases because projects were simple and confined. I will agree that there certainly are enterprise situations where these rules come into effect, but for the majority of developers who use this platform, these things are not a necessity as they are often <em>scripting</em> more so the programming.<br/><br/>

I firmly believe that an over abundance of environment functions, and flexibility with run-time compiled code makes PHP originally an agile function based development language that has only recently introduced object standards.  Traditionally it has been an entry point for just about anyone to learn web, and although I realize that we don&#8217;t want just <em>anyone</em> behind the reigns of a monster, it has only recently been adopted in large scale projects that would require such low level pragmatic rules.<br/><br/>

I am happy that PHP is adopting these properties, but I am even more happy that it will maintain it&#8217;s high level ability for people to easily <em>script</em> in an object oriented fashion without being locked into these rules and properties that seem to almost define lower level languages.<br/><br/>

With that said, as long as PHP maintains it&#8217;s stable implementation curve unlike Actionscript 3, I believe that it will remain at the middle class of the programming eco-system as a very popular choice for developers and web hosting companies.]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/06/17/re-php-obsolete/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sutori and second hand consumer experiences</title>
		<link>http://blog.slajax.com/2008/06/17/sutori-and-second-hand-consumer-experiences/</link>
        <customfield>sutori.jpg</customfield>
		<comments>http://blog.slajax.com/2008/06/17/sutori-and-second-hand-consumer-experiences/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 17:30:04 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[brand recognition]]></category>

		<category><![CDATA[social epidemics]]></category>

		<category><![CDATA[social networking]]></category>

		<category><![CDATA[blast radius]]></category>

		<category><![CDATA[consumer experience]]></category>

		<category><![CDATA[sutori]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/?p=19</guid>
		<description><![CDATA[ [1]
I've been pretty excited over the last week about the new experiences [2] coming up so I did some digging around and found Sutori.com [3] which is a Blast Radius [4] sponsored pro-sumer driven social network for people to connect and share their experiences and information about products and companies.

The whole concept behind Blast's success seems to be very much that the marketplace has changed. Consumers now hold the power and as a result, they believe companies need to get smarter in order to please this new level of connected consumer.

I read and responded to a particular blog post [5] on the Sutori blog, talking about second hand experiences and their worth to the community at large. This really intrigued me and I responded with my initial opinion:
I think that you bring up a very interesting point here.

Often people will consider second or third hand stories as a form of broken telephone, in which the content cannot be trusted.

I’d like to draw reference to a piece of literature called ‘Blink’ by Malcolm Gladwell in which he references to ‘thin-slicing’.

Often through word of mouth, context is diluted or changed, but generally in the first X amount of steps, the message will remain the same without the saturation of frustration that can be found in first person. The results highlight the original and (possibly?) make a more dense overall consumer experience to base future engagements with relation to the brand in question.

This being said, it could very well be that a second or third hand story can possibly be more directly helpful to a consumer looking to make a decision than a first hand encounter as long as the message maintains a an accurate ‘thin-sliced’ version of the original message.
With that said, I started thinking about the type of social network that Sutori really is in relation to another book by Malcom Gladwell entitled The Tipping Point [6] where Mr Gladwell goes on to dissect the reasons and motivations behind a true social epidemic, the kind that are often found in the natural wide scale adoption of a product or trend.  Gladwell describes three types of people who make these epidemics occur.

Connectors, people with a vast social circle who specialize in the 'weak tie'. Mavens, people with extraordinary product knowledge who have a natural need to help people get them the best based on their own personal experience, and Salesmen, the people who actually sell the idea that this product and experience lives up to the hype.

My thought is that Sutori is by nature a very "Maven"-esq network, however it seems that most of the content so far mostly relates to bad experiences with a brand and revolve around warning others. This raises the following question:

How could one use the power of a social network like Sutori to procure positive experiences that can then be shared to all three types of social pro-sumer so that the end result is a widely distributed word of mouth that is overall positive for a brand but also allows for the necessary warnings that protect the pro-sumer network?

Once I thought about this I remembered a site that a friend of mine started a little while ago called mywebvine.ca [7] and I realized that this is one example of how the social graph can really do a great job of promoting positive brand recognition through word of mouth.

So I guess that shows that there are people out there considering both sides of the puzzle. I'm interested to see different ways that the combination of both models can be incorporated so that not only can consumers warn other consumers, but they can also promote good products and in essence start their own little social epidemic around a product that really deserves it.

[1] http://sutori.com
[2] http://blog.slajax.com/2008/06/10/relocating-to-vancouver-senior-interface-developer/
[3] http://sutori.com
[4] http://blastradius.com
[5] http://blog.sutori.com/2007/02/16/what-are-your-thoughts-on-second-hand-experiences/
[6] http://books.google.ca/books?id=MMlxzMNkE_0C&#38;dq=the+tipping+point&#38;pg=PP1&#38;ots=hgZyMEkyF3&#38;sig=pdd9BP007hrW-d-JZQzOlrlGHHo&#38;hl=en&#38;prev=http://www.google.ca/search%3Fq%3Dthe%2Btipping%2Bpoint%26ie%3Dutf-8%26oe%3Dutf-8%26rls%3Dcom.ubuntu:en-US:official%26client%3Dfirefox-a&#38;sa=X&#38;oi=print&#38;ct=title&#38;cad=one-book-with-thumbnail
[7] http://mywebvine.ca]]></description>
			<content:encoded><![CDATA[<a href="http://sutori.com"><img style="float: left; margin: 5px 15px;" src="/wp-content/images/sutori.jpg" alt="" /></a>
I&#8217;ve been pretty excited over the last week about the <a href="http://blog.slajax.com/2008/06/10/relocating-to-vancouver-senior-interface-developer/">new experiences</a> coming up so I did some digging around and found <a href="http://sutori.com">Sutori.com</a> which is a <a href="http://blastradius.com">Blast Radius</a> sponsored pro-sumer driven social network for people to connect and share their experiences and information about products and companies.<br/><br/>

The whole concept behind Blast&#8217;s success seems to be very much that the marketplace has changed. Consumers now hold the power and as a result, they believe companies need to get smarter in order to please this new level of connected consumer.<br/><br/>

I read and responded to a particular <a href="http://blog.sutori.com/2007/02/16/what-are-your-thoughts-on-second-hand-experiences/">blog post</a> on the Sutori blog, talking about second hand experiences and their worth to the community at large. This really intrigued me and I responded with my initial opinion:<br/>
<blockquote>I think that you bring up a very interesting point here.

Often people will consider second or third hand stories as a form of broken telephone, in which the content cannot be trusted.

I’d like to draw reference to a piece of literature called ‘Blink’ by Malcolm Gladwell in which he references to ‘thin-slicing’.

Often through word of mouth, context is diluted or changed, but generally in the first X amount of steps, the message will remain the same without the saturation of frustration that can be found in first person. The results highlight the original and (possibly?) make a more dense overall consumer experience to base future engagements with relation to the brand in question.

This being said, it could very well be that a second or third hand story can possibly be more directly helpful to a consumer looking to make a decision than a first hand encounter as long as the message maintains a an accurate ‘thin-sliced’ version of the original message.</blockquote>
With that said, I started thinking about the type of social network that Sutori really is in relation to another book by <em>Malcom Gladwell</em> entitled <a href="http://books.google.ca/books?id=MMlxzMNkE_0C&amp;dq=the+tipping+point&amp;pg=PP1&amp;ots=hgZyMEkyF3&amp;sig=pdd9BP007hrW-d-JZQzOlrlGHHo&amp;hl=en&amp;prev=http://www.google.ca/search%3Fq%3Dthe%2Btipping%2Bpoint%26ie%3Dutf-8%26oe%3Dutf-8%26rls%3Dcom.ubuntu:en-US:official%26client%3Dfirefox-a&amp;sa=X&amp;oi=print&amp;ct=title&amp;cad=one-book-with-thumbnail" target="_blank">The Tipping Point</a> where Mr Gladwell goes on to dissect the reasons and motivations behind a true social epidemic, the kind that are often found in the natural wide scale adoption of a product or trend.  Gladwell describes three types of people who make these epidemics occur.<br/><br/>

Connectors, people with a vast social circle who specialize in the &#8216;weak tie&#8217;. Mavens, people with extraordinary product knowledge who have a natural need to help people get them the best based on their own personal experience, and Salesmen, the people who actually sell the idea that this product and experience lives up to the hype.<br/><br/>

My thought is that Sutori is by nature a very &#8220;Maven&#8221;-esq network, however it seems that most of the content so far mostly relates to bad experiences with a brand and revolve around warning others. This raises the following question:<br/><br/>

How could one use the power of a social network like Sutori to procure positive experiences that can then be shared to all three types of social pro-sumer so that the end result is a widely distributed word of mouth that is overall positive for a brand but also allows for the necessary warnings that protect the pro-sumer network?<br/><br/>

Once I thought about this I remembered a site that a friend of mine started a little while ago called <a href="http://mywebvine.ca">mywebvine.ca</a> and I realized that this is one example of how the social graph can really do a great job of promoting positive brand recognition through word of mouth.<br/><br/>

So I guess that shows that there are people out there considering both sides of the puzzle. I&#8217;m interested to see different ways that the combination of both models can be incorporated so that not only can consumers warn other consumers, but they can also promote good products and in essence start their own little social epidemic around a product that really deserves it.<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/06/17/sutori-and-second-hand-consumer-experiences/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mushroom Life</title>
		<link>http://blog.slajax.com/2008/02/14/mushroom-life/</link>
        <customfield></customfield>
		<comments>http://blog.slajax.com/2008/02/14/mushroom-life/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 02:21:01 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[applications]]></category>

		<category><![CDATA[other]]></category>

		<category><![CDATA[stumbled upon]]></category>

		<category><![CDATA[widgets]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[games]]></category>

		<category><![CDATA[mushrooms]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/2008/02/14/mushroom-life/</guid>
		<description><![CDATA[Mushroom Life [1] is a very interesting flash application that requires a lot of clicking. The application shows a very nicely laid out 3d area that when you click mushrooms grow. However, there are rules to this game as follows:


For each generation,
a mushroom with 1 or 0 neighbor dies (loneliness),
a mushroom with 4 or more neighbors dies (overcrowding),
a mushroom with 2 or 3 neighbors survives (stability),
an empty space with 3 neighbors sprouts a new mushroom (birth). 

Try it out, see how much mush you can make.

[1] http://a.parsons.edu/~joseph/k2/gameoflife/]]></description>
			<content:encoded><![CDATA[<a href="http://a.parsons.edu/~joseph/k2/gameoflife/">Mushroom Life</a> is a very interesting flash application that requires a lot of clicking. The application shows a very nicely laid out 3d area that when you click mushrooms grow. However, there are rules to this game as follows:


For each generation,
a mushroom with 1 or 0 neighbor dies (loneliness),
a mushroom with 4 or more neighbors dies (overcrowding),
a mushroom with 2 or 3 neighbors survives (stability),
an empty space with 3 neighbors sprouts a new mushroom (birth). 

Try it out, see how much mush you can make.]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/02/14/mushroom-life/feed/</wfw:commentRss>
		</item>
		<item>
		<title>xentheon - where is my mind</title>
		<link>http://blog.slajax.com/2008/02/14/xentheon-where-is-my-mind/</link>
        <customfield></customfield>
		<comments>http://blog.slajax.com/2008/02/14/xentheon-where-is-my-mind/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 00:43:36 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/2008/02/14/xentheon-where-is-my-mind/</guid>
		<description><![CDATA[This is probably one of the coolest source code visualizations I have ever seen. I'm not exactly sure how they did it. Points to whomever can explain it!read more [1] &#124; digg story [2]

[1] http://www.100mb.nl/
[2] http://digg.com/linux_unix/xentheon_where_is_my_mind]]></description>
			<content:encoded><![CDATA[This is probably one of the coolest source code visualizations I have ever seen. I&#8217;m not exactly sure how they did it. Points to whomever can explain it!<br/><br/><a href="http://www.100mb.nl/">read more</a> | <a href="http://digg.com/linux_unix/xentheon_where_is_my_mind">digg story</a>]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2008/02/14/xentheon-where-is-my-mind/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Real Estate 2.0</title>
		<link>http://blog.slajax.com/2007/11/12/realestate-2-0/</link>
        <customfield>realestate-tag.jpg</customfield>
		<comments>http://blog.slajax.com/2007/11/12/realestate-2-0/#comments</comments>
		<pubDate>Mon, 12 Nov 2007 16:31:08 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[start ups]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[google maps]]></category>

		<category><![CDATA[real estate]]></category>

		<category><![CDATA[sLajax applications]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/2007/11/12/the-state-of-real-estate-on-the-web/</guid>
		<description><![CDATA[

So here is something I was reading on Tech Crunch [1] this morning about real estate start ups on the web. Cyber Homes [2], a startup that I would loved to have been the founder of is a real estate mapping service that provides high level overviews and more specific statistics based information about real estate trends. Lets hope they release an API and blow MLS  [3]out of the water! From what the article says, they are using Microsoft's Silver Light [4] for most of their rich dashboard controls. My opinion of Silver Light sort of makes this an infrastructure that I don't really agree with and thus sort of ruins the service for me but at very least the article is reporting that while real estate markets are on the down, the number of people researching online is very much still on the rise. 




This is great news to sLajax developers because we are currently working on a product that will allow Toronto Real Estate Agents to automate the streaming of their MLS [5] listings data directly from the TREB servers, thus enabling the client to directly update their website with their listing data by logging into TREB just as they would normally. It is still undecided as to the presentation layer that will be developed to but we have been very eager to present some sort of highly interactive mapping application similar to housing maps, as a starting point for users to then select their area and get more information on the site. 



In any event, it's super great to see that Tech Crunch is reporting a rise in online-viewer-ship because this means that great tools like Cyberhomes [6] and the application that we are developing will bring lots of benefit to realtor's who are looking for a way to stand out with the listings on their website. 

[1] http://techcrunch.com
[2] http://cyberhomes.com
[3] http://mls.ca
[4] http://silverlight.net/
[5] http://mls.ca
[6] http://cyberhomes.com]]></description>
			<content:encoded><![CDATA[<img src="/wp-content/images/realestate-main.jpg" alt="real estate 2.0" />

So here is something I was reading on <a href="http://techcrunch.com">Tech Crunch</a> this morning about real estate start ups on the web. <a href="http://cyberhomes.com">Cyber Homes</a>, a startup that I would loved to have been the founder of is a real estate mapping service that provides high level overviews and more specific statistics based information about real estate trends. Lets hope they release an API and blow <a href="http://mls.ca">MLS </a>out of the water! From what the article says, they are using <a href="http://silverlight.net/">Microsoft&#8217;s Silver Light</a> for most of their rich dashboard controls. My opinion of Silver Light sort of makes this an infrastructure that I don&#8217;t really agree with and thus sort of ruins the service for me but at very least the article is reporting that while real estate markets are on the down, the number of people researching online is very much still on the rise. 

<br/>
<br/>

This is great news to sLajax developers because we are currently working on a product that will allow Toronto Real Estate Agents to automate the streaming of their <a href="http://mls.ca">MLS</a> listings data directly from the TREB servers, thus enabling the client to directly update their website with their listing data by logging into TREB just as they would normally. It is still undecided as to the presentation layer that will be developed to but we have been very eager to present some sort of highly interactive mapping application similar to housing maps, as a starting point for users to then select their area and get more information on the site. 

<br/>
<br/>
In any event, it&#8217;s super great to see that Tech Crunch is reporting a rise in online-viewer-ship because this means that great tools like <a href="http://cyberhomes.com">Cyberhomes</a> and the application that we are developing will bring lots of benefit to realtor&#8217;s who are looking for a way to stand out with the listings on their website. ]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2007/11/12/realestate-2-0/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open Social is finally here.</title>
		<link>http://blog.slajax.com/2007/11/09/open-social-is-finally-here/</link>
        <customfield>opensocial.jpg</customfield>
		<comments>http://blog.slajax.com/2007/11/09/open-social-is-finally-here/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 19:49:17 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[api]]></category>

		<category><![CDATA[frameworks]]></category>

		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/2007/11/09/open-social-is-finally-here/</guid>
		<description><![CDATA[

So finally the powers that be [1] have chosen to use their voice [2] in an attempt to show the world what "open" really is. We've seen a lot of improvement in the social networking field over the last 2 years, with leadsers such as Linked In [3] and Sales Force [4] showing the world that social networking is not just for weirdos [5].

On Friday, November 02, 2007 at 1:15:00 AM [6] Google posted that Open Social is being lunched with this list of partners [7]. This is a huge step in the right direction for social networking and the internet in general. Now we can all play happily together while Facebook takes the ball and goes home.





[1] http://google.com
[2] http://code.google.com/apis/opensocial/
[3] http://linkedin.com
[4] http://salesforce.com
[5] http://www.encyclopediaofstupid.com/stupid/index.php/Myspace
[6] http://opensocialapis.blogspot.com/2007/11/web-is-better-when-its-social.html
[7] http://code.google.com/apis/opensocial/partners.html]]></description>
			<content:encoded><![CDATA[<img src="http://blog.slajax.com/wp-content/images/opensocial.jpg" alt="open social" />

So finally the <a href="http://google.com" target="_blank">powers that be</a> have chosen to use <a href="http://code.google.com/apis/opensocial/" target="_blank">their voice</a> in an attempt to show the world what &#8220;open&#8221; really is. We&#8217;ve seen a lot of improvement in the social networking field over the last 2 years, with leadsers such as <a href="http://linkedin.com" target="_blank">Linked In</a> and <a href="http://salesforce.com">Sales Force</a> showing the world that social networking is not just for <a href="http://www.encyclopediaofstupid.com/stupid/index.php/Myspace" target="_blank">weirdos</a>.

On <a href="http://opensocialapis.blogspot.com/2007/11/web-is-better-when-its-social.html" target="_blank">Friday, November 02, 2007 at 1:15:00 AM</a> Google posted that Open Social is being lunched with <a href="http://code.google.com/apis/opensocial/partners.html">this list of partners</a>. This is a huge step in the right direction for social networking and the internet in general. Now we can all play happily together while Facebook takes the ball and goes home.



]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2007/11/09/open-social-is-finally-here/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Akelos - a pragmatic php framework</title>
		<link>http://blog.slajax.com/2007/08/24/akelos-a-pragmatic-php-framework/</link>
        <customfield>akelos.gif</customfield>
		<comments>http://blog.slajax.com/2007/08/24/akelos-a-pragmatic-php-framework/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 21:34:08 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[frameworks]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[agile]]></category>

		<category><![CDATA[akelos]]></category>

		<category><![CDATA[framework]]></category>

		<category><![CDATA[pragmatic]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.slajax.com/2007/08/24/akelos-a-pragmatic-php-framework/</guid>
		<description><![CDATA[ [1]



I have recently discovered Akelos [2] a wonderfully efficient framework that allows you to control scaffolding and generate controllers in much the same way that you would in Ruby on Rails. Not only is the framework designed to cut corners, but it also has an amazingly useful version control system, that allows you to upgrade your applications without having to worry about new data impacting crashing the application. 



From my short experience with this software, I can see that it is going to be a very strong favorite in the open source world, in my opinion surpassing it's rival Symfony [3]. I am sure to make this framework an avid part of my tool box and do what I can to promote such a well structured software. Kudos to Bermi over at http://akelos.org [4]






[1] http://akelos.org
[2] http://akelos.org
[3] http://symfony-project.org
[4] http://akelos.org]]></description>
			<content:encoded><![CDATA[<center><a href="http://akelos.org" target="_blank"><img src="/wp-content/images/akelos_logo.jpg" border="0" /></a></center>

<br /><br />

I have recently discovered <a href="http://akelos.org" target="_blank">Akelos</a> a wonderfully efficient framework that allows you to control scaffolding and generate controllers in much the same way that you would in Ruby on Rails. Not only is the framework designed to cut corners, but it also has an amazingly useful version control system, that allows you to upgrade your applications without having to worry about new data impacting crashing the application. 

<br /><br />

From my short experience with this software, I can see that it is going to be a very strong favorite in the open source world, in my opinion surpassing it&#8217;s rival <a href="http://symfony-project.org" target="_blank" />Symfony</a>. I am sure to make this framework an avid part of my tool box and do what I can to promote such a well structured software. Kudos to Bermi over at <a href="http://akelos.org" target="_blank">http://akelos.org</a>


<br /><br />

]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2007/08/24/akelos-a-pragmatic-php-framework/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Bash Installation Script</title>
		<link>http://blog.slajax.com/2007/07/30/bash-installation-script/</link>
        <customfield>bash.gif</customfield>
		<comments>http://blog.slajax.com/2007/07/30/bash-installation-script/#comments</comments>
		<pubDate>Mon, 30 Jul 2007 21:53:05 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[bash]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[shell]]></category>

		<category><![CDATA[source code]]></category>

		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://slajax.com/blog/2007/07/30/bash-installation-script/</guid>
		<description><![CDATA[So I got bored of always manually installing the content management system, so i wrote a little bash script to take care of all the good stuff. I haven't written bash in a long time, but I really like it. It's some of the most useful code I've ever written. So powerful.


# !/bin/sh
# @title: CMS bash install script
# @dev: Kyle Campbell - kc@slajax.com
# @purpose: -simple walk through of cms installation tasks
#           -delete plesk generated directories and extract latest cms tar
#     -connect to mysql and load clean data structure
#     -generate unique lib/includes/db.php file for specific install
##################################################

##########################
# Step 1:  get domain for install #
########################

echo "[setup]: Please enter the domain you are configuring the cms for:"
 read domain

#####################
# Step 2: confirm spelling #
####################

echo "[setup]: Ok, installing for for domain: $domain, right? (y/n)"
 read confirmDomain

################################################
# Step 3: echo out the install path and confirm this install path #
################################################

if [ $confirmDomain == "y" ]
 then
         echo "[setup]: ok, here we go, installing to /var/www/vhosts/$domain/httpdocs/, ready? (y/n)"
 else
         echo "[setup]: installation aborted. go rtfm already."
  exit
fi
 read confirmDir

#####################################################################
# Step 4: if install path is confirmed, remove plesk generated files and dirs, then install cms #
#####################################################################

if [ $confirmDir == "y" ]
 then
  if [ -d "/var/www/vhosts/$domain/httpdocs" ]
   then
    echo "[setup]: cleaning directory and unpacking latest cms archive."

    if [ -f "/var/www/vhosts/$domain/httpdocs/index.html" ]
     then
                                                echo "[setup]: deleting file: index.html"
      sudo rm -R /var/www/vhosts/$domain/httpdocs/index.html
    fi
    if [ -f "/var/www/vhosts/$domain/httpdocs/favicon.ico" ]
     then
                                                echo "[setup]: deleting file: favicon.ico"
      sudo rm -R /var/www/vhosts/$domain/httpdocs/favicon.ico
    fi
    if [ -d "/var/www/vhosts/$domain/httpdocs/css/" ]
     then
                                                echo "[setup]: deleting dir: /css/"
      sudo rm -R /var/www/vhosts/$domain/httpdocs/css/
    fi
                         if [ -d "/var/www/vhosts/$domain/httpdocs/img/" ]
     then
                                                echo "[setup]: deleting dir: /img/"
      sudo rm -R /var/www/vhosts/$domain/httpdocs/img/
    fi
                                if [ -d "/var/www/vhosts/$domain/httpdocs/picture_library/" ]
     then
                                                echo "[setup]: deleting dir: /picture-library/"
      sudo rm -R /var/www/vhosts/$domain/httpdocs/picture_library/
    fi
                                if [ -d "/var/www/vhosts/$domain/httpdocs/plesk-stat/" ]
     then
                                                echo "[setup]: deleting dir: /plesk-stat/"
      sudo rm -R /var/www/vhosts/$domain/httpdocs/plesk-stat/
    fi
                                if [ -d "/var/www/vhosts/$domain/httpdocs/test/" ]
     then
                                                echo "[setup]: deleting dir: /test/"
      sudo rm -R /var/www/vhosts/$domain/httpdocs/test/
    fi
    if [ -f "/home/KyleC/cms/installCms.tar" ]
     then
      echo "[setup]: unpacking cms files..."
      sudo tar -xvf /home/KyleC/cms/installCms.tar
     else
      echo "[setup]: cms install archive not present. exiting."
      exit
    fi
   else
    echo "[setup]: this directory does not exist. have the domain created first."
    echo "[setup]: installation aborted. go rtfm already.  please continue manually."
    exit
  fi
 else
  echo "[setup]: installation aborted. go rtfm already. please continue manually."
  exit
fi


################################################
# Step 5:  set ownerships and permissions for new install path #
###############################################

echo "[setup]: ok done unpacking, now we need to set the correct permissions. Please provide directory user:"
 read userPerms

if [ $userPerms != "" ]
 then
  if [ -d "/var/www/vhosts/$domain/httpdocs/" ]
   then
    echo "[setup]: setting permissions $userPerms.psacln for core files"
     sudo chown -R $userPerms.psacln /var/www/vhosts/$domain/httpdocs/*
     sudo chown -R $userPerms.psacln /var/www/vhosts/$domain/httpdocs/.htaccess
     sudo chmod -R 0777 /var/www/vhosts/$domain/httpdocs/sql/
        sudo chmod -R 0777 /var/www/vhosts/$domain/httpdocs/uploaded/
     sudo chmod -R 0777 /var/www/vhosts/$domain/httpdocs/lib/includes/db.php

    echo "[setup]: done setting permissions."
  fi
 else
  echo "[setup]: invalid input, please continue manually from permissions step."
                echo "[setup]: installation aborted. go rtfm already.  please continue manually."
fi


######################################################
# Step 6: installing database and configuring constants for application #
#####################################################
echo "[setup]: please enter database name:"
 read database

echo "[setup]: please enter user name for database '$database':"
 read username

echo "[setup]: please enter password for databas user '$username':"
 read dbpass

echo "[setup]: ok, lets import the database structure now..."

 sudo mysql --verbose --host=mysql-host --user=$username --password=$dbpass $database < /var/www/vhosts/$domain/httpdocs/sql/installCms.sql

echo "[setup]: database configured, creating config file for cms now..."


sudo cat > /var/www/vhosts/$domain/httpdocs/lib/includes/db.php ]]></description>
			<content:encoded><![CDATA[So I got bored of always manually installing the content management system, so i wrote a little bash script to take care of all the good stuff. I haven&#8217;t written bash in a long time, but I really like it. It&#8217;s some of the most useful code I&#8217;ve ever written. So powerful.

<div class='codeWrapper'><div class='codeTitle'>bash<span class='codeInstruct'>hover edges to scroll</span></div><code><pre>&nbsp;
<span style="color: #808080; font-style: italic;"># !/bin/sh</span>
<span style="color: #808080; font-style: italic;"># @title: CMS bash install script</span>
<span style="color: #808080; font-style: italic;"># @dev: Kyle Campbell - kc@slajax.com</span>
<span style="color: #808080; font-style: italic;"># @purpose: -simple walk through of cms installation tasks</span>
<span style="color: #808080; font-style: italic;">#           -delete plesk generated directories and extract latest cms tar</span>
<span style="color: #808080; font-style: italic;">#     -connect to mysql and load clean data structure</span>
<span style="color: #808080; font-style: italic;">#     -generate unique lib/includes/db.php file for specific install</span>
<span style="color: #808080; font-style: italic;">##################################################</span>
&nbsp;
<span style="color: #808080; font-style: italic;">##########################</span>
<span style="color: #808080; font-style: italic;"># Step 1:  get domain for install #</span>
<span style="color: #808080; font-style: italic;">########################</span>
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: Please enter the domain you are configuring the cms for:"</span>
 <span style="color: #000066;">read</span> domain
&nbsp;
<span style="color: #808080; font-style: italic;">#####################</span>
<span style="color: #808080; font-style: italic;"># Step 2: confirm spelling #</span>
<span style="color: #808080; font-style: italic;">####################</span>
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: Ok, installing for for domain: $domain, right? (y/n)"</span>
 <span style="color: #000066;">read</span> confirmDomain
&nbsp;
<span style="color: #808080; font-style: italic;">################################################</span>
<span style="color: #808080; font-style: italic;"># Step 3: echo out the install path and confirm this install path #</span>
<span style="color: #808080; font-style: italic;">################################################</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> <span style="color: #0000ff;">$confirmDomain</span> == <span style="color: #ff0000;">"y"</span> <span style="color: #66cc66;">&#93;</span>
 <span style="color: #b1b100;">then</span>
         <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: ok, here we go, installing to /var/www/vhosts/$domain/httpdocs/, ready? (y/n)"</span>
 <span style="color: #b1b100;">else</span>
         <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: installation aborted. go rtfm already."</span>
  <span style="color: #000066;">exit</span>
<span style="color: #b1b100;">fi</span>
 <span style="color: #000066;">read</span> confirmDir
&nbsp;
<span style="color: #808080; font-style: italic;">#####################################################################</span>
<span style="color: #808080; font-style: italic;"># Step 4: if install path is confirmed, remove plesk generated files and dirs, then install cms #</span>
<span style="color: #808080; font-style: italic;">#####################################################################</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> <span style="color: #0000ff;">$confirmDir</span> == <span style="color: #ff0000;">"y"</span> <span style="color: #66cc66;">&#93;</span>
 <span style="color: #b1b100;">then</span>
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -d <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs"</span> <span style="color: #66cc66;">&#93;</span>
   <span style="color: #b1b100;">then</span>
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: cleaning directory and unpacking latest cms archive."</span>
&nbsp;
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -f <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs/index.html"</span> <span style="color: #66cc66;">&#93;</span>
     <span style="color: #b1b100;">then</span>
                                                <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: deleting file: index.html"</span>
      sudo rm -R /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/index.html
    <span style="color: #b1b100;">fi</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -f <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs/favicon.ico"</span> <span style="color: #66cc66;">&#93;</span>
     <span style="color: #b1b100;">then</span>
                                                <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: deleting file: favicon.ico"</span>
      sudo rm -R /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/favicon.ico
    <span style="color: #b1b100;">fi</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -d <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs/css/"</span> <span style="color: #66cc66;">&#93;</span>
     <span style="color: #b1b100;">then</span>
                                                <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: deleting dir: /css/"</span>
      sudo rm -R /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/css/
    <span style="color: #b1b100;">fi</span>
                         <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -d <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs/img/"</span> <span style="color: #66cc66;">&#93;</span>
     <span style="color: #b1b100;">then</span>
                                                <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: deleting dir: /img/"</span>
      sudo rm -R /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/img/
    <span style="color: #b1b100;">fi</span>
                                <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -d <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs/picture_library/"</span> <span style="color: #66cc66;">&#93;</span>
     <span style="color: #b1b100;">then</span>
                                                <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: deleting dir: /picture-library/"</span>
      sudo rm -R /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/picture_library/
    <span style="color: #b1b100;">fi</span>
                                <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -d <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs/plesk-stat/"</span> <span style="color: #66cc66;">&#93;</span>
     <span style="color: #b1b100;">then</span>
                                                <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: deleting dir: /plesk-stat/"</span>
      sudo rm -R /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/plesk-stat/
    <span style="color: #b1b100;">fi</span>
                                <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -d <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs/test/"</span> <span style="color: #66cc66;">&#93;</span>
     <span style="color: #b1b100;">then</span>
                                                <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: deleting dir: /test/"</span>
      sudo rm -R /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/<span style="color: #000066;">test</span>/
    <span style="color: #b1b100;">fi</span>
    <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -f <span style="color: #ff0000;">"/home/KyleC/cms/installCms.tar"</span> <span style="color: #66cc66;">&#93;</span>
     <span style="color: #b1b100;">then</span>
      <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: unpacking cms files..."</span>
      sudo tar -xvf /home/KyleC/cms/installCms.tar
     <span style="color: #b1b100;">else</span>
      <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: cms install archive not present. exiting."</span>
      <span style="color: #000066;">exit</span>
    <span style="color: #b1b100;">fi</span>
   <span style="color: #b1b100;">else</span>
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: this directory does not exist. have the domain created first."</span>
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: installation aborted. go rtfm already.  please continue manually."</span>
    <span style="color: #000066;">exit</span>
  <span style="color: #b1b100;">fi</span>
 <span style="color: #b1b100;">else</span>
  <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: installation aborted. go rtfm already. please continue manually."</span>
  <span style="color: #000066;">exit</span>
<span style="color: #b1b100;">fi</span>
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">################################################</span>
<span style="color: #808080; font-style: italic;"># Step 5:  set ownerships and permissions for new install path #</span>
<span style="color: #808080; font-style: italic;">###############################################</span>
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: ok done unpacking, now we need to set the correct permissions. Please provide directory user:"</span>
 <span style="color: #000066;">read</span> userPerms
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> <span style="color: #0000ff;">$userPerms</span> != <span style="color: #ff0000;">""</span> <span style="color: #66cc66;">&#93;</span>
 <span style="color: #b1b100;">then</span>
  <span style="color: #b1b100;">if</span> <span style="color: #66cc66;">&#91;</span> -d <span style="color: #ff0000;">"/var/www/vhosts/$domain/httpdocs/"</span> <span style="color: #66cc66;">&#93;</span>
   <span style="color: #b1b100;">then</span>
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: setting permissions $userPerms.psacln for core files"</span>
     sudo chown -R <span style="color: #0000ff;">$userPerms</span>.psacln /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/*
     sudo chown -R <span style="color: #0000ff;">$userPerms</span>.psacln /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/.htaccess
     sudo chmod -R <span style="color: #cc66cc;">0777</span> /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/sql/
        sudo chmod -R <span style="color: #cc66cc;">0777</span> /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/uploaded/
     sudo chmod -R <span style="color: #cc66cc;">0777</span> /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/lib/includes/db.php
&nbsp;
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: done setting permissions."</span>
  <span style="color: #b1b100;">fi</span>
 <span style="color: #b1b100;">else</span>
  <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: invalid input, please continue manually from permissions step."</span>
                <span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: installation aborted. go rtfm already.  please continue manually."</span>
<span style="color: #b1b100;">fi</span>
&nbsp;
&nbsp;
<span style="color: #808080; font-style: italic;">######################################################</span>
<span style="color: #808080; font-style: italic;"># Step 6: installing database and configuring constants for application #</span>
<span style="color: #808080; font-style: italic;">#####################################################</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: please enter database name:"</span>
 <span style="color: #000066;">read</span> database
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: please enter user name for database '$database':"</span>
 <span style="color: #000066;">read</span> username
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: please enter password for databas user '$username':"</span>
 <span style="color: #000066;">read</span> dbpass
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: ok, lets import the database structure now..."</span>
&nbsp;
 sudo mysql --verbose --<span style="color: #0000ff;">host=</span>mysql-host --<span style="color: #0000ff;">user=</span><span style="color: #0000ff;">$username</span> --<span style="color: #0000ff;">password=</span><span style="color: #0000ff;">$dbpass</span> <span style="color: #0000ff;">$database</span> &lt; /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/sql/installCms.sql
&nbsp;
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"[setup]: database configured, creating config file for cms now..."</span>
&nbsp;
&nbsp;
sudo cat &gt; /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/lib/includes/db.php &lt;&lt;End-of-message
&lt;?
        global \<span style="color: #0000ff;">$db</span>;
        \<span style="color: #0000ff;">$database_server</span> = <span style="color: #ff0000;">'mysql-host'</span>;
        \<span style="color: #0000ff;">$database_user</span> = <span style="color: #ff0000;">'$username'</span>;
        \<span style="color: #0000ff;">$database_password</span> = <span style="color: #ff0000;">'$dbpass'</span>;
        \<span style="color: #0000ff;">$database_name</span> = <span style="color: #ff0000;">'$database'</span>;
        global \<span style="color: #0000ff;">$tbl_prefix</span>;
        \<span style="color: #0000ff;">$tbl_prefix</span> = <span style="color: #ff0000;">'cxcmscore_'</span>;
?&gt;
End-of-message
&nbsp;
sudo chmod -R <span style="color: #cc66cc;">0644</span> /var/www/vhosts/<span style="color: #0000ff;">$domain</span>/httpdocs/lib/includes/db.php
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">""</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">""</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"###############################################################################"</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"#"</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"# [setup]: configurationa file generated at: /var/www/vhosts/$domain/httpdocs/lib/includes/db.php"</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"# [setup]: The CMS is now installed. if you have questions about this script please email kyle@slajax.com"</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"#"</span>
<span style="color: #000066;">echo</span> <span style="color: #ff0000;">"###############################################################################"</span>
&nbsp;
<span style="color: #000066;">exit</span>
&nbsp;</pre></code></div>

There you have it. Not only can I write pretty AJAX scripts, but I&#8217;m a damn good system administrator too!]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2007/07/30/bash-installation-script/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Scene Map - alpha sneak preview</title>
		<link>http://blog.slajax.com/2007/06/07/scenemap-alpha-release-preview/</link>
        <customfield>scenemap.gif</customfield>
		<comments>http://blog.slajax.com/2007/06/07/scenemap-alpha-release-preview/#comments</comments>
		<pubDate>Thu, 07 Jun 2007 18:07:12 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[applications]]></category>

		<category><![CDATA[music]]></category>

		<category><![CDATA[projects]]></category>

		<category><![CDATA[scenemap]]></category>

		<category><![CDATA[sLajax applications]]></category>

		<category><![CDATA[social networking]]></category>

		<guid isPermaLink="false">http://slajax.com/blog/2007/06/07/scenemap-alpha-release-preview/</guid>
		<description><![CDATA[scenemap.net [1] is a new slajax project that combines the power of live maps with the data of facebook, to allow you to easily find directions to your favorite concert. Although it is only in alpha stages, it is promising to be quite a wonderfully useful mash up for scene kids around the world. Here is a little preview:






The service is planned to launch with support for end users and "fans" who are just looking for quick directions to an event, however the goal is to scale this application to support many different features.
Some of these features include:


tour itinerary management for bands - bands will plot their tours and be able to interact in real time with each stop on the tour
street team management and groups - fans will be able to subscribe to their favorite touring events and interact with them. event coordinators will be able to effectively manage their street teams.
ticket purchasing - ticket sales for sponsored tours and demographic reports indicating high sale areas
media and content sharing - blogs, video, photos and tons of great stuff that can be uploaded in real time directly to the application from any medium (cellphone, blackberry) and associated to the event geographically
DIY tour suggestion solution - a solution that will suggest specific tour dates for a DIY artist based on the weight that the venue or promoter records hold for their given areas of promotion


The alpha release has been issued @ http://apps.facebook.com/scenemap/ with the core site and premium service offerings planned to launch next spring. 


[1] http://scenemap.net]]></description>
			<content:encoded><![CDATA[<a href="http://scenemap.net" target="_blank">scenemap.net</a> is a new slajax project that combines the power of live maps with the data of facebook, to allow you to easily find directions to your favorite concert. Although it is only in alpha stages, it is promising to be quite a wonderfully useful mash up for scene kids around the world. Here is a little preview:<br/>

<center>
<img src="http://www.scenemap.net/blog/wp-content/images/scenemap.jpg" rel="lightbox" alt="Scene Map 1.0 Alpha Sneak Preview" />
</center>

<br />
The service is planned to launch with support for end users and &#8220;fans&#8221; who are just looking for quick directions to an event, however the goal is to scale this application to support many different features.
Some of these features include:

<ul>
<li>tour itinerary management for bands - bands will plot their tours and be able to interact in real time with each stop on the tour</li>
<li>street team management and groups - fans will be able to subscribe to their favorite touring events and interact with them. event coordinators will be able to effectively manage their street teams.</li>
<li>ticket purchasing - ticket sales for sponsored tours and demographic reports indicating high sale areas</li>
<li>media and content sharing - blogs, video, photos and tons of great stuff that can be uploaded in real time directly to the application from any medium (cellphone, blackberry) and associated to the event geographically</li>
<li>DIY tour suggestion solution - a solution that will suggest specific tour dates for a DIY artist based on the weight that the venue or promoter records hold for their given areas of promotion</li>
</ul>

The alpha release has been issued @ http://apps.facebook.com/scenemap/ with the core site and premium service offerings planned to launch next spring. 
]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2007/06/07/scenemap-alpha-release-preview/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open source or DEATH!</title>
		<link>http://blog.slajax.com/2007/05/04/open-source-or-death/</link>
        <customfield>opensource_or_death.gif</customfield>
		<comments>http://blog.slajax.com/2007/05/04/open-source-or-death/#comments</comments>
		<pubDate>Fri, 04 May 2007 18:19:29 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[other]]></category>

		<category><![CDATA[comics]]></category>

		<category><![CDATA[linux]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[xkcd]]></category>

		<guid isPermaLink="false">http://slajax.com/blog/2007/05/04/open-source-or-death/</guid>
		<description><![CDATA[

Thanks to Inviz [1] for this great comic posted via #mootools on irc.freenode.net

[1] http://inviz.ru/]]></description>
			<content:encoded><![CDATA[<img src="/wp-content/assets/imgs/open_source.png" width="555"/>

Thanks to <a href="http://inviz.ru/" target="_blank">Inviz</a> for this great comic posted via #mootools on irc.freenode.net]]></content:encoded>
			<wfw:commentRss>http://blog.slajax.com/2007/05/04/open-source-or-death/feed/</wfw:commentRss>
		</item>
		<item>
		<title>sLedit (mooEdit) v1</title>
		<link>http://blog.slajax.com/2007/04/26/mooedit-v-1/</link>
        <customfield>sLedit.gif</customfield>
		<comments>http://blog.slajax.com/2007/04/26/mooedit-v-1/#comments</comments>
		<pubDate>Thu, 26 Apr 2007 13:56:53 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
		
		<category><![CDATA[javascript]]></category>

		<category><![CDATA[mootools]]></category>

		<category><![CDATA[widgets]]></category>

		<category><![CDATA[ajax]]></category>

		<category><![CDATA[mooedit]]></category>

		<category><![CDATA[source code]]></category>

		<guid isPermaLink="false">http://slajax.com/blog/2007/04/26/mooedit-sledit-v-10/</guid>
		<description><![CDATA[I've had a lot of requests to send people mooEdit. Thing is, that I'm way to lazy to package the whole thing. So I'm just going to post the source here, and let you figure it out. It's pretty easy, I'm sure you can do it. Oh yeah, and if anything is wrong with this code, let me know. I kinda just threw the image portion in really quickly without testing. It came from version 2 and should be backwards compatible, but there's always that chance that I missed something.

//////////////////////////////////////////////////////////////////////////////////////////////////
/*  sLedit v1.0 - 3:35 PM 29/03/2007
//////////////////////////////////////////////////////////////////////////////////////////////////
@author: kc@slajax.com
@description: First version of sLedit. Makes all element of a class conditionally editable.
*/
//////////////////////////////////////////////////////////////////////////////////////////////////
// init options - edit these for your purposes
//////////////////////////////////////////////////////////////////////////////////////////////////
window.addEvent('domready', function(){
var edit = new sLedit('.sLedit');
});
//////////////////////////////////////////////////////////////////////////////////////////////////
// class - no editing below this line
//////////////////////////////////////////////////////////////////////////////////////////////////
tinyMCE.init({
mode : "",
theme : "advanced",
plugins : "",
theme_advanced_buttons1 : "bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright, justifyfull,bullist,numlist,undo,redo,link,unlink,&#124;,image",
theme_advanced_buttons2 : "",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_path_location : "bottom",
extended_valid_elements : "a[name&#124;href&#124;target&#124;title&#124;onclick],img[class&#124;src&#124;border=0&#124;alt&#124;title&#124;hspace&#124;vspace&#124;width&#124;height&#124;align&#124;onmouseover&#124;onmouseout&#124;name],hr[class&#124;width&#124;size&#124;noshade],font[face&#124;size&#124;color&#124;style],span[class&#124;align&#124;style]",
file_browser_callback : "fileBrowserCallBack",
paste_use_dialog : false,
theme_advanced_resizing : true,
theme_advanced_resize_horizontal : false,
apply_source_formatting : false
});
function fileBrowserCallBack(field_name, url, type, win) {
var connector = "../../filemanager/browser.html?Connector=connectors/php/connector.php";
var enableAutoTypeSelection = true;
var cType;
tinymcpuk_field = field_name;
tinymcpuk = win;
switch (type) {
case "image":
cType = "Image";
break;
case "flash":
cType = "Flash";
break;
case "file":
cType = "File";
break;
}
if (enableAutoTypeSelection &#38;&#38; cType) {	connector += "&#38;Type=" + cType;	}
window.open(connector, "tinymcpuk", "modal,width=600,height=400");
}


var sLedit = new Class({
initialize: function(sLclass) {
//start editor

$$(sLclass).each(function(el) {

var hilighter = new Fx.Style(el, 'background-color', {wait: false});

$(el).addEvent('mouseover', function() {
hilighter.start('#ffffcc');
});

$(el).addEvent('mouseout', function() {
hilighter.start('#ffffff');
});

if($(el).getProperty('rel').indexOf('textarea') &#62; -1){

$(el).addEvent('click', function() {

var rel = $(el).getProperty('rel');
var params = parseQuery(rel.substr(5,999));

$(el).style.display = 'none';
var content = this.innerHTML;
var container = new Element('div').injectAfter(el);

//check params are suitable or set base attributes
if(params['rows'] == undefined)	params['rows'] = '15';
if(params['cols'] == undefined) params['cols'] = '65';

var txtID = 'mce_'+$(el).getProperty('id');

//textarea
var textarea = new Element('textarea').injectInside(container);
textarea.value = content;
textarea.setProperty('class', 'mceEditor');
textarea.setProperty('id', txtID);
textarea.setStyle('position','relative');
textarea.setProperties({
rows: params['rows'],
cols: params['cols']
});

setTextareaToTinyMCE(txtID);

//save + cancel div
var saveDiv = new Element('div').injectInside(container);
saveDiv.setProperty('class', 'txtAreaSave');

//cancel
var cancel = new Element('a').injectInside(saveDiv);
cancel.setProperty('href', 'javascript:;');
cancel.innerHTML = 'cancel';

//seperator
var span = new Element('span').injectAfter(cancel);
span.innerHTML = ' - ';

//save
var save = new Element('a').injectInside(saveDiv);
save.setProperty('href', 'javascript:;');
save.innerHTML = 'save';

//response
var response = new Element('div').injectBefore(saveDiv);
response.setStyles({'width':'600px'});
response.id = 'txtReponse';

save.addEvent('click', function() {
unsetTextareaToTinyMCE(txtID);
$(el).style.display = 'block';
$(el).innerHTML = textarea.value;

//values
var rel = $(el).getProperty('rel');
var params = parseQuery(rel.substr(5,999));
var url = '/ajax/update.php';
var pars = 'module_type='+params['module_type']
+'&#38;type_sid='+params['type_sid']
+'&#38;sid='+params['sid']
+'&#38;content='+escape(textarea.value);

new Ajax( url, {
method: 'post',
postBody: pars,
update: $('txtReponse'),
onComplete: function(){
var responseFade = new Fx.Style('txtReponse', 'opacity', {
duration:3000,
onComplete:function(){
$('txtReponse').remove();
}
});
responseFade.start.pass([1,0],responseFade).delay(2000);
}
}
).request();

textarea.remove();
this.remove();
cancel.remove();
span.remove();
saveDiv.remove();
});

cancel.addEvent('click', function() {
unsetTextareaToTinyMCE(txtID);
$(el).style.display = 'block';
textarea.remove();
this.remove();
save.remove();
span.remove();
saveDiv.remove();
});

});
}
if($(el).getProperty('rel') == 'input'){
$(el).addEvent('click', function() {
$(el).style.display = 'none';

var content = this.innerHTML;
var container = this.parentNode;

//input
var textarea = new Element('input').injectInside(container);
textarea.value = content;
textarea.setProperty('size',5);

//save + cancel div
var saveDiv = new Element('span').injectInside(container);
saveDiv.setProperty('class', 'inputSave');

//cancel
var cancel = new Element('a').injectInside(saveDiv);
cancel.setProperty('href', 'javascript:;');
cancel.innerHTML = 'x';

//seperator
var span = new Element('span').injectAfter(cancel);
span.innerHTML = ' - ';

//save
var save = new Element('a').injectInside(saveDiv);
save.setProperty('href', 'javascript:;');
save.innerHTML = 's';

save.addEvent('click', function() {
$(el).style.display = 'block';
$(el).innerHTML = textarea.value;

/* new Ajax() */
textarea.remove();
this.remove();
cancel.remove();
span.remove();
saveDiv.remove();
});
cancel.addEvent('click', function() {
$(el).style.display = 'block';
textarea.remove();
this.remove();
save.remove();
span.remove();
saveDiv.remove();
});
});
}
if($(el).getProperty('rel').indexOf('image') &#62; -1){

var rel = $(el).getProperty('rel');
var params = parseQuery(rel.substr(5,999));
$(el).style.cursor = 'pointer';
if( $(el).getParent().getParent().href ) $(el).getParent().getParent().href = '#';
if( $(el).getParent().href ) $(el).getParent().href = '#';

$(el).addEvent('click', function() {

var imgForm = new Element('form').setProperties({
'action': '/ajax/update.php',
'method': 'post',
'id': 'newImageForm',
'enctype':'multipart/form-data'
});
imgForm.setStyles({ 'text-align':'left' });
imgForm.innerHTML = '

'
+'

'
+' '
+' '
+'Alt Tag: '
+'File to Upload:
';var boxHtml = new MooPrompt('Upload a New Image', imgForm, {
buttons: 2,
button1: 'Submit',
button2: 'Cancel',
width: 500,
height: 400,
onButton1: function() {
console.log($('userimage').value.length &#62; 0)
if( $('userimage').value.length &#60; 1 &#124;&#124;
$('userimage').value.length &#62; 0 &#38;&#38;
$('userimage').value.indexOf('.jpg') &#62; -1)
$('newImageForm').submit();
else
alert('Please only upload .jpg files');
}
});
});
}
});}
});
//////////////////////////////////////////////////////////////////////////
// TinyMCE helper functions
//////////////////////////////////////////////////////////////////////////
bTextareaWasTinyfied = false; //this should be global, could be stored in a cookie...
function setTextareaToTinyMCE(sEditorID) {
var oEditor = document.getElementById(sEditorID);
if(oEditor &#38;&#38; !bTextareaWasTinyfied) {
tinyMCE.execCommand('mceAddControl', true, sEditorID);
bTextareaWasTinyfied = true;
}
return;
}
function unsetTextareaToTinyMCE(sEditorID) {
var oEditor = document.getElementById(sEditorID);
if(oEditor &#38;&#38; bTextareaWasTinyfied) {
tinyMCE.execCommand('mceRemoveControl', true, sEditorID);
bTextareaWasTinyfied = false;
}
return;
}
//////////////////////////////////////////////////////////////////////////
// parseQuery code borrowed from ibox borrowed from thickbox, Thanks Cody!
// retrieve rel attributes with cols=x&#38;rows=x
//////////////////////////////////////////////////////////////////////////
parseQuery = function(query) {
var Params = new Object ();
if (!query) return Params;
var Pairs = query.split(/[;&#38;]/);
for ( var i = 0; i &#60; Pairs.length; i++ ) {
var KeyVal = Pairs[i].split('=');
if ( ! KeyVal &#124;&#124; KeyVal.length != 2 ) continue;
var key = unescape( KeyVal[0] );
var val = unescape( KeyVal[1] );
val = val.replace(/\+/g, ' ');
Params[key] = val;
}
return Params;
}


So the whole idea, is that you initiate the class at the bottom of the page, and it loops through all class elements applying a conditional editable feature to that element. I decided to add image editing via moo Prompt [1] so make sure you get that script too. You'll also need tinymce for this version (tinypuk support also included).

Ok, now for practical examples so I'm not answering emails about this:









Now for the different editable areas:


Image:

TextArea:
TEXTTEXTTEXT
input field:
TEXTTEXTTEXT


And then just run the class:


window.onload = function(){
new sLedit(".sLedit");
};


And that should pretty much do it. It's a fairly simple but unrevised script. I've done some new variations of it, however those will remain closed source for a while. I was thinking of putting up demos for the image and input fields, but for now I'll just give you the textarea example:



Download the source code here [2]

[1] http://demo.slajax.com/mooPrompt
[2] http://assets.slajax.com/filestore/code/sLedit.v1.rar]]></description>
			<content:encoded><![CDATA[I&#8217;ve had a lot of requests to send people mooEdit. Thing is, that I&#8217;m way to lazy to package the whole thing. So I&#8217;m just going to post the source here, and let you figure it out. It&#8217;s pretty easy, I&#8217;m sure you can do it. Oh yeah, and if anything is wrong with this code, let me know. I kinda just threw the image portion in really quickly without testing. It came from version 2 and should be backwards compatible, but there&#8217;s always that chance that I missed something.
<div class='codeWrapper'><div class='codeTitle'>javascript<span class='codeInstruct'>hover edges to scroll</span></div><code><pre>&nbsp;
<span style="color: #009900; font-style: italic;">//////////////////////////////////////////////////////////////////////////////////////////////////</span>
<span style="color: #009900; font-style: italic;">/*  sLedit v1.0 - 3:35 PM 29/03/2007
//////////////////////////////////////////////////////////////////////////////////////////////////
@author: kc@slajax.com
@description: First version of sLedit. Makes all element of a class conditionally editable.
*/</span>
<span style="color: #009900; font-style: italic;">//////////////////////////////////////////////////////////////////////////////////////////////////</span>
<span style="color: #009900; font-style: italic;">// init options - edit these for your purposes</span>
<span style="color: #009900; font-style: italic;">//////////////////////////////////////////////////////////////////////////////////////////////////</span>
window.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'domready'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> edit = <span style="color: #003366; font-weight: bold;">new</span> sLedit<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'.sLedit'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #009900; font-style: italic;">//////////////////////////////////////////////////////////////////////////////////////////////////</span>
<span style="color: #009900; font-style: italic;">// class - no editing below this line</span>
<span style="color: #009900; font-style: italic;">//////////////////////////////////////////////////////////////////////////////////////////////////</span>
tinyMCE.<span style="color: #006600;">init</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span>
mode : <span style="color: #3366CC;">""</span>,
theme : <span style="color: #3366CC;">"advanced"</span>,
plugins : <span style="color: #3366CC;">""</span>,
theme_advanced_buttons1 : <span style="color: #3366CC;">"bold,italic,underline,separator,strikethrough,justifyleft,justifycenter,justifyright, justifyfull,bullist,numlist,undo,redo,link,unlink,|,image"</span>,
theme_advanced_buttons2 : <span style="color: #3366CC;">""</span>,
theme_advanced_buttons3 : <span style="color: #3366CC;">""</span>,
theme_advanced_toolbar_location : <span style="color: #3366CC;">"top"</span>,
theme_advanced_toolbar_align : <span style="color: #3366CC;">"left"</span>,
theme_advanced_path_location : <span style="color: #3366CC;">"bottom"</span>,
extended_valid_elements : <span style="color: #3366CC;">"a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]"</span>,
file_browser_callback : <span style="color: #3366CC;">"fileBrowserCallBack"</span>,
paste_use_dialog : <span style="color: #003366; font-weight: bold;">false</span>,
theme_advanced_resizing : <span style="color: #003366; font-weight: bold;">true</span>,
theme_advanced_resize_horizontal : <span style="color: #003366; font-weight: bold;">false</span>,
apply_source_formatting : <span style="color: #003366; font-weight: bold;">false</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #003366; font-weight: bold;">function</span> fileBrowserCallBack<span style="color: #66cc66;">&#40;</span>field_name, url, type, win<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> connector = <span style="color: #3366CC;">"../../filemanager/browser.html?Connector=connectors/php/connector.php"</span>;
<span style="color: #003366; font-weight: bold;">var</span> enableAutoTypeSelection = <span style="color: #003366; font-weight: bold;">true</span>;
<span style="color: #003366; font-weight: bold;">var</span> cType;
tinymcpuk_field = field_name;
tinymcpuk = win;
<span style="color: #000066; font-weight: bold;">switch</span> <span style="color: #66cc66;">&#40;</span>type<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">"image"</span>:
cType = <span style="color: #3366CC;">"Image"</span>;
<span style="color: #000066; font-weight: bold;">break</span>;
<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">"flash"</span>:
cType = <span style="color: #3366CC;">"Flash"</span>;
<span style="color: #000066; font-weight: bold;">break</span>;
<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">"file"</span>:
cType = <span style="color: #3366CC;">"File"</span>;
<span style="color: #000066; font-weight: bold;">break</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>enableAutoTypeSelection &amp;amp;&amp;amp; cType<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>	connector += <span style="color: #3366CC;">"&amp;amp;Type="</span> + cType;	<span style="color: #66cc66;">&#125;</span>
window.<span style="color: #006600;">open</span><span style="color: #66cc66;">&#40;</span>connector, <span style="color: #3366CC;">"tinymcpuk"</span>, <span style="color: #3366CC;">"modal,width=600,height=400"</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></code></div>

<div class='codeWrapper'><div class='codeTitle'>javascript<span class='codeInstruct'>hover edges to scroll</span></div><code><pre>&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> sLedit = <span style="color: #003366; font-weight: bold;">new</span> <span style="color: #003366; font-weight: bold;">Class</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span>
initialize: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>sLclass<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
<span style="color: #009900; font-style: italic;">//start editor</span>
&nbsp;
$$<span style="color: #66cc66;">&#40;</span>sLclass<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">each</span><span style="color: #66cc66;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> hilighter = <span style="color: #003366; font-weight: bold;">new</span> Fx.<span style="color: #006600;">Style</span><span style="color: #66cc66;">&#40;</span>el, <span style="color: #3366CC;">'background-color'</span>, <span style="color: #66cc66;">&#123;</span>wait: <span style="color: #003366; font-weight: bold;">false</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'mouseover'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
hilighter.<span style="color: #006600;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'#ffffcc'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'mouseout'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
hilighter.<span style="color: #006600;">start</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'#ffffff'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'rel'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">indexOf</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'textarea'</span><span style="color: #66cc66;">&#41;</span> &amp;gt; -<span style="color: #CC0000;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
&nbsp;
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'click'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> rel = $<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'rel'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #003366; font-weight: bold;">var</span> params = parseQuery<span style="color: #66cc66;">&#40;</span>rel.<span style="color: #006600;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">5</span>,<span style="color: #CC0000;">999</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">style</span>.<span style="color: #006600;">display</span> = <span style="color: #3366CC;">'none'</span>;
<span style="color: #003366; font-weight: bold;">var</span> content = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">innerHTML</span>;
<span style="color: #003366; font-weight: bold;">var</span> container = <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectAfter</span><span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//check params are suitable or set base attributes</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'rows'</span><span style="color: #66cc66;">&#93;</span> == undefined<span style="color: #66cc66;">&#41;</span>	params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'rows'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #3366CC;">'15'</span>;
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'cols'</span><span style="color: #66cc66;">&#93;</span> == undefined<span style="color: #66cc66;">&#41;</span> params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'cols'</span><span style="color: #66cc66;">&#93;</span> = <span style="color: #3366CC;">'65'</span>;
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> txtID = <span style="color: #3366CC;">'mce_'</span>+$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'id'</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//textarea</span>
<span style="color: #003366; font-weight: bold;">var</span> textarea = <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'textarea'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectInside</span><span style="color: #66cc66;">&#40;</span>container<span style="color: #66cc66;">&#41;</span>;
textarea.<span style="color: #006600;">value</span> = content;
textarea.<span style="color: #006600;">setProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'class'</span>, <span style="color: #3366CC;">'mceEditor'</span><span style="color: #66cc66;">&#41;</span>;
textarea.<span style="color: #006600;">setProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'id'</span>, txtID<span style="color: #66cc66;">&#41;</span>;
textarea.<span style="color: #006600;">setStyle</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'position'</span>,<span style="color: #3366CC;">'relative'</span><span style="color: #66cc66;">&#41;</span>;
textarea.<span style="color: #006600;">setProperties</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span>
rows: params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'rows'</span><span style="color: #66cc66;">&#93;</span>,
cols: params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'cols'</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
setTextareaToTinyMCE<span style="color: #66cc66;">&#40;</span>txtID<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//save + cancel div</span>
<span style="color: #003366; font-weight: bold;">var</span> saveDiv = <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectInside</span><span style="color: #66cc66;">&#40;</span>container<span style="color: #66cc66;">&#41;</span>;
saveDiv.<span style="color: #006600;">setProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'class'</span>, <span style="color: #3366CC;">'txtAreaSave'</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//cancel</span>
<span style="color: #003366; font-weight: bold;">var</span> cancel = <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'a'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectInside</span><span style="color: #66cc66;">&#40;</span>saveDiv<span style="color: #66cc66;">&#41;</span>;
cancel.<span style="color: #006600;">setProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'href'</span>, <span style="color: #3366CC;">'javascript:;'</span><span style="color: #66cc66;">&#41;</span>;
cancel.<span style="color: #006600;">innerHTML</span> = <span style="color: #3366CC;">'cancel'</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//seperator</span>
<span style="color: #003366; font-weight: bold;">var</span> span = <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'span'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectAfter</span><span style="color: #66cc66;">&#40;</span>cancel<span style="color: #66cc66;">&#41;</span>;
span.<span style="color: #006600;">innerHTML</span> = <span style="color: #3366CC;">' - '</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//save</span>
<span style="color: #003366; font-weight: bold;">var</span> save = <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'a'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectInside</span><span style="color: #66cc66;">&#40;</span>saveDiv<span style="color: #66cc66;">&#41;</span>;
save.<span style="color: #006600;">setProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'href'</span>, <span style="color: #3366CC;">'javascript:;'</span><span style="color: #66cc66;">&#41;</span>;
save.<span style="color: #006600;">innerHTML</span> = <span style="color: #3366CC;">'save'</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//response</span>
<span style="color: #003366; font-weight: bold;">var</span> response = <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectBefore</span><span style="color: #66cc66;">&#40;</span>saveDiv<span style="color: #66cc66;">&#41;</span>;
response.<span style="color: #006600;">setStyles</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span><span style="color: #3366CC;">'width'</span>:<span style="color: #3366CC;">'600px'</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
response.<span style="color: #006600;">id</span> = <span style="color: #3366CC;">'txtReponse'</span>;
&nbsp;
save.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'click'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
unsetTextareaToTinyMCE<span style="color: #66cc66;">&#40;</span>txtID<span style="color: #66cc66;">&#41;</span>;
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">style</span>.<span style="color: #006600;">display</span> = <span style="color: #3366CC;">'block'</span>;
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">innerHTML</span> = textarea.<span style="color: #006600;">value</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//values</span>
<span style="color: #003366; font-weight: bold;">var</span> rel = $<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'rel'</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #003366; font-weight: bold;">var</span> params = parseQuery<span style="color: #66cc66;">&#40;</span>rel.<span style="color: #006600;">substr</span><span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">5</span>,<span style="color: #CC0000;">999</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #003366; font-weight: bold;">var</span> url = <span style="color: #3366CC;">'/ajax/update.php'</span>;
<span style="color: #003366; font-weight: bold;">var</span> pars = <span style="color: #3366CC;">'module_type='</span>+params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'module_type'</span><span style="color: #66cc66;">&#93;</span>
+<span style="color: #3366CC;">'&amp;amp;type_sid='</span>+params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'type_sid'</span><span style="color: #66cc66;">&#93;</span>
+<span style="color: #3366CC;">'&amp;amp;sid='</span>+params<span style="color: #66cc66;">&#91;</span><span style="color: #3366CC;">'sid'</span><span style="color: #66cc66;">&#93;</span>
+<span style="color: #3366CC;">'&amp;amp;content='</span>+escape<span style="color: #66cc66;">&#40;</span>textarea.<span style="color: #006600;">value</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #003366; font-weight: bold;">new</span> Ajax<span style="color: #66cc66;">&#40;</span> url, <span style="color: #66cc66;">&#123;</span>
method: <span style="color: #3366CC;">'post'</span>,
postBody: pars,
update: $<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'txtReponse'</span><span style="color: #66cc66;">&#41;</span>,
onComplete: <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
<span style="color: #003366; font-weight: bold;">var</span> responseFade = <span style="color: #003366; font-weight: bold;">new</span> Fx.<span style="color: #006600;">Style</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'txtReponse'</span>, <span style="color: #3366CC;">'opacity'</span>, <span style="color: #66cc66;">&#123;</span>
duration:<span style="color: #CC0000;">3000</span>,
onComplete:<span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
$<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'txtReponse'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
responseFade.<span style="color: #006600;">start</span>.<span style="color: #006600;">pass</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span><span style="color: #CC0000;">1</span>,<span style="color: #CC0000;">0</span><span style="color: #66cc66;">&#93;</span>,responseFade<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">delay</span><span style="color: #66cc66;">&#40;</span><span style="color: #CC0000;">2000</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">request</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
textarea.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
cancel.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
span.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
saveDiv.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
cancel.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'click'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
unsetTextareaToTinyMCE<span style="color: #66cc66;">&#40;</span>txtID<span style="color: #66cc66;">&#41;</span>;
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">style</span>.<span style="color: #006600;">display</span> = <span style="color: #3366CC;">'block'</span>;
textarea.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
save.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
span.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
saveDiv.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #66cc66;">&#40;</span>$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">getProperty</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'rel'</span><span style="color: #66cc66;">&#41;</span> == <span style="color: #3366CC;">'input'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#123;</span>
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">addEvent</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'click'</span>, <span style="color: #003366; font-weight: bold;">function</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
$<span style="color: #66cc66;">&#40;</span>el<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">style</span>.<span style="color: #006600;">display</span> = <span style="color: #3366CC;">'none'</span>;
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> content = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">innerHTML</span>;
<span style="color: #003366; font-weight: bold;">var</span> container = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">parentNode</span>;
&nbsp;
<span style="color: #009900; font-style: italic;">//input</span>
<span style="color: #003366; font-weight: bold;">var</span> textarea = <span style="color: #003366; font-weight: bold;">new</span> Element<span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'input'</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">injectInside</span><span style="color: #66cc66;">&#40;</span>container<spa