masquerade0324のブログ

とある大学院生のメモ書き

2016年の振り返りと2017年の取り組み

2016年を振り返る。

(すごいどうでもいいけど、語尾をですますにするかいつも迷う。)

仕事に関して

2016年はとにかく大変だった。本来の業務としてもそもそも忙しいのにも関わらず、かなりしんどい教育とかなりしんどい社内での発表が重なり、ギブアップしそうになっていた。そんな中でもなんとか乗り越えて、成果・結果を残せたことはかなり大きい。2016年は終わるが、年や年度に関係のある仕事ではないため、引き続き来年も頑張っていきたい。

とはいえ、あまりに頑張りすぎて「ワークライフバランス」が崩壊して今年は他に何もできていないので、2017年は業務の効率化をはかった上で早く帰ることも心がけたい(なぜか仕事してないのに会社で残業している給料泥棒のような人になってはいけない)。

プログラミング・計算機科学に関して

何もやれていない。。。正直、エンジニアとしては致命的だと感じているので、2017年は少しずつでもいいから取り組みたい。

  • 新しい言語を始める(ちょっとだけやり始めたGo、最近よく聞くRust、)

  • オレオレミニミニ言語のコンパイラを作る

  • プロコンにちょっとずつ復帰する(弱いのは気にしない)

  • Gitをいい加減ちゃんとやる(業務に逆輸入できたら最高)

  • なにか一つ小さくてもアプリケーションを作り上げる(GUIが絡むとなお良い)

上に挙げたことを、全部でなくてはいいから少しずつでも取り組む。

アニメに関して

新しいのはだいぶ見ていない。リゼロくらい。あと、マクロスΔもか。後はNetflixで旧作を見ている。

2017年も新作を追うことはほぼないと思うが、Netflix・Hulu・バンダイチャンネルAmazonプライムビデオを活用して、旧作を見つつ、比較的新し目のものも見たいときに見る。

海外ドラマに関して

これこそ全く見ていない。見たいドラマあり、リストに入ってもいるが。。。長期連休のときに一気に見ると良いかも。2017年はそんな感じで。

コーヒーに関して

いっぱい飲んだが、自分で入れる機会が少なくなった。

2017年は自分でおいしくなれるように。また、おいしいコーヒー店めぐりもしたい。

音楽に関して

Galileo Galileiの解散。これに尽きる。解散ライブには行けたが、そこからの喪失感が如何ともし難い。本当にGalileo Galileiは好きだった。もちろん今でも好きだし、曲は聴き込んでいる。ただ、もうライブはない、新曲もないと思うと寂しさを感じずにはいられない。

マクロスΔのユニット「ワルキューレ」も良かった。「ルンがピカッと光ったら」の中毒性は高い。

2017年は新しいお気に入りバンドを見定めたい。最近気になっているのは、今更感もあるけどback number。ベストアルバムが出たらしいのでまずはそこから入ってみるのが良いかなと思っている。ライブにも行ってみたいが、人気あるからそもそもチケットが取れるのか。。。

梶浦由記のサウンドがかなり好きになってきたので、それ関係のライブ(コンサート?)にも行ってみたい。

あ、UVERworldのライブは誘ってくださいね。

旅行に関して

国内旅行はかなりした。旅行のために仕事を頑張る!という感じだった。良い感じだクマー。

2017年も旅行は継続。友人との温泉旅行もしたいと思っているので、各位よろしくお願いします。

読書に関して

いつの間にか一番の趣味になっている読書に関しては、やはり去年よりは読めていないかなと感じている。と言いつつ、100冊近く読んでいる。明らかにラノベ

これだけですでに50冊を超えている。今までは忙しいときは漫画を読んでいたが、ラノベを読むようになったので、こんな感じになっている。

読みたいものを読みたいときに読めればいいと思っているで、2017年もこんな感じだと思っている。

とは言え、実はかなりミステリの積み本がある。読みたくない本は買っていないので、順番を決めて読む。

総括

仕事によって、余暇活動が圧迫された。そんな中でも実はかなり楽しい1年だった。

2017年も楽しい1年にする。何よりも大事な目標。

よいお年を。

Go言語学習記①〜開発環境の整備〜

2016年も終わろうとしている時に、かなり久しぶりの更新。

