14 ms·
Show HN: This page exists only if someone is looking at it
- losvedir 11y agoAuthor here. Amusingly, I wanted to link to the HN discussion on the page, but couldn't figure out how to... I don't think it's possible! Something I hadn't considered until just now with a content addressable web is there are no cycles in the links. Edit: Another amusing anecdote. I've been following this on log2viz (the heroku realtime performance monitoring tool), and was aghast to see high response times and memory usage. Then I realized I was actually looking at the dashboard for one of my rails apps! Phoenix is sitting pretty at about 35MB memory usage, and a median response time of 5ms, so far.
- maxerickson 11y agoAre you able to adjust the url of the HN submission? I don't feel like creating one just to check, but that makes it easy to link the discussion, create the discussion before the page.
- losvedir 11y agoNo, but that would be the way to do it, for sure. There's a link to "edit" my submission, but the form it takes me to only allows updating the title. It displays the URL as ordinary text, rather than a text input.
- im3w1l 11y agoIt seems ID's are assigned sequentially, so by timing your submission you should be able to get a predictable url.
- bencoder 11y agoAn idea to make this(and the editable content suggestion in another comment) possible could be to add something to the protocol to define "previous versions" sha hashes. If you want to edit a page then create a new page which includes the sha hash of the previous versions. If you get a request for the content of a sha hash of an old version, you could suggest your sha hash as an updated version.
- kreeben 11y agoOr just send a new piece of content with the same ID and hope that it will win. But seriously, just a new created date. Same ID.
- nanofortnight 11y agoID is a hash of the content so that's not possible unless you find a hash collision (highly unlikely with sha256).
- deleted 11y ago[deleted]
- kreeben 11y agoHmm, ok, but that is just an implementation detail. I just see a really simlple service here that could become really beautiful if one could manipulate the content, once it is in your browser, so the next time it is passed along, it will have evolved. Into what? I don't know. But what if I seeded the system with an image, a simple drawing or a shape, vector or whatever, and then just sat back, observed how other people took it further. Like graffiti. Forking of content could be insteresting. Or a github, but a peer-to-peer version?
- shocks 11y agoThis is a really cool idea.
- 11y ago
- Filligree 11y agoThis is a problem that Freenet solved a long time ago. It means you need public-key cryptography rather than hashes for security, but they support updating pages--and, of course, any and all leaf content can still use hashes for better cacheability.
- sktrdie 11y agoDo you know about WebRTC and Webtorrent? You can do this even without a relay server. Just browser-to-browser.
- schwabacher 11y agoI have just written a library to make building something similar over webrtc easy: https://github.com/charlieschwabacher/ultrawave https://github.com/charlieschwabacher/ultrawave
- SomeCallMeTim 11y agoIt's worth noting that WebRTC still requires a server of SOME sort -- typically you want a "signaling" server, and you need at least a STUN server to pierce firewalls, though the latter can be found for free. And some corporate networks are too restrictive to be pierced by STUN, which means you need a TURN server, which is a relay server. But yes, 98% of the time, WebRTC can go directly browser to browser. As long as neither browser is Internet Explorer. Sigh.
- billmalarky 11y agoThese guys have an open source plugin that allows IE to join the webRTC party. http://skylink.io/plugin/ http://skylink.io/plugin/ This library they also have makes WebRTC cross browser compatible. https://github.com/Temasys/AdapterJS https://github.com/Temasys/AdapterJS
- cmdrfred 11y agoI never knew about STUN, this solves so many problems I've had. Thanks.
- amelius 11y ago> As long as neither browser is Internet Explorer. Sigh. If all popular torrent sites moved to in-browser downloads over WebRTC, virtually everybody would move away from IE :)
- amelius 11y agoIs it even possible to open a socket from a browser to another browser directly? I was under the impression that was restricted for security reasons (websites becoming botnets and such).
- mvanvoorden 11y agoI once solved a similar problem by creating a link at tinyurl and then updating that link to point to whatever the name of my uploaded file had become :)
- e12e 11y agoWell, the site already uses DNS as an escape hatch for getting a pointer to content, so setting up a http-redirector might be a good idea...
- deleted 11y ago[deleted]
- Achshar 11y agoOk I am at a loss here. Why can't you link this discussion on that page?
- pdenya 11y agoChanging the contents changes the hash and the hash is used in the url
- netcraft 11y agothe hash is a hash of the content itself, so the link is immutable - if you changed the content the link wouldn't be pointing to the same thing anymore.
- DSMan195276 11y agoThe web-pages are recognized by their hash, so you can't change them after you setup the page. The problem is that you would have to supply HN with the link to the page, and then go back and edit the page to include the link to the new HN article. Since you can't go back and edit the page, you can't include the link.
- tel 11y agoYou'd have to be able to generate some pretty fantastically unique hash collisions!
- ble 11y agoIt's great! Will the client complain if it receives content that doesn't hash from a malicious client?
- simcop2387 11y agoWould a page be able to leave and come back into the network by having a computer that's offline but viewing the page and then comes back? i.e. is there anything to prevent it?
- Freeboots 11y agoim not 100% sure how this all fits together, but you should be able to recreate a page, so long as the content was exactly the same, and therefor produced the same hash. So you could set it up to automatically recreate the page when your machine comes back online. is that what you meant?
- simcop2387 11y agoNot quite but I assumed similarly. I'm wondering if it'll connect to the peers automatically after coming back online if just left in the browser. If it did then it'd be possible to keep a page unpublished except when asked for through another channel. It's definitely a really interesting idea to play with. It makes me wonder if it could be used to create a nicer interface for things like Freenet by doing more clientside these days.
- spullara 11y agoI've actually seen people successfully get a tweet to link to itself through trial and error. You can try and guess the IDs and you will eventually get it right.
- femto 11y agoI just used firebug to alter the page in my browser. I changed the first heading from "This page exists only if someone is looking at it" to "What happens if I use Firebug to alter this page in-situ. Do I end up with malware?". Will this change propagate? Has anyone yet seen this modified page in their own browser? Edit: From the original page: "The server double checks the hash of the content it gets and then passes it along to the new person." I guess the answer is that the change won't propagate?
- losvedir 11y agoCorrect, the change won't propagate for the reasons you say. (See source [0]). Also, though, note that the content comes to you as a blob of JSON, which gets rendered into your page, and you respond to future content requests with that blob of JSON, rather than the HTML itself. [0] https://github.com/losvedir/ephemeral2/blob/master/web/channels/have_channel.ex#L21 https://github.com/losvedir/ephemeral2/blob/master/web/chann...
- femto 11y agoThanks for the explanation.
- INTPenis 11y agoI found this line amusing. >and you shouldn't be trusting me any more than any other random internet person. Because I did trust you more than most other random internet persons, I trusted your javascript by temporarily whitelisting it in my browser to view the contents. :)
- onion2k 11y agoNice. Very nice. If you ditched the hash that checks the content and made the whole page 'content-editable' (maybe with something that stripped certain tags like images and video for obvious reasons), that might be fun. :)
- losvedir 11y agoHa, that's a fun idea. I imagine it would regress to a lot of inappropriate ASCII art pretty quickly, though... The SHA-256 checksum is actually part of what makes it very interesting to me, though. Since the content of the page is guaranteed by the location of it, it's kind of a shared web that anyone can help host.
- kreeben 11y agoVery cool! Interesting to see your findings. Maybe the browser is capable already of simplifying p2p file sharing. It would be good to get rid of todays torrent clients and have your browser run some slick p2p service instead that also serves as a convenient way of sharing or sending files with collegues and friends. I also really love the idea of tossing web content around (between) peers like that. Good work, so far. Don't think you're done yet.
- aakilfernandes 11y agoVery cool stuff. I wonder if it would be possible to host an entire webapp with sockets/rtc. I don't see why not, but it you'd have to re-invent decades worth of architecture built around http.
- weavejester 11y agoWebRTC, and in particular, RTCDataChannel, might be what you're looking for to get true P2P data transfer. See: http://www.html5rocks.com/en/tutorials/webrtc/basics/ http://www.html5rocks.com/en/tutorials/webrtc/basics/
- bonestamp2 11y agoYa, OP should have a look at icecomm for that... makes it really easy to implement WebRTC in multiple browsers. It was on hacker news a while back: http://icecomm.io/ http://icecomm.io/
- learnstats2 11y agoThis is a wonderful proof-of-concept and has potential applications in better decentralising web services. Keep going!
- cjfont 11y agoHowever in this case, only the content is being decentralized, not the service itself.
- losvedir 11y agoAuthor here. True, and a very clear way of putting it. Interestingly, since Erlang is so well-suited for distributed computing, and Phoenix (the web framework I'm using) has been built to take advantage of that, it wouldn't be too hard to let someone else spin up this same service and take part in distributing the content. Off the top of my head, the only thing that wouldn't work is the "Currently Viewing" counter, which relies on this all running on a single heroku dyno. Otherwise, the socket messages are routed over a distributed PubSub layer, which should be pretty easy to tap into.
- stephengillie 11y agoIt's a cool idea. What do you think about running it from an Android? (Isn't there an Apache APK?) So you can only view the page while connected to the phone's hotspot? That would make it even more etheral.
- hayksaakian 11y agocould you also keep track of viewers on a per-server basis and simply add those numbers together on the fronted? like if server 1abcdef is managing 300 sockets server 2ghijkl is managing 200 sockets then you just add those on the frontend
- jbert 11y agoYes, but as long as the same method is used to generate the hash, the same browser could connect to multiple services and share the same content. In that sense there needn't be a single service. Just a bunch of rendevous points for browsers-with-content to connect and announce what they have.
- darklajid 11y agoVery nice idea and I'm sure that it's a great way to play with Elixir/a platform. Well done! Two questions: 1) You talk about P2P uses, but would it be feasible to 'seed' a true P2P net? A site that delivers the application, and everything from there is P2P vs. 'ask the server so that the server asks potential peers (clients?)'? 2) I got this at the top: Connecting to websocket. Connected! Listening for content for hash 2bbbf21959178ef2f935e90fc60e5b6e368d27514fe305ca7dcecc32c0134838 Requesting content. Received content for hash 2bbbf21959178ef2f935e90fc60e5b6e368d27514fe305ca7dcecc32c0134838 Received content for hash 2bbbf21959178ef2f935e90fc60e5b6e368d27514fe305ca7dcecc32c0134838 Standing by... ready to share this content! Two answers for the hash? Intentional? Fine? If that happens quite a lot, you might waste more bandwidth/resources than necessary in your experiment?
- losvedir 11y agoGreat questions! For (1) I'm not sure. I'm primarily a backend dev, so this was partly an experiment for me to play with the front end, too. I kind of hope javascript is not able to connect "sideways" to other ordinary browsers. I would think they'd need to be running some sort of server, which I don't think the browser can get going. Would be happy to learn more about this from someone more knowledgeable. Regarding (2), you should have seen my first approach: Every new client broadcasted a request for the content, and everyone with it responded! Now that was a waste of bandwidth. But what I've done here is I send the request for content out to everyone with it, with a probability of 1/N, where N is roughly the number of people with it. So in your case, it looks like it got sent to two folks. Sometimes it gets sent to none, in which case the client will retry in 2 seconds. It was a little tricky to figure out since phoenix runs every socket connection in its own erlang process (great for robustness and concurrency, but a real mind bender if you're not used to it). So this probabilistic approach was the best I could come up with, instead of having some master process select the right person to send the request to.
- pjc50 11y agoMaybe the side-channel connections could be built on WebRTC, which includes STUN facilities for making the connection.
- akumpf 11y agoTry this page, too! http://ephemeralp2p.durazo.us/82d78987fd1cd530302b81d5643739dd9b22f7f7214f10c771b5327729d88fe9 http://ephemeralp2p.durazo.us/82d78987fd1cd530302b81d5643739... This is a test page with embedded media via base64 encoding. This shouldn't touch the server, so hopefully no bottlenecks for this page either :)
- apetresc 11y agoUnfortunately it seems to have gone to 0 and therefore disappeared? =/
- thescriptkiddie 11y agoThat's nothing, this one has a base64 encoded video. http://ephemeralp2p.durazo.us/5264b0eea08fc0f6c8c164815c30ddc76259851838813a1e7a9a4050802d7e5b http://ephemeralp2p.durazo.us/5264b0eea08fc0f6c8c164815c30dd...
- TheLoneWolfling 11y agoSeems to be dead
- tjallingt 11y agoDoes this also mean that, technically, I can edit the page and someone else, who connects after my edits, gets to see my edited page?
- Jonovono 11y agoI think you'd have to send them a link with the new hash in it. If you sent them the current page, the hash wouldn't match your changes.
- losvedir 11y agoSneaky! But, no, the server double checks that the content you're sending hashes to the correct thing.[0] [0] https://github.com/losvedir/ephemeral2/blob/master/web/channels/have_channel.ex#L21 https://github.com/losvedir/ephemeral2/blob/master/web/chann...
- jammaloo 11y agoAs mentioned on the page, it does a sha-256 hash of the content, which you can think of as a fingerprint of the page. If the content you get sent doesn't match that fingerprint, it will reject it.
- zecg 11y agoDamn you, author. This is cool and now I am loath to close the page.
- kreeben 11y agoIt would be cool if you could drag and expand the log window. Can you patch the content?
- aylons 11y agoAs the page is content-addressed, it can only change the content by changing the address, thus creating a whole new webpage - address and content, after all, define the resource.
- addandsubtract 11y agoDon't all dynamic pages only exist if someone is looking at it? I think a better title would be "This page only exists AS LONG AS someone is looking at it" Either way, cool demo!
- pandatigox 11y agoHahaha the old "if a tree fell in the woods" eh?
- tedmiston 11y agoBut what if the tree is cached?
- DanitaBaires 11y agoI think the concept is akin to a beach ball that is passed from hand to hand. It only exists one instance of it. With a webserver, a new instance is created for each user viewing the page.
- personjerry 11y agoA beach ball that can be held simultaneously by any amount of people, though
- rawTruthHurts 11y agoRead this aloud: "[] that is passed from hand to hand. "
- adamkochanowicz 11y agoNo, because of the word "only"
- 99problemz 11y agoHere's another, it is a please CLICKME page, even if it doesn't look like it. [0] [0] http://ephemeralp2p.durazo.us/ae0fad06ab58fa6bbc1599733b6c0c1c06627472d635935da8551ae2071a9797 http://ephemeralp2p.durazo.us/ae0fad06ab58fa6bbc1599733b6c0c...
- losvedir 11y agoWhat is this exactly? As a general warning, I don't sanitize or otherwise modify the shared content, so any sorts of badness could be there.
- 99problemz 11y agoAn attempt (copy paste really) to try and keep the window open and the content alive. Also, a request for the root/homepage could be funny if it was meta [0]. [0] http://ephemeralp2p.durazo.us/7eb67dd70747b8e979e77119e813f49c0afdea83ae4745b25fdda15c2ec0a08c http://ephemeralp2p.durazo.us/7eb67dd70747b8e979e77119e813f4...
- arcatek 11y agoApparently it simply try to open a bunch of modal window to close. Chrome is smarter enough to figure that out, and there's only about five windows before the script is killed.
- sanqui 11y agoThis somehow crashed my system (caused a black screen). Firefox on linux. Beware.
- jackgavigan 11y agoCurrently Viewing: 0 Connecting to websocket. Having a Sixth Sense-style existential crisis moment here... o_0
- myth_buster 11y agoSame here... but I'm viewing from inside corporate firewall and it may have blocked some scripts.
- claar 11y agoThis is more interesting than the title eludes to; this is P2P via websockets. Neat!
- tudborg 11y agoFun, but not really P2P. Have a look at WebRTC for actual P2P :)
- kmfrk 11y agoThsi reminds me of Mystery Men's Invisible Boy who has invisibility - but only when no one is looking! I need to re-watch that movie.
- chrismccord 11y agoThis is a fantastic example of using Phoenix channels! For those interested in how channels work, check out my ElixirConfEU Phoenix keynote where I give an overview: https://www.youtube.com/watch?v=u21S_vq5CTw https://www.youtube.com/watch?v=u21S_vq5CTw
- ArekDymalski 11y ago>Request received... >Content sent! That was rewarding :)
- houshuang 11y agoThis is awesome. Would be fun to see more statistics - how many people have I provided the page for, for example.
- callesgg 11y agoWell it still goes right through the server, so it only causes more strain on the server than a standard setup. The actual way to do this an acctualy call it p2p would be with a small WebRTC framework that can bootstrap the actual site.
- dheera 11y agoI once implemented a crude but serverless P2P in JavaScript by using pulse-width-modulating information inside bandwidth usage; anyone on the same Wi-Fi frequency would then be able to stream some arbitrary fixed-bitrate content and observe the drops in their bandwidth throughput to pick up the modulated information. But it was hellishly slow (a couple of bytes a second at best, a couple of bits at worst), and didn't work as soon as there were 3 devices on the frequency. Would be interested to explore other ways to make pure-JS mesh networking happen. I've thought of using the JavaScript image pinging trick to "port scan" the entire subnet for peers, and communicate by "mildly DDoSing" each other with pings, but haven't actually tried yet. Another potential method to pure-JS P2P is by using the microphone and speaker and building a mesh network at inaudible frequencies but this requires microphone permissions and won't work beyond the same room, and would be only several hundred bytes per second at best.
- ccozan 11y agoInteresting, this is like a P2P Snapchat for text. Or no. Better said, I am having trouble trying to associate this with something that exists already. Good job for the innovation!
- mathgeek 11y agoI've been thinking of it as somewhat like a Bluetooth pairing. Only exists when two devices are connected.
- wstrange 11y agoSo would we call it a heisenpage?
- marknadal 11y agoFeross has built the thing the author talks about, a Bittorrent client in the browser called WebTorrent, it is super awesome and incredibly useful for sending files, check it out at: http://instant.io http://instant.io !
- losvedir 11y agoVery cool! This is exactly what I had in mind, but couldn't find any implementations of it. Thanks for sharing.
- jaywunder 11y agoFor the very unlikely case someone can't see this: This page exists only if someone is looking at it Hi! Welcome to Ephemeral P2P. Thank you for loading this content. Your browser retrieved it from the browser of someone currently viewing this page. You're now a part of the network and someone who loads this page in the future may get it from you! The server does not store this content anywhere, so as soon as the last person closes their browser, it's gone. You can see a count of how "healthy" the page is (how many people are viewing the content) at the top. How does it work? At a high level, this is what happens: From the homepage you enter the content you want to share. When you submit it, you register the SHA-256 hash of the content on the server. Your browser stands by with an open websocket to the server. When someone else visits a link "/[sha256hash]", the server tries to retrieve the content from anyone registered with that hash. The server double checks the hash of the content it gets and then passes it along to the new person. That new person now registers with the server as someone who knows the content for that hash. But why? Just a simple experiment to play with websockets and concurrency. The app is built in Elixir (compiles to erlang) with the Phoenix framework, since it supports websockets out of the box. It's very "railsy" and in addition to rails-style "controllers", it has "channels" which are like controllers for websockets. Made building this thing a snap. The app is hosted on a heroku 1X dyno and I'm hoping this hits the front page of HN to see how many concurrent connections I can squeeze out of it. Erlang is known for its concurrency, so I'd love to know how Elixir/Phoenix can serve as an alternative to my usual rails when highly concurrent solutions are needed. I plan to tweet my findings, so you can follow me (@losvedir) if you're interested in them. Where do we go from here? There are two aspects to this project that I've found quite interesting, that I hope people explore: Peer-to-peer over browser websockets Does something like this exist? I opted for P2P of HTML injected into a container div, since I didn't want to deal with the legalities of clients sharing binary files back and forth. But someone wanting to deal with DMCA and all that might have an interesting service here. I could see this being a great alternative to something like sendfile (I think that's a thing?), or DropBox, or what have you, when you just want to send a file to a friend and it's too big for email. Big files could even be broken up into individual SHA-256'ed pieces, and the list of SHA-256 hashes could be the thing sent. The other side would then fetch each piece in turn and re-assemble. But that's starting to sound kind of like BitTorrent... I wonder if someone could even make a web-based bittorrent client along these lines. Content addressed web The cool thing about the page content being represented by its SHA-256 hash is that it doesn't matter where the content comes from. If anyone sends you the content, you can verify that it's what you were looking for. This makes it well suited for peer-to-peer or otherwise distributed file serving. Imagine essentially an archival service where all kinds of content (web pages, mp3s, videos, etc) are indexed according to their SHA-256. Hopefully this content would be distributed around the world and backed up and all that good stuff. Then if someone tweets a "hey, checkout this video I made [a2b89..]", it can be retrieved from this "global store of all content" using that hash. It's already very common to mention the SHA-256 alongside a download. Just think if you could take that and download from this service. Wikipedia is an amazing collection of knowledge in terms of articles. It seems like it would be valuable to have a similar nonprofit service that was a repository of "notable" files. A quick warning I don't do any sanitization of the shared HTML content, so be wary of other links that folks may post. But I don't think it's too great of a security risk, since there's nothing private here (no https), and you shouldn't be trusting me any more than any other random internet person. In closing... Thanks for checking this out! Feel free to fork the repo on github and play around with it yourself! And a big thanks to the friendly folks on the #elixir-lang IRC channel who have been very helpful in building this. A (more) permament version of this content can be found here.
- dokument 11y agoGreat proof of concept. I think it would also be interesting to have a version that uses public keys instead of/in addition to the checksum for people to publish content that they can edit and it be signed.
- deleted 11y ago[deleted]
- chaostheory 11y ago> But why? The first thing that came to my mind is that this could be a great tool to fight censorship
- personjerry 11y agoUnless everyone hosting the page gets arrested
- chaostheory 11y agoIt's still practical since it makes things harder as opposed to one central location for a server.
- olivier1664 11y agoOr a snapchat utilities. Since the servers do not save contents, it can be a nice broadcast-and-forget network backbone.
- dignick 11y agoCool vid http://ephemeralp2p.durazo.us/a1ab6f2785e2df2f08f70168413e3a231789e9b836e441e690c1f13e9d68e95c http://ephemeralp2p.durazo.us/a1ab6f2785e2df2f08f70168413e3a...
- zhte415 11y agoAll I got after 3 tries: <code><!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="author" content=""> <title>Ephemeral Hosting</title> <link rel="stylesheet" href="/css/app.css?vsn=30EBB49"> </head> <body> <div class="container"> <p>Currently Viewing: <span id="visitor-count">0</span></p> <div id="js-console" class="web-console"><ul></ul></div> <hr> <div id="content-goes-here"> </div> </div> <script src="/js/app.js?vsn=3DA95D0"></script> <script>require("web/static/js/app")</script> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-61291061-1', 'auto'); ga('send', 'pageview'); </script> </body> </html> </code>
- losvedir 11y agoHm, it's working for me. Did you try letting it sit a moment? The server doesn't actually store the content, so it has to load a blank page first. Eventually, you should receive the actual page content from a peer (via the server, to verify that the content is correct).
- rhythmvs 11y agoInteresting to watch Gmail reading along… Send the link with the hash using your gmail account, stay tuned at the corresponding page on http://ephemeralp2p.durazo.us http://ephemeralp2p.durazo.us, watch “Currently viewing” pop to "2" immediately after you sent the mail. Obviously, the Google borg is slurping up each and every address on the Web it is fed.
- knodi123 11y agomore insidious theories aside, this is probably at least used to drive the "warning, this looks like a phishing attack" which gets inserted inline in some emails.
- zuck9 11y agoThey can't be doing this. What if just opening the link does a destructive action, like unsubscribing or posting a comment on your website?
- oh_sigh 11y agoThen said link is in violation of web standards that have existed for literally decades. I believe I've heard stories about google bots deleting entire forums, because the forums performed destructive actions via GET calls to specific URLs. If what you said makes sense to you, ask yourself how google can crawl any URL at all, considering communicating anything to any server could trigger a destructive action.
- ryanbrunner 11y agoI'm curious how one-click unsubscribes continue to function, then. Wouldn't those need to be GET requests (due to being a link)?
- svieira 11y agoThey do and they are (at least where I have worked) but it seems that Google et. alia are smart enough to not follow links marked containing text with the value "Unsubscribe".
- andrewmutz 11y agoVery cool! Curious: If you want to have a lot of concurrent connections to your Elixir/Phoenix server, do you need to up the OS file descriptor limit? And can you do that on Heroku?
- Nutomic 11y agoZeroNet is quite similar to this (but runs as a seperate program): https://github.com/HelloZeroNet/ZeroNet https://github.com/HelloZeroNet/ZeroNet
- adamkochanowicz 11y agoThis is a sweet concept!
- dmak 11y agoWow this is pretty cool. Any feedback on Elixir?
- ghayes 11y agoNot the author, but I've been loving it so far. The Phoenix framework is really well thought out that making CRUD applications is easy and has all the bells and whistles you'd expect from a framework like Rails. But obviously that's just the surface. You have access to OTP with erlang's processes, supervisors, ETS, etc. You have access to every erlang module that's been written. You also have access to Elixir modules that load in to a Mix project like ruby gems. Also, it's wicked fast and scales. But maybe best is the documentation is great. From elixir's docs to Phoenix to code docs, everything is clear. The community is quick to respond on IRC or GitHub. For downsides, just newness: the lack of good blog posts make me feel like I'm re-inventing the wheel sometimes. Additionally, there's not many questions up on StackOverflow so my errors often come up with 0 google hits.
- unoti 11y agoElixir is amazing. It's homiconic, like LISP, so being able to execute code at compile time can have a game-changing impact on reducing boilerplate. And in addiction to that, it's functional, so I can get the awesome benefits of immutable programming, but without the dizzying complexity of, for example, Scala's type system. And it's based on the Erlang VM, so I get the benefits of battle-hardened concurrency and IO underpinnings. Previously I stayed away from things like Go and Node/Express, because I felt like it wasn't as easy for the type of work I do as Django, and was missing key things like the admin CRUD interface. But when I looked at what's in the Phoenix framework[1] and read the source, it started to feel like I'm witnessing the dawn of the next Ruby on Rails revolution. http://www.phoenixframework.org/ http://www.phoenixframework.org/
- dj-wonk 11y ago"Elixir isn't homoiconic, it never was, and they no longer make that claim." https://news.ycombinator.com/item?id=7622746 https://news.ycombinator.com/item?id=7622746. See http://c2.com/cgi/wiki?HomoiconicLanguages http://c2.com/cgi/wiki?HomoiconicLanguages "Languages in which program code is represented as the language's fundamental data type are called 'homoiconic'."
- nathanb 11y agoCurrently it doesn't seem to exist even if someone IS looking at it :)
- hoprocker 11y agoSo cool! This is almost BitTorrent, but the dependency on the server for client coordination is still a weak point, and makes it more like Napster than BT. It would be an interesting project to try something similar with WebRTC, to allow (as I understand it) actual P2P communication.
- matjaz2k 11y agocheck out https://www.peercdn.com https://www.peercdn.com
- suyash 11y agoIronically that is how most of the websites and webpages exist now - been the norm for couple of years since we started dynamically showing content via AJAX and lazy loading. There is nothing novel here.
- LaFolle 11y agoYou missed the idea here. Its not about AJAX loading. Its about how the content is served to the client without server storing the data to be served (content). You should spend more time on shared link to glean the beauty of this.
- axeldelmas 11y agoYou should take a look at WebRTC's DataChannel. We're using it at Streamroot to do P2P video streaming in the browser. You're talking about filesharing in P2P, again, totally something you can do with WebRTC. You should take a look at PeerJS if you want to experiment in no time. You also talked about BitTorrent in the browser: you should definitely take a look at WebTorrent
- taylorbuley 11y agodarknets are awesome i'm the author of a long-existing indexeddb javascript library. IDB can store all kinds of wonderful objects, including binary blobs. if you're inspired by client side data, you should check out indexeddb!
- jaytaylor 11y agoHow about a link to it?
- natrius 11y agoThis is very cool, and the content-addressable web is going to be a huge leap forward for permanence and publishing without needing to run a server. Lots of people are working towards this future. In particular, you should look into IPFS. http://ipfs.io/ http://ipfs.io/
- losvedir 11y agoOh wow, very cool. This is very much what I had in mind when thinking about a content addressable web. Thanks for the tip.
- whyrusleeping 11y agoStop on by #ipfs on freenode irc, would love to chat :)
- gojomo 11y agoIt appears the content does travel to and through the server, for both initial hashing and later relaying to other clients. Couldn't this be done without ever sending any content to the server, via in-browser hashing and client-to-client connections? (The server could still be used to help clients discover each other.)
- deleted 11y ago[deleted]
- gamekathu 11y agoI am getting : Currently viewing : 0, Connecting to websocket.. and nothing happens. does this mean the trail has been lost and even the last user have closed their browser?
- crossroads091 11y agoSee if you can view this: http://ephemeralp2p.durazo.us/1358fa296d21d03a6e6bf996e429f315dd2cf9879034ba93580e3243e65669fd http://ephemeralp2p.durazo.us/1358fa296d21d03a6e6bf996e429f3...
- redgetan 11y agoCan't help but comment that the title reminds me of a Doctor Who episode "Blink" where the statues only exist if someone looks at it. Anyway, cool Elixir project!
- swehner 11y agoKind of related, http://channelurl.com/ http://channelurl.com/ -- the site only has those pages that are linked to. In other words, the content of a page is taken from its URL. Example: a couple of Mark Twain quotes at http://channelurl.com/show/1f8b080054c8525500036d90b16a04310c44fb83fb87e902e1b80f08a40829428a148185d4bab5bc76ce6b2db6f696fdfbc83e0229e24a12e37923bdcaba2486787c50b962d828667caea25c8f87e7ffdff1703c3ce2dd639715ca29410343cbaae1d4674ef28322d0cda682c233cf172ea0bc6b88793ab7ef2f69a3bd9a14254e41cf1842acd8a2b94d8534fa1d5566c6c2d2025276a0aa92630d1d57b86a37fa0a9cf966f68deca3e9ac28959387e42eadd1f50d5b3dd3b794a8fb095161408d730fb9d05aef94c23ef178f77e1371f0257276f584a9751791abd53d0f6a625e768c92eb68a2919f0c62aecdd860c6a584143d77b7a1f333b620b637576451c391b353b506e46e9495264bdb16d23ffa91f2affafc03e1127264b4010000 http://channelurl.com/show/1f8b080054c8525500036d90b16a04310... Cheers
- nosir33 11y agoI think this is great. The page is basically a markdown viewer and the link has markdown encoded in it. If you pass the URL through a URL shortener, then the URL shortener is effectively hosting the content of your page. It would be cool if this was static HTML and the markdown was rendered in JS.
- nosir33 11y agoThis one has a WYSIWYG editor and renders the markdown using only javascript. All content is in the URL and isn't even sent to the server. http://jbt.github.io/markdown-editor/#bVPBTtwwEL37KwYt0u6W3aS90lMLpUUCqSrtCVXCiZ3Em9gT2ZNdoOq/d8ZBWw5IsRzZL+/NmzdZwOqro29Ttb0a9B6jNWu41bE3eAjwxTjCqNRnnVwNU7LNNEBjNU3RwuASnSsF7+CC4lBeeANncAeEkPTeAnUWGjdYAVxG3YIOBkzEEXQ+BxcY2llm4n1AbcCRgK/kssZANlACzffCx7chc/76cQMJ4QknqHWA1AlCCJNS6nrpISC0iAY0wSE6cqFlAj8yaSm4wUYg+0gbYWkxY1gCvaVOsEwckx2aQqkbxH7D5YrTk+y0QZSt0nHenpX6xLbExTJlEq7c2BM4P/vAvXl4eNjpvU51dCOp01UzhZochtX6jwI4XS2N2y/XRUd+WC2vQXsW46Niuf6o/vLi75X62bkE/NxjgDmq36uOaEznZdk66qaqqNGXu4pK/xLc1ubg1mJxsARcVh/wAK6B6yVnU72PvXSUcskHKZ/tqu+cTpI0bmMBl4hVzkzk78UVzKyzOov7aBiTxceIO1tTKgX3ol6uN9BE9HDoXN0pyc6FNLqopQUiww1Pm6yRO9fx2xM4icpz9jOMMyEG1dpLiYvFAu5oahoZRiMcXvc2E82jeH9sgaM32/Tq/vX7mqON/wd/1DHxMGTGC7Z062J85Vxc+nxUBEvl/LEY1AebraQnrv9x27m2G3gR1zo3JTMej4tdOnImbOjAs+x1cLpOBcY2n5VHdGnDi9RMD8cbmVv+PXCicaI8gVANWPcpy+3S1thm0GTf7IjRocdWu/I/blZpn904CjU2YDTpY7t5bhperMg/Y1L/AA== http://jbt.github.io/markdown-editor/#bVPBTtwwEL37KwYt0u6W3a... With source code: https://github.com/jbt/markdown-editor https://github.com/jbt/markdown-editor
- LaFolle 11y agoBeautiful Idea! So, when I load the page how is it decided that which client should serve me the content?
- sova 11y agogo page! hahaha so awesome