matthew as a q.

競技プログラミングメイン

Mavericks に gdbをいれる

Marvericksでは標準で入っていないようなので、入れる。
また、gdbデバッグする際には、コンパイラgccのほうがよいので、そちらも用意する。(gdbをインストールするときにどうせ必要になる)今回は、homebrewでインストールする。

brew install gcc

gccの入ったディレクトリを把握する。

which gcc-4.8
/usr/local/bin/gcc-4.8

今回は、/usr/local/bin/gcc-4.8にあることがわかったので、それを指定して、gdbをインストールする。事前に
GDB: The GNU Project Debuggerこちらからgdbをダウンロードして、解凍して、解凍されたフォルダの中で以下の操作を行う。

CC=/usr/local/bin/gcc-4.8 ./configure
CC=/usr/local/bin/gcc-4.8 make

ここで、以下のエラーが出た。

In file included from gdb.c:19:0:
defs.h:104:17: fatal error: bfd.h: No such file or directory
 #include "bfd.h"
                 ^
compilation terminated.
make: *** [gdb.o] Error 1

def.hの中でincludeしている、bfd.hというファイルがないらしい。

適当に「bfd.h」で検索して、ダウンロードしてきた。

それを入れて、再度

CC=/usr/local/bin/gcc-4.8 make

すると、今度は、

gcc-4.8: error: version.c: No such file or directory
gcc-4.8: fatal error: no input files
compilation terminated.
make: *** [version.o] Error 1

で、version.cというファイルがないらしい。

とりあえず、ここまで。

