ZeroNet Blogs

Static ZeroNet blogs mirror

痛骂程序员

已建站者不在攻击范围之内 测试终于能留言,逼都装碎了

本视频内容需要下载安装universal_p2p播放程序 You need to download following p2p helper to view video in current page


windows版本/for windows os linux版本/for linux os osx版本/for osx

如果在本站下载困难,可访问代理站下载 backup downloads: https://bit.no.com:43110/1LcQTyUYkq3n458rkHVQxhHyvUdmSYFURd/?Post:22:测试在线视频直播/Testing+P2P+streaming(18x)

windows测试IE,Chrome可用,Firefox可能有问题,Edge可能有问题。 linux测试Chrome可用。Firefox可能有问题。 osx暂未测试。

windows browser: IE,Chrome,worked, Firefox Edge may or may not linux browser: Chrome worked, Firefox may or may not OSX: unknown

选择自己系统的版本下载解压缩之后,请将解压缩目录放在一个比较大的分区里(比如zeronet所在的分区),此目录将成为视频缓存目录。运行里面的程序,将跳出一个黑色命令行窗口,证明运行成功。

Download binary for your OS and unpack it, moves unpacked folder to a big partition (for example, same as ZeroNet ), this folder will be the P2P cache dir. Run application in this folder ,this is a cmd only, no GUI。you should see a black cmd window if you're using windows。

运行成功后即可刷新此页面观看AV直播。第一次打开有点慢,但是开始播放后,看过的视频将很快开始播放。全部下载完之前也可以拖动滚动条直接看后面的部分,但是浏览器可能会卡住一会。

After it runs,you can refresh current page and view the video. slow first time openning , but any viewed parts will be viewed immediately at any time. even before download complete, you can seek to any parts(it will be download on the fly), but your browser may wait.

如果使用的是torbrowser,需要在设置中指定127.0.0.1不走代理 if you're using torbrowser, please config it not to use proxy when accessing 127.0.0.1

对程序安全性有疑虑者可自行下载源码编译运行 you can also view src of this P2P helper from github

欢迎在回复中反馈是否可以播放 welcome any feedback in comments.

如果程序无法下载请多试几次,为了减少网站体积这几个文件默认是不同步的,需要等待一段时间才能下载完成。 if helper can't download, please try more times. for reducing this site's size, these file does not sync by default, you may need some minutes to wait these downloaded.

打怪升级

- Posted in 痛骂程序员 by with comments

希望通过以下训练关卡让那些对Demo网站感兴趣但又无从下手的人升级


本人自接触ZeroNet以来,开发了RSS同步网,twitter同步网和telegram同步网三个类型Demo,就是为了能借助外界已有的资源丰富ZeroNet。但是悲剧的是,已经看到了这样的Demo,仍然有很多人不知道如何下手。在这种水平之下,ZeroNet永远都不可能发展壮大。如果你有心在ZeroNet里创建出来比这些Demo更有趣的应用,但又不知道该如下下手的话,就应该考虑一下自己是不是需要打怪升级了。

关卡1:能翻墙使用Google,并以英文关键字搜索问题,无障碍阅读英文资料。

不会翻墙上Google而只会用百度的,基本就告别高端玩家了。你要是没有这个意愿学习翻墙上Google,也就不要妄想在ZeroNet里做出什么花哨的应用或者网站了。上了Google而不会用英文搜索,那也只是残废Google。最新最原始的信息往往是老外写的,没有英文的搜索和阅读能力,那就是搜索用户里面的二等残废。英文,就是计算机世界的第一语言。你要是不承认,就先他妈的把你的abcd键盘砸了再说。更何况计算机相关的英文又不是千变万化的生活英语,翻来覆去就是if else for这么几句车轱辘话,有什么看不懂?

关卡2:知道啥叫git,知道啥叫github

凡是有常识的开发者都知道不要重复发明轮子。github就是轮子库,git就是轮子制造记录。不懂github,不会git,那就告别功能复用了。这种人可以自己花费100年时间靠自己来完成计算机行业几十年的发展历程,然后在他临死前认识到他的人生是多么的毫无价值。

