jinmo's profile橙色接触PhotosBlogLists Tools Help

橙色接触

I wish, that I could turn back the time. 'cause now the guilt is all mine, can't live without the trust from those you love.

jinmo qian

Occupation
Photo 1 of 108
No list items have been added yet.
There are no music lists on this space.
June 22

看房子

要搬家了,到处去看房子。周一在莘庄看了一套,九几年的老房子了,连个阳台都没有。厅很少。想找更新一点的房子,就先放下,一直没回复中介。中介还一直催我,你快点决定。这房子很好,很容易租,最多等2天。
 
然后趁周六又去看了三套,才发现第一套真的很好。这三套看下来简直是惨不忍睹。8几年的房子,地板都黑了。厕所浴室加起来不怀疑不到4平米,水泥的浴盆,边跟马桶一边高。墙上的马赛克都掉了,又阴又暗。还没有厅,没有厨房。一进门就是做饭的地方,排风扇的管子直接连到楼道里。有一套在顶楼,我看他们直接在楼道里放要木棍凉衣服。
 
这房子也实在是太挫了。住这种地方真委曲。我奶奶家也是8几年的房子,但是,至少浴盆不是水泥的。
 
最后让我感慨的是金沙江路那边的。两间屋子,一推门,每个屋子里面放了三个双层铁架床。有人光着膀子在看电视,有人拿个笔记本上网。一瞬间,仿佛回到了大学时代……
May 06

五一在苏州

由于MSN的相册实在是太屎了,照片都放在picasa上了。

流水账记录一下。首先,去了朱鸿兴面馆。去这家是因为看了陆文夫的小说《美食家》。里面的主角叫朱自治,一大清早一睁眼就要去朱鸿兴吃头汤面。里面还说一碗面有各种吃法,宽面烂面,重青免青。我晚上去的,头汤面是肯定没了,什么吃法服务员也没问。忙都忙不过来。点了一碗,跟上海的纳米材料面好象没啥区别么。

 

第二天先去了寒山寺。这个有名就是因为小学语文“姑苏城外寒山寺”这么一句。里面很多地方都把那首诗翻来覆去地写着,后面还把它刻在一个超大的诗碑上,就怕你不知道。而且很多地方的名字都叫什么“清净”,“无上清凉”,寒山寺真是好寒。里面香火很旺。

 

寺里有一副对联:“意定天无云,心清水月现”。我觉得应该是“自现”才对仗起来。不过我照片看了好几遍都是“月现”。

看到很有意思的一块匾。上面写着“拈花微笑”。佛教的典故。最后还看到了估计是能夜半钟声到客船的巨大的钟。

 

最后发现它的出口放在解脱门。有深意。

然后逛了一下园林。苏州人民很幸福啊,自己家的东西就写在义务教育课本上,全国人民都得学习。留园纪念。他们拍照,我拍他们。

评弹

坐在二楼吃吃东西,看着外面下下雨,听听评弹,感觉是不错啊。有点苏州的意思了。

里面有两件很意思的事。一件是在一个专卖开过光的佛像的地方,看到一个佛像前面,竟然放着一个《面包一家亲》里类似的小面包。售货小姐说这是客人供奉给佛祖的。不知道佛祖看见这个能看不能吃的面包,脸上会不会出来一个囧字。想拍照被售货小姐制止了。还有一件事情是,碰上了免费的解签,就是试着算了一卦。算卦的说:“你做事不够果断,这是男人的大忌”。就这一句,彻底把我霹雳到了!因为前一天刚刚有人跟我说过这个问题,今天就又被这个第一次见面的道士点出来了。有那么一瞬间,我还真有点信他了。难道他真能算出来?但是后面停下来一想,他可能只是见的人多了,看人比较准。也许,他才是微表情的专家?

最后去逛了逛号称小周庄的地方。这才有江南水乡的感觉。只是没想到这个地方竟然在苏州市中心不远。

加工银器的人。

民俗味道很强的店

 

臭豆腐。一进店就后悔了,里面实在是太臭了。臭豆腐西施的无影手。不过这家的臭豆腐太咸了。辣酱也不是光咸不辣。

 

最后看做糖画的。

最后说一下苏州感觉最深的一点,就是出租车。苏州的出租车太牛了。完全是卖方市场啊。且不说打车难,而且司机本身也够拽。有个司机跟我们说,苏州人很懒惰。从来不坐公共汽车,出门就打车。人还没出来,手先伸出来了。像观前街这种地方,打不到车的。得走远点才行。坐了两天之后发现原因了。因为车费太便宜了。打了两天车一般都是10块,只有最后一次打车去汽车站,开了老半天了,20块。这么长的行车时间放上海感觉都至少得40了。

May 02

Windows Live,你还能更屎一点么?

我刚才上传了几百张照片,然后IE死掉了。重新进去,“此相册为空。现在就来添加一些照片吧!”

 

Windows Live,你还能更屎一点么?

May 01

小草生长中

PICT2283

长了一堆小叶子出来

April 14

植物

办公室变挤了。买盆小小的草放在桌上,多吸收点二氧化碳吧。

20090411

