ZeroNet Blogs

Static ZeroNet blogs mirror

工科菜鸡的瞎bb

rollout@zeroid.bit BM: BM-2cUmD5cBWm98rpTFQvHnfEoRf5bhL4EVE

Riot/Matrix: @Rollout:matrix.org

唯一指定零花钱包: BTC: 12EqNGwVmUt1XJmp9XPmURT8mLsJPMkbVG ZEC: t1fquXXuigYbYwiLexaoqK8bNh7thHU3A95

( = w = )

mong男的人生瘠薄理论,盗版与自制物等等

主攻策略(大于1bit):

  • 推文速率(>5bit)
  • 关键词(>2bit)
  • 格式使用特征(>1bit)
  • 长文体积及爆发速率(>5bit)
  • 长文关键词(>3bit)
  • 入伙时间(>2bit)

助攻策略(小于1bit):

  • 贴文ID覆盖特征
  • ID文本特征
  • 贴文语言
  • 关注者覆盖特征
  • 贴文数量

本篇存储一些最近听到的新鲜货,至于你读到的时候还新不新鲜就看命吧


  • 另一个I2P出口代理已经上线,可以经由stats.i2p的跳转服务来获取到它的b32地址

不过这个出口代理健康状况欠佳,时有抽风。而且出于各种已知和未知的原因,相当一部分网站无法访问,兼容性远不如false.i2p

  • 应对国家级网路审查的全新方式(应对此次防火长城的添砖加瓦)出现。原始论文工具由此前往

这个规避方法并不提供任何形式的匿名性,请自行斟酌

值得一提的是,目前这个工具并不是瘟狗党们能触及到的,因为它目前支持的平台是这么写的:

Linux (must has netfilter supported in kernel)

Tested with Ubuntu 12.04/14.04/16.04.

