ページ

2012-06-06

javascriptでテキストマイニング

ビッグデータとかなんだとか言われてるけれども、
統計解析をするのが企業だけじゃなくて、ユーザ側からしてもいいよねってことで
javascriptでテキストマイニングをしてみた。


テキストデータを分かち書きするためには、tinysegmenterを使わせてもらいました。

そこから、tfidf値で値付けをして、k-means++でクラスタリングをした。


javascriptで作ったついでにブラウザで試せるサンプルも作った。気軽にテキストマイニングを試してもらえるとうれしい。
サンプルアプリケーション  Text Mining(javascript)


コードは↓
github  textmining-js





リンク
tinysegmenter
Data Mining Algorithms In R/Clustering/K-Means
Introduction to Information Retrieval

2012-05-28

nodejsメモ

nodejsを使う上での簡単な基礎知識としてのメモ


nodejsについて

まずクライアントサイドで動作をするjavascriptをサーバ上で動作させる為のサーバ

nodejs
サーバサイドをjavascriptで扱うことができる。

内部ではjitコンパイラであるchromeのv8 VMが使われている。



npmについて

npm[Node Package Manager]
nodejs用のパッケージ管理システム。

簡単な使用方法

npm -g install hoge ←グローバルインストール
npm install hoge ←ローカルインストール



参考リンク

Node.js 日本ユーザグループ
npm - Node Package Manager


2012-05-21

vimメモ

カーネルなどのソースコードを読むために便利なvimplugin(ctagsも)。

ctags

ctagsはタグファイルを作成するもので、vimでタグジャンプできるようになる。

ctagsのインストール
pacman -S ctags

カレントディレクトリからホームディレクトリまでtagsファイルを読込む設定
~/.vimrc

if has('path_extra')
    set tags+=tags;/Users/myuser
endif

ctags -R ←カレントディレクトリにtagsファイルが生成


taglist

開いてるファイルのtaglistを表示する。

~/.vimrc

set tags+=tags

tagsファイルを読み込めばよいので、ctagsの設定がされていれば必要ない。


vim-translator

翻訳ができるplugin。
ソースコードを読んでいる時とかに分からない単語があったら翻訳できる。

~/.vimrc

"for nodejs
let g:goog_user_conf = {'langpair': 'en|ja','cmd': 'node' ,'v_key': 'T' }

2012-05-06

hoverを使った表示の変更

まず、以下がhoverを使用したsampleである。


This is hover sample.

リンクの表示方法としてよく見る方法をかなり簡素にしている。


以下が今回使用したstyle要素である。

a#sample{
line-height:38px;
color:#444;
background:#AAA;
}
a#sample:hover{
color:#AAA;
background:#444;
}

htmlを使ったwebページを作る上でhoverを使った表示の変更はかなり簡単にできて、便利なことが分かってもらえればいい。

2012-05-03

Archlinuxで時間を合わせる

・時刻の設定に関する用語説明


system clock
表示されている時間 ←直したいと初めに思う時間のはず
hardware clock
ハードに設定されている時間

PCにはシステムクロックハードウェアクロックの2種類の時計があり、
表面上で普段目にしている時間はシステムクロックの時間である。



時間を直す方法

PCの時間が狂ってしまっている場合、まず大抵の場合システムクロックがずれていて、
ハードウェアクロックは正常な時間を示している。


なので
hwclock --show

とhwclock(ハードウェアクロック)の時間を確認すれば、正しい時間を示しているはず。

その場合は以下のコマンドでハードウェアクロックの時間をシステムクロックに合わせる事で時間を直す事ができる。
hwclock --hctosys


もしも hwclock --show で表示される時間もずれていた場合は、
ntpを使うか、手動で合わせるかなのだが、
以下に手動で合わせる方法を書いておく。


date MMDDhhmmYYYY ←システムクロックの時間を指定した時刻に合わせる
hwclock --systohc ←(システムクロック→ハードウェアクロック)
hwclock --hctosys
または
hwclock --set --date="YYYY-MM-DD hh:mm:ss"
hwclock --hctosys



2012-05-01

環境変数とシェル変数の設定の方法

環境変数の設定とその関連事項であるシェル変数のいろはについて簡単にまとめておく


シェル変数
bashやtcsh,zshといったシェルの為の変数であり。 その内部で使うことができる。
環境変数
環境設定をシェルから変更する為の機能が 環境変数という名前で用意されている。

シェル変数

大抵の場合パイプかリダイレクションですむが、
コマンドの出力を一時的に覚えさせておきたい時に使うと便利。


  • シェル変数techに文字hogeを格納
    tech="hoge" ←Bシェルの場合(※=の前後に空白は入れない)
    set tech = "hoge" ←Cシェルの場合
    echo $tech ←格納された変数を表示

  • コマンドを変数として格納しておき、evalで実効することもできる。
    tech='cat hoge.txt |grep hoge' ←コマンドをシェル変数に格納
    echo $tech ←コマンドを表示
    eval $tech ←コマンドを実効

  • ``(バッククォート)か$()を使うことでコマンドの結果を変数に格納することができる。
    tech=$(cat hoge.txt |grep hoge) ←コマンドの結果をシェル変数に格納
    echo $tech ←変数の表示


環境変数

