快速回顾

出席: ailouros, bar, bla, cervantes, Complication, gott, jrandom, modulus, polecat, Pseudonym, tethra, zzz

会议记录

15:26 <jrandom> 0) 嗨 15:26 <jrandom> 1) 0.6.1.7 和网络状态 15:26 <jrandom> 2) 实验性 tunnel 故障 15:26 <jrandom> 3) SSU 和 NATs 15:26 <jrandom> 4) Syndie 15:26 <jrandom> 5) ??? 15:26 <jrandom> 0) 嗨 15:26 * jrandom 挥手 15:26 <jrandom> 每周状态说明已发布在 http://dev.i2p.net/pipermail/i2p/2005-December/001237.html 15:26 * ailouros 读过说明了 15:27 * jrandom 来晚了,所以给大家一点时间读一读 :) 15:29 <jrandom> 好,直接进入 1) 0.6.1.7 和网络状态 15:29 <@cervantes> *咳* 15:29 <jrandom> 除了邮件里写的,我没什么更多可补充的。有人还有进一步的评论/问题/想法吗? 15:30 <Pseudonym> 看起来在改变 tunnel 创建算法之前做性能优化,可能是本末倒置 15:30 <gott> 我频繁看到 "No HTTP method found in the request. 15:30 <gott> Software caused connection abort: socket write error 15:30 <gott> " 15:30 <@modulus> tunnel 延迟低多了,我不知道是你改了什么还是我的 ISP 突然变好了。 15:30 <gott> 来自 I2PTunnel Webmanager 15:31 <jrandom> gott:这些提示请求里的 http 不规范,或者是 eepproxy 看不懂的东西 15:31 <jrandom> modulus:酷,我们一直在做很多改进 15:31 <jrandom> Pseudonym:嗯,目前为止 tunnel 创建不是我们的瓶颈——瓶颈是在更高层的东西 15:32 <jrandom> 另一方面,最近几个版本的改进确实暴露出了一些底层问题 15:32 <Pseudonym> 哦,所以优化针对的是代码的其他部分? 15:32 <Pseudonym> 很好 15:33 <jrandom> 是的,在 SSU 层以及 tunnel 运行层。tunnel 创建不是一个对性能敏感的操作【除了某些时候 ;] 15:34 <jrandom> 不过我在做在线网络负载测试,收集不同对端的非匿名负载统计,以便进一步缩小范围 15:34 <ailouros> 我纳闷为何有时我看到某个目标(比如 eeProxy,7 个入站 4 个出站)比配置了更多的 tunnels 15:34 <jrandom> 所以,接下来几天当你看到 router 7xgV 传很多数据时,别介意哦 ;) 15:35 <jrandom> ailouros:当 tunnel 创建耗时较长时,会额外建一些以防万一。 15:35 <jrandom> zzz 也概述了这方面一些奇怪问题,正在做一个补丁来稍微改进一下 15:35 <ailouros> 我明白了……那为什么它们会同时过期呢? 15:35 <@cervantes> jrandom:好奇问下,你什么时候开始做这些测试的? 15:35 <jrandom> cervantes:几天前 15:36 <@cervantes> 啊好,那就不是我想的那个 ;-) 15:36 <jrandom> 不确定,ailouros,这取决于一些条件。不过 tunnel 创建代码里确实有些……咳,怪异之处,我一直没动它,因为 0.6.2 要重写 15:38 <ailouros> 我懂了。我本以为是策略问题……除非有充分理由不这么做,我更希望 tunnels 在不同时间死亡 15:38 <ailouros> 也就是让 tunnel 创建分散些 15:39 <jrandom> 是的,0.6.2 会有更好的随机化,zzz 的补丁也给当前版本增加了一些随机化 15:40 <+Complication> 我想知道为什么一个本来正常的 i2phex 实例……每隔一次启动就决定重新 hash 文件? 15:40 <jrandom> 毫无头绪 15:40 <+Complication> 目前看来像是配置损坏,但我还没删配置。 15:40 <jrandom> 也许是时间戳偏了? 15:42 <+Complication> 不,那也看起来是对的 15:42 * jrandom 不知道,从没看过 phex 的 cod 15:42 <jrandom> 呃,code 15:42 <+Complication> 我去试试删掉旧配置文件会不会好点 15:42 <jrandom> 好 15:43 <jrandom> 好,关于 1) 网络状态 / 0.6.1.7 还有别的吗? 15:43 <jrandom> 如果没有,进入 2) 实验性 tunnel 故障 15:44 <jrandom> 这个我们已经谈到了一点,笔记里和 zzz.i2p 上也有更多 15:44 <jrandom> zzz:你有什么要补充/提出的吗? 15:46 <jrandom> 如果没有,那我们进入 3) SSU 和 NATs 15:46 <jrandom> bar:你有什么要补充的吗? 15:46 <+bar> 没有了,邮件里写的就是我要说的 15:47 <jrandom> 好,我还得回复一些细节——我觉得我们的重传机制应该已经能处理你提到的一些问题 15:48 <jrandom> 关键是要检测当前是哪种情况,这样我们才能自动采用正确的流程(或者告诉用户他们没辙了) 15:48 <+bar> 一切按部就班,不着急 15:49 <+bar> 是的,我建议暂时增加一个手动的用户设置来回避这个问题,也许做不到,不过以后再讨论 15:50 <jrandom> 嗯,手动覆盖会有帮助,但我在更早的 i2p 版本上的经验是每个人(每个人)都会搞砸 ;) 所以更倾向自动化 15:50 <jrandom> (“每个人”也包括我自己 ;) 15:52 <+bar> 同意 15:52 <ailouros> lol 如果我也搞砸了,那就是文档有问题了,因为我是一步步照着做的 :D 15:53 <+bar> 同时,我会花点时间研究 peer testing(节点测试) 15:53 <jrandom> 好,谢谢 bar! 15:54 <+bar> (也许我还能顺便就此生成点无用的 spam :) 15:54 <jrandom> :) 15:55 <jrandom> 好,如果 3) 没有别的了,我们进入 4) Syndie 15:56 <jrandom> 最近这方面进展很大,自 0.6.1.7 发布以来做了相当多的 UI 改版 15:57 <jrandom> 还有一个新的独立安装/构建,不过我们大家都装了 i2p,不需要单独的 15:57 <ailouros> 我觉得 6.1.7 的布局比 6.1.6 更难用 15:58 <jrandom> 嗯,你是以单用户模式运行 syndie 吗?以及你用的是最新 CVS 构建还是官方 0.6.1.7 构建? 15:58 <ailouros> 官方 0.6.1.7,单用户 15:58 <jrandom> 你是更支持类博客的界面,还是支持树状(threaded)导航? 15:58 <ailouros> 我不是,不过我也不太知道哪个是类博客 15:58 <ailouros> 就我个人来说我更想要树状导航 15:59 <ailouros> (以及在线程视图里对新消息做一些颜色标注) 15:59 <+Complication> 相对较新的 CVS,单用户 15:59 <+Complication> 我发现了个小怪事(我想可能不是故意设计的) 15:59 <jrandom> 啊,CVS 上这方面已经有很多进展了,ailouros 15:59 <ailouros> 太好了 :) 16:00 <jrandom> 我们还做了一个新的线程显示,采用了 cervantes 建议的只对某一条分支做完整遍历,而不是遍历所有分支 16:00 <@cervantes> 这些改动推到 syndiemedia.i2p.net 了吗? 16:00 <+bla> 在 http://localhost:7657/syndie/syndicate.jsp 里为位置显示一些默认示例会是个好主意吗? 16:00 <jrandom> syndiemedia.i2p.net 是 CVS 最新主干,对 16:00 <+Complication> 当你打开一个主题,正在阅读它的帖子……然后应用一个没有帖子匹配的过滤条件(例如打开主题 "Syndie threading",应用过滤条件 "i2p.i2phex")…… 16:00 <jrandom> 也许是的,bla。全新安装里会有三个默认项,不过有例子也很好 16:01 <@cervantes> (实际上该主题的树也需要完全展开) 16:01 <+Complication> ……它似乎还是把当前帖子显示着,好像它们匹配似的…… 16:01 <+Complication> 尽管我确实点了 "Go" 按钮。 16:01 <@cervantes> Complication:是的,我也觉得那有点困惑 16:02 <jrandom> 嗯 Complication,初衷是让你在看帖子时还能四处浏览,但也许把显示中的帖子去掉会更好 16:02 <jrandom> cervantes:啊,对,展开到叶子会比较好,而且应该很容易做 16:02 <+Complication> 刚好注意到,既然显眼,就顺手说了 16:02 <@cervantes> (或者让“没有匹配项”更明显一些) 16:03 <jrandom> 嗯,线程导航那里会显示 “no matches” :) 16:03 <ailouros> 也许他在找打火机 16:03 <jrandom> !thwap 16:03 <@cervantes> (或者让“没有匹配项”更加明显一些) 16:03 <jrandom> <blink>No matches</blink> 16:03 <+Complication> 噢 :) 16:04 <tethra> 看来你的 !thwap 打到的是 spaetz__,jr! 16:04 <+Complication> 对,有时线程导航器确实感觉有点远 :) 16:04 <jrandom> 是啊,我们在试一些 css,把它浮动到侧边,作为一个选项 16:05 <@cervantes> 有了皮肤支持你就可以把线程放上/下/左/右等位置 16:05 <@cervantes> 啊,就像 jr 说的 16:05 <+Complication> 不过 “Threads” 链接能让人很快回去 16:05 <+Complication> ……如果它当前在视口里。 16:06 <+Complication> 而习惯键盘导航的人当然可以按 "End" 16:06 <jrandom> 当然,这些都是很容易修改的东西(你也能从 CVS 里快速的变化看出来 :),所以如果有人有任何建议(或者样式稿——html / png / 等),请随时贴上来 16:07 <jrandom> 我预计接下来几天在 cvs 里会有一个主博客概览页面 16:08 <jrandom> 好,Syndie 还有很多其他事情在进行,去 http://localhost:7657/syndie/ 看更多信息吧 :) 16:08 <jrandom> 有人还有什么要补充的吗?不然我们进入 5) ??? 16:09 <zzz> 嗨,刚进来。关于 2),我在找人测试我的补丁。 16:10 <zzz> 我的结果是改进了任务延迟和可靠性,并减少了 router 挂起的情况。所以希望其他人也试试。 16:10 <ailouros> 听起来不错。我要做什么? 16:11 <jrandom> 嘿 zzz,好的,我这边也会折腾一下。它包含很多不同的组件,也许值得拆成几块,但看起来不错,目标是进 0.6.1.8 16:11 <ailouros> (我这平均在线时间大约 10 小时 :( 16:11 <zzz> 如果你有源码和 ant,就打上补丁——或者如果你愿意我可以放一个 i2pupdate.zip 上去 16:12 <zzz> jrandom 我会着手把它拆分 16:12 <ailouros> 我用更新包吧,谢谢 16:13 <zzz> ailouros 会在一小时内放到 zzz.i2p 上——谢谢 16:13 <jrandom> zzz:除非你有空,不用太在意……我可以自己读 diff :) 16:13 <ailouros> 多谢 16:14 <zzz> jrandom 好。还有一些杂项,容易被你或我剔除掉。 16:16 <ailouros> 我猜我们现在到 5) ??? 了? 16:16 <zzz> jrandom 另一个话题——用 i2phex 时 Router OOM(内存耗尽)以及可能的 SAM 问题 16:16 <jrandom> 对,ailouros 16:16 <jrandom> 啊是的 zzz,如果能找出 SAM 的问题就太好了 16:17 <ailouros> j346,你有机会看看我的应用了吗? 16:17 <jrandom> 如果有人能接手维护 SAM bridge 就太棒了,因为我没怎么在上面做过实质性工作,而 human 也有段时间没出现了。 16:19 <jrandom> 还没有,ailouros,很遗憾。我对它的工作方式不太确定,所以得先把源码读一遍 16:20 <ailouros> 随时可以问 16:20 <ailouros> (祝你旅程顺利,源码正好能作为“混乱”这个词的好例子) 16:20 <jrandom> 呵呵 16:21 <zzz> 更正一下,我的经验是用 i2p-bt 时会 OOM,不是 i2phex。跑一个 i2p-bt 大约 24 小时后发生,跑两个的话几小时就会发生 16:22 <+Complication> 我的是一些深夜压力测试之后发生的。 16:22 <+Complication> (在那期间,值得一提的是,我看到 5 分钟平均有 50 KB/s) 16:22 <bar_> 能提醒我一下你的应用是做什么的吗,ailouros?我记性好但短…… 16:22 <+Complication> 是下行。 16:22 <+Complication> 上行限制在 35 KB/s 16:22 <@cervantes> Complication:我还从没听过“深夜压力测试”这种说法…… 16:22 <jrandom> 不错,Complication 16:23 <+Complication> cervantes:那也可以叫“半日常的疯狂吸血下载” :P 16:23 <ailouros> bar_:这是一个分布式文件分享应用的工作型概念验证,会在不同文件之间共享公共块(正如 polecat 建议的) 16:23 <bar_> 啊,好的,谢谢 ailouros 16:24 <tethra> cervantes:嘿嘿嘿 ;) 16:24 <ailouros> 不客气(如果有人想拿源码,是用 c/c++ 写的) 16:25 <+polecat> ailouros:当两个二进制块恰好相同的概率非常低,要小心。我更多是在谈纯理论,实际中可能没用。 16:25 <ailouros> polecat,我同意。我的最佳猜测是,当你获得同一文件的不同版本时会有用 16:25 <ailouros> 比如,一个电影文件有个块损坏了 16:25 <+polecat> 你可以以闪电般的速度传输全零的块!("The next block is zeroes" "oh I have that already" "the next block is zeroes" "oh I have that already") 16:26 <ailouros> 或者一个包含其他 zip 文件的归档 16:26 <jrandom> 或者比如修改了 ID3 标签,等等 16:26 <ailouros> 正是 16:26 <+polecat> 没错。但修复一个有损坏块的电影的简单方法是让 bittorrent 覆盖下载。大多数客户端会保留 hash 相同的块,覆盖不同的块。 16:26 <jrandom> 但文件归档可能不行,因为它们必须在文件边界处断开 16:27 <ailouros> j636,这就是我想实现 LBFS(低带宽文件系统)的想法:按数据标记分块,而不是固定块大小 16:27 <@cervantes> DC 社区用过那种方法,把文件分发为 rarset 16:27 <+polecat> 可能有用的是做一个通用的二进制纠错算法,然后在大规模实现。所有块都可以彼此“纠正”,你只需传输纠正数据,这可能比传块本身更小。 16:29 <@cervantes> 然后搜索基于这些 rar 部分的 tiger 哈希 16:29 <+Complication> 好主意……不过听上去很难 :) 16:29 <+polecat> 但这只是 hash 对 hash 的等价……你几乎不可能找到两个块完全一样! 16:29 <ailouros> cervantes,什么是 “rarset”? :D(除了“RAR 文件”之外) 16:29 <+polecat> 除非双方已经都有这个文件,其中一份损坏了。 16:29 <ailouros> polecat,呃? 16:29 <@cervantes> ailouros:一个分卷的 rar 归档,必要时配上校验文件 16:30 <ailouros> cervantes:我不明白那样做的优势是什么 16:31 <@cervantes> 它的主要好处是给 DC 添加了伪多源下载 16:32 <ailouros> 嗯,那正是文件间块共享机制的一部分,不是吗? 16:34 <ailouros> polecat:关于 bittorrent 覆盖损坏文件,它帮不了你在同时获取多个版本的情况 16:35 <@cervantes> 你的客户端只会匹配/下载有效的部分,如果有校验文件你也能恢复损坏部分 16:35 <ailouros> 在我的系统里没有损坏部分(只有当组成块下载并重新校验通过后才组装文件) 16:36 <@cervantes> 这些是 bittorrent 默认会做的,只是你不能专门搜索某个单独的部分 16:36 <+polecat> 多个版本很可能一个 bit 都不一样……这也是它们愚蠢的原因。某个蠢货决定把电影重新编码成邮票大小,还用同样的名字。 16:37 <+polecat> 或者另一个蠢货拿随机数据,命名成你想下载的文件。 16:37 <ailouros> lol 没错 16:37 <@cervantes> 正是,而 rarset 发行会对此免疫…… 16:37 <ailouros> 但别忘了来自其他网络(emule、kazaa、随便哪个)的文件经常是损坏的 16:38 <+polecat> rarset 发行也不会免疫…… 16:38 <+polecat> 你仍然得弄清哪个 rarset 是正确的。 16:38 <ailouros> cervantes,rarset 如何对发布随机垃圾的傻瓜免疫? 16:38 <@cervantes> (前提是你有可靠来源) 16:39 <@cervantes> 因为一个发布组会发布哈希/分发信息 16:39 <ailouros> 哈哈,这个简单 :D 16:39 <@cervantes> 而且质量差的东西会被标记为废弃,大家会从共享里去掉它 16:40 <ailouros> cervantes,那我的玩具已经能做到 16:40 <@cervantes> 酷 16:40 <ailouros> 你从可信来源拿到文件描述符,你就能立刻多源获取文件 16:41 <@cervantes> 听起来不错 ;-) 16:41 <ailouros> 你不能搜索文件,但你可以浏览每个用户的共享目录,所以你可以用网络爬虫并缓存结果 16:42 <ailouros> 不过如果有必要,我也许将来会加一个搜索功能 16:44 <ailouros> 我相信我的玩具,如果好好做成一个应用,可以提供 freenet 想要提供的缓存和韧性 16:44 <ailouros> 比如静态内容分发和缓存 16:45 <ailouros> 你读我的博客,你把它缓存下来,当别人想看的时候就提供给他们。你除了把内容留在那里什么也不用做 16:45 <ailouros> 不喜欢这内容?删掉就好了 16:45 <jrandom> 嗯,那你把它视为 Syndie 的一个后端存储吗? 16:46 <ailouros> 它可以被用作后端存储 16:46 <ailouros> 以它现在的样子,你甚至可以在 i2p 的默认安装里用它替代 jetty 16:46 <jrandom> 例如附件/链接写成 [clunk hash="$foo"]my file[/clunk] 16:46 <ailouros> (嗯再做些小改动就行 :D ) 16:46 <jrandom> 哈 16:47 <jrandom> 好的,是的,我显然不懂 clunk 怎么工作……要不要在 syndie 里发帖,或者弄个 eepsite? :) 16:47 <ailouros> 文件哈希在请求文件时会被下载,而这些哈希会被自动下载成完整文件 16:48 <jrandom> 对,但“下”载的问题在于从哪里到哪里,等等。一个整体的网络架构描述会很有帮助 16:48 <ailouros> 我先写一个像样的文档,然后找个地方发 16:48 <jrandom> r0x0r,谢谢 16:48 <ailouros> 从你获得哈希的地方下载 16:48 <ailouros> 再加上所有共享这些块的人 16:49 <ailouros> 想象 go!zilla 和 download accellerator :) 16:49 <jrandom> 我想你低估了我有多困惑 16:49 <ailouros> 但这是透明的,并且在 i2p 内部 16:49 <ailouros> lol 看来是的 :D 16:50 <jrandom> 一个非常非常基础的解释,比如“你运行一个 clunk 客户端,从一个 clunk 服务器下载,从 clunk 对等体获取信息”,等等 16:50 <jrandom> 我是用浏览器去查询 clunk 客户端?还是服务器?还是对等体? 16:51 <jrandom> (我就是这么迷糊) 16:51 <ailouros> 从头再来 :) 16:51 <ailouros> 你用你的浏览器 16:51 <ailouros> 你连到你的客户端 16:51 <ailouros> 你用浏览器浏览别人的目录 16:51 <ailouros> 你用浏览器选择要下载的文件 16:51 <ailouros> 你的客户端做脏活累活 16:52 <ailouros> 你得到下载好的文件 16:52 <ailouros> 这样更清楚吗? :) 16:52 <jrandom> 很好,谢谢——所以“浏览别人的目录”是你的客户端去查询他们的客户端,然后返回该目录的 HTML 表示 16:52 <ailouros> 没错 16:52 <jrandom> (或者从某个服务器/超级节点(superpeer)/等拉取) 16:53 <jrandom> 不错 16:53 <ailouros> 所有脏活(找重复、多源下载等等)都由你的(本地)客户端透明完成 16:54 <ailouros> 你看到的基本上就是一个目录树和一些你可以下载的文件 16:54 <jrandom> 很好 16:55 <ailouros> 要发布你的数据,你把你的公共(p2p)地址给出去 16:55 <ailouros> 要共享文件,你把它们拷贝(或者做符号链接(symlink))到 pub/ 目录(或其子目录)。就这么简单 16:57 * jrandom 会继续挖源码,也期待更多信息 :) 16:57 <jrandom> 好,还有谁有要在会议上说的吗? 16:57 <bar_> 嗯……我可以问下发布和共享的区别吗?发布会把数据推到某个数据存储里吗? 16:58 <ailouros> bar_:共享是把块提供出来让人下载。发布是让世界知道你共享了什么 16:58 <ailouros> 发布是共享的子集 16:58 <bar_> 啊哈,明白了,谢谢 16:58 <ailouros> 比如,如果你只有一个文件的一半,你会共享它但不发布它 16:59 <jrandom> 那别人怎么知道他们可以从你这里拿到那些块呢? 16:59 <ailouros> 而且你可以完全控制你发布哪些文件(不像 emule,每个下载的文件都会被发布) 16:59 <ailouros> 因为每个客户端都会定期向网络发送它有哪些块可以提供的信息 17:00 <jrandom> 不错 17:00 <ailouros> 发送到网络,也就是服务器(当前这样)或 DHT(分布式哈希表)(未来) 17:00 <jrandom> 所以这有点像 mnet,带一个块跟踪器 17:00 <ailouros> 呃,mnet 风格? 17:01 <jrandom> 类似于 mnet(mnetproject.org)的工作方式 17:01 * ailouros 正在看 mnetproject.org 17:02 <ailouros> 嗯,你只有你的个人空间,没有共享空间 17:02 <ailouros> 而且你不会把块推送来回 17:02 <jrandom> 对,和 mnet 不完全一样,但在结构上类似 17:03 <jrandom> 就像 mnet,但每个人都穷得没人替他们托管数据 ;) 17:03 <ailouros> 对 17:03 <ailouros> :D 17:03 <jrandom> 好,还有谁有别的要提? 17:04 <jrandom> 如果没有…… 17:04 * jrandom 做收尾 17:04 * jrandom 用 *baf* 结束了会议