セーターの備忘録

大学編入やIT関連の内容を記していく予定です

サーベイした論文のまとめ方メモ

大学院に入って以降、論文を読む量が増え、整理が大変になってきました。試行錯誤の末、何となく自分なりに良さそうなまとめ方が出来てきたのでまとめます(英論文前提ですが、英論文でなくとも使えるやり方だと思います)。

 

 

手順

論文を読んでからまとめるまでの手順としては、

  1. 月単位でディレクトリを用意
  2. 論文のファイル名を変更し、ナンバーを振る
  3. 2つのWordと1つのPPTにメモ
  4. 特に気になった論文は印刷して保管

という形です。

 

1. 月単位でディレクトリを用意

一つのディレクトリにするとファイルが多くなりすぎるので、月毎でまとめています。自分の場合、サラッと目を通しただけの論文も合わせると10~20本/月 くらいですが、今のところ上手くまとめられています。

 

2. 論文のファイル名を変更し、ナンバーを振る

論文のファイル名は論文のタイトルでないことが多いので、タイトルに変更します。この時、図のようにファイル名の先頭にナンバーを振ることで、後述する3つのファイルと合わせて見るときに探しやすくしています。

f:id:resweater:20181011230035p:plain

 

3. 2つのWordと1つのPPTにメモ

2つのWordと1つのPPTを用意します。これらはそれぞれ

  • 気になったところをまとめるWord
  • 自分なりに考えたことや発想をメモするWord
  • 1論文1枚にまとめて特徴を明確化したPPT

の3つになります。

気になるところをまとめるWord

「あの論文のあの辺りで言ってたよな」と思い出す度に英語を訳すのは大変なので、気になったところや大事そうだなと思ったところは自分なりに訳した上で丸ごと書いています。3つの中で一番量も多くなり、細かいところまで残しておける反面、見やすさは低く、場合によっては論文を読み返した方が早いときもあります。

自分なりに考えたことや発想をメモするWord

一つ目のWordに自分の考えまで書いてしまうと、どこまでが論文の内容でどこからが自分の考えなのか分からなくなるので分けました。自分なりに気になったところのメモや考えを書けるので思い出しやすい反面、このファイルだけでは論文の内容は分かりにくくいので、1つ目のWordや3つ目のPPTとセットで見る必要があります。

1論文1枚にまとめて特徴を明確化したPPT

ここでは、一部の界隈で有名な(?)筑波大の落合先生の論文まとめフォーマットを自分の分野向けに変えて活用しています。落合先生のフォーマットについては以下の記事を参考にしました。

lafrenze.hatenablog.com

自分は機械学習分野の論文を読んでおり、特徴量やデータセットが重要になってくるので、その辺りを下の図のように載せるようにしました。

f:id:resweater:20181011232857p:plain

 

4. 特に気になった論文は印刷して保管

読んでいくとこれは先行研究として重要だなとか大切な内容が多いなという論文が出てくるので、そう思った論文は印刷して特に気になる部分にチェックを入れたりした上で1つのファイルにまとめて保管します。自分の場合、教授との相談やゼミで使いたいなと思った論文は印刷するようにしています。

 

まとめ

論文を読む量が増えてから試行錯誤してきましたが、今のところ上記したやり方が一番上手くいっています。特に論文をナンバリングしたことで後から探して見返しやすくなりました。

CNN始めました

初めてCNNの実装を行ったのでメモしておきます。

きっかけ

今取り組んでいる研究でCNNを使おうとしています。CNNの理論はある程度理解していましたが、実装したことがなかったので7層のCNNの実装を行いました。

CNNの構築を行う上で、以下のkernelを参考にしました。

Introduction to CNN Keras - Acc 0.997 (top 8%):  https://www.kaggle.com/yassineghouzam/introduction-to-cnn-keras-0-997-top-6/notebook

実装

前処理

最初に画像を読み込んだ上で正規化をします。

train = pd.read_csv("../data/mnist_train.csv")
test = pd.read_csv("../data/mnist_test.csv")
X_train = train.drop(columns='label')
y_train = train['label']

