絢香——Jewelry day

2008-07-29 by CuTe_CuBe

最新都在听Singing to Sky这张碟,令人着迷的嗓音。

夜话

2008-07-25 by CuTe_CuBe

望着窗外零星的灯火发呆,很累,最近一段时间都很累,累的不是身体,是心。回望显示器上一屏一屏的代码,很难想象这种敷衍性的东西会出自自己的手笔。回望这两年,真的有做过一个高质量的项目么,现在看起来真正令自己满意的几乎没有,或者只存在于文档里面。

感觉自己变得浮躁了,是一种程序员不应该具备的浮躁。“用户没有考察项目质量的能力,只要用起来一样就行了”,长期以来做项目就以交货为目的。现在看来觉得很可笑,这两年的发展几乎与我当初的理想完全是背道而驰。本想可以毫无限制的发挥,但发现限制根本不是来自任何人或者制度,一直束缚自己的其实就是自己。

我想即使事情不是这样的发展,完成手上的CASE之后可能我也会离开。在作为程序员的人生当中,至少应该留下一件使自己满意的作品吧。

现在好想到一个没有通信,没有电脑,没有网络的地方。我想找回自己,找回那个在半夜敲着没有什么生产力的算法题,那个会抱一本书,一本杂志过一个下午的自己。夜半了,我却很清醒,清醒的不是精神,是心。

不定选项的储存方式

2008-07-19 by CuTe_CuBe

Web应用中常常会遇到同一属性的多选项目。例如:快餐店每日会提供不同的菜式选择,但有可能存在某些菜式会在菜单中重复出现。这时我们在添加菜式的时候会让客户选择该菜式在一周间那些日子才可提供选择。这种选项一般不会太多,但很可能会经常作为查询条件。常见手段如下:

一、建立七个标识字段……,这种做法理论上查询速度是最快的,但需要额外多建立N个字段和索引,空间开销不小。

二、Char字段按特定格式储存,形如:,1,2,3,4, ……。这种做法是比较常见的,但查询时候设计字符字段的模糊查询,效率恐怕不高。

如果把模糊搜索的操作换成数学运算效率应该会有所提高。问题是如何把数字作唯一标识,而且在多选的情况下具备唯一可分解性。复习一下小学的功课,这个世界上存在一种数,他们大于1,并且只能被1和自己整除——素数。利用素数的性质,使用整型作储存选择结果的字段,是否会带来性能上的提高,初步做个实验验证一下。实验平台:Fedora 8、mysql 5.22。

例一,表结构和储存格式:

create table test1(
pk int(8) auto_increment primary key,
content varchar(200),
testkey varchar(15),
index(testkey))Engine=MYISAM default charset=utf8

$weekday=array(1,2,3,4,5,6,7)

