Romantic Irony

好きなこと・気になったことについて書いていきます!

学術論文のすゝめ

イントロ

今回は呉高専エンジニア勉強会 Advent Calendar 2017 - Qiitaの10日目の記事です。信州大学B3のNonKuRuです。このアドベントカレンダーのタイトルも「エンジニア勉強会」ということなので、エンジニアの勉強について最近思っていることを書いていこうと思う。

そもそも

なぜこの記事を書こうと思ったかというと、普段周りにいる人との思考の指向のズレというか興味をそそられる領域が違って話が合わないことが多く悶々としているからである。

例えば、講義の時に一番後ろの席に座って講義室全体を眺めるとみんなが何をしているかだいたいわかるが、その内容はたいてい「アニメを観る、漫画を読む、ゲームの実況的な映像を観る、ファッションサイトを物色、SNSスマホゲー、隣同士で会話、課題」あたりが相場である(トレンドを把握するにはちょうどいい)。また、将来どうするのかと聞いてみても「まだ特に考えてない、どうやって就活するのかわからない、やりたいことは特にない、研究は大変そうだから就職、仕事はなんかいやだから進学、安定してそうだから公務員・電力系」と言われることが多い。
・・・。
・・・。
そして俺はこんな顔になる。 f:id:n0x2ca:20171208005041j:plain

決してアニメ、ゲーム、漫画その他諸々がダメだと言っているわけではないし、その人の趣味嗜好に口を出すつもりもないけど、あまり考えずに時間とコンテンツを消費しているだけなのでは?!と思うことが多い(高い学費払って、人によっては奨学金という名の借金をしているのに「場所」を確保してるだけでは?)。

せっかく、大学のしかも工学部を選択してきた自分としては将来について真剣に楽しく語れる仲間が欲しいし、世界をよりよくしていくために何をするべきで自分達に何ができるか一緒に考えて行動していける仲間が欲しい。ということを大学に来て常々感じている。そういう意味で高専の後輩には進学にしろ、就職にしろそこにいる「人」の特質・雰囲気感を見て感じておくことは大切だと伝えたい。

とまあ、前置きが長くなってしまったが、世界をよりよくしていくためにという点で自分たちのようなエンジニアリングに関わりの深い学生に何ができるかを考えた結果、何をするにもまずは情報の量や質が大切だ。例えば「エンジニアになって世界を変えたい」と思ったとしても経験上おそらく何も浮かばない。アイデアや独自性・新規性などは決して、ゼロから考え続ければいづれ出てくるようなものではない。個人的にはサーベイによる圧倒的な情報量がカギになると思っている(つまり、考える→サーベイではなくサーベイ→考えるが正しい順番)。セレンディピティ(偶然の出会いによるひらめき)もあるかもしれないが、それも行動した結果の幸運であってそれを期待して待ち続けることは、できない理由を聞かされるのと同じくらい無駄な時間であると思う。またアイデアが良ければいいというものでもなく、「時代性」も重要な要素だと思う。そういう意味でゲームの開発で有名なSEGAはよく引き合いに出される。(参考【大体いつも10年くらい早い】時代を先取りしすぎなセガの名(迷)ハード10選! | 超ゲームウォーカー!

これまで人類が行ってきたことを俯瞰し、現代の人がどのように世の中を見ているか(トレンド)を把握したうえで、今の時代だからできることをやり「代替不可能な価値」を作りだしていくことがエンジニアとしての本望ではないかなと個人的には思う。

論文を読むということ

IT系のエンジニア・学生は技術ブログや技術書、GitHub、StackOverflowあたりを参考にすることが多いと思うがそれに加えて学術論文をすすめたい!

強いエンジニアの特徴としてすでに多くの人がブログで公開しているような技術の勉強(流行りの後追い)ではなく、多くのエンジニアがブログに書くよりも前にその技術に触れている(逆張りしている)ように思う。そのためには各分野のトップエンジニアがあつまるコミュニティに参加する方法と共に論文を読む方法もある。論文を読むとたくさんいいことがある!

  • 人類の叡智の蓄積である
    論文を読むことでその分野で何がすでに解明されているのか、何が未だに解明されていないのか理解する助けになる

  • 信頼性が高い
    多くの論文は厳格な査読がなされているため、ブログなどのような二次情報もしくは三次情報にはない信頼感がある。(ただし、各著者はたまた自分自身にはそれぞれバイアスがあるということもメタ認知しておく必要はある)

  • 時代の流れを読みやすくなる
    世の中をメタレイヤから俯瞰できるようになる。研究は具体を抽象化して再現可能にするもしくは勉強可能にするものなので。

  • 知的好奇心を満たせる
    情報分野だけでも十分面白いと思うが、専攻とは全く関係なさそうな分野のものを読むのも面白い。ちなみに最近読んだのは「日本美の伝統」というタイトルの論文

  • 多角的な評価・検証・思考のクセがつく
    研究は仮説・検証・評価・考察の繰り返し(いわゆるPDCA)であって、なんとそのプロセスが全て書かれている!他人の思考を覗いている感じ!!

  • イノベーションのヒントが掴みやすい
    リサーチはイノベーションの原石の宝庫なので、エンジニアとしてはリサーチをリサーチで終わらせずにどのように社会実装していけばちょうどいい落とし所が見つかるか考えていくと良いのではないかと思う

論文は難しそうで敷居が高いとか、実用的じゃないという意見もあると思うが実はそうでもない!そもそも勉強熱心で知的好奇心旺盛な人が多いエンジニアにとっては刺激的でなかなかクセになる面白さがある思う。

そして論文とは言ってもその形態にはいくつか種類がある。

  • 原著論文(full paper, research article)
    一般的に論文といえばこの原著論文をさす。投稿され査読を経て学術誌(journal)に載るパターンが多く、学会の会員になると閲覧できたり、購読できたりする。

  • 総説論文(review)
    いわゆるレビュー論文はその分野の先行研究の概要やデータの要約、研究動向、展望が書かれている。また原著論文と比べてその分野のバックグラウンド的な情報も多く含まれているため興味のある分野のスタートとして読むとよい。

  • 速報(letter)
    原著論文は長ければ1年以上の査読期間がある。そのため速報性を重視する場合は査読期間の短いレターとして公開される。

  • 会議録(proceedings)
    学会で発表することが認められた論文が冊子としてまとめられている。

  • 学位論文(thesis)
    卒論や修論修士論文)、博論(博士論文)と呼ばれるものである。

