迷人的嗓音和迷人的故事——《Sleepyhead》

今天更新了博客的主题,用了三栏布局,相比一栏,我觉得同样可以让读者集中精力,而且缩短了行长,在屏幕上阅读起来更加方便。使用柔和的色调,和舒服的顶部图片,希望大家能喜欢。如果有建议可以给我留言~

第一篇就衬托一下这个主题,给大家讲一个故事,和一首歌吧。这是一首Galen Crew的《Sleepyhead》。Galen从小就痴迷音乐,在爱上吉他之前,尝试过单簧管、钢琴和架子鼓,随着吉他越来越厉害,创作激情也越来越高涨,后来发现自己了自己与众不同的嗓音,和其余两人组成了一个独特的声音组合。

这首歌就不用多介绍了,下面是我翻的歌词大意,看了就懂,enjoy~

沉睡的公主

in the year of our lord 1239
公元纪年1239年
there once lived a girl of the royal line
曾经有一位有王室血统的女孩
the ancient stories do recall ?
古老的故事中说
she was the fairest of them all
她是世界上最美的女孩
in the castle made of stone
在一个石头城堡里
every night she slept alone
她每夜独自入睡

any noice that would raise the dead
连死人都可以吵醒的声音
couldn’t wake her sleepyhead
都无法唤醒她
the stranger came from the foreign land
从一个遥远的国度来了一位陌生人
asking for the maiden’s hand
希望能牵起女孩的手
her father said no go away
她的父亲说,不行,走开
she’s gonna marry a king one day
她以后要嫁给一个国王
the stranger he came back again
陌生人走了,后来又回来了
riding with 10 thousand men
带着一万骑士
the battle cries few always dread ?
战斗的呼喊,没有人不怕
but couldn’t wake her sleepyhead
但还是无法唤醒她
the fighting lasted all day long
战斗持续了一整天
but the castle wall‘s very thick and strong
但城堡的墙壁又厚又强
the stranger cried let her decide
陌生人哭喊,让她决定吧
where her true affections lie
让她决定选择谁
so the king knocked on her door
于是国王敲响了她的门
only you can end this war
“只有你能结束这场战争”
no one knows how the story ends
没人知道这个故事的结局
did she ever wake up again?
她醒来了么?
will she ever wake up again?
她还会醒来么?
 

Python 的十个自然语言处理工具

1.NLTK

NLTK 在使用 Python 处理自然语言的工具中处于领先的地位。它提供了 WordNet 这种方便处理词汇资源的接口,以及分类、分词、词干提取、标注、语法分析、语义推理等类库。

网站

http://www.nltk.org/

安装

安装 NLTK: sudo pip install -U nltk

安装 Numpy (可选): sudo pip install -U numpy

安装测试: python then type import nltk

2.Pattern

Pattern 拥有一系列的自然语言处理工具,比如说词性标注工具(Part-Of-Speech Tagger),N元搜索(n-gram search),情感分析(sentiment analysis),WordNet。它也支持机器学习的向量空间模型,聚类,向量机。

网站:

https://github.com/clips/pattern

安装:

pip install pattern

3.TextBlob

TextBlob 是一个处理文本数据的 Python 库。它提供了一个简单的 api 来解决一些常见的自然语言处理任务,例如词性标注、名词短语抽取、情感分析、分类、翻译等等。

网站:

http://textblob.readthedocs.org/en/dev/

安装:

pip install -U textblob

4.Gensim

Gensim 是一个 Python 库,用于对大型语料库进行主题建模、文件索引、相似度检索等。它可以处理大于内存的输入数据。作者说它是“纯文本上无监督的语义建模最健壮、高效、易用的软件。”

网站:

https://github.com/piskvorky/gensim

安装:

pip install -U gensim

5.PyNLPI

它的全称是:Python 自然语言处理库(Python Natural Language Processing Library,音发作: pineapple) 是一个用于自然语言处理任务库。它集合了各种独立或松散互相关的,那些常见的、不常见的、对NLP 任务有用的模块。PyNLPI 可以用来处理 N 元搜索,计算频率表和分布,建立语言模型。它还可以处理向优先队列这种更加复杂的数据结构,或者像 Beam 搜索这种更加复杂的算法。

