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

<channel>
	<title>3magine</title>
	<atom:link href="http://www.3magine.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.3magine.com</link>
	<description>Toronto web design &#38; web development</description>
	<lastBuildDate>Wed, 05 Jun 2013 11:25:11 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>New in Rails 4.0: Rails Queue</title>
		<link>http://www.3magine.com/blog/new-in-rails-4-0-rails-queue/</link>
		<comments>http://www.3magine.com/blog/new-in-rails-4-0-rails-queue/#comments</comments>
		<pubDate>Wed, 11 Jul 2012 18:00:06 +0000</pubDate>
		<dc:creator>Evan Cancelliere</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.3magine.com/?p=1232</guid>
		<description><![CDATA[At 3magine, we make use of both Ruby on Rails as well as PHP / MySQL for our social networking projects and web applications. Over the past few years, one of my largest annoyances as a Rails developer was sending &#8230; <a href="http://www.3magine.com/blog/new-in-rails-4-0-rails-queue/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>At 3magine, we make use of both Ruby on Rails as well as PHP / MySQL for our <a href="/social-networks">social networking</a> projects and <a href="/web-applications">web applications</a>.</p>
<p>Over the past few years, one of my largest annoyances as a Rails developer was sending email. Why? Because it&#8217;s slow. The client often has to wait 5-6 seconds for a response, which is unacceptably long, be it a normal page reload or even AJAX.</p>
<p>To combat this issue, one of the most common solutions was to use a background processor. You would send your mail to the job processor, it would queue it up, and send them out later, while your application can return a response right away.</p>
<p>I stopped using this method 2 years ago. Background job processors in Ruby were a bit of a mess. You would have to watch them, monitor them, code around them, and I found it to be just to much overhead for simply sending mail. The instability of long-running Ruby processes meant that running this queue was a bit of a job on it&#8217;s own, requiring babysitting or your mail wouldn&#8217;t be going out.</p>
<p>Instead, I found tra&#8217;s excellent <a href="https://github.com/tra/spawn/">spawn</a> project, letting me fork calls to <code>ActionMailer</code> to be executed immediately. Sure, sending a TON of mail at once instead of queueing it could turn into a theoretical problem, but I&#8217;ve never encountered it. After we migrated our Rails deployments to Ruby 1.9, I modified the spawn library to be compatible with the new version of Ruby, and have been copying it into vendor/plugins for every new project I start. It&#8217;s one of the few tools that has stayed with me from project to project for such a long period of time.</p>
<p>I was excited to hear that similar functionality would be included in the next Rails release. Up and coming in Rails 4.0 is a new <a href="http://reefpoints.dockyard.com/ruby/2012/06/25/rails-4-sneak-peek-queueing.html">Queuing</a> system, which on the surface provides a DSL very similar to how I use spawn. This makes it extremely easy to run asynchronous code &#8216;out-of-the-box&#8217;, without having to depend on external libraries, processes, or daemons. On top of this new Queue, a dedicated <a href="http://reefpoints.dockyard.com/ruby/2012/06/26/rails-4-sneak-peek-async-actionmailer.html">Asynchronous ActionMailer</a> is being released to specifically address sending mail asynchronously.</p>
<p>While I love the idea, I wanted to address one aspect of it&#8217;s implementation. When you are passing variables from your code to the mailer, you &#8220;should&#8221; not pass objects, instead you should pass something that can uniquely identify the object to be picked up again on the other side (for example, an <code>id</code> to be used with <code>find()</code>).</p>
<p>I can&#8217;t decide if this is good or bad design. On one hand, I can&#8217;t help but think the additional code is just a needless repetition. You are quite literally repeating yourself, calling the same (or similar) code to fetch from the database an object you already have. Additionally, this will keep one implementation incompatible with the next. You can&#8217;t just &#8216;switch on&#8217; asynchronous ActionMailer without refactoring your code.</p>
<p>Is it bad to be passing mutable objects around between different threads? In theory yes, but in practice, I have yet to be bitten by a problem because of this. Be careful with your code.</p>
<p>Pros:<br />
  &#8211; Not passing around mutable objects to separate threads<br />
Cons:<br />
  &#8211; Not 1:1 compatible with &#8216;synchronous&#8217; ActionMailer code<br />
  &#8211; Additional database calls<br />
  &#8211; Not DRY</p>
<p>So there we have it. No more background job-queue overhead to send mail or do simple asynchronous tasks. Just one of the features that&#8217;s going to make Rails even better in 4.0. Let us know what you think in the comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/new-in-rails-4-0-rails-queue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Steam iPhone app redesign</title>
		<link>http://www.3magine.com/blog/steam-iphone-app-redesign/</link>
		<comments>http://www.3magine.com/blog/steam-iphone-app-redesign/#comments</comments>
		<pubDate>Fri, 06 Jul 2012 18:41:56 +0000</pubDate>
		<dc:creator>Krystian Frencel</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.3magine.com/?p=1216</guid>
		<description><![CDATA[We’re all avid gamers here at 3magine. When we’re not building beautiful interfaces or coding complex systems, we’re playing games. Diablo 3 and StarCraft 2 are staples here at the office, but the one game that I’ve forever fallen in &#8230; <a href="http://www.3magine.com/blog/steam-iphone-app-redesign/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>We’re all avid gamers here at 3magine. When we’re not building beautiful interfaces or coding complex systems, we’re playing games. Diablo 3 and StarCraft 2 are staples here at the office, but the one game that I’ve forever fallen in love with and play almost on a daily basis is Counter Strike. I’ve been playing it since version 1.5 (it has been 10 years since the release of Counter Strike 1.5) and I can’t say that I’ve ever become bored of the game. For those of you unaware of the history of Counter Strike, it was originally a Half-Life modification released in 1999. In 2000 the original developers partnered with Valve, and the rest is history.</p>
<p>This brings us to Steam, a digital distribution system and multiplayer communication platform developed by Valve which houses Counter Strike along with some 1500+ other titles.</p>
<p>To me, Steam has always been about statistics and the multiplayer aspect of games, or should I say, I wish Steam was more focused on statistics and the multiplayer aspect of games.</p>
<p>Let’s leave the desktop app out of this as I’d like to bring focus to the Steam iPhone app, specifically the lack of game and multiplayer centric features. I remember back in the day, being able to go to a Counter Strike server website (a server I’ve often played at) and immediately be able to look up some very interesting statistics; how many hours I’ve played the past week, the different types of games I’ve played, be it a regular game or a gun game death match. Seeing my rankings, my kill statistics, my per weapon kill statistics, and much, much more. This functionality does not exist in Steam, desktop or mobile.</p>
<p>When the Steam App came out on the iPhone, I was quite excited. I thought that perhaps Valve added some mobile statistical information over their desktop app (which I think on its own needs a significant overhaul in both usability and what it brings to its users). I thought I would finally be able to browse my rankings across the different servers I play at, see how many times I’ve knifed the last round I played, or how many headshots I got in the last game. Well, to keep it short, I was quite disappointed. Not only was none of that available, but to actually get to any statistics on a game I play is next to impossible. There does not exist a dedicated “Games” section&#8230; and there aren’t any interesting stats for any games I play available on the app, at all! Sure I can chat with friends&#8230; and I can purchase a desktop game&#8230; on my iPhone&#8230; but I can’t casually browse what interests me most&#8230; game statistics. Why would I want to buy a game on my iPhone, to play on my desktop? I’d rather do that on my desktop, where I can immediately download the game after the purchase. When I’m on the iPhone, where I can’t play games, I want to be entertained. What will entertain me about games when I can’t play them? Checking out stats on the games I play. I want to see what’s been happening on the servers I play. I want to check out how my kill to death ratio has been improving over the last few weeks. I want to see how my accuracy is doing with the shotty. Unfortunately I can’t. </p>
<p>If Steam can’t bring us all of these features, we can at least do a hypothetical redesign to bring them to Steam. This kind of functionality will probably never see the light of day, but the least we can do is hope.</p>
<p>Today I’ll be introducing the general art direction of the app, as well as a streamlined navigation and the part that excites me the most&#8230; an introduction to games! And so we begin our journey of our pretend Steam iPhone app redesign, which we will be bringing to you over the next few months. This is the first post of many in the Steam redesign series.</p>
<img src="http://www.3magine.com/wp-content/uploads/2012/07/login.jpg" alt="Steam iPhone app login screen" title="Steam login" class="alignnone size-full wp-image-1217" />
<p>We&#8217;ll start off with the login screen. If you are using this app for the first time, you have to log in. We’re keeping with Steam’s branding and the use of the app’s official colours of predominantly grey with accents of blue.</p>
<img src="http://www.3magine.com/wp-content/uploads/2012/07/games.jpg" alt="Steam iPhone app games screen" title="Steam games" class="alignnone size-full wp-image-1218" />
<p>The guts of the Steam iPhone app: We would like to introduce the “Games” section. You’ll also notice a new, very streamlined navigation, listing only “Profile”, “Games” and “Friends”. No more buying games, viewing catalogues, wishlists or news feeds. Steam is about games, and the people you play them with. </p>
<p>The “Games” overview screen gives you a quick and easy access to all the games you play. The blue “activity” indicator gives you a quick visual indication that there is new activity in a particular game. This could be a new achievement, a new comment, or a new forum post. We’re envisioning additional social elements to engage you when you can’t actually play the game (more on that in later parts of the series).</p>
<img src="http://www.3magine.com/wp-content/uploads/2012/07/steam.jpg" alt="" title="steam" class="aligncenter size-full wp-image-1227" style="margin-top:40px;" />
<p>Your feedback is greatly appreciated, especially if you’d like to suggest how you would improve the current Steam iPhone app. Leave a post in the comments below. How would you change the Steam iPhone app?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/steam-iphone-app-redesign/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Camel Case Spaces</title>
		<link>http://www.3magine.com/blog/camel-case-spaces/</link>
		<comments>http://www.3magine.com/blog/camel-case-spaces/#comments</comments>
		<pubDate>Sat, 06 Aug 2011 14:11:52 +0000</pubDate>
		<dc:creator>Karl Schellenberg</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.3magine.com/blog/?p=172</guid>
		<description><![CDATA[Web development is all about having fun, so let&#8217;s have some fun with camel case strings. function camelCaseSpaces($s){ return trim(preg_replace("/[A-Z]/",' ${0}',$s)); } Using this custom function you can now convert strings such as &#8220;iAmSuperCamelCaseString&#8221; to &#8220;i Am Super Camel Case &#8230; <a href="http://www.3magine.com/blog/camel-case-spaces/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p class="disappear">Web development is all about having fun, so let&#8217;s have some fun with camel case strings.</p>
<pre name="code" class="php disappear">
function camelCaseSpaces($s){
    return trim(preg_replace("/[A-Z]/",' ${0}',$s));
}
</pre>
<p class="disappear">Using this custom function you can now convert strings such as &#8220;iAmSuperCamelCaseString&#8221; to &#8220;i Am Super Camel Case String&#8221;.  One day while working on a CodeIgniter project, I needed a quick access to list links to all available methods in one specific controller where most of the methods where in a camelCase format.  To achieve my goal I came up with the above function and the following sneaky code within the &#8220;index&#8221; method of a controller named &#8220;Buildout&#8221;:</p>
<pre name="code" class="php disappear">
//Get all method names:
$m=get_class_methods($this);

//Unset the ones I do not need:
unset(
$m[array_search('index',$m)],
$m[array_search('__construct',$m)],
$m[array_search('get_instance',$m)]
);

//Print all links to my methods:
foreach($m as $n)
   print '&lt;href="/buildout/'.$n.'"&gt;'.ucwords(camelCaseSpaces($n)).'&lt;/a&gt;&lt;br /&gt;';
</pre>
<p class="disappear">Thanks for reading and feel free to re-use this neat trick.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/camel-case-spaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mootools wrapInner</title>
		<link>http://www.3magine.com/blog/mootools-wrapinner/</link>
		<comments>http://www.3magine.com/blog/mootools-wrapinner/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 11:46:22 +0000</pubDate>
		<dc:creator>Karl Schellenberg</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.3magine.com/blog/?p=142</guid>
		<description><![CDATA[Today I worked on a project which was using jQuery and have encountered a nifty little function called wrapInnner. What it does is wraps the html contents of the element calling it with the element that is being passed to &#8230; <a href="http://www.3magine.com/blog/mootools-wrapinner/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p class="disappear">Today I worked on a project which was using jQuery and have encountered a nifty little function called wrapInnner. What it does is wraps the html contents of the element calling it with the element that is being passed to the function. Here&#8217;s a very simple jQuery example:</p>
<pre class="javascript disappear">&lt;div id="user"&gt;My name is Pedro&lt;/div&gt;</pre>
<pre class="javascript disappear">$('user').wrapInner($("&lt;span class='red'&gt;&lt;/span&gt;"));</pre>
<p class="disappear">will produce:</p>
<pre class="javascript disappear">&lt;div id="user"&gt;&lt;span class="red"&gt;My name is Pedro&lt;/span&gt;&lt;/div&gt;</pre>
<p class="disappear">I&#8217;ve tried doing the same in mootools using Element.wraps but it doesn&#8217;t accept html, it only accepts the id of an element or an element itself. There was no other Element method that could accomplish this task so I decided to write one.  And here goes the implementation of wrapInner for Mootools:</p>
<pre class="javascript disappear">Element.implement({
     wrapInner:function(e){
          this.clone(false,true).adopt(
               $(e).set('html',this.get('html'))
          ).replaces(this);
     }
});</pre>
<p class="disappear">and the same example using mootools wrapInner:</p>
<pre class="javascript disappear">&lt;div id="user"&gt;My name is Pedro&lt;/div&gt;</pre>
<pre class="javascript disappear">$('user').wrapInner(new Element('span',{'class':'red'}));</pre>
<p class="disappear">will produce:</p>
<pre class="javascript disappear">&lt;div id="user"&gt;&lt;span class="red"&gt;My name  is Pedro&lt;/span&gt;&lt;/div&gt;</pre>
<p class="disappear">The above implementation is very simple, it does not accept function as a parameter but it does accept an id or element.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/mootools-wrapinner/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Diamond Chooser &#8211; Custom Flash App with a little help from Maya</title>
		<link>http://www.3magine.com/blog/diamond-chooser-custom-flash-app-with-a-little-help-from-maya/</link>
		<comments>http://www.3magine.com/blog/diamond-chooser-custom-flash-app-with-a-little-help-from-maya/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 19:44:53 +0000</pubDate>
		<dc:creator>Karl Schellenberg</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.3magine.com/blog/?p=114</guid>
		<description><![CDATA[One of my recent challenges was to create an application for one of my clients that will enable the end user to be able to choose custom diamond band. Project requirements were pretty straight forward, such as choosing diamond shape, &#8230; <a href="http://www.3magine.com/blog/diamond-chooser-custom-flash-app-with-a-little-help-from-maya/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p class="disappear">One of my recent challenges was to create an application for one of my clients that will enable the end user to be able to choose custom diamond band.  Project requirements were pretty straight forward, such as choosing diamond shape, carat size and band color.  I had few ideas before I finished reading specs to use vector graphics in flash to manipulate different shapes of diamonds and sizes as well as band colors.  However in the end of spec sheet it stated that the entire application should look as much realistic as possible.<span id="more-876"></span></p>
<p class="disappear">I started brainstorming and trying to think what would be the best way to make that application to look realistic, fit within the budget and meet the deadline.  Firstly I thought to maybe find a photo of female hand and then match up band and diamond position on top of it and use different hue colors for band however after 15 minute search for such photos I&#8217;ve realized that that approach would not work.  Diamond perspective position (for 10 different diamond shapes) could never be matched up and resizing them would be a lot of headache.</p>
<p class="disappear">I decided I&#8217;ll make everything in 3d.  I&#8217;ve purchased some diamond 3d models and female hand 3d model from <a title="TurboSquid" href="http://www.turbosquid.com/" target="_blank">turbosquid.com</a>.</p>
<p class="disappear"><div id="attachment_4" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-4" title="Diamond 3d models" src="/wp-content/uploads/2009/04/diamonds.jpg" alt="Diamond models from TurboSquid used for custom diamond chooser flash application" width="400" height="400" /><p class="wp-caption-text">Diamond models from TurboSquid used for custom diamond chooser</p></div></p>
<p class="disappear"><div id="attachment_6" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-6" title="Female 3d Hand Model" src="/wp-content/uploads/2009/04/female_hand.jpg" alt="Female 3d hand model used in custom flash application" width="400" height="400" /><p class="wp-caption-text">Female 3d hand model used in custom flash application</p></div></p>
<p class="disappear">The hand was fully textured with the bump map however diamonds had no shader and were just plain polygons.  Some of their face normals were flipped so it took me some time to clean them up.  I needed a good diamond shader.  I tried creating one but my time was limited therefore I googled it and found few diamond shaders but none of them where what I was looking for.  Finally I&#8217;ve found my precious shader on <a title="CG Society" href="http://www.cgsociety.org/" target="_blank">cgsociety.org</a> forum on one of the post replies by very talented 3d artist Steven Hägg-Ståhlberg.</p>
<p class="disappear"><div id="attachment_11" class="wp-caption aligncenter" style="width: 590px"><img class="size-full wp-image-11" title="Diamond Shader" src="/wp-content/uploads/2009/04/shader.jpg" alt="Diamond Shader used for custom diamond chooser application" width="580" /><p class="wp-caption-text">Diamond Shader used in custom diamond chooser application</p></div></p>
<p class="disappear">But to reuse that shading network on my diamonds gave me a little headache.  When looking at the shading network it showed that diamond shape node was connected to shading groups:</p>
<p class="disappear"><div id="attachment_12" class="wp-caption aligncenter" style="width: 417px"><img class="size-full wp-image-12" title="Maya Diamond Shader Network" src="/wp-content/uploads/2009/04/shading1.jpg" alt="Diamond Shader Network inside Maya" width="407" height="319" /><p class="wp-caption-text">Diamond Shader Network inside Maya</p></div></p>
<p class="disappear">I&#8217;ve tried connecting my diamonds to two shading groups and it just didn&#8217;t work for me.  I&#8217;ve searched the help files and I couldn&#8217;t find any answers.  I&#8217;ve studied the shader in more detail. I&#8217;ve checked the perspective view and finally realized that different shader was applied to top faces and bottom faces of a diamond. Because shaders where applied in component mode it was possible for a mesh to belong to 2 shading groups <img src='http://www.3magine.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p class="disappear">One last model that I needed was a band.  I could&#8217;ve bought it from turbosquid however project specs required a simple band which took only few minutes to model in 3d.</p>
<p class="disappear"><div id="attachment_22" class="wp-caption aligncenter" style="width: 580px"><img class="size-full wp-image-22" title="Band 3d Model" src="/wp-content/uploads/2009/04/band.jpg" alt="Band 3d model used in diamond chooser flash application" width="570" height="456" /><p class="wp-caption-text">Band 3d model used in diamond chooser flash application</p></div></p>
<p class="disappear">Then I just found a silver shader on <a title="HighEnd3d" href="http://www.highend3d.com" target="_blank">highend3d.com</a> and applied it to the band.</p>
<p class="disappear"><div id="attachment_13" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-13" title="Silver Shader" src="/wp-content/uploads/2009/04/silver_shader.jpg" alt="Silver shader used in custom flash application" width="320" height="240" /><p class="wp-caption-text">Silver shader used in custom flash application</p></div></p>
<p class="disappear">Having all shaders and models I&#8217;ve rigged female hand and positioned it the way I wanted.  Then I&#8217;ve positioned band on the right finger with all diamonds on top of it.  I&#8217;ve grouped and organized meshes into layers so after I could render each of them separately:</p>
<p class="disappear"><div id="attachment_5" class="wp-caption aligncenter" style="width: 195px"><img class="size-full wp-image-5" title="Display Layers in Maya" src="/wp-content/uploads/2009/04/display_layers.jpg" alt="Display Layers in Maya" width="185" height="336" /><p class="wp-caption-text">Display Layers in Maya</p></div></p>
<p class="disappear">As you can see I also have the Hi Resolution version of the hand.  I&#8217;ve smoothed the mesh at the end so it renders nicely.</p>
<p class="disappear"><div id="attachment_23" class="wp-caption aligncenter" style="width: 580px"><img class="size-full wp-image-23" title="High Resolution 3d Hand" src="/wp-content/uploads/2009/04/hires_hand.jpg" alt="High Resolution 3d hand used in custom flash application" width="570" height="456" /><p class="wp-caption-text">High Resolution 3d hand used in custom flash application</p></div></p>
<p class="disappear">All diamonds where grouped together.  I&#8217;ve used that group node to proportionally resize all diamonds at once for different carat sizes.  Also group&#8217;s pivot point had to be lowered so when diamonds resize they would stay on top of the band all the time.  I&#8217;ve added a custom attribute to diamonds group called &#8220;Carat_Size&#8221; which driven scale from 1 to 10.</p>
<p class="disappear">Then I&#8217;ve created 1 plane with gradient shader. 3 spotlights (key,fill and rim).  The key light was the only one that was casting raytraced shadows.</p>
<p class="disappear"><div id="attachment_9" class="wp-caption aligncenter" style="width: 590px"><img class="size-full wp-image-9" title="Lights Setup in Maya" src="/wp-content/uploads/2009/04/lights.jpg" alt="Lights Setup in Maya for custom diamond application" width="580" /><p class="wp-caption-text">Lights Setup in Maya for custom diamond application</p></div></p>
<p class="disappear">The first initial render looked weird and needed alot of tweaking.  I had to play with light colors and intensities.  The hand didn&#8217;t look too realistic:</p>
<p class="disappear"><div id="attachment_8" class="wp-caption aligncenter" style="width: 590px"><img class="size-full wp-image-8" title="Initial Render" src="/wp-content/uploads/2009/04/hand_render1.jpg" alt="Initial Render of 3d hand model in custom diamond chooser flash application" width="580" /><p class="wp-caption-text">Initial Render of 3d hand model in custom diamond chooser flash application</p></div></p>
<p class="disappear">I&#8217;ve searched for some info on how to recreate a realistic skin shader and found that I should use a mental shader that supports sub surface scattering (SSS) such as fast skin shader&#8230; I&#8217;ve played with it and finally came up with my final render:</p>
<p class="disappear"><div id="attachment_14" class="wp-caption aligncenter" style="width: 590px"><img class="size-full wp-image-14" title="Final Render" src="/wp-content/uploads/2009/04/test.jpg" alt="SSS Final Render of custom diamond chooser flash application" width="580" /><p class="wp-caption-text">SSS Final Render of custom diamond chooser flash application</p></div></p>
<p class="disappear">Having everything in place I&#8217;ve separated hand,band,and diamonds into its own render layers and rendered them with alpha channel.  Then I&#8217;ve imported everything into photoshop and created alternative band colors.</p>
<p class="disappear">My last phase of the project was the actual flash application.  I&#8217;ve imported everything from photoshop to flash and programmed the interface.  Some custom events where used to animate carat sizes.</p>
<p class="disappear">Thank you for reading this article. I hope you&#8217;ve learned few things from it.</p>
<p class="disappear">You can view the final product at <a title="Custom Diamond Chooser Flash Application" href="http://www.diamondchooser.com" target="_blank">www.diamondchooser.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/diamond-chooser-custom-flash-app-with-a-little-help-from-maya/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XML Sitemap Generator</title>
		<link>http://www.3magine.com/blog/xml-sitemap-generator/</link>
		<comments>http://www.3magine.com/blog/xml-sitemap-generator/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 16:38:31 +0000</pubDate>
		<dc:creator>Krystian Frencel</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.web-design-pros.ca/blog/?p=105</guid>
		<description><![CDATA[We&#8217;ve been receiving quite a bit of traffic to our old sitemap generator, which was created a few years back and is a bit outdated. These days, a little Google search will reveal hundreds of different sitemap generators, of which &#8230; <a href="http://www.3magine.com/blog/xml-sitemap-generator/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p class="disappear">We&#8217;ve been receiving quite a bit of traffic to our old sitemap generator, which was created a few years back and is a bit outdated. These days, a little Google search will reveal hundreds of different sitemap generators, of which we&#8217;d like to recommend one, <a title="XML Sitemaps" href="http://www.xml-sitemaps.com/aff/idevaffiliate.php?id=909" target="_blank">XML-Sitemaps.com</a>. This is an automated and very easy to use online sitemap generator allowing for up to 500 indexed pages using their FREE generator or if you&#8217;d like to have a self hosted automated generator without any limitations and with extra features you can purchase it for only $19.99. Give it a try, we&#8217;re sure you&#8217;ll be very pleased.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/xml-sitemap-generator/feed/</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>Optimize your websites for speed and performance</title>
		<link>http://www.3magine.com/blog/optimize-your-websites-for-speed-and-performance/</link>
		<comments>http://www.3magine.com/blog/optimize-your-websites-for-speed-and-performance/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 22:21:52 +0000</pubDate>
		<dc:creator>Karl Schellenberg</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.web-design-toronto.ca/blog/?p=85</guid>
		<description><![CDATA[Read our article on speeding up and optimizing your websites at Optimizing Websites for High Performance]]></description>
			<content:encoded><![CDATA[<p class="disappear">Read our article on speeding up and optimizing your websites at <a title="High Performance Websites" href="http://ezinearticles.com/?Optimizing-Websites-For-High-Performance&amp;id=2183514" target="_blank">Optimizing Websites for High Performance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/optimize-your-websites-for-speed-and-performance/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Simple Javascript Confirm Message using Mootools</title>
		<link>http://www.3magine.com/blog/javascript-confirm-message-using-mootools/</link>
		<comments>http://www.3magine.com/blog/javascript-confirm-message-using-mootools/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 16:06:57 +0000</pubDate>
		<dc:creator>Karl Schellenberg</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.3magine.com/blog/?p=82</guid>
		<description><![CDATA[As most of you know there are many ways to implement &#8220;confirm&#8221; messages for your websites, and we have come up with yet another. Confirm messages are important because without them important data could be deleted or changed by accident. &#8230; <a href="http://www.3magine.com/blog/javascript-confirm-message-using-mootools/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p class="disappear">As most of you know there are many ways to implement &#8220;confirm&#8221; messages for your websites, and we have come up with yet another.  Confirm messages are important because without them important data could be deleted or changed by accident.</p>
<p class="disappear">In the window event &#8220;domready&#8221; you have to add the following code:</p>
<pre name="code" class="javascript disappear">$$('.confirm').addEvent('click',function(e){
	var msg=this.title?'Are you sure you would like to: '+this.title+'?':'Are you sure?';
    if(!confirm(msg))	e.stop();
});</pre>
<p class="disappear">After the initial code is implemented all that has to be done is to add a &#8220;confirm&#8221; class to a link and title to describe the action:</p>
<pre name="code" class="javascript disappear">     &lt;a href="/product/delete/43" class="confirm" title="Delete item number 43"&gt;delete&lt;/a&gt;
     &lt;a href="/product/save" class="confirm" title="Save current product"&gt;save&lt;/a&gt;</pre>
<p class="disappear">When you click on the &#8220;delete&#8221; link you will be prompted with a confirm message <strong>&#8220;Are you sure you would like to: Delete item number 43?&#8221;</strong> and &#8220;save&#8221; link with <strong>&#8220;Are you sure you wouldl ike to: Save current product?&#8221;</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/javascript-confirm-message-using-mootools/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How to disable the submit button upon form submission</title>
		<link>http://www.3magine.com/blog/how-to-disable-submit-button-upon-form-submission/</link>
		<comments>http://www.3magine.com/blog/how-to-disable-submit-button-upon-form-submission/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 15:43:44 +0000</pubDate>
		<dc:creator>Karl Schellenberg</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://www.3magine.com/blog/?p=43</guid>
		<description><![CDATA[From time to time some of you may notice that you receive multiple requests from your form submissions. Be it an email or database record, the problem is not with your programming but with the actual form. Just see it &#8230; <a href="http://www.3magine.com/blog/how-to-disable-submit-button-upon-form-submission/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p class="disappear">From time to time some of you may notice that you receive multiple requests from your form submissions.  Be it an email or database record, the problem is not with your programming but with the actual form.  Just see it for yourself, start clicking on your form&#8217;s submit button repeatedly and you will receive numerous submissions within seconds.</p>
<p class="disappear">The following example will show you how to disable the submit button on form submission using mootools and it will work in most of the browsers.</p>
<pre name="code" class="javascript disappear">window.addEvent('domready',function(){
	$$('input[type=submit]').addEvent('click',function(e){
		this.clone().inject(this,'after').set('disabled',true).set('value','Processing...');
		this.setStyle('display','none');
	});
});</pre>
<p class="disappear">What this code does is that it simply duplicates the submit button, injecting it after the original one, changing its text to &#8220;Processing&#8230;&#8221; and hides the original one.  So it essentially looks like only the text is being changed.  The reason why we are cloning the original submit button is because ie6 does not let you submit the form when you disable the submit button.</p>
<p class="disappear">Enjoy</p>
]]></content:encoded>
			<wfw:commentRss>http://www.3magine.com/blog/how-to-disable-submit-button-upon-form-submission/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching using disk: basic
Object Caching 1307/1439 objects using disk: basic

Served from: www.3magine.com @ 2013-06-20 01:42:28 -->