物理マシンにCentOSをインストール

物理マシン(2005年製ノートPC)にCentOSをインストールした.以下は手順メモ.

1. 以下から,CentOSのisoファイルをダウンロード.バージョンは6.5,32bitCPUに入れるのでi386のものにした.
また,CD-Rが1枚で済む用にminimal版を落とした.
サイト
http://ftp.riken.jp/Linux/centos/6.5/isos/i386/
直リンク
http://ftp.riken.jp/Linux/centos/6.5/isos/i386/CentOS-6.5-i386-minimal.iso

2. Windowsエクスプローラだと,isoイメージがうまく作れないようなので,
DeepBurnerというフリーソフトでisoイメージをCD-Rに焼く

3. 物理マシンのBIOSを起動し,CD/DVDドライブから読み込む

4. インストールが完了すると,CD-Rの取り出し,その後の起動でCUIが立ち上がる

5. rootとパスワードでログイン,以下のサイトを参考にし,ネットワーク設定を実施
http://futurismo.biz/archives/1340
簡単にいうと,NICのONBOOTをyesに切り替える.
emacsが使えず,viを使った.その後再起動.

6. LANケーブル繋いで,「yum -y update」でアップデートする
7.yum -y install emacs」でemacsを入れる
8. CentOSGUIを入れるために,以下を参考にして「#yum -y groupinstall "X Window System" "Desktop" "General Purpose Desktop"」した.
http://momijiame.tumblr.com/post/34761056874/centos-6-3-gui-x-window-system
起動時GUIに初期設定するには以下.
「# sed -i "s/id:3:initdefault:/id:5:initdefault:/g" /etc/inittab」

9. GUI初回起動で文字化けしてしまう(jaでCUIセットアップしたから)
なんとかターミナル(端末)まで辿り着く

10. システムの文字コードを「en_US.UTF-8」に変更する.やり方は以下参考にした.
http://www.server-world.info/query?os=CentOS_6&p=locale

SPFレコード設定

迷惑メールになる確率を下げられるよう、SPFレコード設定をしてみました。

参考:
SPF (Sender Policy Framework)とは、 電子メールの送信元ドメインが詐称されていないかを検査するための仕組みです。

環境は、ドメインを「お名前.com」サーバーを「lolipop(ロリポップ)」です。


0. お名前.com のネームサーバ (他のネームサーバを利用) の設定内容確認

ここの内容がお名前.comのネームサーバにあたるが、
プライマリーネームサーバに uns01.lolipop.jp
セカンダリネームサーバに uns02.lolipop.jp
を登録していた。(この状態からスタート)


1. お名前.com のDNS関連機能の設定

DNSレコード設定を利用する から 必要な情報を入力しておく必要がある。

【①】
TYPE TXT
TTL 3600
VALUE v=spf1 ip4:210.172.144.0/24 ip4:210.157.22.0/25 ip4:203.189.109.0/24 ip4:112.78.119.173 ~all
【②】
TYPE A
TTL 3600
VALUE (ロリポップ ユーザ専用ページにある サーバIPを書く)
【③】
TYPE MX
TTL 3600
VALUE mx01.lolipop.jp
優先 10

の3つを設定する。


2. お名前.com にDNSレコード情報が適用されたか確認

http://www.cman.jp/network/support/nslookup.html
このサイトで、ホスト名を自分のドメインDNSサーバに「01.dnsv.jp」を入れて実行

設定した3つのレコードが適用されてから「手順3」にうつる


3. お名前.com のネームサーバ (他のネームサーバを利用) の設定内容を変える

プライマリネームサーバに 01.dnsv.jp
セカンダリネームサーバに 02.dnsv.jp
あと、 03.dnsv.jp、04.dnsv.jp もいれる


4. お名前.com のネームサーバ情報が 01.lolipop.jpから01.dnsv.jp に書き変わってるか確認する

http://www.cman.jp/network/support/nslookup.html
このサイトで、ホスト名を自分のドメインDNSサーバに「8.8.8.8」を入れて実行

01.lolipop.jpから01.dnsv.jp に書き変わるまで待つ


5. SPFレコードが正しく設定できているか確認

http://www.sendmail.co.jp/sa/spfcheck.html
このサイトで、ホスト名を自分のドメイン、送信者メールアドレスに自分が送るメールアドレスを入力し
Submitする。

結果画面で「Pass」になればOK


