学生の備忘録なブログ

日々のことを忘れないためのブログです。一日一成果物も目標。技術系はQiitaにあげるように変更しました。

flask入門の記事が送れています.

コマンドラインツールが動かないときの対処法を書きました.

git が動かない人の相談に乗った際の解決方法をまとめました. qiita.com

flask入門がまだ終わってません

時間がないので,,,

courseraの講義課題全然やってない

やばい

結論

学会の準備,研究進捗がんばります...

courseraのレコメンデーションコース開始しました

レコメンデーションの大家が教えてくれるそうです.(英語字幕しかない...)

www.coursera.org

これは始めると期限があり12/20に最初の締め切りがあります.

急ぎ実行して,まとめます.また,Flaskの記事をまとめ終わっていないので,それもやります.

過去の自分を見ました.(備忘録)

マスクを外すのを渋る男の子

先日,企業の合同説明会に参加しました.その時の出来事が印象的で,私の人生を振り返るきっかけになったので備忘録を残します.

その合同説明会では,企業に渡す写真をその場でチェキで取る段とりになっていました.私はその列に並んでいました.

私の5人ほど前に並んでいた人が,なにか写真撮影で詰まっています.写真を撮る女性社員と話が盛り上がって止まっているときもあったので,またそれかと私はうんざりしてよくよく注目してみると,そうではないようです.

その彼は冬の就活生らしく,私服参加の合同説明会にベージュのコート,紺のマフラー,マスク,という出で立ちのやや背の低い男子学生でした.

女性社員と彼の押し問答はこんな調子でした.

「マスク取っていただけます?」

「いやそれはちょっと」

「でも企業さんに提出するので」

「なにか怪我でもなされているんですか?」

「いえ,そうではないんですが.」

「そうですか」

結局彼はマスクを外すことなくチェキを撮り,会場に入りました.

季節は冬,この時期に風邪を引くのは避けたいのかもしれませんし,顔に傷があるのかもしれません.

でも私には違う理由だとわかります.彼はマスクを外した自分を見られるのが嫌なのです.マスクを外した自分の顔よりマスクをした状態での自分に現実感,臨場感を感じていて,頭の中の自分がそのマスクをした自分こそが自分という状態になっています.

私はそれを後ろから眺めていました.恥ずかしさで目をそらす,話を聞かないようにイヤホンをするみたいなことはせず,ただ会話の行く末を案ずるでもなく眺めていました.

自分の中で過去を避けるでもなく,耳をふさぐでもなく見つめることができました.

これは私が乗り越えたということです.この期せずして訪れた印象的な機会を忘れないためにこの備忘録は残します.

draw.ioはいいけれど、Graphviz + dot記法もいいぞ!あとNN-SVGも!

論文とかでグラフ書くの面倒

draw.ioはwebアプリでGUIでGoogleDriveとの連携もできていいのですが、TeXとWordが違うように、習熟度が同じならばコマンドによる描画のほうが手軽で堅実です。

Flowchart Maker & Online Diagram Software

グラフ三分クッキング

論文に出てくるようなグラフ、図はほぼ全てGraphvizで書けます。

https://www.graphviz.org

dot記法という簡単なものが用意されているのでそれを使います。 brewでインストールします。

brew install graphviz
touch hoge.dot < echo "digraph graph_name {alpha;}"
dot -Tpdf -O hoge.dot
open -a hoge.dot.pdf

テンプレート例

何でもできるので、必要最低限だけ書きます。

  • ノードの形 node [shape = 形] (box,circle,ellipse楕円だけ覚えればOK)
  • 矢印の引き方 ノード名 -> ノード名
digraph graph_name {
  node [shape = box]
  alpha;
  beta;
  alpha -> beta -> delta;
}

f:id:forhighlow:20191204003902p:plain

その他のグラフの書き方

このgraphvizではないやり方もあります。

  1. draw.io
  2. matplotlib
  3. tensorboard
  4. NN-SVGという有志のグラフ作成ソフト

NN-SVG

NNのグラフ(diagram)はそれでも書くのが面倒です。

NN-SVGというwebアプリケーションがあるそうです。

NN SVG f:id:forhighlow:20191210083457p:plain

