新鲜、有趣,互联生活。令狐葱。

2007/01/30

Blogger中加上“最新回复”

今天发现一个比较牛的blogger,他写了好多关于google blogger使用的hack,有很多还比较实用,比如我就立马加上了"最新回复",呵呵,效果见右边侧,代码请参考本站源代码或者上面的网址。

当然,这个网站上面还提供了好多其他的技巧:〉

原来国家的名字也可以这样浪漫(Z)

> > > > h.o.l.l.a.n.d.荷兰
> > >
> > > > hope our love lasts and never dies.
> > >
> > > > 希望我们的爱永恒不变
> > >
> > > > i.t.a.l.y. 意大利
> > >
> > > > trust and love you.
> > >
> > > > 我相信你和爱你
> > >
> > > > l.i.b.y.a. 利比亚
> > >
> > > > love is beautiful; you also.
> > >
> > > > 爱是美丽的 你也是
> > >
> > > > f.r.a.n.c.e. 法兰西
> > >
> > > > friendships remain and never can end.
> > >
> > > > 友谊永固
> > >
> > > > c.h.i.n.a. 中 国
> > >
> > > > come here. i need affection.
> > >
> > > > 来这 我需要爱
> > >
> > > > b.u.r.m.a . 缅甸
> > >
> > > > between us, remember me always.
> > >
> > > > 我们之间,常常记得我
> > >
> > > > n.e.p.a.l. 尼泊尔
> > >
> > > > never ever part as lovers.
> > >
> > > > 像情人一样永不分开
> > >
> > > > i.n.d.i.a. 印度
> > >
> > > > i nearly died in adoration.
> > >
> > > > 我差点在狂爱中死去
> > >
> > > > k.e.n.y.a 肯尼亚
> > >
> > > > keep everything nice, yet arousing.
> > >
> > > > 全部东西保养好来 保持趣味
> > >
> > > > C,a,n,a,d,a 加拿大
> > >
> > > > cute and naughty action that developed into attraction
> > >
> > > > 可爱和顽皮的动作建造成吸引力
> > >
> > > > k.o.r.e.a. 南韩
> > >
> > > > keep optimistic regardless of every adversity.
> > >
> > > > 虽然事与愿违 保持乐观
> > >
> > > > e.g.y.p.t. 埃及
> > >
> > > > everything's great, you pretty thing!!
> > >
> > > > 十全十美,你这漂亮的东西
> > >
> > > > m.a.n.i.l.a. 马尼拉
> > >
> > > > may all nights inspire love always.
> > >
> > > > 漫漫长夜时时刻刻感到爱
> > >
> > > > p.e.r.u. 秘鲁
> > >
> > > > phorget (forget) everyone...remember us.
> > >
> > > > 忘记全部人 记得我们
> > >
> > > > t.h.a.i.l.a.n.d. 泰国
> > >
> > > > totally happy. always in love and never dull.
> > >
> > > > 完全快乐时时刻刻蜜运中

经典面试(Z)

某销售公司要招两名助理,我很自信地抱着一堆资料去了。
公司门前已经等了很多人,每一个都意气风发。看着他们,我觉得自己条件丝毫不差,完全没理由自卑。这么想着,我气宇轩昂地排在了队伍的后面。
前面的人开始慢慢移动,轮到谁谁就把手里的入场券递给保安。保安收过撕开,人就可以进去了,像火车站进站剪票时的情景。看来这家公司招聘很严格呀!等了半个多小时,终于轮着我了,我打起精神进去。
走过一条走廊,突然出现了左右两条走廊,我正不知道该走哪条路时,看见上面有一个小小的标示: * 名牌大学本科及以上人员请走左边,其他的走右边。 * 我很高兴地向左边走去。拐过一个弯,又出现了这样的标示: * 身高一米七以上者走左边,以下者走右边。 * 我想,这公司真有趣,做法也聪明,自然而然就淘汰了一大批人。
我继续向左走去。没走几步,又有一个标示: * 外语六级以上人员请走左边,其他走右边。 * 我接着向左边走。接着标示接连出现: * 精通电脑者,请走左边,其他走右边 * ; * 表达能力强者走左边,其他走右边 * ; * 社交能力强者请走左边,其他走右边 * ; * 形象气质佳者走左边,其他走右边 * ; * 本市户口者请走左边,其他走右边 * 。我庆幸自己各方面条件都不错,一直是向左走的。
*会做假账者向右边,其他向左边。 * 我觉得这很重要,也为公司的正直诚信高兴。
我大踏步向左迈去。还没弄清楚是怎么回事,我就发现自己已经站在了繁华的大街上。