安装:

LInux:sudo apt-get install pymol

Fedora:yum install pymol

6.spaCy

这是一个商业的开源软件。结合了Python 和Cython 优异的 NLP 工具。是快速的,最先进的自然语言处理工具。

网站:

https://github.com/proycon/pynlpl

安装:

pip install spacy

7.Polyglot

Polyglot 支持大规模多语言应用程序的处理。它支持165种语言的分词,196中语言的辨识,40种语言的专有名词识别,16种语言的词性标注,136种语言的情感分析,137种语言的嵌入,135种语言的形态分析,以及69种语言的翻译。

网站:

https://pypi.python.org/pypi/polyglot

安装

pip install polyglot

8.MontyLingua

MontyLingua 是一个免费的、功能强大的、端到端的英文处理工具。在 MontyLingua 输入原始英文文本 ,输出就会得到这段文本的语义解释。它适用于信息检索和提取,请求处理,问答系统。从英文文本中,它能提取出主动宾元组,形容词、名词和动词短语,人名、地名、事件,日期和时间等语义信息。

网站:

http://web.media.mit.edu/~hugo/montylingua/

9.BLLIP Parser

BLLIP Parser(也叫做 Charniak-Johnson parser)是一个集成了生成成分分析器和最大熵排序的统计自然语言分析器。它包括命令行python接口

10.Quepy

Quepy 是一个 Python 框架,提供了将自然语言问题转换成为数据库查询语言中的查询。它可以方便地自定义自然语言中不同类型的问题和数据库查询。所以,通过 Quepy,仅仅修改几行代码,就可以构建你自己的自然语言查询数据库系统。

网站

https://github.com/machinalis/quepy
http://quepy.machinalis.com/

最新的列表请点击这里

 

记一个愚蠢的bug

我们操作系统的大作业是模拟一个文件系统,我的想法是搞一个二进制文件出来,然后针对这个二进制文件模拟操作系统的管理方式。但是在 login 的时候,我就遇到了麻烦。这个bug我查到凌晨三点才发现,最后真是哭笑不得,觉得很有必要写一写。bug虽然很蠢,但是对我的教训却是很深啊。

我想要实现的是,将用户id和名字密码等信息永久地保存在一个二进制文件中。用的文件操作函数是 fwrite函数 和 fread函数,将一个用户结构体直接写到文件里面去,用到的时候再读出来。我的 user 结构体是这样写的:

然后就发现了这样的错误:登陆之前必须初始化文件,然后添加用户,删除用户,切换用户登陆都没有问题。但是一旦退出再次进行调试,保准会运行异常挂掉。不能做到永久存储。

再扯一下我试过的调试方法吧。因为对二进制读写用的不是很多,所以就以为是文件读写有问题,于是查了一堆fwrite和fread的用法和参考,搞了一堆demo来测试——都没问题。然后以为是流程问题,搞了堆输出来测试,也没问题。后来才用了跟踪调试,老老实实一步步跟进去,才发现了问题。

答案就是:string类型存放的其实是一个指针,并不是实际的字符串。而fwrite是将整个结构体作为二进制写进去的,也就是说存了个指针。一旦退出程序,下次启动,这个string存放的地址就不再是用户名和密码了,变得毫无意义。正确地方式是,使用char型数组来存放。如下:

发现这个的时候,凌晨三点,周围很静。我一下子想起来一周之前在机房问Wii要用什么语言写,他说C,我嘲笑说pure  C? low。现在终于吃到了苦头。对着屏幕傻笑了好一会儿。

