关于作者

姓名:神仙

性别:男

出生日期:1984-01-08

地区:上海-上海

联系电话:

QQ:--

婚否:保密
用户名:syre
笔名:syre
地区: 上海-上海
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



my friends

developer

phper's blogs

访问统计:
文章个数:128
评论个数:80
留言条数:13




Powered by BlogDriver 2.1

仙居

 

这里是神仙的blog。随便写写,随便看看。

文章

blog搬家
受不了这里的bug
现在搬到blogbus,功能还不错。文章基本上都迁移过去了。
新的地址:http://syre.blogbus.com

- 作者: syre 2006年02月3日, 星期五 14:49  回复(1) |  引用(1) 加入博采

破解foxmail密码
  今天老妈把邮箱密码忘了。想到foxmail里应该有记录,就找出账号设置文件,打开看看,果然有密码,不过被加密了。google到解决办法后,用php写程序解决了。然后修改了一下,变成通用的。其实可以用看星星的程序解决。不过手边没有,再说,咱程序员自有自己的办法^_^

<?php
function hexDecode($s) {
    return preg_replace('/(\w{2})/e',"chr(hexdec('\\1'))",$s);
}

function foxmailCrack($src) {
    $s1 = substr(hexDecode($src), 1) ^ "~draGon~";
    $s2 = chr(ord('Z') ^ hexdec(substr($src, 0, 2)));
    $s2 .= substr(hexDecode($src), 1, -1);
    $out = '';
    for($i = 0; $i < strlen($s1); $i++){
        $tmp = ord($s1[$i]) - ord($s2[$i]);
        $tmp = $tmp < 0 ? $tmp + 255 : $tmp;
        $out .= chr($tmp);
    }
    return $out;
}
?>

- 作者: syre 2006年02月2日, 星期四 19:41  回复(3) |  引用(1) 加入博采

语言和艺术
  我们日常的思维和语言是分不开的。我们想的每一件事的过程都是在用自己的语言来进行的。语言是由语法,词汇,语义构成的。
  词汇是什么?比如我们说一张桌子,人们就会想起一个典型的桌子的样子,方的,四条腿。但方的,四条腿的就是桌子吗?那凳子呢?还有圆的桌子,一条腿的 桌子呢?桌子究竟是个什么东西呢?我想应该是:高度1M左右,上表面基本是个平面,用来放东西的东西。不过这个描述有点难于理解。抽象的描述可以概括一类 东西的共性,但人更喜欢具体的东西。“桌子”这个词就是给这一类东西起的一个名字。语言就是构建在词汇的基础上的。比如,那个关于对桌子的描述也是由其他 词汇构成的。比如:高度、左右、平面等等。但总有一些东西是语言没法描述的。我们把“词语解释”这个过程继续下去。来看看字典里的解释。高度:从上到下 的距离;距离:事物在空间或时间上相隔;事物:客观的一切物体和现象;现象:事物在发展、变化中所表现的外部形式。不用继续下去了。这里,对“事物”的描 述用到了“现象”,对“现象”的描述用到了“事物”。像“事物”,“现象”,还有常用的“东西”之类的最基本的概念是不能用语言来描述的。当我们说到这些 词汇的时候,我们的脑子里会有一个意识,但这个意识是没法说出来的。这就像老子的名言:道可道,非常道,名可名,非常名。其实不仅仅是那些最基本的东西。 和人的意识相关的很多东西都是难以用语言表达的,因为语言本身就是意识的一部分。
  语言不能表达意识的全部内容,但并不代表一些语言不能表达的东西就不能传达出去。有这么一句话:“情动与中,则嗟叹之,嗟叹不足,则咏歌之,咏歌不 足,则手之舞之,足之蹈之”。你看,语言不能表达的东西可以用音乐,舞蹈来表达。还有绘画等其他艺术形式也可以达到。艺术可以把那些“不可道”的东西传达 出来,这就是艺术的伟大之处。

- 作者: syre 2006年02月1日, 星期三 15:40  回复(3) |  引用(1) 加入博采

