• 2010-06-22

    if-else对优化代码冗余度的反作用

    Views: 17643 | 8 Comments

    有些程序员可能过于追求 if-else 对代码优化的效果, 却忽略了其带来的对代码清晰度的反作用. 假设这样一个功能, 根据用户的等级显示不同的页面. 如果用户的等级大于等于 5, 他能看到的东西和普通用户(等级小于5)不同, 代码如下:

    echo "欢迎您, ";
    if(level > 5){
    	echo "高级用户!";
    }else{
    	echo "用户!"
    }
    // ... 大段代码
    echo '<a href="#">个人信息</a>';
    if(level > 5){
    	echo "审核文章!";
    }else{
    	echo "发表文章!"
    }
    echo "...";
    

    Continue reading »

    Posted by ideawu at 2010-06-22 10:52:44
  • 2010-06-06

    endlessssh – SSH 代理工具

    Views: 33486 | 9 Comments

    新建了一个开源项目 endlessssh, 用于 SSH 代理(不是 SSH 作为代理, 而是 SSH 使用代理), 放在 Google Project Hosting. 工具有两个特点:

    1. Tunneling SSH over REAL HTTP(完善中)

    让 SSH 工作在 HTTP 协议上, 从而穿越防火墙.

    2. 持续的会话

    即使 TCP 网络连接断开(这时, SSH 会话会失效), SSH 会话仍然保持, 直到网络重连后, 会话继续.

    项目地址: http://code.google.com/p/endlessssh/

    补充:

    谢谢评论中 Zealot 朋友的推荐.

    大概看了下类似的一个 GNU 项目 httptunnel(http://www.nocrew.org/software/httptunnel.html). 这个项目所使用的交互过程更像是 HTTP 交互, 在一个 HTTP 报文中包含自己的多个报文. httptunnel 没有确认机制, 也没有会话保持机制. 不过, httptunnel 可以值得借鉴.

    Posted by ideawu at 2010-06-06 15:17:22
  • 2010-06-03

    endless_tcp – 一种适应极端网络环境的网络软件架构

    Views: 29115 | No Comments

    TCP 是一种可靠连接的协议, 即使在恶劣的网络环境中(如丢包率高), 也能实现数据的可靠传输. 可以简单地和 UDP 对比. 使用 UDP 发出一份数据, 你无法通过 UDP 本身判断数据是否已经被对方收到. 但是使用 TCP, 你可以判断, 因为如果 TCP 无法保证对端收到数据, 连接便会使自己失败, 从而你得到一个通知.

    TCP 会话依赖于 IP 和端口, 也就是说, 一旦双方的任意一方的 IP 和端口发生了改变, TCP 连接就失效了. 另外, 虽然 TCP 有重传机制, 但重传失效的次数和时限用户转难控制. 为解决这两个问题, 需要实现一种不依赖于 IP/Port, 适应极其恶劣(超过 TCP 的容忍范围)的网络环境的连接协议, 称为 endless_tcp.

    Continue reading »

    Posted by ideawu at 2010-06-03 22:12:04 Tags:
  • 2010-06-01

    SSH ProxyCommand及其思想

    Views: 35612 | No Comments

    OpenSSH 的客户端有一个 ProxyCommand 的选项, 用于 SSH 客户端与服务器之间的隧道通信(tunneling). 所谓的隧道技术, 也称代理技术, 是网络通信技术的一个普遍概念, 就是把一条信道建立于另外一条信道之上.

    SSH 会话基于一个 TCP 连接. 如果我们把连接的两个端口各自的出口(也即入口)进行截获, 就可以用其它的信道来传输. 而且 SSH 仍然认为它用的是和另一端连接一条 TCP 连接.

    Continue reading »

    Posted by ideawu at 2010-06-01 00:47:42
  • 2010-05-30

    Windows Python select标准输入输出

    Views: 29933 | No Comments

    Windows 版本的 Python, select() 函数只能接受 socket, 不接受 File Object, 所以不能 select 标准输入输出.

    为此, 我开发了 win_stdio, 让 select 也能对 stdin/stdout 进行操作. 核心思想就是用 socket 作为 stdin/stdout 的代理. 结构示意如下:

    stdin -> stdin_sock -> my_stdin
    stdout <- stdout_sock <- my_stdout
    

    Continue reading »

    Posted by ideawu at 2010-05-30 19:21:24 Tags:
  • 2010-05-09

    PyPy – 吞下自己尾巴的小蟒蛇

    Views: 41245 | 2 Comments

    PyPy 项目可能会颠覆老学究和初学者的逻辑, 因为 PyPy 用 Python 语言来实现 Python 语言, 就像一只小蟒蛇吞下自己的尾巴. 也许你没见过, 但它确实存在.

    你可能会疑惑, 既然已经有了 Python, 那么为什么还用 Python 来实现 Python(PyPy)? 后者到底是什么东西?

    其实, 这其中的逻辑并不复杂. 比如 C 语言, C 语言的第一个编译器肯定不是用 C 语言来编写的, 但之后, C 编译器(如 GCC)就没有理由不用 C 来编写了. 所以, 用 Python 语言编写, 并用已存在的 Python 编译器(解释器, 执行环境)来做一个实现 Python 语言并没有什么奇怪.

    Continue reading »

    Posted by ideawu at 2010-05-09 21:30:01 Tags:
|<<<5678910111213>>>| 10/13 Pages, 76 Results.