SOCIS 2013 student application

Hello,
I am enrolled at University of Pisa (Italy) where I attend a second level
degree course in Mathematics.
I would like to gain experience with geospatial software and WebGL api, so you
can understand my interest for Cesium framework. I think that developing one of
your proposed ideas for the SOCIS program would be an opportunity for gaining
such experience.
After reading your project ideas for SOCIS and the related reference documents,
I am oriented towards the 'Orbit Tuner' or the 'Particle System' ideas and
I would need your help for getting more project details and producing a good
project proposal.
I would have contacted you earlier but the fact that student application period
started immediately after the list of selected organization has been published
has not helped me.
I am also wondering if the forum is the right place for discussing of my
application or on the contrary I should contact project mentors privately.
I am asking for that because I do not see any other student post on this
subject.
I will provide you with my programming knowledge and programming experiences
in a later post.

Kind Regards,
-- Marco

Hi Marco,

Most of the Cesium mentors for SOCIS are subscribed to this mailing list, so they will see your message. Feel free to post here or email them directly with any more specific questions you may have. In addition to your project proposal, you can include your related previous experiences as part of the student application on the SOCIS website.

Regards,

Kristian

Hi Kristian,
I already performed the following steps:
I read the wiki documentation about Cesium Architecture, Geometry and
Appearances, Contributor's Guide and JavaScript Coding Conventions.
I played with several Sandcastle examples, and I browsed the source code of
some Core and Scene interfaces.
I forked the Github Cesium repository and built the project successfully.
As a proof of my actual understanding of the Cesium API I tackled the
issue 416: 'TileMapServiceImageryProvider extent does not work'.
I committed a proposed fix to my fork [1]. The fix I implemented intersect
the extent of each tile (of the imagery service provider tiling scheme) which
contains some part of the imagery with the imagery extent.
However I noticed that the extent of each cached imagery (an imagery for each
tile) has to be the extent of the tile and not the extent of the intersection.
I committed also a Sandcastle example (Test Imagery Layer) that I utilized for
testing.

[1] https://github.com/mcecchetti/cesium/commit/a5ca8ae18b4ee4cab9cf77df8d9ffc27873cbbbd

I have not yet taken a final decision on which project idea to choose,
so I present some thoughts on both ideas. At the end there is a list of
my programming skills and experiences.
Any suggestions Cesium's mentors can provide me for making my SOCIS application
stronger is welcome.

*Orbit Tuner Application*

Deliverables:

1) A geometry for creating an ellipse boundary on a given plane.

2) A user interface based on HTML5 for setting up the orbit parameters and
visualization options.

3) The user interface must have support for multiple orbits.

4) A satellite object represented by an image or a solid geometry can be
attached to the orbit and a simple simulation of its motion can be performed.

5) Source code will be cleary documented.

6) Tests will be performed on major browsers and platforms.

Questions:
1) Are there more feature I should implement ?
2) I think that such a project can be completed in less than 3 months.
Am I missing something ?
3) I see that this project has not yet a mentor, could be possible to have one ?

*Particle System API*

Deliverables

1) An Emitter class supporting at least a sphere, a disc, a plane and a line
domain used together with a probabilistic distribution for generating the
initial particle attributes (position, velocity, color, ...).
Particle attributes will be stored into textures.

2) Supporting several kind of Actions: particle creation, particle killing,
force actions (gravity, wind, ...), particle position and velocity updating.
(through an Euler iterative integration method)

3) Collision detection algorithm and collision regions (at least a BouncePlane
object).

4) Source code will be clearly documented.

5) Performance tests will be performed on major browser and platforms.

6) (optional) A sort algorithm based on viewer distance.

At present, I read several documentation, included a book about WebGL, anyway
I have not yet gained a complete understanding of the problem.
For the API interface the one sketched on Cesium wiki page is sensible and we
can always rely on McAllister's Particle System API and on the Flint particle
system project.
The collision algorithm will be for sure the most challenging part especially
from a performance point of view.

Development Experience

In 2008 I contributed to the Inkscape project. My contribution was about
implementing some geometry routines in C++ for lib2geom a 2D geometry library
born inside the inkscape organization and that has become the core geometry
library of Inkscape. [1]

In the last two years I contributed to the Document Foundation by implementing
a SVG export filter for Impress, the presentation program of the LibreOffice
suite (see [2], [3]).
The result of this project is that the user get a complete feature rich
presentation in a single SVG document that can be displayed in any enough
modern browser.
This result has been achieved by embedding a presentation engine implemented
in JavaScript into the SVG document.
This script is more than 10000 lines of code and one of the most challenging
and interesting part was the porting of the Impress animation engine from C++
to JavaScript.
For more details on this project you may give a glance to the log book I used
to update weekly [4]. For a presentation sample you can look here [5].

I also implemented a multi-signature version of the Boost.Function library,
indeed it is a thin wrap around a boost function class. I never presented it
for review but the latest version of the source code is on the Boost Sandbox
[6], It was a good meta programming exercise. Documentation and tutorial can be
found at [7].

Academic Experience

My university courses are essentially on mathematical subjects however I
applied for a course in programming and data structure and a course in
numerical analysis.

Why me ?

First off I have worked on a large code base as the one involved into the
LibreOffice project, so I am used to utilize git and in working with a team.
In [2] and [3] I ported an animation engine from C++ to JavaScript that should
be a proof of a good knowledge of the JavaScript language and of my skill in
understanding source code of a not so trivial complexity.
Moreover from [4] you can get an idea of my habit to detailed log the delivered
source code. Finally [7] should be an example of how much I am good at writing
clear documentation.

[1] http://tinyurl.com/yz4gmnj
[2] http://www.google-melange.com/gsoc/project/google/gsoc2011/mcecchetti/19001
[3] http://www.google-melange.com/gsoc/project/google/gsoc2012/mcecchetti/42003
[4] https://docs.google.com/document/d/1GSLPSIWRGSDTSi69dT9Te8tRyTJcAekxT7scoCoGO2M/edit?usp=sharing
[5] http://users.freedesktop.org/~mcecchetti/svg-export/samples/final-sample.svg
[6] http://svn.boost.org/svn/boost/sandbox/overload/trunk/
[7] http://svn.boost.org/svn/boost/sandbox/overload/trunk/libs/overload/docs/html/index.html

Hi Marco,

We received your applications for both the Orbit Tuner and Particle System projects and will take the additional information you provided here into account when making our decision. In the meantime, we encourage you to open a GitHub pull request with your fix for issue 416 so the other Cesium developers can review and potentially integrate your changes.

Thanks,
Kristian

Hi Kristian,
since I have not received any reply before the student application deadline I decided to apply for both projects.
I hope there will be the time for discussing of that during this week, before a final decision has been taken.
I opened a GitHub pull request [1] as you required.
One question: do you have an IRC channel ?

[1] https://github.com/AnalyticalGraphicsInc/cesium/issues/1010