<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>P2p on Notes</title>
    <link>https://www.simplicidade.org/tags/p2p/index.xml</link>
    <description>Recent content in P2p on Notes</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <managingEditor>melo@simplicidade.org (Pedro Melo)</managingEditor>
    <webMaster>melo@simplicidade.org (Pedro Melo)</webMaster>
    <copyright>(c) 2016 Pedro Melo.</copyright>
    <atom:link href="/tags/p2p/index.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsuhhubbub.superfeedr.com/"/>
    
    <item>
      <title>WebRTC</title>
      <link>https://www.simplicidade.org/survival/webrtc/</link>
      <pubDate>Sat, 30 Jul 2016 11:57:38 +0100</pubDate>
      <author>melo@simplicidade.org (Pedro Melo)</author>
      <guid>https://www.simplicidade.org/survival/webrtc/</guid>
      <description>

&lt;p&gt;WebRTC provides the API&amp;rsquo;s to implement P2P connections between clients, like browsers.&lt;/p&gt;

&lt;p&gt;Probably the best article on WebRTS is this: &lt;a href=&#34;http://www.html5rocks.com/en/tutorials/webrtc/infrastructure/&#34;&gt;WebRTC in the real world: STUN, TURN and signaling&lt;/a&gt; - the signal level is extremely high.&lt;/p&gt;

&lt;p&gt;Below I keep a bunch of links to specs and software that I&amp;rsquo;ve looked at.&lt;/p&gt;

&lt;h2 id=&#34;browser-support&#34;&gt;Browser Support&lt;/h2&gt;

&lt;p&gt;Support for &lt;a href=&#34;http://caniuse.com/#feat=rtcpeerconnection&#34;&gt;WebRTC in browsers&lt;/a&gt; is restricted to Chrome and Firefox, but both Edge and Safari have it under development.&lt;/p&gt;

&lt;p&gt;Personally, I believe that in the &lt;sup&gt;2017&lt;/sup&gt;&amp;frasl;&lt;sub&gt;2018&lt;/sub&gt; we should be able to use this technology with ease.&lt;/p&gt;

&lt;h2 id=&#34;code-examples&#34;&gt;Code examples&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;a &lt;a href=&#34;https://codelabs.developers.google.com/codelabs/webrtc-web/#0&#34;&gt;step-by-step video chat application&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&#34;webrtc-and-socket-io&#34;&gt;WebRTC and Socket.IO&lt;/h2&gt;

&lt;p&gt;Most examples of WebRTC focus on audio and video, but the &lt;a href=&#34;https://developer.mozilla.org/en-US/docs/Web/API/RTCDataChannel&#34;&gt;RTCDataChannel&lt;/a&gt; is also very interesting because it allows a &amp;ldquo;socket-io&amp;rdquo;-like interface directly between peers. In fact, there is even a &lt;a href=&#34;http://socket.io/blog/socket-io-p2p/&#34;&gt;Socket.IO P2P project&lt;/a&gt; already, so you can use the same API everywhere.&lt;/p&gt;

&lt;h2 id=&#34;infrastructure&#34;&gt;Infrastructure&lt;/h2&gt;

&lt;p&gt;If you plan on using WebRTC, you might want to have your own STUN/TURN servers, with proper authentication. If you plan on multi-user video, then a Multipoint Control Unit is a wise investment.&lt;/p&gt;

&lt;h3 id=&#34;ready-to-use-conference-software&#34;&gt;Ready-to-use Conference software&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/strukturag/spreed-webrtc&#34;&gt;Spreed WebRTC&lt;/a&gt;: all-in-one solution for multi-user video conferencing. Core server in Go, client powered by Node.js and Websockets. Includes support for Desktop Sharing with Chrome and Firefox. Requires a separate TURN server, but recommends CoTurn (see next section). They sell a turn-key hardware/software solution, &lt;a href=&#34;https://www.spreed.me/store/&#34;&gt;Spreedbox&lt;/a&gt;, that looks really good&amp;hellip;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://bigbluebutton.org/&#34;&gt;BigBlueButton&lt;/a&gt; - current version only uses WebRTC for audio. There is a &lt;a href=&#34;http://docs.bigbluebutton.org/support/road-map.html#html5-client&#34;&gt;HTML5-client in the works with full WebRTC&lt;/a&gt; support. Probable the most tailored to classrooms, lots of useful tools (chat, presentations with annotations, voice control, pools, audio, video, SIP dial-in). I&amp;rsquo;ve been using this software since 2010-ish;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://bluejeans.com/&#34;&gt;BlueJeans&lt;/a&gt;: Comercial, doens&amp;rsquo;t mention price, so you probably can&amp;rsquo;t afford it, but impressive set of supported software.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&#34;stun-turn-servers&#34;&gt;STUN/TURN servers&lt;/h3&gt;

&lt;p&gt;In case you need a STUN/TURN server, your best bet is probably &lt;a href=&#34;https://github.com/coturn/coturn&#34;&gt;coturn&lt;/a&gt;. It has everything that you&amp;rsquo;ll ever need.&lt;/p&gt;