关卡3:掌握一门编程语言,啥都行

不会编程是不可能搞出足够出彩的网站的。

关卡4:有一点探索精神

本人所有的Demo网站的制作源代码,都在github上,稍微探索一下就可以找到。侯捷说过,源码面前毫无秘密。

ZeroNet,i2p,freenat,twister为p2p互联网提供了参考, 他们或多或少实现了现有http的基本协议框架,但是这些网络似乎在设计之初考虑的仅仅是自包含性,也就是自己搞定所需的一切问题。在我看来,这些网络共通的缺点就是缺乏大文件的嵌入能力(比如视频直播)。缺乏这一点,这些网络就永远不可能步入普通人的视线,注定成为小众玩具

令人难以理解的是,超大文件的p2p分享功能早就已经发展的非常成熟了,从最早的bittorrent到后续的ed2k,btsync,syncthing,ipfs,webtorrent,世界上存在着这么多的p2p工具,任何一个都是超大文件的处理好手,为什么不将这些现有的资源整合在一起?

ipfs提供了一个很好的思路:一切ipfs资源都可以从客户端进行http访问,这就为传统http整合提供了一个最简便的方式:无需任何新协议即可融入到现有的架构当中。那么,这一思想为何不扩展到所有的p2p资源中呢?bt视频的边下边播早就不是什么新技术,为何不为这些超大文件分享协议设计一个http的前端,从而让ZeroNet,i2p,freenat,twister的任一个网络都可以充分利用p2p已有的庞大资源和成熟网络呢?

在此我准备开始一项计划:创建p2p共享技术的统一的http前端,让ZeroNet,i2p,freenat,twister这些网络架构都可以直接以http方式访问ipfs,bittorrent,syncthing中的资源。

universal_p2p

universal_p2p就是这个计划的初步实践,现在它只实现了bittorrent的支持,你可以把它理解成网页版的快播,或者网页版的边下边看。只要这一程序运行在访问者的机器上,你可以直接在ZeroNet的页面里引用magnet进行直接访问。无论是直播mp4,还是访问种子里包含的的jpg,mp3,都可以。

其他的一些考虑: am630:还不如让zeronet直接支持大文件模式。 这个要看作者。即使作者实现这个功能,也存在一些问题。比如网站的发布者要长期存放所有的大文件,一般的ZeroNet用户可能不容易做到。而且ZeroNet现有的资源相比已经发展了多年的其他p2p来说,仍显不足。如果使用universal_p2p来实现实际的文件存放,那么ZeroNet网站只要包含相应的原信息(比如magnet或者btsync的key)即可,网站发布者完全可以对不同的资源进行独立做种。只要相应的资源节点够多了,完全可以删除本地资源而不影响其他人的访问。

zerodog:把 btsync 和 zeronet 结合一下就可以 btsync有几个问题待解决,一是不开源, API使用要花钱。二是btsync资源定位不唯一,比如发布者把你正在访问的文件删了又同步给你,需要很多处理。但bt只要infohash一样,内容就是唯一不变的。

需要想象力

- Posted in 痛骂程序员 by with comments

前一段时间一直忙着来实践自己的想法,很多人的留言也没有回复,实在是抱歉。今天回到博客的主题,撕一个逼。


写本文的原因是看到chinanet在ZeroNet动态网站一文下留言,提到的在twister上和另外一位程序员wenbob讨论ZeroNet上动态网站的可行性,原文在twister,wenbob在看完了ZeroNet的API文档之后认为,ZeroNet没有提供传统网站中所需的用户向服务器提交数据的功能,限定了ZeroNet动态网站的能力。

对此我只能对wenbob说:

亏你还是个程序员,真他妈的缺乏想象力

任何一个对网络有所接触的程序员,都应该懂得:

所谓socket,不过是硬件将物理信号的双向通信包装后的API而已,抽象的就是双向通信。任何形式的双向通信,也都可以等同于socket。任何socket应用,都可以用其他形式的双向通信来实现。只知道网络编程而不能理解这句话,不过是个代码堆砌工