日本語環境の設定などでも環境変数の設定は行っていたのだが、
以下は環境変数のシェルコマンドでの扱いの基本的な部分である。

  • 環境設定をシェルから変更する
    Cシェルの場合(setenv)
    setenv ENVNAME "hoge"
    Bシェルの場合(export)
    ENVNAME1="hoge1"
    ENVNAME2="hoge2"
    export ENVNAME1 ENVNAME2 ... ←exportで変数を環境変数にできる。
    export ENVNAME1="hoge1" ENVNAME2="hoge2" .. ←値の格納も同時にできる。

  • printenvで環境変数の一覧を表示できる。
    printenv

以上の設定方法では電源を落とすと環境は消えており
login時には再び設定しなおさなくてはならない。

なので実際に環境設定をしようとするときには、
[/etc/profile.d/]以下にshファイルとして設定を追加することになる。(arch linuxの場合)





2012-04-20

リダイレクション、パイプライン等についてのまとめ

端末、シェルスクリプトのリダイレクション(>)やパイプライン(|)といった
メタキャラクタについてのまとめ


・標準入力、標準出力、標準エラー出力とチャネルの対応
  • 標準入力 →チャネル0
  • 標準出力 →チャネル1
  • 標準エラー出力→チャネル2

入力が0,出力が1,エラーが2と対応していることを覚ればいい。

また、通常の場合、入力はキーボード、出力とエラーは画面とつながっている。





(出力)リダイレクション

% command argument … > file ←新規作成
% command argument … >> file ←内容追加

チャネル1の接続先を画面からファイルに変更し、出力がファイルに書き出される。
出力を切り替えるために出力リダイレクションという。

また別の出力先としてエラー出力があるが、これはエラーを出力するためのチャネルであり上のコマンドでも、チャネル1の接続先のみがファイルに接続されていて、標準エラー出力のチャネル2は画面に接続されたままなのでエラーは画面で確認することができる。

以下に使うであろうパターンを列挙しておく。


出力リダイレクションパターン

% command argument … > file 2>&1 ←チャネル1にチャネル2を合流
% command argument … 1> fileA 2> fileB ←チャネル1とfileA,チャネル2とfileBを接続
% commend argument … > fileA 2> fileB ←チャネル1とfileA,チャネル2とfileBを接続
% command argument … > dev/null 2>&1 ←チャネル1とチャネル2をnullに接続




パイプライン

% command1 argument … | command2 argument … ←command1の出力をcommand2の入力に接続する。

パイプラインは前方のコマンドの出力であるチャネル1と後方のコマンドの入力であるチャネル0を接続するものである。





その他メタキャラクタ

% command1 argument … ; command2 argument … ←コマンドを順番に実効する。
% command1 argument … & command2 argument … ←コマンドを平行に実行する。

コマンドの実効を制御するメタキャラクタとしては上のようなものがある。






2012-04-17

robots.txtの書き方

サイトに設置をするrobots.txtの書き方をまとめておく。

まず、robots.txtの役割
googleやmicrosoftといった検索エンジンの運用するクローラ、
スパイダーがrobots.txtに記されたルールに従って動作をしますよというもの。(無視するクローラもいます。)

次にrobots.txtの書き方

robots.txtはサイトのトップに設置する。
・全て許可
User-agent:*
Disallow:
・全て拒否
User-agent: *
Disallow:/

