tag:blogger.com,1999:blog-38909812256048849552024-03-13T19:06:21.043-07:00Yet Another Game Programming BlogKeep It Simple, Sweetie.Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-3890981225604884955.post-35471056799523284942013-04-03T10:43:00.001-07:002013-04-03T10:43:20.153-07:00Disney Closes Game Publisher LucasArts<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzN-LNi1J1kICIcN9z5ogTuRoHe02JsvXCPTGbKhagNtYxBVOQaohOigVN7E_vSjp-zbhWT7qIMHWFU7T-YrVzVNcr3IwWKHnxcPbQybCb0A4uWRUnLVtilG5d8yvyXoy1B3uSJQy9QM/s1600/lucaslogo610.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvzN-LNi1J1kICIcN9z5ogTuRoHe02JsvXCPTGbKhagNtYxBVOQaohOigVN7E_vSjp-zbhWT7qIMHWFU7T-YrVzVNcr3IwWKHnxcPbQybCb0A4uWRUnLVtilG5d8yvyXoy1B3uSJQy9QM/s320/lucaslogo610.jpg" width="320" /></a></div>
They made Videogames history and I have good friends working there. Worst news of the month.<br />
<br />
Good job, Mickey Mouse, die.<br />
<br />
<a href="https://www.gameinformer.com/b/news/archive/2013/04/03/disney-closes-game-publisher-lucasarts.aspx" target="_blank">Source</a>Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.com2tag:blogger.com,1999:blog-3890981225604884955.post-88630775035151865522013-04-03T08:30:00.000-07:002013-04-05T08:15:17.318-07:00GDC 2013 Mon Amour<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidr_9NruDybLOYyD_PNBTcsxNVwtfVcA0q2tbxBnsDBsMEwCWmCcAdV1Jqe8z2XtEbOux-rqIgg_LimGM9qwnP_X0gBcBN8NOZDIQwiwAviMFKSK53Hlolvsif5iU79ZkaQn5_v8vDs-w/s1600/GDC2013.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidr_9NruDybLOYyD_PNBTcsxNVwtfVcA0q2tbxBnsDBsMEwCWmCcAdV1Jqe8z2XtEbOux-rqIgg_LimGM9qwnP_X0gBcBN8NOZDIQwiwAviMFKSK53Hlolvsif5iU79ZkaQn5_v8vDs-w/s320/GDC2013.jpg" width="320" /></a></div>
I have a love-love relationship with the <i>Game Developers Conference</i>, since 2006 when I had the chance to give a <a href="http://www.slideshare.net/fcarucci/HDR-Meets-Black-And-White-2-2006" target="_blank">talk</a> and experience first hand the joy of talking in front of a flock of super techie people staring at me and waiting for my first slip up (and they happened). At the end of that talk I was rewarded by a guy from NVIDIA with a compliment I still cherish: "Fran, I loved how you talk, the rhythm, your pauses, that was good man". I blushed and I was too embarrassed to reply that my manner of speaking was nothing else than heavy jet-lag kicking in and making me literally fall asleep on stage every few minutes. A job well done.<br />
<br />
This GDC was ok, mainly because I met some old good friends, from <a href="https://twitter.com/georgbacker" target="_blank">Georg Backer</a> to <a class="g-profile" href="http://plus.google.com/108490763004600206529" target="_blank">+Ury Zhilinsky</a>, to the guys at Crytek Kiev and Frankfurt: I can't say I miss Frankfurt, but it was good to see them again.<br />
<br />
The talks I attended were ok, nothing spectacular. Clearly mobile gaming is a big big topic, but, from the purely technical point of view, being told in 2013 how blooming is implemented feels a bit old: basically mobile graphics is where desktop graphics was around 2006, it needs the big guns to step in and show these kids how to do shit. The mobile GPUs, though, are getting pretty darn fast: ARM reported that mobile GPUs are almost on par when it comes to computation power with console GPUs (again, about 5 years ago tech), but lose big time when it comes to available bandwidth: accessing external memory takes a lot of power that is a scarce resource in the mobile space. Last take away from this talk: in mobile, deferred GPU kick the proverbial ass.<br />
<br />
That leads us to the NVIDIA talk and Tegra 4: Tegra 4 looks very powerful on paper, but it also looks like it could easily be used to warm up your cold winter nights in Europe. An immediate rendering architecture with non-unified shaders is not what you can call power efficient. But it's fast.<br />
<br />
But enough with this technical mumbo-jumbo and let me introduce the absolute protagonist of GDC 2013, the undisputed star of the moment, the return of the king... suspense... <b>PROJECT SHIELD.</b><br />
<b><br /></b>
<b><br /></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-uaCGXyMdQPHrLs8VtFpKxg_vfAkQbS1xV8EV-ocZM0ojohwj_rNY9kONdedwAev3j3zO-oE46yUDgA2pgbSNmLZzF8IVq4knkotifSGqoqp_A9pDr4coRthKUVeO7A7Zo5sR-WCg5Vo/s1600/nvidia-project-shield-8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-uaCGXyMdQPHrLs8VtFpKxg_vfAkQbS1xV8EV-ocZM0ojohwj_rNY9kONdedwAev3j3zO-oE46yUDgA2pgbSNmLZzF8IVq4knkotifSGqoqp_A9pDr4coRthKUVeO7A7Zo5sR-WCg5Vo/s320/nvidia-project-shield-8.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<i>Applause please</i></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
I thought that Microsoft Surface was a pointless device, but Project Shield wins easy-peasy the first price for pointlessness: it doesn't make any sense whatsoever, it's gimmicky, it's ugly, it's cheaply built, I had the "pleasure" to hold one and it felt as it was made of plastic. In fact, it is made of plastic. And it's butt-ugly. Opening the screen makes a weird sound as the hinges weren't properly oiled.<br />
<br />
How they can think anyone will buy this is beyond me.<br />
<br />
Final word about John Romero, who I met the last day while walking out of a restroom (please, no jokes): this guy rocks, he's nice, approachable, funny, and bright as the sun. He was the highlight of GDC 2013.<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.com1tag:blogger.com,1999:blog-3890981225604884955.post-80382608484963706322013-03-05T09:00:00.000-08:002013-03-05T18:06:31.093-08:00I want to learn game programming #2<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNDpFT8cvJOyucgv7QR1DMusqG_Fi-eD6Qbmb79YeK7oa7zdgh2DxnY9XafkYX87qJ72oxQB1VXSTMG9zjuwhoX1asIWl2RtTn0zEDMjZHrx9_8IVtAuTBuWrPg5QKw2EtEuA5Riv2cNw/s1600/video_game_programming.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNDpFT8cvJOyucgv7QR1DMusqG_Fi-eD6Qbmb79YeK7oa7zdgh2DxnY9XafkYX87qJ72oxQB1VXSTMG9zjuwhoX1asIWl2RtTn0zEDMjZHrx9_8IVtAuTBuWrPg5QKw2EtEuA5Riv2cNw/s400/video_game_programming.png" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
I tried to scare you away from your foolish desire to <i><a href="http://yetanothergameprogrammingblog.blogspot.com/2013/03/i-want-to-learn-game-programming-1.html" target="_blank">learn game programming</a></i> in the first episode, but if you are still here it means I haven't succeeded just yet. Let's explore, then, what resources are at your disposal if you really want to venture along these treacherous paths.<br />
<br />
If you are an absolute beginner and you have never written a line of code before (no worries, we have all been there at some point), you can start here:<br />
<br />
<ul>
<li><a href="http://www.codecademy.com/tracks/ruby">http://www.codecademy.com/tracks/ruby</a></li>
<li><a href="http://www.codecademy.com/tracks/python">http://www.codecademy.com/tracks/python</a></li>
<li><a href="http://www.pygame.org/">http://www.pygame.org</a></li>
</ul>
<div>
<br /></div>
<div>
Once you get yourself acquainted with the basics and with solving little problems, you can move down the chain and look at lower level languages such as C#, Java and Objective-C, three C based languages which introduce a higher level of complexity and control over the code you are writing and the concepts you are manipulating. Very unfortunately<a href="http://yetanothergameprogrammingblog.blogspot.com/2013/02/xna-is-dead-oh-noo.html" target="_blank"> Microsoft killed XNA</a>, an excellent C# game framework; you can still grab the latest copy of XNA Studio and play with it. It's highly recommended:</div>
<div>
<br /></div>
<div>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/bb203893.aspx">http://msdn.microsoft.com/en-us/library/bb203893.aspx</a></li>
</ul>
<div>
<br /></div>
</div>
<div>
If you are more of a Java person, you can follow the next tutorial, that will take you from absolute beginner to making Space Invaders yourself! Who doesn't love Space Invaders?</div>
<div>
<br /></div>
<div>
<ul>
<li><a href="http://zetcode.com/tutorials/javagamestutorial/">http://zetcode.com/tutorials/javagamestutorial/</a></li>
</ul>
<div>
<br /></div>
<div>
If you are coming straight from the web developing world and you dream in Javascript, there are options for you too, here's a good introduction:</div>
<div>
<br /></div>
<div>
<ul>
<li><a href="http://www.devx.com/webdev/10MinuteSolution/27134">http://www.devx.com/webdev/10MinuteSolution/27134</a></li>
</ul>
<div>
<br /></div>
</div>
<div>
And keep an eye on <i>Lanica</i>, these guys are creating a mobile game engine driven in Javascript, coolness all round. You can read more on <a href="http://lanica.co/blog/" target="_blank">Lanica's Blog</a>. </div>
<div>
<br /></div>
<div>
<br /></div>
</div>
<div>
If you have a shiny Mac (why wouldn't you have one?) and think that mobile gaming is the future, download Xcode from the App Store, it's free! Xcode is a difficult environment to learn for a beginner, make sure you cut your teeth with something simpler before having a go at this beast. Once you have Xcode on your Mac, redirect your browsers to the following tutorials and code away:</div>
<div>
<br /></div>
<div>
<ul>
<li><a href="http://blog.teamtreehouse.com/an-introduction-to-objective-c">http://blog.teamtreehouse.com/an-introduction-to-objective-c</a></li>
<li><a href="http://maniacdev.com/2010/08/beginners-iphone-action-game-tutorial/">http://maniacdev.com/2010/08/beginners-iphone-action-game-tutorial/</a></li>
</ul>
<div>
<br /></div>
</div>
<div>
Beware, here we are entering the realm of serious programming, approach with care and make sure you master the basic concepts first. Objective-C is not an easy language, it's a C dialect that will make you scratch your head several times about object ownership and such. Approach with extreme care and <b>Keep It Simple</b>.<br />
<br />
Last, but not least, the rising star of indie game development is Unity 3D: it's a powerful, component based, visual editor for games that can target several platforms easily. It's been used extensively, lots of tutorials are available and scripts can be written C#, Python or Javascript. What's not to like? It takes from where Microsoft left XNA and improves on pretty much everything. It's also an absolute must if you are a visual person.<br />
<br />
Point your browsers here now, you'll thank me later:<br />
<br />
<ul>
<li><a href="http://unity3d.com/unity/download/">http://unity3d.com/unity/download/</a></li>
<li><a href="http://answers.unity3d.com/questions/12321/how-can-i-start-learning-unity-fast-list-of-tutori.html">http://answers.unity3d.com/questions/12321/how-can-i-start-learning-unity-fast-list-of-tutori.html</a></li>
</ul>
</div>
<div>
Everything you have learnt earlier will come very handy when you are creating your first game with Unity3D.<br />
<br /></div>
<div>
While you are learning, don't forget to keep things simple, focus on solving problems and learn the ideas behind what you are doing. Don't get paranoid about writing fast and efficient code now, it is not as important <a href="http://yetanothergameprogrammingblog.blogspot.com/2010/09/optimization-is-evil-myth.html" target="_blank">as many seem to preach</a>, or, better, it is not important now for you.</div>
<div>
<br /></div>
<div>
But most importantly: <b>have fun</b>. Choose a language, choose a set of tools and create something simple you like and you know you can finish: the most important skill a programmer can possess is finishing what you started. That alone will get you a shiny, glamorous job in the Game Industry some day.</div>
<br />Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.com2tag:blogger.com,1999:blog-3890981225604884955.post-23915881506094587442013-03-03T11:30:00.000-08:002013-03-05T09:07:03.691-08:00I want to learn game programming #1<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgibExYjc34JbJCbpRnhqFlQO1yu0ZX4M_8tX06dcvK8ruPYCR4DnVMXhDRIUP8-HXaVetuQcc-401sPgkETGmlLKr5v8VvubqVVKbOJELFf7EBLo9gGpXxRrxmosabT-kGROlWyDLD-hM/s1600/35.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgibExYjc34JbJCbpRnhqFlQO1yu0ZX4M_8tX06dcvK8ruPYCR4DnVMXhDRIUP8-HXaVetuQcc-401sPgkETGmlLKr5v8VvubqVVKbOJELFf7EBLo9gGpXxRrxmosabT-kGROlWyDLD-hM/s1600/35.png" /></a></div>
So you really want to <i>learn game programming</i>, and you are asking where to start. I've been on the receiving end of this question so many times, that I tend to answer in autopilot. Let's get the scare talk out of the way first: making videogames is neither glamorous nor will it make you (or me) rich, it just so happens to be our passion.<br />
<br />
It's hard work, there's a ton and more knowledge to build up on the technical side before even trying to attempt making a very simple game, and, after that, there's a lot more to learn about how to interact within a game team, with colleagues coming from different nationalities and working in different fields (from programmers to artists to producers to... managers). Work hours are long, depending on where you ended up they are even longer, the dreadful promise of <a href="http://yetanothergameprogrammingblog.blogspot.com/2010/09/crunch-crunch-crunch.html" target="_blank">crunch time </a>in the hope that the game will be shipped on time is an always looming menace, with the little solace of the faint hope of a bonus at the end of the project (that practically very rarely or better never materializes). Speaking of money, game programmer is a very low paid job compared to other engineering fields.<br />
<br />
If you are here to make money, move away. There's lots of good blogs on the web that teach you <a href="http://codeofrob.com/" target="_blank">databases</a>.<br />
<br />
Are you still around?<br />
<br />
Next question to answer is: <i>what programming language do I learn</i>?<br />
<br />
Quick answer: not C++. Pretty much anything else is fine, but if I have to choose, I'd go for either Python or Ruby, two high level, dynamic languages that take most of the gritty details out of the way while you build up your confidence in writing code. At the beginning especially, you need to focus on learning how to solve problems in a simple manner and how to manage complexity: programming is hard, programming is a blend between engineering and art, programming is a creative and artistic endeavor. Mastering the Art of Programming, being games or any other engineering field, requires years of practice and not everyone will likely succeed: Keep It Simple must be your mantra.<br />
<br />
Why not C++? Because it's a bloated, difficult, over complicated, extremely powerful language that will keep you bogged down forever in details that are completely irrelevant to learning programming. You will have to master it one day, but that day is not today.<br />
<br />
... <a href="http://yetanothergameprogrammingblog.blogspot.com/2013/03/i-want-to-learn-game-programming-2.html" target="_blank">to be continued</a><br />
<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-422984816698394112013-02-27T12:51:00.000-08:002013-02-28T15:12:12.402-08:00VFX protest<a href="http://blog.carucci.org/" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="VFX Protest" border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3OuXpHk6JIyOaWzNfevZtLymx5zAkI9EFqWTFWwn5tyE5recopHFNf4QC7yNXRgDKx8Bw2kpTYaXCEsy2xFG2Ruie6_QS2HGuRPLNQ5gECgpxOIt6MrzxcUkA75ZMxAFVwC9FISmrpLw/s200/559892_10200771342633028_1948338373_n.jpg" width="200" /></a>Making visual effects for a movie is surprisingly similar to making a videogame: the workflow maps very closely, both need graphics engineers, modelers, animators, technical artists, producers, more or less the same process. Historically there has also been a fairly consistent exchange of professionals between the two in the last ten years. I've always looked very closely at the VFX industry to gauge what might happen to the Game Industry, for this reason the news of the <i>VFX protest </i>struck me pretty hard: it's about time there's a protest!<br />
<br />
<br />
<br />
To cut a long story short, many of the visual-effects makers of <i>Life of Pi, </i>who made the creative vision of the award winning movie possible, were let go without compensation for them or their families.<br />
These people are not cheap, they bring with themselves years of technical and artistic expertise that is extremely hard to build up, they work hard, long hours, weekends after weekends with the promise of a bonus after the project is done; a bonus that very rarely materialize. More often than not they are trimmed at the end, by a very competitive industry that is not sustainable in the long term.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTrEDfZ7gHR7_5DtCvqQ68eqD4Xnh_5-VRHg6joezqZEY88fQ7nfBVy3b98n6C_pfi6y6c3QQYw9DUGVKmOT8eic0WQL0Mbuy_ARSm57DkUmksXeEozS8cvgmp9nsQh3WU198qojlFaZc/s1600/482247_349243975184174_437288673_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTrEDfZ7gHR7_5DtCvqQ68eqD4Xnh_5-VRHg6joezqZEY88fQ7nfBVy3b98n6C_pfi6y6c3QQYw9DUGVKmOT8eic0WQL0Mbuy_ARSm57DkUmksXeEozS8cvgmp9nsQh3WU198qojlFaZc/s320/482247_349243975184174_437288673_n.jpg" width="320" /></a></div>
<br />
<br />
Rings a bell? Yes, the same happens in the Game Industry.<br />
<br />
Like the VFX industry, the Game Industry is very badly organized, with lousy project management demanding crunch time after crunch time even when all evidence accumulated in a hundred year of research on the matter suggest that it is counterproductive. And like in the VFX industry, workers are let go easily at the end of the project.<br />
<br />
People working in the VFX industry and in the Game Industry need to draw a line in the sand, organize themselves and demand sustainable business that rewards who give life to the next Life of Pi or the next LA Noir. <br />
<br />
How? Give me some feedback.<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.com0Cupertino, CA, USA37.3229978 -122.0321822999999937.221961300000004 -122.19354379999999 37.4240343 -121.87082079999999tag:blogger.com,1999:blog-3890981225604884955.post-22136111989304108812013-02-24T12:21:00.001-08:002013-02-24T12:22:45.167-08:00XNA is dead - Oh noo!<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAonpy_-mP-ADgjDBFJ5h0_l8nJat-sdIltOCg-orwjWHy72vfuUdZtH4T181r8bITVqhepYtTfyVez7LzUQHzIa0M4TYxEVi-fSIxDqVNCvrurt6r9cbrp3VuFGSZ0SatsdCHQEcvttQ/s1600/xna.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAonpy_-mP-ADgjDBFJ5h0_l8nJat-sdIltOCg-orwjWHy72vfuUdZtH4T181r8bITVqhepYtTfyVez7LzUQHzIa0M4TYxEVi-fSIxDqVNCvrurt6r9cbrp3VuFGSZ0SatsdCHQEcvttQ/s320/xna.jpg" width="320" /></a>Actually it's been dead for <a href="http://www.gamasutra.com/view/news/185894/Its_official_XNA_is_dead.php#.USp2E6Vwgts" target="_blank">few weeks</a>, but it took me some time to get over my mourning for what has probably been one of Microsoft's best ideas. The API was well thought, clear, nicely designed and, most of all, simple yet pretty versatile.<br />
<br />
<b>So they killed it.</b><br />
<br />
I used to teach XNA Studio at the University back in Germany, my students loved it, I loved it because I could visually show interesting game programming concepts in a very slick environment that could target Windows, Xbox 360 and Windows Mobile, with some very good assets management for small games thrown in the mix. it was a great tool to learn game programming.<br />
<br />
<b>So they killed it.</b><br />
<b><br /></b>
I bet they needed resources to focus on Surface.<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-88401695772395269982013-02-20T21:29:00.001-08:002013-02-20T21:33:08.772-08:00Playstation 4<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWxDYK6hawVShJfTf1sziBDnpCYrjtDoILuZ-fjeYRk6jBv0BDdZGgGSnpApsmQ8jAvWZwGMEA0tRiMiLMpLtsoIC243QFzcSfz1cT_vzyV-BiUgE1XnNxdFcxZRjN4NDc8rpXiRwoUiE/s1600/ps4pad02_4bcc_nddfs.jpg.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWxDYK6hawVShJfTf1sziBDnpCYrjtDoILuZ-fjeYRk6jBv0BDdZGgGSnpApsmQ8jAvWZwGMEA0tRiMiLMpLtsoIC243QFzcSfz1cT_vzyV-BiUgE1XnNxdFcxZRjN4NDc8rpXiRwoUiE/s320/ps4pad02_4bcc_nddfs.jpg.png" width="320" /></a></div>
And so Sony announced the Playstation 4. The first thought is that the cell processor wasn't that revolutionary after all. The second thought is that indeed the cell processor sucked precisely as foretold years ago. In fact they announced a PC.<br />
<br />
The actual show was very much underwhelming, set aside Alex Evans who is always a sexy beast: Alex, I miss you and our late coding evenings and our chats at the hairdresser in Guildford, my man... I don't miss the english rain though.<br />
<br />
But the really scary thought is that my Macbook here will outperform this PC, i mean, this console. My iPad will almost as well.<br />
<br />
I must not mention Apple on this blog... I must not mention Apple here...<br />
<br />
My biggest hope is that Sony doesn't go bankrupt after launching the PS4, cause I have almost 10.000$ invested in Sony photographic gear: I love my A99V and my Zeiss lenses, please Sony, don't die.<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.com0Cupertino, CA, USA37.3229978 -122.0321822999999937.2219618 -122.19354379999999 37.424033800000004 -121.87082079999999tag:blogger.com,1999:blog-3890981225604884955.post-49718009441182508472013-02-18T00:41:00.002-08:002013-02-18T01:07:20.951-08:00In a galaxy far far away...<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjySBrRPaJzz1mUTC7sQnRjHjlrIKcFMrXOLmiehCxdWTUeQkeUfqRl3fWpOqnBrcnKODAgpoEwTe4_MTcR6UdFrZNb4IvSl6q6nWTcdsW9u7cRvfkCjndfqNHh_ZEz83SsJiPO6toCd68/s1600/apple-logo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjySBrRPaJzz1mUTC7sQnRjHjlrIKcFMrXOLmiehCxdWTUeQkeUfqRl3fWpOqnBrcnKODAgpoEwTe4_MTcR6UdFrZNb4IvSl6q6nWTcdsW9u7cRvfkCjndfqNHh_ZEz83SsJiPO6toCd68/s200/apple-logo.jpg" width="183" /></a></div>
... I moved to California to work for Apple more than a year ago, which partially explains the total lack of content in the blog for quite a long time. It also means I don't make games anymore, so writing about games making hasn't felt so pressing for a while. This begs the question: what am I working on now? I can't tell you. Apple wouldn't be Apple if I could happily spill my guts on any blog and tell you exactly what I'm doing. All I can say about my job (aside the fact that it is by far the best job I've ever had) is that my office has no window. Nada, zero, not a single ray of light can penetrate inside (or come out, what interests the most whoever designed the building).<br />
<br />
<br />
<br />
On top of changing job, country, continent, I got married last year with an awesome woman, <a class="g-profile" href="http://plus.google.com/114608676296310954973" target="_blank">+Lina Mosashvili</a>.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://sphotos-a.xx.fbcdn.net/hphotos-ash3/554989_10151254376224968_1692306056_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="255" src="https://sphotos-a.xx.fbcdn.net/hphotos-ash3/554989_10151254376224968_1692306056_n.jpg" width="320" /></a></div>
<br />
<br />
Better photographic proofs of the event are available on request, including a video that shows my skills in dancing traditional georgian dances. Quiet a feat.<br />
<br />
After such a plethora of information that have nothing at all to do with game programming, the second burning question of the post is: will I keep writing about making videogames? Most probably not, but changing the name of the blog is not an option (too lazy), but I can probably still write about software engineering in a more general, and synthetic, way... and, no, I will not write anything about Apple.<br />
<br />
One more thing, I opened, together with my better half, a Fine Art Print online store with a collection of my best photographic work: having been a graphics programmer for so long, I wanted to remain somehow in the field. Somehow. Click on the photo and give it a look, there's some good stuff.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://photo.carucci.org/" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="117" src="http://photo.carucci.org/img/s8/v84/p1415758330-2.jpg" width="400" /></a></div>
<br />
<br />
<br />
tk<br />
<br />
<br />Anonymoushttp://www.blogger.com/profile/09371822218116337967noreply@blogger.com0Cupertino, CA, USA37.3229978 -122.0321822999999937.221961300000004 -122.19354379999999 37.4240343 -121.87082079999999tag:blogger.com,1999:blog-3890981225604884955.post-34036528803295659542011-06-13T07:00:00.000-07:002013-02-18T00:18:22.573-08:00Definition of DoneMarcello is considered a brilliant programmer by the team, willing to tackle any task is set upon him, he writes lots of very complicated code in little time. "It will be done in a couple of days", he likes to declare right before diving into his magic. Few days later you can find him typing effortlessly on the keyboard, immersed in his thoughts: "A couple more days, it's going to be very cool".<br />Some time later, he finally announces triumphantly: "It's done!". The new code is immediately committed to the main line ready to be tried out by designers, eager to cut their teeth with the new shiny piece of technology they were impatiently waiting for.<br />
<a href="http://altdevblogaday.org/wp-content/uploads/2011/06/hardworking.gif"><img alt="" class="aligncenter size-medium wp-image-8419" height="300" src="http://altdevblogaday.org/wp-content/uploads/2011/06/hardworking-279x300.gif" width="279" /></a><br />
The new code crash the build.<br />
This story is far too common in our world, but i wouldn’t blame the programmer, often very passionate about his work, so willing to please the hungry designers. The pressure to deliver features is often enormous, bugged and untested features are released, more time is spent fixing past features than developing new ones. And pressure piles up.<br />
I blame the lack of a clear Definition Of Done, that is able to define without ambiguities when a feature is ready to be deployed to the rest of team and go into production.<br />
<strong>The final goal of the Definition of Done is to increase the rate at which working features are produced by the programming team in the long term.</strong><br />
The most common Definition Of Done that I've encountered in the Industry (and often used myself) is something similar to:<br />
<em>It's done when I wrote the code and it works on my machine.</em><br />
This Definition Of Done is far from being unambiguous: in fact it means different things for each member of the team. To begin with, it's not clear what we mean here by "it works". Have I tried any possible condition in game? Or it works just in my testbed and I'm assuming it works in the game as well? Has someone from QA done a play through? Has he smoke tested the entire game or just a level? Has someone from the design team tried to use the feature? Does it actually do what the designers need? Do all automated tests pass? Is there any automated test at all?<br />
And what about code quality: can code be changed easily if something doesn't work (and it will not work) or if something needs to be modified later (and it will need to be modified)?<br />
Too many open questions without clear and unique answers to make this definition safe for the team. When a feature is "done", the content creators or other engineers can work on it with confidence, knowing that the chance of crashing or not doing what was asked for are minimized. Not zero. Just minimized.<br />
A more useful Definition Of Done is a checklist of activities that needs to capture, more or less closely, the following concepts:<br />
<strong>Uniqueness</strong>. A feature is "done" at the same stage of development regardless of who has been working on it.<br />
<strong>Automation</strong>. Criteria can be checked automatically by tools, impact on actual production is minimal.<br />
<strong>Quality</strong>. Code quality and implementation quality are guaranteed.<br />
<strong>Agreeability</strong>. The entire team has to agree and stick to the Definition of Done, including designers and management.<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-87568940937471417952011-05-27T07:30:00.000-07:002011-05-27T07:30:02.229-07:00The best defense is a good offense<p> </p> <p>My students might be moving their first careful steps in the dangerous lands of programming, but the problems I’m forcing them to face week after week are nothing short than “difficult”, even in code that is seemingly simple and straightforward. This week we were working on a sprite engine in C# (XNA), adding some code to select different sprite animations to play, where an animation is defined as an array of images. The sprite keeps track of the index of the current image being used in the current animation. Pretty straightforward…. crash.</p> <p><a href="http://lh5.ggpht.com/-A5H1GlonmYw/Td-sOnfT6zI/AAAAAAAAAJ4/XoB8_s22epU/s1600-h/ep1_federation_aat_tanks%25255B1%25255D%25255B2%25255D.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ep1_federation_aat_tanks[1]" border="0" alt="ep1_federation_aat_tanks[1]" src="http://lh4.ggpht.com/-fcUl1hzAis8/Td-sPHCQ6MI/AAAAAAAAAJ8/8wWeIgweCQw/ep1_federation_aat_tanks%25255B1%25255D_thumb.jpg?imgmax=800" width="244" height="157"></a></p> <p>Oh crashes happen, it’s part of the game, and we quickly found out the source of the problem:</p> <blockquote><pre lang="C++" escaped="true">Texture2D GetFrame(int index) <br />{ <br> return frames[index]; <br>}</pre></blockquote><br /><p>An exception, <em>IndexOutOfBound</em>, was being thrown when a new animation is selected: the current index is being maintained by the Sprite class, and it’s not guaranteed that the new animation contains at least the same number of frames of the previous one. <em>GetFrame()</em> can, potentially, receive an index that is out of bound.</p><br /><p>Solution: Make sure <em>GetFrame()</em> doesn’t fail if the index is out of bound.</p><br /><p>Something like:</p><br /><blockquote><pre lang="C++" escaped="true">Texture2D GetFrame(int index) <br />{ <br> if (index > frames.Count) <br> index = 0; <br> return frames[index]; <br />}</pre></blockquote><br /><p>This is a very common approach to the problem that in my opinion is not actually solving it, merely hiding the dirt under carpet of an if guard. Surely, it “fixes” the bug, but at what cost: some added complexity (it’s an if, one more branch and one more unit test to write in an automated tested environment), that hides away the source of the bug; the system can still be in an inconsistent state. We are just trying to keep going in the presence of a blatant fault.</p><br /><p>The more stable solution, I explained to the students, is to fix the source of the inconsistency, in this case either having one separate index per animation or, more simply, reset the frame index to zero when a new animation is selected: an animation is guaranteed to always have at least one frame, the code is thus safe, it doesn’t need a check in <em>GetFrame()</em> (one less branch) and it won’t crash… ever.</p><br /><p>Unless we have an animation with no frames.</p><br /><p>This is precisely the behavior I want: if there’s an animation with no frames, I want the application to crash and tell me if it’s in an inconsistent state that I can not ignore. If it crashes, I have to fix it.</p><br /><blockquote><br /><p><strong>Fail early, fail loud</strong></p></blockquote><br /><p>This simple example shows my students a broader approach to software construction: offensive programming versus defensive programming. Instead of trying to prevent a crash by writing lots of defensive code that checks anything that can possibly go wrong (but obfuscates meaningful and useful code in a see of ifs), I prefer writing less code, but make it so execution stops as early as possible in the presence of inconsistent state, invalid preconditions, broken invariants.</p><br /><p>In my experience this approach leads to less and simpler code, easier to modify and with less crashes.</p><br /><p>An obvious drawback of offensive programming might be a live system, that is used by clients (content creators?) while it’s being developed: ring a bell? It’s exactly how we work in the Game Industry. Although I’m convinced that it produces less down time in the long run (by producing better and less crash-y code), it’s hard to convince an artist staring at a call-stack that this is a Good Thing™.</p><br /><p>I’m again very open to suggestions here, how would you tackle the problem of writing lean and offensive code versus making the content creators experience pleasant in the presence of a (undoubtedly more rare) show stopper?</p><br /><p>Some ideas:</p><br /><ul><br /><li>User friendly crash handler <br /><li>Automated unit, functional and smoke testing before release to minimize crashes <br /><li>Build staging </li></ul><br /><p>I played a lot in the past with unit and functional testing, especially in the form of asset testing to make sure that assets are sanitized before entering the system, with very promising results that led to fairly stable daily release cycles; something very much appreciated by content creators. Still that show stopper is hard to sell…</p><br /><p>This post is also available on <a href="http://altdevblogaday.org/2011/05/26/the-best-defense-is-a-good-offense/" target="_blank">AltDevBlogADay</a>.</p> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-40458514074771569262011-04-27T05:30:00.000-07:002011-04-27T05:30:01.154-07:00A trip to Berlin<p>I’ve been teaching game programming at the University of Darmstadt for a couple years now: as they say, teaching something helps you clarifying it in your head. They also say that who can do something does it, who can’t teaches it <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://lh3.ggpht.com/_ByTw6BGttiE/Tbf3V200ngI/AAAAAAAAAJk/QuhLp15QU_U/wlEmoticon-smile%5B2%5D.png?imgmax=800"></p> <p><a href="http://lh4.ggpht.com/_ByTw6BGttiE/Tbf3WVePW_I/AAAAAAAAAJo/r45wPVfwWWQ/s1600-h/irrational%5B2%5D.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="irrational" border="0" alt="irrational" src="http://lh3.ggpht.com/_ByTw6BGttiE/Tbf3W_7EYMI/AAAAAAAAAJs/PgsqHSeIdio/irrational_thumb.jpg?imgmax=800" width="244" height="123"></a></p> <p>Last week I called two “volunteers” as usual to write some code at the main computer in front of the rest of the class, gave them some freedom to choose a solution for a little problem we were having in our XNA game. The solution they came up with was good and, then, they generalized it, writing some more code, and then some more code, and then a little bit more code.</p> <p>I asked why.</p> <blockquote> <p><em>We might need it later</em></p></blockquote> <p>I replied.</p> <blockquote> <p><em>So next weekend you want to go to Berlin, spring is finally coming, time to enjoy a bit of sun, it won’t last long here in Germany. You evaluate all the available options, you may take the train (even if they are so expensive here), or go by plane which is not much more expensive than the train and takes less time, or rent a car which would give more freedom but costs a bit more. You discuss it among yourselves for a while, weighing pros and cons against the cost of each option; the train will be around 200 euro per person, same as the a plane ticket, while renting a car would cost around 100 euro per day plus petrol. You finally choose and you buy a car for 5.000 euro. Why? You might need it later. Maybe you will like Berlin so much that you want to travel there every weekend, or you will need the car to go to Amsterdam instead, or even Or maybe you will not do anything like that, and you will spend ten times more now to go to Berlin than if you just hopped on a train…</em></p> <p> </p></blockquote> <p><a href="http://lh6.ggpht.com/_ByTw6BGttiE/Tbf3XFvaVaI/AAAAAAAAAJw/wTSJ7d0qkPw/s1600-h/images.jpg"><img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="images" border="0" alt="images" src="http://lh3.ggpht.com/_ByTw6BGttiE/Tbf3XqxdcwI/AAAAAAAAAJ0/MMKubvRfhb0/images_thumb.jpg?imgmax=800" width="244" height="196"></a></p> <p>In our daily life we face this kind of tradeoffs and, with material things, we very often rationally choose to spend less now for something we need now, rather than spend more for something we might need later. I’m ignoring for this post the well proved fact that decisions are not always taken rationally (for a good book on the matter look <a href="http://www.amazon.com/Predictably-Irrational-Hidden-Forces-Decisions/dp/006135323X" target="_blank">here</a>). In software we usually take the alternative route, we might need it later, we are willing to spend more now for something that more often than not we will not need later. We do it so often that we gave it a name: <strong>Over Engineering</strong>.</p> <p>I believe that this peculiar behavior stems from the fact the cost associated to each line of code we write is not directly evident, it’s not money leaving our pockets. It’s also difficult to estimate precisely, which leads to the false perception that generalizing a solution will actually save time. It will not. Each line of code has a cost over time in terms of maintenance and added complexity, that is paid by the team day after day: if it doesn’t solve a problem that we have now, it’s a sunk cost. It requires a huge amount of experience to foresee that “we might need it later” is actually going to be true, and it also requires having gone through the same problem at least few times, which is not always the case in our Industry: we are on the bleeding edge of technology, uncharted territory, where things are complex by nature. Adding more complexity that is strictly needed is not going to help our cause.</p> <p>Half jokingly with my students, I showed how they could solve the problem with half the number of lines of code, which will probably mean something like half the number of bugs at the end of the project if the idea is applied consistently.</p> <blockquote> <p><em>You Aren’t Gonna Need It</em></p></blockquote> Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-3890981225604884955.post-42598318705108362232011-04-12T02:30:00.001-07:002011-04-12T02:52:34.925-07:00Undeniable logicOne of the biggest mistakes I used to make in my career in the Industry was to think that a logic argument, well reasoned and with plenty of data to back it up was enough to convince reasonable and clever people, the kind of people I work with. An example is my favorite topic (no, it’s not commenting code), automated testing and unit testing: we all know that writing unit tests is a Good Thing™. We all do, right? There’s plenty of evidence and my argument for writing unit tests before even writing code is very solid. I was naturally expecting that after some resistance due to various reasons, the vast majority of my co-workers would eventually give up and embrace my reasoning, if not flat out try what I was advocating. But discussing automated testing here is not my goal now: my point is that very few people could actually see and understand my point. How frustrated I had been before realizing that it was all my fault.<br />
It took years to understand that the undeniable logic in an argument is not enough to convince someone of its validity: it’s as important and most often even more important how the argument is expressed, how it’s told and explained.<br />
<div align="center"><a href="http://lh4.ggpht.com/_ByTw6BGttiE/TaLSatkTdlI/AAAAAAAAAJc/-23-GZKdZVE/s1600-h/3eangz5w12.jpg"><img alt="3eangz5w[1]" border="0" height="244" src="http://lh3.ggpht.com/_ByTw6BGttiE/TaLSa8996yI/AAAAAAAAAJg/u1g7ArNpkeQ/3eangz5w1_thumb.jpg?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="3eangz5w[1]" width="244" /></a></div>John is a very clever programmer, extremely sure of himself, who likes to drill into the details of a problem; his method is tried and true, and he wants to give something else a go by himself before incorporating in his work. He likes to <em>picture</em> a problem and <em>see</em> a solution. I approach John and explain him that according to several studies writing Unit Testing makes code more reliable and reduces cost of ownership for a code base, so he can focus on the general problem rather than fixing small bugs; doesn’t it <em>sound</em> correct? John thinks “bah” and moves on.<br />
Trisha is a very clever programmer, who likes to keep herself informed by reading about how others in the Industry have solved similar problems in order to possibly produce something better for herself. She likes to think about the big picture rather than wasting time on irrelevant details. She wants to <em>feel</em> a problem before <em>touching</em> the right solution. I tell Trisha that if she tries Unit Testing for herself she will find that her code will be even more reliable, simpler and easy to change when she needs to change the details of the implementation, which is a result that she can immediately <em>see</em> after only few weeks. Trisha politely smiles at me thinking “bah” and moves on.<br />
Things are not as simple as in my example, but we can immediately draw some interesting conclusions from it: in both cases what I told to John and Trisha is true and verifiable, but I failed to understand how they want information to be presented to them, which is radically different! John doesn’t care that others find Unit Testing useful, he wants to try for himself, while Trisha doesn’t want to try something if others haven’t already established it’s viable. John wants to <em>see</em> an argument <em>not</em> hear it, Trisha wants to <em>feel</em> it not <em>see</em> it.<br />
Interestingly, addressing a group of people makes it even more difficult because different personalities are likely to be present, how about:<br />
<blockquote>Writing unit tests before code is proved by different studies to be effective, which is something that you can see by yourself in just few weeks of trying it out, either on some small units or in a big problem that sounds difficult to tackle. You can easily feel the advantages or come to ask me for advice if you encounter problems.</blockquote>How does it sound? <img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://altdevblogaday.org/wp-content/uploads/2011/04/wlEmoticon-smile.png" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /><br />
This realization makes leading a group of people even more challenging: now it’s important not only to have a solid and well thought-out vision, but also to understand the nature of the people we work with, how they want information to be presented to them, how they like to reason and respond to problems. Failing to communicate our vision is our mistake as leads.<br />
<br />
Post also available on <a href="http://altdevblogaday.org/2011/04/12/undeniable-logic/">AltDevBlog</a>.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-10042615326310456602011-03-28T03:30:00.000-07:002011-03-28T03:30:01.101-07:00No Comment<p>When I interview a new C++ programmer, my favourite question is not about const-correctness or virtual tables, but: "Do you comment your code?". I still ask about virtual tables, but asking about code comments always springs some interesting discussions and gives me a good insight about the level of care the aspiring programmer puts in crafting his code to not only make it correct and fast, but also to make it easy to work with. I witnessed puzzled faces wondering if that was a trick question (yes it is), and one unlucky candidate pushed his luck to a very bold "which good programmer doesn't comment his code!". Me.</p> <p style="text-align: center"><a href="http://altdevblogaday.org/wp-content/uploads/2011/03/No-Comment1.png"><img class="size-medium wp-image-2632 aligncenter" alt="" src="http://altdevblogaday.org/wp-content/uploads/2011/03/No-Comment1-224x300.png" width="224" height="300"></a></p> <a name='more'></a>I don't know if not commenting my code makes me a good programmer, but it surely forces me to go a long way to make it so my code is as clean and as self-documenting as I can possibly make it. <p>But I lied: it's not true that I never write any comment, a more precise principle I adhere to as much as possible is:<em> </em></p> <p><em></em></p> <ul> <li><em>Comment only what can't be expressed in code</em> </li></ul> <p>Which is very little in my experience.</p> <p>More precisely my adversity to comments stems from the DRY principle:</p> <ul> <li><em>Don't Repeat Yourself</em> </li></ul> <p>Intentions in code should be expressed once and only once: code comments are very often a blatant violation of the DRY principle, which usually leads to several nasty problems and inefficiencies. For once, whenever there is a duplication in code of any form, changes to that bit of code must be done at least twice. Comments are no exception: to be remotely useful they must be kept in sync with the code they describe, but, being us programmers very creative and intelligent people (and lazy), it's guaranteed we will sometimes forget to update comments when we modify, fix, update a bunch of code. A wrong comment is not only useless, it's actually harmful. In a see of green what I'm interested in is the code: that's where the meaning is, that's where the bug is if I'm looking for one. Comments are noise, and often wrong. If the code is so complicated that can't be understood without comments, my suggestion is to rewrite it and make it clear, our fellow workmates will thank us for the extra effort and love.</p> <p>So when it comes to comments, I follow one guideline very strictly:</p> <ul> <li><em>Whenever you feel the need to write a comment, write a method instead</em> </li></ul> <p>I'm a sucker for code that reads like English, it's self explaining and tells me right there everything I really need to know about itself, in a nice executable form, with no duplication.</p> <p>An interesting consequence of applying this guideline extensively is that code tends to nicely divide itself in small units of behavior, one per method, that are easy to reuse, further reducing the overall amount of code (that will inevitably spawn a bug at some point). No Comment is for me a powerful incentive to factorize code.</p> <p>But there's never a free lunch, and very rarely the perfect solution or methodology: I've found out that my style of layering abstractions over abstractions, keeping methods short and easily understandable, makes reading code difficult for a certain class of programmers who need to see the inner details of an algorithm in order to understand it fully: my style slows them down, since they have to jump back and forth to have the full picture, including details. These programmers are often very bright and you want to put them in the most comfortable position to weave their magic.</p> <p>It's an issue in my style that I haven't fully resolved, and I'm very open to suggestions here: I believe it's a matter of finding the sweet spot between abstractions and details, and it probably depends on the team and the actual people we have to work with. At the end of the day the goal is the best productivity possible for the whole team.</p> <p><em>Post also available at </em><a href="http://altdevblogaday.org/?p=2466" target="_blank"><em>AltDevBlogADay</em></a>.</p> Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-3890981225604884955.post-53805477148513744142011-01-05T05:53:00.001-08:002011-01-10T01:17:06.321-08:00More and more love to Stereo-3D in CryEngine [ITALIAN]<p>The interview is in italian, talking about Stereo-3D in CryEngine and my experience in the industry. The snowstorm in Frankfurt prevented me from flying to Milan, give up? No, I will have nothing of this nonsense! Skype solved the problem.</p> <p>Straight from my living room… Enjoy.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:e9d25739-781a-4408-a639-eaae06895619" class="wlWriterEditableSmartContent"><div><object width="448" height="252"><param name="movie" value="http://www.youtube.com/v/i9XGtSVn9rk?hl=en&hd=1"></param><embed src="http://www.youtube.com/v/i9XGtSVn9rk?hl=en&hd=1" type="application/x-shockwave-flash" width="448" height="252"></embed></object></div><div style="width:448px;clear:both;font-size:.8em">VideoGamesParty.it</div></div> <p>Also you can notice from the previous video that I’m getting slimmer and slimmer. Thanks to the guys at VideoGamesParty.it for their help.</p> Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-3890981225604884955.post-21054531348779340672010-11-25T08:37:00.001-08:002010-11-25T08:41:16.358-08:00AAA Stereo 3D in Crysis 2 – Talk at 3D In Your Face<p>I finally got the uncut, uncensored, untainted footage of my talk at 3D In Your Face in Bradford last month. About three hundred people (!!) were attending, it was great fun and quite scary for the first couple of minutes. Luckily the first couple of minutes are missing, but you get thrown in the mix at no cost a full five minutes of Crysis 2 in game!</p> <p>Enjoy the show.</p><iframe height="300" src="http://player.vimeo.com/video/17191630" frameborder="0" width="400"></iframe> <p><a href="http://vimeo.com/17191630">3D In Your Face - AAA Stereo in Crysis 2</a> from <a href="http://vimeo.com/user5240191">Francesco Carucci</a></p> <p>And don’t miss the slides from the talk.</p> <div style="width: 425px" id="__ss_5908807"><strong style="margin: 12px 0px 4px; display: block"><a title="AAA Stereo 3D" href="http://www.slideshare.net/fcarucci/aaa-stereo-3d">AAA Stereo 3D</a></strong><object id="__sse5908807" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aaastereo-3d-101125102832-phpapp02&stripped_title=aaa-stereo-3d&userName=fcarucci" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed name="__sse5908807" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aaastereo-3d-101125102832-phpapp02&stripped_title=aaa-stereo-3d&userName=fcarucci" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object> <div style="padding-bottom: 12px; padding-left: 0px; padding-right: 0px; padding-top: 5px"> </div></div> <p align="left">Special thanks go to Nicolas Schulz from RnD who wrote the slides on Reprojection and implemented the actual algorithm and the Crysis 2 team for the amazing game. Big kudos go to my partner in crime, <a href="http://twitter.com/#!/JulietteSierra" target="_blank">Jens Schobel</a> (yes, I will never write your name correct, ever!) for writing the slides together and giving the same talk together in Cologne and Barcelona. I missed you man!</p> <p>Comments on how to improve my l337 presenting skillz0r are greatly welcome.</p> Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-3890981225604884955.post-32785074052225042282010-11-16T05:59:00.001-08:002010-11-16T06:00:16.017-08:00No comment<blockquote> <p><em>while (IsStarted())<br>{<br> // Wait until there is work to do.<br> Wait();</em><br></p></blockquote> <p>Oh well, I guess so…</p> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-14466420214553451772010-11-02T09:05:00.001-07:002010-11-02T09:06:04.890-07:00Crunch… crunch… crunch... #2<p> </p> <p>Old and very well known article, but it’s worth a refresh cause it seems to be overlooked:<br><a href="http://archives.igda.org/articles/erobinson_crunch.php">http://archives.igda.org/articles/erobinson_crunch.php</a></p> <blockquote> <p><em>In most times, places, and industries over the past century, managers who worked their employees this way would have been tagged as incompetent — not just because of the threat they pose to good worker relations, but also because of the risk their mismanagement poses to the company's productivity and assets. A hundred years of industrial research has proven beyond question that exhausted workers create errors that blow schedules, destroy equipment, create cost overruns, erode product quality, and threaten the bottom line. They are a danger to their projects, their managers, their employers, each other, and themselves.</em></p></blockquote> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-28189241083644346152010-10-12T10:45:00.001-07:002010-10-12T10:47:15.839-07:00NEM 2010 Barcelona – Stereo 3D Talk<p><a href="http://nem-summit.eu/"><img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="NEM 2010" border="0" alt="NEM 2010" align="left" src="http://lh4.ggpht.com/_ByTw6BGttiE/TLSeqoF5kwI/AAAAAAAAAJA/aHvOozZ4Vs0/timthumb%5B1%5D%5B4%5D.jpg?imgmax=800" width="244" height="145"></a>I’m going to NEM 2010 in Barcelona in a couple of days to talk about our work on Stereo 3D that is going to be used in the upcoming Crysis 2.</p> <p>It’s the same talk we gave at GDC Europe in Cologne but with revised slides and some new info.</p> <p></p> <p>That’s going to be good fun.</p> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-62508681013853616402010-09-15T08:09:00.001-07:002010-09-15T08:13:12.828-07:00“Video Games Lead to Faster Decisions That Are No Less Accurate”<p> </p> <p><a href="http://www.sciencedaily.com/releases/2010/09/100913121656.htm?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+sciencedaily+(ScienceDaily:+Latest+Science+News)">http://www.sciencedaily.com/releases/2010/09/100913121656.htm?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+sciencedaily+(ScienceDaily:+Latest+Science+News)</a></p> <blockquote> <p><em></em></p> <p><em></em></p> <p><em></em></p> <p><em><a href="http://www.sciencedaily.com/releases/2010/09/100913121656.htm?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+sciencedaily+(ScienceDaily:+Latest+Science+News)"><img style="border-right-width: 0px; margin: 0px 10px 0px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="starcraft2-hell-its-about-time[1]" border="0" alt="starcraft2-hell-its-about-time[1]" align="left" src="http://lh6.ggpht.com/_ByTw6BGttiE/TJDiRXrQiOI/AAAAAAAAAIc/UvWI5NQ_pKw/starcraft2-hell-its-about-time%5B1%5D%5B4%5D.jpg?imgmax=800" width="199" height="134" /></a>ScienceDaily (Sep. 13, 2010) — Cognitive scientists from the University of Rochester have discovered that playing action video games trains people to make the right decisions faster. The researchers found that video game players develop a heightened sensitivity to what is going on around them, and this benefit doesn't just make them better at playing video games, but improves a wide variety of general skills that can help with everyday activities like multitasking, driving, reading small print, keeping track of friends in a crowd, and navigating around town.</em></p> </blockquote> <p>Enuf’ said. Now I can play Starcraft II for as much as I like claiming it’s for my own good.</p> Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-3890981225604884955.post-76330749745198360462010-09-11T05:16:00.001-07:002010-09-15T08:40:18.004-07:00Off Topic: Scaloppine Magiche<p>I’m seriously thinking about turning this blog into a cooking blog. Programming is a creative endeavor after all, isn’t it?</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 30px; display: inline; float: left; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ce0ef09c-3744-4a5b-abdc-e034aafa0cd3" class="wlWriterSmartContent"> <div><embed height="183" type="application/x-shockwave-flash" width="244" src="http://www.youtube.com/v/zsYNy4VXEic&hl=en" /></div> </div> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p>To create Scaloppine Magiche:</p> <ul> <li>get thin beef (or veil) filets </li> <li>cover the filets with flour on both sides </li> <li>heat up olive oil (olive oil!) </li> <li>when the meat is half cooked, poor red wine </li> <li>serve with roasted vegetables, and the same red wine to drink </li> </ul> <p> </p> <p>Squeezing a lemon instead of pouring red wine works equally well.</p> <p>Enjoy! </p> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-17038656269853191002010-09-10T06:15:00.001-07:002010-09-10T06:15:15.887-07:00Crunch… crunch… crunch…<p><a href="http://www.estherderby.com/weblog/archive/2006_03_01_archive.html#114167242943470460"> http://www.estherderby.com/weblog/archive/2006_03_01_archive.html#114167242943470460</a></p> <blockquote> <p><em><strong>Extended periods of overtime are more likely to SLOW DOWN work than speed up work.</strong></em></p> <p><em>Rather than demand overtime,</em></p> <li><em>Look at the universe of work for the department, not just individual work loads</em> </li> <li><em>Decide what to do and *what not to do* based on the mission of the group</em> </li> <li><em>Prioritize the work the group needs to do</em> </li> <li><em>Determine the level of quality required for work – what “done” means and what “good enough” means</em> </li> <li><em>Collect data on how people spend their time at work – not to beat people over the head, but to look at patterns that may be lowering productivity <br />(Typical time-robbing culprits are: Multi-tasking, fragmentation, frequent interruptions, meaningless meetings, non-value adding corporate activities.)</em> </li></blockquote> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-19934507039211130802010-09-09T06:36:00.001-07:002010-09-15T08:41:14.084-07:00The 'premature optimization is evil' myth<p>In Bluebyte’s blog, Joe Duffy writes an extremely interesting essay about premature optimization, where his conclusions are:</p> <blockquote> <p><em>What I do advocate is thoughtful and intentional performance tradeoffs being made as every line of code is written. Always understand the order of magnitude that matters, why it matters, and where it matters. And measure regularly! I am a big believer in statistics, so if a programmer sitting in his or her office writing code thinks just a little bit more about the performance implications of every line of code that is written, he or she will save an entire team that time and then some down the road.</em></p> </blockquote> <p>Original link: <br /><a href="http://www.bluebytesoftware.com/blog/2010/09/06/ThePrematureOptimizationIsEvilMyth.aspx">http://www.bluebytesoftware.com/blog/2010/09/06/ThePrematureOptimizationIsEvilMyth.aspx</a>.</p> <p>It’s a very good read over all, and very well reasoned, but I disagree with the approach entirely. I prefer simplicity first, making it work and making it simple, and then, where necessary, making it fast. </p> <p> <br />This approach fails to recognise that even in low level programming, the scarcest resource is in the vast majority of the cases neither CPU time nor memory, but programmer's time. That's what we need to optimize for: making careful consideration of the performance characteristics of every line of code might optimize CPU time, but wastes programmer's time on a task that is totally irrelevant for 90% of the code. On the other hand I agree on: “<em>Given the choice between two ways of writing a line of code, both with similar readability, writability, and maintainability properties, and yet interestingly different performance profiles</em>”. No reason to make something slower for the sake of it, everything else being equal, right? Right, but very rare. </p> <p> <br />The example with LINQ is emblematic: I will choose the LINQ version any day, because it's simpler to write, simpler to read and clearer. If the profiler says it doesn't meet the performance requirements, then and only then I will kill every single cycle I can from that code. In my experience this approach resulted in faster and simpler low level code.</p> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-68515993456096736232010-08-25T08:42:00.002-07:002010-08-27T06:52:45.751-07:00Mum, I’m going to be a TV starAka <em>3D-Gaming in der Entwicklung </em>about our work on Stereoscopic 3D in Crytek<em>. </em>Minute 00:00:36s. If you understand german it might even be interesting: I don’t know, my german is not that good.<br />
<br />
<a name='more'></a><br />
<br />
<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="240" width="320"> <param name="src" value="http://hstreaming.zdf.de/zdf/veryhigh/100822_3dgaming_nes.mov"><param name="autoplay" value="true"><param name="controller" value="false"><param name="loop" value="false"><embed src="http://hstreaming.zdf.de/zdf/veryhigh/100822_3dgaming_nes.mov" width="320" height="240" autoplay="true" controller="false" loop="false" bgcolor="#000000" pluginspage="http://www.apple.com/quicktime/download/"> </EMBED> </OBJECT><br />
<br />
Original link <a href="http://www.3sat.de/mediathek/?mode=play&obj=19900" target="_blank">here</a>.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-2185821034966275052010-08-24T07:02:00.001-07:002010-08-25T05:07:19.160-07:00AAA Stereo-3D in CryENGINE 3<p><a href="http://crytek.com/cryengine/presentations" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="newspic-gdceurope-2010_0[1]" border="0" alt="newspic-gdceurope-2010_0[1]" src="http://lh6.ggpht.com/_ByTw6BGttiE/THPRDO0e8oI/AAAAAAAAAII/TWcY0L_WKBA/newspic-gdceurope-2010_0%5B1%5D%5B6%5D.jpg?imgmax=800" width="453" height="217" /></a></p> <p>Me, Jens and Nicolas gave this talk about Stereoscopic 3D at GDC Europe, 2010 in Cologne.</p> <blockquote> <p><em>To provide designers with tools to produce the highest Stereo-3D quality that can be achieved: Crytek (or “CryEngine in 3D”) is following up the hype created by recent big Stereo-3D movies to produce an experience that is both enjoyable and engaging, with minimal cost in performance. We’ll reveal for the first time our new Stereo-3D rendering technique and how we found a zero-compromise, real-time Stereo-3D solution for CryENGINE®3. We’ll also show the tools that make workflow smooth and intuitive and can be used not only to create Stereo-3D videogames, but also movies in the same integrated real-time environment.</em></p> </blockquote> <p><a href="http://crytek.com/sites/default/files/Part1%20-%20AAA%20Stereo-3D.ppt" target="_blank">Part 1.</a> <br /><a href="http://crytek.com/sites/default/files/Part%202%20-%20Bringing%20Stereo%20to%20Consoles.ppt" target="_blank">Part 2.</a></p> Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-3890981225604884955.post-19913722908466961502010-08-10T03:08:00.001-07:002010-08-10T03:30:12.023-07:00Test Driven Development and IPhone<p>Yes, we can: <br /><a href="http://developer.apple.com/tools/unittest.html">http://developer.apple.com/tools/unittest.html</a></p> <blockquote> <p><em>Here's a common development scenario: You've just finished building your application. You're confident that it works. You've put it through the paces, exercising every feature and checking every output. You're proud to say that it's stable, at least for the moment. But when you think about the next feature you need to add, you can't deny that low-priority thread of fear running in the back of your mind: “If I change the code, what might break?” You could certainly try to manually test out all the features of your application after each change, but after the second time doing this you're sure to become bored and make a mistake. Ironically, you feel like you don't have time to test.</em></p> <p><em>If that scenario is familiar to you, here's the good news: Your computer has the cycles to keep that low-priority fear thread in check. If you supplement your visual inspection with automated tests, the computer will happily check the results for you, as often as you like. It's understood that it isn't always easy to write an automated test, but the effort you spend is a one-time investment that just keeps paying you back every time the test is run. And if that's not enough, writing the test might reveal opportunities for a better design.</em></p> </blockquote> <p>And incidentally one of the best explanations of why writing unit tests actually <strong>saves time</strong>.</p> Unknownnoreply@blogger.com0