X_train = X_train/255.0
test = test/255.0

次に画像を28×28で1チャンネルの画像として読み込ませます。 reshape内の28は画像の縦横、1はチャンネル数を示します。 -1は任意を示しているようですがまだよく分かってないです……

X_train = X_train.values.reshape(-1,28,28,1)
test = test.values.reshape(-1,28,28,1)

次に、ラベルエンコーディングをして0~9まであるラベルを1つのベクトルに変換します。

例: 2 -> [0,0,1,0,0,0,0,0,0,0]

y_train = to_categorical(y_train, num_classes=10)

あとはデータ分割を行い、学習データの方で回転させたりランダムにノイズを混ぜた画像を入れることで学習データを増加させて過学習を起こしにくくしました(詳しくは参考ページ)。

CNNのモデル構築と実行

今回はちょうど読んでいた論文で使われていた畳み込み層が7つあるCNNの構造に近い形で構築しました。

構造: In -> 4(Conv2D -> ReLU) -> MaxPool2D -> 2(Conv2D -> ReLU) -> MaxPool2D -> (Conv2D -> ReLU) -> MaxPool2D -> Flatten -> Dence -> Out

padding: 'Same' or 'Valid' (zero_paddingの場合はSame)

Flatten: 1次元データに変形

Dropout: 括弧内の割合でネットワークをランダムに切る

Dense: 全結合層

model = Sequential()

model.add(Conv2D(filters=32, kernel_size=(3,3), padding='Same',
                 activation='relu', input_shape=(28,28,1)))
model.add(Conv2D(filters=32, kernel_size=(3,3), padding='Same',
                 activation='relu'))
model.add(Conv2D(filters=32, kernel_size=(3,3), padding='Same',
                 activation='relu'))
model.add(Conv2D(filters=32, kernel_size=(3,3), padding='Same',
                 activation='relu'))
model.add(MaxPool2D(pool_size=(2,2)))

model.add(Conv2D(filters=64, kernel_size=(3,3), padding='Same',
                 activation='relu'))
model.add(Conv2D(filters=64, kernel_size=(3,3), padding='Same',
                 activation='relu'))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))

model.add(Conv2D(filters=128, kernel_size=(3,3), padding='Same',
                 activation='relu'))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))

model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

最適化関数はRMSpropを用いました。他の方の記事を見ると、MNISTではこの手法が精度が良いことが多いようです。これ以外にも確率的勾配降下法 (SGD) やAdamなど様々な方法があります。

optimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0)

それ以外の設定は以下の通りで行いました。

epoch数は5、バッチサイズは100で行いました。

model.compile(optimizer = optimizer , loss = "categorical_crossentropy",metrics=["accuracy"])
learning_rate_reduction = ReduceLROnPlateau(monitor='val_acc', 
                                            patience=3, 
                                            verbose=1, 
                                            factor=0.5, 
                                            min_lr=0.00001)
epochs = 5
batch_size = 100

history = model.fit_generator(datagen.flow(X_train,y_train, batch_size=batch_size),
                              epochs = epochs, validation_data = (x_test,y_test),
                              verbose = 2, steps_per_epoch=X_train.shape[0] // batch_size
                              , callbacks=[learning_rate_reduction])
print("\nfinish!")

結果は以下の通りです。

Epoch 1/5
 - 225s - loss: 0.4281 - acc: 0.8587 - val_loss: 0.0491 - val_acc: 0.9838
Epoch 2/5
 - 238s - loss: 0.0918 - acc: 0.9723 - val_loss: 0.0356 - val_acc: 0.9879
Epoch 3/5
 - 256s - loss: 0.0644 - acc: 0.9798 - val_loss: 0.0279 - val_acc: 0.9910
Epoch 4/5
 - 237s - loss: 0.0521 - acc: 0.9844 - val_loss: 0.0333 - val_acc: 0.9917
Epoch 5/5
 - 250s - loss: 0.0467 - acc: 0.9864 - val_loss: 0.0385 - val_acc: 0.9902

finish!