論文の検索サービス

論文を探す上で自分が使っている・もっと活用していきたいサイトをいくつか紹介する。

情報学広場:情報処理学会電子図書館
情報処理学会が提供する電子図書館である。会員登録は無料で学生会員もある。個人的には2015年から学生会員になっている。

https://scholar.google.co.jp/
Googleが提供する論文検索サービス。検索でサジェストされたものが確実に読めるとは限らない。

CiNii Articles - 日本の論文をさがす - 国立情報学研究所
国立情報学研究所が提供するデータベース・サービス。

arXiv.org e-Print archive
コーネル大学図書館が管理している論文投稿サイト。誰でも閲覧可能であるが査読はされていないので信頼性は少し低い。その代わり、ジャーナルに投稿すると同時にarXivに投稿し研究者どうしで直接素早く情報交換をするプラットフォームとなっている。

IEEE Xplore Digital Library
弊学では最近、収録されているフルテキストを無料で閲覧可能となっている。

Journal home : Nature
有名なNatureという雑誌のサイト。興味深いタイトルの論文も多くあるが、有料なため少し手が出しづらい。ただ1ペーパーごとでの購入・レンタル可能なので厳選して課金というのが良いかもしれない。

アウトロ

長くなってしまったので論文の効率的な読み方は高速で論文がバリバリ読める落合先生のフォーマットがいい感じだったのでメモ - 書架とラフレンツェを参考にしてください。

今回の記事で論文を読んでみようと思った人がいれば嬉しいし、〇〇ゼミみたいな形でそれぞれが興味を持った論文の情報を勝手気ままに共有できるSlackグループ作りたいので連絡ください。

就活をしているなかで、とある企業の採用担当の方にファーストキャリアで迷っているという相談をすると「就活も仕事も人生も仮説検証の繰り返しなので、現時点での仮説を立てて行動してみて違ったらやめればいい」という話が印象に残っている。人間はコンピュータのように画一的で汎用なものではなく、多様でどこかしら特化した生き物なので完璧にフィットするロールモデルというのはありえないので身の回りのものごとを少しずつ自分仕様にチューニングしながら生きていくことが大切だと思った。

そして、多くの人がやっていることをやってても価値はないので、なるべく良質な情報を仕入れ人生逆張りで生きていこう!

Ghostscript(PostScript)でフォントデザイン

イントロ

今回は呉高専エンジニア勉強会 Advent Calendar 2017の4日目の記事です。呉高専OBで信州大学B3のNonKuRuです。というわけでアドベントカレンダーに参加することになったので、急遽何か良い題材はないかなと考えたところ思いつかなかったのでGhostscript(PostScript)という言語でフォントデザインをしてみることにした。

Ghostscript(PostScript)とは

そもそもPostScriptに馴染みのない人や初めて聞いたという人も多いと思うので、少し説明する。PostScriptは、画像編集ソフトのPhotoshopIllustrator、動画編集ソフトのPremiere ProやAfter Effectなどで有名なAdobe社によって開発されたページ記述言語のひとつである。

印刷するページ内の文字や画像のようなデータの位置、サイズ、色などをプログラム言語として記述できる。この記述されたスクリプトファイルとPostScriptに対応するソフトウェアとプリンタを使用すれば同じ印刷結果を得ることができる。そのためドキュメントが正確にプリントされることにシビアであるDTPの分野ではグローバルスタンダードとなっている。

コンピュータ黎明期はPostScriptで記述した図形をプリンタで実際に紙に印刷して確認していたが、それをモニタ上でも確認したいということでPostScriptのコードをグラフィックとして表示してくれるIllustratorが開発された。同様にAdobe社が開発したPDF(Portable Document Format)は、PostScriptをベースにして透明やレイヤといった概念も加えた新しいドキュメントフォーマットである。

そしてそのPostScriptをフリーソフトウェアとしたものがGhostscriptである。このGhostscriptは科学研究分野で論文記述のための組版システムとしてよく使用されているTEX(テフ)でもPDFへの変換ソフトとして使用されている。そのためTEXもしくはLATEXがインストールされた環境ではGhostscriptが使える状態になっていると思われる。

簡単な例

実際にどのように記述していくか見ていこうと思う。