Go言語を学んでみようと突然思いったため、まずは開発環境を整備する。

前提条件は以下の通りである。

Go言語のインストール

アーカイブを公式サイトからダウンロードして、解凍する。すると、goというディレクトリできているため、これを/usr/localに移動する。以下の設定では、今後バージョンで切り替えられるようにするために、シンボリックリンクを張っている。

$ tar -xzf go1.7.4.linux-amd64.tar.gz
$ sudo mv go /usr/local/go1.7.4
$ sudo ln -s /usr/loca/go1.7.4 /usr/local/go

これだけでGoのインストールは終わりのため、あとは.profileを編集して、環境変数PATHに/usr/local/go/binを加える。

PAHT="$PATH:/usr/local/go/bin"
export PATH

さらに、Go開発のワークスペースのために環境変数GOPATHを設定する。

GOPATH="$HOME/go"
export GOPATH

Go言語のインストールは以上。

Emacs環境の構築

次に、開発環境を構築する。

Emacsが使いたいので、Emacsのパッケージマネージャで、以下の項目を入れる。

  • go-mode
  • go-autocomplete
  • go-eldoc
  • go-direx

あとは、~/.emacs.d/init.elにちょっとだけ記述を追加する。

(require 'go-autocomplete)
(add-hook 'go-mode-hook 'go-eldoc-setup)

Emacs環境構築もこれだけ。

動作確認

お約束の、「こんにちは、世界」のプログラムをGo言語で書いてみる。

f:id:masquerade0324:20161218173634j:plain

シンタックスハイライトもしているし、補完もしているし、問題なく動作しているように見える。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("こんにちは、世界")
}

こんなコードを書いて、あとはコンパイルして動作させてみる。

$ go build -o hello hello.go
$ ./hello
こんにちは、世界

意図した通りの出力が得られており、今回も世界と挨拶ができた。めでたしめでたし。

まとめ

Go言語の環境構築は思った以上に簡単だった。言語学習の障壁の最たるものが環境構築だと思っているので、その点でGo言語は良い。

おまけ

クリスマスバージョンの球磨ちゃんめっちゃかわいい。

相沢沙呼「小説の神様」を読んで思ったこと(駄文です)

好きな作家の一人である相沢沙呼著の新刊「小説の神様」が心に響いたので、久しぶりにブログを更新します。感想というか、思ったことをそのまま書くつもりなので、きれいな文章とはならないでしょうが、悪しからず。

 

小説の神様 (講談社タイガ)

小説の神様 (講談社タイガ)

 

 

お話の概要は、

「売れない高校生作家の千谷一也(ちたにいちや)が、同じクラスに転向してきた人気美人高校生作家の小余綾詩凪(こゆるぎしいな)と関わるようになり、二人で小説を合作するということになる。しかし、千谷は著作が売れないことで持っている悩み、小余綾は人気故に持つことになってしまった悩みをそれぞれ抱えている。そのため、ぶつかり合うこともしばしば。それでも、書くことだけが前に進む方法の二人。そんな彼・彼女が紡ぐ物語。」

といったところでしょうか。

 

このお話の重要な部分として、主人公千谷一也が売れない作家ということです。

何作書いても売れない。文章は非常にうまく、小説の賞でも選考委員から非常に高評価を得ている。でも売れない。なぜ売れないのか。書店には彼の著作よりも明らかに劣ると思われる本が平積みされている。一方、彼の作品は小さな書店はでは配本されていない。売れないのは彼のおもしろいという感性がおかしいから。世の中はもっと安易な感動を求めている。売れるためには彼の書きたいものではなく、世間が求めているものを書かなくてはならない。書きたいものを書けるのは、すでに売れている人気作家だけ。

という状態で、「闇が深い」と言わざるを得ません。

 

これは小説の千谷くんに限った話ではなく、現実にある問題です。自分は物書きではないので出版業界についてはよくわかりませんが、読者として思うところはやはりあります。

例えば、最近はどの書店に行っても目につく所に置いてある本は、有名作家のものばかりです。商売としては売れ筋を売るのが利益確保のためには当たり前かもしれませんが、悲しいこととも思います。無名作家の著作は、いくらおもしろくても売れない、そもそも店においていない。それに対して、言い方は悪いかもしれませんが、全く中身がないような作品なのにやたらと売れている現状がある。世間の人は日々の生活で疲れ、楽に読める、読んだ後に頭・心のなかに残らないような非常に軽い作品を望んでいる。