f:id:resweater:20181008044200p:plain

また、今回のモデルでKaggleのDigit Recognizerに投稿してみたところ、0.99128とそこそこのスコアを出すことができました。

ただ、このモデルの学習を自分のi5-6200UのCPUを積んだノートPCで回すとおおよそ20分程度かかり、かなり高温になりました(汗)。この前にGPUを積んだPCで実行したときやKaggleのkernelでGPUを使って実行した時は30~60秒位で終わったのでやはりGPUを使った方がいいようです(当たり前)。

可視化

結果を見てみると、誤って4や8と認識したものが多かったようです。 f:id:resweater:20181008045142p:plain

まとめ

無理矢理CPUでやろうとしたせいで無駄に苦労しました……次からGPU使ってやります……

また、モデルそのものや各関数で多くのパラメータがあり理解できてないところもあるので、他のデータでも試しつつ覚えていこうかと思います。

今回のソースコード:

github.com

初めてKaggleに挑戦した話2 特徴量エンジニアリングをしてみた

「初めてKaggleに挑戦した話1」を書いた後、特徴量エンジニアリングなどをしたりしてもう少しTitanicに取り組んだのでまとめます。

精度が低く、順位も下から数えてすぐだったので、ひとまずTop50%に入ることを目標に取り組みました。

 

 

やったこと

前回からやったこととしては、

  • 特徴量エンジニアリング
    ・史実を参考にした特徴量生成
    ・似た特徴量の結合と細かすぎる特徴量の再構成
  • 特徴選択とパラメータチューニング
  • 学習結果から得られた正解ラベルを用いて学習データを追加

辺りを行いました。

学習では前回と同じくLightGBMを用いました。

 

特徴量エンジニアリング

前回の時点で使用する特徴量のパターンをいろいろ試しましたが、Accuracyはあまり高くありませんでした。そこで、史実を基にデータを分割したり結合、再構成など特徴量エンジニアリングをすることで精度向上を図りました。

史実を参考にした特徴量生成

まず当日のことを知るために、wikiタイタニック号沈没事故についてのページを読みました。すると、その中で救命ボート乗船時の状況について、

「ライトラーは左舷側のボートを担当し、マードックは右舷側のボートを担当した。一等航海士マードックと二等航海士ライトラーはそれぞれ「ウィメン・アンド・チルドレン・ファースト」について異なる解釈をした。マードックは女性と子供から乗せると解釈したが、ライトラーは女性と子供を乗せると解釈した。そのため、ライトラーは女性と子供が全員乗り込んだのを確認すると、スペースに余裕があっても救命ボートを降ろしたが、マードックは女性と子供の他にわずかだが男性も乗せた」

という記述がありました。このため、避難時、船の左舷右舷どちらに向かったかによって生存率が変化したことが考えられ、広い船内でどちら寄りに自分の客室があったかに影響されたと考えました。そして、船の客室番号は左舷と右舷でそれぞれ偶数と奇数に分かれていることも分かりました。

さらに、客室のある階層 (A~G) によって救命ボートまでの距離が異なり、特に下の方の階層である3等客室は1, 2等客室との間に障壁があるなど、階層も大きく影響していることが分かりました。

コンペで渡されている"Cabin"にはそれぞれの客室番号が書かれており、左舷よりか右舷よりかと階層が分かるようになっていました。そこで、客室番号を分割して右舷左舷情報を"RoomLorR"、階層情報を"RoomLayer"として特徴量を生成しました。このとき、"Cabin"は欠損値が多かったので、存在しないものに対しては存在しないことを示すラベルを付与しました。

それぞれ生成したデータをグラフ化すると、下のようになりました。

f:id:resweater:20180916203511p:plain

f:id:resweater:20180916203516p:plain

1枚目が"RoomLorR"、2枚目が"RoomLayer"で、オレンジ色の部分が生存者、一番右がデータの存在しなかった人です。これを見ると、まず客室番号データが無かった人の生存率が低いことが分かります。また、左舷右舷や階層によっても有意差があると言えるかは怪しいですが違いがあることが分かりました。