・簡単な計算(1)
1 + 3 =これをGS(Ghostscript)で計算するには1 3 add ==と記述する。

・簡単な計算(2)
1 + 3 - 2 =これをGSでは1 3 add 2 sub ==と記述する。

この2つの例からわかるように、GSはスタック指向型の言語である。つまり「add」や「sub」や「==」のようなオペレータが記述されるまで数値は順にスタックにプッシュされ、オペレータが記述された時点までの値と命令の内容によって計算し、その解をこれまた一旦保持し最終的に「==」で計算結果が出力される。ただしオペレータの前に3つ以上数値がプッシュされた状態では最後にプッシュされた2つまでしか計算されずそれ以前にプッシュされた数値はスタックに保持されたままになる。

つまり、1 2 3 add ==の出力結果は 「5」になる。全て加算したい場合は1 2 add 3 add ==もしくは1 2 3 add add ==となる。

以上のことがわかった上で、実際に図形を描画していく。

・直線の描画(相対位置の指定:rmoveto, rlineto)
f:id:n0x2ca:20171203013603p:plain

newpath  
100 200 moveto  
100 100 rmoveto //カレントポイント(描画開始位置を移動)  
200 300 lineto  
250 400 rlineto   //直線描画  
stroke  
showpage  

・直線の描画(幅と色の指定:setlinewidth, setrgbcolor)
f:id:n0x2ca:20171203012604p:plain

newpath  
100 100 moveto  
70 setlinewidth                        //線幅の指定  
100 100 rlineto  
1 0.5 0.3 setrgbcolor stroke   //RGB色の指定  
stroke  
showpage  

・円弧の描画(中心を指定する方法:arc, arcn)
cx cy radius ang_begin ang_end arc //中心 半径 開始角度 終了角度

・円弧の描画(接線を指定する方法:arcto)
px1 py1 px2 py2 radius arcto //2つの接戦を表すための3点と半径を指定

ベジェ曲線の描画(4点の制御点による曲線の描画:curveto)
px1 py1 px2 py2 px3 py3 curveto

・パスを塗りつぶす(fill)
f:id:n0x2ca:20171203014755p:plain

newpath  
140 300 moveto  
100 400 350 400 250 300 curveto  
20 setlinewidth  
0.6 1 0.6 setrgbcolor  
fill  
showpage  

・参考

算術オペレータ 意味 スタックオペレータ 意味
A B add 加算 clear 削除
A B sub 減算 pop ポップ
A B mul 乗算 exch 1番目と2番目を交換
A B div 除算
A B idiv
A B mod 剰余
A B neg 符号反転

オリジナルフォント

今回は「1018」をオリジナルフォントで表現してみた。このフォントのコンセプトは「実用性は完全無視で認知できる最小限の筆の軌跡」である。以下にそれぞれのソースコードも載せておく。
f:id:n0x2ca:20171203021740p:plain

「1」のソースコード

newpath
250 100 moveto
10 setlinewidth
350 100 lineto
300 400 moveto
300 500 lineto
250 450 lineto
0 0 0 setrgbcolor
stroke
showpage

「0」のソースコード

newpath
300 100 moveto
10 setlinewidth
400 100 450 150 450 300 curveto
300 600 moveto
200 600 150 550 150 400 curveto
0 0 0 setrgbcolor
stroke
showpage

「8」のソースコード

newpath
10 setlinewidth
300 200 150 130 320 arc
stroke
newpath
300 500 150 300 150 arc
0 0 0 setrgbcolor
stroke
newpath
250 420 moveto
350 250 lineto
stroke
showpage

アウトロ

今回はプログラミングでフォントデザインをしてみたが、これは実用的かと問われるとその道を極めたい人以外はあまりないと思うので、テクニカルな遊びとして楽しんでもらえると良いのではないかと思う。

人生のコンパス 〜「幸せ」編〜

はじめに

 前回の「人生のコンパス〜「学び」編〜」に引き続き、今回は「幸せ」について考えてみた。

nonkuru.hateblo.jp

 現在の世界の人口はおよそ74億3000万人。それぞれに文化的、思想的、身体的な差異があるが、唯一全世界の人に共通するのは「幸せになりたい」という想いではないだろうか。約7万年前に起こった認知革命以後、人類は「本能的に生きる」だけではなく「幸せに生きる」ということを探求してきたはずだ。しかし未だに「幸せ」の明確な定義はない。(数学で最大の難問とされていた「フェルマーの最終定理」でさえ360年で解けたのに)。

「幸 ー 幸せ」

【「幸せ」には種類がある】

 「幸せ」について考えていて最初に思ったことは、「幸せ」を捉え難くしているのはなぜだろうかということである。なぜ捉え難いのかは、「幸せ」の定義が年齢・経験・信仰によって変化するからだと思った。そこで、定義はできないかもしれないが、世の中で幸せと言われているものを分類することはできるのではないかと思った。
 まず幸せには大きく2種類あると思う。1つ目が「インスタントな幸せ」、2つ目が「根源的な幸せ」である。