教训总结:

  1. 以为STL会带来很多便捷,就想当然地使用了C++来写,太愚蠢了。最近看的一些系统的书,都提到要使用C,甚至是汇编。即使是pure C,从0实现的时候,也不能使用printf这种函数,甚至还要针对gcc等编译器进行优化,相当底层。我都有点觉得,汇编才是最好的编程语言了!
  2. 一定要区分C和C++的区别。这点仁者见仁吧,我以前把秋波老师的话奉为信条,他就说过:我管你是C还是C++,能写出程序来就行了,老朱也说过,除了io的时候用C,别的混用无所谓的,AC就行。现在自己觉得,区分开来很重要!C++面向对象,拥有丰富的STL。C效率高,偏底层。该用什么用什么,用C++,就要用C++的风格,比如用迭代器替换i++之类的。
  3. Always ask WHY.学知识一定要学的明白,懂基本原理,使用这方面,倒是可以一点一点来熟练。基本不扎实,是我花了这么长时间调试的根本原因。string是个对象啊!那它存的就是个指针啊!二进制写进去这么个对象,怎么能类似”深拷贝“地把对象也写进去呢?从逻辑上想想,这真的是一个很白痴的错误。现在想想,是很简单,但是在学习的时候想到”这里保存的是指针“这一点会引发什么样的后果,却很难。需要认真思考。

很多东西,说说简单,不自己吃点亏,是记不住的。

 

一年炉石传说的游戏体验

炉石传说这款游戏,最先是从玩星际争霸2的朋友那里知道的,那时候刚发布,大家都去申请了公测账号,当时也跟着去试了一把。当时的兴趣都在星际2上,所以玩了几把就忘掉了。直到去年去苏州玩,旅馆里无聊,又开始玩了这个游戏,重新发现了这个游戏的乐趣,就整整玩了一个暑假。到现在,玩了大约有十个月吧,昨天终于把这个账号卖掉了,算是给这段游戏经历画上了句号。

Hearthstone_Logo_CN

这是非常值得回忆的一段游戏时光。有段时间,每天起床都特别开心,因为能开新的游戏卡包了(这个游戏的日常任务能得40或60金币,100金币买一包卡)!一个卡包里面有5张卡至少有一张稀有,有几率开出史诗,传说(非常珍贵)。我现在几乎能记起来每一张传说卡的瞬间!一张传说能带来几天的好心情。正因为这个游戏的这种集卡机制,使得我对账号的感情比较深,毕竟都是自己一张一张开出来的。

Card Box_Cinematic

这应该算是一款相当成功的卡牌游戏了。游戏界面制作精美:UI全部设计在一个盒子里,这种风格贯穿始终;游戏采用“酒馆”的世界背景,每次官方消息,游戏指引等都已酒店老板自称,非常有意思。比如说,玩家数超过三千万,官方新闻说“我们需要更多的椅子了!”;对战界面也安排的极为精致,代入感很强。卡牌的获得方式算是一大创新吧,除了副本奖励的卡牌能够稳定获得,其余的卡牌都需要开扩展包来得到。而通过扩展包开到的卡牌,是完全随机的。

hotelboss

炉石传说最大的特点,就是卡牌的平衡性了。成也是它,败也是它。可以说,这是所有暴雪游戏的特点了。单说这款游戏中,平衡性就体现在,每一张卡牌都有独到的用途,虽然有些逗比卡,但是每一张都是不能被完全替代的。Amaz就说过,每一张都是好卡。我相信像米尔豪斯这种卡,在将来都会有不可替代的用途。在天梯就体现在,没有一套卡是百分之百无敌的,一套卡的兴起,必然会引起另一套克制的卡组流行。肯定会有人用T7猎,机械法,动物园,这种横行天梯的卡组来反驳我。只能说,概率而已。这种卡组对起手要求低,“天糊”几率大,就像在星际2里面,低分段神族4bg胜率高,一样的。并不影响游戏的平衡性。

Every Card is good card.

——Amaz

其中说的败,就是这个游戏太平衡了。如果你的卡比对手多很多,那么你的组合肯定就多得多,胜率一定高一些。加上游戏只有1v1的对战模式,就决定了它注定是一个孤独的游戏。和好友对战的模式单一,趣味性比较低。而且好友对战不是天梯,你的朋友卡组质量如果不是和你一个等级的,那么好友对战基本没法打。在对战中遇到的网友,顶多以后有观战任务能去看一下别人打,基本上也很少有别的交流,因为好友对战没有奖励,认识之后交流也不多。别的游戏例如星际2,魔兽世界中,认识朋友之后交流比较多。

Screenshot_8_full

