2011年11月28日月曜日

GoogleのOCR tesseract-ocr

GoogleのオープンソースOCR、tesseract-ocrのインストールと実行テスト。

環境:Ubuntu11.10x32
バージョン:Tesseract3.01

tesseract-ocrとは


the 1995 UNLV Accuracy testでトップ3に入ったOCRエンジン。1995-2006までほそぼそと開発が進められたが、その後Googleがホストとなりオープンソース化した。tesseractTrainer.pyは GPL, それ以外は Apache2.0 ライセンスのもと公開されている。

インストール


依存ライブラリのインストール
[bash]
~$ sudo apt-get install autoconf automake libtool
~$ sudo apt-get install libpng12-dev
~$ sudo apt-get install libjpeg62-dev
~$ sudo apt-get install libtiff4-dev
~$ sudo apt-get install zlib1g-dev
~$ sudo apt-get install libleptonica-dev
~$ sudo Idconfig
[/bash]
subversionのインストール
[bash]
~$ sudo apt-get install subversion subversion-tools
[/bash]
tesseractのチェックアウト
[bash]
~$ svn checkout http://tesseract-ocr.googlecode.com/svn/trunk/ tesseract-ocr-read-only
[/bash]
tesseractのインストール
[bash]
~$ cd tesseract-ocr-read-only
~/tesseract-ocr-read-only$ ./autogen.sh
~/tesseract-ocr-read-only$ ./configure
~/tesseract-ocr-read-only$ make
~/tesseract-ocr-read-only$ sudo make install
[/bash]
言語データのインストール
[bash]
~/tesseract-ocr-read-only$ cd
~$ wget http://tesseract-ocr.googlecode.com/files/eng.traineddata.gz
~$ gzip -d eng.traineddata.gz
~$ sudo mv eng.traineddata /usr/local/share/tessdata/
[/bash]

実行


[bash]
~$ tesseract hogehpge.jpg
[/bash]

TeXのインストール

UbuntuでTeXを使いたくなったのでインストールした。参考にしたのは
Ubuntu 11.10 TexLive 2011 - cloverroseUbuntu で TeX Live 2011 を利用する | Amrta

環境
Ubuntu 11.10x32

日本語用のTexをダウンロードし、リポジトリに追加


[bash]
~$ wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
~$ wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
~$ sudo wget https://www.ubuntulinux.jp/sources.list.d/oneiric.list -O /etc/apt/sources.list.d/ubuntu-ja.list
~$ sudo apt-get update
[/bash]

TexLiveインストール


[bash]
~$ sudo apt-get update
~$ sudo apt-get install texlive-full
[/bash]

日本語環境インストール


インストール時のオプションはUbuntu で TeX Live 2011 を利用する | Amrtaを参考に。
[bash]
~$ wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
~$ tar xvf install-tl-unx.tar.gz
~$ cd install-tl-20111028/
~$ sudo ./install-tl
[/bash]

2011年11月27日日曜日

Bitbucket 入門

先日githubにプログラムを上げた。無料アカウントではgithubに非公開プログラムを置けないので、非公開のプログラムはFree source code hosting — Bitbucketにホスティングすることにした。ついでにMercurialにも入門。

環境
Ubuntu 11.10 x32

bitbhcketのアカウント取得


Symfoware bitbucket アカウントとリポジトリの作成を参考に,Sign upから行う.

リポジトリ作成


右上のメニューから
[text]
Repositories > create repository
[/text]
レポジトリの作成ができる。

Mercurial インストール


[bash]
~$ sudo apt-get install mercurial
[/bash]

cloneの作成


ローカル・リポジトリの作成は
[bash]
~$ hg clone https://takkyuuplayer@bitbucket.org/takkyuuplayer/test
[/bash]
で可能。

EclipseでMercurial


Eclipseのプラグインアップデートサイトは
[text]
http://cbes.javaforge.com/update
[/text]
にある。詳しい操作方法はSymfoware EclipseにMercurialプラグインをインストールし、bitbucketにプッシュするを参考にすればできる。

2011年10月31日月曜日

Github 入門

今日「pdfファイルに対して1頁毎に空白のページを挿入する」というソフトウェアを書いた。git入門がてらそのプログラムをgithubにあげた。takkyuuplayer/zeminar - GitHub


環境
Ubuntu 11.10 x32

gitインストール


[bash]
$ sudo apt-get install -y git-all
[/bash]
めんどくさかったのでallでインストール。これでいいのかな?