似た特徴量の結合と細かすぎる特徴量の再構成

SibSpとParchの結合

基から存在するデータのうち、"SibSp"及び"Parch"は

  • SibSp: 同乗している兄弟・配偶者の人数
  • Parch: 同乗している親・子供の人数

と似た内容のデータであることが分かりました。そこで、これらを「同乗している身内の人数」として一つに結合し、"SibSpParch"としました。

f:id:resweater:20180916204023p:plain

グラフ化すると、身内が1~3人いると生存率が高いことが分かりました。

AgeとFareの再構成

"Age"及び"Fare"について、それぞれ値が細かく示されていることが分かりました。

f:id:resweater:20180916202649p:plain

そこで、Ageは10歳ごと、Fareは50ごとで区切ってまとめることで、細分化されたまま学習されないようにし、それぞれ"aboutAge"、"aboutFare"としました。

 

特徴選択とパラメータチューニング

特徴選択

今回試した特徴量をすべてまとめると、下の通りです。

  • Pclass - チケットクラス
  • Sex - 性別
  • RoomLorR - 客室の左舷右舷
  • RoomLayer - 客室の階層
  • SibSpParch - 同乗している身内の人数
  • Age - 年齢
  • AboutAge - 年齢を10歳ごと区切ったもの
  • Fare - 料金
  • aboutFare - 料金を50ポンドずつ区切ったもの
  • Embarked - 出航地
  • (Title) - 上では省略した、Qiitaの記事で見かけたMr. や Ms. などで分類したもの

これらを試していくと、最終的に精度が良かったのは

  • Pclass
  • Sex
  • RoomLorR
  • Age
  • Fare
  • SibSpParch

の6つの特徴量を用いたときでした。このときのFeature importanceは下のようになりました。"RoomLorR"の寄与度は思ったより低かったです。

f:id:resweater:20180916214647p:plain

パラメータチューニング

パラメータを最適化するため、GridSearchCVを使ってパラメータチューニングを行いました。ただ、仕組みをあまり理解できておらず、手作業で調整したときの方が精度が良く、過学習などしてたわけでもないようなのでもう少し学んでいきたいです。

 

学習結果から得られた正解ラベルを用いて学習データを追加

当たり前と言えばその通りなんですが、上記の方法で学習して予測を行うことで、testデータのSurvivedに関するラベルが生成されたので、それを学習データに追加することで合計1308人分のデータを用いて学習を行い、予測をしました。

 

Accuracy

結果として、0.78947の精度を出すことができ、目標だったTop50%入りは楽々超えることができました!(2018年9月16日時点での結果です)

f:id:resweater:20180916212443p:plain

f:id:resweater:20180916212454p:plain

(画像の0.79425は間違って参考にした方のプログラムで実行してしまった方の結果です…すぐ下が0.78947なので25%辺りに入れたのかなと思います…)

 

まとめ

Top50%に入るまでやると宣言したはいいものの、51%からなかなか上がらず苦しみました…

一方で、先日言われつつも実感が湧かなかった特徴量エンジニアリングの必要性について理解でき、GridSearchCVなど様々なツールについても知ることができました。ただ、グラフ化するときの表示方法が今のやり方だと見にくいのでもう少し慣れて上手く表示できるようにしていきたいです。

次はDeep Learning系を使ってコンペに参加したい…

初めてKaggleに挑戦した話1

KaggleのTitanicコンペに取り組んだので忘れないうちに書いておきます。

 

始めた理由

元々取り組みたいと思っていましたが、一番のきっかけは先日参加したFJCTのデータサイエンスインターンです。参加した学生や企業の方もKaggleに取り組んでいる方が多く、インターン中もメンターの方から「この辺りはKaggleをやってると大切さを実感できるよ」というような話を伺ったりもしたので、インターンが終わった日の夜からモチベーションが高いうちに始めました。

ちなみに、タイトルで初めてと書いていますが、実際は少し前に一度挑戦したことがあります。以前からkaggler-jaのSlackに入っており、その中でビギナー向けに行っていたKaggler-ja In-class Competition1に取り組みました。ただ、このときはあまり取り組む余裕がなかったこともあり、一つの手法を試してみる程度でした。

 