f:id:forhighlow:20191210083210p:plain

その他

HackMDというwebエディタではdot記法でグラフが書けます。すごい!

参考文献

Graphvizとdot言語でグラフを描く方法のまとめ - Qiita

Graphviz(dot)ノート 基礎編 - Qiita

Graphviz (dot) examples

How to draw Deep learning network architecture diagrams? - Data Science Stack Exchange

NN SVG

アナイアレイションの解説

アレックス・ガーランド監督の映画「アナイアレイション」の感想

関連しそうな作品

  • 「生き物と無生物のあいだ」の著者、福岡伸一氏の生き物とは動的平衡という発言を彷彿とする細胞の入れ替わりによる自己存在の同定が難しくなる問題。
  • 幼年期の終わり」のような群体から集合的単一存在への進化、そして古い種の絶滅。
  • 遊星からの物体X」 のようなエイリアンの模倣(と融合)。
  • ラブクラフト 「狂気の山脈にて」(未読) の模倣する古きもの。
  • 監督がアレックスガーランド 注意深く深読みしないとただよく分からない雰囲気のカッコいい映画になってしまう。

福岡伸一氏は、生き物とは動的平衡であると言った。細胞は死に、入れ替わっている。そして数ヶ月で入れ替わる。個人としての同一性、連続性はありながらミクロの視点でみれば全ての細胞が入れ替わっているのだから別人である。

しかし、ピースが一つかけたパズルを穴の形から元のピースを作るが如く情報を補うことで情報は保持され、個人が連続の存在であると認識できる。

福岡伸一氏は相補的に柔軟な流れの中に存在し、破壊と修復を繰り返し、バランスを保つ、この特性を動的平衡と定義した。

ストーリー把握のために重要な発言、出来事

  • シマーはミラーリングしている、電波も遺伝子情報も
  • クマが声をコピーしたことを受けて、コピーできるのは、遺伝子情報だけでなく、声や感情もコピーできる
  • 生き物は、自己破壊を必ずしている。生きる為に一見矛盾する自己破壊をする。
  • 遺伝子レベルで自己破壊の習性を生き物は持つ。一見すると自ら不幸になる為に行動する行為は、生きるための手段である。
  • エリアXに入った人間は全てなんらかの形で精神的あるいは肉体的な自傷行為を行なっている人である。
  • 旦那の不在による不倫、依存症、リストカット、スーサイドミッションへの参加、これらは全て自己崩壊への欲求によるもの。
  • 細胞には分裂回数の限界があり、それが生き物の老い、寿命の原因である。
  • 神は生物に欠陥を作らない。分裂限界は欠陥ではない。
  • 細胞が分裂する、交叉するたびに変化が起こり、進化する
  • がん細胞は分裂限界がない。細胞の分裂のエラーであり、進化する代償。
  • 腹から爆発的に増殖したかのように壁に細胞が張り付いた先遣隊の軍人の死体。
  • ワニとサメの融合体の代表する、分化が終わった生物同士の後天的な融合。
  • 孤独だったヴェントレスの、全てが私の中にあるという発言。
  • お前が俺なのか?もうたくさんだ。という辞世の言葉
  • レナ「あなたはケインじゃないのね」ケイン「違うかもしれない。君はレナ?」レナ「」

作品内で一貫したテーマ

要約するのは困難だが、一つ言えるのは、この作品はミクロの世界で起こる細胞の分裂と自己破壊を マクロの人間とを意図的にダブらせている、という事だ。

つまり 人間←細胞

人間の集まりである人類←細胞の集まりである人体

このような構図がある。

であるから、映画の中で言及される細胞に纏わる、あるいは人体に纏わる情報は、理科の授業のように聞き流してはいけないのだ。

なぜならば、細胞に起こることは人間、ひいては人類全体に起こるからである、

ラストシーンで主人公が何者なのか、そしてその意味は何か。

この映画は、ラストに主人公がコピーされた夫と抱き合うシーンで終わる。

この際、二人の目が光る。つまり純粋な人間ではないことが示されている。

しかし、ラストの前のクライマックスで主人公は自分のコピーを爆破している。

素朴に読むと、主人公はオリジナルの人間であると考えられる。

