Cherry青轴机械键盘小评

笔记本的键盘坏掉已经有一个多月了,起因是我一瓶水给泼了上去,虽然把键盘当场就擦干了,而且当天也没有什么问题。但是第二天的中午键盘却开始抽筋,变得有些键不能用了起来。疑惑的把笔记本翻过来看,却发现电池里面渗入了不少水,还到了下面的电路板中。于是就这么悲剧了。借着同学的键盘用了有一段时间,因为没有钱,所以就没有修理。前两天企盼已久的奖学金终于发下来了,于是果断带着电脑去修键盘。不过到了那里才知道换一个键盘就要500元,远远超出了我的意料之外,正巧前些日子宿舍某人买了一个机械键盘来用,试过之后直接中毒不能自拔,于是抱着“与其花500换一个薄膜键盘不如就干脆买个机械键盘好了”的的想法,果断入了一个Cherry的青轴机械键盘。今天键盘刚寄到,现在就说说使用了一下的感受吧。

首先是外观,这个没什么好说的,比起薄膜键盘各种华丽的样式,机械键盘似乎还停留在上个世纪,就外观而言没有任何能够吸引人的地方,除非什么时候流行复古的风情,否则就外观而言是完全没有竞争力了。不过我买这个键盘也不是看的,所以外观倒也没有什么关系就是了。

Photobucket Pictures, Images and Photos
颇有上世纪风格的键盘

之后就是键盘的布局了,“f”和“j”键的标识和普通键盘采用突起不一样的是这个用的是凹陷,手感还是很明显的。另外每一排按键相比于其他的键盘高低差要多一些,至少和之前用的相比还是很明显的。现在手向上移动会有碰到按键的感觉,偶尔会因此卡一下,这个可能需要适应。键位的布局和普通键盘没有区别,不过ESC键离主键盘区还是有点远,用VIM的时候有点小悲剧。其实要说编程专用键盘的话还是HHKB比较给力,不过那玩意实在是太贵了,完全没有办法承受。WIN/CMD键很传统的夹在了Ctrl和Alt之间,不过相比而言我更喜欢Apple的排布,就是把CMD紧靠在空格键旁边,这样的话对于快捷键(OS X下很多快捷键都是用CMD来配合)而言即使手不大也可以容易的按到比较远的键。


高低差还是有点明显的

之后就是最重要的按键手感的问题了,之所以选择机械键盘这个绝对是最为重点的地方。须要说明的是我只用过青轴和黑轴,所以没有办法和其他的轴进行比较。另外,技术参数什么的一是网上都有,二是由于对于用户而言没有太大的意义,所以也不在这里做讨论了,这里仅仅套讨论自己使用过程中的主观感受。

首先是声音。青轴的按键有着清脆的咔咔声,这也是我当时买青轴的原因之一──听上去很带感──至于有人说的比较吵的缺点,这个需要结合个人的忍受能力和所处的环境来看了。总体而言一般使用虽然比其他键盘声音要大,但是并不吵。如果不是要求安静的环境下使用的话这个声音不会造成什么困扰,老实说这种咔咔声反而有助于激起我打字的欲望。另外这个咔咔声还可以明确的告诉你按键已经确实的按下去了。

另外一个就是反应,最初对于这种机械式的键盘反应速度会不会有问题还有点疑问,比如说既然有咔咔的声音回弹会不会有点慢。不过在使用中发现这种担心是没有必要的。我不太清楚电竞选手几百的APM会不会有问题,不过对于我的打字速度而言这已经足够了,回弹的速度非常的迅速,不会有滞后和拖泥带水的感觉,松手即弹回,旋即再按下去也会立即响应,没有什么问题。

还有的就是按键力度的问题了。现在使用的感觉是这个和按键的大小有一些微妙的关系,一般的按键稍微用力即可按下,虽然我刚开始的时候按的比较狠,不过很快就发现不必如此,基本上只要轻轻敲击即可。不过像空格之类比较大的按键相比而言要使的力需要多一点,和其他按键还是有一些微妙的区别。现在稍有点觉得按空格要的力有点大,不是很畅快。