人民币上的风景

在看《三峡好人》的时候,有一个镜头印象比较深刻:韩三明拿着10元的人民币对着眼前的景物看,居然一模一样,这就是人民币上的长江三峡――夔门:>
 
 
 
人民币上的风景虽然是画出来的,但是在现实中还都能找到画家所在的视角,如果想看更多,请看这里。

火车里的靠窗座

国内的火车主要有两种型号,一种是YZ22,另一种是YZ23,这些型号的名称应该在车身上很显眼的位置可以看到。一般来说,对于YZ22型火车,靠窗座位号为:4、5、9、0,YZ23型火车的靠窗座位号位2、3、7、8。

可惜的偶的票居然是31号,郁闷哪,看来没有靠窗的可能性了:<

更多信息可以参考这里,不过说的比较罗嗦:>

2007/01/29

JS特效――编辑任意网页

以前见过一个可以让图片在网站上飞舞的JS,这次在煎蛋上又看到一个比较好玩的:
 
javascript:document.body.contentEditable='true'; document.designMode='on'; void 0
 
这个的效果就是当你打开一个网页并且输入以上js,回车,然后就可以对网页进行编辑了:〉不过你的编辑也只是你自己可以看到罢了,用煎蛋的话说,YY而已。
 
下面这条就是著名的图片飞舞JS了。打开一个图片比较多的网页,然后在地址栏copy以下代码,回车,即可看到效果。
 
javascript:R=0; x1=.1; y1=.05; x2=.25; y2=.24; x3=1.6; y3=.24; x4=300; y4=200; x5=300; y5=200; DI=document.images; DIL=DI.length; function A(){for(i=0; i-DIL; i++){DIS=DI[ i ].style; DIS.position='absolute'; DIS.left=Math.sin(R*x1+i*x2+x3)*x4+x5; DIS.top=Math.cos(R*y1+i*y2+y3)*y4+y5}R++}setInterval('A()',5); void(0);

2007/01/24

电影:秋天路――爱的痕迹

一个人无聊于是在宿舍看《秋天路》,感觉就是一韩国版的《恋之风景》。不过拍得很不错,比国内的那些所谓的大片看起来享受多了:〉
影片里几个长镜头处理的很不错,比如女主角把落叶放入小溪,然后男主角从另一各地方接到。这也是影片拍摄手法的一个显著特点,那就是时空交错。虽然时间上感觉杂乱无章,但是却让观众看得很明白。我想着应该就是电影节的"以用户为中心的设计"了吧:〉记得《疯狂的石头》导演宁浩曾经说过:不要低估观众的智商。很经典的一句话。

还有一个长镜头,就是男主角站在崖边然后镜头逐渐进入到一张照片中。至少可以肯定的是图像处理做得很成功:〉(真是三句话离不了本行)

最后推荐一下林嘉欣的歌曲《恋之风景》,也是同名电影的主题曲。

好不容易走你走过的楼梯
玩你玩过的游戏
做你没做完的事
这条路我也觉得好熟悉
所以我有理由怀疑
你住过这里

如果思念能随时间累积
创造另一个天地
风景一定好美丽

我的回忆在哪里
让你代我去忘记
直到我忘了爱上过你
我才拿出来温习
你的回忆在哪里
让我为你好好收集
那已经成为我唯一活下去的动力

有点可惜回到了你的过去
找不到我的影子
闻不到你的呼吸
这些人有些暧昧的痕迹
和你有过甚么关系
你认不认识
如果思念能随时间累积
创造另一个天地
风景一定好美丽

我的回忆在哪里
让你代我去忘记
直到我忘了爱上过你
我才拿出来温习
你的回忆在哪里
让我为你好好收集
那已经成为我唯一活下去的动力

恋爱的风景过去比现在还要拥挤
我在这里你在哪里没关系

我的回忆在哪里
让你代我去忘记
直到我忘了爱上过你
我才拿出来温习
你的回忆在哪里
让我为你好好收集
那已经成为我唯一活下去的动力

2007/01/23

鸡生蛋还是蛋生鸡

今天在看rails 的时候看到,原来在ruby 中把数据库连接配置信息保存在一个叫做 database.yml 的文本文件中,注意这个扩展名yml的意思:yml 即YAML,全称YAML Ain't a Markup Language,这种定义就是所谓的递规定义,有点意思。
 
