haskell事始め
とある事情でhaskellを試すこととなったのでその際の記録を残しておく。環境はubuntu15.04。 今後使うことはないとは思うけど。。。
インストール
sudo apt-get install haskell-platform
emacsのhaskell-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面的な役割を果たしていたのだろう。 つまり、バケモノの子は単純に主人公とバケモノの熊徹の父子関係だけでなく母子も関係する物語なのだろう。
どうでもいいけどあと、楓ちゃんは広瀬すずの声がマッチしていたしかわいい。
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
参考
djangoを試してみた。
djangoはPythonのフレームワークで、Rubyで言うRuby on RailsやPHPでいう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。 こんな感じ。
もし、ポート番号を変えたければ引数として渡す。
python manage.py runserver 8080
書くの疲れたので今回はここまで。
swap領域をクリアする
長く使っているとスワップ領域が大量に使用されることがある。
メモリに余裕がある場合、一旦swap領域をオフにして再度オンにすることでクリアすることができる。
sudo swapoff -a sudo swapon -a
参考
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]++; } }