快速回顾
出席者: jrand0m, dm, Dellammo, mihi, moi, mihi-backup, dm_backup, wilde, shardy
会议记录
[23:01] <jrand0m> 议程 [23:01] <jrand0m> 0) 欢迎 [23:01] <jrand0m> 1) 0.2 进度 [23:01] <jrand0m> 2) www 代理 [23:01] * dm 若有所思。 [23:02] <dm> 哦,开会? [23:02] <jrand0m> 3) phttprelay [23:02] <jrand0m> 4) i2ptunnel [23:02] <jrand0m> 5) 安装 [23:02] <dm> 抱歉。 [23:02] <jrand0m> 6) iip 功能请求 [23:02] <jrand0m> 7) ??? [23:02] <jrand0m> 0) 欢迎 [23:02] <jrand0m> 嗨。 [23:02] <jrand0m> 会议 62?是吗? [23:02] <Dellammo> 嗨 [23:02] <jrand0m> (别担心 dm,我们可以原谅你) [23:02] <mihi> 嗨 jrand0m [23:02] <dm> 嗨 mihi [23:02] * mihi 也这么想 [23:03] <jrand0m> 1) 0.2 进度 [23:03] * jrand0m 最近犯了严重的“功能蔓延症”,所以 0.2 版发布还剩大约 30 分钟的代码要写。 [23:04] <jrand0m> 但完成后,我们就能不受 NAT、防火墙或 HTTP 代理 的影响,可靠地运行并通信。 [23:04] * dm 刚刚创建了 I2PSecureRemoteShell 1.0 [23:04] <dm> 酷,jr! [23:05] <jrand0m> 一切都已可用,唯一剩下的是让未使用的数据库条目在 N 分钟后过期(默认可能是 5) [23:05] <jrand0m> 穿越 NAT/防火墙/HTTP 代理 的通信使用 PHTTP(Polling HTTP,轮询式 HTTP)传输。它很慢,但可靠。 [23:05] <dm> 它怎么工作的?用哪些端口? [23:06] <jrand0m> 它把消息发送到一个可达的 PHTTP 中继,后者会存储消息,然后接收方每隔 N 秒轮询获取消息 [23:06] <jrand0m> 这方面还有很多可以调优和改进的点,这就是议程第 3 点 :) [23:06] <dm> P 代表什么? [23:06] <jrand0m> Polling HTTP [23:06] <dm> 好的,谢谢。 [23:07] <jrand0m> 会议结束后我也会去更新 wiki 上的 “kludges” 页面,记录那些怪异的地方 [23:07] <jrand0m> (比如在通信过程中还不能处理 lease 变化) [23:08] <jrand0m> 另一个要讨论的是议程第 5 项——安装。也就是我们该如何处理 router/SDK/tunnel 等的安装 [23:08] <jrand0m> 好的,0.2 进度就这些 [23:08] <jrand0m> 2) www 代理。 [23:09] <jrand0m> moi 针对在 I2P 内部浏览 www 站点有个很酷的主意。 [23:09] <jrand0m> 想解释一下吗,moi? [23:09] * jrand0m 把聚光灯打到你身上 *** moi is ~someone@anon.iip (someone) *** on channels: #freenet #anonymous #iip #iip-dev *** on irc via server anon.iip (Official IIP ) *** moi 已空闲 9 分钟,于 Thu Jan 01 01:00:00 1970 登录 [23:10] <moi> 嗯 [23:10] <moi> 我只是修改了一个 HTTP 代理,并使用了 mihi 的 tunnel [23:10] <moi> 这样你就可以访问 (Link: http://i2p/BASE64KEYHERE)http://i2p/BASE64KEYHERE [23:10] <moi> 最终命名服务器也会在那儿—— [23:11] <dm> 赞 [23:11] *** Signoff: mihi (Ping timeout) [23:11] <moi> 你需要先粘贴第一个长密钥,但之后理论上应该就能跟着链接走了,我想 [23:11] <Dellammo> 所以是访问 i2p 内部网页,还是 i2p 外部的页面? [23:11] <dm> i2p 解析到 localhost? [23:11] <moi> 这样有人就能架一个 i2p 版 Google,然后从那儿开始……也许 [23:12] <mihi-backup> !thwap dm. [23:12] <mihi-backup> 一个代理… [23:12] <jrand0m> 出于安全考虑,代理应对除 (Link: http://i2p/)http://i2p/ 之外的所有主机返回 404 [23:12] <dm> 哎呀! [23:12] <moi> 好主意 [23:12] <dm> 刚漏看那部分 [23:12] <mihi-backup> 不过一个简单的 servlet 也不错 [23:12] <jrand0m> 嗯? [23:13] *** mihi (~mihi@anon.iip) 加入频道 #iip-dev [23:13] <jrand0m> 嗯,可能有个问题。 [23:13] <jrand0m> 这是用 HTTP 1.0 还是 1.1? [23:14] <mihi> 如果服务器要求 Host: 头呢? [23:14] <jrand0m> [也就是,会带 Host: 头吗?] [23:14] <jrand0m> 正是 [23:14] * mihi 期待点什么 [23:14] <moi> 我在想能不能让代理把那个头抹掉 [23:14] <jrand0m> 如果服务器的出站 tunnel 总是在同一台主机上,那就没问题 [23:14] <jrand0m> 你可以把代理的 Host: 设成 127.0.0.1 [23:15] *** dm_backup (~as@anon.iip) 加入频道 #iip-dev [23:15] <jrand0m> 但那样就必须在和服务器同一台主机上运行 tunnel。问题不大,反正这不是为了通用的正常网页浏览 [23:15] <jrand0m> 对吧? [23:15] *** Signoff: dm (Ping timeout) [23:16] * moi 还没想得那么深入 [23:16] <mihi> 如果你在自己机器上跑服务器,也可以把 i2p 别名成 localhost 或类似的。 [23:16] <dm_backup> 那大家现在都得跑 Web 服务器了吗? [23:16] <jrand0m> dm_backup> 这只针对想这么做的人。 [23:16] *** dm_backup 现在名为 dm [23:16] <Dellammo> 比如我 [23:16] <dm> 是啊,我是说这个 (Link: http://i2p)http://i2p 这个玩意儿 [23:17] <mihi> 如果你想提供内容,是的。 [23:17] <mihi> 不过你在老牌的 WWW 上提供内容也得跑一个。 [23:18] <Dellammo> 为什么? [23:18] <dm> 嗯,也许我该给 I2P 做个 P2P 应用。 [23:18] <jrand0m> 在 i2p 上的文件共享应用会很棒。 [23:18] <dm> 对,抱歉,我是说文件共享。 [23:19] <moi> 我觉得有人可以配合 i2ptunnel 一起跑个 OpenNap 服务器 [23:19] <jrand0m> 可以。 [23:19] <jrand0m> (尽管原生的 i2p P2P 性能会更好) [23:19] <mihi> 但下载会很难。 [23:20] <mihi> 因为所有都是 localhost,没法到达正确的主机 ;) [23:20] <dm> 我们先等等,看看 PING 能不能跑在 i2ptunnel 上再说。 [23:20] * Dellammo 有点糊涂,我们是在说一个不是 i2ptunnel 的代理,通过输入‘(Link: http://i2p/')http://i2p/' 让你访问 i2p 网络内部的 Web 服务器吗? [23:20] <jrand0m> 或许弄个简单的、为 i2p 设计的 FTP 客户端? [23:20] <dm> (不是字面意义上的 ping) [23:20] <mihi> jrand0m:ftp 需要两个端口… [23:20] <jrand0m> 为 i2p 设计的。 [23:21] <jrand0m> 一个通用的文件传输应用,不是特指 FTP 协议 [23:21] <mihi> 那就不是 ftp 了。 [23:21] <mihi> ATalk ;) [23:21] <jrand0m> (利用更大的消息尺寸) [23:21] <dm> 智者之战! [23:21] <jrand0m> 呵 [23:21] <moi> Dellammo:现在你需要为每个你想浏览的网站/Destination 创建一个 i2ptunnel。我们在考虑用一个代理服务器为每个站点动态构建一个 i2ptunnel。 [23:22] <jrand0m> (类似那样) [23:22] <jrand0m> 你其实不想具体用 i2ptunnel。 [23:22] <jrand0m> 你会想用 i2ptunnel 协议,直接发消息,而不是通过 TCP/IP 套接字。 [23:23] <jrand0m> mihi> 把协议功能从 i2ptunnel 中剥离出来,让其他应用能向一个 i2p tunnel 发送数据,大概需要多少时间? *** mihi is mihi@anon.iip (mihi) *** on channels: #iip-dev #iip #headlines #german #freenet-opn #freenet #fredisdead #frazaa @#fiw #anonymous *** on irc via server anon.iip (Official IIP ) *** mihi 已空闲 3 分钟,于 Thu Jan 01 01:00:00 1970 登录 *** mihi-backup is ~mihi@anon.iip (mihi) *** on channels: #iip-dev *** on irc via server anon.iip (Official IIP ) *** mihi-backup 已空闲 12 分钟,于 Thu Jan 01 01:00:00 1970 登录 [23:25] <mihi> 有什么大量的协议功能吗?I2PTunnelRunner 可以直接用。 [23:25] <mihi> 你只需要按需调整客户端类。 [23:25] <jrand0m> 嗯,不太是——i2ptunnelRunner 用的是 socket [23:26] <jrand0m> 这是一个纯 Java 应用,它想生成一条消息("HTTP GET /\n\n"),并把它发送到一个出站的 I2PTunnel [23:27] <jrand0m> 我们不想把联系代理的客户端重定向到一个新端口去连接新实例化的 I2PTunnel(因为那样就没法在该站点的外链上切回来了) [23:28] <jrand0m> 不过也许把 I2PTunnelRunner 切换为使用 InputStream(它用到的也就是 socket.getInputStream)会很容易… [23:28] <jrand0m> 但我们仍然需要监听端 [23:28] *** Signoff: mihi (Ping timeout) [23:28] <jrand0m> 囧 [23:28] * jrand0m 希望备份号别也掉线… [23:28] <dm> 备份也要挂了,看着吧! [23:29] <mihi-backup> ;) [23:29] <jrand0m> w00t [23:29] <mihi-backup> [23:25] <jrand0m> 嗯,不太是——i2ptunnelRunner 用的是 socket [23:29] <mihi-backup> [23:25] <mihi> 哎,对。你是想完全不使用 socket 来做吗? [23:29] <mihi-backup> [23:25] <mihi> 那样的话,i2ptunnel 就没剩下多少代码了。大部分都是处理 socket 的。 [23:29] <mihi-backup> [23:26] <mihi> 最好遵循协议自己实现(用 i2ptunnel.java 里的静态方法组装消息) [23:29] <mihi-backup> [23:28] <mihi> http 不需要那么多线程。只要在入站消息上跑个 reader,直到遇到双回车,然后把你的东西发出去。 [23:30] <jrand0m> 啊,行。谢谢 [23:30] <jrand0m> moi> tu sabes? [23:30] <mihi-backup> 至于把 I2PTunnel 换成一个输入流。要它做什么?你解析完请求后,流上也收不到任何东西了。 [23:31] * moi 在思考 [23:31] <dm> toi 在想 [23:31] <mihi-backup> 直接把 tunnelrunner 忘了吧。;) [23:31] <jrand0m> 对,我只是想着让 I2PTunnel 和 HTTP 代理使用相同的代码——I2PTunnel 用 socket.getInputStream(),HTTP 代理用 new ByteArrayInputStream("GET / \n\n".getBytes()) [23:31] *** mihi (mihi@anon.iip) 加入频道 #iip-dev [23:32] * moi 之后需要详细过一遍 [23:32] <mihi-backup> 但那会导致 runner 在把字符串发完时发送一个 "Connection closed"。 [23:32] <mihi-backup> 因为流结束了。 [23:32] <jrand0m> 对,那是正常的 HTTP [23:33] <mihi-backup> 我说了,忘了 runner 吧 ;) [23:33] <jrand0m> 行 [23:33] <mihi-backup> jrand0m:不。连接是在答案回来时关闭的,不是在问题发出去时。 [23:33] <jrand0m> 哦对 [23:33] <jrand0m> ;) [23:36] <jrand0m> 不错 moi,这些我们之后再细化。 [23:36] <jrand0m> 好的,这就是议程第 2 项。现在到 3) [23:36] <moi> 好 [23:37] <jrand0m> 3) phttprelay [23:37] <jrand0m> phttp relay 是一组 servlet,用 .war 文件打包 [23:38] <jrand0m> 它在 Windows / Sun JVM 上开箱即用,但我得 hack 一下 jetty 才能让它在 kaffe 上跑 [23:38] <mihi> make .peace not .war [23:39] * jrand0m 呻吟 [23:39] <dm> 没有 J2ee 服务器也能跑 .war 文件? [23:39] <dm> 长见识了。 [23:39] <jrand0m> .war 文件可以在任何 servlet 容器里运行——tomcat、apache 配合 mod_jk、jetty 等 [23:40] <jrand0m> 我们希望一些人把它们跑在有公网可达 IP 的机器上,但它们只对那些没有公网可达地址的人(比如我)是必要的 [23:41] <mihi> 如果不通过那个,要穿过 nat 需要重定向哪些端口? [23:41] <jrand0m> 它的实现也很初级——需要限制为多少 router 中继、队列多少消息、多长时间超时等 [23:41] <jrand0m> 只要 I2NP 的 TCP 端口 [23:41] <jrand0m> (或者 I2NP 的 UDP 端口) [23:41] * mihi 不知道他的 nat 是否允许 udp 转发 [23:42] * jrand0m 也不知道 mihi 的 nat 是否允许 [23:43] <jrand0m> 现在,比如我的笔记本只能通过 PHTTP 可达,而我服务器的 router 可以通过 PHTTP、TCP 和 UDP 可达。如果我的笔记本通过 TCP 建立到服务器 router 的连接,就能通过 TCP 发消息。但如果我的笔记本没有先那样做,服务器就必须通过 PHTTP 发消息 [23:44] <jrand0m> 代码在 i2p/code/apps/phttprelay/,有 servlet 经验且想改个小应用的可以去看看 [23:45] <jrand0m> (它应该也能在 https 和纯 http 下透明工作) [23:45] <jrand0m> 我会很快把 PHTTP 协议写成文档。 :) [23:45] *** Signoff: mihi (Ping timeout) [23:45] <jrand0m> 好的,3) phttprelay 就这些 [23:45] <jrand0m> 4) i2ptunnel [23:46] <jrand0m> 我们已经讨论了不少。除非 mihi(或其他人)还有别的,我们可以转到 5) [23:46] *** wilde (~anon@anon.iip) 加入频道 #iip-dev [23:46] <jrand0m> hola wilde [23:47] <jrand0m> 好。既然如此,第 5 项 :) [23:47] <jrand0m> 5) 安装 [23:48] <jrand0m> 为了把 0.2 推出去,甚至以后,我在考虑写些 ant 脚本。 [23:48] <jrand0m> 还是我们该用另一个开源安装系统? [23:48] <jrand0m> 有谁有经验/想法吗? [23:49] <Dellammo> 嗯 [23:50] <jrand0m> ant 的好处是和构建系统统一、跨平台,而且能无界面运行。 [23:50] <wilde> 嘿 [23:50] <jrand0m> 但它需要 ant(而 ant 需要 java)。而且它没有 GUI [23:51] <Dellammo> 我能想到很多 Windows 的安装程序… 不过不知道有多少是 gpl 的 [23:51] <jrand0m> 是,我有 InstallAnywhere Enterprise 的授权,但这不利于开源 [23:51] <jrand0m> NSIS 是开源的,但有它的门道。 [23:51] <dm> 傻问题:ant 包含在 java 里吗? [23:52] <jrand0m> 不。 [23:52] <jrand0m> 哦,不过我们可以分发一个用 GCJ 编译的 ant [23:52] <dm> 好吧,那应该是跟 eclipse 一起带的。 [23:52] <jrand0m> (编译成原生代码) [23:52] <jrand0m> 没错,dm。 [23:52] <jrand0m> apache 做 ant(ant.apache.org),它是 apache 许可的。 [23:52] <jrand0m> 哦,呃。 [23:52] * jrand0m 刚读了我自己打的这句话) [23:53] <jrand0m> 按 FSF 的说法,gpl 对 apl 不友好 [23:53] <jrand0m> 我们大概不能分发 ant。 [23:53] <dm> 不能就用个脚本吗?安装需要做什么? [23:53] <jrand0m> 但我们可以用它。 [23:53] <jrand0m> 其实没多少。用脚本就行。 [23:53] <jrand0m> 但我们要不要写 .bat 和 .sh,等等。 [23:54] *** shardy (~shardy@anon.iip) 加入频道 #iip-dev [23:54] <dm> 安装包含什么?就几个问题? [23:54] <jrand0m> 用 Java 写一个跨平台的自定义安装器有点杀鸡用牛刀,最好用现成的安装框架 [23:54] <jrand0m> 对,几个问题 [23:54] <jrand0m> 我预见的安装目标: [23:54] <Dellammo> 我们会有个闪亮的新 logo 吗?谁在做? [23:54] <jrand0m> install-router [23:55] <jrand0m> install-www-tunnel, install-www-proxy, install-sdk, install-cvs-tunnel, update-seednodes [23:55] <moi> 为啥不用 InstallAnywhere?只要代码是开源的就行 [23:55] * jrand0m 觉得那应该是你,Dellammo :) [23:55] <jrand0m> InstallAnywhere 不是开源的。 [23:55] * Dellammo 开始动手 [23:56] <dm> 现在脚本应该就够了,不过未雨绸缪也行。 [23:56] <jrand0m> (大概 4 千欧/座) [23:56] <jrand0m> 对。所以明天我大概先写 ant 脚本,但我们需要研究一个系统 [23:56] *** Signoff: wilde (Ping timeout) [23:56] <jrand0m> 所以如果有人能帮忙,就太感谢了 :) [23:57] <dm> 啊好吧,我刚想到的是 shell 脚本。 [23:57] <moi> 在 Linux 上,一些包管理器可以做到这些 [23:57] *** wilde (~anon@anon.iip) 加入频道 #iip-dev [23:57] <jrand0m> 为不同平台维护不同的安装器很麻烦 [23:59] <dm> Java 安装器?为什么会很麻烦? [23:59] <jrand0m> Java 安装器会很棒 [23:59] <mihi-backup> pain in the a**e [23:59] <mihi-backup> 哎,对不起… [23:59] <dm> system.out.println("Please enter where you would like to install I2P") ;) [23:59] <mihi-backup> s/tln/t; s/P"/P: "/ [23:59] <mihi-backup> s/sys/Sys/ [00:00] <jrand0m> 用 Java 写一个自定义安装器是可行的,但更倾向于用现有框架。不过如果你愿意写自定义安装器,我支持你! [00:00] <dm> mihi 在抽风。 [00:00] * mihi-backup 用一条大鳟鱼把 dm 抽了几下 [00:00] <dm> 这样吧… [00:01] <dm> 如果你有时间把安装所需的具体步骤写出来,我就写一个 Java 安装器。 [00:01] <mihi-backup> dm:看 ant 脚本 ;) [00:01] <jrand0m> 好的 dm。我把 ant 那套跑起来后会给你写文档 [00:01] <dm> 行,到时候看看我能不能看懂 ant 脚本。 [00:02] *** Signoff: wilde (Ping timeout) [00:02] <Dellammo> jrand0m,i2p I2P i^2p 还是 I^2P? [00:02] * jrand0m 有些涂鸦,把大写 I、数字 2 和大写 P 叠在一起… [00:03] <Dellammo> 嗯 [00:03] *** wilde (~anon@anon.iip) 加入频道 #iip-dev [00:03] *** mihi (~mihi@anon.iip) 加入频道 #iip-dev [00:03] <jrand0m> 好的,这就是 5) 安装 [00:03] <jrand0m> 6) iip 功能请求 [00:04] <jrand0m> 有人来提了个自动昵称抢占处理的请求 [00:04] <jrand0m> 基本上,如果有人注册了一个昵称,除非通过了身份验证,其他人就不能一直使用这个昵称 [00:04] <jrand0m> nop 或任何做过 iip 开发的人——想法? [00:04] * jrand0m 觉得这是个很不错的功能 [00:05] * Dellammo 画了只“光明会之眼”,上面加了一个“禁止吸烟”那样的禁止符号 [00:05] <jrand0m> 呵 [00:05] <dm> 也许我也做个 I2P 的 logo……给我安装器的 GUI 用 ;) [00:05] *** Signoff: wilde ((null)) [00:05] <Dellammo> 大家都做一个,这样我们就不会被一个糟糕的 logo 卡住了 [00:05] <mihi> jrand0m:问问 mids——他维护 trent。 [00:06] <mihi> 顺便说,trent 的源码在 cvs 里 [00:06] <Dellammo> logo 是任何活动中最重要的部分 [00:06] <jrand0m> 的确,Dellammo。 [00:06] * dm 拂去 Corel Draw 的灰尘… [00:06] <dm> 我超爱 Corel Draw。 [00:07] <jrand0m> 好的,6)就这些 [00:07] <jrand0m> 7) ??? [00:07] <jrand0m> 有什么问题/想法/飞盘/脚趾甲? [00:07] <dm> 想法:希望它能奏效。 [00:08] <jrand0m> 呵 [00:08] * jrand0m 我也希望。 [00:09] <mihi> jrand0m:继续保持出色的工作! [00:09] <dm> 对,继续加油。 [00:09] <jrand0m> 出色的工作?你显然没看过代码 ;) [00:09] <dm> 喜欢你的代码,除了那晃眼的下划线。 [00:09] <dm> blinding…bleeding…之类的… [00:09] <jrand0m> 呵,实例变量带下划线 _,这样我们就不用写 this.var = var; [00:10] <jrand0m> 好… 68 分钟了…如果我还能再拖一分钟… [00:10] <jrand0m> w00t [00:10] * jrand0m 用 *baf* 宣布会议结束。