<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3830350392070277486</id><updated>2012-01-10T13:14:24.319-08:00</updated><title type='text'>Random thoughts on Computer Graphics, Games, and the Universe</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-909550749306566454</id><published>2011-12-14T05:52:00.000-08:00</published><updated>2011-12-14T06:00:11.308-08:00</updated><title type='text'>[research] Coherent parallel hashing</title><content type='html'>I just realized I never blogged about our coherent hashing paper! So don't miss it if you did not see the talk at SIGGRAPH Asia (which I am unfortunately not attending this year). The paper is &lt;a href="http://www.ismaelgarcia.org/papers/cohash_siga2011/"&gt;here&lt;/a&gt;. It will tell you how you can get both efficient storage of sparse data &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; exploit access coherence at the same time -- something unusual for a spatial hashing scheme.&lt;br /&gt;&lt;br /&gt;Also, if you are interested in fast, parallel hashing do not miss the dissertation of &lt;a href="http://idav.ucdavis.edu/%7Edfalcant/research.php"&gt;Dan Alcantara&lt;/a&gt;: A great read for anyone interested in this topic.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-909550749306566454?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/909550749306566454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=909550749306566454' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/909550749306566454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/909550749306566454'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2011/12/research-coherent-parallel-hashing.html' title='[research] Coherent parallel hashing'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-6158277218536974165</id><published>2011-09-16T06:52:00.000-07:00</published><updated>2011-09-20T00:21:36.698-07:00</updated><title type='text'>[research] Producing results</title><content type='html'>Publishing a paper is no easy task. First, you need a good piece of research -- of course, the most difficult, but largely compensated by the fun! Second, you need to produce a paper and often a video, demonstrating your results and comparing them with many other techniques, under a variety of situations.&lt;br /&gt;&lt;br /&gt;This is where things gets complicated.&lt;br /&gt;&lt;br /&gt;Often research code is a somewhat fragile unstable prototype, with a complex, hard to use GUI (by hard to use, I mean *impossible* to use by anyone but the one who implemented it!). Well, at least this has been the case more than once for me :) This is combined with a large set of parameters and optional features, many different data sets, and implementations of other methods -- sometimes your own implementation, sometimes the original code from other authors. While the later is better for the sake of fair comparisons, this also means different APIs, with different inputs/outputs -- possibly even different languages!&lt;br /&gt;&lt;br /&gt;And now, you have to make all this work together to produce figures and tables composed of thousands of data points. Well, good luck! And just to make things more interesting you can be sure to discover last minute bugs, or have your advisor decide to change a dataset, implying to redo all figures of the paper minutes before submission. (And no, it is not fine to resist 'because this will change everything in the paper').&lt;br /&gt;&lt;br /&gt;You probably recognize some of these situations. But things do not have to be painful. It just takes a few little tricks to avoid most trouble, even if all figures and tables of the paper -- and even the video -- have to be redone 2 minutes before submission. The answer?&lt;br /&gt;&lt;br /&gt;Scripting! ... done right.&lt;br /&gt;&lt;br /&gt;Research GUI's are great during development. It lets you tweak, test, debug interactively. However, such GUIs are really poor when it comes to generating results. Hence, your programs should &lt;span style="font-weight: bold;"&gt;always&lt;/span&gt; be able to produce &lt;span style="font-weight: bold;"&gt;all &lt;/span&gt;results from the command line without intervention.&lt;br /&gt;If there are things to set up interactively, then there should be a way to &lt;span style="font-weight: bold;"&gt;save &lt;/span&gt;these parameters (viewpoint, background color, etc.) and load them &lt;span style="font-weight: bold;"&gt;from the command line&lt;/span&gt;. And don't tell me this is a lot of code. It takes a struct and a pair of fread/fwrite to do this. Sure, you could use serialization and persistance. But such nice designs mean less time on your research. So again, fwrite/fread is perfectly fine for this kind of preset parameters.&lt;br /&gt;&lt;br /&gt;Now I often hear "well, I would like to do that but the GUI is tightly coupled with the algorithm". Well, design 101: Do not mix the GUI with the algorithms, &lt;span style="font-weight: bold;"&gt;never&lt;/span&gt;. To make sure of this, start your prototype as a small library implementing core operations. Your GUI should be a separate code calling this library. This will force you to keep things separated. Then your command line application can simply be a different program calling the library. My advice is to do that from the start. It will cost you a lot to split things later, but much less to maintain a library/GUI split. And if you cannot maintain the split, something is wrong about your design. Btw, by 'library' I do not necessarily mean an actual '.so' or '.dll' -- even though that's probably a good idea. You can force yourself to have this split simply by including a single "core_library.h" header in your main.cpp, and nothing else. This header would only contain the interface to the core algorithm (a few functions, a class, etc.).&lt;br /&gt;&lt;br /&gt;Now you probably want to output images, performance numbers, framerates -- and come on, don't use &lt;a href="http://www.fraps.com/"&gt;fraps &lt;/a&gt;for this , please implement a FPS counter in your application (everything has to run from the command line with no intervention). Yes, this means waiting for FPS to stabilize before outputting it, but this is easy to do: Have your program wait for a few seconds before taking the data point. [Edit: ] As commented below, it is of course a good idea to double check with &lt;a href="http://www.fraps.com/"&gt;fraps &lt;/a&gt;(or other) that your FPS counter is not biased in any way.&lt;br /&gt;&lt;br /&gt;You also probably want to run many experiments, for varying settings. There are several options: Writing a program which directly runs all experiments and output the figure is &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; a good one. Any change to the figure layout will imply to rerun all experiments. If it takes 2 days, sorry. Similarly, if it crashes after 1.7 days (haha!), you'll lost all previous measurements.&lt;br /&gt;I always find it much better to write a simple program running a single experiment, and then call it from an easy scripting language (pick your favorite, I use python these days).&lt;br /&gt;And, please, we all know things will crash. So make sure your script will not hang when this happens. If you are under windows and have the 'Debug / Close program' dialog box, &lt;a href="http://blogs.msdn.com/b/oldnewthing/archive/2004/07/27/198410.aspx"&gt;it can be disabled&lt;/a&gt;. So, really, no excuse. After producing data for all experiments, a second script parses it and produces figures.&lt;br /&gt;&lt;br /&gt;Now, how to output the actual data? First, whatever you do, output files in a separate 'results' directory. Nobody wants to mix a thousand temporary files with their source code. Also, it will help packaging and saving old results. One way to output values and file names (files being dumped into the results directory) is to write it all in a text file. This seems like simple, but this also means later parsing the file to extract numbers and produce a figure. And, parsing is much harder than dumping data. Plus, we have amazing tools to address this nowadays. One such tool is XML, another -- my favorite for this -- is &lt;a href="http://www.sqlite.org/"&gt;sqlite&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Typically, my programs dump experiment results in a same database, starting each line with the date--time of the experiment, the program being called, the input data set, the parameters that were used, and then the measurements. From python you can easily open the sqlite database and produce a figure with &lt;a href="http://matplotlib.sourceforge.net/"&gt;matplotlib&lt;/a&gt;. But many other scripting languages can do that. Again all this takes is a small numbers of straightforward code lines. It is generally a good idea to separate the script running the experiments from the script generating the figures from these data points.&lt;br /&gt;&lt;br /&gt;Now, let's look at what we have: From a single command line script we can regenerate all images, figures, data tables (tex files). Something changed in the code? Just rerun. Need to change the layout of figures? Fix it and rerun the figure scripts. Something no longer running as expected? Search in the database for earlier results. Compare to the previous situation: Launching a GUI interface, manipulating widgets, and manually writing down numbers. The savings are in tens of hours, notwithstanding that you avoid all potential errors due to late working nights.&lt;br /&gt;&lt;br /&gt;Sounds great! But wait, sometimes we need to make measurements of things that change over time. For instance, measuring texture streaming performance as we move in a scene, or recording a piece of video of a real time rendered scene. This can be scripted too, and very easily. All the basic operations done in your application should correspond to simple function calls: load an object, set a parameter, load a camera path, play a camera path, etc. From there, you can very easily write your own script language: simple orders written in an easy to parse&lt;br /&gt;text file. In your code, create a thread which parses this file and executes orders one by one. Better: use &lt;a href="http://www.lua.org/"&gt;lua &lt;/a&gt;/ &lt;a href="http://www.rasterbar.com/products/luabind.html"&gt;luabind &lt;/a&gt;(really simple!), and execute the lua script from a new thread.&lt;br /&gt;&lt;br /&gt;The script can look like:&lt;br /&gt;&lt;br /&gt; open('bunny.obj')&lt;br /&gt; setview('fig1.camera')&lt;br /&gt; setparam('shadow',1)&lt;br /&gt; setlight(10.0,2.0,5.0)&lt;br /&gt; screenshot('fig1.png')&lt;br /&gt; loadpath('pathseq1.path')&lt;br /&gt; setscreenshotperiod(1.0,'seq1%d.tga')&lt;br /&gt; playpath()&lt;br /&gt; exit()&lt;br /&gt;&lt;br /&gt;This will take a screenshot and then play a path going around your model, saving a screenshot every second. Such scripts can also remove the need for other command line parameters: Simply load a script and it will do what is necessary. Because the script is in a separate thread it can wait, loop, walk along a path, without slowing down the main thread.&lt;br /&gt;&lt;br /&gt;This may seem a lot, but is very easy to implement with boost::thread and lua. Only potential trouble is thread safety, and (if applicable) threading mixed with OpenGL. I found that the easiest way to go is to have a command queue shared between the main thread and the scripting thread. The scripting thread simply pushes commands, while the main thread, at every frame, executes all commands on the queue (loading textures, changing viewpoint, etc.). Only the queue needs to be locked.&lt;br /&gt;&lt;br /&gt;Doubtful? Check out the&lt;a href="http://www-sop.inria.fr/reves/Basilic/2008/DLTD08/LazySyn_EGSR_Video_DivX.avi"&gt; video of our 2008 paper&lt;/a&gt; 'Lazy solid texture synthesis'. Most of the video runs as a real time scripted application, including the 'cutting' scenes. There I even used &lt;a href="http://msdn.microsoft.com/en-us/library/ms723627%28v=vs.85%29.aspx"&gt;MS SAPI&lt;/a&gt; to have the script talk and get the timing of the sequences right. Did it take a lot of time? Quite the contrary: This is the least painful video I ever produced for a paper.&lt;br /&gt;&lt;br /&gt;A final word of advice: Do not wait, apply scripting right from the start. The first measurement your program outputs should be in a sqlite database. If you do not do it from the start, it will be harder to switch ('just a last experiment, I'll do it afterwards'), and the overall benefit will be reduced. Even if each experiment is fast (30 seconds), running a lot of them takes time. Even if all experiments run in seconds, scripting will avoid many mistakes. You are always better of with a script. A warning though: keep things simple, do not overdo this idea. The scripting 'engine' should serve only your purpose for the project, no more.&lt;br /&gt;&lt;br /&gt;That's it. Hope you found a few useful things in there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-6158277218536974165?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/6158277218536974165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=6158277218536974165' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6158277218536974165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6158277218536974165'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2011/09/research-producing-results.html' title='[research] Producing results'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-3988280891091281912</id><published>2011-06-22T05:25:00.000-07:00</published><updated>2011-06-22T05:27:01.059-07:00</updated><title type='text'>[latex] Math in algorithms</title><content type='html'>I am using the algorithmic package to add code in my latex documents. I came across the following issue: How to include math in the code? Simple solution:&lt;br /&gt;&lt;br /&gt;\begin{lstlisting}[mathescape]&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://stackoverflow.com/questions/2809836/latex-math-symbols-in-listings"&gt;http://stackoverflow.com/questions/2809836/latex-math-symbols-in-listings&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-3988280891091281912?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/3988280891091281912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=3988280891091281912' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/3988280891091281912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/3988280891091281912'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2011/06/latex-math-in-algorithms.html' title='[latex] Math in algorithms'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-9105810793036964139</id><published>2011-04-12T03:10:00.001-07:00</published><updated>2011-04-12T04:40:44.061-07:00</updated><title type='text'>[devel] Bumping into walls</title><content type='html'>If you are developing games, you have probably already been faced with this issue: How to make characters nicely slide against the walls?&lt;br /&gt;&lt;br /&gt;For a long time I did the usual trick: Detect a collision, compute (somehow) an extraction vector, remove from the motion vector the part parallel to the extraction vector (dot product ...). However, this never seemed to work quite well and I always ended up with troublesome cases. (Well, arguably this was due to poor coding ;) )&lt;br /&gt;&lt;br /&gt;In one of my latest projects (a never-to-be-released zombie game I will maybe blog about someday), not only had I to face this problem, but on top of it I had tens of zombies bumping into each other, through network latency to add to the mix. What a nightmare.&lt;br /&gt;&lt;br /&gt;After much wasted time, I figured out a simple and (I believe) elegant solution. The link may not be obvious, but it was in fact inspired by the Lloyd algorithm.&lt;br /&gt;&lt;br /&gt;Assuming a 2D scene layout, seen from above, let's consider a disk centered around a character. A trivial but important consideration is that the center of mass of the disk is right below the character.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-rXSz1Llzj4E/TaQ4r1AIxrI/AAAAAAAAAF0/4pEX3cjkXbQ/s1600/Diapositive1.PNG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 205px; height: 165px;" src="http://2.bp.blogspot.com/-rXSz1Llzj4E/TaQ4r1AIxrI/AAAAAAAAAF0/4pEX3cjkXbQ/s320/Diapositive1.PNG" alt="" id="BLOGGER_PHOTO_ID_5594658962714183346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, let's consider a wall nearby the character:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-Lws7Sh0fkt8/TaQ4r4eR27I/AAAAAAAAAF8/MrKxw_PZH4I/s1600/Diapositive2.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 195px;" src="http://3.bp.blogspot.com/-Lws7Sh0fkt8/TaQ4r4eR27I/AAAAAAAAAF8/MrKxw_PZH4I/s320/Diapositive2.PNG" alt="" id="BLOGGER_PHOTO_ID_5594658963645914034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The disk is cropped by the wall. The center of mass of the remaining part is now displaced. The trick is simply to correct the position of the character so that it always goes to the center of mass of the cropped disk. In summary at every frame: Compute motion vector, displace, compute center of mass, correct position.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-T8MZOHyj1Xk/TaQ4sVb6FRI/AAAAAAAAAGE/AsiRZkXF5ro/s1600/Diapositive3.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 227px;" src="http://2.bp.blogspot.com/-T8MZOHyj1Xk/TaQ4sVb6FRI/AAAAAAAAAGE/AsiRZkXF5ro/s320/Diapositive3.PNG" alt="" id="BLOGGER_PHOTO_ID_5594658971420595474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Of course the figure is exaggerated. In practice a disk with smaller radius is used.&lt;br /&gt;&lt;br /&gt;For collisions between characters, I subtract from the disk the half plane which is mid-way between the characters:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-QgbZ4RvMnyE/TaQ4sd6zpTI/AAAAAAAAAGM/BhSjCB5i2-A/s1600/Diapositive4.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 245px;" src="http://3.bp.blogspot.com/-QgbZ4RvMnyE/TaQ4sd6zpTI/AAAAAAAAAGM/BhSjCB5i2-A/s320/Diapositive4.PNG" alt="" id="BLOGGER_PHOTO_ID_5594658973697680690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, you might be wondering how in hell you will be able to compute the center of mass. There are two different approaches. Both rely on a square instead of a disk.&lt;br /&gt;&lt;br /&gt;In the first approach I used convex shapes as colliders ('brushes') and sliced the collision square by the shape of the colliders, keeping only the parts outside. (For code doing this, look back at Quake's code for slicing polygons by convex brushes). A simple center of mass computation then gives you the corrected position.&lt;br /&gt;&lt;br /&gt;The second approach relies on rasterization. Setup a viewport matching the square around the character, render a quad outputting pixel positions in the map, render the colliders in black. Then read back and average the values of non black pixels to obtain the center of mass. This is the new position.&lt;br /&gt;&lt;br /&gt;This works nicely, gives a feeling of 'soft' collisions (depending on how large the collision shape is) and supports easily even the trickiest cases (many characters in a tight space of complex shape).&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-9105810793036964139?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/9105810793036964139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=9105810793036964139' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/9105810793036964139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/9105810793036964139'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2011/04/devel-bumping-into-walls.html' title='[devel] Bumping into walls'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-rXSz1Llzj4E/TaQ4r1AIxrI/AAAAAAAAAF0/4pEX3cjkXbQ/s72-c/Diapositive1.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5380736356801887198</id><published>2011-03-02T00:00:00.001-08:00</published><updated>2011-03-02T00:12:03.621-08:00</updated><title type='text'>[various] VOD is such a failure here</title><content type='html'>This is driving me crazy. For years since I enjoyed NetFlix in the US I have been looking forward for a mail-based or download based video rental service in France.&lt;br /&gt;&lt;br /&gt;Mail-based DVD rental never really worked here for several practical reasons, but also because well, this is the Internet era and download seems just easier. Unfortunately, VOD services in France are crippled either by a very limited and rather boring choice of movies, or by extremely fragile implementations (not even mentioning prices). Four  (!) of my latest attempts at renting movies with different services failed -- either the movie downloaded but could not be watched, or the payment could not be made, or the service was temporarily unavailable. I have to admit, it worked once, giving a fantastic success rate of 20%.&lt;br /&gt;&lt;br /&gt;Needless to say that US services cannot be used from France -- the 'global economy' does not seem to cross borders for customers. This left me wondering: If a customer willing to pay for watching movies and shows can't do it , isn't that actively encouraging piracy?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5380736356801887198?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5380736356801887198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5380736356801887198' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5380736356801887198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5380736356801887198'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2011/03/various-vod-is-such-failure-here.html' title='[various] VOD is such a failure here'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2287428265343824540</id><published>2011-01-09T10:03:00.000-08:00</published><updated>2011-01-09T10:05:25.253-08:00</updated><title type='text'>[wubi] Accessing files from Windows</title><content type='html'>&lt;a href="http://ext2read.blogspot.com/"&gt;http://ext2read.blogspot.com/&lt;/a&gt; is a good answer. No driver to install, just an explorer-like interface. Open root.disk and import your files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2287428265343824540?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2287428265343824540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2287428265343824540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2287428265343824540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2287428265343824540'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2011/01/wubi-accessing-files-from-windows.html' title='[wubi] Accessing files from Windows'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-8574297900997659039</id><published>2010-08-30T14:47:00.000-07:00</published><updated>2010-08-30T15:15:18.588-07:00</updated><title type='text'>[luabind] Global table of classes from C++</title><content type='html'>These days I am playing with Lua and LuaBind (yet another game project, more on that hopefuly soon).  LuaBind is really quite amazing and is a perfect complement to Lua for C++ programmers.&lt;br /&gt;&lt;br /&gt;There is one thing, however, that gave me a lot of trouble. I wanted to define from C++ a global table of class instances in the Lua script. With LuaBind you can easily define globals using luabind::globals. For instance, here is how to define, from C++, a global named 'test' and having 1234 for value:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;luabind::globals(luaState)[ "test" ]  = 1234;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;In LuaBind (v0.9), a table is created using luabind::newtable, which returns a generic object. For instance:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  luabind::object table = luabind::newtable( luaState );&lt;br /&gt;  table[ "Instance1" ] = new MyClass( "A" );&lt;br /&gt;  table[ "Instance2" ] = new MyClass( "B" );&lt;br /&gt;  table[ "Instance3" ] = new MyClass( "C" );&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;where 'MyClass' is a C++ class previously registered into LuaBind.&lt;br /&gt;&lt;br /&gt;Defining the table as a global is as easy as:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  luabind::globals(luaState)[ "AllInstances" ] = table;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This was working fine, but the code would keep randomly crashing &lt;span style="font-weight:bold;"&gt;after&lt;/span&gt; the lua script execution. This was really a strange behavior. Fortunately, &lt;a href="http://old.nabble.com/Accessing-functions-stored-in-a-table-using-luabind-td12917599.html#a12925099"&gt;this post&lt;/a&gt; saved my day.&lt;br /&gt;&lt;br /&gt;The problem is not with the code above, but with the context around it. Here is the entire function running my script:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;void threadLua()&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;lua_State* luaState = lua_open();&lt;br /&gt;luabind::open(luaState);&lt;br /&gt;...&lt;br /&gt;luabind::object table = luabind::newtable(luaState);&lt;br /&gt;table[ "Instance1" ] = new MyClass( 1 );&lt;br /&gt;table[ "Instance2" ] = new MyClass( 2 );&lt;br /&gt;table[ "Instance3" ] = new MyClass( 2 );&lt;br /&gt;luabind::globals(luaState)["TableOfInstances"] = table;&lt;br /&gt;...&lt;br /&gt;int ret = luaL_dostring(luaState, program);&lt;br /&gt;...&lt;br /&gt;lua_close(luaState);&lt;br /&gt;} /// things would crash here&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;So what's wrong? Well, lua_close destroys the lua context. Unfortunately, my seemingly innocent object 'table' is still alive when this happens. And as it turns out, the destructor of a luabind::object does expect the lua context to still be valid. Hence the crash. The fix is desperately simple - it is enough to limit the scope of the variable:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;void threadLua()&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;lua_State* luaState = lua_open();&lt;br /&gt;luabind::open(luaState);&lt;br /&gt;...&lt;br /&gt;{ &lt;br /&gt;  luabind::object table = luabind::newtable(luaState);&lt;br /&gt;  table[ "Instance1" ] = new MyClass( 1 );&lt;br /&gt;  table[ "Instance2" ] = new MyClass( 2 );&lt;br /&gt;  table[ "Instance3" ] = new MyClass( 2 );&lt;br /&gt;  luabind::globals(luaState)["TableOfInstances"] = table;&lt;br /&gt;} /// keep this: 'table' must not live after this point&lt;br /&gt;...&lt;br /&gt;int ret = luaL_dostring(luaState, program);&lt;br /&gt;...&lt;br /&gt;lua_close(luaState);&lt;br /&gt;} /// no crash!&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This one was painful to find out so I thought it was worth a post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-8574297900997659039?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/8574297900997659039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=8574297900997659039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8574297900997659039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8574297900997659039'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2010/08/luabind-global-tables-of-classes.html' title='[luabind] Global table of classes from C++'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-3374684396818205149</id><published>2010-07-23T11:29:00.000-07:00</published><updated>2010-07-23T11:40:57.689-07:00</updated><title type='text'>[research] By-example synthesis of architectural textures</title><content type='html'>I am leaving for SIGGRAPH tomorrow, where we will present our paper 'By-example synthesis of architectural textures'. This is joint work with Samuel Hornus and Anass Lasram.&lt;br /&gt;&lt;br /&gt;I just put the video online: Watch it &lt;a href="http://www.aracknea-core.net/sylefeb/downloads/final-texresize.wmv"&gt;here&lt;/a&gt;! (wmv format for now)&lt;br /&gt;&lt;br /&gt;The paper is available on &lt;a href="http://alice.loria.fr/index.php/publications.html?redirect=0&amp;amp;Paper=TEXRESIZE@2010"&gt;this web page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;See you at SIGGRAPH :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-3374684396818205149?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/3374684396818205149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=3374684396818205149' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/3374684396818205149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/3374684396818205149'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2010/07/research-by-example-synthesis-of.html' title='[research] By-example synthesis of architectural textures'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5018927209704280625</id><published>2010-04-20T04:09:00.001-07:00</published><updated>2010-05-25T13:39:04.221-07:00</updated><title type='text'>[wubi] X11 trouble during install</title><content type='html'>At work I have a computer with a Quadro FX. For some reason, the Wubi 9.10 install has trouble with it. The first reboot under Ubuntu is supposed to launch the install process. However, I was left with a blinking screen and a text console. After a bit of struggle, I was able to install the NVidia drivers:&lt;br /&gt;&lt;br /&gt;0. sudo stop gdm&lt;br /&gt;   (in between two blinks!) This stops gdm and stops the painful blinking.&lt;br /&gt;1. sudo apt-get install lynx&lt;br /&gt;  (a text based browser)&lt;br /&gt;2. Launch lynx, navigate through NVidia website&lt;br /&gt;3. Download the dirvers (AMD64 bits for 64 bits computers)&lt;br /&gt;4. Install the drivers&lt;br /&gt;5. Start gdm&lt;br /&gt;&lt;br /&gt;After this the X server should start fine. However there is a catch: Ubuntu is not installed yet, in fact you are running in a virtual RAM disk. If you reboot at this stage, all changes are lost!&lt;br /&gt;The trick is simply to launch 'ubiquity', and select the 'loop' partition as install partition. Then the install completes and you are ready to enjoy Ubuntu!&lt;br /&gt;&lt;br /&gt;Hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5018927209704280625?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5018927209704280625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5018927209704280625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5018927209704280625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5018927209704280625'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2010/04/wubi-x11-trouble-during-install.html' title='[wubi] X11 trouble during install'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-9098825488926274424</id><published>2010-02-01T07:13:00.000-08:00</published><updated>2010-02-01T07:23:03.032-08:00</updated><title type='text'>[code] Visual Express 2010</title><content type='html'>I am trying out Visual Studio 2010. Again, thanks to CMake the transition is mostly painless.&lt;br /&gt;&lt;br /&gt;I had one issue though, related to global include paths.&lt;br /&gt;As explained &lt;a href="http://blogs.msdn.com/vsproject/archive/2009/07/07/vc-directories.aspx"&gt;here&lt;/a&gt;, they can no longer be set for Visual Studio as a whole but only on a per-project basis. Let's not argue whether this is good or bad but let's assume you need to set them globally (I my case, I just want the DirectX SDK include / lib paths to be set once and for all).&lt;br /&gt;&lt;br /&gt;In fact, there is a very simple workaround. All projects seem to include the following property sheet:  &lt;span style="font-style: italic;"&gt;Microsoft.Cpp.Win32.User&lt;/span&gt;&lt;br /&gt;Any change to these properties will happen in all your projects. Just edit it and modify the include / lib of the "VC++ directories" entry.&lt;br /&gt;&lt;br /&gt;Note that there seem to be issues under XP (I am under Windows 7) =&gt; so &lt;a href="http://blogs.msdn.com/vsproject/archive/2009/07/07/vc-directories.aspx"&gt;read the full story&lt;/a&gt; if you need to set global paths using XP and 2010.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-9098825488926274424?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/9098825488926274424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=9098825488926274424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/9098825488926274424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/9098825488926274424'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2010/02/code-visual-express-2010.html' title='[code] Visual Express 2010'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7174592953405992891</id><published>2010-01-02T14:00:00.000-08:00</published><updated>2010-01-25T07:50:42.366-08:00</updated><title type='text'>[movies] Avatar and 3d glasses</title><content type='html'>&lt;div style="text-align: justify;"&gt;Avatar was a good opportunity to compare different 3d technologies in movie theaters. I have seen it twice, once with shutter glasses, and a second time with the Dolby technology, that is the &lt;a href="http://www.stereoscopy.com/faq/interference-filters.html"&gt;Infitec color filters&lt;/a&gt;. I did not see the movie through polarized glasses, but I used some in the past.&lt;br /&gt;&lt;br /&gt;The first time I saw the movie was through shutter glasses. I was a bit disappointed at first since I was eager to try the Infitec approach. In addition, it felt a bit old-school since in 1999 I had shutter glasses at home! (the cheap but effective Elsa Revelator, much less expensive than the ones currently on shelves). Nevertheless the experience was extremely good, with very impressive depth and comfortable images. Key drawbacks where not-so-clean glasses (but I had brought glass-cleaners) and significant loss of brightness.&lt;br /&gt;&lt;br /&gt;The second time I saw the movie, in a different theater, was through the Infitec (Dolby) color interference filters. The main advantages are the lightweight cheap glasses (still sold for 1 euro in this theater...), the fact that you can tilt your head (compared to polarized glasses) and the much less significant loss of brightness (compared to shutter glasses).&lt;br /&gt;However, when the first images came I immediately felt very uncomfortable with the 3d perception. Something was slightly wrong, especially in the interior scenes. After several experiments (good thing I had seen the movie before!) I noticed that many specular reflections - especially colored ones - where strongly reduced on one eye while still present on the other. This creates an odd feeling, quite tiring for the eyes. I am told by a friend that you can experience a similar effect if you look outside putting a polarized glass in front of only one eye, since the polarized glass &lt;a href="http://en.wikipedia.org/wiki/Polarizing_filter"&gt;filters out reflections &lt;/a&gt;. (Nothing to do with watching a 3d movie with polarized glasses - just another use for polarized glass).&lt;br /&gt;&lt;br /&gt;In the end, while the Infitec glasses do work well - much better than early 3D glasses -  personally I would recommend seeing the movie through shutter glasses. It was much more comfortable for a movie of this length.&lt;br /&gt;&lt;br /&gt;And, by the way, the movie is great, but there is no James Cameron's movie I did not enjoy ;-)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7174592953405992891?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7174592953405992891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7174592953405992891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7174592953405992891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7174592953405992891'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2010/01/movies-avatar-and-3d-glasses.html' title='[movies] Avatar and 3d glasses'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5110176327287343320</id><published>2010-01-02T09:02:00.000-08:00</published><updated>2010-01-02T13:59:27.012-08:00</updated><title type='text'>[code] Code editor under Linux</title><content type='html'>&lt;div style="text-align: justify;"&gt;For almost 3 years now I developed mainly under Windows. Not that I have anything against Linux, but I just did not feel the need to use it anymore. I recently transitioned to Linux again, mainly to benefit from latest advances of g++. I have to admit it was really enjoyable to get back to it, especially using Wubi / Ubuntu.&lt;br /&gt;&lt;br /&gt;CMake was instrumental in ensuring a smooth transition of my code to Linux. Thanks to &lt;a href="http://anteru.net/"&gt;Anteru&lt;/a&gt; who helped a great deal, I was able to compile all my code on both Windows / Linux (almost) without trouble.&lt;br /&gt;The only thing I was missing was a good code editor. I mean, gedit works great, but it's missing many of the features I came to enjoy in Visual C++ (and well, all these little seconds you gain add up to a great deal in the end).&lt;br /&gt;&lt;br /&gt;At first I tried 'apt-get install eclipse-cdt'. CMake is able to directly generate project files for eclipse. Unfortunately, this did not work too well for me. Maybe because of our current project architecture (quite big, many dependencies), eclipse had difficulties and regularly crashed.&lt;br /&gt;&lt;br /&gt;A bit disapointed, I then tried &lt;a href="http://www.codeblocks.org/"&gt;Code::blocks&lt;/a&gt; ('apt-get install codeblocks'). And, well, this is a very promising tool for me. It just works, it is fast, CMake has a back end for it as well. In just 10 minutes, I was feeling like home. So, I highly recommand it to those who are used to Visual C++ like IDEs.&lt;br /&gt;&lt;br /&gt;Small tip: If like me you use dark backgrounds, you will find the color setting for the caret in "Settings &gt; Editor &gt; Margin and caret".&lt;br /&gt;&lt;br /&gt;And btw, Happy new year ;-)&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5110176327287343320?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5110176327287343320/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5110176327287343320' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5110176327287343320'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5110176327287343320'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2010/01/code-coding-under-linux.html' title='[code] Code editor under Linux'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4872576184125910782</id><published>2009-10-20T16:09:00.000-07:00</published><updated>2009-10-21T01:29:12.881-07:00</updated><title type='text'>[research] Rigour</title><content type='html'>&lt;div style="text-align: justify;"&gt;This evening we were discussing with colleagues about rigour, and how to avoid mistakes to bleed into your code / paper / results. Of course, this is of the highest importance when, as a researcher, you intend to propose new methods and show that they do produce better results than previous ones (or at least that they do what they are supposed to!). Rigour is a minimal requirement.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Unfortunately, being rigorous is not something easy. For me, a key difficulty is detecting typos in text and formulas. Sometimes, it seems that regardless of how much time I read and triple (quadruple) check formulas, there is always some mistake managing to get in. For instance, we are about to publish an errata on one of our paper. Nothing horrible, but still a few formulas got wrong due to a last minute change (!) in notation. None of us, none of our careful proof-readers (who spotted many other typos), nobody saw the problem until a very careful reader pointed it out. I think at some point the brain just replaces what you read by what you k&lt;span style="font-style: italic;"&gt;now should be written&lt;/span&gt;. This is really annoying as we spent a large amount of time checking every single detail. I wonder whether some of you might have good tips on how to avoid this kind of mistakes? (I know that putting the paper aside for a few days and then re-reading it helps - unfortunately this is often not an option due to tight time constraints).&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;I have, however, some tips and tricks for writing code and checking results that I'd like to share. Most of these have been learned the hard way: In graphics, many errors can go silent and in spite of a bug your algorithms still produce results (possibly even 'good' ones, that's the problem!). There is one project in particular that really made me switch to a 'triple check everything' mode. I was student at the time. After getting all excited about early results - showing them to my entire lab of course ;-) - I had discovered a bug that totally invalidated everything. It was a huge setback, and I also think it revealed a weakness in my way of doing things. This should not happen, because you must be sure of your results. You must be sure that you are sure. You must be able to claim without fear that you know what is going on, and that you understand every little thing happening under the hood. You may not disclose any result before you get to this point. Is that possible? I think yes - there is no magic involved after all - and we should at least do everything we can to get to this level of certainty.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Here are a few tricks I learned during my studies, from my supervisors, and from experience:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;- &lt;span style="font-weight: bold;"&gt;Assert everything&lt;/span&gt;. You are writing the code and you are thinking &lt;span style="font-style: italic;"&gt;'haha, this variable will never go below zero so I can take advantage of this'&lt;/span&gt;. Well, if you expect it, then assert it right away! Same goes for file IO (how many mistakes due to bad data?), out of bound accesses, null pointers, user inputs, and so on. It is not reasonable to write research code without asserting every little piece of it. Research code is way more fragile than production code - it is constantly going through revisions and changes. So why should it contain less checks? I basically assert every little piece of knowledge I have about variable values, array statuses (is it still sorted?), pixel colors, etc. Apply this strictly and never diverge from it, it will save you tons of time by detecting errors early. Of course, make sure you can compile with a NO_ASSERT flag for max performance when doing final measures.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;- &lt;span style="font-weight: bold;"&gt;You shall not remove a failing assert&lt;/span&gt;. &lt;span style="font-style: italic;"&gt;'Darn, it's 11pm, this assert fails and if I comment it everything works. Must be useless.'&lt;/span&gt; This is the perfect recipe for the most horrible errors. Never step over a failing assert. If it fails you must understand why and you must fix the cause, not the consequence. An assert is a sacred safe guard. Removing an assert should only occur if you have a clear understanding of why this assert somehow became outdated.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;- &lt;span style="font-weight: bold;"&gt;Verify your code with sanity checks&lt;/span&gt;. Try the following: If you give your image processing method an entirely black image, what would happen? Once you think you know what will happen, test it. If something unexpected happens then understand why and correct any potential problem. Try that with the most simple and straight forward inputs. Make sure they all do produce the proper results.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;- &lt;span style="font-weight: bold;"&gt;Stress your code with wrong data&lt;/span&gt;. &lt;span style="font-style: italic;"&gt;'Why would I throw this crazy data at my method? &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I don't want to see it fail!'&lt;/span&gt;. This is all the contrary. You want to see your program crash, fail and die in all possible ways. When it no longer crashes despite what you are throwing at him, you may try with reasonable data. Before that, you must ensure improper input is detected and that asserts fail as appropriate. Do not discard any problem (... 'anyway, that's crazy' ...) or it will come back and bite you. You can be sure of it. Never leave out a loose end.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;- &lt;span style="font-weight: bold;"&gt;Quit 'Darwin programming'&lt;/span&gt;. &lt;span style="font-style: italic;"&gt;'Hmmm, should this be plus or minus 1? Let's try until it works...'&lt;/span&gt;. I used to do that a lot, it never was a good idea. If you wonder about a detail, then put the keyboard aside and go to the black (/white) board and figure it out. Random programming does not work. At best it will seem to work and will let you down on the first occasion. And how are you going to justify this '0.1234567' scaling in the paper? Because I assume you'll mention it, right? Stop trying random stuff. It is just not compatible with the rigour required by research.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;- &lt;span style="font-weight: bold;"&gt;Verify your results with another approach&lt;/span&gt;. This is not always an option, but whenever possible implement a different way of getting the same results (even if very slow), just to double check your approach with another piece of code. I often do that between CPU and GPU implementations. This lets you track down small implementation errors by comparing outputs. In our last project we even did two implementations (CPU/GPU) by two different coders. This was really great in terms of tracking down problems.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;- &lt;span style="font-weight: bold;"&gt;Match notations and names between code and paper&lt;/span&gt;. To reduce the risk of wrong formulas in the paper I try to match notations in the code and the paper - even if this means modifying the code while the paper is being written. This is yet another sanity check on both the paper and the code. Last time I diverged from that an error was introduced, so I am going to strictly enforce this rule now.&lt;br /&gt;&lt;br /&gt;Sure, even with all that mistakes still happen. But I believe mistakes are fine -- not trying to avoid them is however unacceptable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4872576184125910782?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4872576184125910782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4872576184125910782' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4872576184125910782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4872576184125910782'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/10/research-errata.html' title='[research] Rigour'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7085104722191168622</id><published>2009-10-12T15:33:00.000-07:00</published><updated>2009-10-12T15:42:28.240-07:00</updated><title type='text'>[wubi] Transfering your wubi on another computer</title><content type='html'>The other day my desktop hard drive failed, putting an end to my Vista partition and everything in it. With the &lt;a href="http://graphics.cs.williams.edu/i3d10/"&gt;I3D 2010&lt;/a&gt; deadline arriving fast, I needed a way to get up to speed quickly (data was backed up but not the system). I did not want to reinstall all applications under Windows.&lt;br /&gt;&lt;br /&gt;Since our project compiles under both Windows and Linux, and since I have it running under Ubuntu / Wubi on my laptop I tried the following: I did a fresh Windows + Wubi install and replaced the new 'root.disk' by the one from my laptop.&lt;br /&gt;&lt;br /&gt;And it worked!&lt;br /&gt;&lt;br /&gt;After booting it was like being on my laptop but ... on my desktop. Everything worked but for the NVidia drivers - even though my laptop has NVidia hardware like my desktop. I had to reinstall the driver, which for some reason could not find the kernel sources (really strange since this was the same file system after all). I simply had to specify the path explicitly (--kernel-source-path). This saved my day!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7085104722191168622?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7085104722191168622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7085104722191168622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7085104722191168622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7085104722191168622'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/10/wubi-transfering-your-wubi-on-another.html' title='[wubi] Transfering your wubi on another computer'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-8545232703135999519</id><published>2009-08-28T11:51:00.001-07:00</published><updated>2009-08-29T01:48:19.531-07:00</updated><title type='text'>[game] Fun with the WiiMote</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fUxLAW_KeEM/Spgo6wyEMDI/AAAAAAAAADE/_py4gT61taQ/s1600-h/teaser.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 239px;" src="http://2.bp.blogspot.com/_fUxLAW_KeEM/Spgo6wyEMDI/AAAAAAAAADE/_py4gT61taQ/s320/teaser.png" alt="" id="BLOGGER_PHOTO_ID_5375091145259102258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have been enjoying some time off and, as always, I tried to explore a few new things. I have seen many cool applications exploiting Wiimotes, and I decided it was about time for me to give it a try.&lt;br /&gt;&lt;br /&gt;To start with something, I decided to hack in &lt;a href="http://games.aracknea-core.net/ragsmash/"&gt;Ragdoll Smasher&lt;/a&gt; and to use the accelerometer to drive the ragdoll.&lt;br /&gt;&lt;br /&gt;I plugged in the bluetooth USB dongle that some vendor convinced me to buy with my first mobile phone - I'd have never guessed that I would actually use it one day! - and I downloaded what seemed to be the main library for talking to a WiiMote from C++: &lt;a href="http://wiiyourself.gl.tter.org/"&gt;WiiYourself!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WiiYourself! comes as a single cpp file, and a commented demo code - that's just perfect to start. Everything works very well, and apart from the painful part of downloading and installing the Windows Driver Kit it was really easy to get the wiimote working, and to call WiiYourself from my own code.&lt;br /&gt;&lt;br /&gt;I put all the WiiYourself intialization in a separate thread, so that it can handle gracefully waiting for new Wiimotes or Wiimote disconnections.&lt;br /&gt;&lt;br /&gt;Now, here is when the interesting part kicks in. What I wanted to achieve is to let the user give some impulses to the Wiimote to throw the ragdoll in one direction or another.&lt;br /&gt;&lt;br /&gt;However, this is an accelerometer, and you do not get a nice, clean vector telling you in which direction the user moved the Wiimote. On the images below, I have overlaid the output of the Wiimote accelerometer x,y and z axis. The user has applied a left ( +x ) impulse. The x axis is shown in red.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fUxLAW_KeEM/SpgqcQxEwiI/AAAAAAAAADM/j5CLEmXjzho/s1600-h/left.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_fUxLAW_KeEM/SpgqcQxEwiI/AAAAAAAAADM/j5CLEmXjzho/s400/left.png" alt="" id="BLOGGER_PHOTO_ID_5375092820292190754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now the same for a right ( -x ) impulse:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fUxLAW_KeEM/Spgq2IOcP_I/AAAAAAAAADU/0HuyZPHW66A/s1600-h/right.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 299px;" src="http://3.bp.blogspot.com/_fUxLAW_KeEM/Spgq2IOcP_I/AAAAAAAAADU/0HuyZPHW66A/s400/right.png" alt="" id="BLOGGER_PHOTO_ID_5375093264676044786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;You can probably see the pattern appearing: For a left impulse, the curve goes up first, then down and then comes back to low values. For a right impulse the curve goes down first, and then up. I used this property to implement a simple 'impulse' detector on each axis. The idea is illustrated by the image below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fUxLAW_KeEM/SpgrS_hfxtI/AAAAAAAAADc/Qt_r8z9F2R4/s1600-h/approach.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 197px; height: 320px;" src="http://1.bp.blogspot.com/_fUxLAW_KeEM/SpgrS_hfxtI/AAAAAAAAADc/Qt_r8z9F2R4/s320/approach.png" alt="" id="BLOGGER_PHOTO_ID_5375093760556254930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The blue line is the 'zero' (Note: the z axis is not centered on zero due to gravity! On my Wiimote it is centered on 1). I am using a threshold to detect when the curve goes up and down. By simply tracking whether the curve does a up/down or down/up impulse - in a limited time window - I can easily detect impulses applied by the user to the controller. The 'height' of the bumps gives me an indication of the strength.&lt;br /&gt;&lt;br /&gt;This very simple approach works quite well in practice, and I can throw the ragdoll in all directions with small impulses applied to the Wiimote.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-8545232703135999519?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/8545232703135999519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=8545232703135999519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8545232703135999519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8545232703135999519'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/08/game-fun-with-wiimote.html' title='[game] Fun with the WiiMote'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fUxLAW_KeEM/Spgo6wyEMDI/AAAAAAAAADE/_py4gT61taQ/s72-c/teaser.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2770965499059492954</id><published>2009-07-06T13:13:00.000-07:00</published><updated>2009-07-06T13:22:08.033-07:00</updated><title type='text'>[linux] Wubi and the 'no disk' issue</title><content type='html'>This evening I wanted to try &lt;a href="http://wubi-installer.org/"&gt;Wubi &lt;/a&gt;at home. I already gave it a try earlier on my office computer, and it had failed with a strange error: "No disk" message box displaying "Exception Processing Message c0000013 Parameters 75b6bf7c 4 75b6bf7c 75b6bf7c"&lt;br /&gt;&lt;br /&gt;Same thing happened at home. I was quite disapointed and searched for this error on Google. The problem is &lt;a href="http://www.mail-archive.com/ubuntu-bugs@lists.ubuntu.com/msg1550032.html"&gt;explained here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It turns out my Dell screen has a card reader. This card reader creates drive letters with nothing attached to them (until a card is inserted that is). This disturbs the Wubi installation script.&lt;br /&gt;&lt;br /&gt;There are several ways around (such as clicking like crazy on 'continue') but instead I looked for a way to remove these 'empty' drive letters. And, I found a nice small tool doing exactly that, among other useful USB drive letter management options: &lt;a href="http://www.uwe-sieber.de/usbdlm_e.html"&gt;USBDML&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Give it a try, it works like a charm. Now Wubi can install!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2770965499059492954?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2770965499059492954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2770965499059492954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2770965499059492954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2770965499059492954'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/07/linux-wubi-and-no-disk-issue.html' title='[linux] Wubi and the &apos;no disk&apos; issue'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7837356863474308171</id><published>2009-07-03T00:31:00.000-07:00</published><updated>2009-07-03T00:38:40.851-07:00</updated><title type='text'>[various] market segmentation</title><content type='html'>Coding horror has an &lt;a href="http://www.codinghorror.com/blog/archives/001283.html"&gt;interesting post about market segments&lt;/a&gt;. I think it strongly relates to the &lt;a href="http://sylefeb.blogspot.com/2009/06/various-1-euro-2-dollars.html"&gt;euro / dollar&lt;/a&gt; / &lt;a href="http://sylefeb.blogspot.com/2008/11/sorry-your-ip-is-outside-us.html"&gt;ip-based region locks&lt;/a&gt; problems I have been confronted with. I especially like this piece of the post:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;blockquote&gt;Sure, don't make us customers think. Unless you want us to think about how much we'd like to pay you, that is. &lt;/blockquote&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Exactly :-) I see two possible outcomes for the current 'region segments' imposed by retailers:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;They disappear&lt;/li&gt;&lt;li&gt; We won't be allowed to order oversea anymore, and shop websites will be unaccessible from outside the country&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Guess what's most likely?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7837356863474308171?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7837356863474308171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7837356863474308171' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7837356863474308171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7837356863474308171'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/07/various-market-segmentation.html' title='[various] market segmentation'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-8842271255816422736</id><published>2009-06-26T00:21:00.001-07:00</published><updated>2009-06-26T00:24:18.546-07:00</updated><title type='text'>[research] We're hiring PhDs!</title><content type='html'>I am looking for a PhD student, starting around next September (2009) at INRIA Nancy on &lt;a href="http://www-sop.inria.fr/reves/Sylvain.Lefebvre/phd_similar_cities.en.pdf"&gt;this topic &lt;/a&gt;. The profile is a student with a master degree, a strong background in Computer Graphics, familiar with Graphics APIs (OpenGL and/or DirectX) and image processing. Optionally, a background in machine learning would be appreciated. But, most importantly, I am looking for someone with a strong motivation to learn new things and explore novel ideas and algorithms. Is that you? Then contact me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-8842271255816422736?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/8842271255816422736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=8842271255816422736' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8842271255816422736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8842271255816422736'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/06/research-were-hiring-phds.html' title='[research] We&apos;re hiring PhDs!'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2111009141512053371</id><published>2009-06-23T15:21:00.000-07:00</published><updated>2009-06-26T00:20:47.570-07:00</updated><title type='text'>[various] 1 dollar = 2 euros</title><content type='html'>We all know &lt;a href="http://sylefeb.blogspot.com/2008/05/various-dell-loves-euro.html"&gt;pricing policies do not exaclty match the globalization trend&lt;/a&gt;. But sometimes it becomes so ridiculous that it is worth noting.&lt;br /&gt;&lt;br /&gt;I need a new keyboard, and I need it to be a QWERTY keyboard (here shops sell AZERTY keyboards which is not great for coding - I am in fact using a QWERTY layout on an AZERTY keyboard ... confusing!). I was shoping for books on Amazon US, and decided to have a look. I found the 'Logitech Illuminated Keyboard' to my taste. At this date it is 66.48$. Here I am, checking out, when suddenly the killer message pops up 'This item doesn't ship to your country'. Well, no big deal, let's check out Amazon.fr. Bad news: 1) AZERTY only 2) out of stock 3) 87,89 euros! That's only  ... wait ... 122.852$ !!! (today's rate). On Logitech website it is even better: The keyboard (QWERTY version) sells 94.99 euros, or 132.7$.&lt;br /&gt;Yes, that's twice more. Pretty nice huh? (I am assuming Logitech is preventing amazon from shipping - this is more or less what is implied by Amazon as the reason for not shipping. EDIT: Apparently none of the keyboards on Amazon ship to Europe! I'll have to stick with my AZERTY for a little longer)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2111009141512053371?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2111009141512053371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2111009141512053371' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2111009141512053371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2111009141512053371'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/06/various-1-euro-2-dollars.html' title='[various] 1 dollar = 2 euros'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5411915052913907536</id><published>2009-06-23T13:33:00.000-07:00</published><updated>2009-06-23T14:08:06.965-07:00</updated><title type='text'>[code] The library watch</title><content type='html'>&lt;em&gt;"There are no bad tools, there are only bad workers"&lt;/em&gt; Well, there may be some truth to this, but surely good tools cannot hurt! Any skilled programmer has a few libraries up his sleeve, ready to be launched after some nasty problems lurking at him.&lt;br /&gt;&lt;br /&gt;In fact, I find libraries to be an essential tool for a researcher in a hurry to prototype ideas - which often involves solving non-trivial sub-problems. So, what libraries are you using in your every day endeavors?&lt;br /&gt;Here are my favorites (I'll skip the basics such as libpng, zlib, etc.):&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://loki-lib.sourceforge.net/"&gt;Loki &lt;/a&gt;- the libary that made me realize what templates are for. &lt;a href="http://loki-lib.sourceforge.net/index.php?n=Main.ModernCDesign"&gt;Andrei Alexandrescu's book &lt;/a&gt;is a must read! &lt;li&gt;&lt;a href="http://tau.ac.il/~stoledo/taucs/"&gt;TAUCS &lt;/a&gt;- linear solver for sparse matrices &lt;li&gt;&lt;a href="http://www.cs.umd.edu/~mount/ANN/"&gt;ANN &lt;/a&gt;- approximate neighbor search &lt;li&gt;&lt;a href="http://www.antisphere.com/Wiki/tools:anttweakbar"&gt;AntTweakBar &lt;/a&gt;- GL/D3D gui, simple, clean and powerful &lt;li&gt;&lt;a href="http://www.lua.org/"&gt;LUA &lt;/a&gt;- scripting, very easy to integrate &lt;li&gt;&lt;a href="http://www.codenix.com/~tolua/"&gt;tolua++ &lt;/a&gt;- makes lua even easier to integrate with c++ &lt;li&gt;&lt;a href="http://tclap.sourceforge.net/"&gt;TClap&lt;/a&gt; - command line parameters, template based &lt;li&gt;&lt;a href="http://www.ode.org/"&gt;ODE &lt;/a&gt;- physics &lt;li&gt;&lt;a href="http://www.bulletphysics.com/wordpress/"&gt;Bullet &lt;/a&gt;- physics &lt;li&gt;&lt;a href="http://www.fftw.org/"&gt;fftw &lt;/a&gt;- fast Fourier transforms &lt;li&gt;&lt;a href="http://www.libsdl.org/"&gt;SDL / SDL_net &lt;/a&gt;- media library. I essentially use it for multiplatform threads and networking. A bit old-school but still very effective.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Now, some libraries I am planning on using much more regularly:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.boost.org/"&gt;Boost &lt;/a&gt;- how could I live without it! (the answer is Loki+Tclap+SDL+home-grown-stuff ;-) but of course Boost is a must-use) &lt;li&gt;&lt;a href="http://www.sqlite.org/"&gt;SQlite &lt;/a&gt;- SQL database in a local file (no server, no config, all is done from your application). Thanks to &lt;a href="http://www.sqlite.org/"&gt;Anteru&lt;/a&gt; for pointing this one out!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5411915052913907536?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5411915052913907536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5411915052913907536' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5411915052913907536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5411915052913907536'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/06/code-library-watch.html' title='[code] The library watch'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-3303548166511991277</id><published>2009-05-06T03:21:00.000-07:00</published><updated>2009-05-06T03:22:50.833-07:00</updated><title type='text'>[research] Video of our SIGGRAPH paper</title><content type='html'>Our paper on procedural textures was accepted at SIGGRAPH 2009!!!&lt;br /&gt;&lt;br /&gt;We will release the paper soon, but in the meantime you can check out our paper's video on the &lt;a href="http://www.cs.kuleuven.be/~graphics/publications/LLDD09PNSGC/"&gt;project webpage&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-3303548166511991277?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/3303548166511991277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=3303548166511991277' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/3303548166511991277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/3303548166511991277'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/05/research-video-of-our-siggraph-paper.html' title='[research] Video of our SIGGRAPH paper'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-1669473478680177565</id><published>2009-04-01T13:04:00.000-07:00</published><updated>2009-06-23T13:17:32.467-07:00</updated><title type='text'>[conference] Eurographics 2009</title><content type='html'>I am currently at EG 2009. Interesting papers, brainstorming, fun and - since we are in Germany after all - a fair amount of good beer :-)&lt;br /&gt;&lt;br /&gt;Marcio Cabral will be presenting our &lt;a href="http://www-sop.inria.fr/reves/Basilic/2009/CLDD09/"&gt;'Mesh Puzzle' paper&lt;/a&gt;, and I'll be sharing a talk with Li-Yi Wei to present our &lt;a href="http://www-sop.inria.fr/reves/Basilic/2009/WLKT09/"&gt;STAR report on texture synthesis&lt;/a&gt;; co-authored with Vivek Kwatra and Greg Turk.&lt;br /&gt;&lt;br /&gt;Btw, don't miss the &lt;a href="http://www-sop.inria.fr/reves/Sylvain.Lefebvre/tsynex"&gt;tutorial implementation of our Parallel Controllable Texture Synthesis algorithm&lt;/a&gt; (SIGGRAPH 2005).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-1669473478680177565?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/1669473478680177565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=1669473478680177565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/1669473478680177565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/1669473478680177565'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/04/conference-eurographic-2009.html' title='[conference] Eurographics 2009'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2825257618321550231</id><published>2009-03-14T07:25:00.000-07:00</published><updated>2009-03-18T14:48:27.360-07:00</updated><title type='text'>[various] RotoPath</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_fUxLAW_KeEM/SbvAScYYr1I/AAAAAAAAAC8/v-iopjNOvVg/s1600-h/rotopath1.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5313051608502284114" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 229px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://3.bp.blogspot.com/_fUxLAW_KeEM/SbvAScYYr1I/AAAAAAAAAC8/v-iopjNOvVg/s320/rotopath1.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;How much time do you spend navigating through folders every day? For me, the answer was: &lt;em&gt;Way too much.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;I decided to give a try to an old idea and created a very simple app to navigate through folders (folders only, this is &lt;strong&gt;not&lt;/strong&gt; a file explorer!!). It presents folders in a wheel. A left click goes to the next folder, a right click opens explorer on the folder. The wheel can be displayed at any time by pressing Left-Control and Left-Windows simultaneously.&lt;br /&gt;&lt;br /&gt;As can be seen some folders are shown in red: These are the folders you use most often. Hence, they are visually outlined so that you can quickly get to the places the most important to you.&lt;br /&gt;&lt;br /&gt;There are three special icons in the middle: Open command line at current folder, Show favorite folders, Go back to the computer root.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RotoPath is brand new and will likely have a few bugs, but it already helps me a lot on an everyday basis. Maybe you'll find it useful as well.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;NOTE: Only for Vista and .NET 3.5&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.aracknea-core.net/wiki/Main/RotoPath"&gt;Download it here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2825257618321550231?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2825257618321550231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2825257618321550231' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2825257618321550231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2825257618321550231'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/03/various-rotopath.html' title='[various] RotoPath'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fUxLAW_KeEM/SbvAScYYr1I/AAAAAAAAAC8/v-iopjNOvVg/s72-c/rotopath1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2101485872955837214</id><published>2009-03-02T09:03:00.000-08:00</published><updated>2009-03-15T03:04:24.156-07:00</updated><title type='text'>[linux] Fedora saved my day!</title><content type='html'>Today I just lived what I consider to be a true computer technology miracle.&lt;br /&gt;&lt;br /&gt;I was teaching in Paris today. The class involves powerpoint slides and then some OpenGL programming (each student has a computer to work with). As usual, I prepared my slides and the source code for the gl tutorials on my laptop. What was not usual is that I *forgot* to backup the files on my usb stick. &lt;span style="FONT-STYLE: italic"&gt;'So what?'&lt;/span&gt; did I think when arriving at the airport, it would really be bad luck if my laptop crashed today.&lt;br /&gt;&lt;br /&gt;Guess &lt;span style="FONT-WEIGHT: bold"&gt;what&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Windows soon refused to boot, chkdsk kept detecting more and more bad sectors at every run, and so on. The usual story. The dell repair tool only knows how to format the entire thing (I have a XPS M1330, and yes the NVidia card was faulty), and there was no booting windows. After the first battery emptied I felt very lonely, with my faulty computer, in the middle of the airport with no power plug in sight. &lt;span style="FONT-STYLE: italic"&gt;'If only I was home, I could boot from my Knoppix CD, access the NTFS drive and save the whole thing on a USB stick.'. &lt;/span&gt;And then I saw the light. Here it was, looking at me through the book shop window: The February issue of 'Planete Linux' - a French magazine about the Linux OS - and the distribution of the month was Feodra 10 Live with an included CD!!!&lt;br /&gt;&lt;br /&gt;After spending 6.20 euros on the magazine - not a bad read by the way - I quickly tried it out. After a few minutes I had a full fledged Linux running! I was able to mount the faulty ntfs partition (with scary errors) and was able to retrieve my slides!&lt;br /&gt;&lt;br /&gt;Arriving in the classroom, already feeling lucky enough, I was planning to ask a student for his laptop to display the slides. But, out of curiousity, I tried the included openoffice. It did open the slides with success! So, while I was at it, feeling quite invicible, I plugged the projector to my laptop-with-fried-hdd-but-working-Live-Fedora. And &lt;span style="FONT-WEIGHT: bold"&gt;*it* *worked* *just* *fine*&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;So here I was, with my CD-only OS, displaying my slides with OpenOffice on a DLP projector and all this for 6.20 euros when 2 hours earlier I was screaming over my dying Windows-powered fried-hdd laptop.&lt;br /&gt;&lt;br /&gt;Needless to say, Fedora just won an unconditional fan!!!! I am actually writing this entry using the very same Fedora Live CD, through the included WiFi support.&lt;br /&gt;&lt;br /&gt;Thanks guys for saving my day :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2101485872955837214?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2101485872955837214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2101485872955837214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2101485872955837214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2101485872955837214'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/03/linux-fedora-saved-my-day.html' title='[linux] Fedora saved my day!'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-9018074787236148045</id><published>2009-02-03T12:22:00.000-08:00</published><updated>2009-03-18T15:28:12.219-07:00</updated><title type='text'>[code] SAPI</title><content type='html'>I recently rediscovered &lt;a href="http://msdn.microsoft.com/en-us/library/ms723627(VS.85).aspx"&gt;SAPI&lt;/a&gt;, the Microsoft speech API. I used it a long time ago, and basically forgot about it. Which is a shame, because it is a really fun tool to play with. It is extremely easy to make your computer talk. While the voice is a bit aging under XP, the Vista voice is reasonnably good.&lt;br /&gt;&lt;br /&gt;I put together a tiny app (C# is so fast to do such things!) to read text from the clipboard. Quite useful to read your favorite blog while washing the dishes! Get it there: &lt;a href="http://www.aracknea-core.net/wiki/Main/ReadThis"&gt;http://www.aracknea-core.net/wiki/Main/ReadThis&lt;/a&gt;&lt;br /&gt;(I did this app in like 5 minutes, so it is largely untested)&lt;br /&gt;&lt;br /&gt;Comments welcome!&lt;br /&gt;&lt;br /&gt;For those interested, &lt;a href="http://windowscoding.com/blogs/blake/archive/2006/11/01/How-to-use-Microsofts-Speech-API-in-a-managed-application.aspx"&gt;here is how to call SAPI from C#.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-9018074787236148045?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/9018074787236148045/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=9018074787236148045' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/9018074787236148045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/9018074787236148045'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2009/02/i-recently-rediscovered-sapi-microsoft.html' title='[code] SAPI'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4963429527856066579</id><published>2008-12-12T02:08:00.000-08:00</published><updated>2008-12-12T02:10:53.656-08:00</updated><title type='text'>[code] Compiling on a share with VC2005</title><content type='html'>While trying to compile on a share (with all permissions) I got an error message concerning the opening of a '.rsp' file. After a bit of search it turns out to be a known issue.&lt;br /&gt;&lt;br /&gt;To fix it, simply redirect temporary files to a local directory, such as:&lt;br /&gt;$(temp)\$(ProjectName)\$(ConfigurationName)&lt;br /&gt;(setting in Configuration Properties -&gt; General, Intermediate Directory)&lt;br /&gt;&lt;br /&gt;More info on&lt;br /&gt;&lt;a href="http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101276"&gt;http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=101276&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4963429527856066579?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4963429527856066579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4963429527856066579' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4963429527856066579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4963429527856066579'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/12/code-compiling-on-share-with-vc2005.html' title='[code] Compiling on a share with VC2005'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7871002418669506925</id><published>2008-11-28T14:25:00.000-08:00</published><updated>2008-11-28T14:34:56.565-08:00</updated><title type='text'>[tips] Sharing a folder from the command line</title><content type='html'>Ever had a (windows) laptop screen or graphics card died? (ie. the 'headless' computer effect). Well it just happened to me. Now, here is where it becomes tricky: How do you get to the files without taking the laptop apart? (you don't want to void the warranty, you don't trust support when they swear your data will be just fine).&lt;br /&gt;&lt;br /&gt;One idea is to share folders so that you can access the files through the network. But that does not seem too easy without a screen... Well, usually you can get to log into windows without visual feedback. It is also fairly easy to launch a command line (CTRL-R (run) on XP; on Vista use the 'windows' key, type "cmd [enter]" and your are in). But, how can you share a folder from the command line, so that it will show up on the network?&lt;br /&gt;&lt;br /&gt;I found the answer here: &lt;a href="http://support.microsoft.com/kb/295622"&gt;http://support.microsoft.com/kb/295622&lt;/a&gt;. There is a command line tool, WMIC, which lets you do many things, such as sharing a folder, from the command line. In principle you can even create the shared folder &lt;em&gt;remotely&lt;/em&gt;. In my case it did not work out (password was refused for some reason) but I could do it 'blindly' from the command line.&lt;br /&gt;&lt;br /&gt;Hope it helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7871002418669506925?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7871002418669506925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7871002418669506925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7871002418669506925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7871002418669506925'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/11/tips-sharing-folder-from-command-line.html' title='[tips] Sharing a folder from the command line'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2908566190376358139</id><published>2008-11-28T13:56:00.000-08:00</published><updated>2008-11-28T14:47:41.394-08:00</updated><title type='text'>[grrrr] Sorry, your IP is outside the US</title><content type='html'>I've always found region locking to be a significant annoyance (ie. you cannot play a console game in Europe if you bought it in the US, and vice versa). But even if I don't like it, I can only recognize that it is an efficient way to force money out of customers (what is a right price anyway?). I just admire the irony of globalized companies putting such measures in place...&lt;br /&gt;&lt;br /&gt;However, region locking on Internet - especially for video on demand - defies any sort of logic. It has become a sort of marketing reflex, hurting the very interests it is supposed to be protecting. Exactly like these stupid moves we sometimes do, such as looking at your watch when you're holding a glass of water.&lt;br /&gt;&lt;br /&gt;Let me explain. I like many of the latest US shows. I want to reward the people making the show and I am perfectly fine with the idea of paying to watch them online. So, here I am, on a popular VOD website, my credit card number half entered, when suddenly, a doubt strikes me. The sort of thought that you sometimes get, along the line of: 'no way ... that would really be too stupid'. But no, there it is, in the service agreement I too quickly agreed with: "We do not broadcast outside of the US".&lt;br /&gt;&lt;br /&gt;Darn.&lt;br /&gt;&lt;br /&gt;Where this really gets mindbloggling is that 1) there is no equivalent service in my country 2) most of these shows will never be on TV here anyway 3) I could watch all of them, 'for free', with very little effort. So what the hell is going on? ... go figure ...&lt;br /&gt;&lt;br /&gt;(note that even if bullet 3 stops being an option somehow (!!) it becomes even worse: people will never get to discover the show, they'll be even less inclined to buy it on DVD ...).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2908566190376358139?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2908566190376358139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2908566190376358139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2908566190376358139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2908566190376358139'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/11/sorry-your-ip-is-outside-us.html' title='[grrrr] Sorry, your IP is outside the US'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-8479714023288097201</id><published>2008-07-25T10:04:00.000-07:00</published><updated>2008-07-25T10:40:42.165-07:00</updated><title type='text'>[electronics] PICs</title><content type='html'>&lt;div&gt;Before I started programming computers, I was always trying to build some eletronic boards doing various stuff. Well, I am saying 'trying' because I never quite managed! Problem was, doing cool stuff quickly required a lot of equipement. Plus, contrary to the computer world, you have to go to a shop in person to buy the parts - and sometimes wait for weeks for them to ship in (no, there was no 'order-it-over-the-internet' at this time ... who said I am getting old?).&lt;br /&gt;&lt;br /&gt;Anyway, I never dropped the idea of coming back to electronics one day. I mean, computers are great, but actually &lt;em&gt;building &lt;/em&gt;a physical device really is something I find amazing.&lt;br /&gt;&lt;br /&gt;Luckily, a new collegue of mine - David Grelaud - turns out to be an electronics guru :) He pointed me out a familly of microcontrollers - PIC's from &lt;a href="http://www.microchip.com/"&gt;Microchip &lt;/a&gt;- which are in fact fairly easy to use. These little things are programmed in assembler. Code is compiled on the PC and sent to the device through a programmer. You can order a &lt;a href="http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&amp;amp;nodeId=1406&amp;amp;dDocName=en023805"&gt;relatively inexpensive programmer&lt;/a&gt;, which comes with a demo board, and get started! All tools to program are provided, as well as lessons to learn progressively the assembly language. The programmer is extremely simple to use: Just plug it to your computer USB!!&lt;br /&gt;&lt;br /&gt;Ok, but how about the circuit board? Well, this is what is so cool about the PICs. They are extremely easy to use from a hardware point of view. I made a simple demo card with only a few wires, one resistor and a tricolor LED! I can program it from the PC, unplug the programmer and it becomes independent! Here is my - really ugly - card, plugged to the programmer:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5227006144730530722" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_fUxLAW_KeEM/SIoOZQ9yg6I/AAAAAAAAACE/1BxoTQN8WtI/s320/IMG_2152.JPG" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;You can also see how simple it is on &lt;a href="http://www.pic18f.com/tutorial/2007/12/04/tutorial-1-hardware-setup/"&gt;this tutorial&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are even C compilers for the PICs (C18, CCS, MikroC, PICC, SDCC). I am using &lt;a href="http://sdcc.sourceforge.net/"&gt;SDCC &lt;/a&gt;which is open-source, but expect some not-so-easy install process. I had to hack a little bit because my PIC (18f4580) was not directly supported. But well, nothing too horrible if you are familiar with low level hacking (for those interested, use the 18f4585 template and setup the config bits directly in hexadecimal in the c code). The compiler produces a file containing the raw byte code (a .hex file) that is directly written into the PIC using the programmer. And &lt;em&gt;voila&lt;/em&gt;, it just works !!&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Amazing - now I am spending hours tweaking my rgb LED :-) (by quickly switching red/green/blue you can produce any color).&lt;/div&gt;&lt;br /&gt;&lt;div&gt;My head is just buzzing with cool projects to try on. I expect things will quickly complicate, but I know that the first step is always the most difficult.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Hey, did you know you can even create &lt;a href="http://www.microchip.com/USB"&gt;USB devices&lt;/a&gt; with a PIC ???!!?&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-8479714023288097201?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/8479714023288097201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=8479714023288097201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8479714023288097201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8479714023288097201'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/07/electronics-pics.html' title='[electronics] PICs'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_fUxLAW_KeEM/SIoOZQ9yg6I/AAAAAAAAACE/1BxoTQN8WtI/s72-c/IMG_2152.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-8848757725618147446</id><published>2008-06-09T23:42:00.000-07:00</published><updated>2008-06-09T23:53:53.418-07:00</updated><title type='text'>[research] Lazy Solid Texture Synthesis</title><content type='html'>Our latest work on texture synthesis from example has been accpeted to EGSR 2008!! Check it out here: &lt;a href="http://www-sop.inria.fr/reves/Basilic/2008/DLTD08/"&gt;http://www-sop.inria.fr/reves/Basilic/2008/DLTD08/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The key idea is to synthesize solid textures for surfaces, but only for the voxels around the object. Hence we never have to store or compute the entire volume. Our GPU implementation is very fast, so we can in fact synthesize a texture for the interior surfaces whenever an object is cut or broken. We obtain much more variety than a direct tiling of a 3D tile, which would create visible repetitions along some directions (and require storing a full volume tile). There is no pre-process of the object interior (ie. no thetrahedrons, no prior-knowledge of where the object will fracture) so our approach could be used for interactive breaking of large structures.&lt;br /&gt;&lt;br /&gt;This is a collaboration with Yue Dong and Xin Tong (from MSRA). The project was very fun to work on, and I hope you'll find it interesting and - most importantly - useful.&lt;br /&gt;&lt;br /&gt;I will add some more material on the paper webpage soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-8848757725618147446?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/8848757725618147446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=8848757725618147446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8848757725618147446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8848757725618147446'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/06/research-lazy-solid-texture-synthesis.html' title='[research] Lazy Solid Texture Synthesis'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-6219773825268507898</id><published>2008-05-17T04:33:00.001-07:00</published><updated>2008-05-17T04:35:32.072-07:00</updated><title type='text'>[game] ragsmash</title><content type='html'>I just corrected the 'elastic band' problem in Ragdoll Smasher. This was due to a different handling of timers in XP and Vista.&lt;br /&gt; This is now fixed!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-6219773825268507898?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/6219773825268507898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=6219773825268507898' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6219773825268507898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6219773825268507898'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/05/game-ragsmash.html' title='[game] ragsmash'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-8229567698114065481</id><published>2008-05-13T13:35:00.000-07:00</published><updated>2008-05-13T23:58:54.455-07:00</updated><title type='text'>[game] Ragsmash on YouTube</title><content type='html'>Someone posted a video of him playing Ragdoll Smasher on YouTube :-) &lt;a href="http://www.youtube.com/watch?v=m0F4PZCi-DY"&gt;watch it here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;At least I know someone played the game ;-) It's really cool for a 'wannabe' game developer such as myself to discover this kind of things. Highly enjoyable.&lt;br /&gt;&lt;br /&gt;A few explanations on the weird things happening that the player points out:&lt;br /&gt;- guys stuck mid-air happen because the game only simulates 3 bodies. So it assumes others already landed. I could correct it ... but well, it's sort of fun.&lt;br /&gt;- the 'elastic band' effect is more difficult. I have to look into it but it is likely due to instability in the stepping of the physics. Due to this, a very large force is produced. ODE is not able to propagate forces fast enough and one bone flies away while the rest of the body remains where it is.&lt;br /&gt;&lt;br /&gt;Anyway, I am always happy to hear about ideas for a new version of Ragdoll smasher, so feel free to make suggestions. I had another stupid idea involving a chainsaw ... I played too much Doom I think ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-8229567698114065481?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/8229567698114065481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=8229567698114065481' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8229567698114065481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8229567698114065481'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/05/ragsmash-youtube.html' title='[game] Ragsmash on YouTube'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2324578165941078711</id><published>2008-05-13T11:55:00.000-07:00</published><updated>2008-05-13T12:07:19.002-07:00</updated><title type='text'>[C#] grabing pictures from a webcam</title><content type='html'>I have been looking for a simple way to grab a picture from a webcam, using C#. Well, it appears it is not so simple :-) The easiest solution I found is described &lt;a href="http://blogs.msdn.com/coding4fun/archive/2006/10/31/912546.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The code is simple, the only difficulty is to install the WIA sdk before (download from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=A332A77A-01B8-4DE6-91C2-B7EA32537E29&amp;amp;displaylang=en"&gt;here&lt;/a&gt;, WIAAutSDK.zip). Don't forget to execute 'regsvr32 wiaaut.dll' in a command line, after copying the DLL in WINDOWS\system32.&lt;br /&gt;&lt;br /&gt;WIA cannot be used for videos &lt;a href="http://www.hanselman.com/blog/CapturingVideoAWebCameraUsingWIANotPossible.aspx"&gt;it seems&lt;/a&gt;. For this you'll need a &lt;a href="http://www.codeproject.com/KB/audio-video/webcamservice.aspx"&gt;DirectShow wrapper&lt;/a&gt;. (Note that the FTP is nicer in the sample code above).&lt;br /&gt;&lt;br /&gt;And, if you just need to grab images and send them to an FTP, use &lt;a href="http://dorgem.sourceforge.net/"&gt;Dorgem&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That was my 2 cents on webcams :-)&lt;br /&gt;&lt;br /&gt;(I found &lt;a href="http://www.hanselman.com/blog"&gt;Scott Hanselman's blog&lt;/a&gt; to be a great source of info on this)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2324578165941078711?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2324578165941078711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2324578165941078711' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2324578165941078711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2324578165941078711'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/05/c-grabing-pictures-from-webcam.html' title='[C#] grabing pictures from a webcam'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7889532652539944475</id><published>2008-05-01T05:17:00.001-07:00</published><updated>2008-05-01T15:57:26.740-07:00</updated><title type='text'>[various] dell loves euro</title><content type='html'>These days I am considering buying a new monitor. A quick look on the French dell web site indicates the following price for a 24' monitor (date: 2008-05-01)&lt;br /&gt;- DELL UltraSharp 2408WFP: 801.13 euros (no promotional offer)&lt;br /&gt;&lt;br /&gt;A quick look at the US DELL web site indicates the following price:&lt;br /&gt;- DELL UltraSharp 2408WFP: $679.00 (no promotional offer)&lt;br /&gt;&lt;br /&gt;Ok, so today 1 USD gives us 0.642343 euros. Hence converting from the US price would give: 679 * 0.642343 * 1.196 = 521.63 euros (French sales taxes are 19.6%).&lt;br /&gt;&lt;br /&gt;But, wait, what's the price on DELL French web site?? &lt;strong&gt;801.13 euros&lt;/strong&gt; !!?! That's only 280 euros more, out of nowhere. And this is no isolated case.&lt;br /&gt;&lt;br /&gt;No wonder people in Europe feel they have less and less money available to them. And I am sure dell is only one example among many - depressing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7889532652539944475?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7889532652539944475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7889532652539944475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7889532652539944475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7889532652539944475'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/05/various-dell-loves-euro.html' title='[various] dell loves euro'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-164470667946361298</id><published>2008-04-09T16:13:00.001-07:00</published><updated>2008-04-09T16:29:20.532-07:00</updated><title type='text'>[code] pure virtual function call</title><content type='html'>Calling a virtual method from a constructor is a very bad idea. Indeed, this can easily result in the 'pure virtual function call' runtime error. This is well explained &lt;a href="http://support.microsoft.com/kb/125749"&gt;here&lt;/a&gt;. Worse, if the method is not abstract it will call the method from the parent class, instead of calling the specialized one. It is worse because this will probably not directly trigger an error. Now, this 'issue' does in fact make sense: In the constructor of the parent class, the specialized class is not yet initialized. Hence, how could one of its method be called? Therefore, if you &lt;i&gt;need&lt;/i&gt; to call a virtual method from a parent class constructor, you are probably facing a problem in your code design.&lt;br /&gt;&lt;br /&gt;Nevertheless, I actually came accross an interesting variant of this issue, involving a thread. My parent class, A, is creating a thread in its constructor. The thread execution later involves calling a virtual method of A, which is of course meant to be implemented by inheritance. &lt;br /&gt;&lt;br /&gt;The funny thing is that depending on 'how long it takes' before the thread calls the virtual method, we may - or may not - still be in the constructor of A. So, sometimes, this will produce the 'pure virtual call' error, sometimes not. Needless to say I was a bit puzzled the first time :-)&lt;br /&gt;The solution was simply to implement a lock mechanism to make sure the thread calls the virtual method after the constructor executed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-164470667946361298?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/164470667946361298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=164470667946361298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/164470667946361298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/164470667946361298'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/04/code-pure-virtual-function-call.html' title='[code] pure virtual function call'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4188468537298850685</id><published>2008-04-08T14:40:00.000-07:00</published><updated>2008-04-09T16:12:57.465-07:00</updated><title type='text'>[win32] Ascii, Unicode, Scan code, Virtual key</title><content type='html'>... and other keyboard nightmares :-)&lt;br /&gt;&lt;br /&gt;I found two very useful functions in the Win32 API: ToUnicodeEx and ToAsciiEx. It converts from a virtual key code and a scan code to a unicode or ascii character. It can be used directly from a WM_KEYDOWN (or KEYUP) message.&lt;br /&gt;&lt;br /&gt;Here is a quick code snippet:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;uint scancode = (lParam &gt;&gt; 16) &amp;amp; 0xFF;&lt;br /&gt;BYTE keyboardState[256];&lt;br /&gt;GetKeyboardState(keyboardState);&lt;br /&gt;char charvalue[2];&lt;br /&gt;if (ToAsciiEx(wParam, scancode, keyboardState, (LPWORD)&amp;amp;charvalue[0], 0, GetKeyboardLayout(0)) == 1) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;onKeyPressed(charvalue[0]);&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Also check out &lt;a href="http://blogs.msdn.com/michkap/archive/2007/03/25/1948887.aspx"&gt;this blog &lt;/a&gt;for more info.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4188468537298850685?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4188468537298850685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4188468537298850685' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4188468537298850685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4188468537298850685'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/04/win32-ascii-unicode-scan-code-virtual.html' title='[win32] Ascii, Unicode, Scan code, Virtual key'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2665843082255087328</id><published>2008-03-29T19:01:00.001-07:00</published><updated>2008-03-30T10:57:38.687-07:00</updated><title type='text'>[research] SIGcrash</title><content type='html'>Yet again, like so many others, our work has been &lt;strong&gt;rejected&lt;/strong&gt;. It is &lt;strong&gt;not worth it&lt;/strong&gt;. We &lt;strong&gt;won't talk about it&lt;/strong&gt;. Ouch.&lt;br /&gt;&lt;br /&gt;Submitting a paper to SIGGRAPH is a very emotional thing in fact. You put a lot of you in each paper. A lot of ideas. A lot of time. A lot of work. But here it is. It is &lt;strong&gt;rejected&lt;/strong&gt;. Well, well, well. Sometimes it gets in, often not. &lt;br /&gt;&lt;br /&gt;Anyway, you won't learn about the cool stuff we did ... but it should not bother you too much since our work was not above the threshold ...&lt;br /&gt;&lt;br /&gt;Ouch. It is hard to keep a cold mind :-) Of course you'll learn about our stuff, we'll improve the paper and find a more friendly place for it!&lt;br /&gt;&lt;br /&gt;Tonight I just want to have a special thought for all those who put so much in their work and will see it rejected from SIGGRAPH. As a reviewer, I am part of the whole reject / accept process. Giving fair scores is not an easy thing. I know deciding who gets in and who is rejected is not an easy thing for the committee either. But well, it still hurts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2665843082255087328?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2665843082255087328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2665843082255087328' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2665843082255087328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2665843082255087328'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/03/research-sigcrash.html' title='[research] SIGcrash'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4395678201491027647</id><published>2008-03-07T08:39:00.000-08:00</published><updated>2008-03-07T08:41:27.247-08:00</updated><title type='text'>[gpu] G80: The gritty details</title><content type='html'>Icare3D just released some in-depth tests on the G80 behaviour &lt;a href="http://www.icare3d.org/GPU/CN08"&gt;Read it here!&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4395678201491027647?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4395678201491027647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4395678201491027647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4395678201491027647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4395678201491027647'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/03/gpu-g80-gritty-details.html' title='[gpu] G80: The gritty details'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-6717444416574468570</id><published>2008-03-05T14:18:00.000-08:00</published><updated>2008-03-05T14:22:02.045-08:00</updated><title type='text'>[game] Zombie gameplay</title><content type='html'>I just came accross this flash game 'The Last Stand':&lt;br /&gt;http://armorgames.com/play/269/the-last-stand&lt;br /&gt;&lt;br /&gt;I like the gameplay. Everytime I thought about doing a zombie game it was something along these lines: Build barricades at day, fight for your life at night. The game asks to choose how to allocate day time (repair, or search for weapons / survivors), rather than having you wander around and search for items. It is a neat idea.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-6717444416574468570?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/6717444416574468570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=6717444416574468570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6717444416574468570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6717444416574468570'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/03/game-zombie-gameplay.html' title='[game] Zombie gameplay'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-6569808734424849858</id><published>2008-03-04T12:34:00.000-08:00</published><updated>2008-03-04T12:35:15.398-08:00</updated><title type='text'>[mmorpg] Notes on economy in MMORPG</title><content type='html'>By the Eternal Lands creator:&lt;br /&gt;&lt;a href="http://eternal-lands.blogspot.com/"&gt;http://eternal-lands.blogspot.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-6569808734424849858?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/6569808734424849858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=6569808734424849858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6569808734424849858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6569808734424849858'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/03/mmorpg-notes-on-economy-in-mmorpg.html' title='[mmorpg] Notes on economy in MMORPG'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7745801974460287052</id><published>2008-02-29T16:14:00.000-08:00</published><updated>2008-03-01T02:45:08.240-08:00</updated><title type='text'>[gamedev] Don't do it!</title><content type='html'>I just came accross this 'Why you should not do an MMORPG' page: &lt;a href="http://sol.gfxile.net/mmorpg.html"&gt;http://sol.gfxile.net/mmorpg.html&lt;/a&gt;&lt;a href="http://sol.gfxile.net/mmorpg.html"&gt;&lt;/a&gt;. I think it is really worth a read for anybody planning on doing something like a massive online game.&lt;br /&gt;&lt;br /&gt;The main reason is that I strongly agree with the bottom line: It is a lot more fun to actually engage in smaller projects that you can hope to finish. My very first game project was very ambitious - of course I did not realize that at the time. Even now I just could not do it unless I stop doing anything else for 4 years :-) (and find some good artists to help! ;-) ). Now, note that I learned *a lot* from it, so I do not regret a single second the time I spent on it. But it would have been even more fun to have a game in the end. I am definitely not saying hobbyists should not engage in crazy projects - it is amazing what someone determined can achieve with a lot of work. So if you feel this is what you should be doing, just do it.&lt;br /&gt;&lt;br /&gt;However, if you are beginning in game programming you should definitely start with a first small project. Just to experience how great it feels when your game is finished, when you prepare this final zip that will be available for download on your web site, when you receive first comments from players (typically bug reports ;-) ). Sure, plenty of people will tell you 'your game looks ugly', 'it's been done before', etc ... But it will be your game, your creation, your contribution to the ocean of 'fun time wasters'.&lt;br /&gt;&lt;br /&gt;I recall when I did my first game. It was a Breakout game. I worked very hard. I was very proud. Nobody was impressed. The number of time I heard 'Why are you doing that? It's been done before!'. Hell ... not by me! But then, as you make more projects, as you gain experience with your game development skills, you'll start to make more impressive stuff. And then you'll realize it's not about being impressive. It's about making something fun. And this is where it starts to be both easier and more interesting :-)&lt;br /&gt;&lt;br /&gt;Anyway, I agree with this web page. I know its right. I know I shouldn't. I am still working on this MMO game project ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7745801974460287052?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7745801974460287052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7745801974460287052' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7745801974460287052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7745801974460287052'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/02/gamedev-dont-do-it.html' title='[gamedev] Don&apos;t do it!'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-8318361302023893236</id><published>2008-02-10T10:37:00.000-08:00</published><updated>2008-02-29T16:44:09.067-08:00</updated><title type='text'>[dev] Tile based world</title><content type='html'>&lt;a href="http://bp3.blogger.com/_fUxLAW_KeEM/R69ErvmIrKI/AAAAAAAAAB8/MImZToW4AZk/s1600-h/cuteplanet.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_fUxLAW_KeEM/R69ErvmIrKI/AAAAAAAAAB8/MImZToW4AZk/s400/cuteplanet.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5165422815918730402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a screenshot of my 'tile' world editor. Its written in C#. The tiles are &lt;a href="http://lostgarden.com/2007/05/dancs-miraculously-flexible-game.html"&gt;Danc's free tile set&lt;/a&gt; (many thanks to him!).&lt;br /&gt;&lt;br /&gt;I am sort of planning to use this for my next project - which is supposed to be a networked game ...&lt;br /&gt;&lt;br /&gt;Anyway, making such an editor is a very good exercise, highly recommended! (I am new to C#)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-8318361302023893236?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/8318361302023893236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=8318361302023893236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8318361302023893236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/8318361302023893236'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/02/dev-tile-based-world.html' title='[dev] Tile based world'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_fUxLAW_KeEM/R69ErvmIrKI/AAAAAAAAAB8/MImZToW4AZk/s72-c/cuteplanet.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4140032461806929779</id><published>2008-02-07T01:29:00.000-08:00</published><updated>2008-02-07T01:33:46.069-08:00</updated><title type='text'>[opengl] gluX</title><content type='html'>After a couple years without any improvements (I had a long DirectX period :-) ) I finally updated gluX with latest extensions (which only required running the perl script on the new header files!). I also added a mechanism to automatically load extensions on first function call (Thanks to Xadec for suggesting the idea a long time ago). This simplifies using gluX, even though it is less 'robust' than declaring used extensions - if an extension is missing the program will exit on the missing function call. But of course both mechanisms are available and can work together!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-sop.inria.fr/reves/Sylvain.Lefebvre/glux"&gt;gluX is here!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4140032461806929779?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4140032461806929779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4140032461806929779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4140032461806929779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4140032461806929779'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/02/opengl-glux.html' title='[opengl] gluX'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2883596070354981189</id><published>2008-02-05T15:08:00.000-08:00</published><updated>2008-02-05T15:28:13.079-08:00</updated><title type='text'>[dev] CEGUI</title><content type='html'>&lt;p&gt;I finally took some time to look into CEGUI. This is a great library! Exactly what I was looking for: It provides a very well designed API to build GUIs, using any renderer (and of course OpenGL and DirectX are among them). I did, years ago, spend some time designing a GUI, but I am really happy to take this load of my shoulders now :-) &lt;/p&gt;&lt;p&gt;It really wasn't hard to compile and use it. Let me give a few hints for those who would like to start using CEGUI with Visual C++ under Windows (and with DirectX). &lt;/p&gt;&lt;p&gt;All downloads are on:&lt;br /&gt;&lt;a href="http://www.cegui.org.uk/wiki/index.php/CEGUI_Downloads_0.5.0"&gt;http://www.cegui.org.uk/wiki/index.php/CEGUI_Downloads_0.5.0&lt;/a&gt; &lt;/p&gt;&lt;p&gt;I had to recompile CEGUI since the precompiled binaries did use a version of DirectX older than the latest available. And anyway, it is good to have the source code on hand, as it acts as a good documentation :-)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Download the zipped source code and the precompiled external dependencies (available for all three versions of VC++ - nice!) &lt;/li&gt;&lt;li&gt;Uncompress everything in a same directory. &lt;/li&gt;&lt;li&gt;Follow instructions on &lt;a href="http://www.cegui.org.uk/wiki/index.php/Build_from_Source_for_Win32"&gt;http://www.cegui.org.uk/wiki/index.php/Build_from_Source_for_Win32&lt;/a&gt;&lt;br /&gt;Yes, you need premake, it will generate the "*.sln" projects in makefiles/premake. You have to enable DirectX support by editing "config.lua" and setting "DIRECTX9_RENDERER = true". Then launch "build_vs2005.bat", open the VC++ project and compile. Also generate the samples project with "build_samples_vs2005.bat". &lt;/li&gt;&lt;li&gt;To run the samples, copy the DLLS from lib\ into bin\. I also had to copy datafiles\ into the root of my CEGUI install to be able to directly launch the samples from bin\.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now a couple links I found handy when doing my first steps with CEGUI:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The Widget Galor: &lt;a href="http://www.cegui.org.uk/wiki/index.php/WidgetGalore"&gt;http://www.cegui.org.uk/wiki/index.php/WidgetGalore&lt;/a&gt;. A big sample with all widgets. &lt;/li&gt;&lt;li&gt;Xadec page on CEGUI &lt;a href="http://artis.imag.fr/~Xavier.Decoret/resources/CEGUI/"&gt;http://artis.imag.fr/~Xavier.Decoret/resources/CEGUI/&lt;/a&gt;. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;But of course, the CEGUI Wiki contains a ton of useful information!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2883596070354981189?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2883596070354981189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2883596070354981189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2883596070354981189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2883596070354981189'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/02/dev-cegui.html' title='[dev] CEGUI'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2949119216816450672</id><published>2008-02-04T05:46:00.000-08:00</published><updated>2008-02-04T05:49:11.689-08:00</updated><title type='text'>[math] Markov Random Fields</title><content type='html'>A very nice intro to MRFs: &lt;a href="http://www.ams.org/online_bks/conm1/"&gt;http://www.ams.org/online_bks/conm1/&lt;/a&gt;. I needed to refresh some notions on MRFs and found the introduction chapter of this book to be extremly clear.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2949119216816450672?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2949119216816450672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2949119216816450672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2949119216816450672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2949119216816450672'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/02/math-markov-random-fields.html' title='[math] Markov Random Fields'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2379035259322616148</id><published>2008-01-28T08:29:00.000-08:00</published><updated>2008-01-28T08:33:52.414-08:00</updated><title type='text'>[addon] DoINoU</title><content type='html'>Now that the &lt;a href="http://www.siggraph.org/s2008/"&gt;SIGGRAPH&lt;/a&gt; deadline is over I re-activated my World of Warcraft subscription for a little while. And of course, I took some time to update and improve my addon &lt;a href="http://doinou.aracknea-core.net"&gt;DoINoU&lt;/a&gt;. A brand new website and the ability to write comments on players. Some would think I actually play the game :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2379035259322616148?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2379035259322616148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2379035259322616148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2379035259322616148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2379035259322616148'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2008/01/addon-doinou.html' title='[addon] DoINoU'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-1259719507169287593</id><published>2007-11-12T13:42:00.000-08:00</published><updated>2007-11-12T14:00:10.958-08:00</updated><title type='text'>[game] Flatout 2</title><content type='html'>These days I have been playing &lt;a href="http://flatout2.sierra.com/us/"&gt;Flatout 2&lt;/a&gt;. Quite nice! I especially enjoy the multiplayer Derby mode. A lot of fun - especially if you were fan of &lt;a href="http://www.mobygames.com/game/saturn/destruction-derby"&gt;Destruction Derby &lt;/a&gt;or &lt;a href="http://www.mobygames.com/game/windows/viper-racing"&gt;Viper Racing&lt;/a&gt;. I am impressed by how well the network engine copes with all the simultaneous collisions. I guess there is a lot that is asynchronous (barrels, and flying car pieces are probably not in sync) but the car-against-car collisions are nicely consistent.&lt;br /&gt;&lt;br /&gt;I always wanted to make a fighting car game. There has been some in the past (the famous &lt;a href="http://www.mobygames.com/game/windows/interstate-82"&gt;Interstate&lt;/a&gt;, and more recently &lt;a href="http://www.mobygames.com/game/windows/auto-assault"&gt;Auto Assault&lt;/a&gt; - there is a &lt;a href="http://en.wikipedia.org/wiki/Vehicular_combat_game"&gt;list of those games on Wikipedia&lt;/a&gt; :-) ) but I would like to do something much more action oriented. A derby between cars with machine guns on turrets, missiles, flame thrower, chainsaw on the side, and other cool nasty weapons. Ah well, maybe one day ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-1259719507169287593?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/1259719507169287593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=1259719507169287593' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/1259719507169287593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/1259719507169287593'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2007/11/game-flatout-2.html' title='[game] Flatout 2'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4277569160605660300</id><published>2007-07-20T12:39:00.000-07:00</published><updated>2007-07-20T13:27:33.865-07:00</updated><title type='text'>[game] Top 100 independent games</title><content type='html'>There is a very nice list of independent games on game tunnel: &lt;a href="http://www.gametunnel.com/articles.php?id=620"&gt;http://www.gametunnel.com/articles.php?id=620&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So far I tried:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; &lt;a href="http://www.scienceoftomorrow.com/mmm_main.htm"&gt;Mexican motor mafia&lt;/a&gt; This mission-based combat car game is great. I was a big fan of the CarWars board game and here I feel like I am playing it again :-) I've awlays wanted to create a game like this one... I also really like the controls. It reminds be a bit of Freelancer because you control your vehicule with arrows, aim with the mouse and the guns simply follow the move (when in range). I've always found this was a very good way to implement fights in a vehicule game.&lt;br /&gt;&lt;li&gt; &lt;a href="http://www.master-of-defense.com/"&gt;Master of defense&lt;/a&gt; A very nice tower defense game.&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4277569160605660300?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4277569160605660300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4277569160605660300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4277569160605660300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4277569160605660300'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2007/07/game-top-100-independent-games.html' title='[game] Top 100 independent games'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5899452200349543133</id><published>2007-07-19T00:17:00.000-07:00</published><updated>2008-10-05T11:52:12.797-07:00</updated><title type='text'>[game] Ragdoll smasher</title><content type='html'>&lt;p&gt;&lt;br /&gt;I just released my latest small game: &lt;a href="http://games.aracknea-core.net/ragsmash"&gt;Ragdoll Smasher&lt;/a&gt;. It is based on a very stupid idea: Throwing a character in the air to break stuff. I was playing with character animation and ragdolls and it seemed to be the obvious thing to do :-)&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;A level is complete once everything fell on the ground. The goal is to throw the smallest number of characters. New structures appear as you progress through the game.&lt;br /&gt;You can &lt;a href="http://games.aracknea-core.net/ragsmash"&gt;download the game from here&lt;/a&gt;. There is nothing to install, just decompress and play. Please refer to the webpage for some more details.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;From the technical point of view, Ragdoll Smasher is based on ODE and some custom character skinning code. Everything is DirectX 9.0. The skinning is performed in a vertex shader - This is convenient but unfortunately imposes some minimal requirements in terms of GPU. (I am planning software skinning for the future, but I have a limited time budget).&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;This is my first experience with ODE. I must say everything went smoothly. The only difficulty I had is with joint constraints for the shoulders: Here two rotation axes must be constrained and this proves difficult with a 'HINGE2' (any tips welcome!). I should probably be using motors, but I came up with something working reasonably well by connecting two hinges with a small body in between.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;ODE runs in a separate thread. I enable vertical sync to give enough time to ODE to perform the simulation. I am also using variable step size - even though several webpages recommend not to, this works well in my case and it prevents the simulation to slow or accelerate with the CPU load.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Well, that's more or less all there is to say. Please post comments (good or bad) about the game - I hope you'll have fun with it!!&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5899452200349543133?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5899452200349543133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5899452200349543133' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5899452200349543133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5899452200349543133'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2007/07/game-ragdoll-smasher.html' title='[game] Ragdoll smasher'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-2786749465441436275</id><published>2007-06-24T10:27:00.000-07:00</published><updated>2007-06-25T00:11:56.651-07:00</updated><title type='text'>[GPU] Ocean simulation</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_fUxLAW_KeEM/Rn9oJssOiPI/AAAAAAAAAA8/-hpWtjWruoc/s1600-h/sea_sparkle.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;I have been working on my ocean simulation again - It's been a lot of fun to 'resurect' this code.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_fUxLAW_KeEM/Rn6p-csOiJI/AAAAAAAAAAM/LqLPeDT4524/s1600-h/sea3.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5079684320039176338" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp3.blogger.com/_fUxLAW_KeEM/Rn6p-csOiJI/AAAAAAAAAAM/LqLPeDT4524/s320/sea3.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The two main improvements are the addition of foam, and the 'sparkles' in areas reflecting the sun. I also added a very bad looking boat (ok, this will require more work ;-)&lt;br /&gt;&lt;br /&gt;I was afraid adding foam would be difficult, but actually the simplest approach turned out quite well. The foam is a (toroidal) texture mapped onto the sea.&lt;br /&gt;&lt;br /&gt;The texture I use is shown here - notice it is very dark - That's because I simply add its color to the sea color. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_fUxLAW_KeEM/Rn6rkcsOiKI/AAAAAAAAAAU/VGWRUr5y8vM/s1600-h/foam.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5079686072385833122" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_fUxLAW_KeEM/Rn6rkcsOiKI/AAAAAAAAAAU/VGWRUr5y8vM/s320/foam.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The foam layer is multiplied by a spatially varying control value. When the control value is 0 the foam is invisible, when 1 it is fully visible. The idea is to have foam appear where the sea surface becomes rough. To do this, I am simply using (1-sea_nrm.z) as the control value. It does work reasonnably well. One improvement could be to 'blur' this control value a little bit, but the current approach seems sufficient.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Last trick: To avoid obvious repetitions, I in fact add two versions of the foam texture with different scaling values. (eg. One is repeating every 2.7 units, the other every 3.14 units).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The second improvement is the addition of 'sparkles' of light. If you've been lucky enough to witness great sunset on the sea, you may have noticed all these small 'random' light sparkles in the distance. These are due to small waves reflecting the sun light directly into your eyes. I was hoping that adding sparkles would give a better impression of detail in the distance. (Especially because we do lose detail in the distance due to filtering of higher-frequency waves).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_fUxLAW_KeEM/Rn9oS8sOiRI/AAAAAAAAABM/-Pjj5wKJD24/s1600-h/sea_proba.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5079893579435772178" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp2.blogger.com/_fUxLAW_KeEM/Rn9oS8sOiRI/AAAAAAAAABM/-Pjj5wKJD24/s200/sea_proba.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The sparkles are generated in a post-processing step. First, I render the scene in a render target. I use this texture to compute a 'probability' for sparkle appearance. Basically, sparkles are likely to apear in areas reflecting the sun light.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_fUxLAW_KeEM/Rn9oSssOiQI/AAAAAAAAABE/Ux4Rw5byfhc/s1600-h/sea_sparkle.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5079893575140804866" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp1.blogger.com/_fUxLAW_KeEM/Rn9oSssOiQI/AAAAAAAAABE/Ux4Rw5byfhc/s200/sea_sparkle.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second, I render the sparkles in another render target. I use a random number generator and compare its output to the probability of appearance. If the random number is large enough a white pixel is output. Otherwise a black pixel is written. Of course the generated random numbers vary with time.&lt;br /&gt;&lt;br /&gt;This image shows the 'sparkle' layer which is directly added to the final result. I was quite happy with the result - even though it is perfectible. I think it is quite successfull in increasing the impression of detail on the ocean surface.&lt;br /&gt;&lt;br /&gt;To conclude, here is the final result. Hopefully you can see the sparkles even at this resolution.&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5079893841428777250" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://bp3.blogger.com/_fUxLAW_KeEM/Rn9oiMsOiSI/AAAAAAAAABU/m6PhKdTsop0/s400/sea2.png" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;Next I am planning to add the reflection of the boat in the sea and implement some more credible boat dynamics (not sure about this one - will depend on the gameplay).&lt;br /&gt;&lt;br /&gt;Of course I'd like to improve the boat model / rendering. My plan (in a world with no time contraints) would be to create a boat race - or a 'boat-war' game. So if you are a modeler please send me your best creations ;-)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-2786749465441436275?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/2786749465441436275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=2786749465441436275' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2786749465441436275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/2786749465441436275'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2007/06/i-have-been-working-on-my-ocean.html' title='[GPU] Ocean simulation'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_fUxLAW_KeEM/Rn6p-csOiJI/AAAAAAAAAAM/LqLPeDT4524/s72-c/sea3.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5942789123702352831</id><published>2007-06-23T04:49:00.000-07:00</published><updated>2007-06-24T05:08:22.183-07:00</updated><title type='text'>[system] Transfering my blog</title><content type='html'>I am transfering my blog to blogspot ...&lt;br /&gt;This is a first post to try it out.&lt;br /&gt;&lt;br /&gt;Cheers -&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5942789123702352831?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5942789123702352831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5942789123702352831' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5942789123702352831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5942789123702352831'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2007/06/transfering-my-blog.html' title='[system] Transfering my blog'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7136371116733868903</id><published>2006-11-22T04:51:00.000-08:00</published><updated>2007-06-23T04:52:23.561-07:00</updated><title type='text'>[game] BubblePool</title><content type='html'>BubblePool is a small game prototype (no cool graphics, no sound, just pure gameplay). It is a pool-like game with strange rules :-) Download it from &lt;a href="http://www.aracknea.net/downloads/bubblepool.zip"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7136371116733868903?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7136371116733868903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7136371116733868903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7136371116733868903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7136371116733868903'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2006/11/game-bubblepool.html' title='[game] BubblePool'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4596368528847870772</id><published>2006-10-21T04:52:00.000-07:00</published><updated>2007-06-24T11:34:27.103-07:00</updated><title type='text'>[tools] Adding cygwin to explorer context menu</title><content type='html'>Cygwin shells are a nice replacement for the standard Win32 console.&lt;br /&gt;However, I had no convenient way of opening a Cygwin console at a given location, in the spirit of the 'Open Command Line Here' XP powertoy.&lt;br /&gt;After playing with bash/rxvt I found a way to do this. Replace your C:\cygwin\cygwin.bat with the following lines:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;@echo offC:\cygwin\bin\bash --login -i -c 'cd "`cygpath %1`";rxvt -title \"%1\" -fg white -bg black'&lt;br /&gt;&lt;/span&gt;Then open an explorer window (assuming Windows XP), go into Tools -&gt; Folder options, File types, select (NONE) Folder, click on 'Advanced', 'New', give an action name such as 'Open Cygwin shell here' and select C:\Cygwin\cygwin.bat as the program to be launched.&lt;br /&gt;&lt;br /&gt;If everything went as planned, you should now have a working 'Open Cygwin shell here' line in your context menu for folders.&lt;br /&gt;&lt;br /&gt;Note: I am using rxvt to enable support for escape codes. I am looking for a way to have working escape codes in a Win32 console. If you know how, please drop me an email :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4596368528847870772?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4596368528847870772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4596368528847870772' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4596368528847870772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4596368528847870772'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2006/10/tools-adding-cygwin-to-explorer-context.html' title='[tools] Adding cygwin to explorer context menu'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-1829262982114749168</id><published>2006-08-09T04:53:00.000-07:00</published><updated>2007-06-23T04:54:31.940-07:00</updated><title type='text'>[GPU/Cg] tips of the day</title><content type='html'>&lt;p&gt;For those using Cg and D3D, there is a trap in the API.&lt;br /&gt;Using the following Cg(Fx) code:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;uniform sampler2D Tex = sampler_state {MinFilter = Linear;MipFilter = Linear;MagFilter = Linear;};&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The Tex parameter must be set with &lt;span style="font-family:courier new;"&gt;cgD3D9SetTextureParameter&lt;/span&gt; and not with &lt;span style="font-family:courier new;"&gt;cgD3D9SetTexture&lt;/span&gt;, even though according to the current documentation &lt;span style="font-family:courier new;"&gt;cgD3D9SetTexture&lt;/span&gt; is the one to be used for samplers. When using it, Cg returns an error ...&lt;br /&gt;Quick edit: &lt;span style="font-family:courier new;"&gt;cgD3D9SetupSampler&lt;/span&gt; can also be used. It does both &lt;span style="font-family:courier new;"&gt;cgD3D9SetTextureParameter&lt;/span&gt; and cgSetSamplerState.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-1829262982114749168?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/1829262982114749168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=1829262982114749168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/1829262982114749168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/1829262982114749168'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2006/08/gpucg-tips-of-day.html' title='[GPU/Cg] tips of the day'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4475952956157220954</id><published>2006-05-23T04:54:00.000-07:00</published><updated>2007-06-23T04:55:10.248-07:00</updated><title type='text'>[game] The end of modding ?</title><content type='html'>The recent &lt;a href="http://biz.gamedaily.com/industry/feature/?id=12604&amp;rp=49"&gt;ESRB rating change of Oblivion&lt;/a&gt; sounds like a very bad news for the moddoing community. It seems the ESRB has decided to judge the rating of a game according to user-created content; a bit like judging whether your web browser is suitable for children based on content it could display.&lt;br /&gt;&lt;br /&gt;While I agree that user-created content raises some questions about children protection, I don't see why Bethesda (or any other company making moddable games, for that matter) would be held responsible for this content. The content has first to be downloaded from somewhere: a web site. It is not available form the start. It is not distributed by the company (to my knowledge). So, it is very much like downloading mature content from the web: The browser software displaying it is not responsible for the content; whoever puts the content online is.&lt;br /&gt;&lt;br /&gt;There is no difference between a moddable game and a video player or web browser: All are displaying content. Whether the downloaded content is suitable or not for children is not the responsability of the company making the software. While this is obvious for a video player, the bad understanding of what a game and a moddable software are just prevent most people to see this.&lt;br /&gt;&lt;br /&gt;If things continue this way, I am afraid most game companies will start to remove modding tools -- And that will be a huge loss to the community (How many players started to learn coding by modding games ?).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4475952956157220954?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4475952956157220954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4475952956157220954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4475952956157220954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4475952956157220954'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2006/05/game-end-of-modding.html' title='[game] The end of modding ?'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7433230014988252204</id><published>2006-02-28T04:55:00.000-08:00</published><updated>2007-06-23T04:55:40.604-07:00</updated><title type='text'>[tools] GroupBar</title><content type='html'>I like to open many windows at once. As a consequence my Desktop is often crowded and it might be difficult to navigate among this forest of windows. Fortunately, a group at Microsoft Research has worked on this problem and released the &lt;a href="http://research.microsoft.com/vibe/groupbar.aspx"&gt;GroupBar&lt;/a&gt; (download from &lt;a href="http://spaces.msn.com/gamedevblog/javascript:function%20openEula(url)%7Bwindow.open(url," top=",left=,width=500,height=500,resizable=yes,scrollbars=yes,address=no,menu=no');%7DopenEula('/research/downloads/download.aspx?FUID=8bd3a415-2628-48e9-8305-f54bc5704d2f')&amp;quot;"&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;You can group windows together, hide/show groups in one click, and even save groups across sessions. It's really simple to use and it is a great addition to the windows desktop!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7433230014988252204?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7433230014988252204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7433230014988252204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7433230014988252204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7433230014988252204'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2006/02/tools-groupbar.html' title='[tools] GroupBar'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5141515176169335098</id><published>2006-01-08T04:55:00.000-08:00</published><updated>2007-06-23T04:56:05.605-07:00</updated><title type='text'>[game] MMORPG economy</title><content type='html'>It is quite fascinating to see how MMORPG player implement complex economic models in game. There is a very interesting asrticle on this subjet in &lt;a href="http://www.escapistmagazine.com/issue/25/3"&gt;The Escapist&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5141515176169335098?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5141515176169335098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5141515176169335098' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5141515176169335098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5141515176169335098'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2006/01/game-mmorpg-economy.html' title='[game] MMORPG economy'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5748964216688371589</id><published>2006-01-07T04:56:00.000-08:00</published><updated>2007-06-23T04:56:40.787-07:00</updated><title type='text'>[game] EVE online trailer</title><content type='html'>I just came accross the EVE online trailer:&lt;br /&gt;&lt;a href="http://myeve.eve-online.com/download/videos/"&gt;http://myeve.eve-online.com/download/videos/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's all made of ingame graphics with a great music behind. Really nice!&lt;br /&gt;Since Homeworld, I've always wanted to do a shader to generate these great space backgrounds - Well, I'll keep that in mind for after the Siggraph deadline ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5748964216688371589?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5748964216688371589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5748964216688371589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5748964216688371589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5748964216688371589'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2006/01/game-eve-online-trailer.html' title='[game] EVE online trailer'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-7516179380986937292</id><published>2005-12-29T04:56:00.000-08:00</published><updated>2007-06-23T04:57:20.415-07:00</updated><title type='text'>[GPU] anisotropic settings and tex2D / tex2Dlod</title><content type='html'>I remembered that I had already encountered an issue with the ansiotropic filtering settings (see my previous post) and wanted to follow up on it.&lt;br /&gt;&lt;br /&gt;I was doing texture lookups through indirections. The last texture was bilinearly interpolated but did not have a MIP-mapping pyramid (MIP-mapping was also disabled in the sampler). Using tex2D, strange artifacts were appearing along the texture coordinate discontinuities. (The coordinates were coming from a first texture sampled in nearest mode). It really looked as if the small explicit integration of anisotropic filtering was performed, even though filtering was disabled in the sampler. Of course, through indirection textures this integration could not work properly, thus producing artifacts. Now, the interesting part is that tex2Dlod was behaving properly. So replacing tex2D(Sampler,tc) by tex2Dlod(Sampler,float4(tc,0,0)), solved the problem. Unfortunately, tex2Dlod is usually a bit more expensive and also requires a few more instructions to set up the float4 before lookup. (A better solution might be to turn off anisotropic filtering in the driver settings - depending on whether you are planning to distribute your application or not).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-7516179380986937292?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/7516179380986937292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=7516179380986937292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7516179380986937292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/7516179380986937292'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2005/12/gpu-anisotropic-settings-and-tex2d.html' title='[GPU] anisotropic settings and tex2D / tex2Dlod'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-5785349518397070811</id><published>2005-12-27T04:57:00.000-08:00</published><updated>2007-06-23T04:57:54.493-07:00</updated><title type='text'>[GPU] it's all in the settings</title><content type='html'>Programming GPUs is fun, but it usually comes with a few headaches. So I decided to share some of my 'GPU adventures' to hopefully provide some usefull tips, and why not serve as a starting point for future discussions.&lt;br /&gt;&lt;br /&gt;But enough introduction. So here I am today, testing a fairly complicated pixel shader (500+ instr. of ps 3.0 code), comparing its results between a GeForce 6800 and a GeForce 7800. The great thing with the GeForce 7800 is that you double your frame rate 'for free' (of course, 'for free' refers to development time, considering the current price of the beast - as far as I am concern, it is well worth it :-).&lt;br /&gt;&lt;br /&gt;The good news, the frame rate is high! The bad news, the result has artifacts on the GeForce 7800. "So, " - do I ask myself - " by which miracle, the same code, on almost two identical cards (at least from a functionnality point of view) using the same driver and the same version of everything else, ends up producing a different result?". And of course, I tend to suspect something's wrong in my code (good assumption in most cases - remember the last time you thought you found a compiler bug?). I must be doing something wrong resulting in an undefined behaviour, which just happens to be ok on the GeForce 6800 and not on the GeForce 7800. Or maybe the internal precision changed? (do not laugh, I have some stories! but this is an entire other subject).&lt;br /&gt;&lt;br /&gt;Well, as it turned out - after some non neglictable amount of time spend looking for bugs in my code (which was not a total waste of time...) - the driver settings were different. Yes, the ones in the Windows properties pannel. I never really paid much attention to these, appart from antialiasing and vertical sync. And let me tell you: this was a big mistake of mine! Here you find overrides for such things as antialiasing (so far so good), anisotropic filtering (!), negative LOD bias clamp (!!). (Now I know why negative lod bias did not work). All were set on "Application controlled" on the GeForce 7800 and "Off" on the GeForce 6800. Well, turning "anisotropic filtering" off saved my day. Now, what I still don't understand, is how "application controlled" meant "On" in my case. None of my (D3D) samplers are set on anistropic filtering (most of them do not use MIPmap anyway) ... If someone happens to know, please fell free to leave a comment here.&lt;br /&gt;&lt;br /&gt;So, anyway, my point is, go in these settings now and turn off everything you don't need right away - especially if you are using shaders for image processing purposes. The scariest one (imho) goes to ATI, since you can actually change the way the Direct3D rasterizer treats texture coordinates to make it match the OpenGL rasterizer. If you use hlsl to do image processing, you probably understand what nightmare it would be if someones happens to run your code with this setting on! (in short, texture samples would no longer be mapped 1 by 1 with render target's pixels). Note that I am not complaining about having these settings - it's great to have felxibility - I just hope there is a way to check and enforce all of these from the application. As demonstrated by my today's adventure, it does not seem to be always the case.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-5785349518397070811?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/5785349518397070811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=5785349518397070811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5785349518397070811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/5785349518397070811'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2005/12/gpu-its-all-in-settings.html' title='[GPU] it&apos;s all in the settings'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-4181653087880199517</id><published>2005-12-18T04:57:00.000-08:00</published><updated>2007-06-23T04:58:21.232-07:00</updated><title type='text'>[game] Speed demo</title><content type='html'>I just came accross &lt;a href="http://speeddemosarchive.com/gamelist/FullList.html"&gt;"speed demo archive"&lt;/a&gt; which proposes videos of players finishing a game as fast as possible. I just watched the Morrowind one, and the player finishes the game in little more than 7 minutes. Quite amazing. Of course it requires using lots of tricks and exploits that you would not know as a beginning player. Still it is interseting, especially when you played the game yourself, to see how some gameplay elements are used in new and unusual ways.&lt;br /&gt;&lt;br /&gt;Also it is a great way to trigger good memories of your favorite games!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-4181653087880199517?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/4181653087880199517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=4181653087880199517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4181653087880199517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/4181653087880199517'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2005/12/game-speed-demo.html' title='[game] Speed demo'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3830350392070277486.post-6132004611166108625</id><published>2005-12-17T04:58:00.000-08:00</published><updated>2007-06-23T04:59:17.863-07:00</updated><title type='text'>[game] Oblivion</title><content type='html'>I've been watching &lt;a href="http://www.elderscrolls.com/downloads/media_movies.htm"&gt;Oblivion videos&lt;/a&gt;. As a big fan of Daggerfall and Morrowind, I was already impatient to play this game but now .... I just can't wait!&lt;br /&gt;&lt;br /&gt;The rendering looks great, with tons of parallax mapping, bumps, and very detailed textures. I was also quite impressed by the forest, which appears to be generated procedurally. It reminded me of the &lt;a href="http://www-evasion.inrialpes.fr/Publications/2001/DCF01/"&gt;work of Thomas DiGiacomo on forest rendering&lt;/a&gt;, even though I don't know if Oblivion uses a similar approach.&lt;br /&gt;&lt;br /&gt;Most of the game dungeons and environments are handcrafted (apart from the procedural forests), and I can't help thinking that synthesis methods could help the artists a great deal here. That has always been one of my researcher's dreams: automatic generation of huge realistic environment, but still driven by artist created content. I hope we'll be there one day: Imagine the games these guys at Bethesda could do with such tools!!&lt;br /&gt;&lt;br /&gt;Anyway, that's going to be an amazing game!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3830350392070277486-6132004611166108625?l=sylefeb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sylefeb.blogspot.com/feeds/6132004611166108625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3830350392070277486&amp;postID=6132004611166108625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6132004611166108625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3830350392070277486/posts/default/6132004611166108625'/><link rel='alternate' type='text/html' href='http://sylefeb.blogspot.com/2007/06/game-oblivion.html' title='[game] Oblivion'/><author><name>sylefeb</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
