年度归档: 2012 年

  • 在stacklab上搭建Hadoop平台

    在stacklab上搭建Hadoop平台

    什么是stacklab

    stacklab是中国开源云联盟(COSCL)和中国OpenStack用户组(COSUG)联合成立OpenStack实验室,简单的来说就是一个免费申请和使用OpenStack的平台,和国外的那个TryOpenstack有点像,不过stacklab没有门槛,不需要邀请码什么的就可以申请使用。稍微试用了一下感觉很爽,特意和大家分享一下。

    在stacklab建立镜像

    网址:http://stacklab.org/

    点击Register注册,验证完邮箱以后登录。

    在建立镜像以前先配置好Keypairs。

    点击Create Keypair,名字随便填写就行了。完成可以得到一个pem文件。

    在Security Groups中添加一个22端口的许可(起初是为了添加对ssh的许可,后来我发现好像不加也没有关系…这里大家随意吧)

    在Images and Snapshots中选择一个喜欢的镜像,我这里选择的是CentOS6.2_x64,点击Launch。

    这里的Keypair选择我们刚才创建的那个,其他的随便填写。

    我创建了hmaster和hsalve两个镜像。

    注意一下中间的Size里面Disk是0,这个没有关系,可以使用的。点击Public Domain可以看到连接命令。

    比如

    ssh -i hmaster.pem -p11011 [email protected]

    第一次登录输入一个yes接受ssh的证书。

    登录以后输入passwd修改密码,这样就可以通过VNC登录了。

    网页上的那个VNC经常失灵…最好还是用ssh吧。如果是用putty,先把pem转成ppk就行了。

    使用CDH4搭建Hadoop

    CDH4使用很方便,参考:https://ccp.cloudera.com/display/CDH4DOC/CDH4+Installation

    先看一下主机名称和对应的IP,修改一下host。

    执行

    wgethttp://archive.cloudera.com/cdh4/one-click-install/redhat/6/x86_64/cloudera-cdh-4-0.noarch.rpm

    然后

    yum--nogpgchecklocalinstallcloudera-cdh-4-0.noarch.rpm

    再把Key加上

    rpm --import http://archive.cloudera.com/cdh4/redhat/6/x86_64/cdh/RPM-GPG-KEY-cloudera

    在hmaster上安装hadoop-yarn-resourcemanager…

  • android游戏开发框架libgdx的使用(二十四)—physics-body-editor配合Box2D加快开发

    android游戏开发框架libgdx的使用(二十四)—physics-body-editor配合Box2D加快开发

    Box2d是一个很出名的2d物理引擎,有C++、Java等等版本。libgdx对Box2D进行了很高效的封装,极大的降低了学习和使用成本。

    但是我觉得和Libgdx的UI库比起来,Box2D的使用始终比较复杂,单纯的物体降落什么的还好说,要是遇上一个特别复杂的物体,有时候就有点繁琐了。

    在网上游荡时发现了physics-body-editor,绝对堪称神器。

    physics-body-editor

    项目主页:http://code.google.com/p/box2d-editor/

    libgdx-box2d-1

    复杂对象的创建只需要用鼠标点点就行了。

    工具可以到处Json格式的文件,还可以用于其他环境中。

    对于Libgdx而言,该项目有一个专门的loader可供使用。

    第一个小瓶子

    我想了半天都没有找到一个合适的例子可以用做演示,干脆就用官方提供了那个瓶子的图片做演示。

    启动编辑器,新建一个项目,导入我们要的图片。

    libgdx-box2d-2

    点点鼠标把边描绘出来。

    libgdx-box2d-4

    编辑器还可以进行测试,点击鼠标拖动就可以出现不同大小和速度的小球。

    libgdx-box2d-3

    保存项目,你可以获得一个Json格式的文件。

    将压缩包中的loader引入项目。

    使用

    BodyEditorLoader loader =new BodyEditorLoader(Gdx.files.internal("box2d/b.json"));

    读入配置文件。然后创建一个动态对象:

    BodyDef bd =new BodyDef();
    bd.type = BodyType.DynamicBody;

    指定密度等等

    FixtureDef fd =new FixtureDef();
    fd.density =1;
    fd.friction =0.5f;
    fd.restitution =0.3f;
  • android游戏开发框架libgdx的使用(二十三)—使用Universal Tween Engine实现动画效果

    android游戏开发框架libgdx的使用(二十三)—使用Universal Tween Engine实现动画效果

    libgdx的ui库可以实现一些动画效果,但是做游戏来说可能有些不足。Universal Tween Engine是一个纯java实现的动画库。

    地址:http://code.google.com/p/java-universal-tween-engine/

    只要能够用float表示的一切java对象它可以让它动画化,可以使用于Libgdx、Android、Swing等等。

    Universal Tween Engine使用一般流程

    使用Universal Tween Engine最重要的一个步骤就是实现TweenAccessor接口,这个接口定义了getValues和setValues方法。

    然后Engine中注册对应的接口。然后定义一些动画效果并添加到管理器中。最后用update方法更新时间。

    具体的可以参考一下Wiki:http://code.google.com/p/java-universal-tween-engine/wiki/GetStarted

    在libgdx中实现简单动画

    我比较喜欢使用Stage,所以下面的例子都是Stage中的。

    首先实现TweenAccessor接口,我没有区分对待,比如给Image写一个,再给Button写个啥的。我直接给Actor写了一个,这样都可以用。

    getValues和setValues中我定义了3中操作:只修改X值;只修改Y值;修改X和Y值。

    publicstaticfinalint POSITION_X =1;
    publicstaticfinalint POSITION_Y =2;
    publicstaticfinalint POSITION_XY =3;

     

    这里注意一下getValues的返回值,你修改或者操作了几个值就返回几。

    代码如下:

    package com.cnblogs.htynkn;
    
    import aurelienribon.tweenengine.TweenAccessor;
    
    import com.badlogic.gdx.scenes.scene2d.Actor;
    
    publicclass 
  • android游戏开发框架libgdx的使用(二十二)—利用TABLELAYOUT进行布局

    android游戏开发框架libgdx的使用(二十二)—利用TABLELAYOUT进行布局

    前面有一篇文章介绍了用TWL进行布局,最近做其他java的东西接触到了table-layout,用着很不错,仔细看来一下文档,原来还支持libgdx。

    简单试用了一下,比TWL好使多了。

    TABLELAYOUT简介

    tablelayout-logo

    TABLELAYOUT是一个轻量级的UI组件布局库。使用表格实现,有点像HTML的TABLE。

    它支持libgdx, Swing, Android和TWL。支持Java API和配置文件两种方式。

    同时有个配套的编辑器http://table-layout.googlecode.com/svn/wiki/jws/editor.jnlp

    使用配置文件

    其实最好的方法应该是使用配置文件,这样便于修改,还可以利用工具进行可视化编辑。但是libgdx对于配置文件的支持好像没有很到位(或者是版本修改等等问题)。

    所以先介绍配置文件方式。配置文件的具体书写格式请参考table-layout主页。

    打开编辑器,绘制一个简单的游戏界面,包含一个开始按钮和设置按钮。

    libgdx-layout-1

    配置文件如下:

    debug
    *spacing:12 padding:5 align:center
    
    ---
    [StartButton] width:200 height:60
    ---
    [PrefButton] width:200 height:60

    那个debug是显示边框的,方便调试。空间以对应的类型为结尾,比如StartButton就是按钮。

    第二行定义的是全局样式。还有很多其他样式可以定义,我个人觉得很Css盒子模型很接近。

    将文件保存为main.layout。

    因为TableLayout是在Stage中使用的,所以很其他的Actor的用法雷同。先添加一个table,在从table中获取TableLayout。然后定义控件,并和配置文件中的名字一一对应注册进去,最后加载配置文件。

    先新建一个table并添加到stage中

    Table table =new Table(skin);
    
  • android游戏开发框架libgdx的使用(二十一)—使用TTF字库支持中文

    android游戏开发框架libgdx的使用(二十一)—使用TTF字库支持中文

    好久没有更新这个系列的文章了。今天下午在群上讨论libgdx对中文的支持问题。本来Hiero做是最好的,但是LIbgdx的BitmapFont不支持多图,常用汉字3500个,是在做不到一张图上。

    libgdx很早之前就有ttf的支持了,不过那个时候有点问题。经测试新版本(0.96)完全支持,特地总结出来和大家分享。

    TTF字库

    TTF(TrueTypeFont)是Apple公司和Microsoft公司共同推出的字体文件格式,随着windows的流行,已经变成最常用的一种字体文件表示方式,应用范围非常广。

    如果是Windows操作系统,可以从Fonts文件夹中找到很多字库。也可以从网上下载。

    我推荐YaHei.Consolas字库,看着很爽,反正我的eclipse就是用的这个字库。

    gdx-setup-ui的使用

    从libgdx下载0.96版本,可以看到文件结构如下:

    libgdx-chinese-1

    强烈运行gdx-setup-ui.jar,这一个项目初始化工具。

    运行界面如下:

    libgdx-chinese-2

    项目名字,包名什么的按情况填写。在中间的Required配置中可以直接下载最新的稳定版本和Nightly版本。不过推荐选用本地的附件。

    libgdx-chinese-3

    不用解压,直接选择zip文件,它会自动抽取需要的文件。

    我使用的Eclipse,直接Import即可。

    libgdx-chinese-4

    我只生成了桌面项目,一般可以把Android和Web的一起生成了。

    注意一下,默认的Android项目对应的SDK是15,可以根据需要更改。有时候导入的项目会有红色感叹号,添加一个assets文件夹即可。

    libgdx-chinese-5

    其中back-libgdx项目是我们的核心,一切逻辑什么的都在这里实现。back-libgdx-XXX是对应的启动而已。

    libgdx使用TTF字库

    准备一个TTF字库改名为font.ttf复制到assets文件夹。从压缩包中找到gdx-stb-truetype-natives.jar和gdx-stb-truetype.jar。其中gdx-stb-truetype-natives.jar添加到桌面项目,gdx-stb-truetype.jar添加到核心项目中去。如图:

    libgdx-chinese-6

    现在来看看最关键的方法TrueTypeFontFactory.createBitmapFont。

    我们通过它创建一个支持ttf字库的BitmapFont出来。它需要一个FileHandle和要支持的文字。当然还有一些参数,具体意义可以参考API文档。

    也就是说我们需要使用TTF字库的哪些文字必须声明出来。不过问题也不到,3500常用汉字基本可以满足要求。网上还有一个常用500字,不过那个完全不够用。

    我这里随便写几个作为演示。

    publicstaticfinal String FONT_CHARACTERS ="世界人民爱好的美好中文支持再看看";

    然后使用初始化

    font = TrueTypeFontFactory.createBitmapFont(
    Gdx.files.internal("font.ttf"), FONT_CHARACTERS,12.5f,7.5f,
    1.0f, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    剩下的工作和使用Hiero一样的了。

    publicclass App implements ApplicationListener 
  • 基础工具–Guava-Libraries学习笔记(一)

    基础工具–Guava-Libraries学习笔记(一)

    什么是Guava-Libraries?

    Guava-Libraries是google对java的一个扩展,主要涵盖集合、缓存、并发、I/O、反射等等。

    它本来是Google内部所使用的一个类库,后来整理开源出来了。这套库的设计引入了很多新的理念,研究一下可能会使你对Java这门语言有新的认识和看法。

    地址:http://code.google.com/p/guava-libraries/

    这篇短文主要是关于Guava-Libraries基础工具,内容是我参考官方wiki和自己的使用体验结合而成。

    null的使用

    null在java中是一个很特殊的东西。它可以标识一个不确定的对象,比如

    Ojbect o =null

    同时在很多个集合中它代表key不存在,也可以代表值为null。

    null使用需要给外的小心,稍不注意就会出现很多问题。当然更多的时候只是单纯的觉得null不够优雅而已。

    Guava为我们提供了一个Optional的抽象类来解决这个问题。用类Present和Absent代表值存在和不存在。

    以下是一个例子:

    Optional possible = Optional.of(5);
    if (possible.isPresent()) {
    System.out.println(possible.get());
    }
    
    Optional absentValue = Optional. absent();
    if (absentValue.isPresent())
    System.out.println(absentValue.get());
    System.out.println(absentValue.or(-1));
    System.out.println(absentValue.orNull());
    System.out.println(absentValue.asSet());

    第一种是值存在的,第二种是值不存在的。执行效果如下:

    guava-1-1

    这里说明一下isPresent()方法是判断是否有值的。or方法是非null返回Optional的值,否则返回传入值。

    orNull()方法是非null返回Optional的值,否则返回null。

    我个人觉得or方法比较常用就是了。

    条件判断

  • java通过jna调用科大讯飞语音云实现语音识别功能

    java通过jna调用科大讯飞语音云实现语音识别功能

    说明:写本文时还没有提供java平台的,现在官方有java平台的sdk了,可以直接使用。本文已经没有太多实际意义了。

    语音识别技术

    语音识别就是让机器通过识别和理解过程把语音信号转变为相应的文本或命令。语音识别技术主要包括特征提取技术、模式匹配准则及模型训练技术三个方面。说实话其中的技术比较多,要独立开发新的基本上不现实。所以自然把目光放到开源项目或者其他公司的API上面了。开源项目我尝试了SpeakRight和sphinx4,但是效果都是一般。AT&T的API老是申请不上,最后把目光放在科大讯飞上了。试用了一下,效果还行,但是它提供的Windows平台的API是C/C++的,我只懂点皮毛,所以稍微研究了一下通过Java调用它的语音云SDK。

    JNA

    java调用.dll获取.so一般通过JNI,但是JNI的使用比较复杂,需要用C另写一个共享库进行适配。而JNA是一个自动适配工具,通过它调用.dll只需要一个借口即可。

    官网:https://github.com/twall/jna/

    下载jna.jar即可。

    编写接口

    科大讯飞语音云主要提供语音合成和语音识别两个方面的东西,我主要使用语音识别这块的功能。

    建立接口QTSR,继承Library。

    将msc.dll等文件复制到项目根目录。

    jna-yuyinshibie-01

    加载msc.dll

    QTSR INSTANCE = (QTSR) Native.loadLibrary("msc", QTSR.class);

    然后来看一下msc.dll公开了哪些方法。首先是QISRInit,这是一个全局初始化函数。

    jna-yuyinshibie-02

    它的返回值为int,参数是const char。int还是java的int,但是char就对应的是java的String了。

    所以在QTSR中添加方法:

    publicintQISRInit(String configs);

    返回值在msp_errors.h中定义,等一下我们还是要弄在java里面去。

    继续看QISRInit函数,在官方文档中有调用示例:

    constchar* configs=“server_url=dev.voicecloud.cn, timeout=10000, vad_enable=true”;
    
    int ret = QISRInit( configs );
    
    if(MSP_SUCCESS 
  • 在win7上部署umbraco

    在win7上部署umbraco

    什么是umbraco

    Umbraco是一个开放源码的CMS内容管理系统,基于asp.net建立,使用mssql进行存储数据。 使用Umbraco ,设计师能创造出有效的XHTML标记模板和开发人员可以创建任何基于.Net的模块。主要特点包括:

    • 漂亮,友好的用户界面
    • 综合所见即所得编辑器
    • 支持编辑在Microsoft Word
    • 全部源代码可用(开放源代码)
    • 超级简单的模板引擎
    • 完全支持Web标准

    最近需要把一个asp的软件下载站点转移到asp.net,数据库最好用MSSQL。在网上Google一番以后决定试试umbraco,看着一大票的英文文档是在有些难受,还是先看看umbraco是什么样子的再研究文档。我的电脑是Win7的,装了MSSQL 2005 DEV和VS2010,没有IIS7。

    获取umbraco

    umbraco的官网是:http://www.umbraco.org/

    下载地址:http://www.umbraco.org/download

    还有一个中文的爱好者网站:http://www.umbracochina.com/

    这个中文网站提供了汉化包,针对4.7和4.X版本(是这么写着的),但是我不推荐用这个。因为文档毕竟没有汉化,汉化的界面虽然看着舒服,但是文档有些东西就对不上了。当然个人观点哈。

    umbraco-win7-1

    下载界面最上面的是针对Microsoft Web Platform Installer or WebMatrix的,没用过…

    点下面那个下到4.7.2的编译好的版本,直接解压到D盘去,在IIS中新建一个站点,然后访问…

    错误和解决

    访问直接报服务器错误:HTTP 错误 500.19 – Internal Server Error,无法访问请求的页面,因为该页的相关配置数据无效。

    umbraco-win7-2

    看情况是缺少配置,我打开Web.config确实没有这个节点的配置。我比较好奇为什么这个有名的一个开源项目的配置有错误…难道是我无意中跳了步骤?

    不管了,参考一下标准配置将配置文件补全,在configSections节点中添加:

    <sectiongroupname="system.web.extensions"type="System.Web.Configuration.SystemWebExtensionsSectionGroup, 
  • Ormlite在一般java环境中操作Sqlite

    Ormlite在一般java环境中操作Sqlite

    简介

    最开始接触ormlite是在android的开发中,ormlite的简单便利让我印象深刻。

    这几天在研究顾客购物行为,需要使用到数据库,但是对于数据库的速度什么的要求不大,我首先想到的是Ormlite+Sqlite。

    实体类

    ormlite的官网http://ormlite.com/,最新版本4.41

    因为是在一般java环境中使用,所以不需要那个android包。

    ormlite-sqlite

    引入包以后建立modal,例如:Commodity.java。因为使用的sqlite,主键自增长,设置为

    @DatabaseField(generatedId =true)

    完整的代码如下:

    package com.cnblogs.htynkn.DataSpider.Modal;
    
    import com.j256.ormlite.field.DatabaseField;
    import com.j256.ormlite.table.DatabaseTable;
    
    /**
    *@author 夜明的孤行灯
    *@date 2012-6-29
    */
    
    @DatabaseTable(tableName ="Commodity")
    publicclass Commodity {
    @DatabaseField(generatedId =true)
    privateint id;
    @DatabaseField(columnName ="Name")
    private String name;
    @DatabaseField(columnName ="JdKey")
    
  • 基于LingPipe的文本倾向性分析–LingPipe学习笔记

    基于LingPipe的文本倾向性分析–LingPipe学习笔记

    文本倾向性分析

    文本倾向性分析(情感分析 )是将用户的观点分为“正面”和“负面”,有时候会多一个“中性”。文本倾向性分析一个比较直观的应用就是追踪用户对于一个事物的观点和偏好,比如分析豆瓣上一个电影的评论进行分析。正因为如此情感分析又被称为观点挖掘。

    LingPipe

    lingpipe 是alias公司开发的一款自然语言处理软件包,包括主题分类、句题检测、字符语言建模等十余个模块。而且文档完整,甚至每一个算法都有论文参考。更难能可贵的是它支持中文。

    官方地址:http://alias-i.com/lingpipe/

    下载地址:http://alias-i.com/lingpipe/web/download.html

    LingPipe分为两个大块,一块是LingPipe核心文件,另外一块是LingPipe的模型类。需要支持中文的话需要下载Chinese Word Segmentation模块。

    准备语料库

    语料库在语言学上意指大量的文本,通常经过整理,具有既定格式与标记。

    一般而言做情感分析有个很重要的步骤就是采集观点并进行整理,但由于应用场景不同,处理方法也不同。为了方便起见,这里使用已经处理好的语料库。Movie Review Data的polarity dataset v2.0,包含1000个正面的观点和1000个负面观点。当然这个是英文的哈。

    基本极性分析

    基本极性是指事物从样本来看所处的整体倾向,比如:一本书,用户对其的情感倾向是正面的,这样的断言就是一个基本极性断言。

    基本极性的分析直接使用LingPipi的DynamicLMClassifier即可。

    大致上来讲分为两步,第一步训练,第二步进行分析。

    新建一个类名为PolarityBasic。

    publicPolarityBasic(String basePath) {
    pDir =new File(basePath,"txt_sentoken");//获取语料集
    categories = pDir.list();//获取类别
    int nGram =4;
    classifer = DynamicLMClassifier.createNGramProcess(categories,