インスタントな幸せ

 利己的である。幸せと感じる時間が短い割に、幸せと感じる閾値がどんどんと高くなってしまう。そのため再現性がない。例えば、生まれて初めて買った車の喜びはその1回その瞬間がピークであり、二度とその喜びは得られない。車を所有していることが日常化してしまうからだ。薬物にも似た即効性や依存性があるように思う。その代表格が「お金」である。お金の力を使って自分の幸せを演出することはできても、それは本物ではない虚像にすぎないので要求レベルが上昇し続けいづれ破綻してしまう。しかし、一定の水準までは実際にこうした富が幸せをもたらしてくれるというのも事実だ。

根源的な幸せ

 利他的である。他人との関わりの中で得られる幸せが多い。そのためすぐに得られるものではない可能性がある。根源的な幸せの中にもさらにいくつかの種類がある。

  1. 信頼のおける関係性を構築する幸せ
    一緒にいるだけで嬉しい、信頼、生理的欲求・安全欲求・社会的欲求

  2. 他人や社会に貢献する幸せ
     他を思いやることで自らの幸せを引き出せる、尊厳欲求自己実現欲求

  3. 時間を忘れて没頭する幸せ
     フロー状態、自己超越

またWikipediaには以下のような記述があった。  

1990年代の研究による様々な統計的データによって明らかになったことは、幸福感の基線を決めるのは、環境の客観的な条件ではなく、個々人の内的特徴(「信仰心」や「ものの考え方」など)である、ということである(「主観的厚生」と呼ばれているらしい)。また、幸福感を持っている人に共通する内的な特徴は4つあり、その4つとは ①自分自身のことが好きであること、②主体的に生きているという感覚を持てていること、③楽観的であること、④外向的であること、であると指摘されている。また、人は価値のある活動に積極的に参加し、自身のゴールをめざして前進するときに、より多くの幸福を感じることができる。引用:Wikipedia

これを踏まえると、 西野亮廣さんの以下の言葉に集約されると思う。

『幸福度は「クオリティ」ではなく「伸び率」で決まる。』

【「幸せ」に対する様々な立場】

生物学

 生物学において「幸せ」とは、体内における「快感」である。つまり外的要因は関係ない。神経やニューロンシナプスによって生じる脳内の電気信号やセロトニンドーパミンオキシトシンのようなさまざまな生化学物質にのみによって生じる快感が幸せの正体であるという。しかしその快感指数の標準設定値は人によって異なる。感動的な映画を鑑賞して快感を覚える人もいれば、それほどでもない人もいる。骨折をしてとても落ち込む人もいれば、それまでと大して変わらない人もいる。そして一時的に快感を得られても、人の感情はいずれ元の設定値に戻ろうとする。いわゆる「慣れ」が訪れる。

意義論

 ドラマや映画ではしばしば日々の生活にやる気のない主人公がひょんなことから周囲の人々に巻き込まれ、仕方なく付き合っているうちに自分の楽しみを見つけ最後には活力ある主人公に変わるというものがある。これはまさに自分の人生に生きる意義を見つけた典型的な例だ。またよく聞く話として、子育ては大変だけど成長を見られるのは幸せなことだというものだ。これが示しているのは、幸せとは「不快な時間」が「快い時間」を上回っていることではないということだ。そもそも科学的には人生に生きる意味はない。偶然生まれた地球の上での気まぐれな生物の進化の過程でしかない。しかし死後の世界を信じている人はそうでない人と比べて幸せだと思う。幸せとは自分が生きる意義はこれだと信じられるかどうかにかかっている。それは自己欺瞞にもなるかもしれない。