最后说说和MAC系统的相容性。调节音量和键盘灯什么的在这个键盘上没有对应的键,Function键按下去也没有能够激活电脑自带键盘上Function键对应的功能。不过屏幕亮度调节被莫名映射到了Scroll Lock和Pause/Break键上了,凑和着用也没有问题,但是我用的最多的音量调节的按键按了一圈也没有的对应,这个有点郁闷就是了。另外就是碍眼的WIN键,本来因此我都想买无刻印的了,不过由于那要贵上个百来块钱,所以最后还是作罢了。Cherry其实也是提供MAC键位的键盘的,不过只有薄膜键盘就是了。另外Number Lock和Scroll Lock是没用的,或者说没有办法使其关闭,这个在Win下没问题。不过反正一个我不用另一个从来没关过,所以影响不大。

总体而言,这个键盘给我的感觉就是清脆,畅快。清脆的声音,畅快的使用感受,虽说贵了点,不过看着这感觉和据说很长的使用寿命,也觉得值了,毕竟键盘虽然不起眼,但却是每次开机都要用到的东西了,与其别扭着用着,不如干脆爽一把…..呃,也不会死嘛~

最后,马上就要到新年了,在这里我祝愿所有人在新的一年里身体健康,这才是最重要的哦~

这样的Loli开商店真的没有问题么?

Image Source,Photobucket Uploader Firefox Extension
艳阳高照的一天,我们的Loli正在家中无助的徘徊,Loli的母亲早已经不在了,Loli的父亲却又不知道为什么失去了踪影,已经好几个月没有回家了。就在这时,突然响起了一阵急促的敲门声。从小被教育着独自一人在家不要随便开门的Loli这时却忘记了父母的教诲,只当是父亲回来了,兴高采烈的打开了房门,意料之外的,房门外飘着一个小小的精灵,不明就理的Loli呆呆的望着这个看上去小巧可爱,而说话却是老气横秋的精灵。精灵告诉Loli,他的爸爸欠了别人一大笔钱,之后便不知去向了,而她现在必须代父亲偿还这笔债务。可怜的Loli当然没有那么多的钱,但是不还钱的话房子就要被抵押掉。不要啊,Loli想,难道我要去卖身了么?

Image Source
Loli的老师就曾经因为还不起钱而卖身求生

在一边的精灵看着无助的Loli似乎也觉得于心不忍,便提议到,那么便把你的家改为道具商店吧,我们来卖东西攒钱还债吧。

于是Loli和精灵的道具商店就这么开张了。

嘛~基本的故事背景就这样了,游戏也就从这里开始,你可以进行商品的买卖。简单来说就是从别处买入商品,这包括从市场买入和客人不用卖来的,另外游戏也可以在迷宫中冒险,在打败怪物时也会随机掉落物品。对于商品出售时可以进行定价,当然了,不同的客人可以接受的价格并不一样,有些人比较大款一些,而另一些却非常抠门,如果定的价格不合其意,便需要讨价还价了。至于对价格的要求,最抠门的要数镇里的Loli了,有时候原价卖都会嫌贵的家伙。
Photobucket Pictures, Images and Photos
做人要厚道啊,我只多给你加了100而已啊?

每卖出一样东西会得到一些经验点,有了足够多的经验点后Merchant Level便会提升,就可以购买更多的商品以及扩建商店。经验点每次增加基础是10,如果你能够猜对对方的心理价位,便会获得一定的Bonus Point,另外如果在不用讨价还价的情况下售出物品,也能获得Bonus Point,并且连续如此时还会以2,4,8….为等比数列提升,128封顶。所以如果想要快速提高Merchant Level时,薄利多销是一个不错的办法。
Photobucket Pictures, Images and Photos
扩建后的商店,可以摆放更多的商品以及自动售货机

游戏秉承着循序渐进的原则,开始时只能卖东西,之后随着等级的提高,买入,预定等功能也会一一由精灵进行介绍,所以虽然总的游戏介绍并不少,但是因为打散开来的原因,并不会让人觉得冗长。所以这种悲剧也不会发生了。另外游戏中还会发生随机的事件,事件会导致物品价格的涨跌,善用此事可以大量获取利润。

游戏的另外一个方面是迷宫冒险,你可以雇佣勇者进行冒险。初始时只有剑士,之后会有其他职业加入。打倒怪物可以获得经验以及物品。游戏的迷宫五层一组,每组的最后有一个Boss,大部分的Boss如果蛮打的话是费不了它们几点HP的,而是要根据不同Boss的弱点有针对性的进行攻击,大部分时候要使用场景中的道具。这个感觉和塞尔达传说非常的相似,所以说这个游戏的Boss战做的还是相当有亮点的。迷宫本身也各不相同,场景每次进入时也会随机生成,这个和Diablo又有几分相似了。打败Boss后会出现随意门(回城用)或传送阵继续进入下一层(如果有更多层的话)。
Photobucket Pictures, Images and Photos
地上的彩块是掉落的经验点,而不是敌人被打爆后的尸块..这个不是暴力游戏……

