load data local infile時にMySQLで文字化けしてしまう

ちょっとハマったのでメモ

  • MySQL5.1.71
  • CentOS 5.2

MySQLでSjisファイルをロードするときに文字化けしてしまう

$ export LANG=ja_JP.sjis	# 効かない
$ mysql -uroot -hhost -ppass --local-infile=1 --default-character-set=sjis << Eof
use mysql
;
set names sjis	# 効かない
;
load data local infile "sjis.txt" into table table
;
Eof

悩みました

$ mysql -uroot -hhost -ppass --local-infile=1 --default-character-set=sjis << Eof
use mysql
;
set character_set_database=sjis	 # これでOK
;
load data local infile "sjis.txt" into table table
;
Eof

どうやらDBの設定がおかしかったようです

mysql> show global variables like "%charac%";
+--------------------------+--------------------------------------------------------------+
| Variable_name						| Value																												|
+--------------------------+--------------------------------------------------------------+
| character_set_client		 | latin1																											 |
| character_set_connection | latin1																											 |
| character_set_database	 | latin1																											 |
| character_set_filesystem | binary																											 |
| character_set_results		| latin1																											 |
| character_set_server		 | latin1																											 |
| character_set_system		 | utf8																												 |

これを変更するにはmy.cnfに設定し再起動すればOKです

$ vi my.cnf
[mysql]
default_character_set = sjis
[mysqld]
character-set-server=sjis

グローバル変数もこうなります

mysql> show global variables like "%charac%";
+--------------------------+----------------------------+
| Variable_name						| Value											|
+--------------------------+----------------------------+
| character_set_client		 | sjis											 |
| character_set_connection | sjis											 |
| character_set_database	 | sjis											 |
| character_set_filesystem | binary										 |
| character_set_results		| sjis											 |
| character_set_server		 | sjis											 |
| character_set_system		 | utf8											 |

macを10.9.1にバージョンアップしたらmac->winのSynergyでバックスラッシュが効かなくなってしまった場合の対処

サーバ側

  • MacOS 10.9
  • SynergyKM

クライアント側

  • windows7
  • Synergy1.3.1a-ja

こちらを参考に、http://wiki.nothing.sh/page/memo/Synergy 上記構成でMacをサーバにWindowsをクライアントとしてSynergyを使っていたのですが、どうやら10.9.1にバージョンアップしたらWindows側でバックスラッシュ「¥」が効かなくなってしまいました。

10.9.1のReleaseNoteをチラッと見ると、日本語入力周りの修正等と書いてあったのでもしやこれに引っかかったか?

非常に不便なので、ダメ元でWindows側のSynergyを1.3.1-jaに変更。

どうせ一緒だものね。

と、なんと、これでバックスラッシュが効くようになったとさ。

今回のMacOSのアップデートで、どうやらずいぶんと前からある不具合を直したのでしょうか?

LinuxからMac10.9へリモートディスプレイでX上のFirefoxを動かす

ちょっとはまったのでメモ。

通常X-Windows同士はお互いに、リモートでディスプレイ上のものを映すことができます。

A:Linux

B:Linux

A->BへsshでログインしBのFirefoxを起動しAのX上で操作するということです。

意外とこれが便利。

X-Windowを搭載しているMacでも同じことが当然できるはず。

ということで試してみる

古い記憶を辿りながら

Local

mac 10.9(hostname:mac,ip:192.168.0.1)

remote

RedHat 5.8 (hostname:linux,ip:192.168.0.2)

Macでの設定

[mac] $ xhost +

Linux側での設定

[mac] $ ssh linux
[linux] $ export DISPLAY=192.168.0.1:0
[linux] $ firefox
Error: cannot open display: 192.168.0.1:0

これが起動しない。

こちらに解決法が。。

http://ruepprich.wordpress.com/2013/01/08/x11-forwarding-on-os-x-10-8-2-mountain-lion/

Macでの設定

[mac] $ sudo xhost + linux

Linux側での設定

[mac] $ ssh -X linux
[linux] $ firefox

見事にMac側にFirefoxのウインドウが。。

DISPLAYは必要ないのね。。

Mahoutでjava.util.NoSuchElementExceptionが出た時の対処

機械学習用のライブラリ、ApacheMahoutを使用していてちょっと困ったのでメモ

import java.io.*;
import java.util.*;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.recommender.*;
import org.apache.mahout.cf.taste.impl.recommender.GenericItemBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.similarity.ItemSimilarity;

class test{

	public static void main(String[] argv){
		try{
			DataModel model=new FileDataModel(new File("test.csv"));
			ItemSimilarity similarity=new PearsonCorrelationSimilarity(model);
			Recommender recommender= new GenericItemBasedRecommender(model,similarity);
			List recommendations=recommender.recommend(1,5);
			for(RecommendedItem recommendation:recommendations){
				long recommendCode=recommendation.getItemID();
				System.out.println(recommendCode);
			}
		}catch(Exception e){}
	}
}

こんなかんじでアイテムベースのレコメンドを作成していたのですが、CSVファイルを読み込んだ際に

java.util.NoSuchElementException
				at com.google.common.base.AbstractIterator.next(AbstractIterator.java:75)
				at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processLine(FileDataModel.java:384)
				at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.processFile(FileDataModel.java:340)
				at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.buildModel(FileDataModel.java:239)
				at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.reload(FileDataModel.java:208)
				at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.(FileDataModel.java:194)
				at org.apache.mahout.cf.taste.impl.model.file.FileDataModel.(FileDataModel.java:149)

こんなエラーが出て進まない時がある。実行したのはLinux64Bit環境のjdk1.6。

同じものをwindows7のjdk1.6で動かしてもエラーが出ない。。。

読み込んだCSVは600万行程度

よくわからないのですがCSVの最後に改行を入れるとエラーなく動作。

わけわからん