なんかなーと思わずにはいられません。この著作相沢沙呼先生が、Twitter著作が売れないという発言をされているのを見かけたことがあります。正直、ショックでした。好きな作家の著作が売れていない。酉乃初シリーズ、マツリカシリーズや非シリーズものを読んで、中高生の繊細な心理描写は随一な作家だと思っていたのに、売れていない。世間では、もっと違う作家の作品が売れている。

 

そういった現実の中で、一読者にすぎない私にできることはなんだろうかと考えると、「他人の評価関係なく、自分が好きな作品を買って読むこと」と「読むことで感じる考える何かがあること」の2つだと思います。

前者は、言わずもがなですが売れているから買うのではなく、自分が買いたいと思ったものを買う、というだけのことです。無名作家だから買わない、というのは本当にもったいないと思います。自分がこれだ!と思った作品を買って読むだけでも、自分に何かしらいい影響があると思います。もちろん、作家さんにも。

後者は、「小説の神様」の言葉で言えば作者の作品に込めた「願い」を感じる、ということだと思います。いま自分がこの文章(?)を書いているのも、「小説の神様」に込められた願いに対して、何かしら私が思うことがあったからです。

 

思うままに書いてしまったので、意味不明なことばかり書いてしまいましたが、要するに「これからも好きな本を読んでいく」ということです。

 

最後に、相沢沙呼先生、素晴らしい本をありがとうございました。これからも先生のファンとして、新作を期待しています。

2015年の決意とか決意以外

はじめに

あけましておめでとうございます。今年もどうぞよろしくお願いします。というには、遅すぎますね。2015年1月もすでに中旬です。時が経つのは早いものですね。

さて、新年最初の月ということで、今年1年頑張りたいことや、頑張りたいこと以外を書いていきます。そして12月に、どれくらい頑張れたかなと振り返りをします。覚えていたら。

では、早速いきましょう!

仕事に関して

2014年からついに社会人になり、今年の4月で2年目に突入します。現在の職種はおそらくソフトウェアエンジニアになるのかなと思います。システムエンジニアではないですね。システムの中のソフトを担当しているので。

兎にも角にも、まずは与えられた仕事をきっちりとこなせるようになりたいです。当たり前のことですが、現時点ではこのことがやはり大事なのかなと思います。最低限こなした上でプラスαをしていくことが課題になっていくのかなとも思います。まだまだ学ぶこと・教わることばかりですが、給料分の働きをしっかりせねば!と肝に銘じて頑張ります。

また、最近流行り「ワークライフバランス」にも気をつけながら取り組みたいです。仕事ばかりやって自分の時間がなくなっては本末転倒です。上司の方々が、有休積極的に活用しろよ!だとか、早く帰ってリフレッシュしろよ!だとか言ってくださるので、人に恵まれている職場だと感じており、心配することはないのかなと思います。

仕事に関してはこんなところです。

余暇時間に関して

では、余暇時間には今年は何をしようか考えていきます。

プログラミング・計算機科学に関して

まずはプログラミングや計算機科学のことでやりたいことを考えます。2014年はこの方面、あまりやれていませんでした。今年は次のようなことをしたいと考えています。

まだ何かありそうですが、ぱっと思いついた今やりたいことがこれらです。結構ありますね。でも、楽しみなことばかりですね。

読み進めながら学習したい本に関しては、Studyplusのようなサイトで管理しながら進めていくのがいいかなと思っています。

コードに関してはGitで管理して、リモートリポジトリをGithubで管理して公開するとモチベーションを保てるのかなと考えています。

読書に関して

次は読書に関してです。これもやはり2014年は2013年に比べると読めていません。が、それは社会人になったのである程度予測していた範囲です。なので、今年も、読みたいときに読んでいく、という方針にしたいと考えています。

ジャンル的にはやっぱり推理小説が軸になるのかなと。一番好きなジャンルですからね。2014年から加えてSFをちらほらと読んでいるので、これも読んでいこうかなと。あとは一般的な小説(なんといえばいいのかわからない)ももちろん読んでいきます。

