Show HN: An anonymous P2P social network for Android, written in Clojure
nightweb.net
nightweb.net
The main problem of Clojure for Android right now is the large size of Clojure runtime. This leads to two issues: a) long loading time (can take a few seconds even for the basic app), b) applications often gets closed by the OS once switched to another, in order to free that memory.
Since ProGuard is no help in optimizing Clojure-compiled code, the issues should be addressed in some other way. One that is possible is to write source-shaking compiler that will strip the final APK of the unused functions. It's pretty hard to do with the current compiler, but if we eventually write Clojure-in-Clojure compiler (there is a proposal for this year's GSoC by the way), it may be feasible to add these optimizations to it.
And finally a shameless plug: if you are interested in trying Clojure for Android, here are the links to get you started: https://github.com/alexander-yakushev/lein-droid https://github.com/alexander-yakushev/neko
Here's my Nightweb link for anyone interested in experimenting with me: http://nightweb.net/#type=user&userhash=5avfzwgkdzgddsv3...
gw: It would be great to have multiple personas available to me, like an inverse of google+ circles.
That's mine ... awww feels like the beginnings of ICQ ;)
But ... we can hack on it ... finally a good reason to learn Clojure.
So here's mine http://nightweb.net/#type=user&userhash=dtvjjjuk7eai42xx...
Although tying these identities to our hacker news IDs basically means throwing anonymity out the window.
On the other hand, I didn't actually learn Java. Knowing C++ and reading documentation seems to be sufficient for using Java libraries with Clojure.
Yeah I've thought about allowing multiple users on a single device, so I'll look into that in the near future.
EDIT: I fixed the issue with clicking links in browsers. I will issue version 0.0.5 with this fix because I think it's pretty important.
The third party would be running their own Nightweb client, then visitors to the website would trigger content downloads on the client, rendered out as a webpage.
This would provide the "public view" without sacrificing the decentralized nature.
In fact, this type of functionality is hopefuly becoming an Internet Standard: http://www.internetsociety.org/articles/moving-toward-censor...
However, Bittorrent is not up to the task, due to NAT issues. UDP NAT puncturing is not present in this stack, right? Thus how is it going through carrier-grade NATs which block all these smartphones?
Disclaimer: working on a similar thing for years Tribler Mobile.
I think it would provide a window into the social network, kind of "Oscar is using this, join him now by downloading the app!"
The implication I see is privacy of people clicking a user link, but the problem already exists now.
It will impose a few seconds of load time no matter what, so it is best for long-running apps where loading time isn't as important. The cost in runtime speed, memory consumption, and APK size are also present, but aren't a big issue in my experience. The same Clojure optimization rules apply.
I think things will get better and better once more people use Clojure to write Android apps. It will be a signal to the core devs that it's an important platform. Currently, you must use a fork of 1.5 that includes a few necessary modifications.
How does the protocol differ from, say, tent.io?
Just in case anyone has the same issue: on my device (Nexus 4) it took a while for the UI to become responsive when first opening the app. Patience solved this one :)
Sorry about the non-responsive loading, I will work on that in the future.
Also, what is the bandwidth utilization like compared to an app for a centralized network? With a lot of us on tiered data plans now, this is a crucial concern.
Fortunately, Android JellyBean provides all the data you need to fix your problem. If you are getting worse battery life, you need to check Settings -> Battery and determine which apps are unreasonably eating up your battery life.
Just a note for the authors, as of 2010 NIST recommends not using SHA-1 for new digital signature generation and "disallows after 2013". See section 9 here: http://csrc.nist.gov/publications/nistpubs/800-131A/sp800-13...
Also it seems to me like you want to fork i2p. I think that's a very bad idea. First since you should be very confident in your skills if you roll your own crypto. Second because a split seems not necessary and harmful in the long run for the network. The i2p networks could be bigger aswell, and this could help.
I'm all for clojure, open source, innovation and forking. But i urge you to stay part of i2p and not create incompatible releases. Maintaining your private branch will result in a lot of extra work, and I'm 100% sure that this will result unfixed security holes. The i2p project on the other hand would probably gladly accept your java patches.
I doubt I'd give Nightweb the time of day if it necessitated a desktop.
50% of Facebook's traffic was mobile one year ago and I'm sure it's even more now.
If you have any feedback/requests for I2P, I'm sure that zzz would be very interested since he did all of the I2P@Android work. Catch him on zzz.i2p or #i2p-dev on the I2P irc net.
Here is mine. Great to see new work and so clean out of the box.
Can we haz a desktop or web version?
> The goal of Nightweb is to be a "killer app"
> for anonymous networkingIt suggests me to share my profile and posts with others(with rest of sharing apps like Twitter). How am I anonymous then?
Besides, after installing the app and creating a profile - I just had to enter a name, how do I make first contact? I searched and it didn't work.
Looks like there's sth that I am not doing right.. ?
For a web version to be fully distributed it would need to be run on a server, so people would have to hook up a RaspberryPi at home, rent a VPS or trust some big Nightweb farm (the diaspora model). It's infinitely easier for most users to just install an app on their phone.
A Desktop version would probably not be "always on", which would limit the usability as a social platform seriously.
Did anyone try to save Nightweb's data directory encrypted in Dropbox or ownCloud?
Would it be possible to add something like a reply option to a post? This would give us twitteresque chat.
Would love to be able to share posts with certain persons only.
PS: Can someone provide a download link for those avoiding Google Play? TIA
I'm considering adding an APK download link, but my site doesn't use SSL so I didn't feel comfortable doing it there.
I'm assuming this works by including your personal favorites in your meta torrent, so when people get your new content, they also get a list of who you've favorited?
Does this also mean that the meta update notification gets sent out when I favorite / de-favorite someone?
Nice take on announce_meta, btw. I had mused over something similar (though not as well fleshed out) to the Nightweb concept but kept bumping my ahead against the notion of how to announce additional content when the bittorrent protocol ties info hashes (and magnet links) to a direct hash of the content - meaning you could never update something already announced for a specific key. And since the hashes are content based, it's not like you could say "my next content will be <<previous hash plus 1>>".
Extending the protocol to include a new announcement method side-steps this very nicely :) Kudos.
For me a good solution would be to use machine learning, the same way spam filtering works for email.
A decentralized version of Reddit could actually be pretty simple, with a flooding P2P network coupled to some machine learning on each of the nodes.
The beauty is that anyone would be free to implement the content filtering measures the way they like it.
That would actually be a lot richer than the current "one vote is one vote" systems, since you could learn which people you tend to agree with.
I _have_ an Android, but I dislike typing on it. For me, it's a phone, period.
This is really interesting. How is this uncensorable? From what I've read, i2p requires defined servers to resolve addresses which themselves can be taken down.
There are a few possible solutions to this. First, allow users to add new bootstrap nodes to the app. Second, provide "meshnet" functionality to the app. I am considering both. The latter is much more complex to implement, but Android provides an API called Wi-Fi Direct which I could conceivably use to connect Nightweb nodes together if they are in close proximity. I'm open to other ideas.
Just three things that come to my mind:
1. how long does it take to propagate updates?
2. what is the traffic consumption on mobile?
3. what about statusbar notifications?
The traffic consumption is pretty high, because it becomes a full peer on the I2P network. Over a month I would expect it to consume around 1GB or more. If this becomes an issue for people, I may add the ability to be a non-contributing peer.
Please make the non-contributing status the default then, or at least ask the user on installation... capped data plans are still the default in many places... :(
also, don't take this personally - but if you're looking at targeting a broader crowd, you might have to update the UI to make it look more like traditional social apps.
I don't know how widespread NAT is on mobile networks, my operator just started using it and I've been meaning to switch.. not a real internet connection anymore IMO. And lots of people are doing self-inflicted NAT on their home wifi. So it might actually be that mobile connections are less likely to be NATted.
It says incompatible for my country
EDIT: Ugh, yep, a bug I introduced recently. I am issuing another update, 0.0.6.
EDIT: here's a screenshot http://i.imgur.com/efngFHN.png (on the picture I uploaded the sky should appear at the top)