随笔 - 20, 文章 - 0, 评论 - 371, 引用 - 8
数据加载中……

2006年3月1日

人生就是这样脆弱,纪念一位刚刚离去的同事

今天在公司论坛上看到这个的消息。虽然知道这一天总会到来,但是没有想到这么快。

她还是走了。肺癌,一个离我很遥远的东西,第一次让我感觉到生命的脆弱。
拼命的工作中突然间觉得有点茫然,不知道自已要想些什么才好。

虽然我和她不在同一栋楼里工作,以前也并没有什么交往,甚至是她生命后才知道她的名字,但是毕竟是我的同事,把总觉得很远的事情一下子拉到了我的面前。

去年9月得知她的病情,仅仅半年的时间,就已经结束。
我们能帮的都已经帮了,但是还是真的太快,人的生命真的很脆弱。

唉,刚结婚一个月,就发现这个病,到现在也不过10个月。我的口才不好,真的不知道如何表达这种情形。

各位兄弟,在拼命干活时,还是要时刻注意自己的身体。有病了就要去看医,拖久了,小病就成大病了。




posted @ 2006-03-01 21:29 飞刀 阅读(622) | 评论 (3)编辑

2006年2月3日

使用动感地带(CMWAP)+笔记本上网

过年回家了,什么都好,就是没有宽带可用,比较痛苦。

在家里只有通过拨号才能上网,可是拨号不光慢,而且又贵,都什么年头还是4块钱一个小时,抢钱啊。于是把目光投向了GRPS网络。
 本人卡是动感地带的,20块钱CMWAP包月,以前是不限流量的,但是从11月份开始,就开始限流量了,一个月只有100M,一点都不爽,如果只是用手机上上网那倒没有什么,但是如果是连上手机,就比较XX了,不知道移动最近哪个神经搞这么一招,而且正好搞到过年时,我正好要用这种方式上网时搞这个。

 为防止以后忘记,特写此文,以做备份。

移动不光限流量,而且限制了IE、Firefox、Opera以及一些常用的浏览器,这样就保证各位别用CMWAP干CMNET的事情。但是有防就有攻,移动仅仅限制了一下UserAgent,我只要打这个主意就行了。
1. 安装手机Modem的驱动,我的手机支持红外线,对着笔记本的红外端口,XP就帮我自动装好了。
2. 新建一个拨号连接,Modem就选你的手机,号码是*99***1#,*99***是必须的,1#表示手机中的第一个GPRS设置,如果你没有搞什么特别的东东,一般就不用动
 3. 下载一个可以修改UserAgent的浏览器,我开始是用的是K-MELEONCCF,后来不习惯就装了一个Firefox插件User Agent Switcher用Firefox上的。你把浏览器的UserAgent乱填一些字母,只要不和IE这些浏览一样就行了。
4. 设置浏览器的代理为:10.0.0.172,端口为80

OK,现在就可以拨号,使用浏览器上网了,只是各位要注意一下你们的流量,只有100M啊,打开个新浪首页,3M流量就没有了。反正我是把图片什么全禁掉了,只有需要时再打开。
QQ上网就更简单了,只要把登陆设置中选择HTTP代理,代理和端口也是10.0.0.172、80。

MSN就没有搞定
 
另外还有一个叫HSProxy的东东,也可以,不过就是慢了点,不舒服。

posted @ 2006-02-03 19:42 飞刀 阅读(2044) | 评论 (0)编辑

2005年12月17日

上次被张艺媒给骗了, 这次又给陈凯歌给骗了,炒做的都不是好电影。

也许有人觉得《无极》好看吧,反正我是失望透顶。

全被《英雄》这种烂片带坏了,只有特效,没有内容。

而且《无极》的内容好像被减了,根本前后就对不上号,突然就结束了,俗得不能再俗的结局。

估计每场都会有笑场的,对白有些搞笑

不想评论了。推荐大家看《杀破狼》吧。

posted @ 2005-12-17 23:46 飞刀 阅读(494) | 评论 (3)编辑

2005年10月25日

刚参加微软的新产品发布会

北京的MM通知俺是8:30开始,可是俺一看时间表9:00才开始,何苦浪费半个小时了。

8:30从南山出发,堵堵堵,堵死了,又没有地铁直达,坐着223好不容易混到了岗夏,but不知道景轩饭店在哪里。打电话问了一下哥们,才知道在地铁站旁边,晕,早知道就直接在世界之窗换地铁了。