&lt;p&gt;An (worse) alternative is &lt;a href=&#34;http://www.creytiv.com/restund.html&#34;&gt;restund&lt;/a&gt;. The main developer doesn&amp;rsquo;t have a repository available.&lt;/p&gt;

&lt;p&gt;A &lt;a href=&#34;https://github.com/otalk/restund&#34;&gt;forked version or restund is available&lt;/a&gt;, and there is a simple &lt;a href=&#34;https://github.com/melonmanchan/restund-docker/blob/master/Dockerfile&#34;&gt;Docker image for restund&lt;/a&gt; that you can use to get quickly up-to-speed.&lt;/p&gt;

&lt;h3 id=&#34;multipoint-control-unit-and-selective-forwarding-units&#34;&gt;Multipoint Control Unit and Selective Forwarding Units&lt;/h3&gt;

&lt;p&gt;Apart from commercial MCU&amp;rsquo;s (like the &lt;a href=&#34;https://www.cisco.com/c/en/us/products/conferencing/telepresence-mcu-5300-series/index.html&#34;&gt;Cisco MCU&lt;/a&gt;), there are a couple of OSS projects you can look at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the &lt;a href=&#34;http://lynckia.com/&#34;&gt;Lynckia project&lt;/a&gt; has &lt;a href=&#34;http://lynckia.com/licode/&#34;&gt;Licode&lt;/a&gt; that includes a MCU, &lt;a href=&#34;https://github.com/ging/licode/tree/master/erizo&#34;&gt;Erizo&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://janus.conf.meetecho.com/&#34;&gt;Janus: the general purpose WebRTC Gateway&lt;/a&gt; - looks good, small and simple;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.medooze.com/products/mcu.aspx&#34;&gt;Medooze has a MCU&lt;/a&gt;, with an &lt;a href=&#34;http://www.medooze.com/products/mcu/open-source-installation.aspx&#34;&gt;openSource variant&lt;/a&gt;, that should &lt;a href=&#34;http://www.medooze.com/products/mcu/webrtc-support.aspx&#34;&gt;support WebRTC&lt;/a&gt;. It does seem to require a SIP server though&amp;hellip;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other providers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.ahoyconference.com/&#34;&gt;AhoyConference&lt;/a&gt; has a &lt;a href=&#34;https://www.ahoyconference.com/download.html&#34;&gt;download for their server&lt;/a&gt;, including a RaspberyPi version, with a &lt;a href=&#34;https://www.ahoyconference.com/faq.html&#34;&gt;5-user license included&lt;/a&gt;. This solution includes support for &lt;a href=&#34;https://chrome.google.com/webstore/detail/ahoy-conference-screen-sh/paceafegobhbmdgobicalhpccieaaadb&#34;&gt;screen sharing with a Chrome extension&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://jitsi.org/Projects/JitsiVideobridge&#34;&gt;VideoBridge&lt;/a&gt; is a SFU, part of the &lt;a href=&#34;https://jitsi.org/&#34;&gt;Jitsi project&lt;/a&gt;. The entire project has a lot of goodies.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
    <item>
      <title>I wish this could happen here</title>
      <link>https://www.simplicidade.org/notes/2005/05/22/i-wish-this-could-happen-here/</link>
      <pubDate>Sun, 22 May 2005 00:18:43 +0000</pubDate>
      <author>melo@simplicidade.org (Pedro Melo)</author>
      <guid>https://www.simplicidade.org/notes/2005/05/22/i-wish-this-could-happen-here/</guid>
      <description>&lt;p&gt;Check out &lt;a href=&#34;http://arstechnica.com/news.ars/post/20050519-4925.html&#34;&gt;http://arstechnica.com/news.ars/post/20050519-4925.html&lt;/a&gt;. I quote my favorite part&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The plaintiffs do not know the identity of the persons they wish to sue, let alone the details of precisely what was done by each of them such as to actually prove infringement. Such facts would only be established after examination at trial. [&amp;hellip;] It is sufficient that they show a bona fide claim, i.e., they they really do intend to bring an action for infringement of copyright based on the information that they obtain, and that there is no other improper purpose for seeking the identity of these persons.&lt;/p&gt;

&lt;p&gt;Nevertheless, the court found IP addresses deficient as a justification for forced identification, and they rejected the argument that the broadband companies were in possession of documents detailing who these users are in real life. With regards to this latter issue, the court rightly noted that &lt;em&gt;matching an IP at any given time to a user constitutes more than re-producing information&lt;/em&gt; (e.g., there&amp;rsquo;s no peice of paper they could surrender; rather, they&amp;rsquo;d have to investigate themselves). Along similar lines, the court said that &lt;em&gt;the evidence presented amounted to nothing more than hearsay&lt;/em&gt;. As you can see, the gist of the decision centers not on ideology or copyright analysis, but on the rules of evidence.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is really interesting. I&amp;rsquo;m specially impressed by the notion that when an ISP gives information about a user based on the IP address, the court compares this to hearsay.&lt;/p&gt;

&lt;p&gt;Of course, this was in a Canada court, and I don&amp;rsquo;t think that we&amp;rsquo;ll see something like this in Portugal anytime soon.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>P2P? Think NNTP...</title>
      <link>https://www.simplicidade.org/notes/2005/05/06/p2p-think-nntp.../</link>
      <pubDate>Fri, 06 May 2005 11:41:50 +0000</pubDate>
      <author>melo@simplicidade.org (Pedro Melo)</author>
      <guid>https://www.simplicidade.org/notes/2005/05/06/p2p-think-nntp.../</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://celso.arrifana.org/&#34;&gt;Celso&lt;/a&gt; wrote about &lt;a href=&#34;http://celso.arrifana.org/?p=8&#34;&gt;using P2P technology to distribute content&lt;/a&gt;, in the context of blogging.&lt;/p&gt;

&lt;p&gt;There are two types of content that you might want to distribute: the syndication feeds, and the HTML pages.&lt;/p&gt;

&lt;p&gt;The syndication feeds is a hot topic right now, specially in the &lt;a href=&#34;http://groups.yahoo.com/group/feedmesh/&#34;&gt;Feedmesh&lt;/a&gt; group. Feedmesh already has notification distribution and &lt;a href=&#34;http://bobwyman.pubsub.com/main/2005/04/feedmesh_works_.html&#34;&gt;it seems to be working great&lt;/a&gt;. In the two previous weeks there where some messages about full content distribution of feeds in the Feedmesh mailing list.&lt;/p&gt;

&lt;p&gt;My personal view about syndication feeds distribution is well known to &lt;a href=&#34;http://the.taoofmac.com/space/&#34;&gt;Rui&lt;/a&gt; and &lt;a href=&#34;http://nowhereland.nunonunes.org/&#34;&gt;Nuno&lt;/a&gt; who are forced to listen to me every time the subject comes up. I&amp;rsquo;m a firm believer that NNTP is the way to go regarding the distribution of RSS/Atom feeds. Notice that I&amp;rsquo;m not talking about Usenet, but the NNTP protocol itself.&lt;/p&gt;

&lt;p&gt;If you use NNTP to flood your content network, and write the files in a easy-to-export layout so that you can put any HTTP server over it and use that as a syndication proxy, you have a basic Content Distribution Network (CDN) for small files.&lt;/p&gt;

&lt;p&gt;There are a lot of small issues that can be improved. There is no need for each node to keep a copy of every feed. If the logs of the HTTP server are used as a lazy-subscription mechanism, falling back to plain HTTP Proxy when the feed is not found locally, but signaling the NNTP server that he should accept that feed from now on, you have a organic beast that follows the trends of your client base. You can also expire old feeds that nobody seems to be reading, or expire only the feed itself but keep the meta data of feeds that are not updated (so you can answer 304 to our clients). We can (and should) store the feed data as GZiped files, so you don&amp;rsquo;t need to GZip-on-the-fly.&lt;/p&gt;

&lt;p&gt;You can point out a lot of drawbacks to this system: the publisher looses statistics of readership, you can&amp;rsquo;t do password protected feeds (at least not in the traditional basic HTTP authentication sense), among others. But those are the tradeoffs that we make to save yourself a lot of traffic.&lt;/p&gt;

&lt;p&gt;My personal side-effect is that if this kind of infrastructure was available, we could extend Feedmesh to the syndication clients. The current Feedmesh is only useful to be used between the major syndication aggregation services because it sends all the feeds that where modified. But if each node in this CDN also provided a filtered Feedmesh feed based on subscriptions of clients, then they could remove all the pooling and switch to a trigger-based content retrieval if they so wished (care should be taken to prevent a swarm of request, but that could be done by controlling the stream of updates sent by this service).&lt;/p&gt;

&lt;p&gt;The question is who will support this. Well, the optimistic person inside me, would like to believe that the ISPs would be interested to provide a better service to it&amp;rsquo;s customers, and if they had a simple system that just worked, they would install it on their own networks, and give it to their clients. The advantages are that they would save some bandwidth (negligible in a world of Bittorrent, I know) and give better service to its customers.&lt;/p&gt;

&lt;p&gt;But the main push, the main collecting of feeds seems to be a perfect fit to the current syndication aggregation services. They already need to do it because their business model is based on having the most fresh content, so each one of them fetches the changed feeds whenever we ping them. If they start pushing the content via NNTP, we just might have the seed we need to implement something like this.&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;The HTML distribution part is different, and I think we are starting to see the solution: &lt;a href=&#34;http://webaccelerator.google.com/&#34;&gt;Google Web Cache&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Google is happy to do that service for you, to be your Coral Network. It seems obvious to me that Google value is related directly to the freshness of their own index. So they want your HTML as soon as it changes. So if Google taps the Feedmesh notification stream, they can see two things: that a specific page has changed, so they can fetch it, index it and cache it (and feed their own GWA), and (as a bonus) mark that page as more than likely being a blog and with that improve PageRank by removing the problems that the blogs are causing them.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#34;http://www.akamai.com/&#34;&gt;Akamai&lt;/a&gt; is probably going to be relegated to DNS and static content CDN from now on.&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>