至于勇者的武器是由玩家卖出去的,不过勇者比起那些Loli更穷,所以不但从这些铁公鸡上赚不到什么钱,你还得打折给他们卖武器和防具。不过看着在迷宫里能免费拿东西的份上也就罢了吧。

当然镇上也不是一帆风顺的,有一个人就是喜欢找茬,把便宜的东西想要以几倍的价格卖给你,游戏本身没有设计拒绝的选项,而这些些家伙卖东西贵也就罢了,但这么一来却会打断Bonus Point的翻倍过程。所以每次见到那个奸商我都想要对她竖中指。当然游戏是没有竖中指的选项的,所以我也只能以声称只用1 Pix买来气气她了。
Photobucket Pictures, Images and Photos
1 Pix的言下之意就是:滚。可惜程序估计是不懂的…..另外我怀疑这个人有什么其他的作用…不过没试过也不好说。

那么在大家的帮助下,Loli终于还清了父亲欠下来的巨额债务,终于不用卖身还债了,这时精灵也将要离开,可是Loli却对精灵依依不舍起来,精灵似乎也不舍得就这么离Loli而去,看着傻头傻脑的Loli也不放心,于是便留了下来,继续了两人的道具店生涯。

总的而言这个游戏大概就是如此了,在玩的过程中让我想到了不少其他的游戏,诸如仙剑客栈,塞尔达传说,Diablo。作为一个独立游戏,应该说水准是非常优秀的了,趁着Steam感恩节特价$5入手也没觉得亏。游戏通关后可以进行Endless模式,Survival模式(每周都要还钱,一次比一次多),以及继承存档再开的选项。剧情模式里没有探索完成的部分可以在Endless里继续补完,所以可玩性还是相当高。作为一个轻松可爱的游戏,向所有不讨厌模拟经营的人推荐。

最后请允许我稍微吐一下嘈,游戏中几乎所有的道具都是我从城里的另一个市场买来再加价出售,所以既然如此那些顾客干嘛不直接去市场买啊,还到我这来,这不是冤大头是什么。另外对于价格的波动也只限于我出售的商品,也就是说如果一个100 Pix的商品因为某件事涨价了,我在市场购入的时候仍旧是100 Pix,但是售出时我却可以卖280 Pix。所以说城里的人真是冤大头啊……

实验报告 その二

继续上次的问题,对于没法输入域名后自动调用index文件和域名输入居然变得大小写敏感的情况现在仍旧没有解决办法,不过对于以前成天遇到的500错误倒是有了一个解决办法。要说是办法也不是很正确,具体而言就是无论如何把所有文件夹权限改为755,所有文件权限改为644就好了,网上所搜到的说法似乎是Apache的配置里如果做了规定则权限必须按规定设置权限,否则就会出问题。还好这么做之后我再没有遇到过500错误。

另外之前想的给blog添加banner随机更换的功能,刚一开始是想的直接修改主题文件的,也找到了一个随机读取图片的php文件不过奈何完全不会php,虽然找到了这个主题的banner配置是在header.php的“// Houston, we have a new header image!”一行之后,也是苦于不知道如何插入使用。不过好歹最后发现根本不用这么麻烦,只要用Dynamic Headers插件就可以解决,那些时间也是白浪费了。不过吃一堑长一智,后来的代码高亮插件LaTeX插件自然不会再考虑从代码开始改了,拿来即用。自然觉得顺手许多,配置什么的也是一学就会,完全没有压力。

最后同学说他实验室想要做一个知识管理系统,问我有没有什么可用的东西。我第一个想到的就是wiki,不过虽然记得在各种blog上看到不少介绍,可以之前没觉得有什么用,都没有留心。现在想要了却找不到了。最后搜了半天发现了DokuWiki,安装颇为简单,界面也够清爽,自己架了一个先玩玩。不过不会wiki语法的我愣是折腾了半天不会新建页面,还好后来发现只要输入一个没有的url就会自动新建页面了。orz这令人情何以堪啊。另外那里用的jsmath插件似是调用了mathjax来显示公式,效果比起在之前用的WP LaTeX插件转换成图片再显示效果要好一些,不过不知道这样一来在手持设备或多浏览器上的显示有没有问题就是了。刚才搜了一下,WordPress也有类似的插件不过我是懒得折腾了。