githubアカウント作成


github 超入門 - glasses factory を参考にすればできた。

githubにプロジェクトをあげる


github もうちょい入門 - glasses factory を参考にすればできたが一箇所だけ追記。github へ公開鍵の設定 においてLinux環境ではgithubへのSSH接続テスト
[bash]
./ssh$ ssh -T git@github.com
[/bash]
に失敗する。上記接続テストをする前にで生成したsshキーを有効にしておかなければならない。
[bash]
./ssh$ ssh-add ~/.ssh/id_rsa
./ssh$ ssh -T git@github.com
[/bash]
あとは書いてある通りにやればいい。

2011年10月29日土曜日

デフォルトのブートOSを変更

Windows Server 2008 R2 とUbuntu11.10のデュアルブートをしているわけだけど、デフォルトのブートOSをUbuntuからWindowsに変更する方法。Ubuntu-9.10をインストール。 いろいろ変わってて困ってしまう。 - Okumatsu_Hiroshiの覚書を参考に。

[bash]
$ sudo vi /etc/default/grub
[/bash]
でブート設定ファイルを開き、デフォルトでは
[text]
GRUB_DEFAULT=0
[/text]
となっているところを、ブートしたいOSの番号に書き換えればよい。番号はPC起動時にでるブートメニューを上から順に0,1,2,...と数えた時の番号だ。最後に
[bash]
$ sudo update-grub
[/bash]
とやって終わり。

2011年10月28日金曜日

Ubuntu に Eclipseをインストールして日本語化

Javaのインストール


【Ubuntu】JAVA 7 (JDK 1.7.0) インストール (ただ、色々問題が・・・):を参考にインストール

Java SE Downloadsよりjdkをダウンロード

解凍→フォルダ移動
[bash]
$ cd ダウンロード
~/ダウンロード $ tar xf jdk-7u1-linux-i586.tar.gz
~/ダウンロード $ sudo cp -R jdk1.7.0 /usr/lib/jvm/
[/bash]

JAVA 有効化ツールインストール→実行
[bash]
$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt-get update
$ sudo apt-get install update-java
$ sudo update-java
[/bash]

確認

[bash]
$ java -version
[/bash]

Eclipseのインストール


【Ubuntu 11.04】 Eclipse 3.7M6(Indigo) + CDT 8.0 + Pleiades 1.3.3(日本語化):なんでもかんでもコンピュータ:So-netブログを参考にインストール

Eclipse Project DownloadsからEclipseをダウンロード。日本語化に利用するPleiades - Eclipse プラグイン日本語化プラグインが3.x系にしか対応していないので3.7.1をダウンロードした。

解凍→インストール
[bash]
$ cd /usr/local/lib
/usr/local/lib$ sudo tar xf ~/ダウンロード/eclipse-SDK-3.7.1-linux-gtk.tar.gz
[/bash]

起動コマンドの作成
[bash]
$ cd /usr/bin
/usr/bin$ sudo vi eclipse
[/bash]
以下のようなファイル作成
[bash]
#!/bin/sh

export GDK_NATIVE_WINDOWS=true
ECLIPSE=/usr/local/lib/eclipse/eclipse
exec $ECLIPSE "$@"
[/bash]
実行権限付与
[bash]
/usr/bin$ sudo chmod +x eclipse
[/bash]

起動メニュー作成
[bash]
$ cd /usr/share/applications/
$ sudo vi eclipse.desktop
[/bash]
下記を記入
[text]
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=eclipse
Icon=/usr/local/lib/eclipse/icon.xpm
Terminal=false
Type=Application
Categories=GNOME;Application;Development;
StartupNotify=true
[/text]

日本語化


Pleiades - Eclipse プラグイン日本語化プラグイン からPleiades本体をダウンロード
[bash]
$ cd /usr/local/lib/eclipse/
/usr/local/lib/eclipse$ sudo unzip ~/ダウンロード/pleiades.zip
/usr/local/lib/eclipse$ sudo vi eclipse.ini
[/bash]
最終行に以下を追加
[text]
-javaagent:/usr/local/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
[/text]
スプラッシュ変更のため、2行コメントアウト
[text]
#-showsplash
#org.eclipse.platform
[/text]

初起動


一度ログアウトか再起動してから
[bash]
$ eclipse -clean
[/bash]
で起動。以降は -clean は不要

Ubuntuにrpmパッケージインストール

