Offline Web App for GSoC

Hi,

I am new here and wanted to participate in GSoC this year. I went through the list of ideas and I am particularly interested in the Offline Web App support project.

I would like to know the particular details for this project and how should I start with it?

Thanks,

Sankha Narayan Guria

Hi,

Thanks for your interest. I believe student applications open on the 22nd of April, but in the meantime, areas to investigate in the code are the ImageryProvider and TerrainProvider systems. The current implementations load tiles via HTTP, but for offline support, tiles will need to be stored and retrieved from one of the HTML5 offline storage systems mentioned in the idea description. Part of the project will be to research and investigate each of those storage APIs to see which one has the best user experience and cross-browser support.

thanks,

Scott

Hey guys,

I'm Laurentiu and I am excited to contribute to Cesium.
I know I'm quite late to the party, but what can you do...

I have always felt the need for offline.. everything. And I really feel like I could take this to the next step. I am kind of picky on what I work on, so I am glad to have found this project. There are a lot of cool ones, but I sense this is the one for me.

I am one of the Grand Prize Winners of last year's Google Code-in, which is like GSoC, but for under 18 year olds, and with a lot of smaller 'tasks' as opposed to one big 'project'. I consider that the fact that over a period of 2-3 months (winter), while I also had high school projects (and Christmas and stuff), I managed to be one of the top contributors and eventually got picked as a winner shows a great deal of determination. That proves, in my opinion, that I will give my best to this project.

I am eager to hear back from you guys.

Cheers!

PS: do you have IRC or something?

Feedback? :smiley:

http://www.google-melange.com/gsoc/proposal/review/google/gsoc2013/laurentiu_ion/12001

i built a Node.js simple cesium server:

https://groups.google.com/forum/embed/?place=forum/cesium-dev&showsearch=true&showpopout=true&hideforumtitle=true&parenturl=http%3A%2F%2Fcesium.agi.com%2Fforum.html#!searchin/cesium-dev/cesiumserver/cesium-dev/1ck7OYyKyrY/mUS1GpIog0YJ

What you could do is to create a terrain server with the same API as one of the other providers using the Node.js server instance and then just create providers that point to localhost. You can still store the files locally and serve them using Node, without having to worry about creating the code with local storage options (though if you have time it’s certainly a worthy pursuit).

TJ - offline support goes beyond terrain. We also care about imagery, vector data, etc. For me, the most common use case is that I need to give a talk at a conference, but I don’t trust the internet access, so I want to run the demo local with the most painless possible setup, e.g., perhaps run the app in a record mode first.

Patrick

Patrick,

All this should be possible without much pain using Node, as long as the data is available in a local database then you can call it from Node using one of the many ORM (or direct) database access libraries, or just call the files using a universal naming scheme.

If you want me to work on building this up, I’ll just need to be pointed towards the entire set of requirements.

-TJK

Thanks for the offer TJ. This isn’t exactly my area of expertise but I don’t think node is appropriate here. We are all about frictionless deployment and no barrier to entry, and requiring users to use node to have offline support doesn’t seem to fit the bill. Think about the typical Google Maps user - what would they want to do? The simplest thing possible.

Patrick

Keep in mind the user can’t run off the filesystem directly, they need some kind of local server software. Possibly we could ask them to use the Jetty server that you get from “ant runServer” in Cesium. But we do have an old copy of Node hanging around in cesium/Tools, so it’s fairly low-barrier to just call that.

–Ed.

Why can’t we run off the filesystem? I thought that was the whole point of local storage and friends. If we really do need a server, then node.js is fine, of course. I just find it hard to believe.

Patrick

Ed,

Node.js is a local webserver (among other things).

Patrick,

You can package Node up inside a platform specific executable/archive, so it’s a no-install type of deal. They don’t have to know it’s Node, but all the code you write can be used both server/client side, really cutting down on the amount of code you have to write to get everything just the way you want it. I’ll show you what I mean when I get done with my demo.

-TJK

Patrick, not sure what I was thinking. Of course the plan is to use offline web apps with the manifest file and such to make this work without a local server. I think I was saying that it can’t be implemented with simple “file://” links, due to XHR being forbidden against the local filesystem, but the manifest file works around that by explicitly allowing certain files to be “fetched” while offline.

TJK, yes I know Node.js, my comment was unclear and wrong but I do know Node.js is a local server. Both it and Jetty ship with Cesium, in the Tools folder.

   --Ed.

Ed,

After re-reading your comment I get what you were saying.

It’s very easy to do some file stuff with Node:

http://nodejs.org/api/fs.html

It can mimic much of the POSIX spec on windows which can come in handy.

You’re going to run into issues with using either localStorage or IndexedDB due to size issues cross-platform, and the manifest file will only work if you are first online so that the files can be downloaded (http://www.html5rocks.com/en/tutorials/appcache/beginner/). If you start offline you’re going to be out of luck.

I think that a platform-specific app that:

-Starts a Node process with a local server that can read the files stored on the local device

-Makes available a modern browser running without install (like http://commondatastorage.googleapis.com/chromium-browser-continuous/index.html).

would probably be our best bet. I’m already working on a demo that hopefully will be ready soon.

r/TJK

Also, if you wanted to use the fileSystem APIs:

http://caniuse.com/filesystem

This is another way to make standalone applications in JavaScript:
https://github.com/rogerwang/node-webkit

As I understand it, it’s node.js + WebKit (including WebGL) running in the same process/JS environment. I haven’t used it though.

Regards,

Tom