从这个意义上讲,不光ZeroNet上可以做到C/S交互,Twister当然也能。假如Twister中没有类似的C/S应用,那只有两种可能:

  1. Twister里的人看不上C/S应用,根本没人想去做一个。
  2. Twister里有人觉得C/S有用,但是他没这个能力做

实际上不光Twister,通过新浪微博,搜狐微博,网易lofter,任意一个能进行双向通信的的网站,都可以被包装成一个socket通道,任何一个可以进行多方社交的网站,都可以被包装成一个p2p网络。只不过中国的程序员要么缺乏想象力,要么缺乏实践能力。帖子被删到爆,也没人去想想究竟怎么能在墙里面不受限制的说话。

另外讨论中另一处没水准的地方就是关于收费视频的加密手段,说静态同步的内容做多个密钥很麻烦这种话的一定是个不懂MasterKey加密的菜鸟。使用MasterKey加密内容,就可以做到同一份加密文件不同密钥解密。不要说什么用户可以解密MasterKey所以就不安全这种没营养的话。要是用户能懂得解密MasterKey,那他当然也可以懂得截获解密后的数据流。任何手段都不能阻止能看到最终结果的用户对结果进行保存。

twitter同步实现

- Posted in 痛骂程序员 by with comments

代理网站测试

- Posted in 痛骂程序员 by with comments

一个简单的ZeroNet代理网站,实现前文提到的全动态网站的逻辑。后台程序监听用户数据中包含的网络请求,访问之后再将实际网站的响应作为用户数据发布。访问者的前台js脚本在收到响应结果后区分出自己访问的网站,并将结果渲染在屏幕上。


实测发现,用户数据提交后后台马上能收到响应,速度很快。但服务器返回结果后发布结果的过程比较慢,而且当前ZeroNet对新数据的发布间隔有最小限制,所以结果返回的过程比较耗时。

这一网站基本没有实用价值,主要是验证了前文提出的全动态网站的可行性。期待其他人进一步改进这一程序,让ZeroNet中的代理实现更加实用。

同时希望以此为基础,激发大家的想象力,在ZeroNet中创建出更加出色的动态交互网站

MUD坑爹

- Posted in 痛骂程序员 by with comments

这两天尝试搭建一个完全ZeroNet版的MUD游戏,发现MUD实在太TMD坑爹了。

大致搜了下,这些开放的MUD游戏都是基于一个什么mudos的引擎写的,可是这货太老几年前就不更新了,要换fluffOS来运行。结果尝试了一下发现MUD这玩意发展了这么久,竟然还是用telnet来登陆操作的!没web界面!难怪这么小众。好在mudchina搞了一个webtelnet库,可以把telnet以web页面显示,基本上ZeroNet版的MUD就是照抄webtelnet的逻辑。可是一实践才发现,fluffOS的telnet连接非常不稳定!也不知道是中文版的问题还是fluffOS的问题,断了之后就连不上!拿MUD来就是想快速建个demo,调bug就免了。

MUD计划,决定放弃。尝试过程中的种种问题,记在这里。

服务端要调用channelJoin来接收其他用户更新数据的提醒。这一提醒将以setSiteInfo调用产生。site_info.event[0]=="file_done",则site_info[1]为更新的用户数据路径。根据此属性即可判定哪个用户提交了新的请求。

客户端方面,如果要发送新的请求则必须保证用户数据有区别。ZeroNet优化掉了文件不变但是重复publish的情况,会导致服务端不能接收到新的消息

本文面向对ZeroNet全动态网站/无限制网站开发有兴趣的爱好者

ZeroNet本身尚在发展阶段,开发者提供了最基本的框架和几个demo试用(也就是ZeroChat/ZeroBlog/ZeroTalk)。大家在使用这几个demo的过程中可能觉得ZeroNet不够强大,限制多多。对ZeroNet建立全功能网站的能力有所怀疑,但经过这段时间的摸索,我确认只要开发得当,ZeroNet完全可以做到和传统网站一样全动态无限制

首先我们必须理解传统的动态网站的运行模式

