maxfie1d のブログ

マイクロソフト系技術ネタを中心に書きます。

大学卒業研究発表の振り返り

私事ですが、本日大学卒業研究の発表を行いました。

個人的な備忘録も含めて、振り返りをしておこうと思います。

スケジュール

さっくりとした卒業研究のスケジュールです。

  • 9月
    • 卒研テーマ決定
  • 10月
    • 予備調査
  • 11月
    • 中間報告 (1回目)
    • ツールの実装
  • 12月
    • 中間報告 (2回目)
    • ミーティングで研究内容をまとめる
  • 1月
    • 評価実験実施
    • 論文作成開始
  • 2月
    • 論文完成
    • 卒研発表用スライド作成
    • 卒研発表

約6か月に及ぶ卒業研究でした。11月のツールの実装はそれなりに 時間を割いて頑張ったような気がします。12月ごろには中間報告や ミーティングを何度か挟んでいたので、徐々に完成度を高めることが できていたと思います。

年が明けて1月には評価実験を実施し、思い腰を上げて論文作りをはじめました。 2月には、迫りくり締め切りにややプレッシャーを感じながら、先輩や先生に 添削を受けながら仕上げを行いました。

反省

反省点をまとめておきます。

  • 先輩や先生を信頼して、もっと相談すればよかった。
    • 私は恥ずかしがり屋なのと、変なプライドから、上手く行っていると思えない部分や未完成なものを他の人に見せることを避けていました。不思議なことに先輩や先生は上手い助言をしてくれます。また、現状について他の人に報告するだけでも問題が整理されるのを感じました。なので、恥ずかしがらずに勇気を出して先輩や先生と協力して取り組む方が、実は近道であることがよく分かりました。
  • 論文は早めに先輩や先生に見てもらう。
    • 今回は結構提出がギリギリになってしまいました。論文を送って、添削されて返ってきて、修正を反映するというこの1サイクルは結構時間がかかります。論文は分量が多いので、第1稿が完成するのは結構遅いスケジュールになります。なので、未完成のうちでも出来ているところからチェックしてもらって添削を受けることが重要だと感じました。あと、私は添削と聞くと「ああしろこうしろっていろいろ言われるから嫌だな~」と思います。これはもう仕方ないことだと思っていて、自分だけではモヤモヤしていた部分が添削によってスッキリしてより完成度の高いものになると思って、辛抱強く、でもあまり気負わずに添削を受けて修正を加えるといいと思います。

小ネタ: Cloud Latex

Cloud LaTeX は名前の通り、ブラウザ上で論文を書いてPDFも生成できるスグレモノです。

cloudlatex.io

オンラインで作業する都合上、コンパイルしてPDFのプレビューが表示されるまでの時間は少しかかりますが、LaTeX の環境をいちいち用意することなく、ブラウザを開くだけで作業できるのは本当に快適です。

Cloud LaTeXDropbox と連携することができて、Dropbox にも編集したファイルを転送することができるので安心です。

ただ、Cloud LaTeX のようなサービスを使うと、git で管理する時のように更新履歴の diff を見れないという悩みが出てきます。なので、提出直前の最終仕上げの段階では、1日ごとに Dropbox にあるプロジェクトの写しを zip でダウンロードして、中身だけ取り出して GitHub に push して管理していました。修正作業中にうっかり一文字消してしまったなどのミスをすぐに見つけられるように、 git で管理して diff を見れるようにしておくことは重要だと思います。

また、私の研究室では Overleaf という同じように オンラインで LaTeX を書けるサービスを利用している人もいます。

www.overleaf.com

こちらは少し設定をする必要がありますが、きちんと日本語で 論文を書くことができます。シェア機能も充実しているらしいです。

TypeScript 2.7 がリリースされました

TypeScript 2.7 がリリースされました。

機能一覧

セルフ翻訳なのであまり信用しないでください。

  • Stricter class property checks (より厳格なクラスプロパティのチェック)
  • Definite assignment assertions (明確な代入アサーション)
  • Easier ECMAScript module interoperability (より簡単になったECMAScriptモジュールとの相互運用)
  • unique symbol types and const-named properties (unique symbol型と定数名プロパティ)
  • Cleaner output in --watch mode (--watchモードでの出力の整理)
  • Prettier --pretty output (より美しくなった--pretty出力)
  • Numeric Separators (数値セパレータ)
  • Fixed Length Tuples (固定長タプル)
  • in operator narrowing and accurate instanceof (inによる一種のタイプガードと正確なinstanceof)
  • Smarter object literal inference (よりスマートになったオブジェクトリテラルの推論)

盛りだくさんの修正が入っています。 少しだけ詳しく説明します。

Unique symbol types

これが一番ややこしくて、合っているか自信がありませんが...