April 08

做梦听见猫叫

昨天晚上睡着了做梦。听到了猫叫的声音。感觉是在窗户外面。
 
然后我一拉开窗帘,外面有一点橙黑相间的小猫,正在贴着我的落地窗外面打滚,一边喵喵叫。好想是想管我要吃的。
 
我看了一眼外面,发现外面是平地。远处好像还有小房子,感觉像是我家。我突然意识到,我家是3楼啊,现在住的是2楼,怎么跑到1楼去了?
 
随手把窗帘拉上,一扭头,看见床角趴着一只淡黄色的小黄猫。
 
我在正高兴呢,觉得小猫怎么都进屋了?然后正要过去碰碰它,它突然一个漂移,是漂移,一道白影,移到地上,消失了。
 
见鬼了!浑身发冷……
 
是不是被吓起来了,我忘了……
 
今天早上想到,梦里是不应该听到声音的呀。那那两声喵喵的,是从哪来的呢?
April 07

Goodnight moon

杀死比尔2 的片尾曲。可惜奥运一开完,youtube就又上不去了。这就是qin/gang说的我们充分开放的互联网。

 

1后面的The Lonely Shepherd也很好听。

 

March 30

SCIM的hotkey解决了

昨天说的SCIM的Hotkey问题解决了。

我是想把五笔设成Ctrl+Shift+2,结果怎么弄都不行。火大。

刚才在term下,发现我按了Ctrl+Shift+2之后,出来的是@。我突然想到,是不是得用Ctrl+@来表示Ctrl+Shift+2?

试了一个Ctrl+@,还是不能用。cena。只能再试试Ctrl+Shift+@,oh,yeah,这下问题解决了。

这个问题是有点脑筋急转弯的意思了。这算是,SCIM的bug么?

手工解决vmware的时间同步问题

As you know,Windows做Host在vmware里装Linux的话,Linux的时间会比正常的时间走得要慢。“据vmware的官方解释,是由于vmware使用Time Stamp Counter (TSC,或译为时间戳计数器)来对guest记时,而由于linux kernel可以通过APM功能让处理器进入低功耗状态,这种状态对于某些处理器(如p III, centrino等)来说,会导致TSC变慢。”。怎么看都像是个vmware的bug。
 
网上找到的解决方案主要有两种(这里):1. 禁用APM,安装vmware-tool让它自动更新时间。2. 用ntpdate去更新时间。但是这两种方法都有问题。方案1,装了vmware-tool后可以更新时间,但是它是3分钟同步一次。对于一个跑3秒慢1秒的系统来讲,3分钟一次完全不够。对于方案2,经常会更新失败。总之,这两种方法我是从来都没有成功过。
 
今天实在受不了,决定自己解决。想的方案是在Windows上放个程序,不停地把时间发到Linux上。现在问题解决了。半个多小时,没有出问题。如果说缺点,就是Linux的负载稍微有点高。因为Linux端的程序是用Perl写的,设定时间的时候又直接用了date命令。在多的时候,大约会占用1.0%的CPU。看哪天抽空用C重写一个吧。
----------------------------------------------------Windows端----------------------------------------------------
using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading;
using System.Net;
using System.Net.Sockets;
namespace StdClockService
{
    class
StdClockService
    {
        const int MAX_SERVEE = 1024;
        ParameterizedThreadStart _ServiceListener, _SendTimeThreadStart;
        Thread _ServeThread, _SendTimeThread;
        Socket ListenSocket;
        Socket[] ServeeSocket = new Socket[MAX_SERVEE];
        int[] UseableServeeSocketIndex = new int[MAX_SERVEE];
        int NextUseableServeeSocketIndex;
        bool ThreadContinue = true;
        Mutex ServeeSocketMutex = new Mutex();
        public void Run()
        {
            InitServee();
            _ServiceListener = Serve;
            _ServeThread = new Thread( _ServiceListener );
            _ServeThread.Start();
            _SendTimeThreadStart = SendTime;
            _SendTimeThread = new Thread(_SendTimeThreadStart);
            _SendTimeThread.Start();
        }

        void InitServee()
        {
            NextUseableServeeSocketIndex = 0;
            for (int i = 0; i < UseableServeeSocketIndex.Length - 1; i++)
            {
                UseableServeeSocketIndex[i] = NextUseableServeeSocketIndex + i + 1;
            }
            UseableServeeSocketIndex[UseableServeeSocketIndex.Length - 1] = -1;
            for (int i = 0; i < ServeeSocket.Length; i++)
            {
                ServeeSocket[i] = null;
            }
        }

        int AllocServeeSocket()
        {
            ServeeSocketMutex.WaitOne();
            int re = NextUseableServeeSocketIndex;
            if (NextUseableServeeSocketIndex != -1)
            {
                NextUseableServeeSocketIndex = UseableServeeSocketIndex[NextUseableServeeSocketIndex];
            }
            else
            {
                throw new Exception("no usable socket left");
            }
            ServeeSocketMutex.ReleaseMutex();
            return re;
        }

        void FreeServeeSocket(int SocketIndex)
        {
            ServeeSocketMutex.WaitOne();
            UseableServeeSocketIndex[SocketIndex] = NextUseableServeeSocketIndex;
            NextUseableServeeSocketIndex = SocketIndex;
            ServeeSocket[ SocketIndex ] = null;
            ServeeSocketMutex.ReleaseMutex();
        }
        public void Stop()
        {
            ThreadContinue = false;
            _ServeThread.Abort();
            _SendTimeThread.Abort();
        }

        void SendTime(Object obj)
        {
            while (ThreadContinue )
            {
                Thread.Sleep(500);
                for (int i = 0; i < ServeeSocket.Length; i++)
                {
                    if (ServeeSocket[i] != null)
                    {
                        try
                        {
                            String DateTimeStr = DateTime.Now.ToString("yyyyMMddHHmmss");
                            byte[] Buffer = System.Text.Encoding.ASCII.GetBytes(DateTimeStr);
                            ServeeSocket[i].Send(Buffer);
                        }catch( SocketException ){
                            FreeServeeSocket(i);
                        }
                    }
                }
            }
        }
        void Serve(Object obj)
        {
            ListenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ListenPoint = new IPEndPoint(IPAddress.Any, 19811);
            ListenSocket.Bind(ListenPoint);
            while (ThreadContinue)
            {
                try
                {
                    ListenSocket.Listen(1);
                    Socket NewSocket = ListenSocket.Accept();
                    int ServeeSocketIndex = AllocServeeSocket();
                    ServeeSocket[ServeeSocketIndex] = NewSocket;
                }
                catch (SocketException e)
                {
                }
            }
        }
    }
}