rpmパッケージをインストールするにはalienというrpmをdebに変換するコマンドが便利らしい。参考UbuntuでRPMをインストールする件 - システムエンジニア奮闘記 ~ダメダメSEの備忘録~


alienをインストール


[bash]
sudo apt-get install -y alien
[/bash]

rpmのインストール


alienを使ってrpm -> deb 変換
[bash]
sudo alien Package.rpm
[/bash]
直接インストール
[bash]
sudo apt-get install -y Package.rpm
[/bash]

2011年9月9日金曜日

Wordpress移転

http://wordpress.takkyuuplayer.vagrant/ 上のWordpressをローカルの Ubuntu11.04 にバックアップ。その手順のまとめ。これはWordpress移転にも使える。

DBのエクスポート


phpmyadminを用いて、Wordpress関連の全テーブルをエクスポート。その際、
[text]
DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT
[/text]
にチェックを入れるのを忘れずに。仮にnetau.sqlというファイル名で保存されたものとする。

Wordpressファイルのダウンロード


FileZilla のインストール
[bash]
~$ sudo apt-get install filezilla
[/bash]
/var/www/の権限変更
[bash]
~$sudo chown -R takkyuuplayer:www-data /var/www/
~$sudo chmod 750 /var/www/
~$sudo usermod -g www-data takkyuuplayer
[/bash]
Filezillaを起動しhttp://wordpress.takkyuuplayer.vagrant/のpublic_htmlディレクトリの中身を/var/www/netauに突っ込んだ。

local環境の準備


mod_rewriteをONにする。
[bash]
~$sudo a2enmod rewrite
[/bash]
Overrideを許可する。
[bash]
~$ sudo vi /etc/apache2/sites-available/default
[/bash]
[text]

Options Indexes FollowSymLinks MultiViews
AllowOverride None -> Allに変更
Order allow,deny
allow from all

[/text]
apache再起動
[bash]
~$ sudo /etc/init.d/apache2 restart
[/bash]
.htaccessのpermissionを777に。
[bash]
~$ chmod 777 /var/www/netau/.htaccess
[/bash]

データベースの作成


/var/www/netau/wp-config.phpを開く
[bash]
~$ vi /var/www/netau/wp-config.php
[/bash]
ホスト名はlocalhostに変える。その他も変えたければ変更する。
[php]
/** MySQL のホスト名 */
define('DB_HOST', 'localhost');
[/php]
wp-config.phpファイルを参考に、ローカルのMySQLサーバー上にDBを作成。文字コードの照合順序(utf8_general_ciにする)に注意。
エディタでnetau.sqlを開き、wordpress.takkyuuplayer.vagrant→wordpress.takkyuuplayer.vagrantに全置換
phpmyadminにnetau.sqlをインポートし実行。

バックアップできているか確認


http://wordpress.takkyuuplayer.vagrant/にアクセスし、正常に表示されるか見てみる。
文字化けしたら

データベースの照合順序やnetau.sqlの文字コードを確認しよう。
404になったら

mod_rewriteの設定が怪しい。パーマリンク設定をデフォルトに変えて記事が表示されるようなら、mod_rewrite関連や.htaccessの設定を見直す必要がある。それでも表示されないならデータベースの作成をもう一度やり直そう。

以上で完了だ。

2011年9月8日木曜日

Ubuntuでキーカスタマイズ

私のPCのキーボードはいくつかのキーが反応しなくなったために、キーを入れ替える必要がある。「Ubuntu キーボード 変更」で検索するとCtrlとかWindowsキーの入れ替えについてはたくさんドキュメントが出てくるのだが、肝心の個別のキー入れ替えについてはあまり出てこなかった。しばらく探してようやく見つけたLento ma non troppo  Ubuntu キーカスタマイズを参考にキーボードを入れ替えた。その備忘録。

keycodeの取得


GNOME端末を起動し
[bash]
$ xev
[/bash]
を実行。すると小さなウィンドウが出てくる。変更したいキーを押すと
[text]
KeyRelease event, serial 36, synthetic NO, window 0x4600001,
root 0xb2, subw 0x0, time 5490328, (-486,266), root:(158,319),
state 0x0, keycode 111 (keysym 0xff52, Up), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
[/text]
のような結果が出力されるのでこのkeycodeをメモしておこう。

keyeventの取得