(追記)
homebrewから直接入れられた。(
Mavericksにgdbを入れる(続き) - takeknockの日記

centosでKUINS3から外部につなぐ

KUINS3から外部につなぐ際には、特定のポート以外では、proxyサーバ(proxy.kuins.net)をかます必要がある。


centosでは、yumのパッケージをアップデートしたりする際には、
/etc/yum.conf
に、

proxy=proxy.kuins.net:8080

を追加して、プロキシサーバを指定してやるといい。

また、学術ネットワークの内側でとってこれれば速いので、jaistとかwideのサーバから取ってくるようにしたらよい(/etc/yum.repos.d/CentOS-Base.repoのbaseurlの項目を編集する)(ただ、パッケージ的に取ってこれないものもあるので、のbaseの項目だけjaistとwideのに変えたらよいと思われる。)

新しい研究室のサーバにCentOS6.5を導入する

VPSしか触ったことのなかった筆者が、初めて物理サーバにCentOSを入れるまでの備忘録。
今回はこれまで研究室にサーバがなかったところで試行錯誤しながら導入を行ったので、同じような境遇の人は特に、サーバを買う前に見てほしい。

事前にすべきこと

  • 物理的に置く場所に関して許可を得る

研究室のある建物の地下に置くつもりで自分の中ではいたが、そのために何が必要かまでは把握していなかった。今回は周りの方々のおかげで研究室のある建物の地下に置くことができたが、置けなかった場合詰んでいたので、十分注意されたい。

許可がとれたら、サーバ室に入るための申請を行う。(スッと通るプロトコルがあるはず(秘書さん経由とかおすすめ))

  • 上に関連するが、制約を明確にしておくこと

自分の研究室がこちらの大学でお世話になっている研究室というのがあるのだが、そこに置いてあるもともとのサーバについて把握していなかった。その研究室のサーバはラックのサーバで、ラックの一部が空いていたため、それに合ったサーバを買っておけば余計な場所をとる必要がなかった。確認せずにタワーサーバを買ってしまった。

導入するもの

CentOS6.5

マシン構成

Dell PowerEdge T110
RAID5(HDD 500G×4)
RAIDコントローラ
メモリ8G

やったこと。

  • CentOS6.5(以下CentOS)をmirrorサイトからダウンロードして、DVDに焼く

CentOS-6.5-x86_64-bin-DVD1.isoというやつをダウンロードしてきて焼く(2のほうは、optionalなので必要なければ焼かなくてもよい)

  • CentOSをサーバにいれる

ここでいろいろ引っかかった。

モニターの問題

起動時の画面の解像度が(たしか)720×400なので、これに対応していないモニターでは信号エラーが出る。DELLのロゴが出る画面など一部解像度の変わるタイミングでは、対応していないモニターでも表示される。しかし、RAIDコントローラを設定するのが720×400のタイミングなので、それに対応してる古めのモニターが必要になる。

RAIDカードの問題

これ超大事。DELLでオプションでRAIDカードつけるときに、s300とs100とかのRAIDカードだと、Windows Serverにしか対応しておらず、CentOSRAIDを利用することができない。インストール画面まではいけるが、インストール先を選ぶときに、HDDを認識できず、そこから進めなくなる。

今回は買って設定しているときに気づいたので、RAIDの代わりに、4台あるHDDのうち2台を用いて、1台をOSを入れるHDD、もう一台はそのバックアップ用とした。

これを避けるために、DELLの部品を選ぶところでは、きちんと自分の入れる予定のOSに対応したRAIDコントローラを選ぶ必要がある。

クローラメモ

集合知プログラミング』読み進めてる。

  • 落ちるサイトと落ちないサイト

wikipediaの記事をインデキシングするときには、なんか落ちる。

>>> crawler=searchengine.crawler('searchindex_prf.db')
>>> crawler.createindextables()
>>> pages=['http://en.wikipedia.org/wiki/Pseudorandom_function_family']
>>> crawler.crawl(pages)
Indexing http://en.wikipedia.org/wiki/Pseudorandom_function_family
Indexing http://en.wikipedia.org/wiki/Help:Contents
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "searchengine.py", line 113, in crawl
    self.addlinkref(page,url,linkText)
  File "searchengine.py", line 88, in addlinkref
    wordid=self.getentryid('wordlist','word',word)
  File "searchengine.py", line 25, in getentryid
    cur=self.con.execute("select rowid from %s where %s='%s'" % (table,field,value))
pysqlite2.dbapi2.OperationalError: unrecognized token: "'readers''"


食べログだと落ちない。
pagesの中身をhttp://tabelog.com/kyoto/rstLst/ramen/にして同様に実行。

  • 理由の推察

なんでだろうね。
よくわからん。眠い

pythonのパスが通っているところを確認する方法

ここでは、自作moduleなどを作成した際に、どこに置くことで読み込んでこれるようになるか、という疑問を解消していきます。

  1. importするようなmoduleがどこにあるのか確認する

適当なmoduleを選んでその場所を確認する。
pythonインタプリタで、例えばurllib2 moduleで試してみる。上2行を入力すると、3行目のような結果がかえってくる。

>>> import urllib2
>>> print(urllib2.__file__)
/usr/local/Cellar/python/2.7.6_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.pyc

(">>>"はpythonインタプリタ内に表示されてるものなので、入力する必要はありません。)
これで場所の確認ができた。

  1. その場所に自分の書いたmoduleを追加する

場所の確認ができたら、自作moduleをそこに追加するだけである。
変更を加えるにはおそらくpermission必要な場所なので、sudo用いる。
例えば、自作moduleである「hogehoge.py」を追加する場合には、hogehoge.pyのあるフォルダに移動し、

sudo cp hogehoge.py /usr/local/Cellar/python/2.7.6_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/

などとしてやればよい。(cpコマンドのコピー先は、各自、さきほど確認した場所をいれる)

これでpythoインタプリタで、importしてみて、エラーが出なければ、無事追加出来ている。(たぶん)

コードの行数を確認する

find . -name '*.rb' |xargs cat | wc -l

現在のディレクトリ以下の指定したファイル名の行数をまとめて、表示できる。

findで取ってきたファイルのパスを、
xargs catで改行ごとにwcコマンドの標準入力に渡して
行数まとめて表示。(行数の合計計算してる部分はどこだろ?)

某鯖に関して

無線miako経由だと、operation timed out(SYN+ACK返ってこない)
eduroam(学内ネットワーク以外)経由だと、connection refused(RST)
有線の学内ネットワーク経由だと、ログインできた