分类: 默认

  • 通过apt-get安装Sublime

    Sublime是一个界面很棒的文本编辑器,最简单的安装方法就是下载然后解压了。

    不过对于ubuntu而言,通过apt-get安装更加方便。

    Sublime-Text-2:

    sudoadd-apt-repositoryppa:webupd8team/sublime-text-2
    sudo apt-getupdate
    sudo apt-get install sublime-text

    Sublime-Text-3:

    sudoadd-apt-repositoryppa:webupd8team/sublime-text-3
    sudo apt-getupdate
    sudo apt-get install sublime-text-installer

    相关链接:

    Sublime Text 3
    http://askubuntu.com/questions/172698/how-do-i-install-sublime-text-2-3

  • Mockito中RETURNS_DEEP_STUBS对于enum的处理

    Mockito是一个测试常用的库,可以快速模拟对象。

    加上对于Junit的支持不错,配有对应的Runner,使用起来也是相当方便。

    一般使用

    最常用的使用自然是SomeClass some=mock(SomeClass.class),如果你使用注解,还可以写成

    @Mock
    private SomeClass some;

    如果这个类有这样的方法some.getObjectOne().getValue(),我们是不能直接使用given或者when断言简单mock的,需要使用

    ObjectOne one=mock(ObjectOne.class);
    given(some.getObjectOne()).willReturn(one);
    given(one.getValue()).willReturn("value");

    Mockito提供了RETURNS_DEEP_STUBS模式,可以自己处理这种情况,如果我们使用SomeClass some=mock(SomeClass.class, RETURNS_DEEP_STUBS),我们就只需要一句简单的

    given(some.getObjectOne().getValue()).willReturn("value");

    就解决了。

    对于Enum的处理

    RETURNS_DEEP_STUBS本质上调用的ReturnsDeepStubs类。

    这个类在org.mockito.internal.stubbing.defaultanswers下面。

    public Objectanswer(InvocationOnMock invocation)throws Throwable {
    GenericMetadataSupport returnTypeGenericMetadata = actualParameterizedType(invocation.getMock()).resolveGenericReturnType(invocation.getMethod());
    Class 
  • 自定义Homebrew的Formula

    Homebrew是Mac Os X系统下一个非常优秀的软件包管理工具。使用包管理工具的优势就是省心,不再需要在网页上下载安装或者下载后解压再配置环境变量了,只需要使用brew install就可以完成安装了。

    Homebrew支持很多热门的应用和软件,而每一个支持都是一个.rb文件提供的,成为Formula。

    虽然官方支持上千种Formula,但是总有需要自己自定义的时候。

    本文以Moco为例子,创建一个Formula。

    基本内容

    Moco提供了一个命令行的jar,这也是最简单的情况,我们不需要下载编译,而是直接下载,然后链接就行了。

    我们需要的是一个standalone的jar包,版本是0.9.2,地址在这里。

    首先创建一个Formula,运行命令行brew create moco,编辑生成的moco.rb文件,添加内容

    require"formula"
    class Moco < Formula
    homepage"https://github.com/dreamhead/moco"
    url"http://central.maven.org/maven2/com/github/dreamhead/moco-runner/0.9.2/moco-runner-0.9.2-standalone.jar"
    sha1"a21445d7b275c48874ed7756477ade74de299e17"
    def install
    libexec.install"moco-runner-0.9.2-standalone.jar"
    bin.write_jar_script libexec/"moco-runner-0.9.2-standalone.jar","moco"
    end
    end

    这是一个基本的情况,我们下载对应地址的jar包,然后用命令moco链接。

    完成后运行brew install moco就可以看到效果。

    添加测试

    Homebrew提供了测试方法以测试Formula的可靠性,最简单的就是调用…

  • Hexo升级到2.8

    Hexo升级到2.8

    Hexo使用的Yaml Parser做出了一定的修改,所以很有可能在升级Hexo以后会出现HexoError错误。

    [error] { name:'HexoError',
    reason:'incomplete explicit mapping pair; a key node is missed',
    mark:
    { name:null,
    buffer:'categories: Categoriesnsearch: Searchntags: Tagsntagcloud: Tag Cloudnprev: Prevnnext: Nextncomment: Commentsncontents: Contentsnarchive_a: Archivesnarchive_b: Archives: %snpage: Page %dnrecent_posts: Recent Postsnmenu: Menunlinks: Linksnrss: RSSnshowsidebar: Show Sidebarnhidesidebar: Hide 
  • 在Pune

    在Pune

    到Pune已经一周了,今天难得有一天周六休息,感觉特别惬意。

    在Pune的办公室条件特别好,也可能是刚刚建成,人不多的原因吧。

    上几张图先

    办公室

    茶水

    滑板

    办公室

    吃的东西的话各种酱。。。不过一般的快餐和饭还是有的,基本可以将就一下。

    交通是比较坑的,出行基本靠电动三轮车,还是可以打表的那种。…

  • 升级Hexo

    今天把Hexo从2.5.7升级到2.7.1了。之前由于一点问题一直没有升级,今天才看到2.6以后Hexo把render从核心剥离了,需要单独安装才行。

    npminstall hexo-renderer-ejs --save
    npminstall hexo-renderer-stylus--save
    npminstall hexo-renderer-marked--save

    这样就可以使用了。

    另外,公司发了Mac,但是我在Mac上死活运行不起,还是换成ubuntu才行了。不知道具体是什么问题,暂时不管了。…

  • Pmd静态分析和OnlyOneReturn问题

    Pmd是一款静态代码分析工具,可以分析处理一些简单的问题。

    和Gradle也可以结合在一起用,运行gradle check就会运行pmdMain和pmdTest。

    Pmd的分析基于RuleSet,即预设的规则,我一不留神开了Controversial Rules,然后就是一堆Error。

    Pmd和RuleSet

    Pmd的分析基于RuleSet,而每一个Rule都是由一个Java文件定义的,一般继承自 AbstractRule。

    比如TooManyFields就继承了AbstractRule,然后在规则中判断了field数量,阈值DEFAULT_MAXFIELDS是15。

    publicclass TooManyFields extends AbstractRule {
    privatestaticfinalint DEFAULT_MAXFIELDS =15;
    ...
    }

    而常用的规则有

    • basic
    • naming
    • unusedcode
    • design
    • imports
    • junit
    • string
    • braces
    • codesize

    就我个人而言,我觉得unusedcode和imports基本是不需要的了,现在的IDE可以解决这两个问题。

    而basic包含了一些基本的,比如catch不为空,同时复写hashcode和equals等等,codesize检测过长的类和方法提示你重构。

    Controversial Rules

    因为新的项目我是重新配置的pmd,所以随手开了Controversial …

  • 从Grunt迁移到Gulp

    Grunt是js的自动构建工具,使用很方便,自从接触以后一直在使用。

    Gulp是一个新的构建工具,和Grunt的区别没有深入研究,目前只觉得有一个管道流。不过Grunt也会支持流了,应该差不多。

    碰巧看到Hexo也将构建工具从Grunt换到Gulp了,很是好奇,所以用了一个小项目来试试Gulp的好处。

    环境和配置文件

    Grunt有一个Grunt-Cli,而Gulp直接安装Gulp就行了。

    npm install -g gulp

    而Grunt的配置文件叫Gruntfile.js,而Gulp是gulpfile.js

    插件的支持方面来看只要是一般的项目需要的还是有的,如果需求比较小众可能还是需要使用Grunt。

    迁移工作

    这里以hexo-migrator-cnblogs为例子,原来的Gruntfile如下:

    'use strict';
    
    module.exports =function (grunt) {
    require('time-grunt')(grunt);
    require('load-grunt-tasks')(grunt);
    
    grunt.initConfig({
    mochaTest: {
    test: {
    options: {
    reporter:'spec'
    },
    src: ['test/**/*.js']
    }
    },
    
  • hexo发布问题

    自从博客园迁移出来我一直使用的hexo,优点什么就不用多说了,方便快捷,markdown语法支持,生成静态博客对空间要求低。

    经过一段时间的使用还是有些感触,比如在发布上。

    发布站点

    因为hexo是静态博客,当你的博客中博文较多时页面就比较多了。每添加一个新的tag就会多出一个页面,这样的情况下用ftp部署就会比较慢。

    我使用的godaddy的空间,它默认支持ssh,所以我用git hook建立了一个git仓库来部署,时间上节约了不少,但是这样对环境就有了依赖,没法做到处处书写的享受。

    因为hexo需要nodejs支持,而git部署的时候也有公钥密钥的问题(当然你可以输账号和密码),还有一点就是你需要保有你原有的所有post文件。

    我平时在我的笔记本上写东西,回家一般不带它,回家写点东西只能等用笔记本的时候在发布了,感觉不是很方便,隐隐约约有点想换到wordpress的冲动了,但想想以后估计会换一个其他空间,还是静态博客适应性最好。

    安装一个ubuntu在u盘上

    我尝试过安装一个u盘版本的ubuntu,在其上配置一个相应的环境,这样可以行但是总觉得有点慢。也尝试了使用vargant+chef的模式去启动虚拟机发布,但这样也需要环境依赖。毕竟安装一个virtualbox也是多简单的事情。

    独立运行的环境

    我现在的想法是有一个便携式的hexo。因为nodejs的运行环境本身是可以做成绿色版的,然后每次启动一个脚本写入环境变量再启动环境就可以了,这样就可以保证随时都有一个hexo书写环境,不过git发布的话还是需要导入密匙。

    反思

    总的来说hexo还是一个相当方便的东西,而且作者的维护很迅速,新的功能需求也跟进很快,赞一个!

    最近在考虑用七牛最图床,不知道靠谱和方便不……

  • 从Matlab到R

    本文无意讨论R和Matlab哪个好用,只是自己换语言时候的一点体会。

    在很长时间里都使用的Matlab,两年前尝试过换到Python,但由于种种原因没有成功。

    原来的Matlab是搞活动的时候买的正版,包含的包已不多,但是平时的使用也足够了。这几天整理了一下电脑,准备升级Matlab,然后发现问题来了。
    一是找不到当时购买的许可,二是不清楚当时买的许可能不能用在更新版本上。加之最近在学习Coursera上的The Data Scientist’s Toolbox课程,想想干脆换到R算了。

    整个过程蛮顺利的,本文是一个小记。

    下载和安装

    Matlab是一体化的,安装以后自带IDE。R的话除了安装R以外再安装Rstudio作为IDE使用,总大小80M左右。

    因为R和Rstudio都是开源的,所以许可什么的问题就不存在。

    安装好以后直接启动就可以了。

    常用语法的转化

    R是不兼容Matlab的语法的,所以需要了解一下二者的对应关系。

    最主要的参考是R for MATLAB users,它对比了常用语句。

    简单的语句还好,普通的帮助也能够正常使用,比如help(plot)

    Matlab中常用两句话clearclc,前者情况当前工作区的变量,后者清屏。这两个语句都不能在R中使用。

    R提供了rm方法来删除当前工作区变量

    rm (..., list = character(), pos = -1,
    envir