-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Google Summer of Code Ideas 2015
Cesium is an open-source JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin. It uses HTML5 and WebGL for hardware-accelerated graphics. Our code has shipped to 10's of millions of people in the same day and is used all around the world in fields as diverse as GIS, aerospace, real estate, sports, and entertainment. The Cesium community is growing rapidly; check out the activity on the forum and @CesiumJS.
We have a culture of writing clean, peer-reviewed, tested code. Our developers are experts in their fields; they write books, create open standards, and present at international conferences. We look forward to helping you grow your skills and write beautiful code that has wide impact.
When we look at student applications, we look for students who love to dive deep into a problem, research it carefully, experiment with potential solutions, and then code, test, and document the best implementation. We like to see passion, craftsmanship, and conscientiousness.
To get your GSoC application noticed, take an afternoon or a weekend and write a small demo using Cesium, post it to GitHub, and then include a link in your GSoC application. Get up to speed by reading the Cesium tutorials, then get inspired by the code examples and demos.
If instead of writing a demo, you would rather make a contribution to Cesium itself to help your GSoC application stand out, see the Cesium Contributor's Guide and list of beginner issues. Pick something that interests you, comment on the issue to get advice, then send us a pull request when it is ready. Note that we can't merge a pull request until you submit a signed Contributor License Agreement.
If you need help, post a question to the Google Summer of Code 2015 thread on the Cesium forum. The core developers are active on the forum and will be happy to respond.
Technologies and Tools We Use
JavaScript, HTML, CSS, WebGL, GitHub, Eclipse, Chrome, Firefox, Android, iOS
(We don't expect you to know all of them).
## Cesium demos pack
Do you like to learn new APIs, write demos, and have your work in the spotlight? In this project, we will write a series of demos that showcase Cesium with other popular JavaScript libraries. Each demo will be pretty small, perhaps a few 100 to a 1,000 lines of code, and will serve both as a showcase and a reference implementation for developers to learn from.
Potential ideas include:
- Vector graphics - combine Raphael and Cesium to demonstrate adding SVG charts and graphs to Cesium.
- Geospatial analysis - demonstrate Cesium as a visualization platform for geospatial analysis (e.g., point in polygon, Triangulated Irregular Networks, etc.) using Turf either on the client or on the server using Node.js.
- Physics - Creating some cool effects by combining Cesium with a physics engine like Oimo.js, cannon.js, or ammo.js.
- HTML5 - HTML5 has lots of interesting APIs that can be combined with Cesium. What would you do with the video and camera APIs? On mobile, how would you use the geolocation and accelerometer APIs?
- AngularJS - show how Cesium can be used with AngularJS.
- Like toying with hardware? Why not write some JavaScript that runs Node.js on the Tessel microcontroller to feed data from some of its add-on modules (camera, climate, GPS, etc.) to Cesium for visualization?
- Data visualization - Combine D3 with Cesium for temporal geospatial data visualization like this demo.
- WebSockets - Web sockets allow two-way client-server communication. What would you build with them in Cesium? Consider John Madden annotation synchronized between multiple Cesium clients!
- Three.js - demonstrate how Cesium can be combined with the Three.js WebGL library perhaps by syncing camera views between Cesium and Three.js canvases, overlaying a translucent Three.js canvas over Cesium, or embedding Three.js in Cesium's render loop.
- WebCL - What would you do with hundreds of cores and the ability to launch thousands of threads? WebCL exposes the GPU - and its massively parallel processors - to JavaScript (browser or with Node.js). How would combine this with Cesium?
- Cesium on the server - Test out node-webgl. Is it robust enough to run Cesium on the server? Can we make it robust enough? What would we do with it? Perhaps server-side rendering of massive models or for clients without WebGL?
- Vector tiles - Use Cesium's QuadtreePrimitive to render vector tiles, such as the ones from MapBox. What the are the limitations of 2D vector tiles in a 3D viewer like Cesium? How could the vector tiling be improved?
Tip: if you are interested in this project, to best way to have a strong GSoC application is to code a quick demo (start here), post it on GitHub, and include a link in your GSoC application.
References
- Cesium tutorials
- Also check out the tutorials for the other libraries you plan to use.
Skills: JavaScript, HTML, CSS, UI/UX, git, Node.js, various front-end and back-end libraries
Level: Beginner / Intermediate
Mentor: Patrick Cozzi: @pjcozzi, [email protected]
Backup Mentor: Matt Amato: @matt_amato, [email protected]
## Compass / Navigation WidgetCurrently, Cesium allows users to rotate the camera around a point on the ground by middle-click dragging or by holding CTRL while left-click dragging. It would be extremely helpful to expose this interaction in a more novice-friendly manner - as well as indicate which direction is North - with a navigation widget.
Students may optionally use the navigation widget in the Cesium-based application National Map as a starting point and modify it to:
- fit nicely within the Cesium architecture
- work in 2D and Columbus View
- accommodate any other suggestions or requirements from the Cesium committers and community
References
- Camera tutorial
- Camera reference documentation
Skills: JavaScript, HTML, CSS, UI/UX, git, Knockout, vectors and matrices
Level: Intermediate
Mentor: Kevin Ring, [email protected]
Backup Mentor: Dan Bagnell: [email protected]
## Refactor Cesium SandcastleCesium Sandcastle is a great application for learning, demoing, and experimenting with Cesium. However, since it was one of the earliest Cesium applications written, it has a few drawbacks:
- It lacks responsive design, making it useless on small tablets and mobile.
- It looks like a traditional application instead of a modern web-app.
- It depends on Dojo (and is the only thing in Cesium that does so).
This project would rewrite Sandcastle to address these issues. Bootstrap will be used for responsive layout, data-binding should be introduced to the application via Knockout, and (since Bootstrap already depends on it), jQuery can be used sparingly in places where Dojo may have been using some heavy lifting. The end result is a new Sandcastle which is easier to use, treats mobile as a first-class application, and brings more polish to our demo functionality.
If time allows, we would also like to enhance Sandcastle with some additional features:
- The ability to load external examples, such as GitHub gists, or allow them to persist them via url.
- The ability to export an example as a standalone application
- The ability to persist examples on the server, perhaps anonymously, similar to jsFiddle or glslsandbox. This would also include an extended gallery mode for browsing and finding demos and examples.
References
Skills: JavaScript, HTML, CSS, UI/UX, Bootstrap, Knockout
Level: Intermediate
Mentor: Matthew Amato, [email protected]
Backup Mentor: Ed Mackey
## Suggest your own idea
We're excited to hear your ideas for projects that would benefit the Cesium community. Perhaps you're interested in WebGL and JavaScript optimization, and want to improve the core engine? Perhaps you are passionate about geospatial data formats and want to write new loaders for Cesium? Or perhaps you are excited about WebVR and want to create the ultimate virtual reality app with Cesium?
Whatever it is, we want to hear about it! Pitch your idea and find a mentor by posting a short description to the Google Summer of Code 2015 thread on the Cesium forum.
Tip: the best way to get a potential mentor's attention is to code a quick prototype (start here), post it on GitHub, and include a link when you post to the Google Summer of Code 2015 thread.
References
- To get inspired, check out the Cesium tutorials, code examples, demos, roadmap, and beginner issues.
Skills: Depends on the project
Level: Beginner to Advanced
Mentor: Find one on the Cesium forum by posting to the Google Summer of Code 2015 thread
Backup Mentor: See above