lubuntu 14.04 には ax88179_178a.ko がデフォルトで存在する

usb 有線LANアダプタ では Amazon.co.jp: Anker Uspeed USB3.0 LANアダプター 10/100/1000BASE-T ギガビットイーサネット対応 USB2.0/1.1にも互換性あり MacBook Air動作確認済 ASIX AX88179チップセット: パソコン・周辺機器 のためにドライバをインストールしたが、lubuntu 14.04 (kernel 3.13) ではデフォルトでインストールされていた。

Lubuntu 14.04でインストールしたパッケージ

行内差分をハイライト

diff-highlight で公開されている git-contrib の1つ.

$ cd ~/bin
$ wget https://raw.github.com/git/git/master/contrib/diff-highlight/diff-highlight
$ chmod +x diff-highlight
$ vi ~/.gitconfig

.gitconfigあたりに記述

[pager]
    log = diff-highlight | less
    show = diff-highlight | less
    diff = diff-highlight | less

見た目はこんな感じ

f:id:ihiroky:20140115060247p:plain

gradle から umlgraph を使う

要は、UMLGraphの doclet を javadoc タスクで指定し、gradle javadocすればいい.

UmlGraphが依存しているgraphvizパッケージをインストール

$ sudo apt-get install graphviz

build.gradle に依存関係追加

configurations {
    doclet
}

dependencies {
    doclet 'org.umlgraph:umlgraph:5.6'
}

javadoc タスクで doclet 指定

umlgraph のオプションは options.addStringOption で記述

javadoc {
    description 'Generates Javadoc API documentation with apiviz diagrams'
    options.windowTitle = 'API Reference'
    options.encoding = 'UTF-8'
    options.locale = 'en_US'
    options.docletpath = configurations.doclet.files.asType(List)
    options.doclet = 'org.umlgraph.doclet.UmlGraphDoc'
    options.addStringOption 'verbose'
    options.addStringOption 'inferrel'
    options.addStringOption 'inferdep'
    options.addStringOption 'inferdepvis', 'protected'
    options.addStringOption 'qualify'
    options.addStringOption 'postfixpackage'
    options.addStringOption 'hide', '(java.*|org.*)'
    options.addStringOption 'collpackages', 'java.util.*'
    options.addStringOption 'nodefontsize', '9'
    options.addStringOption 'nodefontpackagesize', '7'
    options.addStringOption 'link', 'http://docs.oracle.com/javase/7/docs/jdk/api/javadoc/doclet/'
    options.addStringOption 'link', 'http://docs.oracle.com/javase/7/docs/api/'
}

javadoc 生成

$ gradle javadoc

アサーション時、 ListのtoString()がObjectのtoString()っぽくなる

Listのアサーションを記述したとき、

java.lang.AssertionError: 
Expected: is <[1]>
     but: was <java.util.ArrayList@35ffcd64>

の様にObjectのtoString()っぽい表記になることがあった. 原因は toString() 内部で NullPointerException が発生していたこと. この時、org.hamcrest.BaseDiscriptionの以下のコードにたどり着いてフォーマットされる. ObjectのtoString()ではなかった.

    private String descriptionOf(Object value) {
        try {
            return valueOf(value);
        }
        catch (Exception e) {
            return value.getClass().getName() + "@" + Integer.toHexString(value.hashCode());
        }
    }

以下再現コード. テスト対象.

public class Library {

    private Integer integer_;

    Library(Integer integer) {
        integer_ = integer;
    }

    public String toString() {
        return integer_.toString();
    }
}

テストコード.

import java.util.*;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

public class LibraryTest {
    @Test public void testSomeLibraryMethod() {
        Library classUnderTest = new Library(null);
        List<Library> list = new ArrayList();
        list.add(classUnderTest);

        assertThat(list, is(Arrays.asList(new Library(1))));
    }
}

結果は冒頭のとおり.

Cassandra クライアントサンプル

プロジェクトサイト

The Apache Cassandra Project

インストール

ダウンロードしたアーカイブを展開するだけ

$ tar zxvf /tmp/apache-cassandra-2.0.3-bin.tar.gz -C /opt/java
$ cd /opt/java
$ ln -s apache-cassandra-2.0.3 cassandra

設定変更

設定が示すディレクトを実在するディレクトリに変更. もしくは作る. 以下変更点.

$ mkdir -p /opt/var/lib/cassandra/data
$ mkdir -p /opt/var/log/cassandra

strage config (cassandra/conf/cassandra.yaml)

data_file_directories:
    - /opt/var/lib/cassandra/data
commitlog_directory: /opt/var/lib/cassandra/commitlog
saved_caches_directory: /opt/var/lib/cassandra/saved_caches

ログ (cディレクトリをassandra/conf/log4j-server.properties)

log4j.appender.R.File=/opt/var/log/cassandra/system.log

Cassandra 起動

ExceptionがでなければOK. -f はフォアグランド実行.

$ cassandra/bin/cassandra -f

キースペース、カラムファミリ作成

$ cassandra/bin/cassandra-cli
[default@unknown] create keyspace Demo;
335326fb-86bf-3ad5-a307-ecea506c59b4
[default@unknown] use Demo;
Authenticated to keyspace: Demo
[default@Demo] create column family User with comparator = UTF8Type;
e5913054-6888-317f-8804-215bb708e32a

停止は Ctrl+C でOK.

デモクライアント作成

cassandra_example

実行結果

:compileJava
:processResources UP-TO-DATE
:classes
:run
column name: name
column value: Duke
column timestamp: Sat Dec 21 07:15:44 JST 2013
age -> 18
name -> Duke

BUILD SUCCESSFUL

Total time: 6.929 secs

コンソールから確認

nameが文字列に見えてないけど CassandraCli のように validation_class をつけるとちゃんと確認できる.

[default@Demo] get User[utf8('1')];
=> (name=age, value=18, timestamp=1387577744443)
=> (name=name, value=44756b65, timestamp=1387577744443)
Returned 2 results.
Elapsed time: 6.7 msec(s).

Gradle プロジェクト初期化

build.gradleのサンプルや、gradle wrapper, 基本的なディレクトリまで生成してくれる.

ihiroky@LZ750HS:~/t$ gradle init --type java-library
:wrapper
:init

BUILD SUCCESSFUL

Total time: 4.28 secs
ihiroky@LZ750HS:~/t$ ls
build.gradle  gradle  gradlew  gradlew.bat  settings.gradle  src
ihiroky@LZ750HS:~/t$ find src/
src/
src/main
src/main/java
src/main/java/Library.java
src/test
src/test/java
src/test/java/LibraryTest.java

他にもGroovy等のtypeが選べる.

ihiroky@LZ750HS:~/t$ gradle help --task init
:help
Detailed task information for init

Path
     :init

Type
     InitBuild (org.gradle.buildinit.tasks.InitBuild)

Options
     --type     Set type of build to create.
                Available values are:
                     basic
                     groovy-library
                     java-library
                     pom
                     scala-library

Description
     Initializes a new Gradle build. [incubating]


BUILD SUCCESSFUL

とりあえず gradle help --task タスク名 とタイプすると、先人の知恵にあやかれるかもしれない.