Hey there, just wanted to give you a shout out and say I appreciate the work you're doing here. I'm working on a webapp that I feel is perfect for ccn and this will help a lot. I realize you're in active development, just like the actual ccnx protocol, but I was wondering what the 'usability status' of this project is... are we talking 'it works, but it's not pretty and it crashes all the time' or 'well, my ping came back at least' or 'this is a rough outline for how this could function'?
Thanks again, and let me know what I can do to help.
Hi, thanks for the ping. I've got a smallish roadmap here:
I'd like to get a more detailed plan together, as I would like to be using JS as my main development language, and Node as my main platform.
In terms of existing functionality, the usability status of CCNx is 'very stable' and 'functional'. To access the protocol via JS, I need to complete the bindings between JS and CCNx C api so that one can use JS and the web standards to build web apps on top of CCNx. So this package in its current form will handle installation and will give you a simple controller to start up and shut down CCNx. I'll post some updates on my roadmap so that you can get an idea where there will be more there that is useable.
Cool. Thanks for getting back to me. It's good to know CCNx is useable... I was getting that impression from the fact I was able to install it, but with no other nodes to connect to it's hard to know exactly where it stands. The docs are informative, but super dense.
Good point. I'd be interested to hear what type of docs you'd find useful with CCNx? I'm thinking minimalist ... so maybe a single web page of recipes for various things you can do with the CCN C and Java APIs, plus some examples of single and multi-node set up.
As far as what needs to go into this first version of ccn4bnode, I think I need to wrap the C client api in JS. That should get me to a solid first release. Beyond that, I'd like to focus on building some great demo apps.
BTW, there is an NDN-js project that exists as a websockets based impl of CCN. I think it's a good approach and you might want to start there since they've got something you can prototype with now.
oooh thanks for the headsup on NDN-js. I agree with the great demo apps idea. Right now most of my attention in on Smallest-Federated-Wiki, also on github. My thinking is that NDN or CCN would greatly improve search functionality, and integration with SFW would allow for a ton of functional apps to be built on top (video/audio streams come to mind, as does using NDN as a 'request-protocol' for barter/volunteer networks, though the latter is a bit far in the future for my project) I'll have to get back to you on the ccnx docs. A great place to start is the general protocol description, but as far as condensed API docs go we'll have to write em ourselves.
I'm going to take a look at your wiki project. Was thinking about this as one of the early projects to try and build a wiki backed by CCN. If you can get yours working with CCN it would be very fun to replace our existing wiki with something built with CCN. I'd like to redo the web infrastructure for CCN.org using CCN.
I have some projects in mind for the NGO/non profit stuff in developing world that would benefit from your SFW approach.
For clarity: SFW is not my project, it's actually the brainchild of Ward Cunningham, the original wiki inventor, but he's been gracious enough to open source it so I forked his repo. Check out his master branch for the most lively discussions/issues/up-to-date code. It does seem perfect for content creation and management in the developing world; i actually suggested it to a fellow on the r/darknetplan subreddit for a mesh he's going to put together in Myanmar. I'm personally working on a sfw deployment based on the idea of local neighborhood social networks (think Nextdoor.com meets *diaspora). I'll get you a link as soon as we've got something halfway presentable.
Speaking of up-to-date code, ward just began implimenting a hook/api for SFW that spins up a node/express instance in parallel to the main SFW server (at least that's my understanding, I'm a newb as far as understanding the details of these things) so that might be the place to look for a way to plug in ccn4b.
Oh, and a killer-app idea that has to do with my neighbornet-idea would be an implimentation of CCNchat that auto-generates chatrooms based on html5 geolocation... anyone can log in and immediately be chatting with anyone nearby.
What NGO's/Nonprofits do you work with?
Ok, cool, SFW sounds good. And the node connection is great. I've shied away from Express because I wanted to limit the number of external dependencies and keep a stable code base (express changes rapidly). Web server/fwk doesn't need to constantly be in flux.
I dig the idea for the geo-local web chat. Original concept that I did with Node.js was ad-hoc classrooms based on a named "channel" that you could jump into and teacher could send content like videos and images to students. I'll open source that code soon. If I could rewrite it without long polling, base it on js.js (my server), and embed hooks to ccn4bnode (once it is functional), this would give a CCN chat stayle + content sharing/sync.
I've been working with a new project called SMILE Consortium focused on inquiry based learning. We are non-profit.
I hadn't considered that aspect of express. The server.js hook for SFW is very fresh (less than a week old, if I'm not mistaken) so we'll see how it evolves, and what other methods people come up with.
the ad-hoc classroom idea is great. Part of my overarching goals for NeighborNet are to develop innovative ways of sharing and exchanging aptitudes (I use the word aptitude because it fit's nicely in an acronym). I'm trying to start out by using the wiki format to crowd/opensource guides and tutorials on programming. Basically, rather than take a bunch of programmers and convince them to be idealists, I'm thinking it'll be easier to take a bunch of idealists and teach them how to code. It'd be really cool if we could work together to get that ccn-classroom implimented through SFW. ccnx has an app for VOIP, doesn't it? The coup de grace would be a way to distribute live video, though recorded lectures would also be killer.
I checked out SMILE Consortium, and I like the thinking there. I'm a bit of an autodidact myself. Have you heard of DuoLingo? It's a language learning platform that teaches new languages by having students translate real content in progressively larger chunks, and comparing results programmatically (similar to, and developed by the folks that innovated reCaptcha). I've had it in my head that the same approach could be used to teach programming, starting with commenting and annotating open-source code, and moving on building solving progressively harder github issues, and then as one progresses to their second language, they could port open-source software from a language they know to one they're learning by way of practice.
And now I've officially rambled to an excess. thanks for lasting through it.
Yes, the popular node modules get built on top of a lot of bleeding edge dependencies, so it can be risky to assume a module will always be stable or will always be supported by the author.
Where I can learn about NeighborNet project?
Would be interested in discussing a CCN classroom and looking at the different learning tools/apps that might need to exist to make it a useful approach. I believe there is a general problem space that can be satisfied for ad-hoc collaboration tools that don't require formal infrastructure to run. On my list I have chat, video conf, audio conferencing, photosharing, presentation tools, and content syncing/share (dropbox without dropbox). Others?
As far as general purpose ccn edu-tools, I feel like you've got the bases covered. That said, depending on the field that one is learning/teaching in, the possibilities are endless for more specific tools. A few examples:
Collaborative consumption apps for sharing tangible tools (wrenches and oil pans for aspiring mechanics, brushes and easels for new painters, instruments for musicians, space for practice...)
Mentor-finder for those areas of expertise that really require one-on-one guidance (you could argue that one-on-one guidance is useful in any learning endeavour, but there are some cases where I see it as make or break: artisan trades, business start-up, music)
Funding for extended educational investment: This is a big one learned from personal experience... The primary edge that structured institutional education still has over ad-hoc methods is that you can get loans and grants for it, which allow you to focus on your education rather than on filling an empty stomach. We need a kickstarter for autodidacts.
I could probably think of a few more specifics, but in the end I think the real challenge is going to be providing a means by which teachers and learners can work together to create whatever tools they need, rather than provide everyone with a standard set. To that end, the first domino could be a set of tools and resourced dedicated to helping people 'code their classroom'.
Thanks for asking about NeighborNet, I've got some content up at http://nei.ghbor.net
It's super fresh, not super organized, and the more I write, the more loose ends I create. for the bleeding edge content, you can checkout my site in the developers wiki: http://ryan.developers.nei.ghbor.net
Also, if you'd like, your more than welcome to create a wiki on my farm, for whatever purpose: I've got a server dedicated to this project, and plenty of diskspace to spare; go nuts. All you have to do is think of a subdomain under nei.ghbor.net:2013 or developers.nei.ghbor.net and type it in. the server will auto-generate a new wiki for you and you can claim it with any openID account. Be warned; it can be a bit buggy at times, if you have any questions though I'm here to help, and theres a list of workarounds at http://nei.ghbor.net/view/obscure-workarounds
Update: I redid my hostfiles and portforwarding so the 2013 is no longer necessary, and edited the links above. feeling like kind of a dumbo for thinking it was in the first place
(... after long delay, returns to thread) Wow, nei.ghbor.net is cool! I need some time to get my head around this. Nice UI!
As for EDU tools, I really feel like it's about having equivalents for chalk and slate or pen and paper, or book. Tools are essential, not inconvenient or useless. And sharing tools ... there's a thought!
Collaborative consumption is a cool movement, theres a lot going on with it and the way ccn requests content seems naturally to extend to requesting physical items... toolshed namespace + item id's in C.O.'s
Thanks for the kudo's on nei.ghbor.net, the UI is all SFW, it's really a great program. I'd like to port it to run over ccnx as soon as I'm able.
Also, out of curiosity, do you have any experience working with extensible command markers in applications for ccnx? I'm trying to devise a way to find the closest ccnd to a newly connected browser and it seems like that's one way to do it but I really don't know where to start regarding interpereting interests via a 3rd party app.
Haven't worked with the command markers. I'd ping Nick Briggs on the mailing list for ccnx to get more details, but I think he and a few others (Jeff or Patrick ?) may have answered that question for you.
Let me think on this closest CCND question. If you stored locations in some namespace, and you registerd each CCND's location keyed on some GUID, synced this slice across all participating nodes, that's one way to find out who is closest. May be the hierarchy of naming used for this location name space is a way of selecting a generally closest ccnd, and then express interest for the data contained in it's content store.
If you resolved that question in some reasonable way, is the next question for you how to plug in nei.ghbor.net's/SFW front end to data coming from the nearest CCND?
yeah I sent that same question to the mailing list, Nick and Jeff were very helpful. Mark and Nacho also let me know that they did something similar for a DARPA project, and said that some library's/papers would be forthcoming, so we decided to table that aspect until then.
Hacking SFW to run over CCN/NDN-js has been the recent focus, and we actually just reached a major milestone, It's just a proof of concept right now, but I made a screencast you can check out:
As the description says, the code is a spaghetti mess, but we'll be hitting it hard in the next week to get a nice prototype up on github for the ccnx crowd to hack on. until then, hope you enjoy the vid, it's unlisted, but feel free to share selectively.
Cool video! I wouldn't worry about your JS code being a mess. No good prototype is clean. When do you think this will be ready for prime time? I'd like to deploy it.
Glad you liked it. We're working with a few different goals in mind, the next step is to start storing pages and content in indexedDB so we can have one publish closure rather than a separate one for each edit, and then re-instantiate the 'twins' mechanism from SFW to handle everybody's versions. Once that's done I'd say we'd be done with 'proof of concept' and well into 'prototype.' After that I'd like to start pushing more and more of the abstraction into CCNx... rather than having a page be one content object, I'd like to see a page be more of a blueprint that references a bunch of smaller content objects, which can then leverage CCN's caching ability by having the 'page' items go stale quickly but leaving the paragraph items in the router for efficient distribution.
I'm hoping that I can get the prototype version out within a week or two, because I need it as
...that was a weird computer hiccough:
anyway, I'm hoping to have the workable prototype up within a couple weeks, because I'm rapidly approaching an application deadline for an apprenticeship program and I'm hoping it will help my chances getting in. I'll let you know the second the repo goes live.
BTW, I'm hoping you can make it out to the CCNx Con 2013 to present your prototype in either poster session or submitted paper. This is cool stuff.
I need to review the model for SFW. Since a typical page is a sequence of character data and images usually, having content objects represent page fragments (which can then be versioned) this is a useful way to think about things. Could build a CMS this way too.
SFW saves it's pages as JSON objects. Each page has three top level items: Title, story, and journal.
The title is just a string. The story is an array of json objects, each with a unique randomID, a type (paragraph, image, plugin, etc) and various other attributes depending on the type (text for paragraphs, source for images, data for graphs) this schema is what allows for the easy refactoring of content on a page.
The Journal is a revision history of the page since it's origin. every edit/move/addition/deletion/fork of a page is recorded in the Journal, and rendered at the bottom of the page. This is how SFW enforces the Creative Commons licence in a programmatic way; when you fork someone else's page, it records it here in the json, so any interested party can see exactly what constitutes your work and what constitutes someone else's.
What I'd like to do is modify the story to basically be an array of ccnx names, and simultaneously have another content store in an indexedDB that has ccnx content objects containing the same info that would normally be native in the page.
On the journal end, since ccnx has a native versioning schema, i'd like to record only the edit's since last version, and deal with credit via a third content store that manages a collection of ccnx publisherID's. A 'nested version' of a page would imply a fork, whereas an edit to your own page would completely replace the previous version.
This is all in response to an issue I had with the proof of concept where only the first edit would go across the network, and then subsequent interests would encounter the first edit and not go through the router to the other user. As a workaround, I set freshness seconds to 5, but to me this negates the fundamental benefit of ccnx, which is caching for maximum efficiency. So ideally I'd keep the 'page' items with a low freshness seconds so that they always come from the publishers browser, but the content that they refer to could be kept in the router on a longer basis, so that when you pull someone's page, you only have to go all the way to their browser for the parts of a page that have changes, and everything else could be served from a closer node.
I would absolutely love to make it out to CCNx Con. Me and Cody (dev partner) are hitting this pretty hard; granularizing the page is going to be a pretty hefty undertaking, but for now we're focusing on working with PublisherID's and page items in indexedDB so that we can bring it from 'two player' to 'multi-player'. I'm hoping we'll have something pretty soon. I've been thinking along the lines of writing up a paper for this project since it's inception, any chance you'd like to take a look at a draft when the time comes?
Cool, will be happy to do a review when your paper is ready. Does SFW handle dynamic updates, such that if content changes by 3rd party while you are viewing a wiki page, it updates? Or must you hit reload?
Short answer is no, long answer is it could eventually. Remember that SFW is centered upon the idea that everyone has their own sites, and you can link between them, so if your viewing a page, a third party edit wont show up unless you decide to look at the third party's page.
That's not the real reason it doesn't work though, because even if you were visiting that page, you wouldn't see it update before your eyes, though while following links in SFW it does update (you don't have to refresh the whole client, just the relevant page).
...after long delay, I realize I never actually responded last time. Which is odd because I distinctly remember typing at least two paragraphs. my bad!
SFW is all about discrete versions of pages. Rather than the traditional wiki paradigm where there's one central site that anybody can edit, SFW says everybody get's a site, but those sites exist within a 'federation' that allows for easy remixing of content and linking between sites. Not unlike CCNx, it takes some time for the ethos and convention to really 'click', especially when coming from well established web architectures. I do highly recommend spinning up an instance of your own (nei.ghbor.net is down due to domain issues at the moment, but it's high time I fixed that: once I do, you're welcome to make a site there and use it as a sandbox).
On another note, we've been working hard on CCW, and we should have a useable prototype any day now. I'll keep you posted.
Hey there. Multi-player CCNx Federated Wiki Prototype is up and running. http://github.com/rynomad/SFCCW2
it's buggy as hell, but you can play around in it. Only works right now in the latest version of chrome, and I recommend an extension like history eraser to clear your indexedDB and appcache if you want to mess with the code.
Documentation is shotty (much of it pertains to SFW and hasnt been checked to see if it still applies) but that will be fixed shortly
demo video here: http://youtu.be/N5IBlH3aTZw
hope you enjoy. If you decide to deploy it and run into trouble let me know and I'll do my best to help you out.
Sweet. Just forked it. I'll take a look at this. I need a new wiki anyways.
Also, call for papers for CCNxCon just went out.
Yeah I saw that on the mailing list. Thanks for forking! though I recently started a new repo @ http://github.com/rynomad/CCNx-Federated-Wiki-Prototype where future experiments will take place, also, a more applicable readme.
I've shown CFW to Ward Cunningham (Smallest Federated Wiki) and am currently focusing on getting some of the functionality into that repo, and then I may or may not start from scratch and rebuild CFW in a more sane manner now that I know how the various pieces work.
If you'd like to toy around with CFW, I've got a deployment up at http://leela.rosewiki.org. Since we don't have any server-side persistence yet, playing around is going to be far more dynamic if you have multiple people using it at the same time... I've sent the project to Jeff (NDN-js), if you're interested, maybe we could all set up a time to do a google hangout or something and I could give y'all a rundown. I'm flexible as regards to scheduling, just let me know.
To quickstart, all you really need to know is that the '+' button creates a factory, which you can double click in to open a text editor. enclosing any text in [[ ]] will create a link, and following a link to a non-existent page will give you the option of creating it.
OK, I"ll fork off that particular new repo. Awesome that you've gotten feedback from Ward C. Would be interested in further discussions with Jeff B. around this. Will review. As I mentioned, I am in the process of maybe deploying a new wiki for the CCNx project, so this could fit in nicely. We must eat our own doggy/kitty food.
Forked. Can't connect to rosewiki at the moment but will try this later.
Thanks for the headsup on rosewiki... I think somethings up with my port-forwarding setup where my server lives, I'll have it back up tomorrow
That's way cool. Thanks for letting me know. I've been focusing on a lot of other things for nei.ghbor.net recently but I'm about to circle back to SFW, hoping to make it to the hangout on wednesday. Cheers
Yeah, I may check out that SFW hangout if I get time.
thought you might be interested in this... browser-to-browser communication channel via webRTC: https://github.com/oztu/p
This might be pretty nifty if combined with ccn4b/ndn-js.
Great to finally meet you in person last week. I checked out the Smileplug; looks to be a super cool little device. Once I get settled back here in Boulder I'll start experimenting with some of the SMILE repo's to get a feel for the ecosystem y'all are developing.
As a side note, one of the niche's I've been exploring for CFW deployment has been the hackerspace community, as a distributed knowledge-base for tinkerers such as myself. I think something like the Smileplug would be a killer device to help hackerspaces really take their education efforts to the next level. In addition, I think the constructive hacker community could be a great source of developers for the open source platform.
Thanks again for the great conversations last week, and for being such a reassuring presence to the amateur kid at the conference.
Great meeting you too. Great job getting some real interest in your projects. I was in your shoes two years ago as an outsider to the research community at the CCNxCon2011. I think you made a good impact there. Glad you made it out.
SMILE Plug has been an interesting ride, though right now the Software (from the firmware standpoint) is at a bit of a standstill while the Linux kernel issues with 3.0 are worked out. It's been a challenge. I'm hoping we can eventually migrate to some open hardware design what is more like a hackable, portable network access point with all of the good stuff that we are envisioning for ad-hoc networks and simple content management.
Let's keep in touch and I'll get you some gear once I've got a reasonably useful firmware drop to release.
Sounds like a plan :)
We should have some newer firmware in the next month, and then I'll send out the box. Got your email.
@rynomad watching your presentation at NDN comm meeting from Sept 2014. Nice work. Will follow up with you over email. I still need to get you a SMILE Plug box.
@rynomad can't seem to find your real email. Feel free to contact me dkords at gmail . Thx. Looking forward to catching up with you.