insert into test1 (content,testkey) values (’此处略一百字’,',$weekday[N],$weekday[M],….’)

例二,表结构和储存格式:

create table test2(
pk int(8) auto_increment primary key,
content varchar(200),
testkey int(6),
index(testkey))Engine=MYISAM default charset=utf8

$weekday=array(2,3,5,7,11,13,17)

insert into test2 (content,testkey) values (’此处再略一百字’,$weekday[N]*$weekday[M]*….)

两表分别灌入十万条数据(选项结果相同),下面用命令行和Web方式执行查询计算程序执行时间(各十次取平均数)。

一、选出周一菜式:

1: select pk,content from test1 where testkey like ‘%,1,%’
78000条查询结果,平均耗时0.13s;Web未测试

2: select pk,content from test2 where MOD(testkey,2)=0
78000条查询结果,平均耗时0.07s;Web未测试

二、选出一,三,五菜式:

1: select pk,content from test1 where testkey like ‘%,1,%’ and testkey like ‘%,3,%’ and testkey like ‘%,5,%’ and limit 0,15
Web页(PHP 5.2)平均执行时间:0.0074s

2: select pk,content from test2 where MOD(testkey,2)=0 and MOD(testkey,5)=0 and MOD(testkey,11)=0 limit 0,15
Web页平均执行时间:0.0026s

实验结论:相对于使用字符型字段模糊查询,整型取模的方式在十万数据量下的查询性能有明显提高。

从War3中感悟人生道理

2008-07-18 by CuTe_CuBe

一、专家,高手再强不如一个结构合理的团队来得有生产力。奥特曼流的高级剑圣也有倒下的时候,再强的英雄不如一个有足够战斗力(辅助能力)的英雄带一队构成比例合理的精兵来得有战斗力。

二、不要轻易尝试要求高于自身能力太多的事,除非你有全身而退的对策。为什么剑圣经常出来就去偷大点的宝物,战斗力相近的DeamonHunter却很少敢这样做?因为剑圣在势头不妙的时候有保证安全撤退的技能(疾风步)。

三、暴兵,速矿还是攀科技?选择成为劳动密集型还是高科技生产还是把钱(时间,精力)用作投资(投资当然不是稳赚的,开矿不一定成功的道理)。没钱,没有强大生产力(兵力)也没有高技术含量的很有可能被带走,当然猥琐也可以胜利,前提是你必须有猥琐的资本,而且必须具备猥琐的客观条件。

四、了解各人,工具的性质和特点并且合理使用。狼骑打 AC 、大G打小鹿明显是不智的做法。

五、学会掌握大局和把握细节。掌控大局为胜利积累优势,失败的细节处理可以把积累的优势全部葬送。

六、即使你是魔兽高手,去打星际的时候,最好一开始就作输的准备。

七、平时请多扶盲人过马路,在车上让坐给老人家,提高人品,有助你出跳P,头晕锤,MISS,出宝的几率。

EVA新剧场版:序

2008-06-28 by CuTe_CuBe

睽违10年的EVA终于有“新作”。虽说是重制,但实际上改变不少,上图再说。

暴走。。。。

第五使徒,使徒的编号似乎顺延一号,也就是说第三使徒暂时不明。

第六使徒,重制后变化最大的角色,形态转换的CG效果非常华丽。

Lilith???应该,似乎不是真的?

经典的镜头还有保留。。。

新剧场版里面最震撼人心的一幕,阳电子炮一击失败后,发射的基站受到重创。印证了前一张图里面的对白。这种情况下,连真嗣也男人了一把。


以前没见过这种眼神(在这张脸上)

结尾,熏在月球觉醒。图中的貌似是LIlith,第三?如果(这个)Lilith真是第三的话,那么成迷的就是二号,或者一号不是亚当……

醉酒蟑螂的随机漫步

2008-06-05 by CuTe_CuBe

C语言太久没碰,调试花了差不多一个晚上。程序编译环境:Fedora 8 gcc 4.1.2

在矩形房间里,地面铺有N*M块瓷砖,一只醉酒的蟑螂在一块指定的瓷砖上随机漫步到相邻的令一块瓷砖上,求它至少接触每块瓷砖一次花费的时间。

实验按12*12的环境进行

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. //最大步数限制
  6. #define MAX_STEP_ON 65535
  7. #define MAX_X 12
  8. #define MAX_Y 12
  9.  
  10. //房间的磁砖
  11. unsigned arr[MAX_X][MAX_Y];
  12.  
  13. //相邻磁砖的位移
  14. const int stepx[]={-1,0,1,1,1,0,-1,-1};
  15. const int stepy[]={1,1,1,0,-1,-1,-1,0};
  16.  
  17. //记录当前位置
  18. int current[2];
  19.  
  20. //步数
  21. unsigned stepcount=0;
  22.  
  23. int main(){
  24. int isclean=clean();
  25. srand((unsigned)time(NULL));
  26. walk();
  27. }
  28.  
  29. int clean(){
  30. int x=0,y=0;
  31. for(x;x<MAX_X;x++){
  32. for(y;y<MAX_Y;y++){
  33. arr[x][y]=0;
  34. }
  35. }
  36. printf("please input the begin Abscissa\n");
  37. scanf("%d",&current[0]);
  38. printf("please input the begin Ordinate\n");
  39. scanf("%d",&current[1]);
  40. arr[current[0]][current[1]]+=1;
  41. return 1;
  42. }
  43.  
  44. int walk(){
  45. if(check()==0){
  46. int step=rand()%9;
  47. int nextx=current[0]+stepx[step];
  48. int nexty=current[1]+stepy[step];
  49. if(stepcount<MAX_STEP_ON){
  50. printinfo(0);
  51. exit(0);
  52. }
  53. if(nextx>=0&&nextx<=MAX_X-1&&nexty>=0&&nexty<=MAX_Y-1&&arr[nextx][nexty]<65535){
  54. ++arr[nextx][nexty];
  55. ++stepcount;
  56. //printf("%d,%d\t%d\n",current[0],current[1],step);
  57. current[0]=nextx;
  58. current[1]=nexty;
  59. }
  60. walk();
  61. }
  62. else{
  63. printinfo(1);
  64. exit(0);
  65. }
  66. }
  67.  
  68. int check(){
  69. int x,y;
  70. for(x=0;x<MAX_X;x++){
  71. for(y=0;y<MAX_Y;y++){
  72. if(arr[x][y]==0)
  73. return 0;
  74. }
  75. }
  76. return 1;
  77. }
  78.  
  79. int printinfo(int success){
  80. if(!success){
  81. printf("It's not Complete walk around the room\n");
  82. }
  83. printf("the bug total walk:%d steps\n\n",stepcount);
  84. int x,y;
  85. for(x=0;x<MAX_X;x++){
  86. for(y=0;y<MAX_Y;y++){
  87. if(y==0)
  88. printf("\n%d\t",arr[x][y]);
  89. else
  90. printf("%d\t",arr[x][y]);
  91. }
  92. }
  93. }

实验结果:

以下省略图N张

以下为转载内容:
看到很多人在抱怨现在的游戏画面越来越好,但反而不如以前“小时侯”的FC什么的好玩了。
这里关键问题不是游戏的问题,这里没有区分,说是FC游戏好还是现在的游戏好,这没有区别,因为游戏的本质是一样的。关键的词是“小时侯”。 查看完整内容 »