9:20才进入会场,早饭都没有吃,饿死了。人真多啊,没有地儿坐,俺就只好站在最后一排。
猛然发现俺前部门的几个兄弟也在,他们都是java核心开发人员,我就在想,这个会,有几个人是正儿八经的.net程序员来的啊。俺也只算半个,还只能说几年前。后面会议开着开着,举手什么的,正实了我的想法,这个会估计没有几个搞.net的人来,否则举手的人不会这么少。
连俺都是为了想看看微软有什么新东东而来的, 个人原因嘛,是为了运气好,希望抽奖中个IE4.0什么的,打CS爽,虽然我从来没有抽中过(今天最后的结果,也证明俺没有刷新俺的历史)。

谈正题,俺其实是对Team System有比较大的兴趣。这个后面再说。

上午是开心在上面谈Vs.net2005的典型开发,他在演试web开发时,俺就在想,这下完了,搞得这么简单,叫.net程序员怎么混啊。突然间,俺也明白了一个道理,也许是原因吧,

为什么。Net在大型企业市场表现不佳?
微软的东东变化的太快,太大,虽然说微软向下兼容,但是使用者总不可能永远用低版本吧,升级成本太大,做项目还好,但是如果是做产品,跟着微软太痛苦,改动实在是太大了,搞得我们不升也不好,升也不行,也许有这方面经历的才有这种感觉。

(补上的:主要是.net里面只有根着微软跑,微软指到哪,我们就得跟到哪,包括框架、IDE以及其它的标准什么的,一换全得换。

而java里面派系林立,至少有三大巨头,IBM、SUN、BEA,哪个头风向变了,我们不跟他就是了,而且SUN 最近几年也就有本事变变语法什么的,其它标准什么的他是没有能力变哦,变了大家也可以不理他。)

混到中午,  微软竟然不提供中餐?晕,俺第一次碰到这种情况啊。以前参加BEA、Intel的会议都提供的,我还没有吃早饭呢。。被温少说中了,难怪他死活不肯来的。

还好,景轩旁边吃饭的地方还不少,吃KFC对付了。

中午有个很不爽的小插曲,我先吃完饭,上去后,坐在一个没有人的座位,后面下午开始演讲了,过来三个人,非要让我让位,我晕,明明他们只用袋子占了两个座位,我坐旁边,为什么让我让位?而且口气超级难听“你出来”,我靠,加个“请”字不行吗?而且明明你们只是用一个袋子占两个座位,你们来了三个人,又来得那么迟,就非得叫我让?这年头这种逻辑也有?八国联军也就这逻辑吧。
我当时是火冒三丈。这年头,我真的不知道人是怎么变的。

下午,则是我想听的Team System。不过总得感觉,不是我希望的,因为我感觉Team System无非是把现在存在的一些工具进行一个大整合,并没有令人兴奋的创新,如果说连日构建这种普通的集成方式都没有想到有人在用的话,起点也太低了点,而这一切在一个java团队中是标准的开发模式了,相信中国用的也不少。
当然把这一切整合进IDE,确实是很方便,但是并没有打动我。比较失望的说,当然还没有亲自用过。

今天我印象最深的是Intel和AMD之争,也许是很长时间没有关注硬件的东东了吧。
上午,是Intel的一个帅哥工程师,讲得不错。
最感兴趣的是,Intel竟然要推出三级缓存的双核CPU(什么型号忘记了),三级cache总共达到了36M,我的天这么大啊,平均每级都有12M,我靠,这种服务器不是爽歪歪?

下午AMD的,火药味浓些,连把印着"confidential"的标签的PPT都搬出来了,演讲者直指Intel,对着Intel的弱点狂打,我倒认为这份PPT做为内部文档或合作伙伴文档比较合适,在公开的场合不太合适,毕竟是印着"confidential”的啊。

总结一下,俺今天下的最大的决心,就是要买个64位的CPU玩玩,肯定是 AMD的,因为他便宜:)



posted @ 2005-10-25 18:27 飞刀 阅读(1855) | 评论 (40)编辑

2005年10月18日

已经向CSDN提出辞职,不再担任了.Net大版主的职位了。

有幸成为CSDN的第一任.net大版主,靠的是我当时的名气。
而当时还是学生,也许太多理想话的东东。对论坛投入了极大的热情。

我还是很感谢CSDN论坛的,至少打下了我前期的基础。

但是论坛逐步变成了一个混分数,混MVP,混名气的工具。
水平高的人不再回头,新手则只有出现问题时才想起了CSDN。
没有讨论,只有提问,久而久之,也就失去了当年的动力。

blog可能更适合问题的讨论和经验的分享。