[bash]
$ xmodmap -pke | grep 111
keycode 111 = Up NoSymbol Up
$ xmodmap -pke | grep 113
keycode 113 = Left NoSymbol Left
[/bash]
この Up NoSymbol Up などがkeyeventだ。

.xmodmap ファイルの作成


ホームディレクトリに .xmodmap ファイルを作成する
[bash]
$ vi ~/.xmodmap
[/bash]
そのファイルに[keycode] = [keyevent]という形で記述し保存すれば良い。例えばUpキーとDownキーを入れ替えるには
[text]
keycode 111 = Down NoSymbol Down
keycode 114 = Up NoSymbol Up
[/text]
と記述する。

設定を反映


[bash]
$ xmodmap ~/.xmodmap
[/bash]
これでUpキーとDownキーが入れ替わった。

ログイン時の自動キー設定読み込み


ホームディレクトリに .xinitrc ファイルを作成し
[bash]
$ vi ~/.xinitrc
[/bash]
以下のように記述する。
[text]
xmodmap $HOME/.xinitrc
[/text]

Ubuntu11.04をインストール

先日、ふと間違えてUbuntuの起動ディスクを入れたまま電源を入れてしまい、あちゃーミスったーと思っていたら Ubuntu 爆速!! ということに気づいた。その速さに取り付かれ、2日後にはもっっっっっっさりしていた Windows Server 2008 R2 から Ubuntu 11.04 へとOSを入れ替えた。しばらくUbuntuをデスクトップとして使ってみようと思う。

ハードウェア的な性能は
 HDD: 40GB
 Memory: 2GB
 Swap?: 2GB
 CPU: Core 2 Duo T7300 2.00GHz × 2

という感じ。HDDは40GB/120GBでパーティション区切って、あとでWindowsをデュアルブートできるようにしておいた。Ubuntu Desktop 日本語 Remix CDのダウンロード | Ubuntu Japanese TeamからDLした日本語版Ubuntuをインストール。セキュリティアップデート完了ですべて終了。この間30分ほど。


なんか普通にデスクトップとして使えそうな感じですなー

システムモニタはこんなかんじ。

(いろいろソフト導入したのもあるけど)Windowsのときは起動しただけで1.3GBくらいメモリ使ってたのが今は300MB程度。CPU使用率ももともと20%くらいだったのが10%前後。Ubuntuは軽くていいね!これからどんどんカスタマイズしていこう。

2011年6月9日木曜日

SRM 408 DIV2

191.64/250
[java]
public class TournamentJudging {

public int getPoints(int[] rawScores, int[] conversionFactor) {
System.out.println("!");
int score = 0;
for(int i=0; i int tmp = rawScores[i] % conversionFactor[i] < (conversionFactor[i]+1)/2 ?
rawScores[i]/conversionFactor[i] :
rawScores[i]/conversionFactor[i]+1;
System.out.println(tmp);
score += tmp;
}
return score;
}
}

[/java]

SRM 148 DIV1|177.09/250

トランプのゲームの問題
[java]
public class CircleGame {
public int cardsLeft(String deck) {
boolean end = false;
deck = deck.replaceAll("K", "");
System.out.println(deck);
for(int i=0; i if( parse(deck.charAt(i)) + parse(deck.charAt(i+1) ) == 13 ) {
deck = deck.substring(0, i) + deck.substring(i+2);
i++;
}
}

while (deck.length() > 1 && parse(deck.charAt(0))+parse(deck.charAt(deck.length()-1)) == 13 )
deck = deck.substring(1, deck.length()-1);

return deck.length();
}

public int parse(char ch) {
if ('A' == ch)
return 1;
else if ('T' == ch)
return 10;
else if('J' == ch)
return 11;
else if('Q' == ch)
return 12;

return ch - '0';

}
}
[/java]

2011年6月4日土曜日

無料レンタルサーバーでWordpress

無料レンタルサーバーといえば広告がついたり、サーバーの性能が悪くてWordpressが重かったりする。そんな中、ある程度快適な無料レンタルサーバーを発見。

Free Web Hosting with PHP, MySQL and cPanel, No Ads

海外サーバで英語である点、時々DBエラーが発生する点は少し難点だが、広告無し、容量1.5GB、Wordpressが快適に動くという利点は捨てがたい。なおPHP以外のRubyとかPerlとかは有料アカウントにアップグレードしないと使えないので注意。導入方法は以下が参考になる。