注意がいくつか
※レコード情報より先にネームサーバ情報を変えるとレコードが適用されていないのに参照して、
その間メール機能がダウンする可能性がある
※レコード情報をいくら変えても、ネームサーバ情報で外部のネームサーバを指定していれば
レコード設定が無視される
ロリポップDNS側にレコード設定ができない



参考になったサイトはこちら。
http://www.daigonet.com/daigo/2011/10/comgoogleapps.html

mahoutを使って協調フィルタリングを実行してみる

機械学習ライブラリの「Apache Mahout」を使って、
簡単にWindows機のeclipse上に協調フィルタリング(CF)の環境を整える。

ある程度環境が事前に整っていれば、30分で構築可能。

                                                                                                                  • -

1. eclipseについて

4.3 ultimate が良いが 3.7 Java Developer 以上なら問題ないはず。
要はMavenが元々入ってるeclipseを使うべき。

入ってるかどうかは後の「手順4」でうまくいかないのであれば、
eclipseを入れ直すべき。

                                                                                                                  • -

2. javaのbuild path

eclipse上のjavaはどのライブラリで走るかによるが注意が必要。
念の為、コマンドプロンプトで「java -version」「java -verbose」で
Java7(java1.7)64bitでbuild pathの位置を確認した。

mahoutだけなら問題ないそうだが、hadoopを入れる際は、
どうも「Program Files」などフォルダにスペースが入るような場所に
Javaライブラリがあると参照出来ないようなので、
念の為に「c:\java\java1.7\」にインストールし直した

                                                                                                                  • -

3. mahoutのsrcをdownload

mahout official release の0.8 srcをzipでダウンロードすればいいんじゃね、
と思いダウンロードしたらうまくいったのでコレでいいはず。

mahout-distribution-0.8-src.zip
http://ftp.riken.jp/net/apache/mahout/0.8/mahout-distribution-0.8-src.zip

あらゆるサイトにcygwinを入れろとかコマンドプロンプトになんかしろとか
eclipse用のフォルダをコマンドで生成しろとかどーでもいい。

                                                                                                                  • -

4. eclipseにprojectを立てる

javaプロジェクトじゃなくて、mavenプロジェクトを立てる必要がある。

パッケージエクスプローラ→新規→その他→「mavenプロジェクト」
「シンプルなプロジェクトの作成」→「次へ」
「グループidとアーティファクトidを適当に入れる」ex. mahout

                                                                                                                  • -

4.5. mahoutにbuild pathを通す

maven project直下にdownloadしたmahoutを置く(もちろんzip解凍後に)
その後「ビルドパスの追加」「クラス・フォルダーの追加」で置いたmahoutを選んでbuild pathを通す
(12/10 8:15 追記)

                                                                                                                  • -

5. eclipse projectのpom.xmlを編集する

versionの下に以下を追加すればよい。
注意するのはmahoutパッケージのversionと合わせないとエラーを吐く。
上記で「0.8」をdownloadしたので、0.8と入力。


以下は追加する必要がありそうな一部


org.apache.mahout
mahout-core
0.8


org.apache.mahout
mahout-math
0.8


org.apache.mahout
mahout-examples
0.8


                                                                                                                  • -

6. sampleデータを用意する

src/main/resourcesの下にdata.csvとなるデータを入れる

1,101,1.5
1,102,4.5
1,103,2.5
1,104,2.5
1,105,1.0
2,101,2.0
2,102,3.5
2,103,3.0
2,104,2.5
2,105,3.0
2,106,4.0
3,101,2.5
3,104,3.0
3,105,5.0
3,107,5.0
4,101,5.0
4,103,3.0
4,104,4.5
4,106,4.0
4,107,1.0
5,101,4.0
5,102,3.0
5,103,2.0
5,104,5.0
5,105,3.5
5,106,1.0
6,101,2.0
6,102,4.0
6,103,1.0
6,104,5.0
6,105,3.5
6,106,1.0

                                                                                                                  • -

7. 実行javaプログラムを用意する