2014年はラノベも結構読みました。と言っても、狼と香辛料と俺ガイルですが。今年は、俺ガイルが途中なのでそれを読むのと、また新しいシリーズを読んでいきたいですね。狼と香辛料の作者:支倉凍砂の違うシリーズの作品も読んでみたいと思っています。

小説以外には、たまに読む新書だったり、ノンフィクションものを少しは読みたいですね。ただ、読みたいと思ったらであって、無理に読もうとは全く考えていません。

目標冊数は今年は明確に決めなくてもいいかなと思いしたが、1週間に1冊は読みたい欲があるので、50冊かなと。

読書に関しては、こんなところです。

海外ドラマ・映画・アニメに関して

好きなものを粛々と見ていきます。

コーヒーに関して

最近こだわるようになってきたコーヒー。

  • もっとおいしくいれられるようになる
  • 味の違いがわかるようになる

これら2つが最大の目標です。

音楽に関して

次は音楽に関してです。2014年の9月ごろから音響まわりに興味を持ち始めました。折角いい音楽なんだから、いい環境で聴きたいと感じたからです。今年もそれを考えて、音楽を楽しんでいきたいです。

家でゆっくりと音楽を聴くことはもちろん、ライブにも積極的に参加したいなと思っています。特に、Galileo Galileiのライブ、行きたい!だれか一緒に行きましょう。

カラオケも、2014年はがたっと減ったので、今年は行きたいですね。

ドライブ・旅行・登山に関して

2014年は活動的なときがあまりなかったのかなという一方、なぜか初めての登山をしていたりと実は活動的だったのかなとも思います。

今年はアクティブイヤーに!ドライブ、やりましょう。旅行、やりましょう。登山、やりましょう。

海外旅行、楽しいのでお金と時間が許せば行きたいです。

あと、温泉旅行行きたいですね。温泉つかって、その後コーディングして、疲れたらまたコーディングして。最高ですね。

睡眠に関して

いつも頑張り続けたらもちろん疲れてしまうので、完全にOFFモードのときは、ゆっくりと休みたいですね。睡眠、大好きです。しっかり寝ましょう。良質な睡眠が良質な活動の秘訣だと、体感するようになってきた今日このごろです。

最後に

ここまで、今年1年頑張りたいこと・やりたいことを思いつくままにつらつらと書き連ねましたが、「言うは易く行うは難し」なので、有言実行を心がけます。

SMLでML-Lexを使わずにlexerを書こう!

こんにちは、この記事はML Advent Calendar 2014 6日目の記事です。

いまどきどんな言語でも、字句解析器(lexser)と構文解析器(parser)を生成するためのツール(それぞれlexとyaccに準ずるもの)が提供されている場合が多いです。

Standard MLの各処理系でも、ML-LexとML-Yaccというツール(名前は各処理系によって違います)が提供されている場合が多いです。これらのツールを使えば、簡単に字句解析器と構文解析器を生成することができます(とは言っても、SMLの場合は日本語の記事が少ないのは間違いありません)。

もちろんこれらのツールを使えばよいのですが、SMLならツールを使わないでも比較的簡単にlexerとparserを書くことができます。

今回の記事では、ラムダ計算のためのlexerを書いていこうと思います。なお、この記事では愚直にコードを書いていて、処理効率などは一切考えていません。処理効率などを考えて改良しました!みたいな記事を誰かが書いてくださればうれしいです。

まずは、字句解析での最小単位となるトークンの定義をします。SMLなら代数的データ型を使って簡単に定義できます。

datatype token =
         ID of string
       | LAMBDA (* \ *)
       | LPAREN (* ( *)
       | RPAREN (* ) *)
       | DOT    (* . *)
       | SOMETHING of char
       | EOF

次に、空白文字をとばす処理をする関数skipSpacesを定義します。この関数は、入力ストリームを受け取り、空白文字でない文字にあたるまで入力(空白文字)を捨てます。

(* skipSpaces : TextIO.instream -> unit *)
fun skipSpaces inst =
    case TextIO.lookahead inst of 
        SOME c => if Char.isSpace c
                  then (TextIO.input1 inst; skipSpaces inst)
                  else ()
      | _      => ()