取り組んだコンペとやったこと

コンペはチュートリアルとして有名なTitanicに取り組みました。

やったこととしては、

  • データの可視化と欠損値処理、カテゴリ変数の処理
  • Random ForestでAccuracyを出す
  • Light GBMでAccuracyを出す
  • Feature importanceの確認
  • SFSで特徴選択して再学習

辺りをやってみました。

 

データの可視化と欠損値処理

データの可視化

まず各データの上位5件の中身を確認した後、データを可視化して欠損を見てみました。

f:id:resweater:20180914050936p:plain

f:id:resweater:20180914051010p:plain

見たところCabinは欠損値が多すぎて有効なデータとして扱えそうにないので消しました。また、Name、Ticketもあまり関係なさそうなので削除しました(PassengerIDも消すつもりでしたが、1回RandomForestで結果を出してからPassengerIDを消し忘れたことに気付きました汗)。

欠損値処理

詳しく見てみると、いくつか欠損値が見られたのでその処理を行いました。欠損値が2つしかなかったEmbarkedでは最頻値を、それ以外では平均値を入れましたが、Ageは20%近い欠損があったのでもう少し考慮する必要があるのかもしれないです。

カテゴリ変数の処理

数値化されていないSex及びEmbarkedは数値化する必要があるので、scikit-learnのLabel Encoderで数値化しました。

 

Random ForestでAccuracyを出す

とりあえずRandom ForestでAccuracyを出してみました。この時はだいぶ手探りでやっていたので、特徴量はPassengerID、Pclass、Sex、SibSp、Parch、Fareで行いました。testデータの結果は0.74641となり、これをベースに取り組んでいきました。

 

LightGBMでAccuracyを出す

次に、先日のインターンでも多用したLightGBMで学習させてAccuracyを出してみました。Feature importanceで寄与度を確認して用いる特徴量を確認しながら3つほど試してみました。結果としては、

  • PassengerID、Pclass、Sex、SibSp、Parch、Fare(Random Forestと同じ)
    → 0.73684
  • Pclass、Sex、SibSp、Parch、Fare、Age
    → 0.76076
  • Pclass、Sex、SibSp、Parch、Fare、Age、Embarked
    → 0.76076

のような形になりました。

 

SFSで特徴選択してみる

最近大学の講義でSFSでの特徴選択のプログラムを作成していたので、使ってみました。ここでは、KNNで学習を行い、trainデータを分割して検証しました。

f:id:resweater:20180914054522p:plain

結果としては特徴量はPclass、Sex、Parch、Embarkedの4つのとき最適という結果になりました。ただ、精度があまり高くなかったこと、Survivedに対する特徴量ごとの相関係数を求めた結果やFeature importanceを可視化して見たときの特徴量と選択された特徴量が一致しなかったことがイマイチ理解できなかったのでその辺りをもう少し勉強したいと思います……

 

まとめ

初めてしっかりKaggleに取り組み、課題も多く残りましたが、どのように取り組んでいけばいいのかなんとなく理解することができました。なにより、今まで取り組みたくても欠損値の扱いなどが手探りすぎてなかなか出来ていませんでしたが、インターンシップを通して学んだことを生かすことでスムーズにコードを書くことができたので、データ分析そのものを楽しく取り組めました。

また、やっていく中でなぜ特徴量エンジニアリングが必要なのかも分かってきたので、次はその辺りもやっていければいいかなと思います。

FJCTのデータサイエンスインターンに参加してきました

f:id:resweater:20180910035354j:plain

 

富士通クラウドテクノロジーズ株式会社 (FJCT) のサマーインターンシップの3daysデータサイエンスコースに参加してきました。ブログなどに載せて構わないとのことだったので、適当にオブラートに包みつつ備忘録としてまとめようと思います。

 

参加した動機

 参加した主な動機として、

  • 専攻分野での経験を積みたい
  • データサイエンティストの働き方、仕事内容を知りたい