----------------------------------------------------Linux端----------------------------------------------------
#!/usr/bin/perl
use strict;
use warnings;
use Socket;
my $lock_fh = undef;
sub lock{
        my $lock_file = '/var/lock/' . $0 . '.lock';
        open $lock_fh, '>', $lock_file;
        my $re = flock( $lock_fh, 2 | 4 );
        return $re;
}
sub connect_to_server{
        my( $ip, $port ) = @_;
        my $proto = getprotobyname( 'tcp' );
        my $addr = inet_aton( $ip );
        my $sock_addr = sockaddr_in( $port, $addr );
        socket my $s, PF_INET, SOCK_STREAM, $proto;
        my $con_ok = connect( $s, $sock_addr ) or die $!;
        return $s;
}
sub sync_time{
        my ( $sock ) = @_;
        my $buf = undef;
        while( 1 ){
                my $re = read( $sock, $buf, 14 );
                return unless( $re );
                my @d = split //, $buf;
                my $cmd = sprintf( 'date %d%d%d%d%d%d%d%d%d%d%d%d.%d%d > /dev/null', @d[ 4 ... 11, 0 ... 3, 12, 13 ]);
                system( $cmd );
        }
}
sub main{
        my( @param ) = @ARGV;
        if( 2 != scalar @param or $param[ 1 ] !~ /^\d+$/ ){
                print "Usage : $0 SERVERIP PORT\n";
                return;
        }
        my $re = &lock();
        return unless( $re );
        my $sock = &connect_to_server( @param );
        &sync_time( $sock );
}
&main();

Ubuntu

今天一直在玩这个东西。起因是因为,vista太令人火大了。我要拷一个100G的文件到移动硬盘上,在大约拷到一半的时候,机器就死掉了。重复若干次都是这样。原因不明。可以用Alt+Tab切换窗口。但不是管换到哪个窗口全都不能动。白白一片。只能重启机器了。

Ubuntu这个东西很有意思。自带了SCIM,但是没有码表;带了播放器,却没有解码器。真囧啊。这就好像是买了汽车却不带轮子一样。而且还发现其它一堆问题。比如flash里的中文全是方框,SCIM里的hot key设置了后却没用,怎么都不能自由切换输入法。这些回头再研究。

March 29

三件衣服

“三件衣服”拿英文该怎么说?

 

three clothes?不对。关于这个问题我们追着一个老外问了半天,我们甚至给他举了个例子:我问张三买了多少衣服,他说买了三件。最后他给逼急了:“不能问你买了多少衣服,只能问你买了什么衣服。我也只能说我买了什么什么什么”。- -

 

想起一个。有个岛上的土著没有“树”的概念,但却有什么树什么树的概念。所以他们不会说“那有很多树”,只能说“那有很多什么树,什么树,什么树”。把那的树挨个枚举一遍。然后有个结论。语言越高级,越有抽象的概念。上面英文的那个例子,虽然不能是抽象,但确实是没有这种简单的表达方式的。

 

我原来以为只有笑话、诗、对联是不能翻译成英文的。现在又多了一个:三件衣服。

March 14

兔子~,兔子~

DSC_1441

还有点怕人,像团球一样缩在角落里,嘴一嚼一嚼地吃麦片。摸它它也不跑。这么小估计是幼兔,一只手就能抓起来。一走起来,身子就变得挺长了。鼻子总是在嗅啊嗅的。另外发现这兔子竟然有指甲,汗啊- -。

March 04

关于showgood

曾经风靡互联网的showgood