另外提一点,关于交流。游戏关闭与对手对话功能,只有添加好友之后才能对话。我想,禁止骂人所带来的游戏体验肯定远大于弱化社交。但是游戏依然提供了内置的“你好”,“抱歉”等语音,依然可以用这些嘲讽。我在美服也打过,自己的感觉就是:美服称赞,问好用的比较多,国服基本都是“抱歉”,或者在失误的时候“打得不错”,来嘲讽。总体的玩家素质,大陆就是比较低,这是事实。

说了这么多,我AFK的主要原因是缺钱。次要原因是玩腻了,开卡包带来的惊喜少了,一局一局的对战也渐渐没有了感觉,已经厌倦了这种游戏模式。不过,这是一个超级棒的游戏。

 

《以撒的结合:重生》网页版图鉴

这个月以撒登陆 PSN 啦!最近又拾起了这个游戏,却发现好多道具都忘记了。《以撒的结合:重生》这款游戏中,有四百多种道具,而且游戏里面,道具没有说明,只有图片。所以在拾起来道具之前,很难知道道具的作用。

b6159350522b811dc19cef604e4d8b1c

于是,图鉴就成为这个游戏重要的辅助工具。以前我们用的图鉴,都是从一个以撒的 wiki 上面截图下来的,要找一个道具的话,需要翻多页。我想,如果做成一个网页版的话,就方便多了,点击一个道具,直接出来信息。所有的道具呈现在一页里面,查找方便。网上没有这样的图鉴,我就想自己做一个。

我的想法是:

  1. 写个程序将道具的信息格式化成 xml 格式;
  2. 前端主要将所有的道具图片呈现出来;
  3. 用 jquery 设置监听,点击图片之后,显示出道具信息。

在实际写的时候,才遇到了各种各样的麻烦,这篇文章中,将这些问题简单总结一下,大家如果有兴趣,可以自己深入了解一下。

C++操作中文

整合道具信息这块,我是用 C++写的。处理 string 很需要经验,我花了一个好长时间学习对中文的操作。中文是用两个字节表示一个字符的,单独获取一个字节没有任何意义。或许,可以针对中文字符写一个库?

监听 jquery 添加的元素

使用 jquery 添加的元素,是无法使用$()来选择,进行监听函数绑定的。这个项目中,我用了   .delegate( selector, eventType, handler(eventObject) )  这个函数来代替。这个函数可以匹配的元素包括那些目前已经匹配到的元素,也包括那些今后可能匹配到的元素。但是,它已经被 .on() 代替了。(on函数字太多了,我没看= =)

背景图片的适应

css 中可以对背景图片的大小适用只有以下这种:

  • auto:背景图像的真实大小。
  • cover:将背景图像等比缩放到完全覆盖容器,背景图像有可能超出容器。
  • contain:将背景图像等比缩放到宽度或高度与容器的宽度或高度相等,背景图像始终被包含在容器内。

看起来,好像 css 中只适合对那种合适平铺的图片作为背景啊。我的处理方式是:直接加一个图片的 div,这个图片的 z-index 设置为-1,即在所有的元素的下面,然后这个图片的宽和高都可以拉伸了!(但是joyme说我这样做 background,显得一点都不专业 = =,但也想不出别的办法呀)

现在想起来的问题,就这么多。吐个槽吧,想想这么简单的东西,真正做的时候,却遇到了这么多麻烦!尤其是图片拉伸,来来回回尝试各种方法,花了四个多小时!前端也真是不简单啊。更糟糕的是,自己花了那么长时间,给室友看,用的360浏览器,一打开布局全完蛋。前端工程师都是勇士!

最近熬了两天夜了,今天一定好好睡一下。第一天,主要实现了基本功能,可以查询了。

psb

 

昨天花了一天时间————加!特!技!duang!变成了这样子:

psb-2

 

今天又补齐了道具,把 Demo 挂在 Github 上了。大家有好的建议或者报错可以给我留言~或者在 Github 上提交 issue 或者 pr。

Demo

以撒的结合:重生 中文 在线图鉴:http://laixintao.github.io/isaac/

项目地址:https://github.com/laixintao/ISAAC-Atlas-online