・その他の例
Disallow:/*.jpg jpgは拒否
Disallow:/*. jpgは拒否
Disallow: /*images/ imagesフォルダは拒否
Crawl-delay:10 クロール間隔の指定(10秒)

google robots.txt

AURとABSの方法まとめ

AURとABSに関係する記事が分かれているのでまとめとして書いておく。

AUR:[arch user repository]
コミュニティにより、Arch linuxのためのPKGBUILD形式でパッケージが配布されている。mozcとかもある。
ABS:[arch build system]
ビルドを管理するためのシステム,PKGBUILDが入ったABS treeを作る。pacmanでインストール可能

具体的な方法は Arch linuxでAURとABSを使う方法に。

簡単な流れとしては、

  1. ABS、base-develのインストール(pacmanから),ABS設定
  2. AURサイトからPKGBUILDをwget
  3. makepkgでビルド
  4. pacmanでインストール

なんだけれども、3.makepkgでビルドをする時、 makepkg.confを設定しておくと自分の環境に合わせてビルドをすることが可能になる。
具体的な方法は makepkg.confの最適化に。
※デフォルトの設定では多くのPCにインストールが可能なパッケージを作成する設定になっている。

参考リンク(AUR,ABS)

Archwiki::USB_storage_device
Archwiki::udev

参考リンク(makepkg)
gentoowiki::Safe Cflags
Compilation Optimization Guide
Archwiki::makepkg



2012-04-11

javascript xmlファイルの読込みとdomの使い方

javascriptでxmlファイルを読み込んで取り扱う方法に少しなやんだので、書いておく。

xmlの読込み (例:dname='./etc/data.xml')
function loadXMLDoc(dname){
    if (window.XMLHttpRequest){
        xhttp=new XMLHttpRequest();
    }else{
        xhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.open("GET",dname,false);
    xhttp.send("");
    return xhttp.responseXML;
} 

xmlの使用例
txtbox = document.getElementById("canvas");
xmlDoc = loadXMLDoc('./etc/data.xml')
txtbox.innerHTML = xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;

・getElementByTagNameは選択したタグのノードリストを返す。
・childNodesは子ノードのリストを返す。初めの子ノードの場合はfirstChildでもよい。
・nodeValueは値を返す。

参考リンク
XML DOM


2012-04-09

makepkg.confの最適化

arch linuxでmakepkgをする時の設定がデフォルトのままだったので、
makepkg.confを書き換え、最適化を行った。

設定項目のMAKEFLAGS, CFLAGS, CXXFLAGS は make, gcc, g++で使われる。
デフォルトの設定では多くのPCがインストールができるように一般的なパッケージが生成されるので、
これを自分専用の設定にするとパフォーマンスが上がるとのこと。

使用しているcpuの情報
cat /proc/cpuinfo

一応自分の設定(Atom)
# /etc/makepkg.conf
########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################

CFLAGS="-march=atom -O2 -fomit-frame-pointer -pipe"
CXXFLAGS="${CFLAGS}"


参考リンク
gentoowiki::Safe Cflags
Compilation Optimization Guide
Archwiki::makepkg



2012-04-06

siri+咽喉マイクについて考える

最近iphone やandroidで音声入力サポートの siri喋ってコンシェル といったものが有名になっていて、
とても便利そうに見える。

siriや喋ってコンシェルの音声入力には、端末のマイクから音を拾う形態であり(スマートフォンであるため当然の帰結ではあるが) 、現在音声サポートを使用する環境というものは、屋内。さらにいえば独り言を言うという事を考えるとプライベートな空間であると私は考えている。

ここでまず普通のマイクを使えばどうなるのかを考えると、端末ではなくマイクに音声入力をし、端末が処理した結果を、イヤホンにでも出力すれば音声で操作できるデバイスとなる。といっても、この方法でも声を出す必要がある。

ここで咽喉(いんこう)マイクに焦点を当ててみる。 簡単に咽喉マイクの説明をすると、声帯の振動から音声を取り出すマイクである。
もう分かった人もいるだろうが、この咽喉マイクを使えば、喉を動かし喋る必要性すらない。機械相手に理解させられさせられればよい。

2012-04-05

bloggerのテンプレート編集方法

前回の BloggerでHTMLのマークアップ要素を試してみる。で直そうと思っていた h2とかh3を編集する方法 テンプレート→HTMLの編集→続行→ウィジェットのテンプレートを展開→コピー→テキストエディタ→編集 以下自分の行った事 vimで
:%s /h4/h5/g#h4->h5
:%s /h3/h4/g#h3->h4
:%s /h2/h3/g#h2->h3
:%s /h4/h2/g#h4->h2
タイトルがh2になっているはず。

postgresql9.1インストール(2) utf-8

postgreSQLの初期設定がasciiなので設定をutf-8に変更する方法

template0は削除できない。
1.tamplate0をfalseにし、2.tamplate1のdrop。
3.utf-8として作成。4.tamplate1をtrueに変更。
5.接続許可のオプション
UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
DROP DATABASE template1;
CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UNICODE';
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';
UPDATE pg_database SET datallowconn = FALSE WHERE datname = 'template1';


createdb
\l ->UTF8になってる。


参考リンク
PostgreSQL 9.1.3
Archwiki::PostgreSQL



postgresql9.1インストール(1)

postgresqlのインストール方法を忘れていたのでメモ。
  1. インストール、起動設定。
  2. pacman -S postgresql                                                            
    rc.d start postgresql
    deamon(postgresql)
    

  3. user作成
  4. createuser -s -U postgres
    #Enter name of role to add: [いつもloginしているuserの名前]
    

  5. postgres userへの変更方法
  6. #通常userから
    sudo -i -u postgres
    #rootから
    su root
    su - postgres
    

  7. dbの作成、削除
  8. createdb name
    createdb -> username のdbが作成
    dropdb name
    
参考リンク
PostgreSQL 9.1.3
Archwiki::PostgreSQL



2012-04-04

conkyメモ

conkyをインストールして、.conkyrcを作ったのでメモ。

Arch linuxのforumを参考にすると気に入るものができるはず
作ったconkyrc

update_interval 5
alignment middle_right
background yes
double_buffer yes
total_run_times 0

stippled_borders 0
border_width 2
default_color grey
default_outline_color white
default_shade_color grey
draw_borders no
draw_graph_borders yes
draw_outline no
draw_shades no
gap_x 40
gap_y 40
minimum_size 100 500
maximum_width 500
cpu_avg_samples 2
net_avg_samples 2
no_buffers yes
out_to_console no
out_to_stderr no
extra_newline no

own_window yes
own_window_class Conky
#own_window_transparent yes
#own_window_type desktop
own_window_type dock
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager

stippled_borders 0
uppercase no
use_spacer right
mpd_host 0.0.0.0
mpd_port 6600
use_xft yes
#xftfont Courier 10 Pitch 426:size=8
xftfont DejaVu Sans:size=8
xftalpha 0.8
# fef7b2 e18522}
# stuff after 'TEXT' will be formatted on screen
TEXT
${if_running audacious}${execpi 3 ~/.conky/audacious-info.sh}${endif} 
${font Arial:size=9}${color #e43526}System ${color DarkSlateGray}${hr 2}${font}
${color #597DB2}Kernel  : ${color grey}$kernel ${color #597DB2}${alignr}Uptime: ${color grey}$uptime
${color #597DB2}Host     : ${color grey}${nodename}${color #597DB2}${alignr}${time %Y.%m.%d}    ${color grey}${time %H:%M}${color}
${color #597DB2}CPU      : ${color grey}${freq}MHz${alignr}$cpu% ${color #597DB2}${cpugraph 6,150 000000 0000ff}
${color #597DB2}RAM     : ${color grey}$memmax${alignr}$memperc% ${color #597DB2}${membar 6,150}
${color #597DB2}Processor temperature: $color${acpitemp}°C ${color #597DB2}${alignr}Battery: $color ${battery}

${font Arial:size=9}${color #e43526}Disk ${color DarkSlateGray}${hr 2}${font}
${color #597DB2}/   ${alignr}:  ${color grey}${fs_size /}     ${fs_used_perc /}% ${color #597DB2}${fs_bar 6,150 /}
${color #597DB2}/home   ${alignr}:  ${color grey}${fs_size /home}     ${fs_used_perc /home}% ${color #597DB2}${fs_bar 6,150 /home}

${font Arial:size=9}${color #e43526}Network ${color DarkSlateGray}${hr 2}${font}
${color #597DB2}Local IP : ${color grey}${addr wlan0} ${alignr}${color #597DB2}Public IP : ${color grey}${texeci 1800 ~/.conky/externalIp.sh}
${color #597DB2}Down : ${color grey}${downspeed wlan0}${color #597DB2}${alignr}Total : ${color grey}${totaldown wlan0}
${color #597DB2}Up     : ${color grey}${upspeed wlan0}${color #597DB2}${alignr}Total : ${color grey}${totalup wlan0}

${font Arial:size=9}${color #e43526}Processes ${color DarkSlateGray}${hr 2}${font}
${color #597DB2}Processes: ${color grey}$processes  ${alignr}${color #597DB2}Running: ${color grey}$running_processes
${color #597DB2}CPU Usage ${alignr}PID   CPU%  MEM%
  ${color grey}${top name 1}${alignr}${top pid 1}  ${top cpu 1}  ${top mem 1} 
  ${color grey}${top name 2}${alignr}${top pid 2}  ${top cpu 2}  ${top mem 2} 
  ${color grey}${top name 3}${alignr}${top pid 3}  ${top cpu 3}  ${top mem 3} 
${color #597DB2}Memory Usage 
  ${color grey}${top_mem name 1}${alignr}${top_mem pid 1}  ${top_mem cpu 1}  ${top_mem mem 1} 
  ${color grey}${top_mem name 2}${alignr}${top_mem pid 2}  ${top_mem cpu 2}  ${top_mem mem 2} 
  ${color grey}${top_mem name 3}${alignr}${top_mem pid 3}  ${top_mem cpu 3}  ${top_mem mem 3} 
${font Arial:size=9}${color #e43526}Weather ${color DarkSlateGray}${hr 2}${font}
${color grey}${texeci 3600 weather}


参考リンク
audacious+conky

REST,SOAP?

RESTとSOAPについて少し

REST:[Representational State Transfer]
httpを使って通信、xmlが帰ってくる。実際はより抽象的でありhttpは一般的に使われている利用法。
SOAP:[Simple Object Access Protocol]
他のPCのオブジェクトサービスを呼び出すためのプロトコルである。
参考リンク REST入門

2012-04-03

Arch linuxでUSBを読み取る

thunarとudevをインストールしていたら、
USBは自動的に読み取れるとか思っていたが読み取れなかったので、一応覚え書き。

まずmodprobe
modprobe usb-storage
  1. デバイスの場所(UUID or device_node)を見つける

  2. カーネルに割り当てられたデバイスへの識別子(UUID,device_node)を知る必要がある。

    1. device node(/sd*)を使う。
    2. これが最もシンプルな方法。node nameを取得する方法。 dmesgでカーネルデバイスを検索する。
              dmesg|grep "sd[a-z]"
              fdisk -1
      

    3. UUIDを使う。
    4. どのドライブもUUIDを作り。ドライブを識別できる。
              blkid -o list -c /dev/null
              ls -lF /dev/disk/by-uuid/
      

  3. USBをマウントする。


    1. デバイスをマウントするディレクトリを作成
    2.     mkdir /mnt/usbstick
      

    3. rootユーザで
    4.     mount device_node /mnt/usbstick
          mount -U UUID /mnt/usbstick
      

    5. normalユーザで(/dev/sdb1は読み取ったUSB)
    6.     sudo mount -o gid=users,fmask=113,dmask=002 /dev/sdb1 /mnt/usbstick
      


参考リンク

Archwiki::USB_storage_device
Archwiki::udev




2012-03-28

pythonのチュートリアルを読む上で

pythonのチュートリアルを読んでいる。
確かにわかりやすいのだが、雑然と読んでいると思ったので、 目先の目的として作りたいプログラムの要求を書く。

単語の学習用のスクリプト
概要:英語の記事を読んでいるとfirefoxの翻訳addonを ちょくちょく使うことになるのだが、 そういった単語を保存していって覚えられるようにしたい。簡易的な学習曲線的なものも使いたい。
文字列のエンコード方法、デフォルトは?
デフォルトはASCIIで、このプログラムにはutf-8を扱う。
ファイル入出力 or DB入出力
調べた単語を保存する場合、リストに簡単に追加できるようにしたい。といってdeamonにはしたくない。
配列、ハッシュの扱い方
keyを今日と学習日、学習回数の関数式にし、そこに日付、回数、英語、日本語を格納する。
時間、日付のオブジェクト,logの計算
学習曲線を使うので、日付の計算方法、logの方法を知る。
動作中の文字の入力、出力
英語、日本語が完全に一致出きるとは思っていないので、入力はできるが、正否(y/n)は自分で確認する方法とし、入力された組の単語を削除(d)と、リトライ(r)も付加する。リトライの場合の式は要検討
配列、ハッシュへの挿入
学習をし、回数が更新された時にその要素を新たな位置に挿入する。
HTML解析用のMecabまで繋げるスクリプト
概要:wiki、特定のソースなどをHTMLを入手し、 今回は単語までの分割を行う。そして、その途中には本文抽出もできるようにする。
複数ファイルに分かれたソースの使用方法
mecabや本文抽出のextractContentの使用方法。
htmlへの接続
接続、エラー処理

2012-03-27

BloggerでHTMLのマークアップ要素を試してみる。

今までのページでh1,とかstrongとか使ったことがなかったので、
普通にbloggerにhtmlとして読み込ませれば試しにもなるし、ちょうどいいかなっと思ったので。

h要素

----h1----

----h2----

----h3----

----h4----

----h5----
----h6----
h4の順番おかしいよね

----h1----

----h4----

----h2----

----h3----

----h5----
----h6----
大きさ順にしてみたが、h4を使わない方が良さそう。

strong要素 これがstrong要素ですよ。strong要素は強い強調

em要素
これがem要素ですよ。em要素は強調
これが  <-普通のテキスト
em要素分かりにくいね。

sub要素
------------ 普通のテキストここがsub要素,subは下付き
sup要素
------------ 普通のテキストここがsup要素,supは上付き

mark要素
mark要素,markはマーク付き

span要素
span要素
hr要素,hrは水平線

あとは文字の色を変更はどこでやるのだろうか。調べてみる。
a:リンク,アンカー要素
MDN:HTML5

linux の標準的なファイルシステム構造

linuxを使う上で一度
/bin,/sbin,/usrなどのファイルシステムにおいての
ディレクトリ構造についてまとめておく

/:ルートディレクトリ。木構造の最も上に位置する。
/bin:基本コマンドディレクトリ。awk,ls,cpといった基本的なコマンドのバイナリファイルが入っている。
/sbin:システムコマンドディレクトリ。システム管理者が扱うような基本的なコマンドが入っている。
/etc:管理用ディレクトリ。管理者が設定をする、システムの様々な設定ファイルが含まれる。
/lib:基本ライブラリディレクトリ。基本のライブラリファイル、コマンドとして直接には呼び出さないプログラムが含まれる。
/dev:デバイスファイル。デバイスを読み込むためのファイルが含まれる。
/opt:オプションパッケージ。追加プログラムを格納する場所だが/usr/optと役割が被っている。
/tmp:作業用ディレクトリ。一時的な作業は/tmpで行われ、ここはアクセスが高速。だけれどもリブートすると消えてしまうので困る場合は/var/tmpで。
/var:更新されるファイル用のディレクトリ。更新されるファイルを/varに集めることで/usr以下などを書き換える必要がなくなる。作業用ファイルの/var/tmp,ログファイルの/var/logなどがある。
/usr:システムの核以外のファイルやディレクトリを/usrに入れていく。

/usr以下に/usr/bin,/usr/sbin,/usr/local/binと続いていく。



Arch linuxのGUI環境設定(openbox,slim,tint2)

Arch linux 自分の環境での
主にopenbox,slim,tint2での
GUI関係設定。

1.openboxのメニューをmenumakerを使って生成する。
pacman -S menumaker
#menu.xmlの自動生成
mmaker -v OpenBox3  #menu.xmlがあったら上書きしない
mmaker -vf OpenBox3 #forceでmenu.xmlがあっても上書きする。

2.slimのログイン画面をarchlinux-themes-slimで変更する。

pacman -S archlinux-themes-slim
#テーマ一覧
ls /usr/share/slim/theme/
#テーマプレビュー、loginの所にexitで終了
slim -p /usr/share/slim/theme/[theme name]
#/etc/slim.confの編集
current_thema [theme name] #<-変更したい[theme name]

3.tint2のtintwizardを使った設定
panelを表示するtint2だが、案外とGUIのtintwizardを
使った設定が簡単だった。

#tintwizardの場所
pacman -Ql tint2
#->tint2 /usr/bin/tintwizard.py
python2 /usr/bin/tintwizard.py #GUI起動


tint2を画面の上部と下部、であったり複数よびだすには

tint2 -c ~/.config/tint2/[savefilename1] &
tint2 -c ~/.config/tint2/[savefilename1] &

とすればいいはず。



Arch linuxでAURとABSを使う方法

Arch linuxでscreenshotを取るためのshutterってAURパッケージのアプリケーションが使用したかったために、
AURとABSの使い方をまとめておく

AURとABSとはなにか?
AUR:[arch user repository]コミュニティにより、Arch linuxのためのPKGBUILD形式でパッケージが配布されている。mozcとかもある。
ABS:[arch build system]ビルドを管理するためのシステム,PKGBUILDが入ったABS treeを作る。

AURとABSの使い方。

1.ABSのインストール、設定
パッケージのabsとbase-develをpacmanでインストールし、
次にabs.confを設定、REPOSの!を外す。
そしてabsコマンドを打つと、abs treeが作成される。

pacman -S abs base-devel
vim /etc/abs.conf##編集
REPOS=(core extra community testing etc)#<-!を全てはずす
abs #<-absツリーが/var/absにできる

2.AURからパッケージのインストール

パッケージをインストールするにはAURをサイトから検索する、(このサイトはarch linuxの公式サイトからいける)
欲しいパッケージを見つけたらsourceではなく、PKGBUILDのURLをwgetする。

wget https://aur.archlinux.org/packages/sh/shutter/PKGBUILD

ちなみに検索をしなくても/packages/sh/shutter/PKGBUILDの部分が他のパッケージも共通で
mozcなら/packages/mo/mozc/PKGBUILDって風に/先頭2文字/パッケージ名/になってるっぽい。

PKGBUILDを入手したらば、必要に合わせて編集。
makepkg -s ##引数はいらない、PKGBUILDが読み込まれる.
#perl-gtk2-imageviewがない
    wget https://aur.archlinux.org/packages/pe/perl-gtk2-imageview/PKGBUILD
    makepkg -s
    sudo pacman -U perl-gtk2-imageview*.pkg.tar.xz #makepkgで*pkg.tar.xzができてpacman -U でインストールできる
#perl-gtk2-unique
    wget https://aur.archlinux.org/packages/pe/perl-gtk2-unique/PKGBUILD
    makepkg -s
    pacman -U *.pkg.tar.xz
#perl-proc-simple
    wget https://aur.archlinux.org/packages/pe/perl-proc-simple/PKGBUILD
    makepkg -s
    pacman -U *.pkg.tar.xz
#省略
# shutter の PKGBUILDがあるフォルダ
makepkg -s
sudo pacman -U *.pkg.tar.xz

これで、AURからインストールすることができる。

補足としてのmakepkgコマンド
makepkg -c #clean のことで、複数ファイルのビルド、アップデート、などで使える。廃
止されたファイルなどを新しいビルドにしてくれる。

makepkg -s #もし依存関係が求められるとしたら、失敗をする前に警告をしてくれる。

makepkg -i #pacman -Uまでやってくれる。

参考リンク

Arch wiki::Arch Build System
Arch wiki::Arch User Repository
Arch linux::AUR
Archwiki::makepkg



2012-03-26

Arch linuxの気になっていたこと

今回は前回までのArch linuxのインストールで
気になってた事についてをまとめた。

以下の事について調べた、
・acpid
・HAL
・dbus
ちなみにacpidとHALについては使用をしておらず,dbusは使用している。

acpid :ACPIのイベントを柔軟に拡張するためのデーモンを提供する。このacpidが存在すると電源ボタンやスリープ、サスペンドボタンを押すこと、ノートPCの蓋を閉じることAC電源アダプタをノートPCに接続しておけるようになるとのこと。

ちなみにACPIとは、
ACPI[Advanced Configuration and Power Interface]:APMという昔の電力管理方式から、OSが電力管理をできるようにした電力制御規格。

それで、私のノートPCでは端末でhaltとか打ち込んでるから、ボタンが使用可能になるという機能は必要なくて、最後のAC電源も充電されてるし、最後の部分はいまいち意味が分かってない。まあ、電源関係で困ったら入れるかも。

HAL[hardware abstraction layer]:HALはArch linuxの公式リポジトリから外れ、現在ではudev/PolicyKitが使われている。 HALはアプリケーションがHALを通す事で簡単にハードウェアにアクセスする事ができる物であったが、結果的にデバイスを全てHALを通しアクセスさせるという事で、HALは巨大化しメンテナンスがしづらくなってしまった。そうして、廃止の方向に進み、現在Arch linuxではudevに置き 換えられている。ってところ、それとHALにしか対応していないアプリケーションもまだ少数ではあるが存在しているということらしい。

dbus[desktop bus]:アプリケーションとアプリケーションの通信、アプリケーションとOSの通信といった、IPC(プロセス間通信)を行うのだが、簡素で無駄がような方法らしい。

参考リンク
Archwiki::acpid
Archwiki::HAL
Archwiki::D-Bus



2012-03-25

Arch linux設定(その他)

Arch linuxの設定は前回までで気づいている必要なことは できたのだが,
その後、pacmanで入れたアプリケーションをまとめておく。
python:python3.2
ruby:ruby1.9
vim:編集
postgresql:データベース
apache:サーバ
lxterminal:lxde端末
lha,unrar,unzip,p7zip,file-roller::ファイルの解凍、圧縮関係
flashplugin::フラッシュを使用するため
firefox,firefox-i18n-ja:firefoxと日本語化プラグイン
libreoffice,libreoffice-ja:libreofficeと日本語化
feh:軽量の画像表示、デスクトップの表示とかにも使える。



2012-03-24

Arch linuxの設定( GUI openbox)

Arch linuxのGUI関係がまとまったので書いておく、
WE:openbox
FM:thunar
パネル:tint2
日本語入力:ibus

こんなところか、以下設定方法。

まずは基本のX関係をインストールする
pacman -S xorg-server xorg-xinit xorg-utils xorg-server-utils mesa xorg-twm xorg-xclock xterm

次にPCのVGAに合ったビデオドライバ、xf86-video-?をインストール
lspci|grep VGA
pacman -Ss xf86-video|grep less
pacman -S xf86-video-servage

NVDIAだったので以下の2つのグラフィックドライバもインストール
pacman -S xf86-video-nouveau
pacman -S nouveau-dri

他の入力を追加、laptopの場合synapticsでタッチパッド、タッチスクリーン追加
pacman -Ss xf86-input|less
pacman -S xf86-input-synaptics

dbus,slim,consolekit,openbox,ibus,thunar,tint2のインストール
pacman -S dbus slim consolekit openbox obmenu obconf ibus ibus-anthy thunar thunar-archive-plugin thunar-media-tags-plugin thunar-volman tint2
rc.d start dbus

deamons=(…dbus…)

各種設定
設定の準備
デフォルトの~/.xinitrcの作成
 cp /etc/skel/.xinitrc ~/.xinitrc

デフォルトの~/.config/openboxの作成
 mkdir -p ~/.config/openbox
  cp /etc/xdg/openbox/{rc.xml,menu.xml,autostart,environment} ~/.config/openbox

・/etc/slim.confの編集
numlock off 
    ssessions openbox
    default_user hoge
    #current_thema hoge

・~/.xinitrcの編集 以下を追加
  export PATH=$HOME/bin:$PATH
    export LC_CTYPE=ja_JP.utf8
    export XMODIFIERS=@im=ibus
    export GTK_IM_MODULE=ibus
    export QT_IM_MODULE=ibus
    /usr/bin/ibus-deamon --xim -d &
    exec ck-launch-session dbus-launch openbox-session

・/etc/X11/xorg.conf.d/10-evdev.confの編集 以下の追加
Section "InputClass"
        Identifier "evdev keyboard catchall"
        MatchIsKeyboard "on"
        MatchDevicePath "/dev/input/event*"
        Driver "evdev"
    Option "XkbRules" "xorg"  <-追加
    Option "XkbModel" "jp106"    <-追加
    Option "XkbLayout" "jp"      <-追加
EndSection
・/etc/inittabの編集
#id:3:initdefault:  <-コメントに
id:5:initdefault:     <-コメントを外す

#x:5:respawn:/usr/bin/xdm -nodaemon    <-コメントに
x:5:respawn:/usr/bin/slim >/dev/null 2>&1  <-コメントを外す
デーモンにslimの追加 deamon=(slim) これで動作するはず、 tint2はautostartに tint2 & とか追加すれば動く。 参考リンク Archwiki::Openbox Archwiki::Beginners' Guide openboxhelp::Help:Autostart

2012-03-23

Arch linuxの設定(iptables)

Arch linuxのファイヤーウォールとして
iptablesを設定した。


  • iptablesの取得
  • iptablesはpacmanから入手できる。

    pacman -S iptables
  • 必要なチェインの生成
  • # iptables -N TCP
    # iptables -N UDP
    
  • ポリシーの設定
  • # iptables -P FORWARD DROP
    # iptables -P OUTPUT ACCEPT
    
  • INPUT chainのpolicyをdropに設定する。
  • 全てのトラフィックを破棄し、必要なものを指定して許可することがセキュアなファイヤーウォールの作り方らしい。

    # iptables -P INPUT DROP
    
  • ESTABLISHED,RELATEDの許可
  • ESTABLISHED
    確立された既存のパケットと関係のあるパケット
    RELATED
    既存のパケットと関係のある新しいセッションのパケット
    # iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    



  • loopbackの許可
  • loopbak(lo)interfaceは多くのサービスやアプリケーションに必要である。

    loopback
    自分自身に対するデータ通信
    # iptables -A INPUT -i lo -j ACCEPT
    



  • INVALIDの破棄
  • invalid状態のトラフィックを全て破棄すること。

    トラフィックは状態により、NEW,ESTABLISHED,RELATED,INVALIDという4つのカテゴリに分けられる。

    そして、"stateless"firewallよりもセキュアな"stateful"firewallを作ることが可能。

    # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
    


  • ICMP echo requestの許可(ping)
  • PCがルータでなくなってから、他に状態NEWのICMPトラフィックは許可する必要はない。

    # iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
    


  • OPEN chainsの設定
  • トランスポート層でありネットワーク層のIPとセッション層のプロトコル橋渡しする。

    UDP
    user datagram protocol
    TCP
    transmission control protocol

    新しい接続はsyn packetで始まる。

    # iptables -A INPUT -p udp -m conntrack --ctstate NEW -j UDP
    # iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
    



  • RST TCPコネクションと、ICMP port unreacheのUDP streamは拒絶(REJECT)する。
  • これはデフォルトのLinuxのふるまい(RFC準拠)を模倣しており、接続停止の素早い許可と整理がなされる。

    REJECT:dropとは違い、拒絶したことが送り側に返される。

    RST:syn を送り、接続できなかった場合RSTパケットが送られてくる。

    # iptables -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
    # iptables -A INPUT -p tcp -j REJECT --reject-with tcp-rst
    



  • 他のプロトコルのための設定。
  • これはデフォルトのLinuxの振る舞いを模倣している。

    # iptables -A INPUT -j REJECT --reject-with icmp-proto-unreachable
    

    以下ではFTP,SMPT,WEBを許可している。



    FTPの許可
    # iptables -A TCP -p tcp --dport 20 -j ACCEPT
    # iptables -A TCP -p tcp --sport 20 -j ACCEPT
    # iptables -A TCP -p tcp --dport 21 -j ACCEPT
    # iptables -A TCP -p tcp --sport 21 -j ACCEPT
    


    SMTP(送信)の許可
    # iptables -A TCP -p tcp --dport 25 -j ACCEPT
    # iptables -A TCP -p tcp --sport 25 -j ACCEPT
    


    WEBの許可
    # iptables -A TCP -p tcp --dport 80 -j ACCEPT
    # iptables -A TCP -p tcp --sport 80 -j ACCEPT
    



  • spoofing attack対策(なりすまし)
  • spoofing attackに対応するために/etc/sysctl.confを編集する。

    vim /etc/sysctl.conf
    net.ipv4.conf.all.rp_filter=1
    



  • Hide PC
  • echo リクエストをブロックする。

    vim /etc/sysctl.conf
    net.ipv4.icmp_echo_ignore_all = 1
    

    また、レート制限をすることは不正行為をコントロールするためには良い方法といえる。

    iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 30/min --limit-burst 8 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    



  • ルールのセーブ
  • ここまで行った操作を保存する。

    # /etc/rc.d/iptables save
    



  • boot時の読み込み(/etc/rc.conf::networkの前に書く)
  • boot時にiptablesが読み込まれるようにdaemonの設定をする。

    DAEMONS=(... iptables network ...)
    


サーバ用ではない個人用のPCのファイアーウォールの設定としてArch linuxに以上のiptablesの設定をした。




参考リンク
Archwiki::Simple Stateful Firewall


2012-03-21

Arch linux 設定(sound)

前回に引き続きArch linuxでのsoundの設定についてまとめておく


サウンドドライバについて

まずalsaとossという2つのサウンドドライバのどちらを使うべきなのかで迷ったが、
Archwikiによると現在はalsaが主流でArch linuxにはデフォルトで入っているということ 。



以下にpacmanでインストールするsound関係list

  • alsa-utils:alsamixerが使えるようになる。
  • alsa-oss:ossのサウンドドライバで動作するアプリケーションをalsaで動かす。
  • alsa-plugins:必要ないかもしれない。
pacman -S alsa-utils alsa-oss alsa-plugins
alsamixer   <-sound調節
speaker-test -c 2    <-soundtest
alsactl store       <-設定保存
/etc/rc.confのdeamon=(…@alsa…)と追加 以上の設定でsound設定は問題ないはず。
参考リンク Archwiki:Advanced Linux Sound Architecture

2012-03-19

Arch linux のインストール方法

手持ちのノートPCにArch linuxのインストールを行ったので、
自分の行った設定を忘れたときなどの為にまとめておく。

Arch linux
動作に最低限の状態でインストールをし、ユーザーが必要なパッケージをインストールしていくことで理想的な環境を構築できるディストリビューション。

Arch linuxのインストールを行う。

公式のHPからイメージをDL。その後、
インストールCDを入れて立ち上がったら、まずkeymapの選択を行う。

km          
を入力しその中からjp106を選択する、これで日本語のkeymapになる。次のフォントはskipでよい。

keymapの選択が終わったら

/arch/setup
でarchlinuxのインストールが始まる。


以下はインストール時の設定ファイルである。

/etc/rc.conf
KEYMAP="jp106"
LOCALE="ja_JP.utf8"
HARDWERECLOCK=""<-localtime or UTC HOSTNAME="hoge"





/etc/locale.gen
使用をしてもよいロケールのコメントアウトをはずす。

/etc/hosts
rc.confで入力したhostname は自動で入力されているので編集する必要はないかもしれない。

/etc/pacman.d/mirrorlist
日本のサーバーのチェックを外しておく。

インストール後,pacman -S pacman-mirrorlist で新たなミラーリストを入手可能


GRUBの所で編集画面に入るが、他にOSがなければ編集の必要はない。
あるならば、ファイルの末尾の部分に使用するOSを追加していく。

ここまでで簡単にだがインストール作業が終了。


とりあえずリブートを行っておく。rebootで再起動ができる。haltでシャットダウン。

reboot

パッケージのアップデートも行っておく。
pacman -Syu

ユーザの追加

一般ユーザを作っておき、そちらで作業を行う。

ユーザの追加
adduser
・username:hoge
・Aditional group:audio,lp,optical,storage,video,wheel,games,power,scanner
ユーザの削除
userdel hoge


viのsudoを可能にする

以下の設定はユーザがwheelグループに含まれて入る場合に有効となる。

visudo
#%wheel ALL=(ALL) ALL   <ーコメントアウトを外す

wheel グループのユーザはsudoが使用可能になる。



無線LANへの接続

使用しているデバイスを見る。

lspci |grep -i net

ここからはbroadcomのBCM4312用の設定についてである。Archwikiには他の場合についても書いてある。

pacman -S b43-fwcutter
b43-fwcutter -l

以下のページからファームウェアをダウンロード
http://linuxwireless.org/en/users/Drivers/b43


ファームウェアの展開

tar xjf broadcom-wl-[firmware_version].tar.bz2
export FIRMWARE_INSTALL_DIR="/lib/firmware"
b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" broadcom-wl-[firmware_version]/linux/wl_apsta.o

無線LANを有効にする

modprobe b43
ip link set wlan0 up
iwlist wlan0 scan

ここで無線LANがWPA/WPA2だったのでwpa_supplicant 及び wpa_passphrase を使用する

mv /etc/wpa_supplicant.conf /etc/wpa_supplicant.conf.original
wpa_passphrase ESSID "my_secret_passkey" > /etc/wpa_supplicant.conf
を行い
wpa_supplicant -B -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
でLANに接続
dhcpcd wlan0
でインターネットに接続できるようになる。


ひとまずインストールとしてはここまで、GUI関係はまとまったら
参考リンク
Archwiki

導入メモ:Arch Linux




2012-03-09

rssのxml構造を少し

ネットの定点観測としてrssが便利だねってことで
rssを取り込む時の基礎知識程度だが、

rssはchannel要素とitem要素に分かれている。
channelはサイトの基本情報、itemは記事の情報で
rssを取得するときはitem要素の記事の情報を取得することが目的のはず

title:タイトル
link:url
description:概要

の3つが必ずある要素で、
以下にあるかは分からないが便利そうな要素

language:言語の選別が可能になる(channelのみ)
pubDate:コンテンツの発行日時
category:コンテンツのカテゴリ(便利かも)


参考リンク

RSS 2.0 Specification 日本語訳

RSSのフォーマット・仕様・構造 - RSS1.0、RSS2.0、Content-Type