鉴于0net自身机制对于数据丢失的预防程度仍然有待提高以及在大陆/在洋葱头之后的裙众(和我一般)忍受着烂到爆炸的网络从而导致0net经常丢信息(而0net对丢失信息的检查实在有毒,只能通过"检查文件"来进行,而这个操作在默认的ZeroHello是单站点操作,意思就是,如果你发现你丢失了许多数据,那对一大群站点检查文件的操作可以把你手给点爆。

于是,本咸鱼就改了一个A HACKED ZeroHello


改动的地方只有一处,如图所示:

HHHHHHHELLO.PNG (503x337)

其余各处皆为ZeroHello于2017/10/28的样子

如想正常使用,需要在zeronet.conf文件中加入下面这一行:

homepage = 191DrW3tjYj4Lq2FwBAWjL2uBRHPQi6FCE

然后重启你的ZeroNet客户端,这个玩意就可以使用了。

近日,Zeronet更新到了0.6.0版本,同时也带来了全新的大文件支持

本咸鱼将在此对大文件支持的特性进行初步摸索以及猜测它和Zeronet客户端交互的方式。

同时也会顺便提一下可选文件的添加方式一型改一


该特性以插件(BigfilePlugin.py)形式引入Zeronet中,因此体验该特性必须将客户端升级到0.6.0以上版本。

基于旧版本Zeronet的zite只需要执行一次重签发,就会为所有的大文件(>=10M)各生成一个.piecemap文件,而该文件记录着在执行大文件传输的时候应该怎么分割传输之。

之所以说是天变地异,是因为从这一版本开始,可选文件可以直接通过指向该文件的超链接来获取了(就像各位在表网右键另存为下载东西一样),而这代表着zite们无限的可能性,类似于表网网站结构的视频站、下载站、音乐站等的建立也成为可能。

于是,本咸鱼的向站点中添加可选文件方案一型可以大体不经修改地取代现有的ZeroMux方案成为最佳的载点解决方案。而之所以要叫一型改一是因为:访客的“下载并帮助分发全部文件”在新版本客户端之上不再是必要步骤了

而且也只需要提醒访客们,首先要升级到新版本客户端,其次告知他们第一次下载如果报错,不要慌张,耐心等待一下,客户端正在尝试同步文件。

本咸当初可选文件一型的初步添加文件还留着呢,可以来这里测试一下。

对特性的基本猜测:

  • 插件报错行为紧跟在尝试本地地获取文件之后,同时/然后才会开始尝试从0net中同步目标文件到本地。

  • 试图打开本地不存在的文件时,会先根据请求的文件格式选择网页上的打开方式(视频就调出视频播放器,音频同理,也使最简单的在线流媒体成为现实),若没有相应的打开方式(如本咸上方链接中的.7z压缩包)就会跳转到错误页面,然后/同时让0net向整个网路请求所需文件。

今天功夫网终于大发神威,把0net的官网,同时也是整个zeronet最接近于中心的地方——zeronet.io给封锁了。

0n____.PNG (1721x756)

而这次封锁对墙内造成的影响远不止无法从官网下载0net客户端而已。


目前墙内用户在ZeroBoard上发布消息将会遇到类似情况:

0Board1.PNG (245x68)

而用F12调出终端后发现:

0board.PNG (648x308)

说明ZeroBoard依赖于demo.zeronet.io上的一个php,而这个PHP已经由于GFW而无法访问,所以出现如此错误。

以下为开发者的反应:

ZeroBoard was the first site on ZeroNet when multi-user sites was not possible, so the messages are signed and distributed by contacting the site owner. I was planning to remove it for a while maybe it's the a good time to do it.

各位可以暂且期待一下他对0Board进行换代升级。

目前墙内用户无法通过通常方式注册新的ZeroID,会遇到如下的情况:

0ID__.PNG (1134x503)

由于ZeroID的注册依赖中心服务器(注意右侧的console,可能和ZeroBoard使用的中心化原理相同),无法通过官网的PHP组件来完成证书申请和获取。~~但是,可以尝试一下这个:~~

~~0idBit.PNG (183x29)~~

~~然后去网上找找比特信客户端,看看怎么用,接下来按照他给的提示走就ok了:~~

(并不保证成功率,因为据说就算利用比特信绕过了提交问题,但接受证书还是需要zeronet.io的配合)

0id___.PNG (578x336)

并不是很建议谁注册这个id,因为几乎所有网站都会ban掉这个id来作为封禁示范。

  • 其他影响:

ZeroNet 官网https://zeronet.io 被封了,导致:不翻墙的话,无法在zeroboard发帖,无法注册 zeroid。但其他不依赖https://zeronet.io 服务器的网站不受影响。官网被封,会导致一些trackers无法使用,急需国内trackers支援。官网被封,对新用户入门要求提高。老用户不受影响。

---来自ZeroBoard

对于想在0me上说话的新人来说,除了费劲去注册0id以外(不过最好还是注册一个),也可以以匿名者的身份来发帖,不过首先需要GetAllHub,然后获取匿名账户,再在0me中选择匿名账户,并加入支持匿名者的Hub中(注意!匿名者无法仅支持ZeroID的Hub中的帖子之下发表评论)

AnonymousHub之外,无限Hub也正式开始提供对0ch和ifs匿名者的支持,0ch匿名用户可以经由0chan或者0chn获得。

IM聊天软件推荐:Riot

- Posted in 工科菜鸡的瞎bb by with comments

即时通信(IM)软件是一种非常常用的软件,而传统的QQ以及微信(有人更喜欢提Telegram和Line)正是其中的几个。

传统的单一中心化IM软件,就拿QQ和微信来说,对中心服务器有极其严重的依赖,而且作为专有平台和软体,你的信息其实不归你所有(最近QQ和微信的因言获罪案例想必在0n混迹的各位早已有所耳闻)。优点当然是功能繁多,但缺点(尤其是出在(管理者)身上的缺点)怕是和它们日益臃肿的功能一样多,这里就不细说。


完全对等化的去中心化IM(如Tox以及Ring),也各有各的苦逼之处。首先一个通病就是离线消息的缺失,对于日益移动化的现在肯定是一个非常重大的缺陷。Ring的本职工作是打电话(VOIP),在其它功能上总有这样那样的不如意(但端对端加密值得肯定)。而Tox,目前各大平台的各个Tox客户端特性不齐,通用性和兼容性并不是特别高,而且Tox依赖广播来进行发现和状态(在线离线等)更新,所以你需要保证通讯录质量,因为联系人们知道你的IP地址,只要有一个联系人是蜜罐/沦为傀儡,那你的身份安全/匿名性也会陷入危机之中。

今天打算推荐的IM软件是Matrix协议一族的软件(Riot是其中之一,但较为泛用且功能比较完善),而它们一家其实可以通用(因为基于同一协议而且没有/很少有不兼容性延伸)。而Matrix一族是多中心化的IM,或者应该说服务器端的去中心化。各位可以在Matrix官网看到Matrix的工作过程:多个(相互联结的)服务器注册的不同用户可以在同一个聊天室下进行群聊,而他们发出的信息会被同步到他们所属的全部服务器上,然后推送到聊天室成员的客户端上。这群互相同步的服务器就同一个服务器一样让分别在不同服务器注册的用户可以共同讨论。

由于用户端到服务端之间应用了服务器——客户端的结构,离线消息和其它一些传统IM上的高级功能得以保留。

客户端(包括Riot在内)可以自定义自己要登陆的服务器。

同时,任何人都可以轻易地获取开源的服务端程序来自行搭建服务器,然后不同服务器之间在经过鹳狸猿配置之后可以互相联结组网(至少你不用担心不知道从哪个不知名的服务器天降骚扰还无法让鹳狸猿去干涉之)。意思就是,在服务器数量及其用户发展到一定程度以后,一旦进入极端状态,内网中的各个Matrix服务器可以自行组网,变成一艘巨轮,提供一个统一而去中心化(服务器层面上)的聊天平台。

哥除了对面那个正在说话的家伙以外谁都不信任?Riot提供了端对端加密功能,所有成员所有设备之间都需要两两互相验证(没错,哪怕是同一账号,你自己的电脑和手机之间也需要验证),向未被验证的设备发送加密信息会被警告,也可以在设置里选择不向任何未验证设备发送加密信息。而且,加密聊天室的新成员也好,老成员的新设备也罢,是无法从加密的历史消息里解密出明文来的

之所以推荐Riot,是因为它在各个平台的表现都很不错,移动端和桌面端都做到了全功能(虽然有时候可能会有点bug)。同时,它也有提供网页版,可以在未安装客户端的电脑上快捷的使用(虽然不建议把这当成主力用法)。

本咸鱼也只上手了它几天,说不出什么所以然,但它给我的体验感觉很不错,大可以成为主IM软件。

虽然本咸也不是老手,但至少可以给出几个Tips:

  • 注册账号的时候最好在网页版上注册,而且最好爬高高再去,因为会有验证问答,而验证问答目前来说不翻墙是用不了的
  • 同时不建议在注册的时候就直接关联邮箱,因为曾有人向本咸反应过各种无法注册的问题,而本咸直接注册一个无关联干净账号却是一帆风顺(邮箱电话什么的可以事后在个人设置页面绑定)
  • 建议不要更改PC客户端的语言,我曾经改过,下一次打开就会变回英语而且有时会碰上登陆卡死的问题,不得不在设备列表里把PC给删掉重新登陆。如果你不适应英语,建议你使用移动客户端,至少安卓客户端可以正常地更改软件显示语言而不出问题
  • 不会加好友?点击PC/网页端左下角第二个人像图标(Start chat),然后输入对方的ID就好了。
  • 端对端加密需要在聊天设置中手动开启,而且目前不提供关闭加密功能

本咸的Riot/Matrix ID是@Rollout:matrix.org,有事没事也可以稍微聊那么一下( = v = )

本菜鸡在0net瞎逛的时候无意间发现了这样的一个玩意,同时有着可选文件在线播放的解决方案。于是就试着将它移植过来了。

于是就有了本咸的实验性音乐厅

目前存放着的~~唯一~~第一首曲目是本咸鱼最近用VOCALOID翻的一首曲子(~~第28个~~~~第30个~~第31个改进型),还请各位不要嫌弃(>_<)

以后会试着把这个播放器直接插到博客页面里来(也是试图用这玩意实现的最终目的)-------已达成

以下是移植log:


首先,将源站点(似乎也可以是本站点?)的*站点文件夹*/music文件夹直接复制到你的站点目录之下。

然后改一改content.jsonoptional的值:

"optional" : "(*原先存在于其中的值* | music/bgm/.* | music/img/.* )"

然后把你曲子放在music/bgm下,专辑图片放在music/img下。

歌词?如果你觉得歌词很小的话,可以把它放在music/src/data中来方便做种和引用。

但如果你的站点空间吃紧的话,也可以新建一个music/lyc文件夹,然后把歌词文件放进去,最后在content.json中把文件夹路径补进optional中就行了。

接着手改music/src/js/musicList.js


var musicList = [ { title : '*曲名*', singer : '*演唱者*', cover : './img/01.jpg' , //该曲子的封面图片地址 src : './bgm/01.mp3', //该曲子的本体地址 lyric : null //该曲子的歌词(如果没有就置为null) }, ... { title : '*曲名*', singer : '*演唱者*', cover : './img/n.jpg' , //该曲子的封面图片地址 src : './bgm/n.mp3', //该曲子的本体地址 lyric : null //该曲子的歌词(如果没有就置为null) } ];

就是依葫芦画瓢地弄一个歌曲列表出来的意思。

最后,在你的页面建立一个通往站点/music的超链接,然后签发站点,移植就完成了。

如果本咸成功把播放器直接插到主页,那之后会在下面补上插入的log。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

首页播放器的首个工作版本成功上线!(撒盐

以下是插入log:

css/all.css末尾加入:


/* ---- /1NsQX8JQYbjDfM3Die226PQ8WwMqXidZRE/css/smusic.css ---- */ /** * SMusic * Author:Smohan * Version:2.0.0 * url: <http://www.smohan.net/lab/smusic.html> * 使用请保留以上信息 */ /*reset*/ .f-cb{height: 0;} .f-cb:after{display:block;content:" ";height:0;visibility:hidden;clear: both;} .f-ib{display:inline-block;} .f-din{display:inline;} .f-dn{display:none;} .f-db{display:block;} .f-fl{float:left;} .f-fr{float:right;} .f-fwn{font-weight:normal;} .f-fwb{font-weight:bold;} .f-tal{text-align:left;} .f-tac{text-align:center;} .f-tar{text-align:right;} .f-oh{overflow: hidden;zoom: 1;clear: both;} .f-tdn{text-decoration: none!important;} .f-vam,.f-vama *{vertical-align:middle;} .f-wsn{word-wrap:normal;white-space:nowrap;} .f-pre{overflow:hidden;text-align:left;white-space:pre-wrap;word-wrap:break-word;word-break:break-all;} .f-wwb{white-space:normal;word-wrap:break-word;word-break:break-all;} .f-ti{overflow:hidden;text-indent:-30000px;} .f-lhn{line-height:normal;} .f-toe{overflow:hidden;word-wrap:normal!important;white-space:nowrap;text-overflow:ellipsis;} .f-usn{-webkit-user-select:none;user-select:none;} .f-bsb{-webkit-box-sizing:border-box;box-sizing:border-box;} .f-cp{cursor: pointer} /*SMusic*/ .grid-music-container{ width: 320px; height: 10px; padding: 1px;; margin: 0px 1000px; background-color: rgba(255,255,255,0.1); font-family: "Microsoft Yahei","微软雅黑","Helvetica Neue","Hiragino Sans GB",Helvetica,Tahoma,sans-serif; text-shadow: 1px 0 0 rgba(255,255,255,.7); } .grid-music-container .m-music-play-wrap{ height: 100px; position: relative; padding-left: 0px; } .grid-music-container .u-cover{ width: 0px; height: 0px; overflow: hidden; background: url(../img/music_icons.png) 0 0 no-repeat; position: absolute; top: 0; left: 0; } .grid-music-container .u-cover img{ display: block; width: 100%; height: auto; max-height: 100%; border-radius: 50%; } /*.grid-music-container .u-cover.play{ -webkit-animation: Circle 10s linear infinite 0s forwards; animation: Circle 10s linear infinite 0s forwards; }*/ .grid-music-container .u-cover.paused{ -webkit-animation-play-state: paused; animation-play-state: paused; } @-webkit-keyframes Circle { from{ -webkit-transform: rotate(0deg); } to{ -webkit-transform: rotate(360deg); } } @keyframes Circle { from{ transform: rotate(0deg); } to{ transform: rotate(360deg); } } .grid-music-container .m-now-info{ height: 100%; } .grid-music-container .m-now-info h1{ font-weight: normal; } .grid-music-container .m-now-info h1 strong{ font-size: 18px; color: #111210; font-weight: normal; } .grid-music-container .m-now-info h1 small{ margin-left: 20px; font-size: 14px; color: #313230; } .grid-music-container .m-now-controls{ padding-top: 5px; position: relative; } .grid-music-container .m-now-controls .u-control{ display: inline-block; vertical-align:middle; font-size: 0; overflow: hidden; } .grid-music-container .m-now-controls .u-process{ width: 220px; height: 4px; position: relative; background-color: #cecfd4; cursor: pointer; } .grid-music-container .m-now-controls .u-process .buffer-process,.grid-music-container .m-now-controls .u-process .current-process{ display: block; width: 0; height: 4px; position: absolute; top:0; left: 0; background-color: #3792ef; z-index: 1; } .grid-music-container .m-now-controls .u-process .buffer-process{ z-index: 0; background-color: #c1c2c0; } .grid-music-container .m-now-controls .u-time{ margin-left: 10px; font-size: 12px; color: #585957; } .grid-music-container .m-now-controls .u-volume{ overflow: visible; text-align: center; position: relative; margin-left: 20px; } .grid-music-container .u-volume .volume-process{ width: 3px; height: 50px; background: #cecfd4; position: absolute; top: -54px; left: 6px; cursor: pointer; visibility: hidden; /*设置不可见性,最好不要使用display:none,不然高度很难获取*/ } .grid-music-container .u-volume .volume-process.show{ visibility: visible; } .grid-music-container .u-volume .volume-process .volume-current, .grid-music-container .u-volume .volume-process .volume-event{ display: inline-block; width: 3px; height: 50%; background-color: #3792ef; position: absolute; left: 0; bottom:0; -webkit-transition: height .2s linear; transition: height .2s linear; } .grid-music-container .u-volume .volume-process .volume-event{ width: 21px; left: -10px; background: none; height: 100%; z-index: 1; } .grid-music-container .u-volume .volume-process .volume-bar{ display: inline-block; width: 8px; height: 8px; border-radius: 100%; background-color: #fff; border: 1px solid #a8a9a7; position: absolute; left: -3px; bottom: 50%; -webkit-transition: bottom .2s linear; transition: bottom .2s linear; /* z-index: 2;*/ /* opacity: 0;*/ } .grid-music-container .u-volume .volume-process .volume-bar:hover, .grid-music-container .u-volume .volume-process .volume-bar:active{ background-color: #f1f2f0; } .grid-music-container .u-volume .volume-control{ display: inline-block; width: 18px; height: 18px; background: url(../img/music_icons.png) -140px -80px no-repeat; cursor: pointer; } .grid-music-container .u-volume .volume-control:hover{ background-position: -158px -80px; } .grid-music-container .u-volume .volume-control.muted{ background-position: -140px -98px; } .grid-music-container .u-volume .volume-control.muted:hover{ background-position: -158px -98px; } .grid-music-container .m-music-list-wrap{ margin-left: 135px; margin-right: 25px; height: 0px; border: 1px solid rgba(255,255,255,.7); overflow-x: hidden; overflow-y: auto; } .grid-music-container .m-music-list-wrap ul{} .grid-music-container .m-music-list-wrap li{ display: block; line-height: 0px; padding: 0 10px; cursor: pointer; color: #383937; font-size: 14px; } .grid-music-container .m-music-list-wrap li strong{ font-size: 16px; font-weight: normal; } .grid-music-container .m-music-list-wrap li:hover,.grid-music-container .m-music-list-wrap li.current{ background-color: rgba(255,255,255,.7); color: #3792ef; } .grid-music-container .m-music-list-wrap li.current{ background-color: transparent; } .grid-music-container .m-play-controls{ margin-top: 5px; } .grid-music-container .m-play-controls a{ display: inline-block; vertical-align: middle; } .grid-music-container .m-play-controls .u-play-btn{ display: inline-block; width: 30px; height: 30px; margin-right: 15px; cursor: pointer; } .u-play-btn{ background: url(../music/src/img/music_icons.png) -220px 0 no-repeat; } .u-play-btn.prev,.u-play-btn.next{ background-position: -220px 0; } .u-play-btn.prev:hover,.u-play-btn.next:hover{ background-position: -220px -36px; } .u-play-btn.prev{ -webkit-transform: rotate(-180deg); transform: rotate(-180deg); } .u-play-btn.play{ background-position: -250px 0; } .u-play-btn.play:hover{ background-position: -250px -36px; } .u-play-btn.paused{ background-position: -280px 0; } .u-play-btn.paused:hover{ background-position: -280px -36px; } .u-play-btn.mode{ width: 20px!important; height: 18px!important; margin-right: 10px!important; } .u-play-btn.mode-list{ background-position: -181px -98px; margin-left: 65px; } .u-play-btn.mode-list.current{ background-position: -221px -98px; } .u-play-btn.mode-random{ background-position: -201px -80px; } .u-play-btn.mode-random.current{ background-position: -241px -80px; } .u-play-btn.mode-single{ background-position: -181px -80px; } .u-play-btn.mode-single.current{ background-position: -221px -80px; } /*歌词*/ .grid-music-container .m-music-lyric-wrap{ width: 220px; height: 100%; background-color: rgba(255,255,255,.7); position: absolute; right: -220px; top : 0; border-left: 1px solid #fff; overflow: hidden; } .grid-music-container .m-music-lyric-wrap .inner{ position: absolute; top:20px; left: 20px; right: 20px; bottom: 20px; overflow-x: hidden; overflow-y: auto; } .grid-music-container .m-music-lyric-wrap .inner ul{ position: absolute; width: 100%; top:0; left: 0; overflow: hidden; -webkit-transition: all .3s; transition: all .3s; } .grid-music-container .m-music-lyric-wrap ul li{ display: block; line-height: 30px; height: 30px; overflow: hidden; text-align: center; font-size: 13px; color: #666; } .grid-music-container .m-music-lyric-wrap ul li.current{ color: #2e86ef; font-size: 14px; font-weight: bold; } .grid-music-container .m-music-lyric-wrap ul li.eof{ height: 100%; line-height: 250px; font-size: 20px; color: #999; } .DirectStyle1{ position: absolute; margin-top: -20px; margin-left: 10px; }

(该样式与播放器原始样式不同,经过了简化和阉割)

index.html中,在<!-- EOF left --><!-- right -->之间的空隙中插入:


<!-- Smusic --> <div class="grid-music-container f-usn" style="top:-80px"> <div class="m-music-play-wrap"> <div class="u-cover"></div> <div class="m-now-info"> <h1 class="u-music-title"><strong>标题</strong><small>歌手</small></h1> <div class="m-now-controls"> <div class="u-control u-process"> <span class="buffer-process"></span> <span class="current-process"></span> </div> <div class="u-control u-time">00:00/00:00</div> <div class="u-control u-volume"> <div class="volume-process" data-volume="0.50"> <span class="volume-current"></span> <span class="volume-bar"></span> <span class="volume-event"></span> </div> <a class="volume-control"></a> </div> </div> <div class="m-play-controls"> <a class="u-play-btn prev" title="上一曲"></a> <a class="u-play-btn ctrl-play play" title="暂停"></a> <a class="u-play-btn next" title="下一曲"></a> <a class="u-play-btn mode mode-list current" title="列表循环"></a> <a class="u-play-btn mode mode-random" title="随机播放"></a> <a class="u-play-btn mode mode-single" title="单曲循环"></a> </div> </div> </div> <div class="f-cb">&nbsp;</div> <div class="m-music-list-wrap"></div> <div class="m-music-lyric-wrap" style="display: none;"> <div class="inner"> <ul class="js-music-lyric-content"> <li class="eof">暂无歌词...</li> </ul> </div> </div> </div> <!-- EOF Smusic -->

然后,在文件的末尾的</script>之前插入:


<script src="music/src/js/musicListForIndex.js"></script> <script src="music/src/js/smusic.js"></script> <script> new SMusic({ musicList : musicList, autoPlay : true, //是否自动播放 defaultMode : 1, //默认播放模式,随机 callback : function (obj) { //返回当前播放歌曲信息 console.log(obj); /*{title: "赤血长殷", singer: "王凯", cover: "http://data.smohan.net/upload/other/cxcy/cover.jpg", src: "http://data.smohan.net/upload/other/cxcy/music.mp3", index: 4}*/ } });

播放器移植就完成了,但是!你需要在music/src/js文件夹之下新增一个列表js(我的是musicListForIndex.js,且首页播放器中引用的也是该文件),可以和你的musicList.js一模一样,但是所有的src : './bgm/n.mp3',路径键值需要更改为src : './music/bgm/n.mp3',

至此,本咸的首页播放器正式进入可用状态,可以在首页播放音乐了。

看起来有许多不明真相的小白因为不了解0Me的运行原理,或者是因为跨设备登陆同一账户因为心急而加入了多Hub导致Hub混乱而发不了帖,也没办法关注任何人。

这个时候最简单的做法就是换号投胎,再活一把,但如果不想这样就去投胎而是想抢救一下,那可以跟着本教程来,虽然有点麻烦,但是这样方便给自己长长记性,顺便提高一下自己的动手能力。


首先,确认你最后要去到哪一个Hub,并记下那个Hub的地址(ZiteID)。(确认目的地)(本教程默认你的目的Hub为你加入的诸多Hub中的某一个,若不属于此的请自行类比/不要命地再串一次)


然后,要找到所有的干扰Hub,最好的方法当然是去你的个人页面(你最好是没删过自己的你好 ZeroMe!信息,这时候这些自动生成的问候是最好的指路信标),然后记录每个问好信息所在的Hub。具体实现方法有两个:

  • 光标移动到发出问好信息的用户名上,复制其链接,从中提取出ZiteID.
  • 直接点击问好信息的用户名,然后在地址栏中提取ZiteID.

链接会形如:https://www.zerogate.tk/Me.ZeroNetwork.bit/?Profile/*Hub的ZiteID*/*身份地址*/*用户的ID*

如果你有删过这些问好信息怎么办?能问出这个问题的想必也不会记得自己到底加过哪些Hub(也大概率不会是一个Linux用户),那最好在0me页面拉出右边的睾级菜单,然后记下自己的“身份地址”,接着去把所有的data/*Hub站点*/data/users/*身份地址*/data.json都翻一翻吧,反正如果想让你各Hub的用户资料同一化的话也是需要这样的。


现在,你找到了干扰源都在哪了,那就编辑所有data/*干扰HubID*/data/users/*身份地址*/data.json文件,把第4行的"hub": "*HubID*",中的HubID改成你最后想去的目的Hub的ID。然后保存之。


接下来,你就要打开所有你更改过的Hub的页面,拉出右侧睾级菜单,打开“这是我的站点”开关,然后把内容发布的文件改成data/users/*身份ID*/content.json,签名然后发布。你的Hub就算修正完成了,可以去0Me上去测试一下了。

下方的ZeroMessage本人建议在这篇文章变成内嵌log之前不要随意调戏,可能会发生未预定的情况。

以上为已废弃的施工现场警告

数小时努力后,0Message在本站的部署宣告失败。

本博客目前已经将所有0Message相关代码及文件移除。

部署过程中造成了数据库错乱,导致评论数显示出错。

经由更新>重载>重建>更新操作可恢复。


部署时的核心错误(来自浏览器Console):

Uncaught TypeError: Cannot set property 'innerHTML' of null
    at ZeroMessage.onRequest (all.js:124)
    at ZeroMessage.onMessage (all.js:49)
    at window.addEventListener.e (all.js:26)

Uncaught TypeError: Cannot read property 'addres' of undefined
    at Object.<anonymous> (all.js?lang=zh:2740)
    at ZeroBlog.ZeroFrame.onMessage (all.js?lang=zh:2003)
    at all.js?lang=zh:1967

Uncaught TypeError: Cannot read property 'cert_user_id' of undefined
    at ZeroMessage.sendMessage (all.js:139)
    at HTMLInputElement.onclick (?Home&wrapper_nonce=a0415b0…:195)

老是白茫茫一片也不好,所以今天本咸突然有了兴致来稍微改了一下博客的外观。将修改记录放置于此,便于他人参考的同时也便于自己以后回头来debug。

那么,壕戏开场啦!


本次本站所有的修改都应用在站点文件夹/css/all.css之中(除了站点文件夹/img文件夹下多了一个bg.jpg背景图片以外)。

带有注释的就是本人所添加的东西。

页面主体:


body { background-image: url(../img/bg.jpg); /*背景图片位置指定*/ background-repeat: no-repeat; /*背景图片不重复*/ background-attachment: fixed; /*背景不跟随网页滚动*/ background-size: cover; /*背景大小自适应(个屁)*/ background-position: top; /*背景图片位置靠左上角*/ color: #333332; margin: 10px; padding: 0px; font-family: 'Roboto Light', sans-serif; height: 15000px; overflow: hidden; -webkit-backface-visibility: hidden ; -moz-backface-visibility: hidden ; -o-backface-visibility: hidden ; -ms-backface-visibility: hidden ; backface-visibility: hidden }

标题下的文章详情栏:

.post .details { color: black; margin-top: 5px; margin-bottom: 20px }

左侧介绍:


.left h2 { font-size: 15px; font-family: Tinos; line-height: 1.6em; color: #66CCFF; /*修改字体颜色(天依蓝嘿嘿)*/ margin-top: 14px; letter-spacing: 0.2px }

最新评论栏:


.lastcomments { background-color: #FAFAFA; background: rgba(255, 255, 255, 0.35); /*指定背景颜色及透明度,格式为(r,g,b,透明度)*/ margin-left: -25px; padding-right: 15px; padding-bottom: 5px; padding-top: 3px; margin-top: 40px; margin-right: -15px; display: none }

评论区:


.comment { background-color: white; background: rgba(255, 255, 255, 0.5); /*见上*/ padding: 25px 0px; margin: 1px; border-top: 1px solid #EEE }

更改并保存完all.css之后立即刷新页面可能看不到即时效果,需要一段时间以后再刷新/重新访问才能看到效果如何。