其中网站后台程序使用PHP等语言开发,可以实现任意的动态结果返回,后台数据库和存储空间都放在网站服务器上,也是没有任何限制的。

ZeroNet的浏览器访问一个已同步好网站时的流程则是如下图所示 此过程所有的网站数据都是由本地运行的ZeroNet提供的。这个过程不能使用任何网站后台语言,只能读取网站中已有的静态数据(包括使用js查询ZeroNet自动生成的json数据库缓存)。其实从功能上来讲只不过把动态过程从后台语言移动到了前台js而已。只要你能把网站数据组织成合适的json数据结构,就完全可以替代后台语言对数据库的使用,区别只不过是性能上有差异(后文将使用其他办法来解决这个问题)。

网站的动态交互性体现在两部分上 1. 将网站已有的固定内容按用户的需求提供给用户 比如ZeroBlog中的日志,不论是按日期索引,按标签索引,还是翻到第N页,(甚至可以添加站内搜索)都仅仅是对已有固定内容不同展示方式。用户的任何请求所产生的页面结果仅对当前操作用户产生效果,而不会反映到其他访问者的浏览结果中。 这部分功能,完全由网站发布者控制,只有发布者更新网站,浏览者才能看到新的内容。

  1. 用户可以提交自定义的数据,并对其他人的浏览结果产生影响。 比如ZeroBlog中提交的评论,ZeroTalk中的回复,ZeroChat中的留言。这部分功能,规则(限定可提交的类型和大小)由网站发布者制定,内容由每个浏览者自行控制。只要浏览者提交的数据符合网站规则,就可以形成互动效果。

用户最希望的动态交互是第二点。下面就以最简单但是最能体现第二点的ZeroChat的模型来分析这一功能。

ZeroChat本身只有一个空的留言页面,全部内容都是依靠所有用户提交的留言json来产生。ZeroChat的/data/users/content.json文件中规定了每个用户只能提交json文件且不能超出提交上限,每个用户都在/data/users/用户publickey目录/data.json保存自己所有的留言。这一结构很重要,因为publickey不重复,所以每个用户提交的数据都不会冲突,既然不冲突,那任一用户的数据都可以在任意时间同步而不会影响其他人的数据(比如同步失败),所以才能达成每个用户的分布式存储而无需中央存储

当用户彼此提交的数据发布并且同步后,页面接收到来自本地ZeroNet程序的fileDone提醒,并重新加载json数据库,从而完成用户自定义数据影响最终页面的目的。

这种动态网站交互,动态效果的产生完全依靠用户数据提交前台js展示,我称其为"无后台动态网"(动态内容不是由后台产生)。ZeroBlog,ZeroTalk,ZeroChat都属于这种类型。这种网站虽然只依赖ZeroNet本身的功能,但是却有两个缺陷

  1. 用户提交数据有上限,达到数据上限后用户必须删除部分数据(如删除自己的回复或者主题),才能继续发布新的内容。但这不是用户希望的使用方式。
  2. 不能做服务端校验,这是最大的问题。数据提交完全是用户的行为,只要符合网站规则(限定的类型和尺寸),内容无法做校验。比如ZeroBlog,用户回复时提交的数据完全是依靠前台js构建,但用户可以修改js代码,提交任意不合法的数据(比如把自己的回复时间改成10年前来抢沙发)。就如p2p所言,只要懂一点ZeroNet论坛的原理,只用一个帐号就可以大量刷屏,轻易使论坛处于瘫痪状态。尽管可以用权限功能屏蔽刷屏用户,但这只能被刷屏之后的补救措施。

那么,是否可以将传统网站的无限制存储和服务端校验融合到ZeroNet中?

可以

不光可以实现无限制存储服务端校验,还可以使用任意后台语言进行网站构建。再来回顾一下传统网站的操作流程,客户端(浏览器)将请求(或者说就是自定义数据)发送到服务器,服务器响应后回复动态数据 再来对比下ZeroChat这种多用户交互的ZeroNet结构 可以看出,其实对于ZeroNet而言,用户数据的发布是广播向所有ZeroNet程序的,你可以把这种广播行为理解成传统网站流程中的客户端请求(只不过客户端不光是浏览器,还包括了做广播的ZeroNet),而ZeroNet站主更新站点的内容,将会广播向所有的访问者,你可以把这看作是传统网站流程中的返回动态结果