现在工作这么久了,随着个人经验的增加,工作任务和责任占据了我太多的时间,更加没有太多的时间来关注论坛。

工作领域也从.net转向了java。
昨天我从我的本本上删除了我vs.net2005beta2后,发现我的两台电脑上已经没有一个.Net的工具了。(当然vs.net2005正式版出来后,我还会装上)

前思后想,还是辞去这个头衔比较好。
可以少挨点骂,今后有些话我也可以直说:)

posted @ 2005-10-18 00:15 飞刀 阅读(842) | 评论 (6)编辑

2005年7月15日

最近仔细研究了一下Java的NIO以及线程并发,搞清了点思路,特作笔记如下(NIO篇)

        因为前段时间的项目需要写一些高性能服务器,结果写出来的结果是五花八门,我们要求使用NIO编写异步服务器,但是竟然有人把NIO硬生生地写成同步的,还写成了一个单道批处理,线程调度、通信、同步操作,尤如天马行空,看不出一点架构,典型的面条代码,极度晕倒,不得不下定决心,将IO部分与线程调度部分隔离出来。
        为此,狠下心来,仔细研究了一下nio机制和dl的util.concurrent包。

一、NIO的出现
        NIO是JDK1.4里面才出现的东东,他给大家带来的最大好处是异步socket。其它file,pipe暂时就不多谈了。
        在JDK1.4出现之前,如果你需要编写一个Java服务器,为了实现异步操作,你必须为每个连接请求生成一个Java线程,当连接请求很多时,线程的调度,上下文切换,所付出的代价是非常昂贵,而且由于Java是跨平台的,各个平台对线程的支持并不相同,性能也不相同,因此传统的Java服务器编程架构是低效的且代价贵,dl大侠写了个util.concurrent包后,总算是减轻了线程调度给java程序员带来的痛苦,但是相比之与C、C++写出来的服务器,java服务器在性能要求很高的情况下,基本上没有什么竞争力,甚至是入围的权利的都没有。