src/main/javaの下にMahoutSample.javaを用意する。

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class MahoutSample {

/**
* Mahoutの簡単なサンプル 1番のユーザに対するレコメンドを1つだけ出力します。
*
* @param args
*/
public static void main(String[] args) {
try {
// データの取り込み
DataModel dataModel = new FileDataModel(new File(
"src/main/resources/data.csv"));
// 相関性の評価基準の設定
UserSimilarity similarity = new PearsonCorrelationSimilarity(
dataModel);
// 評価の近い人を探すロジックを決めてる?
UserNeighborhood neighborhood = new NearestNUserNeighborhood(3,
similarity, dataModel);
// レコメンダの作成
Recommender recommender = new GenericUserBasedRecommender(
dataModel, neighborhood, similarity);

// 1番の人に対するレコメンドが1つ
List recommendations = recommender.recommend(1, 1);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}

System.out.println("end");

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TasteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

                                                                                                                  • -

8. 実行する

実行結果は以下のように出るはず

12 10, 2013 7:28:23 午前 org.slf4j.impl.JCLLoggerAdapter info
情報: Creating FileDataModel for file src\main\resources\data.csv
12 10, 2013 7:28:23 午前 org.slf4j.impl.JCLLoggerAdapter info
情報: Reading file info...
12 10, 2013 7:28:23 午前 org.slf4j.impl.JCLLoggerAdapter info
情報: Read lines: 32
12 10, 2013 7:28:23 午前 org.slf4j.impl.JCLLoggerAdapter info
情報: Processed 6 users
RecommendedItem[item:106, value:3.9137328]
end

                                                                                                                  • -

▼自分の完成ファイル群はこちら
https://github.com/lanevok/Study/tree/master/mahout/cf_sample
(12/10 8:46追記)

▼Mahout in Actionのサンプルコードはこちらにある
https://github.com/tdunning/MiA/tree/master/src/main/java/mia/recommender
(2013/12/15 17:18追記)

※参考になったサイトは以下
http://www.mwsoft.jp/programming/mahout/install.html
 →hadoopインストールなんて不要です,mavenプロジェクトの立て方が参考に,pom.xmlの記述方法が参考に
  レコメンドのデータとソースコードは参考にせず,mahoutをコマンドから実行することはいらないので参考にならず
http://d.hatena.ne.jp/celitan/20110310/1299770999
 →mahoutいれてmavenプロジェクトさえ立てば、あとはこのサイトだけで済む

mySQLでDELETEできない

mySQL workbenchでdeleteするとエラーが発生する場合がある。
テーブルの設計的に、主キーが設定されていないテーブルが特にそう。
workbenchの設定を変えてしまえばよい。

とりあえず、SQLはこれを実行すればよい

SET SQL_SAFE_UPDATES=0;

http://www.mk-mode.com/octopress/2012/02/04/04002048/

Javaソケット通信を勉強してみた

ソケット通信とは
「2つ以上の異なるプログラム間でデータをやり取りすること」

一方はクライアントプログラムで
一方はサーバープログラム
とか

Javaでサンプルコードがあったので
いじってみた。

ちなみにクライアントから
乱数で発生させた二つの数をサーバーにおくり
サーバーが足し算した結果をクライアントに返すというもの

ソースはこちらです。
https://github.com/lanevok/Study/tree/master/Socket

ネットワーク構築の際、互換性で二度も詰んだ

家内ネットワーク再構築で
やったことが2つほどありますが、
中々うまくいかず、
結局「互換性」の問題で出来なかったり
強引に構築したりした春休みを過ごす羽目に。
ハードウェア製造機器メーカーはちゃんとわかりやすく書けよって話。

以下に詳細を示しますね。

1. WDS (Wireless Distribution System) を構築する。
→リピータ機能、アクセスポイント間通信
理由:テレビにインターネットを繋ぎたかった

ハードウェア:
・BUFFALO WHR-G301N (WDS対応)
・BUFFALO WHR-AMG54/P (WDS対応)

こんな感じ。

無理だった…。
WDSの互換性がないとか言われる始末。

このサイトに書いてあったけど、
買う時普通わからいべ!?とクレームしたいところ
http://faq.buffalo.jp/app/answers/detail/a_id/10944
より「中継機能は、従来のエアステーションシリーズに搭載されているリピーター(WDS)機能や中継器と互換性はありません。」

WDS ver1 とか書けよ!(イラッ)


2. PLC (Power Line Communication) を増設する
電力線搬送通信 (所謂、コンセントからインターネット回線ひっぱるやつ)
理由:PCが1台増えたから

ハードウェア
Panasonic BL-PA510
Panasonic BL-PA100

こんな感じ。

同じコンセントに BL-PA100とBL-PA510だけさして
ペアリング実行してもエラー
になったので
無理だった。
同じ会社の製品で通信規格一緒なのに互換性ないって
どういうことですかね。

どのサイト見てもBL-PA100をよりよくしたのがBL-PA510と
書いてあるので、互換性なくなったかーと勝手に判断。
公式サイトの仕様書にも特に書いてなさそう。

困る。