那么这次就到这里,前两天看了HTML和CSS的入门,这里的教程颇为不错,照着改了改这里的字体什么的,我看着觉得还不错,Mac 10.6下默认调用的是Hiragino的中文字体,Win下想了半天也只记得个雅黑,不过我没试过Win下的显示效果,想来也不会太坏,也就懒得看了。现在在看PHP,希望以后不会再那么狼狈了。那么之后有什么问题再聊。

PS:某人放了些很下限的banner上去,我说了几次他倒颇以此为自豪。算了,我也管不了那么多……

最坏查找时间为O(1)的哈希算法小解

之前的网络算法课上老师讲到了一个最坏查找时间为O(1)的Hash算法,听上去挺神奇的,于是回来看了下原始的论文,顺便就总结到这里吧.

Hash 算法是个很常用的存储和查找的方法了,而其中的关键就是Hash的函数,这个函数的选取关系到最后算法的复杂度.这个算法使用了一个奇妙的函数,使得所用空间复杂度在保持O(n)的情况下最坏时间复杂度为O(1). 那么,在讲相关的数学推导之前先来定义一下所要用到的各类字母吧~

将要Hash的全部可能数值的集合统称为U,U中的元素个数定义为m. 实际要Hash的数的集合为S,其中的元素个数为n.显然我们有m \geq n,并且S \subseteq U. 除此之外,我们再定义一个p,并且p = m + 1,为了简化起见,我们认为p为素数,实际上这个也并不难做到,大不了往U里加些永远也用不到的数就好了.另外还有W,这个是将S分块后的集合,所谓的分块当然可以分一块(蛋疼不疼?),也可以分多块,准确来说如果分多块的话要加上下标来表示一下,不过这里先略去,就当做统称为W好了.那么第一步首先是一个引理.

Lemma:

给定一个W\subseteq U|W|=r 另外还有 k \in Us \geq r.令B(s, w, k, j) = | \{ x| x \in W~and~(kx~mod~p)~mod~s = j \} | 其中 1 \leq j \leq s ,于是就有 \exists k \in U 使得下面这个式子成立:

! \sum_{j = 1}^s {{B(s, w, k, j)} \choose {2}}<\frac{r^2}{s}

那么首先来解释一下吧,
B(s, w, k, j) = | \{ x| x \in W~and~(kx~mod~p)~mod~s = j \} | 的含义就是取出所有在W中的x,将这些x带入到函数(kx~mod~p)~mod~s 中计算,最后所得到的值为j的,满足这样条件的所有x的集合.那么为什么会是这样一个式子呢…..这个我也不知道..只能说数学大牛威武,灵机一动就是如此等级…. 那么后面那个式子,{B(s, w, k, j)} \choose {2}, 刚才不是算出了用前面那个函数计算过后值为j的集合么,现在我们把他们两两配对(真的可以随便配对么…你怎么知道其中的男女比例的….百合还好,要是Yoooooooooooooooooooooooooo什么的)最后得到的总对数的个数.
好吧,有了这个引理我们就可以从这个中得到两个推论:

COROLLARY1.
\exists k \in U使得\sum_{j = 1}^r B(r,W,k,j)^2<3r

COROLLARY 2.
\exists k’ \in U使得映射x \rightarrow (k’x~mod~p)~mod~r^2W中是一一映射.

这两个式子可以由引理1直接得到,就是换换B(s, w, k, j)式中的字母就可以了,并不复杂.那么前戏就到这里为止了~下面就可以上本垒进入正题了,到底要如何实现呢?
首先我们将内存称作T.并且我们将其分块,第i块称其为T_i.在T_0块的第一小块T[0]中(你知道的,程序员们数数都是从0开始的….)存放上面反复提到的k,并且根据k的值和函数f(x)=(kx~mod~p)~mod~n的值将S分割成n个块,每个块我们称之为W_j,1 \leq j \leq n,每一个W_j都被映射到对应的T_j,1 \leq j \leq n上,并且我们把j的值保存在T_0大块中的第T[j]小块中.(不要被T_iT[i]搞混了哦). 至于k值的选择,只需要满足推论1给出的条件就行了,因为推论1说满足条件的k是存在的,所以总而言之你是能找到的.而W_j映射到T_j的方法则可以由推论2来提供(这个稍后说),而且每个W_j所占用的空间是|W_j|^2 + 2.不过事情这样并没有完,推论2中不是还有一个k’么?之前的k我们记录到了T_0大块中的T[0]小块中,这个k’虽然是二房(厄…习惯性的用删除符删了不过现在找不到合适的名词了….所以大家意会吧…)但是也要保留下来用啊.另外,虽然说我们把S分割成了一堆W_j,但是并没有说是均匀分割,所以W_j的元素个数并没有准确的值,但是这个值却是很有必要的.于是我们对于每个T_i,在它的存储空间的前两部分里,一部分保存k’,另一部分就保留|W_j|.最后,其他的数x \in W_j则按照推论2的映射保存在T_j大块的第\big [(k’x~mod~p)~mod~|W_j|^2 \big ]+2个小块中.