入力ストリームを1文字先読みして、その結果をパターンマッチで取り出して処理しています。ある文字が空白文字かどうかは、CharストラクチャのisSpace関数を使えば簡単です。

次に、先頭が英字とわかっている入力ストリームから識別子を読み出す関数readIDを定義します。識別子は、英字から始まり、英数字が0個以上続く列とします。

(* readId : TextIO.instream -> token *)
fun readId inst =
    let
        fun readId' str =
            case TextIO.lookahead inst of
                SOME c => if Char.isAlphaNum c
                          then readId' (str ^ TextIO.inputN (inst, 1))
                          else str
              | _      => str
    in
        ID (readId' "")
    end

実際の処理は、内部のreadId'関数で行っています。この関数は、識別子(の文字列)strを受け取り、入力ストリームを1文字先読みして英数字ならstrに連結し、そうでないならstrをそのまま返しています。

ここまでこれは、あとは字句解析を行うlex関数を定義するだけです(はやい!すごい!簡単!)。lex関数は、入力ストリームを受け取り、トークンを切り出す関数です。

fun lex inst =
    (skipSpaces inst;
     if TextIO.endOfStream inst then EOF
     else 
         let
             val c = valOf (TextIO.lookahead inst)
         in
             if Char.isAlpha c then readId inst
             else case valOf (TextIO.input1 inst) of
                     #"\\" => LAMBDA
                   | #"("  => LPAREN
                   | #")"  => RPAREN
                   | #"."  => DOT
                   | _     => SOMETHING c
         end)

これまでに書いてきた関数を組み合わせて、パターンマッチをしているだけです。

まず、入力ストリームから空白文字を捨て、ストリームの末尾に達していたらEOFトークンを返します。そうでない場合は1文字読みます(valOfを使っていて危険に見えますが、lookahead関数はストリームがEOFのときにNONEを返すので、今回は必ずSOMEを返し、valOfは失敗しません)。

先読み文字が英字の場合は識別子のため、readId関数を使います。そうでない場合は、1文字読み込んで、バックスラッシュならLAMBDA、左カッコならLPAREN、右カッコならRPAREN、ドットならDOT、それ以外の何かある文字ならSOMETHINGを返します。

これだけで、字句解析器が作れます。

試しに、

(\x.x y)(\x1.x1 x1)

という文字からなるファイルterm.txtを読み込んでみましょう。

そして、lexを何回も読みだせば、確かにトークンが読み出されていると思います。

これだけで簡単にlexerを書くことができます。みなさんもlexツールを使わずに書いてみてはどうですか?

明日は日本人で一番SMLのブログ記事を書いてるんじゃないかというeldeshさんです!

(この記事はML Advent Calendar 2014 6日目の記事です。)

ショートショートショートショート

 日曜日の次には、必ず月曜日がやってくる。月曜日だからこそ、言うべき言葉がある。

「今日も一日がんばるぞい!」*1

 この言葉で、また一週間がんばれる。

 そう、これは世界に多くあふれるお話の一つ。社畜のお話。

*1:得能正太郎,NEW GAME!,第1巻,芳文社

近況報告

ご無沙汰してます。今年度になってまだ一度も更新してなかったので、近況報告の記事を書きます。

まず、3月に無事に大学院の修士課程を修了しました。修士の学位ゲットだぜ!ということです。

次に、今年の4月に製造業の某会社に就職しました。普通の研修(座学)はもちろんありました。じゃあ今何をやっているかというと、製造業にはつきものの、工場実習です。ラインの一員として活躍してるわけです。活躍できているのか、現場の方の迷惑になっているのではないかなどとたまに考えてしまいますが。実習の最初は、肉体的にきついのはもちろんのこと、精神的にもきつかったです。工場の寮に入ってなかなかその環境になれていなかったことも大きいです。それでも、だんだんと慣れてきて、現在は辛いとは言うものの、最初のころほどではなくなってます。人間何事も慣れだなと実感します。そして、現場の方たちはすごいと思います。

工場実習の最初の方は、何もする気力がなかったのですが、最近は「型システム入門」を少しずつですが読み進めてます。難しいところはとばしたりしてますが。

工場実習もあと1ヵ月ちょっとで終わり、その後配属になります。情報系の仕事にはつけると思うのですがはてさて。

がんばろう。