宗教や哲学(とくに仏教

 仏教では、刻一刻と変化する感情に対して「快い感情」を求めるということ、それ自体が「不快」であるとしている。つまり束の間の感情を空しく追い求め続けることこそ諸悪の根源である。そのことを理解し、束の間の感情の為に生きることをやめた時にはじめて心の平穏が訪れるというのだ。仏教用語では「涅槃(ねはん)」と呼ばれる境地である。さらに仏教では、本当の自分は何者かを理解することが幸せへの道しるべであるとしている。もしそうだとすると、経済的・物質的豊かさは「幸せ」とは関係ないのかもしれない。

期待感

 幸福は「期待」に左右される。主観的な「期待」と客観的条件の相関関係によって決まる。つまり何かを期待し、その期待が満たされると、幸福になる。一方、期待が満たされないと、不幸を感じる。しかし、生活状況がよくなれば、期待も上がっていく。心理学の分野では、人間は達成や楽しみを経験している時に、「満足」ではなく、「もっと欲しい」と感じることがわかっている。「もっと欲しい」という反応を示している限り、満足することはない。個人のレベルでもそうだが、集団でもそうなっている。30点だと思っていたテストの結果が80点だととても嬉しいが、90点だと思っていたテストが93点でも大して嬉しくはならない。反対に、骨折をしてしまうとその後の生活の期待は小さくなってしまうので生活水準が多少下がっても幸福度はさほど下がらないが、宝くじが当たるとその後の生活の期待が大きくなってしまうので生活が多少良くなっただけでは満足感は得られない。周囲のマスメディアや広告から得られる「期待感」はむしろ現代の人々、もっと言うと先進国人々の幸福度を下げている要因になのかもしれない。

 これら4つの立場の見解は、どれか一つが正解というわけではなくどれもが複雑に絡み合っているように思う。

さいごに

 今回は「幸せ」について考えてみたが、あえて何か答えを出すとしたら「信じる」に集約されると思った。人類は物語を想像しそれを信じることで繁栄してきた。そしてその「信じる」という能力こそが人が人であるということならば、人生に意味があるのか、ではなく人生という意味を自分で創造することがこれからの幸せにつながるのだと思う。近代の人々は何を幸せと信じていたのかを考えてみると意外に答えは身近にあった。そのひとつは資本主義だ。資本主義者は、経済成長と物質的豊かさを実現し、人々に自立と進取の精神を教え諭すことによって、自由市場だけが最大多数の最大幸福をもたらすこができると主張した。より豊かで健康になれば、人々はより幸せにもなるはずだと。また科学者は知的好奇心を満たすことや人類の知識量を増大させる人生に意義があると信じている。政治家はより良い国にしていくことこそ自らの人生の意義だと信じている(はず)。

 改めてこれから自分は何を信じて生きていきたいのかを考えてみた。それは「信用主義」だと思う。暗号通貨やクラウドファンディングVALUというテクノロジーやサービスによって個人とそのつながりがクローズアップされる時代になってきた。そんな時代に「嘘」をつくことのリスクは大きい。デジタルネイティブは気づいている。テレビは「予定調和」だと。お金やクレジットは本物の信用ではない。これからは人間関係の中で生まれる本物の信用を獲得して行くことが大切ではないかと思う。

そしてその信用を糧により多くの利他に貢献することが結果的に満足感や自己肯定感、承認欲求を満たすことになり結果的に自分の幸せにつながるのだと思う。

人生のコンパス 〜「学び」編〜

はじめに

 今年の夏休みは2社インターンシップに参加した。その2社は大手企業とベンチャー企業だった。また分野の違うインターンシップの報告会にもほんの少し関わった。そして、これまで何度かやってみたいなと思っていたがあまり優先度が高くなかった「ヒッチハイク」にも挑戦してみた。そんな中でいろいろな方と話し、見て、感じたことで「自分が本当に欲しているモノはなんだろうか」「どんな企業に行きたいのか」「これから何をしていきたいのか」等を夏休みの振り返りも兼ねてじっくり考えておきたいと思った。石段の家プロジェクトリノベウィークにも参加したい気持ちもあったが、あえて一人で時間をかけて考えてみる方が今後のためにも良いのではないかという直感が働いたので今回はお断りさせて頂いた。

 というわけで、これまであまり明確に考えてこなかったコトや疑問に思っていたことを改めて考えてみることにした。まだまとめ終わっていない、考えきれていないところもあるが、完成を待っているといつまでも公開できないと思ったので途中ではあるがとりあえず公開してみることにした。そこでもしコメントがもらえればそこからさらに深めるヒントにもなると思った。また一度に全てを書くと読むのが億劫になってしまうと思ったので、いくつかに分けて投稿していきたいと思う。                                                                                ※文章のつながりがない部分も散見されると思いますが、優しい目で意味を汲み取って頂ければと思います。

「学 ー 学び」

【何のために”大学”へ行くのか】

 結論からいうと「幼少からの環境に依存した思考の枠」「臆見」を認識して、それらにとらわれずに考える術を学び、思考をリベレイト(自由に)することにあると思う。一言で言うと「批判的思考力」だ。社会の多くのモノ・コトは人類の想像によって生み出されたものだ。言語しかり貨幣・宗教・資本主義・会社・株式その他多くの思想や芸術作品。これらは地球においては必要なものではないが、人が ”集団”で生活し繁栄するうえで重要なものだ。しかしその想像力のおかげで偽の情報が生まれたり、生まれた時には既にあったルールを常識と認識して思考の牢獄にとらわれてしまったりする。そこから脱出するために「批判的思考力」を養う必要がある。そして、より聡く、より敏感に、より自由に、より満たされて生きられるように自己を確立していくことが必要である。書物、知識、芸術作品や思索が生んだ作品、さらに周りの仲間たちがそれぞれのやり方で自分の答えを探そうとしていることから感じるプレッシャー。それらすべてが刺激し、混乱させ、妨害することによって、それまでの人生を根底から覆すような経験が必要ではないか。そう考えると、今の大学を楽しくないと思ってしまうのは「感情の揺さぶり」が少ないことが原因ではないかと思う。

【なぜ ”大学で” する必要があるのか】

 大学は「現実社会とはかけ離れた特別な場所」だからである。両親という安全基地から離れ、生き馬の目を抜くような社会とのはざまで冷静に考えられ、「社会」を客観視できる環境にある。大学は、考えることを学べる最初の場所でなければ、最後の場所でもないが、最高の場所であると思う。

【どうすればよいか】 

 まず基本的なことだと思うが専攻に限らず興味を持ったこと・疑問に思ったことや常識だとされていることについて調べてみることにあると思う。そのうえで意識的に「ロマンティック・アイロニー」を確保することだ。ロマンティック・アイロニーとはドイツ・ロマン派の思想家フリードリヒ・シュレーゲルが提唱した概念である。直訳すると「浪漫的皮肉」。その説によると、なんでも天才というものは、何の目的もなく、意識して努力することもなく、終日あてもなくぶらぶら歩き回らなくてはならないというものだ。さすがにこれは誇張されたまさに皮肉のようにも聞こえるがこれの意味するところは、意識的に「ぶらぶら散歩する」や「河川敷に寝転んで空をみる」「ぼんやり山を眺める」のような何にもしない時間をとることの重要性を言っているのではないかと思う。最近の脳科学の研究では、先ほど挙げたような特に何もしていない時間に、脳のDMN(デフォルト・モード・ネットワーク)と呼ばれる回路が活性化し記憶の関連付けや消去などの活動が行われているという説があるらしい。情報が錯綜し脳の休まる時間が減った現代だからこそあえてそのような時間を作り、自分を内観してみる。そういうことを繰り返す行うことで、ゴーギャンの代表作『我々はどこから来たのか 我々は何者か 我々はどこへ行くのか』というような根源的な問いができる心の余裕が生まれ、自己の確立に繋がるのではないかと思う。
 また留学すると考え方が変わったという話はよく耳にするが、おそらく「留学」という全く異なる環境に身をおく行為によって自分自身を内観することが多くなり、図らずともこの「ロマンティック・アイロニー」を作り出していたのではないかと思う。「読書」も留学と同じように自らを内観できる機会を提供してくれるが、その効果の持続性はとても短いように感じる。そして母校の呉高専での「インキュベーションワーク」という取り組みも「感情の揺さぶり」という点で有効に働けば良いなと思う。

さいごに

 学部の経験を就職の準備だけのために捧げてしまうのは勿体無いと思う。大学が職業訓練校化しているように思う。専攻科目は他に何も学ばないから専攻なのではなく、他に学ぶからこその専攻ではないか。ここの認識の違いが普段大学の友達との関わりの中で感じていた違和感なのかもしれない。もし大学を出るとき、入ったときと同じまま(同じことを信じ、同じ価値観を持ち、同じ希望を抱き、同じ理由で同じ目標を目指している)なら学位をとると言う意味では成功ではあるが、別の意味で大学をしくじったのかもしれないなとも思う。
 手元にスマホがある時代に同じ時刻に同じ教室に集まって一方向通信の講義を受ける。そこにのっかるコンテンツも全員を同じレベルに揃えて効率的な人間にしようとしてきた。そもそもひとりひとり違う周波数を持っているのに無理に合わせようとするから歪みが生まれてくる。その中で大学は、個性を伸ばす意味でのアンプや個人の内面を知る意味でのフーリエ変換としての機能が今後重要になってくると思った。

Ubuntu16.04にDocker入れてさくっとハニーポット構築(cowrie)

以前からハニーポットを立ててみたかったのだがなかなか機会が見つけられずそのままずるずる時間がたってしまった。しかし最近ちょうど時間もあったので勢いで構築してみた。今回はSSHハニーポットのcowrieを使った。cowrieはkippoの上位互換なので。どこが上位互換なんだよ!って人はSSHハニーポットはKippoではなくCowrieを使え - 日々のおべんきょを参考にしてください。

基本的には DockerをLinux(Ubuntu 14.04 LTS)にインストールする方法と解説 | tracpath:Worksに書いてある通りに進めていった。

構築環境

  • さくらのVPS
  • OS : Ubuntu 16.04
  • メモリ : 1GB
  • HDD : 100GB

Dockerインストール

OSの確認

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu  
Description:    Ubuntu 16.04.1 LTS  
Release:        16.04  
Codename:       xenial

カーネルのバージョン確認

Dockerはカーネルのバージョンが3.10以上でないと動作しないらしい

$ uname -a
Linux ubuntu 4.4.0-42-generic

wgetコマンドがあるか確認

$ which wget
/usr/bin/wget

wgetでDockerダウンロード

$ wget -qO- https://get.docker.com/ | sh

Dockerの動作確認

$ sudo docker run hello-world

dockerグループを作成しsudo権限のあるユーザをグループに追加

$ sudo usermod -aG docker [ユーザ名]

ここで一旦ログアウトもしくは再起動

もう一度Docker動作確認(sudoなしで!)

$ docker run hello-world

先ほどと同じようなメッセージが表示されれば成功 このあと先ほどの参考記事ではgrubの設定をいじっていたがVPSで手元に実機がないうえ、実はVPSを友人と共有していてビビったので行わなかった。(おそらく問題はないと思うが...)

ファイアウォールの設定

Ubuntu16.04ではデフォルトでUFW(Uncompaticable FireWall)という複雑なiptablesをラップするツールがありとても便利なのでこれを利用すると良い。

ファイアウォールが動作しているか確認

$ sudo ufw status
Status: active

エディタでufwの設定変更

$ sudo vi /etc/default/ufw

DEFAULT_FORWARD_POLICYをACCEPTへ変更

DEFAULT_FORWARD_POLICY="ACCEPT" 

ポート2375(tcp)を開放(Dockerのデフォルトポート)

$ sudo ufw allow 2375/tcp

もし22番ポートも閉じていたら開けるのを忘れないように(cowrieで使う)

ファイアウォール設定リロード

$ sudo ufw reload
Firewall reloaded

DNS設定

Dockerの設定ファイルを編集

$ sudo vi /etc/default/docker

外部のDNSサーバ(ここではGoogle)を利用するように以下のコメントを消す

#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

Docker再起動

$ sudo /etc/init.d/docker restart

これでDockerのインストールは終了! つづいてcowrieの構築。といってもすぐに終わる。

Docker上にcowrie構築

DockerHubから他の人が保管しているcowrieコンテナイメージを探す

$ docker search cowrie
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
k0st/cowrie                        Cowrie - SSH honeypot based on kippo (mini...   4                    [OK]
dtagdevsec/cowrie                  cowrie                                          2                    [OK]
wonderfall/cowrie                  SSH Honeypot. Based on Alpine Linux.            2                    [OK]
ouspg/cowrie                       Cowrie honeypot based on alpine:latest          1                    [OK]
armbues/netscreen                  SSH honeypot based on Cowrie modified to l...   1                    [OK]
vimagick/cowrie                    A SSH honeypot                                  0                    [OK]
rayson/cowrie                      Cowrie is a medium interaction SSH and Tel...   0                    [OK]
valerianomanassero/cowrie-centos   Docker Image packaging for Cowrie on Centos     0                    [OK]
thechris/cowrie                    A lightly modified version of cowrie            0
viker/cowrie                                                                       0
solson/cowrie                                                                      0
viker/cowrie-kippo                                                                 0

この中から好きなものを選択(今回はk0st/cowrieを使った)

コンテナイメージをローカルにもってくる

$ docker pull k0st/cowrie

コンテナ起動

$ docker run -it -name cowrie -p 22:2222 k0st/cowrie /bin/sh

ここでちょっとdocker runオプションの説明
-it : コンテナ起動後そのままコンテナ内にログイン
-name : コンテナに名前をつける(この名前はコンテナ削除時などコンテナ指定する場合に使用。これを指定していないとデフォルトで付与されるランダムな英数字の文字列で指定しなければいけないためめんどう)
-p : ホストの任意のポートをコンテナの任意のポートへ転送(この場合ホストの22番ポートにきたアクセスをコンテナの2222番ポート(cowrieのデフォルトの待ち受けポート)へ転送)

最後の/bin/shはコンテナ内で使用されているシェル(普通は/bin/bashだがこのk0st/cowrieで設定されているシェルが/bin/shだった)
コンテナから出るときは、

$ exit

ででれる。すでに起動した後にもう一度入りたいときは以下のコマンドで入れる。

$ docker exec -it cowrie /bin/sh

作成したコンテナの確認

$ docker ps -a

cowrieコンテナの削除

$ docker rm cowrie

まとめ

今回はじめてDockerとハニーポットを使用してみてこれはいろいろできそうだなと期待が高まった。(Dockerつよすぎ!!) ハニーポットに関しては侵入してきた攻撃者の動きが動画で再生できるのはとてもおもしろい。今後はkippo-graphなどでデータの可視化にも挑戦したい。

参考

DockerをLinux(Ubuntu 14.04 LTS)にインストールする方法と解説 | tracpath:Works

SSHハニーポットはKippoではなくCowrieを使え - 日々のおべんきょ

Dockerコマンドメモ - Qiita

いまさら聞けないDocker入門(1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 - @IT

VPSでハニーポット運用はセーフなのか

前々からハニーポットを運用してみたいと思っていたが、金銭的に難しくなかなか機会がなかった。しかし、今回さくらインターネットのクーポン券が手に入ったのでこれを機にはじめよう!...と思った。しかしVPSハニーポット運用は契約的にセーフなのか気になったので調べてみた。(これは個人的な見解なので鵜呑みにしないようにお願いします。)

サービスと規約一覧

>犯罪行為、犯罪行為をそそのかしたり容易にさせる行為、またはそれらのおそれのある行為
→場合によってはアウト?
>当社あるいは第三者の運用するコンピュータ、電気通信設備等に不正にアクセスする行為、クラッキング行為、アタック行為、および当社あるいは第三者の運用するコンピュータ、電気通信設備等に支障を与える方法あるいは態様において本サービスを利用する行為、およびそれらの行為を促進する情報掲載等の行為、あるいはそれに類似する行為
→ビミョーww

まとめ

 結果的にハニーポットを明示的に禁止しているところはなさそう?ただ、運用のミスがありサービスに影響を与えてしまった場合はアウトになりそうなところもあったように思える。(無難にラズパイとかで運用したほうがいいのかな〜)  知見のある方からコメントをいただいたところによると、インバウンド(自鯖にアクセスしてくる悪意のある通信)はセーフだけど、アウトバウンド(自鯖から出て行く悪意のある通信)はアウトみたいです。それと、ハニーポットが見破られて破壊されてももちろんアウト!!  ということなので、運用には十分気をつけましょう。

もしこういう場合はアウトといった情報や経験があればコメントをお願いします。m( )m

セキュリティ・キャンプ全国大会2016に参加した

8/9〜8/13に開催されたセキュリティ・キャンプ全国大会2016に参加してきました。このセキュリティ・キャンプはこれまでに13回開催され約600名もの卒業生を輩出しています。その卒業生の方々は様々な分野で活躍されておられ、私としましては憧れの存在です。そんな先輩方に追いつくべく、耳の穴かっぽじって講義を受けてきました!笑

f:id:n0x2ca:20160815234211j:plain

0日目

私は地方から参戦しましたので、初日の集合時間に間に合わないということで会場兼宿泊施設であるクロスウェーブ幕張に前泊しました。私以外にも数人前泊対象の参加者がおられましたので、一足先に名刺交換させていただきました!この日は明日の準備だけして早めに寝ました。

1日目

 いよいよセキュリティ・キャンプが始まりました!会場へ向かうとさっそく本格的なカメラを向けられ抱負を聞かれました。(テンパって噛みまくったww)既に名刺交換の応酬が始まっていたので 「出遅れた」と思いつつも開講式の時間までひたすら名刺交換していました。(同時に数十人が名刺交換していたので誰と交換したかわからなくなりましたw)
 開講式が終わるとセキュリティ基礎講座や特別講義が行われ、大変興味深いお話を聞くことができました!特に特別講義でのインターポールの福森さんのお話はインターポールという組織の重要性やこれまで自分の中になかった視点の話が聞けてとても面白かったです。講義の後に福森さんと名刺交換させていただき、CDIシャツをいただけることに!!(やったぜ!)
 夕食後は会場に戻りグループワークの説明を受けました。テーマは4つあってその中から私たちのグループは唯一「10年後のIT社会のセキュリティのあるべき姿」を選びました。ちなみにチーム名は『osx』(おーえすえっくす)です。(たまたまグループ全員がMacという奇跡w)読みが「おーえすてん」ではないのはあえて。

2日目

 この日から毎朝8:30に専門講義が始まりました。私が受けた講義は「1-C 公開鍵暗号のハードウェア実装と攻撃〜ICカードが持つ脆弱性とその対策〜」と「2-C 人工知能とセキュリティ」でした。専門講義の後はグループ対抗seccamp CTFが開催されました!!
 1-Cではまず公開鍵暗号の概説があり、そのあと実際に機器を使用してICカードに対してサイドチャネル攻撃をしかけ鍵を取り出すということをしました。これは実際のクレジットカードにも有効だということでなかなか中二心をくすぐられる講義でしたw
 2-CではRやPythonディープラーニングを使ってみるという実習と人工知能を活用していく上での問題点として学習の時点でコンタミがある場合の対策などについてグループでディスカッションしました。

3日目

 この日受けた講義は「3-D The OOM CTF」「4-D 実行ファイルの防御機構を突破せよ」「5-A サーバ運用におけるパスワード管理」盛りだくさんな専門講義の後は特別講義として伊藤忠テクノソリューションの方から普段の仕事のお話をしていただきました。
 3-DではLinuxのメモリ管理機構として備わっているOOM killerについてお話していただきました。序盤はふむふむと余裕ブッこいて聞いていたのですが、OOMの本題に入ったあたりからとても難解になりよくわかりませんでしたw(チューターの方にとっても難しかったらしい) さすがLinuxのメモリ管理の闇というだけあるなと感じました。ただ、Linuxカーネルの闇を理解したいという気持ちが湧いてきたのでよかったと思います。
 4-Dでは事前課題で解いたx86バイナリをさらにグレードアップさせた問題をひたすら解析しました。x86バイナリを読むのはだいぶ慣れてきたのですが、ASLRが有効の状態でシェルを奪取するというのは自分には少し難しかったです…。ただGOT領域のアドレスをリークさせるところまではできたので復習して解けるようにしたいと思います。
 5-Aでは業務でペネトレーションテストをされておられる講師の経験をお話しいただいた上で、パスワードの管理方法についてグループでディスカッションしました。以前からパスワードの管理は煩わしいと思っていて何か有効な解決策はないのかと気になっていたので、いろんな意見が聞くことができとても参考になりました。

4日目

 この日受けた講義は「6・7-E インフラセキュリティ・ブートキャンプ」でした。この後に特別講義でDeNAがスタートアップだった頃からインフラを担当されている方になぜセキュリティの仕事をしているのかというルーツをお話をしていただきました。
 6・7-Eでは主にAWSをterraformというツールを使いチームで構築するというものでした。私はAWSもterraformも今回初めて触ったので、AWSの環境と構築方法の理解とterraformとの関係性などについて調べるとこから始めました。その後手動でAWSと構築し、ある程度理解した後terraformを使ってVPCを構築してみるとその容易さわかりやすさに驚きました。これを機にクラウドでのインフラ構築もやっていきたい。

5日目

 最終日は午前中にグループワークの発表がありました。他のグループはとても面白い発表していてやべーってなってましたw
発表終了後は昼食食べて閉講式して集合写真撮ってという感じでした。集合写真のとき今年のセキュキャンのキーワードでもある「今日も1日がんばるぞい!」を何回言ったかわからないw そして最後になんと!!プレゼントタイム&サイン会!!!様々な技術本や雑誌、Tシャツ、グッズなどをいただきました!(圧倒的感謝!!!!!!)

f:id:n0x2ca:20160815234255j:plainf:id:n0x2ca:20160815234310j:plainf:id:n0x2ca:20160815234317j:plainf:id:n0x2ca:20160815234323j:plain

感想

 参加する前は4泊5日は長いな〜と思っていましたが、終わってみるとまだまだやりたいという思いでいっぱいでした。CTFは時間が短かったのでここからというところで終わってしまいちょっと残念でした。
 私はあまりアニメを見ないのでついていけてないところもあり、会話に入れないことがあったので今後はアニメトラックもがんばりますww そして来年はチューターとして参加したいと思います!!

さいごに

 今回セキュキャンに参加させていただくことで各技術分野のトップの方たちとお話ができたり、SNSで繋がれたり、ともに頑張る仲間できたりと技術や知識以上に得られるものが大きかったです。技術力をあげたいという人や仲間がほしいという人は絶対に参加すべきだと思います。ただセキュキャンに参加することがすべてではないですし、参加して満足するようでは意味がないのでそこをお忘れなきを。