の二つがあります。

自分は機械系学部からの編入生のため、他の情報系の学生と比べてまだプログラミングなどの経験が少ないという課題があります。また、現在は機械学習を用いた研究を行っており、データサイエンティストという職種に関心を持っています。そこで、実際にデータサイエンティストとしての仕事を実践的に学べると書かれていたFJCTのインターンシップに応募しました。

データサイエンスや機械学習に関するインターンシップは多くの企業が募集していましたが、どこも倍率が高く、何社か落ちてしまったりしてなかなか決まらなかったので、選考通過の連絡を頂いたときはホッとしました(汗)

 

インターンシップ参加まで

実際にインターンシップが始まるまでに、Slackで参加者同士簡単な自己紹介を行いました(周りの学歴の高さに怯えたりしてたのは内緒)。この夏は他にも何社かインターンシップに参加しましたが、その多くで事前にSlackを用いて自己紹介をしたりしていたので、当日インターンシップへ向かう時の緊張感が和らいで良かったです。

 

インターンシップ参加期間中の話

3日間の流れとしては、主に初日にハンズオン形式でデータサイエンスについて学び、2, 3日目でチームごと課題をこなして3日目の最後にプレゼンを行うという形でした。

2日目の午後、台風の影響で2時間ほど短縮されるというトラブルがありましたが、それ以外は問題なく終えることができました(この夏いくつかインターンに参加した中で毎回台風が当たってて悲しい…)。

インターンシップの課題

このインターンシップでは、チームごとあるデータが与えられました。そのデータをクライアントから渡されたデータと仮定して利用し、カテゴリ予測を行い、予測結果を説明した上で本格的な予測プロジェクトの受注を目指すというものでした。

与えられたデータはカラム数が多く、また欠損値も多く見られ、データリークの問題も生じたため扱いが非常に難しかったです。

 学んだこと

ハンズオンの説明の中では、データを受け取ってから確認すべきことを始めとして、クライアントへ予測結果を伝えたり追加で確認をしたりしなければいけないことまで一通りの説明を受けました。

f:id:resweater:20180910055829j:plain

参加する前は技術に関する話がメインになるのかなと思っていましたが、そんなことはなく、メンターの方は「機械学習をいかに可視化して、分かりやすく説明するか」という点を非常に強調されていました。

チームとしてまとめたもの

f:id:resweater:20180910060550j:plain

自分のチームでは、最終プレゼンにおいてペルソナを設定した提案を行うことでより具体的なビジネスモデルを意識したプレゼンを行いました。メンターの方からの評価や自分たちの反省として、提案の話が大きくなりすぎて予測結果を上手く使えていないという課題が残りました。

 

インターンシップを振り返って

目標の達成

最初に示した専攻分野の経験を積むということとデータサイエンティストの仕事について知るという目標は、十分すぎるほど達成することができました。

インターンシップの内容は段々とペースが速くなり、付いていくのでギリギリな面もありましたが、付いていけないということもなく適度に苦しみながら取り組めてとても充実していました。特に、これまで扱う機会の少なかった欠損値処理について、欠損の仕方に応じた対処方法をじっくり取り組めたことは非常に勉強になりました。

また、初日と3日目の夜に懇親会があった上、インターン中もメンターの方が会話の中で業務での例や話も含めて話してくださり、FJCTでデータサイエンティストという仕事をしている方がどのような働き方をしているのかについて詳しく知ることができました。

f:id:resweater:20180910061526j:plain

 

インターンシップで持った印象

参加する前はFJCTは富士通グループの一社というイメージを持っていました。しかし、実際に行ってみるとイメージとは大きく異なり、非常に自由な働き方をしている印象を受けました。

また、仕事が好きで自ら積極的に取り組んでいる方が多く、モチベーションの高い人が多いなという印象を受けました。

 

まとめ

