Pages - Menu

2013-11-19

Jena エラーメッセージ対処法

Apache Jenaのエラーメッセージの説明と対処法。

already closed

model操作時に現れるエラーメッセージ。
model.close() が実行されると、リソースが開放されてしまい、それ以降ではmodelを参照できない。
スレッドでclose()が呼び出されていないかどうか要チェック。
Exception in thread "main" com.hp.hpl.jena.shared.ClosedException: already closed

2013-10-30

JavaでSQLiteを使う

RDBM(Relational DataBase Management System)には、MySQLをはじめいくつかのソフトウェアがあるが、個人で開発を行うような小中規模なアプリケーションではSQLiteがオススメだ。

Javaからデータベースを操作するためには、それぞれのRDBM用のJDBC(Java DataBase Connectivity)というAPIを用いる。

SQLiteをコマンドラインで使う

SQLite公式DownloadPageから環境に合わせた"command-line shell"をダウンロードし、適当なディレクトリに解凍する。インストールは以上。

sqlite3.exeを実行し、コマンドを叩く。
コマンドについては参考URLを参照。

SQLiteをJavaから呼び出す

SQLite-JDBCダウンロードページから最新バージョンの*.jarファイルをダウンロードする。適当なディレクトリに解凍する。
classファイル実行時のクラスパスにjarファイルを含める(IDEではプロジェクトのライブラリにjarファイルを追加する)。

SQLite-JDBCのサンプルプログラムがわかりやすい。


参考

SQLite公式
愚鈍人 JavaとSQLiteデータベース
DBOnline SQLite入門
sqlite-jdbc配布ページ

2013-10-23

Jarファイルのメインクラスを確認する

Jarファイルのメインクラスの確認の仕方

  1. 次のいずれかの方法でJarファイルを解凍する

    • 拡張子を.jarから.zipに変更して解凍
    • コマンドラインで以下のコマンドを実行
      >jar tvf JarTest.jar
  2. META=INF\MANIFEST.MF

    を開く

  3. Main-Class:
    以降に書かれているのがメインクラスである。
    メインクラスが指定されていない場合は、手動でメインクラスを記述することで、コマンドラインから実行できるJarファイルにすることができる。

2013-09-14

VirtuosoにYAGOをロードする

Windows環境にOpenLink Virtuosoをインストールし、YAGOオントロジーをロードする。

Virtuosoのセットアップ

  1. OpenLinkのDonwloadページから"Pre-built binaries for Windows"をダウンロードし展開し、適当なディレクトリに設置する。
  2. virtuoso-opensource\database\virtuoso.iniを編集する(環境に応じて設定すること)
    //Stripingを有効にする(DBのロードが速くなる模様)
    Striping = 0

    //DirsAllowedの末尾にyagoディレクトリを追加
    DirsAllowed = ., ../vad, ../yago

    //81行目以降のメモリ設定をマシンスペックに応じて設定する(例:16GB)
    ;; Uncomment next two lines if there is 16 GB system memory free
    NumberOfBuffers = 1360000
    MaxDirtyBuffers = 1000000
  3. システム環境変数に以下を加える:
    変数名:VIRTUOSO_HOME  値:virtuosoのインストールディレクトリ
  4. システム環境変数PATHの末尾に次を追加する:
    ;%VIRTUOSO_HOME%\bin;%VIRTUOSO_HOME%\lib
  5. コマンドプロンプトを開き、以下のコマンドを実行する
    cd %VIRTUOSO_HOME%\database
  6. 続いて、以下のコマンドを実行する
    virtuoso-t -?
    正しくインストールされていれば、適当なメッセージが表示される。
  7. serviceを作成する ※"Instance Name"は任意の名前が可
    (消去する際は"screate"の代わりに"delete"を用いる)
    virtuoso-t +service screate +instance "Instance Name" +configfile virtuoso.ini
  8. 以下のコマンドを実行して、サービスが登録されていれば問題なし
    virtuoso-t +service list
  9. サービスを開始する
    (終了する場合は "start" の代わりに "stop" を用いる)
    virtuoso-t -I "Instance Name" +service start
正常にセットアップが完了していれば、http://localhost:8890/conductorから管理画面に入ることができる。
初期ユーザー名とパスワードはともに'dba'。

YAGOのダウンロード

  1. YAGOのダウンロードページから"Download YAGO2s ontology in .ttl format! (2.2 Gb compressed, 18.5 Gb uncompressed) "を選択しダウンロードする。
  2. ファイルを展開し、VIRTUOSO_HOME\yago に設置する