linux上装php
今天在linux上装apache2和php5
编译都通过
最后启动apache的时候却出了错:
Syntax error on line 232
of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/libphp5.so into
server: /usr/local/apache2/modules/libphp5.so: undefined
symbol: sapi_module

搞了好半天,google了下,似乎也没其他人碰到这个问题。
突然想到make clean一下,重新编译安装php,然后居然就好了。

- 作者: syre 2006年01月31日, 星期二 17:15  回复(2) |  引用(1) 加入博采

一行代码实现字符串的16进制编码解码
<?php
function hexEncode($s) {
    return preg_replace('/(.)/es',"str_pad(dechex(ord('\\1')),2,'0',STR_PAD_LEFT)",$s);    
}
function hexDecode($s) {
    return preg_replace('/(\w{2})/e',"chr(hexdec('\\1'))",$s);
}
echo hexDecode(hexEncode("北京\n欢迎您!"));
?>

- 作者: syre 2006年01月30日, 星期一 13:58  回复(1) |  引用(1) 加入博采

php的动态代理的又一种实现
本来php4里,在对象内部是可以对$this赋值的(或许是bug)。但php5不让这样了,如果对$this赋值会引发一个fatel error:can not re-asign to $this。今天突然想到了一个办法。既然不让对$this赋值,那能不能绕个圈实现呢?
运行一下下面的代码
<?php
class Container {
    public $foo;
    function __construct() {
        $this->foo=new Proxy($this);
    }
}
class Proxy {
    private $container;
    function __construct(&$container) {
        $this->container=$container;
    }
    function go() {
        $this->container->foo=10;
    }
}
$c=new Container;
echo "开始\n";
echo 'gettype($c->foo) = \''.gettype($c->foo)."'\n";
echo 'get_class($c->foo) = \''.get_class($c->foo)."'\n";
echo "然后\n";
$c->foo->go();
echo 'gettype($c->foo) = \''.gettype($c->foo)."'\n";
echo '$c->foo = '.$c->foo."\n";
?>
结果是:

开始
gettype($c->foo) = 'object'
get_class($c->foo) = 'Proxy'
然后
gettype($c->foo) = 'integer'
$c->foo = 10

可以看到,$c->foo已经从一个Proxy对象变成了一个整数,而这一切是在对象内部完成的。这样,我们就可以做一个清爽的动态代理了。

class Container {
    var $p;
    function __construct() {
        $this->p=new Proxy($this,'p','Target');
    }
}

class Target {
    var $v=777;
}

class Proxy {
    private $container;
    private $property;
    private $className;
    function __construct(&$container, $property, $class) {
        $this->container=&$container;
        $this->property=$property;
        $this->className=$class;
    }

    function __get($key) {
        $class=$this->className;
        $obj=new $class;
        $property=$this->property;
        $this->container->$property=$obj;
        return $obj->$key;
    }

    function __call($func, $arg) {
        $class=$this->className;
        $obj=new $class;
        $property=$this->property;
        $this->container->$property=$obj;
        return call_user_func_array(array($obj,$func), $arg);
    }
}

$c=new Container;
echo get_class($c->p)."\n";
echo $c->p->v."\n";
echo get_class($c->p)."\n";
echo $c->p->v."\n";
可以看到,使用代理和使用实际对象没有区别,而且当第二次访问的时候,$c->p已经变成了实际的对象了。

- 作者: syre 2006年01月28日, 星期六 15:23  回复(4) |  引用(1) 加入博采

寒假
  要过年了,寒假也过了一半了。似乎从高中的时候,就开始觉得放假无聊,于是每次放假都要想点事做。这次还没放假的时候,就想着寒假里要写一个PHP的ORM,把几本以前没看完的书看了。现在程序是写得差不多了,不过书却没看几页。每天坐在电脑前面,在QQ群里和别人侃侃,在几个blog里转一圈,晃晃论坛,再写会程序,大半天就没了。晚上关机的时候,总有一点失落——又一天就这么过去了。有时候也想出去走走,但出了门就不知道该去哪里,最后不是到书店去就是漫无目的在小区周围里转一圈。
  嗯——突然有了个主意,过几天到复兴路去拍老房子去。这也是一件想了很久的事情了。上海那么多好看的老房子,哪天没了就可惜了。接下来就春节了,顺便也去拍点应景的照片。