WordPressも使える無料レンタルサーバー | Adsense Mania アドセンスマニア - Google Adsense アドセンスで稼ぐ攻略ブログ

なお上記サイトではWordpressをサーバーにアップロードする手段としてSota's Web Page (FFFTP)の利用を推奨しているが、FFFTPはサーバー負荷を下げるためか大量のファイルを転送するとエラーが発生する。つまりWordpressのアップロードがうまくいかない。そこで、FTPクライアントとしてはFileZilla - Client Downloadをお勧めする。ちゃんと日本語化されているのでご安心を。

2011年4月28日木曜日

SRM 146 DIV1 | 257.77/300

格子の中に存在する長方形の数を答える問題。
[java]
public class RectangularGrid {
public long countRectangles(int width, int height) {
long wid = (long)width;
long hei = (long)height;
long allRect = (wid+1)*wid/2 * (hei+1)*hei/2;
long square = 0L;
for(int i=0; iheight ? 0 : height-i;
square += wlength * hlength;
}
long result = allRect - square;
return result;
}
}
[/java]

2011年4月26日火曜日

SRM 145 DIV1 | 122.11/250

数字列を割合に変換し、あまりをポイント高い順に振り分ける
[java]
public class Bonuses {
public int[] getDivision(int[] points) {
int total = 0;
int max = 0;
for(int point : points) {
total += point;
max = Math.max(max, point);
}

int[] division = new int[points.length];
for(int i = 0; i division[i] = (points[i] * 100) / total;

int divtotal = 0;
for(int div : division)
divtotal += div;

int rest = 100 - divtotal;
loop:while(max > 0 && rest>0) {
for( int i=0; i0; i++) {
int plus = (points[i]==max) ? 1 : 0;
division[i] += plus;
rest -= plus;
}
max--;
}
return division;
}
}
[/java]

2011年4月24日日曜日

SRM 160 DIV1 | 90.00/300

指定の形式で暗号化されたバイナリ列をもとに戻す問題

[java]
public class BinaryCode {
public String[] decode(String message) {
int DEGIT = message.length();

int Q[] = new int[DEGIT];
for(int i=0; i Q[i] = Integer.valueOf(message.substring(i, i+1));

int P[] = new int[DEGIT];
String bin0="0", bin1="1";

P[0] = 0;
for(int i=0; i if( i== 0)
P[i+1] = Q[i]-P[i];
else
P[i+1] = Q[i]-P[i]-P[i-1];
if( P[i+1] < 0) {
bin0="NONE";
break;
}
bin0 += ""+P[i+1];
}
if (DEGIT > 1)
bin0 = (Q[DEGIT-1] == P[DEGIT-2]+P[DEGIT-1]) ? bin0 : "NONE";
else
bin0 = (Q[DEGIT-1] == P[DEGIT-1]) ? bin0 : "NONE";


P[0] = 1;
for(int i=0; i if( i== 0)
P[i+1] = Q[i]-P[i];
else
P[i+1] = Q[i]-P[i]-P[i-1];
if( P[i+1] < 0) {
bin1="NONE";
break;
}
bin1 += ""+P[i+1];
}
if (DEGIT > 1)
bin1 = (Q[DEGIT-1] == P[DEGIT-2]+P[DEGIT-1]) ? bin1 : "NONE";
else
bin1 = (Q[DEGIT-1] == P[DEGIT-1]) ? bin1 : "NONE";

return new String[] {bin0, bin1};
}
}
[/java]

2011年4月22日金曜日

SRM 160 DIV2 |249.79/500

長方形の共通部分の面積を求める問題
[java]
public class Intersect {
public void main(String args[]) {
}
public int area(int[] x, int[] y) {
if(x.length % 2 == 1 || y.length %2 == 1 || x.length != y.length)
return 0;

int Xmax=10000, Xmin=-10000;
int Ymax=10000, Ymin=-10000;

for(int i=0; i int xmax = Math.max(x[i], x[i+1]);
int xmin = Math.min(x[i], x[i+1]);

Xmax = Math.min(Xmax, xmax);
Xmin = Math.max(Xmin, xmin);
}
for(int i=0; i int ymax = Math.max(y[i], y[i+1]);
int ymin = Math.min(y[i], y[i+1]);

Ymax = Math.min(ymax, ymax);
Ymin = Math.max(ymin, ymin);
}

int area = 0;
area = (Xmax - Xmin) * (Ymax - Ymin);
return area >= 0 ? area : 0;
}
}
[/java]