相似的例子有GNU,也是这般定义的,请看:
 GNU 工程 开始於一九八四年,旨在发展一个类似 Unix ,且为 自由软件 的完整操作系统: GNU 系统。(GNU 是由"GNU's Not Unix"所递回定义出的首字母缩写语;它的发音为"guh-NEW")。各种使用 Linux 作为内核的 GNU 操作系统正被广泛地使用著;虽然这些系统通常被称作为"Linux",但是它们应该更精确地被称为 GNU/Linux 系统。
 
当然还可以举出一些其他的例子,我就在网上见到一个中英文的递规定义,至于做什么的,不妨自己去google:>
"一、百、万"不是"一百万"(MNM's   Not   Millions)  
 
说到这里,又让我想起软件设计上的递归应用,也就是说拿自己生产自己,有点闹不清"鸡生蛋还是蛋生鸡"的味道,比如说ruby 的IDE 使用ruby 开发出来的,phython的编译环境使用phython 写的,还有就是SharpDevelop,一个C#的开源IDE,使用SharpDevelop 写出来的:〉
 
看样子程序员也就只能这样子自己找点乐了,或者还可以去在程序里藏个彩蛋什么的:>

 

2007/01/22

读书:Don't Make Me Think

《Don't Make Me Think》的作者Steve Krug 在书中推荐了几个不错的关于可用性设计的网站:
 
 
书很小,可是很精彩,书中提到Krug 三大定律,虽看过之后觉显而易见,但是要真正理解并运用,也实非易事。
 
Krug 可用性第一定律:别让我思考。
Krug 可用性第二定律:点击多少次没有关系,只要每次点击都是无序思考、明确无误的选择。
Krug 可用性第三定律:去掉每个页面上一半的文字,然后把剩下的文字再去掉一半。

2007/01/21

考验作弊 动用电台

今天,两天的研究生考试结束了。看新闻说居然有人私架电台来作弊,感觉真是不可思议。
 
 
再好的技术都是一把双刃剑,用好了有很大效果,如果使用不当,造成的后果也将是灾难性的,这就像黑客和红客一样,可能从技术上来说几乎没有什么差别,但是最终目标却大相径庭。想想前几日在看的《24小时》,其实恐怖分子和反恐人员也是这么回事,恐怖分子也掌握大量的高科技,问题是用在什么方面了,同样一个卫星定位系统,可以用来寻找恐怖分子,也可以用来寻找布置人体炸弹的地方。

来信转贴

有网友combatant 发来信件:
 
抱歉打扰了,事情比较荒唐,不过还是希望你能帮下忙。前两年wallop出来的时候,我在你的blog上为了求邀请留下邮箱,现在邮箱里垃圾邮件成了灾(搜索引擎可见)。但是我现在准备把这个邮箱做为主邮箱,面对大量的垃圾邮件实在不方便,所以希望你能够帮忙清除一下。多谢。另预先祝你春节愉快!
 
于是我不得不登陆donews去处理这些评论,可怜的是那个评论管理页面显示速度慢不说,而且一页只显示几个,也不知道在哪里可以进行设置,费了半天劲才找到这条留言,奋力删之!
 
垃圾邮件泛滥,由此可见一斑:〉
(注:转贴信件未经combatant 同意,如有冒犯请原谅。)

 

2007/01/20

解决金山词霸和卡巴斯基冲突问题

没想到机子上装的软件多了,还会有互相打架的可能性:〉我的金山词霸2007每次启动之后就不能自动取词,而且主界面死掉没有相应,更让人愤怒的是居然从任务管理器里都没办法把金山词霸的金城皆输掉,甚至,注销一下之后那个金山词霸的死窗口还在!!!
 
后来发现,原来是因为金山词霸和卡巴有冲突,其实就是因为卡巴的自动防御:〉
 
解决办法:
注释:据说词霸还有和windows冲突的可能,需要下载一个补丁,没有测试此补丁可不可以解决我的问题。

2007/01/16

未来的互联网成功者

下一个MySpace――Blue Dot(Bluedot.us):

一位投资者曾经这样评价Blue Dot,"从Blue Dot身上,我看到了电子邮件和即时信息工具的影子,它有可能会成为第三代通信工具。"当用户在网页上发现自己感兴趣的内容时,只需点击屏幕上的一个蓝点,就可以将其保存下来,并与好友共享。

下一个YouTube――Loopt(Loopt.com):

有一天,21岁的斯坦福大学学生萨姆・阿尔特曼(Sam Altman)在计算机课结束时希望与好友共进午餐。他说:"当时我想,如果能通过手机看到每个人的位置就太好了。"他随后就开始编写软件,实现了这一功能,并获得了500万美元的风险投资。通过Loopt,手机每15分钟就会向手机基站或卫星发送特定指令,从而确定自己的准确位置。手机所有者可以同好友的手机或计算机共享位置信息, 每月只需交纳2.99美元的费用。

下一个iTunes――Pandora(Pandora.com):

在加州奥克兰的一间办公室里,很多音乐家都头戴耳机,正通过计算机分析歌曲。他们正在对音乐做有史以来最全面的分析,这一项目名为"音乐基因工程"。对于每一首歌曲,他们都会分析数百个细节,包括音调、节奏和歌词等等。通过Pandora网站,用户只需提交自己最喜欢的歌曲或艺人名称,就可以找到最相似的歌曲,并像广播电台一样播放。这项服务完全免费,主要通过广告获得营收。到目前为止,Pandora已经拥有400万名听众。

下一个Google――Powerset(Powerset.com):

巴尔尼・佩尔(Barney Pell)一直希望实现打造自然语言搜索引擎的梦想。他表示,当前的很多搜索产品,如Google或雅虎的搜索引擎,只能搜索关键字,而不能理解"为孩子 写的书"、"孩子写的书"、以及"关于孩子的书"之间的区别。自然语言搜索引擎则可以有效地区分"功能"词汇,从而能提供更加准确、有用的搜索结果。今年 38岁的佩尔认为,即将推出的Powerset搜索引擎将成为语义网络的催化剂。

下一个Craigslist――Yelp(Yelp.com):

Yelp的主要功能是邀请用户就所有事 物,如本地餐馆、商店和医生等等发表评论,并与他人共享。Yelp员工、今年26岁的鲍勃・古德森 (Bob Goodson)表示:"Yelp借助了'口口相传'的力量,并通过互联网将这一力量放大。"最新数据显示,Yelp上月的访问者人数达到了160万。 Yelp计划在美国28个城市开展业务,并可能进军英国市场。 (来源: 搜狐IT)

2007/01/15

广告欣赏+一句话(6)


手机广告,如此诠释功能,形象、得体。







这是什么广告?书店?呵呵 真的很难看出来,广告想告诉我们什么呢?





战地记者,危险的职业。记者,危险的职业。

2007/01/14

可变参数的使用(C++和C#实现)

//C++ 中的可变参数使用
#include <stdio.h>
#include <stdarg.h>

int OpenFileArray(FILE ***array, char *mode, char *filename, ...)
{
    char *pName = NULL;
    int nrFiles = 0;
    int arrayIndex = 0 ;
    if (filename == NULL) {
        return 0;
    }
   
//在参数表中创建一个索引使用的typedef
    va_list listIndex;
   
//在参数表中初始化第一个参数索引的宏
    va_start(listIndex, filename );

    do {
        nrFiles++;
       
//得到参数表中下一参数的宏
        pName = va_arg(listIndex, char *);
    } while (pName != NULL);

    *array = new FILE*[nrFiles + 1];

   
//open files
    pName = filename;
    va_start(listIndex, filename);
    do {
        if (!((*array)[arrayIndex++] = fopen(pName, mode ))) {
            (*array)[arrayIndex - 1] = NULL;
            return 0;
        }
        printf("Had open file : %s\n" , pName);
        pName = va_arg(listIndex, char *);
    } while (pName != NULL);
//有问题

    (*array)[arrayIndex ] = NULL;

    return 1;
}

void main(void )
{
    FILE **array;
    int fp = OpenFileArray(&array, "r", "1.txt", "2.txt", "3.txt" );
   
   
if (fp == 1) {
        printf ("\nopen file successfully!\n");
    }
   
//close the files
    int i = 0;
    while (array[i] != NULL) {
        fclose(array [i++]);
    }
    delete []array;
}
//C#中的可变参数使用
//如果不用params 关键字,则参数调用的时候需要使用 new object[] {arg1, arg2}
class Program
{
    public static int SumWithVariableParams(params int[] args)
    {
        int sum = 0;
        for (int i = 0; i < args.Length; i++)
        {
            sum += args[i];
        }
        return sum;
    }
    static void Main(string [] args)
    {
        System.Console.WriteLine("sum(1, 2, 3, 4, 5) = " + (SumWithVariableParams( 1, 2, 3, 4, 5)).ToString());
        System.Console.WriteLine("sum(33, 22) = " + (SumWithVariableParams(33 , 22)).ToString());
        System.Console.ReadLine();
    }
}

语言特有的类型名及对应的CLR类型名

C#

VB

C++

CLR

sbyte

SByte

char

SByte

byte

Byte

unsigned char

Byte

short

Short

short

Int16

ushort

UInt16

unsigned short

UInt16

int

Integer

int

Int32

uint

UInt32

unsigned int

UInt32

long

Long

__int64

Int64

ulong

UInt64

unsigned __int64

UInt64

float

Single

float

Single

double

Double

double

Double

bool

Boolean

bool

Boolean

char

Char

wchar_r

Char

string

String

String

String

object

Object

Object

Object

2007/01/13

C++高效编程笔记2:struct中的字节对齐

#include <iostream.h>

struct A {
    char a; long b; char c; long d;
};
struct B {
    char a; char c; long b; long d;
};

#pragma pack(push, 1)
struct C {
    char a; long b; char c; long d;
};
#pragma pack(pop)

struct D {
    char *a; char *b;
};
//使用比特域的结构
struct BitField {
    unsigned a1 : 11;  //long 1
    unsigned a2 : 11;
    unsigned b1 : 10;
    unsigned a3 : 11;  //long 2
    unsigned a4 : 11;
    unsigned b2 : 10;
};

void main(void)
{
    cout << "Size of A : " << sizeof(A) << "bytes" << endl;
    cout << "Size of B : " << sizeof(B) << "bytes" << endl;
    cout << "Size of C : " << sizeof(C) << "bytes" << endl;
    cout << "Size of D : " << sizeof(D) << "bytes" << endl;
    cout << "Size of BitField : " << sizeof(BitField) << "bytes" << endl;
}

运行结果:

Size of A : 16bytes
Size of B : 12bytes
Size of C : 10bytes
Size of D : 8bytes
Size of BitField : 8bytes
A、B、C之所以不一样是因为字节对齐的问题。#pragma pack(push, 1)指令可以让编译器暂时调整对齐,设置为1字节。
另外注意,char * 一般占4字节。

2007/01/12

C++高效编程:阅读笔记1

C++高效编程(内存与性能优化)/深入C++系列

在这本书的最后一章提到算法的陷阱的时候举了几个例子,记下两个。

1. 循环计数的覆盖

如果把1加到数值为255的字节上,该字节就会变为0。

unsigned char i;
for (i = 0; i < 256; i++) {
    cout << "test" << (int)i << endl;
}

这就会出现一个死循环了,因为255之后再加一就又为0了。

2. 数组和继承的混用

#include <iostream.h>

class AverageJoe
{
public:
    long id;
};

class JetSet : public AverageJoe
{
public:
    long VIP;
};

void setId(AverageJoe *person, long index, long number) {
    person[index].id = number;
}

void main(void) {
    JetSet vips[40];
    for (int i = 0; i < 40; i++) {
        vips[i].VIP = 1;
    }
    setId(vips, 1, 0);
    if (1 == vips[0].VIP) {
        cout << "VIP!!!" << endl;
    } else {
        cout << "Not Vip." << endl;
    }
    //test
    cout << "Test : \n" << "vips[1].id :" << vips[1].id << endl;
    cout << "vips[0].VIP :" << vips[0].VIP << endl;
}
 

类AverageJoe 的大小为4字节,而JetSet 为8字节,调用函数setId的时候指针按照AverageJoe 的大小操作,每次移动4字节。
修改方案:把setId函数定义为基类的成员函数。

广告欣赏+一句话(5)







画里画外的巧妙结合,让人会心一笑得同时很难不去关注一下这个产品。







运动场、体育用品、饮料,三个东西巧妙的结合在一起
,效果夸张但是立意凸显,妙!

VC中_beginthread 使用错误

在VC++ 6.0 中使用_beginthread 和 _endthread 的时候,出现如下错误:

error C2065: '_beginthread' : undeclared identifier

error C2065: '_endthread' : undeclared identifier

解决方案:

debug状态:settings->C/C++->Project Options中加入/MDd
release状态
:settings->C/C++->Project Options中加入/MD

如果还不行,可以修改以下选项:

project->settings->c/c++->code generation->multithread