那么现在就要到高潮部分了,最后我要查询S中的一个q要怎么做呢?

1. 设置T_0T[0]的值为k并且设置j = (kq~mod~p)~mod~n.

2. 设置T_0T[j]的值为对应T_j的首地址,由此可以得到T_j中前两格保存的k’|W_j|的信息.

3. 访问T_j的第\big ((k’x~mod~p)~mod~|W_j|^2 \big )+2个小块,则qS中当且仅当q在这个小格中.

好啦~那么我们查找的任务也就完成了~~怎么样,是不是很神奇呢?不过慢点,虽然我们查找时间上没什么问题了,但是空间上,还有构造这个结构所用的 时间上还 很糟糕.不过也并不是没有解决办法,感兴趣的人可以参考最后列出来的原始文献,这只是一个开头,后面还有好多哦,另外所有的证明也可以在文献里找到,如果你觉得我这说的不清楚,或者有错(真心希望没有错..否则的话太糟糕了….),还请参考原始的资料哦.

参考文献:

Storing a Sparse Table with O(1) Worst Case Access Time by MICHAEL L. FREDMAN AND JÁNOS KOMLÓS

PS:其实我只是来测试WP LaTeX插件的….现在预览功能莫名不能用实在是太糟糕了啊.

实验报告 その一

这里算是稍微稳定下来一点了吧,买了这个地方到今天折腾了不少东西,虽然空间有DirectAdmin面板,比起命令是要好多了,不过对于我这个新手而言仍旧是一个学习的过程,那么稍微做一些总结吧.

首先就是绑定域名,在空间中可以由控制面板直接设置,这个没问题,不过还不够,在域名的DNS管理里还要把几类主机名指向空间的ip地址,否则还是访问不了的.而且修改似乎也不是立即生效,需要等待一段时间才行.

其次是wordpress的搭建,这个网上有很多教程,不过要注意的一点是有些教程说到了需要更改目录权限,不过在我这里却会导致无法安装成功,install页面会显示为500 Internal Server Error错误,所以如果出现这种错误的话请不要更改权限了,保持原状即可.

wordpress搭建后试着装了许多插件,不过要注意的是,如果你的blog需要频繁的更改设置,请谨慎使用诸如WP super cache之类的生成静态页面的插件,这样会导致你的页面修改无法生效,而且与某些插件有冲突,比如说这个伪春菜插件,会导致其只在第一次打开页面时才会显示,刷新后就会神隐.为了这个错误调了我一下午,希望以后别在有人遇到这种糟糕的事了.

其次是给文件夹加密,对于apache空间可以用.htaccess和.htpass来加密,教程仍旧是现成的,不过我这里手工创建这两个文件后,虽然验证框能够显示,但是验证成功后却会出现该死的Internal Server Error错误,不知道原因是什么,但是后来发现空间控制面板自带加密选项,只要在文件夹上点protect就好了,看了一下它的实现,仍旧是增加.htaccess和.htpass文件,写入的东西也一样,不过不知道为什么我手工建立却不可以.

最后是另外一次灵异事件,是当我想要用iWeb上传首页时出现的,本来刚开始建立空间后我就用iWeb上传过一个首页,当时没有任何问题,但是这次上传后完全没有显示,仍旧是空间默认的页面,同时出现了所有页面,除了blog以外必须要在域名里指定index.php或index.html来访问的情况,而且对于域名还是大小写敏感的.这着实令人崩溃.而且至今没有找到解决办法,临时的解决方式是在所有出现这个问题的文件夹下创建.htaccess并在里面写入DirectoryIndex index.php(或index.html)来强制读取对应的index文件,但是仍旧觉得这很不安稳,不过好歹这样能用,所以在弄明白原因前就这样好了.

好吧,那么第一次实验报告就这样了,希望以后不会再有这些奇怪的问题,毕竟一折腾就是半天,还是很浪费时间的……