だが、さらにその前ワニを殺した後のボートのシーンで、主人公は腕を怪我したことを意味ありげに語るシーンがある。つまりこ こで体に何か入ったことが示されている。

そして何度も何度も、細胞が分裂するシーンが短く写されて、主人公の顔のアップに切り替わる。

よって、ラストシーンで夫はコピーであると知りながら抱き合っているのは、個人としては初めの主人公と同一であるが、細胞レベルでは同じではない存在である、と言える。

夫の不在による不満を抱えていたレナは、集合的存在と融合したことにより、夫が転写された存在と共に生きる選択をする様に変わるというラストだ。

これはつまりメッセージとしては、オリジナルか偽物かはどうでもよく、自己破滅的な行動をして、人と人とのあいだの関係が壊れても、細胞が自己破壊と同時に分裂と修復が起こるように、元の鞘に戻れるよ。でも元のままには戻らないよ。と言っているのだ。

メタレベルで読めば、監督が作ったエクス・マキナは人間より人間らしい、そして人間より優れた存在が生まれ野に放たれるラストだった。 よってテーマが同じであるならば、ラストの解釈と映画の次に起こることは、主人公と夫は成立過程が異なるが進化した種族のアダムとイブになった。これから、人類が徐々に進化した存在に入れ替わっていくが、それは全体としてみれば動的平衡を保っていて、人類という種族としてこれからもあり続ける。というラストなのだと言える。

また、主人公が頑なにヘイフリック限界が神の意志であることを強調していたことから、この進化の訪れもまた神の采配なのだ、という作り手のメッセージもしれない。

エディタ小噺~Emacsとは~

tl;tr

エディタを使ったことのない、情報系学部一年生などはEmacsではなく、vimIDEを使ったほうがいいのではというお話です。

はじめに

Emacsを使えるようになりたいと思った私に何が起こったかと、 Emacsを使った一人の感想という形で書きます。 令和になったEmacsの現状の一部などお伝えできればと思います。 やり方などは詳しくは載せません。あしからず。

目標

Emacsさげになりすぎないようにします。 というか私のアプローチがおかしくて、Emacsの全力を出せていない感あります。 よって、指摘歓迎です。

Emacsとは

数あるエディタの一つ。 https://i.imgur.com/DLwf6Qe.png CTRLを多用するキーバインドが特徴的。

http://web.wakayama-u.ac.jp/~takehiko/webprg/03_files/emacskey1.gif

(引用 Emacs を使って,文章を書く - Linux による Web プログラミング入門)

"M-x <コマンド名入力>"(Mはメタキー,altとか)みたいにするといろいろなコマンドが使える。

Emacsの優れた点

Emacsは拡張性があります。 拡張性の源は、EmacsLispで動いていることです。 (EmacsLispが書けさえすれば)無限の機能が手に入ります。 現在は他のエディタも拡張性が高いです。

Emacsのパッケージ追加が楽しい

Emacsはパッケージ追加によって、簡単に有志が作ったパッケージを導入できます。 これにより、自分のEmacsを強くしたり、気に入ったカラーテーマに変えたりなど、 いろいろなことができます。 また設定を変えるのがEmacsLispの設定をコピペしたりして簡単にできるので、楽しくて色々入れまくった時期が私にもありました。

EmacsLispの学習曲線()

https://i.stack.imgur.com/7Cu9Z.jpg

