てきとーなブログ

てきとーに書き綴ります。なので、正しいかは責任を負えません。

haskell事始め

とある事情でhaskellを試すこととなったのでその際の記録を残しておく。環境はubuntu15.04。 今後使うことはないとは思うけど。。。

インストール

sudo apt-get install haskell-platform

emacshaskell-mode

はじめにレポジトリに追加。

M-x customize-option RET package-archives

M-xはwindowsでいうAlt-x押しのこと。RET(RETURN)はenterのこと。

で、archive nameにmelpa-stable、URL or directory nameにhttp://stable.melpa.org/packages/ そしてApllyをクリック。

次にパッケージリストを取り出す。

M-x package-reresh-contents

そして、インストール。

M-x package-refresh-contents

インデントを付けたければemacsの設定ファイル(~/.emacs or ~/.emacs.d/init.el)に下記を追加。

(add-hook 'haskell-mode-hook 'haskell-indentation-mode)

とりあえずhello world

hello.hsを適当につくって

main =
  print "hello world!"

コンパイル

ghc hello.hs       
[1 of 1] Compiling Main             ( hello.hs, hello.o )
Linking hello ...
./hello 
"hello world!"

バケモノの子を見て(ネタバレあり)

はじめにネタバレあり&素人の勝手な感想です。

概要

 細田守監督による長編アニメーション作品で、バケモノの世界を舞台に主人公の蓮(九太)とバケモノの熊徹の師匠と弟子(父子)の絆を描いた作品。

感想

 ストーリー全体として納得いかない点はなく良くできた映画だと思った。 ただ、完成度が高い分ストーリーの展開が前の出来事(フラグ)から予想できてしまったのと、ありきたりな物語になってしまって平凡な物語になってしまているなとも思った。 最後、人間の闇に打ち勝って終わりとなるのだけれども、闇と共存するみたいな展開もよかったかも知れない。 ただ、本作は人間界に居場所がなくなって闇を抱えた少年がバケモノと出会って、最後には闇に打ち勝ち社会復帰するという「ひきこもり社会復帰応援」映画だと思っているので そういった意味ではハッピーエンドで良かったのかもと思った。

楓ちゃんの存在

 ヒロインの楓ちゃんはさまやかなロマンスや青春のサブストーリーとして色々なところで言われているが、私の感想としてはロマンスや青春以外にも色々と役割があったと思う。 一番の役割は主人公の蓮(九太)に人間としての常識や知識を教える、つまり「人間とはなにか」を教えるというものがある。 これは、バケモノ界で暮らしていた蓮に再び人間界に興味を持たせ、結果としてもっと色々と勉強したいと思わせた。 他にも、メルヴィルの「白鯨」を通じて人間の闇について蓮に教えることもした。その結果として蓮は人間は誰しもが闇を抱えること、船長⇔鯨と蓮⇔一郎彦の対比、つまり蓮は もしかしたら一郎彦のように闇に飲まれるかもしれないと自覚させた。

 ほかにも、熊徹に刀を刺した一郎彦に対して復讐しようとした時に、チコ(ねずみっぽいやつでお母さんの生まれ変わり?)が止めに入る⇒楓からもらったお守りと画面が移るが このシーンから楓は亡くなった母親の代わり(もしくは母親を継ぐ存在(未来の奥さんかもと思わせる?))としていたのかもと思った。その根拠として最後、蓮が人間界に帰って本物のお父さんと 暮らしているときにチコはいなくなっていたと思う。つまり、闇に打ち勝って成長してもう必要なくなったからいなくなったと考えられる。

 そんなんで、楓ちゃんはヒロインとしてお母さんとしての2面的な役割を果たしていたのだろう。 つまり、バケモノの子は単純に主人公とバケモノの熊徹の父子関係だけでなく母子も関係する物語なのだろう。

どうでもいいけどあと、楓ちゃんは広瀬すずの声がマッチしていたしかわいい。

www.bakemono-no-ko.jp

google chrome(v44)がクラッシュする問題(Ubuntu)