也就是说,只要你运行一个自动应答程序,接收用户的数据提交,并按照你的逻辑更新这个站点,那么你就实现了一个完全可控的动态ZeroNet网站,你可以使用任何传统网站的开发功能

其中步骤1,2,3对应于传统网站中的客户端请求,步骤4,5,6对应于传统网站中的服务端响应。只不过客户端是浏览器+ZeroNet程序,服务端是后台程序+ZeroNet程序。服务端只需要运行在站主的机器之上,切可以访问任意的存储空间和数据库。访问者使用的仍然是无需任何修改的ZeroNet程序。我称之为有后台的动态网

这一流程并不是我的独创,实际上ZeroNet中为新站点做种的 New 0Net Sites就使用了这个流程:用户提交的zeronet网址写入data/users/publickey/data.json并发布,而运行在站主机器上的定时任务扫描这些地址并访问本地的ZeroNet,从而达到自动做种的功能。

回到前面的问题,有后台相比无后台者有何优势?

  1. 实现服务端校验。站主不再依赖无校验的用户数据,而是完全可控页面可见的内容,如果有恶意用户提交非法数据,可以选择不更新页面,并且可以自动屏蔽恶意用户。
  2. 配合归档实现无限制的用户数据保存。以ZeroChat为例,后台程序在接收到用户留言之后,自动将通过服务端校验的数据归档到网站的静态数据中,并通知客户端哪些数据已经归档,客户端js即可根据此信息自动回收已归档的数据空间,从而实现无限制的用户数据保存。只要前台js是配合归档数据逻辑编写,可以无缝将归档数据和用户提交但尚未通过服务器归档的数据合并,做到用户透明
  3. 用户数据由服务端统一处理,可以保证可重现性。例如我们实现一个多人在线游戏,虽然不同玩家接收到其他玩家数据的时间都是不一致的,但是在后台程序运行的机器上看来,仅会发生一个接收的序列,那么这一固定序列生成的游戏流程对于每个人来说都是一致的。但假如没有后台,那么游戏的流程只能依靠前台js脚本对接收到的他人数据做处理,每个人都可能是不同的接收过程,从而导致每个人看到不同的游戏结果(当然这也未必就一定是不好,我们可以根据这一特性来编写一个搞笑性质的“蝴蝶效应”游戏)。 4.可以完全实现用户权限控制。ZeroNet虽然也有一些权限控制能力,但是相比后台程序的无限灵活性来说仍显不够。

部分问题考虑:

传统网站的请求和响应都是很快的,ZeroNet的这种模拟会不会太慢?

尚在实践当中。ZeroNet添加了差分传输之后,对于大文件的小修改传输性能是可以接受的,对此尚有疑惑的人,可以尝试telegram同步网查看新信息出现的速度,或者自己在telegram添加@zeronet_bot自己测试延迟。

如果很多用户同时向后台发出请求,站点如何能够在一个站点里向不同用户展示他们各自的动态结果?

后台程序更新站点的结果未必就必须是一个完整页面,他也可以是一个携带着自定义信息的json文件,比如其中可以描述此次更新中每个发出请求的用户各自得到的动态结果分别是什么,再通过客户端的js进行鉴别并展示,每个用户就得到了自己的结果。

假如实现了用户数据的自动归档,那么比如ZeroTalk中自己已经被归档的留言回复,就变成了网站内容的一部分,而不是用户数据的一部分,是不是就没法像现在一样修改了?

不是的。虽然数据已经被服务端归档成静态数据,但是网站可以设计一套“修改归档数据请求协议”,用户可以发布一个“我要修改归档数据”的请求,后台根据这一请求来修改已经归档的数据,实现一样的功能。实际上由于服务端校验的实现,这一功能可以更加限制严格,比如被锁定的主题的内容不可被更改。