たった3日間でしたが、技術面でも今後の就活を考える上でも多くのことを吸収でき、非常に充実したインターンシップでした。また、今回ほど「自分がイメージした通りのプログラムを作成できない悔しさ」を感じたことはなく、自身の課題も発見することができました。とりあえず今まで以上にKaggleなどにも積極的に取り組んでいきたいと思います。というかその場のノリで(?)既に取り組み始めました。

就活を始めるまでに、より実力をつけていければと思います。

FJCTの皆様、ならびに一緒に参加した学生の皆様、ありがとうございました。

勉強がてら自分のホームページを作成してみた

ということで、自分のホームページ(ポートフォリオ)を作成して公開したのでメモしておきます。

ホームページ:Sweater's Portfolio

 

制作理由

先日、ハッカソンに参加してチーム開発を行いました。その際、機械学習をシステムへ実装していく中でフロントエンドやバックエンドへの知識があまりなかったため、非常に苦労しました。

また、manifes2018に参加した際、エンジニアの方から自分のホームページを作ると凝れば凝るほどフロントエンドからバックエンドまで様々な知識を得られるとアドバイスを頂き、制作してみることにしました。

 

フロントエンド

今回はHTML/CSSのみで作っています。公開されているポートフォリオをいくつか参考にしながら制作しました。また、今後JavaScriptも使う予定です。

一方で、先日のハッカソンではフロントエンドを担当していた人がReactを利用していたのでその辺りも後々調べてみたい……

 

バックエンド

バックエンドを少しでも触るのは今回が初めてだったので苦労しました。

今回はAWSのS3 (Simplr Storage Service) を使い、この辺りのページを参考にしました。

ferret-plus.com

AWSを使うと無料アカウントでもドメインの取得とサーバーの利用がまとめて可能なため、今回はAWSを利用しました。

 

まとめ

自分のホームページを作りながら、初めてバックエンドを触りました。ひとまずホームページ自体は公開しましたが、まだ作成中のページもあるので継続して取り組んでいきたいです。

また、今回は記事を参考にしながらバックエンドを作成しましたが、あまり理解が深まっていないのでもう少し勉強していこうと思います……

manifes2018に参加してきました

manifes2018というイベントに参加してきたのでまとめます。

togetter.com

 

manifesとは

connpass.com

manifesは全国から学生やエンジニアの方が集まって行うLT会で、ローカルイノベーションさんが主催して行っています。

会場は六本木でしたが、ちょうど前日までインターンシップで東京に来ていたため、併せて観覧枠で参加してきました。

ちなみに、同日品川ではKotlin Fest 2018が行われていたようです(来年は参加してみたい)。

 

当日のLT

当日は

前年王者LT→学生LT→企業紹介→企業LT→投票&結果発表→懇親会

という流れでした。

 

学生LT

特に印象に残った学生LTとしては、学祭の業務改善として自分のサークルの模擬店をキャッシュレス化したという話がとても興味深かったです。

 自分は以前バイトや学内の委員会でデジタル化による業務改善に取り組んだことがあったので、そういったこともこのLTのような形でまとめられるのかもと考えたりしました(そのうち記事にしたい)。

 

また、PC-98を用いて低レイヤーを勉強しているというLTでは、質疑応答の際に出てきた「それは何のためになるのか」という質問に対して登壇者が「ロマンがある」と回答し、非常に盛り上がりました。

ロマン……大切にしたい……

 

企業LT

企業LTでは移植駆動学習に関するLTが非常に興味深かったです。

移植駆動学習は、既に存在するプログラムを他言語で書き直した上でカバレッジ100%のプログラム作成を目指すというものです。カバレッジ100%はテストケースの全分岐を理解し、エッジケースをしっかり考えなければ達成出来ないため、非常に良い学習法でやってみたいと思いました。

 

まとめ

登壇されていた方々のLTのマニアック度が非常に高く、なかなか理解することが難しい内容も多かったですが、そのようなことも出来るんだという発見が多く非常に興味深かったです。

また、懇親会では自分が関心を持っている分野で活躍されているエンジニアの方ともお話したりアドバイスをいただいたりすることができ、参考になりました。

スタッフや登壇者の皆様、ならびに企業の皆様、ありがとうございました。

 

P.S.