最近のchromeのアップデート(v43 to v44)でchromeで新しいタブを開いたり、右クリックで開くメニューが真っ黒になったりするエラーが生じたのでググってみると同様のケースが報告されていた。

今後、修正されることを期待してとりあえず動かすには、gpu accelerationを切ることでできるらしい。

google-chrome --disable-gpu

また、前のバージョンを再インストールすることでもいける。

sudo apt-get remove google-chrome-stable
wget http://mirror.pcbeta.com/google/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_43.0.2357.81-1_amd64.deb
sudo dpkg -i google-chrome-stable_43.0.2357.81-1_amd64.deb

参考

askubuntu.com

askubuntu.com

djangoを試してみた。

djangoPythonフレームワークで、Rubyで言うRuby on RailsPHPでいうCakePHPみたいなものということです。インストールからデモまでとりあえず試してみました。参考は本家?のドキュメントから。

The Web framework for perfectionists with deadlines | Django

djangoのインストール

pip install django

windows環境+pathを通してない場合Python○○/Scripts/pip.exeコマンドライン上でできる(○○はversion)。 以下、pathを通してない場合Python○○/Script/△△.pyとしてください。

動作確認

python -c "import django; print(django.get_version())"

でバージョンが出ればOK。

プロジェクトの作成

python django-admin.py startproject mysite # mysiteはプロジェクト名で好きなものを 

すると

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py

こんな感じのプロジェクトが作られる。このなかのmanage.pyが管理ツールとなっている。

データベースの設定

デフォルトではsqlite3となっていてそのまま使った。mysqlなりoracleなり別のSQLサーバが使いたければsettings.pyのDATABASES keyを変更することでできる。その際、そのDBのユーザ名、パスワードの記載を忘れずに。

djangoの動作確認

python manage.py runserver

を動かし、ブラウザでhttp://127.0.0.1:8000/を見て確認。It's worksがでればOK。 こんな感じ。 f:id:azoay:20150723185817p:plain

もし、ポート番号を変えたければ引数として渡す。

python manage.py runserver 8080

書くの疲れたので今回はここまで。

swap領域をクリアする

長く使っているとスワップ領域が大量に使用されることがある。

メモリに余裕がある場合、一旦swap領域をオフにして再度オンにすることでクリアすることができる。

sudo swapoff -a
sudo swapon -a

参考

[Linux]Swap領域をクリアする方法 · DQNEO起業日記

Union-Find木

素集合のデータ構造の具体的な実装で下のスライドにわかりやすくまとめてある。

Union find(素集合データ構造)

下の実装はランク無し

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
#define MAX_N 10000

// union-find tree
int par[MAX_N];

void init(int n) {
    REP(i,n)
        par[i] = i;
}

int find(int x) {
    if (par[x] != x)
        par[x] = find(par[x]);
    return par[x];
}

bool same(int x, int y) {
    return find(x) == find(y);
}

void unite(int x, int y) {
    x = find(x);
    y = find(y);
    if (x == y)
        return;
    par[x] = y;
}

ランクあり

#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
#define MAX_N 10000

// union-find tree
int par[MAX_N], rank[MAX_N];

void init(int n) {
    REP(i,n) {
        par[i] = i;
        rank[i] = 0;
    }
}

int find(int x) {
    if (par[x] != x)
        par[x] = find(par[x]);
    return par[x];
}

bool same(int x, int y) {
    return find(x) == find(y);
}

void unite(int x, int y) {
    x = find(x);
    y = find(y);
    if (x == y)
        return;
    if (rank[x] < rank[y]) {
        par[x] = y;
    } else {
        par[y] = x;
        if (rank[x] == rank[y])
            rank[x]++;
    }
}

emacsでroot権限でファイルを開き直す

設定ファイルなどを書き直したあとにいざ保存しようとしたら書き込み権限がないorzはあるあるだが、emacsの場合C-x, C-f /sudo::path/to/fileでroot権限で開き直せる。

ちなみにvimでもコマンドモードから:w !sudo tee %でできるらしい。