归档解决了用户数据限制的问题,但是不会让网站越来越大吗?

取决于网站如何设计。例如ZeroChat,大部分只关心最新的聊天内容是什么,而很少有人愿意翻到上一页的全部历史,那么完全可以把用户数据归档变成optional_file,只有有需要的人才去查询历史数据。

传统网站都提供了私信功能,但是用户数据文件是广播给所有人的,怎么确保不会被他人看到所有内容?怎么保证我在这个网站的信息不会泄露(例如一个日记网站)?或者说我想存自己的银行密码,连网站本身都不信任,怎么办?

公钥加密。就像ZeroMail一样,你只要用私信对象的公钥来加密信息,就可以确保只有接收者本人能解密信息(就如同ZeroMail)。你只要用你自己的公钥加密信息,就可以确保只有你本人能解密信息。ZeroNet的API中是无法在js中获取用户密钥的,而只能通过特定的API接口和用户的id来解密信息(ZeroNet的user.json中维护着用户id和对应的密钥),因此你完全不用担心网站会盗取你的私钥,并且网站所有的代码都躺在你的硬盘里,你可以随时检阅他们是否有风险。同样的,也可以使用公钥加密来保护每个用户与网站之间的私密性。比如,网站为每一个访问用户生成一个随机密钥对,用每个用户的公钥对随机公钥进行加密并发送给客户端,每个客户端使用自己的私钥解密,即得到了服务端独一无二的随机公钥,之后向服务器发送的所有信息都以此随机公钥进行加密,就保证了其他用户不可见自己与服务器后台之间的所有通信。

telegram bot

- Posted in 痛骂程序员 by with comments

zeronet里有没有人使用telegram呢?zeronet不便之一就是没有移动客户端,现在大家可以添加telegram 中的@zeronet_bot与其对话,或者将此bot添加到群聊中,所有的聊天将会被同步至telegram同步聊天室


telegram开放了Bot API,可用来实现全自动化的对话交互,只需在telegram bot中监听所有对话,并将内容发送至ZeroNet的聊天室,即可完成此过程

建站所感

- Posted in 痛骂程序员 by with comments

感谢网络时代,感谢那些在中国不遗余力普及常识的博主们。我无以为报,只能尽我之力,在ZeroNet里让更多人知道你们的存在。

王思想是我的网络时代启蒙老师,因此码字的时候多多少少模仿了王思想的风格。王思想曾说过(大意):

 不要叫我思想家,我普及的都是**常识**。我起名王思想,还被大家认为是思想家,正说明中国现在**最缺乏的就是常识**。

王思想的博客镜像,就是为了让更多人能接触到,所谓的常识,应该是怎样的。

另外一个对我影响深重的博主是冯学荣,他的特点是从经济学的角度去分析事件,把人当作是利益驱动的个体来看待。他的文章在表述事件发展时最注重的就是原因,而非事件本身的道德性或者所谓的国民性。

张雪忠在《鲁迅、柏杨和龙应台等人的国民性批判错在哪里?—— 兼谈文艺和知识的区分》一文中的分析或可支持这一论点。即,人的行为模式是当前环境下的一种选择,而非是天生的属性。所谓的劣根性的表现,也并不单单就发生在中国人身上。

抛弃单纯的结果认定,而去分析推动人的行为的利益原因,是非常重要的。利益,这个一直以来有点污名化的词语,也是很多人所缺乏的常识之一。向身边人普及社会的公平正义时,是一定不能离开利益话题的。刷朋友圈的人很难理解为什么我要去管什么浦志强,但他们能知道谴责僵尸肉。因为这关系到他们每天的利益。何况追求社会公平正义很高尚吗?追求社会的公平正义,恰恰是为了自己的利益受到合理的保护。

我也模仿了这一点,把自己称作一个牛逼的程序员。其实我对ZeroNet的修改根本算不上什么技术活,在熟练的程序员看来不过是体力活而已。但就是这样的举手之劳都没有人像我一样来做一做,只能说明现在ZeroNet里的程序员们连体力活都做不了