二、异步socket的实现
       NIO出现后,好像让java的程序员有了杨眉吐气的机会,怎么个吐气法,当时大家是个什么感受,俺是不知道,因为当时俺不搞java,对java的认识有限。
       NIO是一个基于事件的IO架构,最基本的思想就是:有事件我通知你,你再去做你的事情,没事件时你大可以节约大把时间去做其它任何事情。而且NIO的主线程only one,不像传统的模型,需要N个线程去,也减轻了JVM的工作量,使得JVM处理任务时显得更加高效。
       刚开始接触NIO时,被N层的Channel架构、网上铺天盖地的好评给镇住了,想想也应当是个很成熟的产品了,网上资料这么多,抄一抄Jetty、Tomcat以及其它一些牛B的源代码,基本上就能搞定了,此时没有想到大家受同步的影响这么深,也没有想到连最基本的异步概念都没有搞清楚就去写代码,搞出一堆的问题来(这是后话,后面再说)。
       现在研究了NIO以后,发现NIO实际上在Java中做的工作是很简单,就是将事件进行收集和分发,我们结合一个经典的调用例子来说明这个问题,我就不从NIO的基本使用说起了,大家可以查其它的资料,网上一大把。
        当Channel注册至Selector以后,我们的最经典的调用方法,是这样子的。
        

 1while(somecondition)
 2{
 3        int n = selector.select(TIMEOUT);
 4        if(n == 0continue;
 5        for (Iterator iter = selector.selectedKeys().iterator(); iter.hasNext();)
 6        {
 7        if (key.isAcceptable())
 8            doAcceptable(key);
 9        if (key.isConnectable())
10            doConnectable(key);
11        if (key.isValid() && key.isReadable())
12            doReadable(key);
13        if (key.isValid() && key.isWritable())
14            doWritable(key);
15      iter.remove();
16    }

17}
            这只是个小例子啊,什么异常我就懒得抓了。
            nio中取得事件通知,就是在selector的select事件中完成的,在selector事件时有一个线程,这个线程具体的处理简单点说就是:向操作系统询问,selector中注册的Channel&&SelectionKey的偶对各种事件是否有发生,如果有则添加到selector的selectedKeys属性Set中去,并返回本次有多少个感兴趣的事情发生。程序员发现这个值>0,表示有事件发生,马上迭代selectedKeys中的SelectionKey,根据Key中的表示的事件,来做相应的处理。
            实际上,这段说明表明了异步socket的核心,即异步socket不过是将多个socket的调度(或者还有他们的线程调度)全部交给操作系统自己去完成,异步的核心Selector,不过是将这些调度收集、分发而已。因为操作系统的socket、线程调度再咋D也比你JVM中要强,效率也高。
            而且就算jvm做的和操作系统一样好,性能一样高(当然这是不现实的),使用异步socket你至少也节约了一半的系统消耗,想想假定操作系统本身也是使用线程来维护N个socket连接,在传统的java编程中,你还必须为这些socket还多起一个java线程,那至少是2N个线程,现在只需要N+1。在高并发的情况下,你自己去想吧。
        懂了这个道理,异步socket也就好写了,也不会搞得思路混乱了。

三、 异步Socket中应当注意的事情
    3.1 读
          异步socket最基本的理念就是事件通知,前面也说了,有事件通知你了,你才该做你应当做的事情。在异步socket中当注册了一个OP_READ事件后,你就等着Selector通知你吧,如果没有通知你,你在家睡大觉都行。
         在这里,我们有人出现的错误就是受同步的影响,自己去主动读,而且还搞出了多线程,如果仔细考虑一下,就不会出现这个问题了。同步socket中,调用read方法读取IO中的数据时,通常情况下如果没有数据read方法会阻塞,且是同步的,所以当多个线程同时访问时,read方法是线程安全的。
         而在异步下就不同,异步是不会阻塞的,有什么就返回什么,你主动去读,只要有数据,你就可以拿走,在多线程的情况下,也许你是想让第一个线程读取,but此时来数据时正好是线程2读到了,那线程2就高高兴兴的拿去,而线程1还在苦苦等待,这样导致数据混乱不说,如果后面再也不来数据了,线程1就是死循环啦。

        2. 写
        在异步socket中,写是唯一一个主动点的操作,但是也不能直接去写Channel,而是应当先把自身注册为OP_WRITABLE,这时Selector就会发现你的存在,并把给发一个write事件,你这时后就可以写了,不过这时候有个小小的技巧,就是你执行写操作之前,请取消掉你的写注册,否则你的cpu肯定是100%。

        3. 等待
        在传统的服务器编程中,由于对于每个请求都是产生的一个线程,因此你在你每个请求线程中wait也好,sleep也好,不会影响别人。但是异步不同,他的主线程只有一个,基本上每个处理都是线性的,也就是说处理完第一个,然后才能处理第二个,因此nio是一个极好的处理短连接的架构。
        我们现在出现的问题是,有人受同步的影响,没有搞清异步是如何处理,竟然在方法处理中用上sleep,而且一等还是3秒,这意味着什么,3秒才能处理一个请求,My god,我要一个3秒才能处理一个请求的服务器干嘛啊,还是60年代啊:(
        如果出现这样的需要等待的情况,应当另起一个线程(推荐使用线程池)去完成这个“长”时间的任务,或者将其它交给一个消息队列,通过发消息的方式将给别人去完成也行,客户端能等,你服务器怎么也能等呢?写出这样的代码,基本上一个服务器也就废了。

        这blog我发在个人的心情随笔中,发点牢骚,实在是觉得对于有些人的思路觉得有些不可思议,不吐不快。

posted @ 2005-07-15 23:54 飞刀 阅读(5141) | 评论 (12)编辑

2005年5月29日

哈哈,.Net开源领域的发展比我想像的快啊。

一直有这种不愿意的情绪,甚至不愿意动手写.Net的大点的Project。
因为我觉得.Net下的开源工具太少了,不像Java中一搜一大把,要用什么不用担心找不到。
当初写测试案例,Nunit的功能太简单就害死了我,LoadTest, TimeTest一个都没有,没有这些写起程序来,一点都不习惯(当然最近vs.net2005中微软自己的测试框架已经支持了这些。)

不过这个观点要改变了,虽然Dotnet的开源工具少是少,但是现在发现模仿Java中的精品的项目还是不少!!
不得不PF国外.net领域兄弟的模仿能力,以及造福人类的精神啊。
NAnt, Nunit, NClover这些就不说了。。

我今天意外发现连EasyMock和jMock这两个我常用的mock framework,在dotNet下都有了“N”系列,而且nMock发展的还不错!!

看来我是后知后觉啊。。

唉。。。看来我辛辛苦苦在.Net写的那些mock对象,要失效咯。
不过,这两个框架还没有开始用,不知道效果如何。
有用过jMock或EasyMock的兄弟,可以对比一下。

ps:给大家这些链接
nMock : http://www.nmock.org
EasyMock .Net: http://www.easymock.net/ or http://sourceforge.net/projects/easymocknet/

posted @ 2005-05-29 23:40 飞刀 阅读(1303) | 评论 (0)编辑

2005年4月23日

Vs2005 B2中带的测试框架不错,至少在DotNet领域是最好的了。

以前只能使用NUnit,但是今天试用了一下Vs2005 beta2中的测试框架,确实不错,蛮符合俺的习惯的。

以前用Nunit的时,不能调试,后面找到一个插件TestDriver,可以调试NUnit了,但是还是不符合俺的习惯,因为俺用Eclipse时,JUnit是集成,在IDE中有专用View来管理JUnit测试案例,而不像NUnit非得放在外面的GUI才行,现在的VS.net可以调试了,而且也独立的测试View2个。

现在微软集成了自己的测试框架,而且语法与NUnit,Junit都差不多,同时还拥有了类似于JUnitPref的测试框架,我开始还准备自己写个基于NUnit的并发测试框架的呢,现在不用了:))呵呵。。。