まず ES2015 から追加された Symbol を知っておく必要があります。 こちらのQiitaの記事が分かりやすく詳しいです。

qiita.com

ごくごく簡単に言ってしまえば、Symbolconstreadonly staticで受けるとき unique symbolというものになります。

// これはOK
declare const Foo: unique symbol;

// unique symbol なのに const で受けてないのでエラー
let Bar: unique symbol = Symbol();

// これはOK。既存の unique symbol を参照する時は typeof を使う
let Baz: typeof Foo = Foo;

// これもOK
class C {
    static readonly StaticSymbol: unique symbol = Symbol();
}

また各々のunique symbol は完全に独立しているので、 2つの unique symbol を代入したり比較したりすることはできません。

const Foo = Symbol();
const Bar = Symbol();

// 2つの unique symbol を比較することはできないのでエラー
if (Foo === Bar) {
    // ...
}

Numeric separators

数値をアンダーバーで区切ることで見やすく書けるアレです。 TypeScript でも使えるようになりました! ビット列やバイト列で使うととても便利です。

let bits = 0b0010_1010;
let routine = 0xC0FFEE_F00D_BED;
let martin = 0xF0_1E;

in operator narroing

in オペレータを、あるプロパティがオブジェクトに存在していれば trueを返すものとして使えるようになります。

以下の例は TypeScript のリポジトリでこの機能が提案された時のものですが。 if の条件式が 'x' in q となっていて、もしqの型がAならばxをプロパティに持つので trueを返し、qの型がBならば xをプロパティに持たない(代わりにyをプロパティに持っているが)ので falseを返すことになります。

interface A {
  x: number;
}
interface B {
  y: string;
}

let q: A | B = ...;
if ('x' in q) {
  // q: A
} else {
  // q: B
}

GitHub で使える、知られざるショートカット集

Web 版の Twitter では、nでツイート作成画面を出したり、 `j``k*でツイートのフォーカスを移動できたりといった便利な ショートカットがありますが、GitHub にも実はショートカット機能があります。

割と知られていない機能だと思うので、きっと仲間や同僚にドヤ顔できますよ。

ショートカット一覧の出し方

GitHubリポジトリページなどを開いて、?を入力してみてください。 使えるショートカットがずらっと表示されます。

f:id:maxfieldwalker:20180131225201p:plain

というわけで、特によく使うオススメのショートカットを紹介します。

キー 説明
s 検索バーにフォーカス
j / k 選択を上下に移動
gc 「Code」に移動
gi 「Issues」に移動
gp 「Pull Requests」に移動
gw Wiki」に移動
t ファイルファインダーを起動
l 特定の行に移動
w ブランチを表示/検索

特に t キーで起動できる「ファイルファインダー」は目からウロコの機能で、 リポジトリの全ファイルをサクッと検索できます。

f:id:maxfieldwalker:20180131230235p:plain

クローンするほどではないけれど、ささっと GitHub 上で中身を確認したい時に 使えるテクニックなのでお試しあれ。

Windows の Sets 機能を再現できる Groupy の紹介

次の次の Windows 10 の大型アップデートあたりで、 Sets と呼ばれる あらゆるアプリをタブでまとめる機能が 追加される予定です。

youtu.be

少なくともこの Sets 機能は Redstone 4 では見送られるので、 早くても使えるようになるのは今年の後半ですが、いち早く Sets と同等のことを体験できるアプリがあるのでご紹介します。

Groupy

ユーティリティ系のアプリを数多く出している Stardock の Groupy はまさに Sets の機能を再現します。しかも完璧に動きます。

www.stardock.com

どんなアプリもウィンドウを他のウィンドウのタイトルバーに近づけるだけで タブにまとめることができます。UWPもOKです。 タブの色はタイトルバーの色を反映するので、没入感があり見た目も美しいです。

f:id:maxfieldwalker:20180131114230p:plain

Groupy は $9.99 と有料ですが、30日の無料トライアルがあります。 とても便利なので買ってしまおうか迷い中...

次期 Windows 10 ではストアからフォントがインストールできるようになる

Windows 10 は定期的に Insider Preview という、開発版の ビルドがリリースされます。

Build 17040 以降では、予告されていた ストアからのフォントのインストールが可能になったようです。

f:id:maxfieldwalker:20180130121716p:plain

以前ストアから Surface シリーズ(つまりハードウェア)を購入できるように なりましたが、これからはフォントもストアから購入orインストールできるようになります。

ちなみにフォント関連の設定を「設定」アプリから行えるようになる模様。

f:id:maxfieldwalker:20180130121816p:plain

次期 Windows 10 (Redstone) は待望の Timeline 機能に加えて、 盛りだくさんなアップデートになりそうです。