(引用 https://stackoverflow.com/questions/10942008/what-does-emacs-learning-curve-actually-look-like )

私は人が書いた設定を少し変えるくらいで1から書くことはできません。

EmacsにはGUIアプリケーションがある!

Emacs.appというGUIアプリケーションがあり、zshからaliasとか変えてEmacs.appで開くようにできます。

emacsformacosx.com

vim + IDEを勧める理由

Emacsのネガにならないように気をつけます。

起動の遅さ

Emacsは他のエディタに比べ、機能が盛りだくさんです。 それにより起動時間が遅いです。 はじめから拡張性を意識したemacslispによる設計である代わりに遅いという事も言えます。

サーバー化

起動の遅さをカバーするために、emacsclientというものを使ってpc起動時にデーモンとしてEmacsサーバーを起動し、それにEmacsを使いたい時に接続するということするアプローチがあります。

サーバー化して何が起こったか

emacsclientを使ってサーバー化して一つのEmacsを使うようになると、vimよりも早くEmacsが立ち上がったようにみえます。

しかし、ここで問題起こる!Emacsが固まったら面倒、、、!

結果

複数Emacsを起動していれば、一つが固まっても他は大丈夫ですが、emacsclientはそうはいきません。 結果、全ての作業が中断するということが起きます。

(Emacsは編集開始時に"hoge.txt~"というバックアップファイル、もう一つはファイル編集中に自動保存で"#hoge.txt#"みたいなファイルを勝手に作ります。これは勝手に作られてなにかの拍子に削除されずに残ることがあり、オフにする人が多くいます。指定の一箇所に保存するのが吉。)

Emacsが遅い対策

私が知るEmacsが遅いことへの対策を書きます。

設定ファイルの分割

ごりごりに改造した設定ファイルは起動時に読み込まれ、遅延の原因になります。 最初に読み込むファイルをinit-loader等で制限することで早くはなります。

別実装のEmacsを使う

Rustで実装されたEmacs、その名もRemacsというものがあります。 私は使っていませんが。

github.com

Emacsが固まるなんてあるの?

自分の場合の話です。

研究室のサーバーにpdfの本があり、自由に読めます。 自分のpcでsshログインして使えます。 しかし、サーバー上にpdfビューワーがありません。

よって読みたい本かどうか物色するには、本の名前をwebブラウザで検索するか、 あるいはダウンロードして中身を見て確認する、等をしなければなりません。

内容が興味ない場合もダウンロードするのはなにか違う気がします。 Emacsでログインして、pdfを開いてプレビューしてみようと思いやってみました。

結果、三冊開いてみて固まりました。(バッファはkillしたんだけれども、、、)

Emacsでタイポ対策が必要

私はview-modeをkeybind登録しています。これにより、すぐにview-modeに入れて、カーソル移動をしている際に意図せずコードになにか入ってしまうことを防いでいます。(vimで良くない?)

キーバインドが好きだけど、、、

Jetbrain社IDEのintelij等主要なIDEは大抵keybindの一つとしてEmacsライクなkeybindを選択できるように最初から用意してくれています。 他のエディタも拡張性が高いため、Emacsライクなkeybindに変えればそれで済むという現状があります。

vim + IDEという結論へ至る理由

私はvimチュートリアルを触った程度です。 今回は軽いエディタの例として出しています。

エディタは軽いほうがいい

エディタが重くてどうにもなりません。軽いエディタを使いましょう。

IDEはつよつよな方がいい

IDEにあってEmacsvimでできない機能は少ないです。 しかし、IDEは著しく進化しています。 例として、Microsoft開発のエディタVisualStudioCodeはgithubのコードのデータを元に機械学習をして、強力な補完を可能にしたDart2.5というものを発表しました。使ったことはありませんが。 Announcing Dart 2.5: Super-charged development - Dart - Medium

以前からEmacsにも自動補完(intelisense,company等)がありますが、こういった高次の機能は開発元が公開して利用できるようにしてくれない限りは、補完の強力さで及ぶことは難しくなっていくでしょう。

また、統合開発環境は開発元がエコシステムとして機能同士が協調するように設計しますが、Emacs統合開発環境に並ぶために機能追加していくと、機能同士の折衝をするのが一苦労ですし、ちぐはぐな環境になりがちです。(helm等の統合されたパッケージ群はありますが)

結論

軽作業では起動等の遅さが目立ち、 強度の必要な作業では、IDEに見劣りします。 よって、vim + IDEが今から始めるひとには良いのかなと思います。

じゃあ今Emacsを使っている人は?

安心してください。活用するべきところがあります。

それは、"登場して間もない言語を使う際に使う"です。

IDEは最新の言語をサポートするのには時間がかかります。 拡張性の高さからか、コミュニティの活発さからかわかりませんが、開発環境構築においてはEmacs(界隈の有志)はかなりの速さで対応してくれます。これはvimも同じです。 よってパッケージインポートにより簡単に開発環境を整えられます。ヤッタ-