RDFのVirtuosoへのロード

  1. コマンドプロンプトを開き、isqlと実行する
  2. isqlの対話モードになったら、以下のコマンドを実行する
    ※http://abcde.orgは任意のGragh IRIに設定する
    SQL> ld_dir ('../yago', '*.ttl', 'http://abcde.org');
  3. Load Listを確認する
    SQL> select * from DB.DBA.load_list;
    YAGOの.ttlファイルが表示され、ll_stateが0となっていればOK(1:ロード中、2:ロード完了)
  4. ロードを開始する
    ※このコードの実行には非常に時間がかかる(1~2日)
    SQL> rdf_loader_run();
    ※Loaderは複数実行できるようなので、以下の様なbatファイルをつくり実行しても可。この方が早く完了するかもしれない。
    bulk_load.bat
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
    start isql 1111 dba dba exec="rdf_loader_run();"
  5. 上のロードが全て完了したら、Load Listでステータスを確認する
    SQL> select * from DB.DBA.load_list;
  6. ll_stateが2となっていればロード完了。

SPARQLクエリを投げる

上記の設定がすべて完了すれば、SPARQLインタフェースなどでYAGOにアクセスすることができる。
http://localhost:8890/sparql/からSPARQLインタフェースを開ける。

サンプルクエリ
SELECT * WHERE {<http://yago-knowledge.org/resource/Albert_Einstein> ?p ?o}
参考
OpenLink Virtuoso - Using Virtuoso Open-Source Edition on Windows YAGO

2013-09-04

HTTPでSPARQLクエリを投げる

DBpediaなどでは、オントロジーののアクセスポイントとしてVirtuosoを採用している。
VirtuosoにはHTTP経由でクエリを投げることができる。
以下は実装例。
import com.hp.hpl.jena.query.*;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.sparql.util.StringUtils;

public class Virtuoso {

    public static void main(String[] args) {
        String service = "http://dbpedia.org/sparql";
        String queryString = 
                "PREFIX rdfs:  "+
                "SELECT ?x ?y "+
                "WHERE {?x rdfs:label ?y}";
        Query query = QueryFactory.create(queryString);
        
        QueryExecution qe = QueryExecutionFactory.sparqlService(service, query);
        try {
            ResultSet results = qe.execSelect();
            for (; results.hasNext();) {
                QuerySolution soln = results.nextSolution();
                RDFNode x = soln.get("x");
                RDFNode y = soln.get("y");
                System.out.println(x.toString());
                System.out.println(y.toString());
            }
        } catch (Exception e) {
            System.out.println("Query error:" + e);
        } finally {
            qe.close();
        }
    }
}

2013-08-25

Linuxで空き領域を完全消去

ファイルの復元を防ぐため、ファイルシステム上の空き領域を完全消去する。

Step1:パーティションの空き領域を確認する
Step2:空き領域分のダミーファイルを作成する
Step3:ダミーファイルをshredする

作業手順

  1. 以下のコマンドで空き領域を確認する。
    $ df
    Filesystem     1K-blocks    Used Available Use% Mounted on
    /dev/sda1       19609276 4506940  14106240  25% /
    udev              505076       4    505072   1% /dev
    tmpfs             204956     788    204168   1% /run
    none                5120       0      5120   0% /run/lock
    none              512384     156    512228   1% /run/shm
    
    空き領域をメモする。
    (ここでは14106240)
  2. 空き領域するに応じたダミーファイルを作成する。
    (空き領域の算出:14106240/1024=13775)
    $dd if=/dev/zero/ of=tempfile bs=1M count=13775
  3. (dfコマンドで空き領域を確認する)
  4. shredコマンドで消去する。
    $shred -uvz tempfile

2013-08-05

ポスター印刷の方法

画像や文書を複数の紙に分割して印刷(ポスター印刷)する方法。

画像ファイル

ペイントを使う

  1. 画像をペイントで開く
  2. ファイル - 印刷 - ページ設定
  3. 「拡大縮小」の「合わせる」で2x1ページ(適宜応じて)に変更
  4. 印刷の向きを適宜調節
  5. 印刷プレビューで確認

pdfファイル

Adobe Readerを使う

印刷ページでポスターを選択
参考
ITmediaエンタープライズ 画像を分割して拡大印刷したい