blob: 491ddf7eb79c661634b126df0c033790fd28536d [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ray Simulation Analysis on the NetBeans Platform </title>
<link type="text/css" rel="stylesheet" media="all" href="../../../netbeans.css" />
</head>
<body>
<h1>Ray Simulation Analysis on the NetBeans Platform </h1>
<p>Published on <a href="http://netbeans.dzone.com/">NetBeans Zone</a> by Geertjan Wielenga</p>
<p><br /></p>
<p>
<img src="../../../images_www/articles/interviews/ray-simulation-analysis/rapsor-1.png"
style="float:right;margin-left:10px">
<em><a href="http://sourceforge.net/projects/rapsor/">RaPSor</a>
(Radio Propagation Simulator) is a framework for studying and testing
algorithms for ray based simulations, particularly in the area of radio
communication. This is an interview with its author,
Lilian Aveneau. Lilian is an associate professor (Maître de
Conférences) in computer science at the
<a href="http://en.wikipedia.org/wiki/University_of_Poitiers">University of Poitiers</a>,
where he works in the XLIM/SIC laboratory. His research area is
computer graphics, focusing specifically on 3D visibility and rendering
with ray methods, together with their usage in the context of radio
communication.</em>
</p>
<p><br /></p>
<h2>What's RaPSor's problem domain?</h2>
<p>
RaPSor is a platform based on the NetBeans Platform. It is used for studying
and testing algorithms for ray based simulations, mainly for radio
communication channel characterisations.
</p><p>
However, this kind of problem is not specific to radio problematics. A "ray" approach can be
used in computer graphics for image rendering using ray tracing
algorithms. Similarly, it is used in radio communication for coverage
simulation and prediction, even though some obvious specifics relate to
this scenario. For example, diffraction (scattering) is important in
radio communication, as well as specular reflection. Moreover, rays can
be used in acoustics for sound simulation in an architectural model,
such as when developing a new theatre or cinema project. And so on.
</p> <p>
For all these domains, a ray simulation is always based on some geometrical
recurrent constraints, which are solved using common knowledge. This is
the case in environment modelling, both for geometrical and topological
aspects and visibility (e.g., "Which surface is first intersected?"
"Are two given points occluded or visible to each other?"). These
questions imply an architectural design with ray optimizations.
</p>
<h2>That's very interesting. How did you come to create this application?</h2>
<p>
During my PhD thesis, from 1996 to 1999, I worked in both areas of computer
graphics and radio communication. The difference between these areas
relates mainly to the wavelength domain.
</p><p>
Then I began to develop two applications, one for computer graphics and one for radio
communication, using a common ray kernel written in C. These
applications are used by various people in production and in different
environments (Linux, IRIX, Windows).
</p><p>
When these users wanted to add new features relating to their research problematics, several
problems occured. Firstly, the application had to be compiled on the
various systems with different "glibc" versions, for each new user.
Secondly, the radio scientists had difficulties with computer science
and collaborative development, since they made modifications in their
local source code. Hence, we were not able to regroup all these
modifications into a single application.
</p><p>
For these reasons, I decided to begin a new application,
named RaPSor, with some specific design goals:
</p>
<ul><li> Modularity</li></ul><ul><li>Portability</li></ul><ul><li>Extensibility</li></ul>
<p>
A first version was developed in 2006, using new algorithms for the
kernel (since that's a great occasion to do new things, isn't it :-)).
I chose Java as the language, of course, firstly for its portability
and secondly for its simplicity (since radio users do not really
understand the unistd brk() function, do they? :-)).
</p><p>
At the same time, a student project was being developed using the NetBeans
Platform. It was named RenderTux and was a framework for GLSL shader
development and testing. Even though this student project ended up as a
profound disaster, it enabled me to look at NetBeans in a new way. I
began to learn more about it and then I moved the project to the
NetBeans Platform. This greatly simplified the modularity and
extensibility aspects of the project.
</p>
<h2>Let's see some screenshots!</h2>
<p>
OK. One thing we're doing is experimenting with a new Antenna model, which
is developed by another laboratory. We simulate the Antenna model in an
<a href="http://en.wikipedia.org/wiki/Anechoic_chamber">anechoic chamber</a>.
The receiver locations used in the real world are reproduced in this scene.
Only one big object, a metallic block, can be
seen in this context. Hence, only reflections and simple diffractions can
occur, as can be observed in these two screenshots:
</p>
<p><img src="../../../images_www/articles/interviews/ray-simulation-analysis/rapsor-6.png"></p>
<p><img src="../../../images_www/articles/interviews/ray-simulation-analysis/rapsor-2.png"></p>
<p>
The next two screenshots are, respectively, a 3d and a 2d view
of the same simulation. The simulations are in cover mode, which is a regular grid of receivers,
with a 1cm space interval between each receiver location.
</p>
<p><img src="../../../images_www/articles/interviews/ray-simulation-analysis/rapsor-3.png"></p>
<p><img src="../../../images_www/articles/interviews/ray-simulation-analysis/rapsor-4.png"></p>
<h2>How was the decision made to use the NetBeans Platform?</h2>
<p>
Ho, that's a great question. It was a July, a Saturday afternoon. I was
reading, on my terrace, the French translation of a wonderful John
Irving book, <a href="http://www.sun.com/books/catalog/rich_client_programming.xml">"The Fourth Hand"</a>, while listening to <a href="http://en.wikipedia.org/wiki/Hamlet_%28opera%29">the great Hamlet opera by Ambroise Thomas</a>. Then, though I think there was no correlation with <a href="http://www.natalie-dessay.com/">Natalie Dessay</a> or <a href="http://www.simonkeenlyside.info/">Simon Keenlisyde</a>,
a cloud began to rain on me. So I walked back inside while thinking
"and now, what should I do with my weekend?" (in french: "et
maintenant, bordel, je fais quoi ?"). I do not remember exactly why,
but it was at that precise moment that I decided to move RaPSor to the
NetBeans Platform.
</p>
<h2>Wow. Really?</h2>
<p>
No, in fact I do not remember how the decision was made. One day I decided to
do so and now it is done. But I like Irving, Thomas, and so on, so the
above is all true. ;-)
</p>
<h2>What are 3 things that you found very useful about using the NetBeans Platform?</h2>
<p>
Three things? Probably many things can be cited. May be the most useful are:</p>
<ul><li>
<b>Lookup</b>. Allows the user interface to automatically find user add ons.
</li><li>
<b>Autoupdate</b>. Allows me to send RaPSor kernel updates in the same way as NetBeans IDE does.
</li><li>
<b>Wizards &amp; templates in NetBeans IDE.</b> Facilitates module integration to the RaPSor (and so the NetBeans) platform.
</li><li>
<b>Ease of extending NetBeans IDE with new tools.</b> Simplifies
NetBeans Platform application development. Three kinds of things users
can add to RaPSor in this way: Antennas, Simulators, and Exploitations.
</li></ul>
<h2>Let's see another screenshot!</h2>
<p>
OK. Below you see an indoor simulation in a real environment, the <a href="http://www.ester-technopole.org/">Esther building at
Limoges</a>. You can see we're using reflection and transmission at 2.5Ghz. Roughly speaking,
this could be seen as a Wifi simulation.
</p>
<p><img src="../../../images_www/articles/interviews/ray-simulation-analysis/rapsor-5.png"></p>
<p>&nbsp;</p>
<h2>What are some things that could be better about the NetBeans Platform?</h2>
<p>
From my experience, it's very easy to begin with the NetBeans Platform, but
we quickly became embarrassed with the many how-to-do problems we
encountered.
</p><p>
It is a big platform, with an API that must be
studied in order for it to be used. For instance, I'm not sure I really
understand how the DataObject/FileObject/File structure really works.
</p><p>
More generally, my main documentation is the book <a href="http://www.sun.com/books/catalog/rich_client_programming.xml">"Rich Client Programming: Plugging into the NetBeans Platform</a>,
the second half of which contains a lot of information for dedicated
users who want to add new language support to NetBeans IDE, not really
for end NetBeans Platform developers that want to create new
applications, though that is covered in the first half of the book. (A
newer book on the NetBeans Platform is "<a href="http://apress.com/book/view/9781430224174">The Definitive Guide to the NetBeans Platform</a>".)
</p><p>
I began with the NetBeans Platform when NetBeans 6.0 was released (and so with Java 6), when the <a href="http://platform.netbeans.org/tutorials">NetBeans Platform Learning Trail</a> was still being written, so at that time up-to-date information was not easy to find.
</p><p>
I think that, maybe, more use cases of complete sample applications (such as the <a href="http://platform.netbeans.org/tutorials/nbm-crud.html">NetBeans Platform CRUD Application Tutorial</a>)
should give more efficient information for newcomers to the NetBeans
Platform. And French documentation would be of help to French
developers like me, too!
</p>
<h2>Would you like code contributions from the broader Java community and, if so, in which areas of the application?</h2>
<p>
Contributions are welcome, such as new shaders for 3D objects representations, new
geometrical models, such as non-planar surfaces, like cylinders, and
new simulator/antennas/exploitations modules.
</p><p>
More generally, any comments on the architecture and the code itself are very welcome! ;-)
</p><p>
<h2>What's the future of RaPSor, i.e., what new features will be added and when?</h2>
<p>
Animation is the first big new thing. The project aims to add the fourth
dimension to the simulation, as was done in the RaPSor kernel.
</p><p>
But this will be done only after some major modifications inside the kernel itself have been completed:</p>
<ul><li>
I discovered recently some ways in which Java is different to C. For
example, some strange things can be done using design patterns (and
other strange things). So, I think that the RaPSor kernel needs to be
improved in various ways, with backward incompatibilities. An example
is in the class "org.sic.rapsorapi.kernel.EField", for the constructors
part. Other users do not know exactly which constructor must be chosen
because I use "overloading" (a very bad thing it is! I hate C++ in part
due to this point, the second reason is the slaughter concept blends).
Then I must suppress all the public constructors, replacing them with
fully qualified static methods (as Yoda says: "Factory Pattern is
this"). This is a minor thing, but many such examples exist.
</li><li>
More important are the architectural design problems. The link between a Ray
(the main class) and the electrical field is not correctly handled. A
ray can be a visibility ray or can have acoustic purposes too. So
currently, wrongly, a Ray carries an EField instance. This is a
conceptual error of RaPSor that I need to fix.
</li></ul>
<p>
I must correct these problems, after which I can add animation, as the fourth
dimension. At that point I will be able to realize my initial weekend
idea: watch 3D wrestling (John Irving is also a fan), while listening
to Natalie Dessay in a virtual cinema using Wifi for loudspeaker
connections, while wearing 3D glasses for the 4D experiment!
</p>
<h2>Related Links</h2>
<ul><li><a href="http://sourceforge.net/projects/rapsor/">RaPSor (SourceForge)</a>
</li><li><a href="http://platform.netbeans.org/">NetBeans Platform documentation</a>
</li><li><a href="http://www.sun.com/books/catalog/rich_client_programming.xml">Rich Client Programming: Plugging into the NetBeans Platform</a> (book)
</li><li><a href="http://apress.com/book/view/9781430224174">The Definitive Guide to the NetBeans Platform</a> (book)
</li></ul>
</body>
</html>