beta2中带的这个LoadTest这些东东,虽然还没有正式用,但是看了一下帮助,和JUnitPref的用途、使用方法是差不多的。
使用VS.net, 哈哈终于有点幸福的感觉了。。。

不过还是有2点不爽的,
1. 就是测试案例必须放在单独的测试工程中才行,而不能与测试的工程放在一起,这个比较不爽。要是按照我个人的习惯,必须得为每个工程都建立独立的测试工程,这样排放会显得很杂乱。
2. 创建单元测试时,必须选择测试类后,才能创建,这和TDD的思想是冲突,被列为经典错误思想之一,虽然Eclipse差不多也是这么干的,但是别人至少你不选择类也可以照样玩吧,VS.net就不行,不选类,那个“OK”就是Disabled的:(
当然也可能是暂时还不会用。。。

我现在在范愁,要不要把我以前的那些Nunit的TestCase全部又重写一次??虽然工作量不大,但是还是不爽的。。
而且我以后打算使用微软以外的IDE(比较看好JetBrains正在编写的C# IDE),不知道他们会不会对微软的这套框架有足够的支持?

呵呵。不晓得,挺麻烦的。。

posted @ 2005-04-23 00:27 飞刀 阅读(2425) | 评论 (6)编辑

2005年3月23日

最近一个专家的退出,.net内部是闹翻了天。

一个.net专家的退出,把整个.net内部阵营已经闹翻了天。

今天又看到熊节对此事的看法,认为.Net光靠几个天才来把握其方向,不能出现一点差错,这是很危险的。

俺也比较认同这个想法。

想起前些天在CSDN上,一个兄弟的留言:
Java复杂,是因为其民主,太多派别,乱哄哄,不知道听谁的。
.Net复杂,是因为其专制,只有听微软,而且不知道其里面做了些什么。

几年前,我没有用过Java,一心铺在.Net上,自觉不自觉对微软有很强的依赖感,只会认为微软出的才是对的,我才敢用,其它个人团体的东东,那都是不成熟的。

后来,被逼离开.net,加入Java,突然发现这个世界其实非常繁荣,各种新思想层出不穷,大家的思想很活跃,没有业界的老大,这些思想很多来自于个人或团体,他们的东东只要是好,那个不管是IBM还是Sun都得听他的,感觉这个世界生机勃勃,个人提升也很大,最主要的是思想上的提高。
对事的看法也发生了改变,看到现在有些人一谈到Java与.net,就谈到语言的细节问题,就觉得好笑,也不愿意去争论了,因为那种争论没有意义,已经偏离了真正的争论核心。

不过最近,.Net阵营也开始这种开源自由运动,越来越多的开源软件冒出来,.Net的开发人员也开始愿意使用微软以外的东东,这是一件好事。

我很喜欢这种运动,虽然我不太可能再全心全意地再投入.net阵营了,但是我还是希望我的业余时间能为.net的开源事业尽一份力。
最近在写一个东东,如果可用了,我就将其开源。

posted @ 2005-03-23 21:50 飞刀 阅读(1734) | 评论 (4)编辑

2005年3月18日

最近心情很郁闷,好多事情都堆在一起,很烦

工作,学习,生活,以及其它杂事,偏偏在这个时间一起来了,心里很不是滋味,唉,不知道为什么这些事情全来了,只有一项我都要烦死,四项一起来,好烦人!

没有心情干任何事情,就是一个烦字在心头。

事情太杂了,我不知道抓哪头好。

posted @ 2005-03-18 23:17 飞刀 阅读(1014) | 评论 (8)编辑