<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Valentin Simonov on Programming</title>
	
	<link>http://va.lent.in/blog</link>
	<description>Making things move since 1999</description>
	<lastBuildDate>Mon, 07 Jan 2013 00:01:42 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/vsfb" /><feedburner:info uri="vsfb" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Unity3d and interactive installations</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/hwthiugEEwU/</link>
		<comments>http://va.lent.in/blog/2013/01/06/unity3d-and-interactive-installations/#comments</comments>
		<pubDate>Sun, 06 Jan 2013 15:49:08 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to think]]></category>
		<category><![CDATA[Interactive]]></category>
		<category><![CDATA[Unity3d]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=648</guid>
		<description><![CDATA[I was going to write this post right after Unite&#8217;12 in Amsterdam where I spoke about creating interactive installations with Unity. But I ended up here and today this post will be different. Installations You see, all interactive installations consist of preproduction and live development. During preproduction period you code using an IDE of your choice [...]]]></description>
				<content:encoded><![CDATA[<p><em>I was going to write this post right after Unite&#8217;12 in Amsterdam where I spoke about <a href="http://video.unity3d.com/video/6952739/unite-2012-creating">creating interactive installations</a> with Unity. </em><em>But I ended up here and today this post will be different.</em></p>
<h1>Installations</h1>
<p>You see, all interactive installations consist of preproduction and live development. During preproduction period you code using an IDE of your choice in your office sitting in a comfortable chair drinking good coffee made with an expensive coffee machine. But then the deadline comes and you find yourself in a dark place where this particular installation should be running in several hours. Everything which could break breaks and this is where live development begins.</p>
<blockquote><p><strong>Installation = P </strong><em>(preproduction)</em><strong> + L </strong><em>(live development)</em></p></blockquote>
<p>Traditional software / game development is where <strong>P = 100%</strong>. If you develop games using Unity you might not know what I am talking about. But everything gets much more interesting when <strong>L </strong>is greater than zero. It even turns out that when <strong>L</strong> grows and <strong>P</strong> decreases Unity becomes less and less useful transforming at the end in a limiting factor.<span id="more-648"></span></p>
<h3>Games / web sites</h3>
<p>Apps where live development is less than 1% or doesn&#8217;t exist at all I call games or web sites. Usually you know that there are a couple of parameters which have to be tweaked on site. You can always make a simple interface for that. As simple as arrow keys for example.</p>
<p>Games/sites development is where Unity shines. Its IDE makes prototyping so much easier so preproduction phase transforms in a series of small steps shaping the final product into something cool. That&#8217;s what <a href="http://video.unity3d.com/video/6952739/unite-2012-creating">I was talking about</a> at the conference.</p>
<h3>Dynamic</h3>
<p>When <strong>L</strong> grows over that <strong>1%</strong> you still can (and you definitely should) have a copy of Unity on your development laptop. In this case you can fix and rewrite whatever wasn&#8217;t provided as tweakable parameters in the final build. But unless this laptop is the machine this installation will be running on (which is usually not the case) you will hit the wall of <strong>&#8220;fix -&gt; build -&gt; copy -&gt; install -&gt; run&#8221;</strong> loop which slows everything down even if highly automated.</p>
<p>Yes, Unity helps you in preproduction phase but you have to write more and more code to expose all possible parameters. And you know that it&#8217;s not the solution. Sooner or later you&#8217;ll find yourself in a situation where you can&#8217;t stop running installation to apply a patch you just coded on the laptop. And this is a problem.</p>
<p>With growing <strong>L</strong> getting ready for <strong>live</strong> phase draws more and more time from <strong>preproduction</strong>.</p>
<h3>Generative</h3>
<p>Now we are coming closer to the point where <strong>L</strong> is so big that a big chunk of <strong>P</strong> code is actually a framework for changing parameters. And it doesn&#8217;t matter if they are changed in reaction to environment, a random person&#8217;s behavior or a VJ controlling effects in 3D projection mapping. What matters is that Unity becomes less and less useful comparing to other engines.</p>
<p>This post is not really a comparison of frameworks which can be used for interactive installations&#8217; development. This would be a really long (and certainly interesting) post, but this time I want to talk only about Unity.</p>
<h1>Limitations</h1>
<p><em>- So what are these limitations you are talking about?</em></p>
<h3>Compiled code</h3>
<p>Yes, once you compiled an app you can&#8217;t change much in the app&#8217;s behavior. Sure, this is how software development works. But when you have only one machine to execute this software, excluding <strong>&#8220;compile -&gt; copy -&gt; install -&gt; run&#8221;</strong> loop can save a lot of time and decrease stress during live phase.</p>
<p>What&#8217;s more, Unity packs all assets in monolithic files making it impossible to change something without rebuilding. <em>Yes, I know about StreamingAssets folder.</em></p>
<h3>Absent IDE</h3>
<p>As I said Unity&#8217;s IDE is great but after you built an application you are stuck without all these amazing features. For every parameter you want to tweak during runtime you have to write code and/or expose it to OnGUI handlers manually. You can&#8217;t even move a camera like you would do in the editor.</p>
<p>All the code to help you edit a scene is not available in a built app.</p>
<h3>No dynamic assets reloading</h3>
<p>One of the cool Unity editor&#8217;s features is how it reloads changed assets and recompiles code automatically. You can&#8217;t do that with a built app unless you manually code a framework for these specific needs. But once again, the IDE can do it already.</p>
<h3>Single scene</h3>
<p>All visible objects are located in one single scene. To create several semantic scenes in one level you have to position them in space far enough and using a combination of layers make sure that no camera renders what it shouldn&#8217;t see and no light affects objects from another virtual scene.</p>
<p>Looking from a game developer&#8217;s standpoint it seems kind of logical. One level — one scene. But when you want to have several scenes rendered to textures and used in a series of other scenes you will face some difficulties.</p>
<h3>No multiple displays support</h3>
<p>Currently the only way to render to several displays is to combine them in an Eyefinity group and manually draw specific cameras to certain rectangles on the screen. Provided that displays you are using are all of the same resolution. Otherwise you have to use video capture devices adding more lag and complexity to your setup.</p>
<p>Also your app has to be fullscreen so it&#8217;s not possible to set up, for example, two separate camera renders to two main displays and a window with controls on another special monitoring display.</p>
<h3>Many .NET libraries don&#8217;t work</h3>
<p>It&#8217;s advertised that you can use lots of .NET libraries in your app since Unity uses Mono. This is actually only partially true.</p>
<p>Many libraries you might need for image/sound processing don&#8217;t work. Either they require <em>System.Drawing</em> or are built for a newer version of .NET. I don&#8217;t know why Unity hates <em>System.Drawing</em> that much but even if it works fine in the editor it will fail when you try to build your app.</p>
<p>This is where you have to write your own little wrapper of unmanaged C++ DLL since all other ones don&#8217;t work.</p>
<p>Also I wish Unity used .NET instead of Mono on Windows.</p>
<h3>Small code base</h3>
<p>Unlike other platforms Unity doesn&#8217;t have extensions/plugins tailored for an interactive installations developer&#8217;s needs. If you want to work with OSC, Arduino, DMX, multi-touch, etc. you will most likely have to write everything yourself. And it&#8217;s not only these small things. There are a lot of features Unity lacks including video mixing, image processing pipeline, live sound processing, windows 7 touch support.</p>
<p>Asset Store doesn&#8217;t help since most of the assets there are game development related. And it will remain so until people like me add their code to the Store, I understand that. Also I understand that Unity is a couple of years behind and we&#8217;ll need more developers than me alone to port everything we need to Unity.</p>
<h3>Other unmentioned stuff</h3>
<p>I&#8217;m sure there are and there will be more complaints. I might have forgotten a few. I think this post will have to be updated soon.</p>
<h1>What would I do?</h1>
<p>Every time we post a video of our project we are asked for permission to copy it to <a href="http://video.unity3d.com">video.unity3d.com</a>. I met Unity devs at Unite&#8217;12 and surprisingly most of them heard about us and saw at least one of the videos we posted. Even David Helgason refered to one of these videos in his keynote speech in the beginning of the conference. And it was really surprising.</p>
<p>But the overall attitude to interactive installations development seems to be like it was with <em>Retribution Paladins in early lvl 70 World of Warcraft raids</em> — looks funny but is totally useless.</p>
<p>Let&#8217;s imagine that the guys from Unity team suddenly realized how cool it would be to transform Unity into interactive installations platform, gathered experts from all over the world (including me of course) to create a plan of World domination! What would we do first?</p>
<p>We would probably refer to <a href="http://vvvv.org/">vvvv</a> from Unity&#8217;s perspective trying to fix all the problems I mentioned above:</p>
<ul>
<li><strong>Special editor mode</strong> to run apps fullscreen / in a borderless window with the same speed as built apps. All editor features would be still available including live assets reloading and one could open scene view with inspectors on another display.</li>
<li><strong>Better custom editor GUI</strong> with visual programming and drag&#8217;n'drop controls for parameters tweaking. Everything would work in edit and game mode.</li>
<li><strong>Possibility to render to several windows</strong> using different cameras or manual blitting.</li>
<li><strong>Instanced scenes</strong> with their own display list hierarchy and rendering parameters.</li>
<li>Required changes to allow most of .NET libraries work with Unity in editor and in built apps. Including changing Mono version to the latest one and relying on .NET on windows.</li>
<li>Built-in features like windows 7 multi-touch support, common libraries for interfacing with Arduino, OSC, DMX.</li>
</ul>
<p>Next, we would advertise Unity as a platform for interactive installations talking about all the cool features online and at conferences. Gathering community and adding more and more freely available code to Asset Store for all the other developers to use.</p>
<h1>The philosophy of Unity team</h1>
<p>But let&#8217;s get back to Earth and reality.</p>
<p>Not many people know the main Unity team&#8217;s philosophy. It&#8217;s not advertised and nobody is talking loud about it. But the pattern is clear.</p>
<blockquote><p><strong>Unity development team&#8217;s philosophy: <em>implement only features which are used the most</em>.</strong></p></blockquote>
<p>Surprisingly, long time ago I came to this too. Every programmer wants to create an ultimate framework which can do everything in the most effective and elegant way. But what you imagine as a great feature in vacuum in reality might not be used at all, and you just spent a year developing it. Don&#8217;t waste time on something which is not used right now.</p>
<p>It even came to funny conversations with Unity devs.</p>
<p><em>- So, why you haven&#8217;t implemented this particular feature? It would be really useful and doesn&#8217;t seem to be hard.</em><br />
<em>- Hm&#8230; Nobody asked for that.</em><br />
<em>- I see&#8230; Also why this ComputeBuffer mode is absent?</em><br />
<em>- Lol, we actually forgot to add it! (Hi, @aras q: )</em></p>
<p>So, this is good, right? Yes, it is if you are target audience, i.e. game developers.</p>
<p>But unfortunately there are very few people right now using Unity to build interactive installations that nobody will spend resources coding something specifically for our needs. Unless it&#8217;s a fix for an ugly bug, of course. It means that we are stuck with current limitations and unless Unity team decides to conquer the world of interactive installations, for a lot of projects we will have to choose different tools.</p>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/hwthiugEEwU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2013/01/06/unity3d-and-interactive-installations/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2013/01/06/unity3d-and-interactive-installations/</feedburner:origLink></item>
		<item>
		<title>ContextFreeArt</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/CR7bnwiPSug/</link>
		<comments>http://va.lent.in/blog/2012/03/01/contextfreeart/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 16:50:03 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to view]]></category>
		<category><![CDATA[Context free]]></category>
		<category><![CDATA[Generative]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=642</guid>
		<description><![CDATA[Have been experimenting with contextfreeart lately. This is my best generative art work so far: I&#8217;ve been a big fan of grammar-based procedural images generation techniques for a long time. This tool has its strengths and weaknesses but allows to create pretty cool looking images.]]></description>
				<content:encoded><![CDATA[<p>Have been experimenting with <a href="http://www.contextfreeart.org/index.html">contextfreeart</a> lately. <a href="http://www.contextfreeart.org/gallery/view.php?id=2853">This</a> is my best generative art work so far:</p>
<p><a href="http://va.lent.in/blog/wp-content/uploads/2012/03/full_2853.jpg"><img class="size-medium wp-image-643 alignnone" alt="" src="http://va.lent.in/blog/wp-content/uploads/2012/03/full_2853-500x498.jpg" width="500" height="498" /></a></p>
<p>I&#8217;ve been a big fan of grammar-based procedural images generation techniques for a long time. This tool has its strengths and weaknesses but allows to create pretty cool looking images.</p>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/CR7bnwiPSug" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2012/03/01/contextfreeart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2012/03/01/contextfreeart/</feedburner:origLink></item>
		<item>
		<title>Unity3d and threads</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/o7Ht9B8_jtU/</link>
		<comments>http://va.lent.in/blog/2012/01/28/unity3d-and-threads/#comments</comments>
		<pubDate>Sat, 28 Jan 2012 15:25:43 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to think]]></category>
		<category><![CDATA[Thread]]></category>
		<category><![CDATA[Unity3d]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=629</guid>
		<description><![CDATA[Note to self: be very careful with Unity3d and threads. What&#8217;s funny, Screen.width and Screen.height accessed from a separate thread return random results.]]></description>
				<content:encoded><![CDATA[<p>Note to self: <strong>be very careful with Unity3d and threads.</strong></p>
<p>What&#8217;s funny, Screen.width and Screen.height accessed from a separate thread return random results.</p>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/o7Ht9B8_jtU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2012/01/28/unity3d-and-threads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2012/01/28/unity3d-and-threads/</feedburner:origLink></item>
		<item>
		<title>Giant multi-touch wall</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/fhtRd8XO-VY/</link>
		<comments>http://va.lent.in/blog/2012/01/26/giant-multi-touch-wall/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 18:53:57 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to view]]></category>
		<category><![CDATA[multitouch]]></category>
		<category><![CDATA[Vertu]]></category>
		<category><![CDATA[wall]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=627</guid>
		<description><![CDATA[One of my company&#8217;s latest works. Giant multi-touch wall for Vertu. Vertu Constellation Launch Event from InteractiveLab on Vimeo. Flash is still worth something. P.S. follow us on Vimeo, Facebook or Twitter.]]></description>
				<content:encoded><![CDATA[<p>One of my company&#8217;s latest works. Giant multi-touch wall for Vertu.</p>
<p><iframe src="http://player.vimeo.com/video/33794710?title=0&amp;byline=0&amp;portrait=0" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p><a href="http://vimeo.com/33794710">Vertu Constellation Launch Event</a> from <a href="http://vimeo.com/interactivelab">InteractiveLab</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Flash is still worth something.</p>
<p>P.S. follow us on <a href="http://vimeo.com/interactivelab">Vimeo</a>, <a href="http://www.facebook.com/InteractiveLab">Facebook</a> or <a href="https://twitter.com/#!/interactiveflow">Twitter</a>.</p>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/fhtRd8XO-VY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2012/01/26/giant-multi-touch-wall/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2012/01/26/giant-multi-touch-wall/</feedburner:origLink></item>
		<item>
		<title>How I had job interview at Zynga</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/wUSooDA4iHo/</link>
		<comments>http://va.lent.in/blog/2012/01/07/how-i-had-job-interview-at-zynga/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 19:47:02 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to think]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[DTF]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Interview]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zynga]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=588</guid>
		<description><![CDATA[&#8220;An interview for a large company is always a free career advice.&#8221; There is a lot of information over the internet about how to prepare for a technical interview, what one should know and how one should behave. But this knowledge is TOO abstract. It&#8217;s like&#8230; imagine if you had to learn every university subject [...]]]></description>
				<content:encoded><![CDATA[<blockquote><p><strong>&#8220;An interview for a large company is always a free career advice.&#8221;</strong></p></blockquote>
<p>There is a lot of information over the internet about how to prepare for a technical interview, what one should know and how one should behave. But this knowledge is TOO abstract. It&#8217;s like&#8230; imagine if you had to learn every university subject before an exam because you don&#8217;t know what exam it was.</p>
<p>What&#8217;s more valuable are real stories and experience of people passed these <span style="text-decoration: line-through;">exams</span>interviews. Was it Google or Microsoft, or maybe Zynga. What questions were asked (and what questions were not), what was the overall atmosphere of an interview, how long it was.</p>
<p>In this post I want to tell you about Zynga recruiting event in Moscow, about my personal experience, mistakes and what I learned.</p>
<p>This interview gave me a lot of experience, made me think about who I am and where I am going.&nbsp;No article about how to pass an interview can substitute real experience of going to an interview.</p>
<p>Here&#8217;s an image to keep you interested.</p>
<p><img class="alignnone size-medium wp-image-589" title="Work at Zynga. Red Bulls." src="http://va.lent.in/blog/wp-content/uploads/2012/01/40fd83c7-500x322.jpg" alt="" width="500" height="322" /></p>
<p><span id="more-588"></span><img class="alignleft size-thumbnail wp-image-597" title="Zynga" src="http://va.lent.in/blog/wp-content/uploads/2012/01/Zynga1-150x75.jpg" alt="" width="150" height="75" />During the spring of 2011 there had been a Zynga&#8217;s banner at Russian game development resource —&nbsp;<a href="http://dtf.ru/">DTF</a>.&nbsp;The banner had said that Zynga consumed all the US resources and was hunting for Russian PHP and C++ developers. I&#8217;ve worked for a year in social games industry as a Flash Developer and AFAIK most of Zynga&#8217;s game clients were flash-based. So I sent my résumé anyway, though I don&#8217;t know C++ and hate PHP.</p>
<p>Here I want to clarify that I didn&#8217;t plan to join Zynga, I rather wanted to know how far I can advance. First of all, look at the image above. WTF?! The guy has all these Red Bull cans for a reason. Second, I hate dogs.</p>
<p><em>What&#8217;s funny, at that time if you googled &#8220;<strong>work at zynga</strong>&#8221; the third result would be <a href="http://va.lent.in/blog/2010/02/28/do-you-still-want-to-work-at-zynga/">a link to this blog</a> with that image. I was worried a bit about it (8</em></p>
<h1>The first interview</h1>
<p><img class="alignleft size-full wp-image-595" title="Mat Connot" src="http://va.lent.in/blog/wp-content/uploads/2012/01/Mat_Headshot_2_bigger.jpg" alt="" width="73" height="73" />The chief recruiter was <strong>Mathias Connot</strong> (he even created a <a href="http://mathias-connot.moikrug.ru/">profile</a> on russian LinkedIn clone). During the process I was in contact only with him. I remember I read somewhere that prior to Zynga he had hunted Russians to Microsoft.</p>
<p>I guess they liked my résumé and Mat arranged me a Skype interview. Prior to that he sent me some info about the company and Zynga&#8217;s <a href="http://www.youtube.com/watch?v=neHV9dxDm9M">promo video</a>&nbsp;(once again, lol at 1:57). At the specified time I was contacted by <a href="http://money.cnn.com/galleries/2010/technology/1007/gallery.smartest_people_tech.fortune/23.html">Luke Rajlich</a>, FarmVille CTO.</p>
<blockquote><p><strong>Mistake #1</strong> — <em>if <span style="text-decoration: line-through;">English</span>American is not your native tongue, even if you think that you know it very good, before taking a Skype call practice a bit with a mirror, watch a movie in English — try to get used to the foreign speech.</em></p></blockquote>
<p>I had worked in New York for some time. Unlike the majority of Russian developers I had real experience talking to US citizens. But anyway about 70% of my brain power was used to process what Luke was talking about. Lack of speaking practice, background noise and I was a bit nervous.</p>
<p>Luke glanced at my résumé and started asking questions:</p>
<ul>
<li>He asked to tell him about myself and projects I&#8217;d been working on.</li>
<li>Several questions about Flash and AS3: multi-threading, socket connections, flash drawing pipeline, manual mouse events handling with transparent bitmaps — mostly standard knowledge for Flash game development.</li>
<li>He asked about differences between Java and AS3 type systems, what was the difference between Strong Typing and Static Typing, what Duck typing was.</li>
<li>Asked about C++ and Templates. I don&#8217;t know C++ but heard about Templates, so I told him what I knew.</li>
<li>There were several questions about MVC, patterns and Abstract Factory pattern.</li>
<li>Also he was curious if I had any experience with SQL and MySQL.</li>
</ul>
<p><img class="alignleft size-full wp-image-598" title="Luke Rajlich" src="http://va.lent.in/blog/wp-content/uploads/2012/01/luke-rajlich.jpg" alt="" width="80" height="80" />25 minutes passed instantly. I had like 5 minutes to ask him a couple of questions. Not every day you have a chance to ask the FarmVille CTO anything you want. So we talked a bit. During these 5 minutes I found out that Zynga mostly uses Linux + Apache + MySQL + PHP; that Erlang and Scala are interesting languages but it&#8217;s hard to find good developers; that they don&#8217;t protect their games at all. He laughed when I told him about 3 identical clones of one of their games launched on Russian social networks.</p>
<blockquote><p>
<strong>Mistake #2</strong> — <em>stop being nervous FFS! In my long life I passed lots of exams, attended many job interviews, spoke at conferences and got a podcast. But still&#8230;</em><br />
<strong>Mistake #3</strong> — <em>don&#8217;t answer immediately. You got time to think. Being nervous it&#8217;s easy even to mistake Static typing with Strong typing. Don&#8217;t be scared to correct yourself. Even when if you spot an error which was a couple of questions before.</em><br />
<strong>Mistake #4</strong> — <em>read the damn GoF book about software patterns. People say that it is useless, most of the patterns are obvious, others are features of an advanced language. But anyway I didn&#8217;t know exactly what an Abstract Factory was. Of course I know what a factory is and why it is needed (mostly empirically) but I&#8217;ve never needed the exact definition from the book. Apparently, Luke wanted to hear it.</em></p></blockquote>
<div>I would say I wasn&#8217;t proud of myself. And I was surprised to see Matt&#8217;s email that <span style="color: #000000;">they wanted to see me at the final interview in Moscow</span>.</div>
<h1>Preparation</h1>
<p><img class="alignleft size-full wp-image-600" title="O(1)" src="http://va.lent.in/blog/wp-content/uploads/2012/01/a183fc0b07060fdd58acb514f649e73a.png" alt="" width="39" height="21" />I had a month ahead of me which I spent googling about Zynga and possible interview questions. According to the internet programming interviews are only for C developers who must know every data structure and sorting algorithm in the universe. So I had absolutely no idea what to expect.</p>
<p>I would lie if I deny that at that time I had thought about working in the US again. According to the internet Zynga wasn&#8217;t the best place to work, but I was eager to go to the next step.</p>
<h1>The next step</h1>
<p><img class="alignleft size-medium wp-image-602" title="Moscow" src="http://va.lent.in/blog/wp-content/uploads/2012/01/4164-500x338.jpg" alt="" width="300" height="203" />Matt told me that the plan was the following: after the first interviews they select 40-50 people and fly to Moscow where they interview in person 10 people a day (5 in the morning, 5 during afternoon).</p>
<p>The interviews took place in a 5-star hotel Marriott Royal Aurora in the center of Moscow. There were 5 or 6 of us. Several C++ and PHP developers. The overall mood was that &#8220;it&#8217;s better to be a PHP developer in Zynga than a C++ developer here&#8221;&#8230;</p>
<p>Matt accompanied us to a room where we had waited for other crew members to join us. That&#8217;s where the last interviewee came in and had stared at us for 10 seconds&#8230;</p>
<p>— Mai ai seet hir? — he asked and moved a chair.<br />
— Sure, why not? — I answered in English and we continued to stare at each other before I understood what was going on.<br />
— А что это мы по-английски говорим? (But why are we talking in English?) — I asked.<br />
— Ой, а вы что, тоже на интервью? А я думал вы меня сейчас спрашивать тут будете. (Damn, you are here for the interview too? I thought you&#8217;d start interviewing me&nbsp;altogether&nbsp;right now.)</p>
<p>We laughed. But, damn, should have started asking him. Would have been even funnier.</p>
<p>Mat joined us. He told us about the company and how to behave during the interviews. I think it will be helpful for everyone:</p>
<ul>
<li><strong>Do not hurry. Listen the question&nbsp;carefully. Make sure that it is 100% clear. Start solving a problem only if you are sure that this is the problem interviewer asked to solve.</strong></li>
<li><strong>Do not try to impress an interviewer with complexity of your solution. Start with the simplest one.</strong></li>
<li><strong>Do not just sit there silently if you can&#8217;t solve a problem. Show the process of thinking, say what you are thinking. An interviewer is not interested in a particular solution, he is interested in a way you came up with this solution.</strong></li>
</ul>
<p>Every interviewee had his own room. There were 5 interviewers who visited each room for 20-30 minutes talking to candidates, after that followed a 10-15 minutes break. You had pen and paper to write programs in your favorite language, draw diagrams and pretty pictures. There should have been 3 to 5 interviews. Matt said that it did not mean much if you got kicked out after the 3rd interview, but everyone knew&#8230;</p>
<p>There were illustrated albums in the room about different cities where Zynga had its offices. Checked those out between interviews.</p>
<blockquote><p>
<strong>Mistake #5</strong> — <em>try to find out more about the interview process, what types of developers are needed and who will be interviewing you.</em></p></blockquote>
<p>I was really surprised by the fact that <strong>I got 0 (zero) questions about Flash or ActionScript. What&#8217;s more, there were no language or framework related questions at all.</strong> I wouldn&#8217;t think that I would be interviewed for C++ developer position. Do you see me as a C++ developer? Hell no. But my brain was filled with Flash/AS3 related information. If I knew I would throw all this garbage out and stockpiled some more algorithms instead.</p>
<h1>The first interview</h1>
<blockquote><p><strong>Mistake #6</strong> — <em>I can not do anything when a person looks at my paper/display. I&#8230; just&#8230; can&#8217;t. This little fad of mine backfired so many times in my life I can&#8217;t even count. I absolutely must do something about it because nobody knows that you can solve that problem on a piece of paper in seconds&#8230; but only after the guy stops staring at you (or leaves the room).</em></p></blockquote>
<p><img class="alignleft size-full wp-image-613" title="Unknown Zynga crew member" src="http://va.lent.in/blog/wp-content/uploads/2012/01/unknown_user_avatar.jpg" alt="" width="50" height="50" />The first guy (sorry, I don&#8217;t remember names) said that he was a&nbsp;jack of all trades: a bit client developer, a bit server developer, also he makes web interfaces, etc. He started with server-side AI optimization for a huge amount of autonomous agents. In other words: here lots of mobs are spawned and start following the player, and we need to calculate their paths in an efficient way.</p>
<p>I recalled from memory everything remotely similar to the problem: A* implementation, how to cache its result for other mobs, connect mobs into self-organizing clusters, move some calculations to the client, etc.</p>
<p>The guy looked satisfied with my answers and after that he asked me to solve a&nbsp;breadth-first search problem on a tree. That&#8217;s where I hit the mistake #6 and there were only several minutes left. The guy told me to think about the algorithm during the break and send a solution with the next interviewer.</p>
<blockquote><p><strong>Mistake #7</strong> — <em>DO NOT HURRY, DAMN IT!!!!1 Think, think, think. Write the simpest algorithm possible. You will have time to improve THE WORKING algorithm later.</em></p></blockquote>
<h1>The second interview</h1>
<p><img class="alignleft" title="Unknown Zynga crew member" src="http://va.lent.in/blog/wp-content/uploads/2012/01/unknown_user_avatar.jpg" alt="" width="50" height="50" />The next interviewer was interested in the projects I took part in. I told him about games and social games I developed (Zynga is about social games after all). During the second part of the interview he had asked me about data structures, asked to find a loop in a linked list. Going back to the mistake #7, I wrote more or less advanced algorithm instead of the one with a dictionary. Shouldn&#8217;t really have done that. The next problems were trivial with a trivial algorithm but kind of hard with the one I came up with. Adding the mistake #6 and I was left once again with an unsolved problem for break time.</p>
<p>Needless to say that I came up with an elegant solution during the first half of that break.</p>
<h1>The third interview</h1>
<p><img class="alignleft size-full wp-image-611" title="Cadir Lee" src="http://va.lent.in/blog/wp-content/uploads/2012/01/cadir.jpg" alt="" width="100" height="140" />After the break I met the CTO of Zynga, <a href="http://www.linkedin.com/profile/view?id=5398195">Cadir Lee</a>. If the first two guys were young and funny, Cadir looked like a real CTO — a middle-aged wise man. Like a university professor. At that moment I felt like being a freshman again.</p>
<p>Not sure why but he was interested in the solution of the earlier problem, the one I solved during the last break. After that he asked a question I wasn&#8217;t ready to at all&#8230; <strong>He asked me to tell him about a framework we use at our daily work like he was a new guy in our company.</strong>&nbsp;I panicked and decided to tell him about mmo/social games AS3 framework we used at my previous job. Who knows what I am talking about probably started laughing already. It was a huge, complicated, bloated with old useless code Flex-like framework for games. You had to use the whole whiteboard to write a diagram of how all these damn components are related/connected to each other. Anyway, I failed.</p>
<p>Next, he asked me to map database tables for an app like Jira. I mentally went back to the beginning of 2000s where I was a bit a PHP coder (who wasn&#8217;t, seriously?) and started laying out fields, tables and joining them with relations. It wasn&#8217;t a success either.</p>
<p>Seeing that I&#8217;m a bad PHP coder, he asked me to architect a Rubik&#8217;s Cube game. I guess I did a decent job considering all the pressure and lack of time.</p>
<blockquote><p><strong>Mistake #8</strong> — <em>try to abstract from the interviewer, don&#8217;t think about him as a person, don&#8217;t be frightened by his&nbsp;prominence or&nbsp;intent look. This will let you make fewer mistakes and the interviewer will not see how dumb you are in fact.</em></p></blockquote>
<h1>Waiting</h1>
<p>In 20-25 minutes after Cadir left I met Alex (his parents are from Russia but this was his first visit here, he could speak decent Russian though). He said that I wouldn&#8217;t have more interviews. Damn, was I that bad? I though the first 2 interviews went OK.</p>
<p>Alex presented me a Zynga bag with presents and a 10$ CityVille card which is still somewhere on my desk. In a week or two I got a standard automated email that I was good but Zynga didn&#8217;t have a position for me at that time.</p>
<h1>Conclusion</h1>
<p>I (almost) wasn&#8217;t upset. But I came to some conclusions.</p>
<p>I was surprised by the general mood of interviewees — &#8220;it&#8217;s better to be there a PHP coder than a C++ developer here&#8221;. It&#8217;s like there they will live in a pink marmalade castle or something. It looked that people would have to work really hard. In small&nbsp;cubicles with cheap chairs. Dogs running around. Also, have you already forgot the Red Bull cans collection?</p>
<p>And have you heard the news recently?&nbsp;<a href="http://news.cnet.com/8301-13506_3-57322150-17/zynga-to-employees-give-back-our-stock-or-youll-be-fired/">Zynga to employees: Give back our stock or you&#8217;ll be fired</a>. Ouch! That might be actually good I didn&#8217;t pass the interview after all.</p>
<p>Also, I still don&#8217;t get what people they were looking for. It seems that they needed language&nbsp;independent&nbsp;engineers which could be used to solve any problem. Learn a language in a day, framework or two in a week and here we go — one can become a PHP backend developer, C++ developer to work on a parallel database or an AS3 developer to code a game client in Flash. I can&#8217;t be sure about these days but in my time there was no such CS education in Russia. Mostly everyone learned from practice.</p>
<p>Several questions I didn&#8217;t expect at all. Like the one to tell an interviewer about a framework we use.</p>
<p>Of course this experience&nbsp;allowed&nbsp;me to evaluate my knowledge. This whole quest let me understand that there&#8217;s a lot more I have to learn, there are lots of ways to improve. Too bad I can&#8217;t grow as a Flash Developer these days, but I started looking at other technologies. Soon I hope to drop Flash and become a Software Engineer.</p>
<p>That&#8217;s actually great that I read tech books. Even the ones I never have opportunities to use in practice. The knowledge was useful after all. I bet that 90% of Flash developers never used non-standard data structures and are unable to implement an advanced algorithm on these structures. Same thing with PHP and Java developers. Of course one can ask &#8220;What for?&#8221; and he will be right.</p>
<h1>An email from Mat Connot shared by another interviewee</h1>
<blockquote><p><em>Hi &lt;my real name&gt;,</em></p>
<p><em>In my years as a technical recruiter for a couple different world-class software organizations I can tell you that the single most important skill will be a great understanding of computer science fundamentals. Having a solid grasp of the fundamentals and maintaining it for yourself throughout your entire career will always serve you well. It’s not as much about language or tech, it’s about having the algorithms and knowing complexity etc.</em></p>
<p><em>So many developers fall back on libraries and stop paying attention to the underlying math, complexity, etc. and that’s always a big mistake&#8230;</em></p></blockquote>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/wUSooDA4iHo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2012/01/07/how-i-had-job-interview-at-zynga/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2012/01/07/how-i-had-job-interview-at-zynga/</feedburner:origLink></item>
		<item>
		<title>It’s sad to see how Flash sites evolved</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/FbRkS0-dHt0/</link>
		<comments>http://va.lent.in/blog/2011/12/20/its-sad-to-see-how-flash-sites-evolved/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 10:37:24 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to think]]></category>
		<category><![CDATA[FWA]]></category>
		<category><![CDATA[Oldschool]]></category>
		<category><![CDATA[Site]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=586</guid>
		<description><![CDATA[Following the last post I actually wanted to say more about recent FWA Site of the Month awards. A year ago or so browsing recent submissions and SOTD winners I started comparing them with oldschool sites. The ones from 2000-2004. It looked like to win an FWA you needed a lot of video and 3d. [...]]]></description>
				<content:encoded><![CDATA[<p>Following <a href="http://va.lent.in/blog/2011/12/20/the-state-of-fwa/">the last post</a> I actually wanted to say more about recent FWA <a href="http://thefwa.com/sotm">Site of the Month</a> awards.</p>
<p>A year ago or so browsing recent submissions and SOTD winners I started comparing them with oldschool sites. The ones from 2000-2004. It looked like to win an FWA you needed a lot of video and 3d. Nobody cares how much a site &#8220;weighs&#8221; these days. I remember how we invented different tricks to overcome numerous limitations, how we coded realtime effects and used vector animation. Today whoever has more videos and prerendered 3d wins.</p>
<p>I remember we had preloaders, people waited minutes(!) while the site was loading. I remember I made a 6Mb site and had to listen to people complaining that it was too big. Many visitors failed to wait that long for the site to load. Now let&#8217;s check FWA Site of the Month winners once again. Initial size is the size in megabytes of whatever had to be loaded before I could proceed. Total size is how much megabytes the site downloaded while I was browsing it a bit. I tried not to view videos and other media content (on sites which are not interactive videos by design).</p>
<ul>
<li>January, <a href="http://www.lucasarts.com/games/legostarwarsiii/index.jsp">Lego Star Wars</a> — initial: <strong>8.53Mb</strong>, total: <strong>34.6Mb</strong>. I liked this one. Good art, animations and navigation.</li>
<li>February, <a href="http://www.thathipster.com/">Die Hipster</a> — initial: <strong>31.21Mb</strong>, total: <strong>33Mb</strong>. Didn&#8217;t get what to do so I closed the game. Looks like it preloaded almost everything just to start.</li>
<li>March, <a href="http://anewwarrior.ddbparis.net/?lang=en">Greenpeace &#8211; A New Warrior</a> —initial: <strong>28.75Mb</strong>, total: <strong>41.45Mb</strong>. Good site, but the video during loading and total 28.75Mb of data just to show main interface is disturbing.</li>
<li>April, <a href="http://wall-of-fame.com/">Wall of Fame</a> —  initial: <strong>15.06Mb</strong>, total: <strong>126Mb</strong>. What the hell do they have in these 15 megabytes? But at least they got it right and don&#8217;t load the whole map at once.</li>
<li>May, <a href="http://pleasurehunt.mymagnum.com/">Pleasure Hunt</a> — initial: <strong>43.69Mb</strong>, total: <strong>43.69Mb</strong>. This site just has to be fully preloaded because it&#8217;s a straight forward experience. But 43 megabytes&#8230;</li>
<li>June, <a href="http://www.ro.me/">3 Dreams of Black</a> — initial: <strong>43.49Mb</strong>, total: <strong>73.85Mb</strong>. This one might be a great WebGL demo (as in demoscene) but 73 megabytes is nowhere near.</li>
<li>July, <a href="http://www.intel.com/museumofme/r/index.htm">The Museum of Me</a> — initial: <strong>46.11Mb</strong>, total: <strong>61.5Mb</strong>. All right, a dynamic video has to be big.</li>
<li>August, <a href="http://www.sexyfingers.org/">Sexy Fingers</a> — initial: <strong>-Mb</strong>, total: <strong>-Mb</strong>. This is total sh*t and doesn&#8217;t load on my PC. I blame Flashblock.</li>
<li><span style="color: #ff0000;">September, <a href="http://the-planet-zero.com/"><span style="color: #ff0000;">The Planet Zero</span></a> — initial: <strong>2.19Mb</strong>, total: <strong>5.75Mb</strong>. Now THIS is an oldschool site. It&#8217;s really great! Checked every corner of the tiny little planet and only 6 megabytes downloaded.</span></li>
<li>October, <a href="http://helloevoque.com/beinghenry/ru-ru/">Being Henry</a> — initial: <strong>20.05Mb</strong>, total: <strong>214Mb</strong>. Allright, that&#8217;s what I was talking about. Just make a huge video and win a SOTM award. But I actually liked it.</li>
<li>November, <a href="http://experimentgame.com/">The Honda Experiment</a> — initial: <strong>4.44Mb</strong>, total: <strong>9.56Mb</strong>. I don&#8217;t get it. The idea with multi-windowed interface was around since 2000. Everyone hated it because of the reflex to close small pop-up windows.</li>
<li>December, <a href="http://www.androp.jp/bell/">Androp Bell</a> — initial: <strong>41.98Mb</strong>, total: <strong>46.48Mb</strong>. An interactive music game, I wonder how long I would have to wait with my 256kbit connection.</li>
</ul>
<div>So, as you see nobody cares about the size anymore. Of course 10 years ago average screen size was somewhere near 1024&#215;768. Today it&#8217;s more like 2560&#215;1440 + a couple of displays with extended desktop. Also now I can have a 100mbit connection at home (I actually have a 30mbit one because I just don&#8217;t need more) and loading times are down to 10-20 seconds.</div>
<div><strong>But anyway it&#8217;s sad to see how Flash sites evolved. Maybe I&#8217;m just to old. I can&#8217;t even find the sites I liked anymore. They are gone.</strong></div>
<div>I&#8217;d like to find some examples of sites, experiments, demos on the web which don&#8217;t rely on heavy videos and prerendered 3d, which represent an art of code and are unique in their own way. Please send me the links if you know any.</div>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/FbRkS0-dHt0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2011/12/20/its-sad-to-see-how-flash-sites-evolved/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2011/12/20/its-sad-to-see-how-flash-sites-evolved/</feedburner:origLink></item>
		<item>
		<title>The state of FWA</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/_0VS7ZmcK2M/</link>
		<comments>http://va.lent.in/blog/2011/12/20/the-state-of-fwa/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 09:41:26 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to think]]></category>
		<category><![CDATA[to view]]></category>
		<category><![CDATA[Award]]></category>
		<category><![CDATA[FWA]]></category>
		<category><![CDATA[Game]]></category>
		<category><![CDATA[Site]]></category>
		<category><![CDATA[valyard.ru]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=582</guid>
		<description><![CDATA[Once upon a time there was a small site — favouritewebsiteawards.com/. Years 2000 &#8211; 2004 were the golden age of Flash sites. They were interactive, colorful and heavy. At that time I had a blog at valyard.ru with daily links to the coolest sites and games. I bet it had been one of FWA&#8217;s link sources for a [...]]]></description>
				<content:encoded><![CDATA[<p>Once upon a time <a href="http://web.archive.org/web/20020605052654/http://www.favouritewebsiteawards.com/home.html">there was</a> a small site — <a href="http://favouritewebsiteawards.com/">favouritewebsiteawards.com/</a>. Years 2000 &#8211; 2004 were the golden age of Flash sites. They were interactive, colorful and heavy. At that time <a href="http://web.archive.org/web/20020720173355/http://valyard.ru/">I had a blog at valyard.ru</a> with daily links to the coolest sites and games. I bet it had been one of FWA&#8217;s link sources for a while.</p>
<p>Since then FWA has grown into a well-known and respected award in the industry of  Flash sites, my resource has well been forgotten.</p>
<p>But recently (a couple of years ago) <em>favouritewebsiteawards</em> transformed into <em>favouriteeverythingawards</em> featuring really <a href="http://thefwa.com/about/work_we_award">everything on the net and some offline stuff</a>. How can you compare a heavy interactive informative site with great UI and lot&#8217;s of videos with a WebGL experiment, or a music video, or an offline installation? Let&#8217;s examine this year&#8217;s Sites of the Month:</p>
<ul>
<li>January, <a href="http://www.lucasarts.com/games/legostarwarsiii/index.jsp">Lego Star Wars</a> — Half game (which is supposed to be multi-player, but I was alone ther), half site with great graphics and animation.</li>
<li>February, <a href="http://www.thathipster.com/">Die Hipster</a> — Looks like a game where I don&#8217;t gave a clue what I am supposed to do, so I don&#8217;t like it q:</li>
<li>March, <a href="http://anewwarrior.ddbparis.net/?lang=en">Greenpeace &#8211; A New Warrior</a> — This is a typical multi-media content site which is well-done, contains a lot of data and serves some real purpose.</li>
<li>April, <a href="http://wall-of-fame.com/">Wall of Fame</a> —  Great multi-user experience. A site with user-generated content which actually has it (the content). I voted for it in Peoples Choice Award.</li>
<li>May, <a href="http://pleasurehunt.mymagnum.com/">Pleasure Hunt</a> — Another half game, half site. Entertaining way to present a brand.</li>
<li>June, <a href="http://www.ro.me/">3 Dreams of Black</a> — WebGL experiment/interactive music video. Great demonstration of the technology.</li>
<li>July, <a href="http://www.intel.com/museumofme/r/index.htm">The Museum of Me</a> — This is actually just a music video, not even interactive. But the idea behind it is brilliant.</li>
<li>August, <a href="http://www.sexyfingers.org/">Sexy Fingers</a> — This site doesn&#8217;t load on my machine, but I checked on a colleague&#8217;s PC and it looks like complete crap. Seems to be a bunch of sex-related games which are totally not work-safe.</li>
<li>September, <a href="http://the-planet-zero.com/">The Planet Zero</a> — This one is awesome! The third half game, half site but uses pre-molehill software 3d rendering engine. ROXIK is the greatest!</li>
<li>October, <a href="http://helloevoque.com/beinghenry/ru-ru/">Being Henry</a> — Really well-done interactive video.</li>
<li>November, <a href="http://experimentgame.com/">The Honda Experiment</a> — Some kind of HTML &#8220;The Incredible Machines&#8221; game made with pop-up windows.</li>
<li>December, <a href="http://www.androp.jp/bell/">Androp Bell</a> — That&#8217;s just an awesome game. Great idea and really well-done.</li>
</ul>
<div>So, let&#8217;s see&#8230; 3 games, 3 game-like sites, 2 video experiences, 1 multi-user playground, 1 site, 1 tech experiment and 1 total piece of sh*t. How do you compare them?</div>
<div>What&#8217;s more, looking at latest<a href="http://thefwa.com/site"> Site of the Day</a> awards we can find: <a href="http://thefwa.com/site/fifa-world-cups-multitouch-wall">offline interactive installation</a>, <a href="http://thefwa.com/site/ellie-goulding-lights-">WebGL experiment</a>, <a href="http://thefwa.com/site/21st-century-beetle-rock-n-scroll-">HTML5 site</a>, <a href="http://thefwa.com/site/social-memories">Facebook Application</a>, <a href="http://thefwa.com/site/les-chinois-m1l">3d Flash Portfolio</a>, etc. And once again, how do you compare these&#8230; err&#8230; works?</div>
<div>I&#8217;m not saying that FWA awards every submission they get, no. The quality is still good and keeps getting better. But maybe it&#8217;s time to split into FWA.sites, FWA.games, FWA.interactive etc?</div>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/_0VS7ZmcK2M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2011/12/20/the-state-of-fwa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2011/12/20/the-state-of-fwa/</feedburner:origLink></item>
		<item>
		<title>So how do teams work on a big Unity3D project?</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/-rs8I5S-3Jk/</link>
		<comments>http://va.lent.in/blog/2011/12/13/so-how-do-teams-work-on-a-big-unity3d-project/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 16:23:08 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to think]]></category>
		<category><![CDATA[to view]]></category>
		<category><![CDATA[Assets]]></category>
		<category><![CDATA[DLL]]></category>
		<category><![CDATA[Game Dev]]></category>
		<category><![CDATA[Large project]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[Unite]]></category>
		<category><![CDATA[Unity3d]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=569</guid>
		<description><![CDATA[Unity3D is great for indie developers. We have yet to build a large Unity project, but we&#8217;ve built a couple of small projects so far but during this process we did see Unity3D from the ugly side. It seems that the engine can do some things blazingly fast and easy but some other ones were [...]]]></description>
				<content:encoded><![CDATA[<p>Unity3D is great for indie developers. We have yet to build a large Unity project, but we&#8217;ve built a couple of <a href="http://vimeo.com/33590185">small</a> <a href="http://vimeo.com/30006025">projects</a> so far but during this process we did see Unity3D from the ugly side. It seems that the engine can do some things blazingly fast and easy but some other ones were clearly neglected during development. But that&#8217;s another post.</p>
<p>So, <a href="http://answers.unity3d.com/questions/186421/how-do-teams-work-on-projects.html">I&#8217;ve tried</a> to find out how big teams work on large Unity projects if even we are struggling. But no luck.</p>
<p>Ones were mumbling about source control, separating control over scenes editing etc. That&#8217;s kind of obvious and shows that those people don&#8217;t have any experience at all.</p>
<p>But recently I watched <a href="http://video.unity3d.com/channel/933355/presentations?p=1">all the videos from Unite 11</a> conference. I really wish I could visit it and talk to Unity gurus. But anyway, here are the videos I found useful. Videos where speakers share their experience on working in Unity3D as a team. The information which is practical and useful:<br />
<span id="more-569"></span></p>
<p><strong><a href="http://video.unity3d.com/video/3708530/unite-11-scaleable-game">Unite 11: Scaleable Game Development at Schell Games</a> (this video is definitely must see)</strong></p>
<ol>
<li>Unity tends to crash building a large project. That&#8217;s why<strong> they split the game into several projects</strong>: entry point project, assets projects, code project.</li>
<li>Entry point project is simple, contains minimum stuff to show loading screen or error screen. Loads asset bundles from asset projects and DLLs from code projects.</li>
<li>Content projects got their copy of DLLs, they are used to export assets to bundles and there are external tools to rebuild assets.</li>
<li><strong>There&#8217;s no single source file in Unity projects</strong>.</li>
<li>That allows to build custom framework, use namespaces, custom compiler preprocessor and obfuscator (if needed).</li>
<li>But <strong>there are problems</strong> with this approach like some deeply derived from MonoBehavior classes not showing in Unity3D IDE, harder to debug, etc.</li>
<li><strong>#if preprocessor instructions</strong> are used to exclude platform specific code.</li>
<li>Custom GUI with relative sizing and positioning of controls. Saved and loaded using ScriptableObjects.</li>
<li>A lot of external data handled by ScriptableObjects which are serializable, editable like Behaviors and not tied to a GameObject.</li>
</ol>
<p><strong><a href="http://video.unity3d.com/video/3708116/unite-11-postmortem-smuggle">Unite 11: Postmortem &#8211; Smuggle Truck</a></strong></p>
<ol>
<li><strong>ONE</strong> project to build for all platforms. I think the project is not large, so they don&#8217;t see Unity crash much.</li>
<li>There&#8217;s a <strong>Level Editor</strong> which was used by players to create levels which actually shipped with the release.</li>
<li><strong>Asset Settings tool</strong> to configure assets importing parameters for every platform. For example, background textures could be half-size in iPhone builds to increase performance.</li>
<li><strong>Platform Specific</strong> properties can be configured with special Behaviors attached to objects. For example, you could specify object&#8217;s size depending on whether the project is compiled for iOS or PC.</li>
<li>Custom build process allows them to use the data from 3 and 4 to set needed properties and delete unused assets before the actual build. This ensures that assets from PC build will not go to iOS build increasing its size.</li>
<li>At the end of the presentation they advised to have 2 copies of the project for different build targets if you have a lot of assets. Because converting from PC formats to iOS formats takes a lot of time.</li>
</ol>
<p><strong>Update:</strong> recently they released <a href="http://smuggletruck.com/multiplatform/">Multiplatform Toolkit</a> to the Asset Store.</p>
<p><a href="http://video.unity3d.com/video/3699956/unite-11-jagged-alliance"><strong>Unite 11: Jagged Alliance Online Engineering for Large Web Player Game</strong></a></p>
<ol>
<li>Large games have different problems: automatic builds, light map baking which takes 4 days to complete.</li>
<li>Big monolithic project fails to build. (heh, been there done that)</li>
<li>The project is split in <strong>SEVERAL</strong> small projects: code libraries, asset project(s). This approach allows to share code between client and server. Unity3D .NET project uses 3.5 and can be referenced from 4.0 server code. Asset projects are compiled into assets bundles to be use with code.</li>
<li>Programmers don&#8217;t spend an hour a day waiting for assets to be imported.</li>
<li>Code projects are <strong>separate Visual Studio solutions</strong> kept outside of Unity3D Assets folder. It allows using namespaces (not for MonoBehaviors though). Also they use Unit Tests with modified SharpUnit framework. There are problems with built-in Unity3D classes.</li>
<li>Shared code between code projects and assets projects are separated in yet another project which is referenced by them as DLL libraries.</li>
<li>Separate VS projects are configured to build DLLs into Temp folder not to be loaded by Unity3D and causing names conflict with existing source files.</li>
<li>There&#8217;s an advanced automatic build system which executes light map baking and asset bundles exporting in parallel reducing average build time.</li>
</ol>
<div><strong><a href="http://video.unity3d.com/video/3699840/unite11-creating-a">Unite 11: Creating a Browser-ready FPS MMO in Unity</a></strong></div>
<div>
<ol>
<li>Yet again, nobody uses built-in Unity GUI system.</li>
<li>The game looks really cool q:</li>
<li>There&#8217;s a custom interface to build asset bundles.</li>
<li>They use <strong>ScriptableObjects</strong> which are saved to XML and later loaded from server.</li>
<li><strong>Tools for artists is a key to success</strong>.</li>
</ol>
<div><strong><a href="http://video.unity3d.com/video/3699926/unite-11-intro-to-editor">Unite 11: Intro to Editor Scripting</a> — </strong>totally must see if you want to create your own editor tools. Describes how to create custom Behaviors inspectors, drawing dummies in 3D scene and even creating custom editor windows.</div>
<div><strong><a href="http://video.unity3d.com/video/3709506/unite-11-shadowgun-rendering">Unite 11: SHADOWGUN: Rendering Techniques and Optimization Challenges</a> — </strong>a lot of low-level details if you want to optimize your game for devices.</div>
<div><span class="Apple-style-span" style="font-size: 15px; font-weight: bold;">Conclusion</span></div>
<div>Now I have time to think what approach to use: single configurable project, many projects with source inside Unity3D Assets folder or many projects with DLLs in the final Unity3D project. At least this time I got the details.</div>
<div>If you want to improve your team workflow with Unity3D you must spend a day watching these videos one by one. There is a lot of interesting details and what to think about. There&#8217;s no silver bullet but there is real world experience which speakers gladly share with you.</div>
</div>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/-rs8I5S-3Jk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2011/12/13/so-how-do-teams-work-on-a-big-unity3d-project/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2011/12/13/so-how-do-teams-work-on-a-big-unity3d-project/</feedburner:origLink></item>
		<item>
		<title>Unity3d -&gt; Flash</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/SVI9jzB49SY/</link>
		<comments>http://va.lent.in/blog/2011/12/09/unity3d-flash/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 20:48:30 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to think]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Unite]]></category>
		<category><![CDATA[Unity3d]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=565</guid>
		<description><![CDATA[Some time ago the videos from Unite 11 conference were uploaded to video.unity3d.com. Among of those you can find 2 about Unity3d to Flash publishing. Pretty interesting stuff. Answers some questions, creates others. http://video.unity3d.com/video/3787045/unite11-flash-day-talk-part-1 http://video.unity3d.com/video/3728433/unite-11-flash-day-talk-part-2]]></description>
				<content:encoded><![CDATA[<p>Some time ago the videos from Unite 11 conference were uploaded to video.unity3d.com. Among of those you can find 2 about Unity3d to Flash publishing. Pretty interesting stuff. Answers some questions, creates others.</p>
<p><a href="http://video.unity3d.com/video/3787045/unite11-flash-day-talk-part-1">http://video.unity3d.com/video/3787045/unite11-flash-day-talk-part-1</a><br />
<a href="http://video.unity3d.com/video/3728433/unite-11-flash-day-talk-part-2"> http://video.unity3d.com/video/3728433/unite-11-flash-day-talk-part-2</a></p>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/SVI9jzB49SY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2011/12/09/unity3d-flash/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2011/12/09/unity3d-flash/</feedburner:origLink></item>
		<item>
		<title>Our video on unity3d site.</title>
		<link>http://feedproxy.google.com/~r/vsfb/~3/6DkUV7jDeC8/</link>
		<comments>http://va.lent.in/blog/2011/12/08/our-video-on-unity3d-site/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 20:39:47 +0000</pubDate>
		<dc:creator>Valentin</dc:creator>
				<category><![CDATA[to view]]></category>
		<category><![CDATA[Fifa]]></category>
		<category><![CDATA[Interactive Lab]]></category>
		<category><![CDATA[Unity3d]]></category>

		<guid isPermaLink="false">http://va.lent.in/blog/?p=563</guid>
		<description><![CDATA[It&#8217;s still not late to mention that we (Interactive Lab) got featured at video.unity3d.com.]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s still not late to mention that we (<a href="http://interactivelab.ru/">Interactive Lab</a>) got featured at <a href="http://video.unity3d.com/video/3525060/football-world-cups-history">video.unity3d.com</a>.</p>
<p><iframe src="http://video.unity3d.com/v.ihtml?token=7201d285cacbc9b078294ca3289b900b&amp;photo%5fid=3525060" frameborder="0" scrolling="no" width="500" height="350"></iframe></p>
<img src="http://feeds.feedburner.com/~r/vsfb/~4/6DkUV7jDeC8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://va.lent.in/blog/2011/12/08/our-video-on-unity3d-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://va.lent.in/blog/2011/12/08/our-video-on-unity3d-site/</feedburner:origLink></item>
	</channel>
</rss>