- 作者: syre 2006年01月28日, 星期六 12:53  回复(3) |  引用(1) 加入博采

关于我的一个测试
http://syre.testren.com
看到好些人在玩这个,也凑个热闹

- 作者: syre 2006年01月27日, 星期五 18:39  回复(3) |  引用(1) 加入博采

重构
  Martin说,如果你添加新功能的时候遇到了困难,就重构它。今天算是认识了。做获取数据集的时候,很多东西和获取单个数据的是一样的,想重复利用,但感觉很困难。就把代码重构了一下,把得到sql的部分抽出来,单独弄了个类,然后把两个函数搬到数据库抽象层去,现在就好办了。

- 作者: syre 2006年01月26日, 星期四 15:32  回复(1) |  引用(1) 加入博采

程序接口
在弄一个ORM。
取一个数据集的时候大致是这样。
$dataSet=$manager->getList($filter);
需要一个过滤条件,相当于select语句的where子句
考虑了很多形式
一开始想
$filter->addFilter('Author::name=="XiaoWang"');
似乎很直观。但后来写测试的时候发现一个问题。如果用户用字符串值,还要自己去处理转义。
看了下hibernate的方法,是类似于
$filter->add(Condition::eq('Author::name',"XiaoWang"));
感觉很怪。我想没必要去追求完美的面向对象结构,好用就行,就先弄成这样:
$filter->add('Author::name','==',"XiaoWang");
反正以后修改涉及的地方也就这一个类和TestCase。

- 作者: syre 2006年01月25日, 星期三 14:03  回复(2) |  引用(1) 加入博采

sf.net
最近sf.net上不去,不知道什么原因。
不过可以通过代理网站,有些原来上不了的网站都可以上了。
http://hidemyass.com
http://anonymouse.org
速度还可以。

- 作者: syre 2006年01月22日, 星期日 17:08  回复(1) |  引用(1) 加入博采

欢欢好人啊
成绩出来了
组成居然有81……
欢欢好人啊。

- 作者: syre 2006年01月21日, 星期六 13:24  回复(5) |  引用(1) 加入博采

软件界面
今天一天没写程序。晚上看到一个UI的收藏贴。头几个是ms的office,不过没见过这样的,或许是未来版本?也可能是某个设计师的YY版本。不过,office要是真那样就是兼顾了美观和实用了。现在的office工具栏上找个按钮不容易啊。

- 作者: syre 2006年01月20日, 星期五 23:04  回复(1) |  引用(1) 加入博采

关于firefox
http://blog.donews.com/tinyfool/archive/2005/12/05/647499.aspx
无意中发现一篇顶firefox的文章。
顺便想说一些关于浏览器兼容性的问题。
  我看到的firefox不能兼容的网站都是国内的网站。为什么呢?因为咱们国家电脑普及的晚,在ie还没垄断的年代,netscape的用户是很多的。至今国外还有很多人还在用netscape。洋人写的js的书都对浏览器兼容性十分关注,甚至考虑到了ns3,ie3的地步。另一方面,多数洋人的网站都很简单,考虑了机器配置低的和用旧浏览器的用户,不想放弃任何一个用户。不要以为人人的电脑都很好。我有个同学在用赛扬433的,有个亲戚的还是老奔的。当然,D版windows也起了不少作用。至少升级系统都不用花钱了。

- 作者: syre 2006年01月19日, 星期四 23:59  回复(1) |  引用(1) 加入博采

单元测试
  最近在改自己的php的ORM。尝试用phpunit2自动测试。有了这个确实很舒服。看一个'ok'比人工比较结果方便多了,而且Test Case还可以重复利用。改了一点就运行一下测试,如果ok了就继续。不过phpunit2有时候会莫名其妙什么都不出来,过一会又会好了,不知道室那里的问题。

- 作者: syre 2006年01月19日, 星期四 14:14  回复(0) |  引用(1) 加入博采