ミムの部屋

社内SEが,興味をもったことを書いていきます.

Mac(OS X EI Capitan)にLatexを入れる?(OS X EI Capitan,Latex,tlmgr)

今回はTexMacに入れることにしました.なぜかと言いますと,MacのソフトウェアアップデートをしてOS X EI Capitanになった際に,Latexが使えなくなったためです.なので,入れるというよりはLatexの更新?が正しい表現だと思います.とりあえず,下のようにやったらできたので参考にできる人はしてください!!!

tlmgrのインストール

私はtlmgrが入っていなかったため入れることにしました. まず,ここから「 install-tl-unx.tar.gz」をダウンロードしてください. そして,以下のコマンドを打ってください!!
$ tar xvf install-tl-unx.tar.gz
$ cd install-tl* # 解凍したディレクトリに移動
$ sudo ./install-tl --repository http://www.ring.gr.jp/pub/text/CTAN/systems/texlive/tlnet/

# 途中で以下の出力が出る
Actions:
  start installation to hard disk
  help
  quit
Enter command: I # "I"で続行する

$ sudo /usr/local/texlive/????/bin/*/tlmgr path add

Texのインストール?更新?

$ sudo tlmgr update --self --all
$ tlmgr info jfontmaps # jfontamapsのrevisionが38527以降であることをを確認
package:     jfontmaps
category:    Package
(中略)
installed:   Yes
revision:    38527 # ここに注目!!!
(中略)
cat-version: 20151002.0

$ cd /usr/local/texlive/2015/texmf-dist/scripts/cjk-gs-integrate
$ sudo perl cjk-gs-integrate.pl --link-texmf --force
$ sudo mktexlsr

# ヒラギノフォント関連
$ sudo updmap-sys --setoption kanjiEmbed hiragino-elcapitan       (ヒラギノの N シリーズでない方を埋め込む場合)
$ sudo updmap-sys --setoption kanjiEmbed hiragino-elcapitan-pron  (ヒラギノの N シリーズを埋め込む場合)
私はこれを行ってできました.と言っても参考WEBページをなぞっただけですけど...

参考サイト

疎行列計算(UJMP,疎行列,Java8,ラムダ式)

今回は私的な行列計算のコードをアップします.なので,説明を書こうとは思っていないのですいません.
後にもしかしたら入れるかもしれません.

ラムダ式を用いた行列計算

	    
long start = System.currentTimeMillis();// 開始時間取得
long rowline=0;// 行列の行番号の変数初期化
List rowValue = new ArrayList();// 任意の行にある非ゼロ要素の列番号リスト

// 行列計算
for(long[] m : m1.availableCoordinates()){
     if(rowline == m[0]){
      rowValue.add(BigDecimal.valueOf(m1.getAsDouble(m[0], m[1]) * a.getAsDouble(m[1], 0)));
     } else {
        // リストrowValueの値を合算し,行列にセット
        a_tmp.setAsDouble(rowValue.parallelStream().reduce((value1, value2) -> value1.add(value2)).get().doubleValue(), rowline, 0);
        rowline = m[0];// 行番号を更新
	rowValue.clear();// リストを初期化
	rowValue.add(BigDecimal.valueOf(m1.getAsDouble(m[0], m[1]) * a.getAsDouble(m[1], 0)));
     }
}
     a_tmp.setAsDouble(rowValue.parallelStream().reduce((value1, value2) -> value1.add(value2)).get().doubleValue(), rowline, 0);
     
     long end = System.currentTimeMillis();// 終了時間取得
     System.out.println("time:" + (end-start) + "ms");// 実行時間表示

非ゼロ要素のみ対象にした行列計算

	    
long start = System.currentTimeMillis();// 開始時間取得
long rowline = 0L;//  行列の行番号の変数初期化
Double sum =0.0;

for(long[] m : m1.availableCoordinates()){
      if(rowline == m[0]){
         sum += m1.getAsDouble(m[0], m[1]) * a.getAsDouble(m[1], 0);
      } else {
	        a_tmp.setAsDouble(sum, rowline, 0);
		rowline = m[0];
		sum = m1.getAsDouble(m[0], m[1]) * a.getAsDouble(m[1], 0);
	}
}

a_tmp.setAsDouble(sum, rowline, 0);
		
long end = System.currentTimeMillis();// 終了時間取得
System.out.println("time:" + (end-start) + "ms");
System.out.print("a: \n" + a_tmp );

行のリストからの行列計算

	
		long start = System.currentTimeMillis();// 開始時間取得
		List rowList = m1.getColumnList();// 行のリスト取得
		for(int i=0; i < rowList.size(); i++){
			Matrix row = rowList.get(i);
			double listSum =0.0;
			for(int j=0; j< row.getColumnCount(); j++){
				listSum += rowList.get(i).getAsDouble(0, j) * a.getAsDouble(j, 0);
			}
			a_tmp.setAsDouble(listSum, i, 0);
		}
		long end = System.currentTimeMillis();// 終了時間取得
		System.out.println("time:" + (end-start) + "ms");// 実行時間表示

ラムダ式を用いた並列行列計算

public class Parallel {
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		
		m1.getRowList().parallelStream()
		  .map(matrix -> Parallel.getTimesValue(matrix, a));
		  .forEachOrdered(value -> Parallel.aList.add(value));

		long end = System.currentTimeMillis();
		System.out.println("time:" + (end-start) + "ms");
	}
	static double getTimesValue(Matrix matrix, Matrix a){
			
		    double listSum =0.0;
			for(int i=0; i< matrix.getColumnCount(); i++){
				listSum += matrix.getAsDouble(0, i) * a.getAsDouble(i, 0);
			}
			return listSum;
	}

参考サイト

HITSアルゴリズム

今回は,ランキングを作成する際に使用されるアルゴリズムの一つであるHITSアルゴリズムを説明したいと思います.

HITSアルゴリズム概要と具体例

HITSAlgorithm01.png HITSAlgorithm02.png てな感じで理解しました.違うところがあった場合は,コメントしていただけると嬉しいです!!

参考サイト・文献

JUMANをUbuntuにインストールしてみる

今回は,Mecabなどと同じ形態素解析器であるJUMANを入れてみたいと思います.
といっても,ただ単にどのようにコマンドを書くだけなんですけど笑 JUMANのファイルは,ここからお願いいたします.
$ tar -xf juman-7.01.tar.bz2 
$ cd juman-?.??
$ ./configure
$ make
$ sudo make install
$ sudo apt-get install libjuman4
$ juman

適当に文を打ってみる

適当に てきとうに 適当だ 形容詞 3 * 0 ナ形容詞 21 ダ列基本連用形 7 "代表表記:適当だ/てきとうだ"
文 ぶん 文 名詞 6 普通名詞 1 * 0 * 0 "代表表記:文/ぶん 漢字読み:音 カテゴリ:抽象物"
を を を 助詞 9 格助詞 1 * 0 * 0 NIL
打って うって 打つ 動詞 2 * 0 子音動詞タ行 6 タ系連用テ形 14 "代表表記:打つ/うつ"
みる みる みる 接尾辞 14 動詞性接尾辞 7 母音動詞 1 基本形 2 "代表表記:みる/みる"

参考サイト

シェルスクリプトでプログレスバーを作成

今回は,シェルスクリプトプログレスバーを作成したいと思います.
作成したいと思った理由としては,なんかシステムの進捗具合を知りたい時にわかりやすいと思ったからです.
とりあえず,簡易的に作ったコードを下に載せておきます.
#!/bin/bash

var=("[          ]" "[-         ]" "[--        ]" "[---       ]" "[----      ]" "[-----     ]" "[------    ]" "[-------   ]" "[--------  ]" "[--------- ]" "[----------]")
for i in 0 1 2 3 4 5 6 7 8 9 10
do
     echo -e "${var[$i]}"$i"%\r\c"
     sleep 1
done
いろいろ引っかかった部分があるのですが,それは後で書きます.すいません.

参考サイト

シェルスクリプトで変数に代入した際のミス(シェルスクリプト)

今回は,だいぶ小一時間くらいハマっていたことを書いときます. シェルスクリプトを書いていたら,変数が「not found」という感じで全然代入できなかった. いろいろ調べていたら,次のこと原因だったことがわかった.
# エラーになったコード
x = $1

# エラーにならなかったコード
x=$1
つまり,「=」の前後に空白を入れると代入してくれない状況になってました.原因がわかった瞬間,すごい脱力しました.

参考サイト

シェルスクリプトからRでグラフ作成(Ubuntu,R,シェルスクリプト)

今回はシェルスクリプトでRを呼び出し,グラフを作成することにします.
データをグラフ化するシステムを作るとすごく便利になんじゃないかと思って調べ見ました!!
シェルスクリプトからRを呼び出すためには,以下の二つが必要らしいです.
  1. シェリスクリプトファイル(ここでは,plot.sh)
  2. Rで実行するファイル(ここでは,plot.R)
それぞれのファイルは以下のように書きました.

・plot.sh

#!/bin/sh
# $1:入力ファイル名,$2:出力ファイル名
R --vanilla --slave  --args $1 $2 < plot.R

・plot.R

args <- commandArgs(trailingOnly = T)
x=read.csv(args[1],header=FALSE)
png(args[2])
plot(x,type="l")
dev.off()
入力ファイルのデータは,以下のようなn行2列と想定しています(それ以外でやっていない).

入力データ例

0,71
1,46
2,38
3,42
4,35
5,42
6,44
7,63
8,424
9,871
10,893
11,86
12,160
13,172
14,593
15,104
16,114
17,113
18,89
19,175
20,146
21,142
22,310
23,587

実行例

実行例として,以下のコマンドを打ってみる.
$ ./plot.sh 入力ファイル名 出力ファイル名
これで作成されたグラフは,以下のようになります. 2015-06-1.png
なんとかできました.よかったよかった(⌒-⌒; )

参考サイト