そぬばこ

備忘録とか、多分そんな感じ。

雑なやつ(12/26)

もうすぐ一年が終わる。

今年は波があった。良い事も悪い事も、一つ一つが大きかったし、新しい事が増えた気がする。

あっという間に、二週間ぐらい先には自分も21になる。20の終わり。思い残し、やり残しはないだろうか。

気が付かぬ間に、歳は私を追い込む。冷たい風に負けずに、ぬくぬくの布団から飛び出して、明日も朝から頑張ることが、せめてもの自分自身の償いとなるように。

TeX Liveを入れ直した

初めてTeXを入れたのが、二年前の六月とかその辺かな……?

そうみたい。と、いうことでそれ以来のアップデート。せっかくなので、全部消して全部入れ直しました。

ネットワークインストーラー使って、残り30時間とか出る始末。

unpackして、batファイルからやったら2時間程度で済んだ。気をつけよう。

晴れてTex Live 2017。お目当てはアップデートされていたLuaTeX。 TeXアドベントカレンダー見てたら、気になったもんで……

adventar.org

acetaminophen.hatenablog.com

前々から気にはなっていたものの、1.0となり安定版が出たということで、使用に踏み切った。これから使いこなせればいいかなってことで、Lua自体は全然わからない。とりあえず、アドベントカレンダー1日目の記事を見ながら、フォント指定を簡単にやってみた。

qiita.com

本当に素晴らしい記事をありがとうございます。簡単だった。

課題や実験レポートとかに使っているテンプレート用のtexファイルもLuaLaTeXに合わせたものにした。いい感じに文章成形していきたい。

Markdownで講義ノートをとる

この記事はUEC Advent Calendar 2017の10日目の記事です。
前日はALevammeさんの「K科の研究室生活と就活について」でした。
K課程ならではの研究室活動の難しいところがあるんですね……
私は夜間主ではありませんが、B3で来年度よりラボワークがスタートします。
既に仮配属ですが、配属先も決まっているので、やっていきを持って頑張りたいと思います。


講義とノート

皆さんは毎日、遅刻することなく、ちゃんと講義に出ていますか?*1
改組によって大きく変わった部分もあるかと思いますが、学科生の生き残りとしては、3年に上がってから講義の専門性が高くなり、有意義な時間を過ごせているなと感じる部分が多々あります。
講義に出ているとやはり、板書等のノートをとり、勉強をするわけですが、個人のスタイルや講義そのものの性質によって、ノートのとり方というものも変わってくるのではないでしょうか。

ラップトップで講義ノートをとる

ノートのとり方の一つとして、ラップトップで、テキストエディタや、OneNote等のツールを用いるという方法があります。
実際、講義中にふと周りを見渡すと、MacBookThinkPadSurfaceなどで、机の上で板書を見ながらキーボードを叩いたり、スタイラスで図を書いている学生が少なからずいます。
私もその中の一人で、全ての講義ではないですが、ノートを自分のPCを使ってとっています。
この記事では、私がどのように講義ノートをとって、それについて思っていることを書いていきたいと思います。

Markdownとは

さて、題の通り、私はMarkdown講義ノートをとっています。
Markdownとは文章を記述するマークアップ言語の一つです。マーク"アップ"言語なのにマーク"ダウン"なのか……と、思う方もいらっしゃるかもしれませんが、気にしないでください。
そもそもマークアップ言語とか知らんわ、という方にはお仲間にHTMLとか、TeXとかXMLとかがいると説明したらなんとなくイメージは掴めますでしょうか。正直あんまり、気にしなくていいです。
アピールポイントを説明すると、Markdownは、サクッと、いい感じに、箇条書きの文章が作れるぜ!
最初に断っておきますが、この記事では詳しい記法等は紹介しません。もし、使いたくなった人は先人様方のチートシート等を参考にしてみてください*2

環境

私がよく使うテキストエディタの一つに、AtomというGitHub製のものがあります。
GitHubが作っていることもあり、READ MEでよく使われている、GitHub Flavored Markdownに標準で対応しており、特に何も導入しなくても.mdファイルでMarkdownが扱えるので非常に便利です。 WindowsであればCtrl+Shift+MでPreview表示が利用できます。

f:id:nersonu:20171210154810p:plain:w500
Markdown Preview
ノートをとっていると、情報系学生である以上、時折数式を使いたいと考えることがあります。しかし、標準のままでは、数式に対応していません。
ご安心ください。Atomのパッケージは豊富です。私は次のパッケージを入れて、数式表示を導入しています。

github.com

このパッケージを入れることで、Ctrl+Shift+Xで数式表示が可能になります。記法はLaTeX準拠です。
また、リアルタイムPreviewが可能になり、非常に便利です。

f:id:nersonu:20171210155730p:plain:w500
数式表示

ノートをとる時に心がけること

3年前期から、このような環境でノートをとってきたわけですが、Markdownでノートをとる時に心がけたほうがいいなという点がありました。
それは、うまく「箇条書きでまとめてやる」というところです。

f:id:nersonu:20171210160532p:plain:w500
箇条書きでまとめる
これは紙でノートをとる時にも気をつけたほうがいいことなのですが、箇条書きで、インデントを綺麗に整えてノートをとると、非常に見やすいです。
Markdown-とインデントの高さで、綺麗な箇条書きができます。
そういった形式のノートを作るのに向いていると言えるでしょう。

板書の図をどうやってまとめていくか

Markdownに限った話ではありませんが、できるだけ文字列や数式が主体の講義でないと、Markdownでノートをとるのは難しいと思います。
しかしながら、ノートに図等を挿入したい時というのは必ず現れます。
私はまだ、この完全な解答がわかっていませんが、柔軟な対応が必要だなとは思っています。いくつか私がとっている解決策をご紹介します。

1. 文章に直す

図が文章で表現できるくらい簡素なものであれば、文字に起こすという方法があります。
自分自身にとって、内容を理解するのに必ずしもそのままの形式で無くていいものであれば、そもそも図を挿入しないという手があるでしょう。

2. コードブロック内で頑張る

コードブロック内で、そのまま出力されることを用いて、アスキーアートのように頑張って文字で図を自作します。 簡単なものなら意外とこれでなんとかなります。

f:id:nersonu:20171210161716p:plain:w500
コードブロック内で描いた図

3. 外部ツールで簡単に図を作成する

例えば状態遷移図ならば以下のサイトで簡単に図を作成できます。

Finite State Machine Designer - by Evan Wallace

講義ノートを取りながら図を作成しないといけないため、あまりそこに時間をかけたくないというのが理想ですよね。
公開されている便利ツールがあるのならば、そちらを使って図を作成し、挿入することを考えるほうが良いと思います。

4. 図は手書きにする

ルーズリーフ等に手書きで図を描き、スマートフォンで撮影して、あとで図を挿入するような形です。
あまりにも図が多い講義には、そもそもMarkdownでノートをとることが向いていないので、諦めたほうがいいとは思います。

Markdownは万能じゃない

先から言っているように、板書の図や表が多い講義はそもそもMarkdownでノートをとること自体が向いていません。
また、フリーダムに板書を使う教員の講義にも向いていないでしょう。
私自身も全ての講義で、Markdownを使ってノートをとっているわけではありません。
これは手書きのほうが向いているなと思ったら、ルーズリーフにペンを使ってノートをとっています。
何でもかんでも無理にPC上でノートをとるというのは、かえってうまくいかないことのほうが多いのではないかと思うところが、やはりあるのです。
キーボードでタイピングするほうが、文字列を速く記録することが出来ることを考えると、頼ってしまいがちですが、効率よくケースバイケースで使っていくことが大事なんだろうと思います。
心がけることでも言いましたが、私はMarkdownは箇条書きでまとめることが向いていると思っています。講義との相性もあるので、うまく利用出来るかなと思った時に、一度やってみてはいかかでしょうか。

明日はponkikkidayoさんです。


*1:私の周りの人間が、起きていなくて2,3限に出ていないことがあるのは、また別の話である。

*2:こことか

CeiEDでCLion使いたいでしょ?

この記事はUEC Advent Calendar 2017の2日目の記事です。
前日はid:octopus_iMykさんの「ドーム友達を脱退した前田氏の理由が核心をついていない件」でした。
共同生活って難しい……


まえがきのようなもの

これを読んでいる電通大生のみなさんは、「基礎プログラミングおよび演習*1」等で、C言語のコーディング方法から、コンパイルして実行する手順を学んだ、もしくは学んでいる最中であろうと思います。
例えばemacsvim等のエディタ*2を開き、C言語のコードを書きます。その後、gccを使ったりして、コンパイルして実行していることでしょう。
しかしながら、IDE*3を用いてJavaからプログラミングを学んだ私にとっては、この手順が非常に面倒に感じたものでした。
そんなこともあり、日頃からC言語を使えるIDEをいろいろ探していました。Microsoft Visual Studioを試したりしましたが、どうも肌に合わないようで、うんうん唸りながらnanoのシンタックスハイライトのカラーリングを変え続ける日々が続きました。

運命の出会い(?)

ある時、Javaでコーディングをしていると、IntelliJ君がふと、目につきました。
IntelliJはJetBrainsが世に送り出している主にJava向けのIDEです。私は学生の特権*4を用いて、Ultimate版をしっかり確保していました。
ここらへんの詳しい話は12/23にudoooom君がしてくれるかもしれないので、割愛します。簡単に説明すると、よくある学生にはタダでライセンスをくれるってやつです。JetBrainsは本当に太っ腹だなぁ。
何気なくそのJetBrainsのHPを眺めていると、CLionという文字が目につきます。
なんだこれは、ライオン? がおー*5

CLionとは

前置きが長くなりましたが、今回紹介するのはCLionのお話です。
CLIonとは、JetBrainsが提供するC・C++向けのIDEです。UIは非常にIntelliJに近く、普段からIntelliJを使っている人にはオススメです。
もちろん、こちらも学生の特権を使えば無料で手に入れることができます。気になった方は、早速JetBrains様に学内メールアドレスを献上してみましょう。
ここから先は、I科とⅠ類の計算機室であるCeiEDでの導入の手順を軽く紹介しますので、ぜひ。

CLionを導入しよう

CeiED以外の他環境では導入手順や、設定等に違う点があると思いますので、ご留意くださいませ。

1. ダウンロードする

まずはダウンロードしなきゃ始まらない。
https://www.jetbrains.com/clion/ でダウンロードしましょう。
Linux版だと.tar.gzのファイル形式で手に入るはずです。

2. 解凍しよう

圧縮ファイルは解凍しないと始まらない(?)
CeiED標準のfirefoxでダウンロードしたならば、ルート直下のダウンロードディレクトリにあるはずです。
解凍は好きなやり方でいいですが、こんな風に

$ tar -zxvf CLion-2017.3.tar.gz

とでもしてやれば出来ると思います。
解凍したものをそのままダウンロードディレクトリに置いておくのもアレなので、好きなところに移動させておくと良いでしょう。

3. 起動しよう

起動しなきゃ始まらない。それはそう。
解凍後はclion-2017.3とかそれに準じた名前のディレクトリになっているはずです。その中にbinがあり、binの中にclion.shがあります。

$ cd ~/clion-2017.3/bin/
$ ./clion.sh

こいつを叩いて起動しましょう。簡単ですね。
起動直後はライセンスの確認があるので、JetBrains様にもらったものを使いましょう。
導入は以上です。お疲れ様でした。

CLionを使ってみよう

では、早速CLionを使ってみましょう。File -> New Project...でプロジェクトを新規作成できます。

f:id:nersonu:20171201133430p:plain:w300
プロジェクト新規作成画面
例えば、C言語で何かやりたいならば、C Executableを選びます。プロジェクトを作成する場所を指定し、Language standardはお好みで。
C90とかC99がわからないという人は、一度自分で調べてみてください。
あとは右下のCreateを押せば、プロジェクトが作成されます。

作成したプロジェクトには、いわゆるHello, Worldプログラムのmain.cCMakeLists.txt、あとはCLIon君が勝手に生成したファイル群があります。

f:id:nersonu:20171201133435p:plain
作成したプロジェクト
早速右上のスタートボタンか、Shift+F10でプログラムを動かしてみましょう。画面下部に"Hello, World!"と表示されていれば問題はありません。
f:id:nersonu:20171201133441p:plain
Hello, World!

CMakeってなんですか

さて、もうCLionを使える状態にはなりました。しかし、CMakeList.txtって何やねん。と思われた方がいらっしゃると思います。
実は、CLionはCMakeと呼ばれるビルドシステムを採用しており、つまるところCMakeList.txtというのはそいつの設定ファイルと思ってもらえればよいです。
記述方法もそんなに難しいものではないので、軽く説明しておきましょう。
今、CMakeLIst.txtをCLion上で開くと、以下のようになっていると思います。

cmake_minimum_required(VERSION 3.9)
project(Project_name C)

set(CMAKE_C_STANDARD 90)

add_executable(Project_name main.c)

これを見て、ああ、add_executableにファイルを追加していけば、いいのかな。くらいわかれば、もうどうということはない(?)気がします。
実際、新しくsub.cを追加したいならば

add_executable(Project_name main.c sub.c)

と、してやればいいです。

あと、電通大生の皆さんはやはり、-Wallといった警告オプションや、-O2などの最適化オプションを使いたい! と考えると思います。 CLionでも、もちろん可能です。こういうときは

add_definitions("-Wall -O2")

と、一行追加してあげましょう。

また、電通大生の皆さんはやはり、数値計算を講義や実験で行う時に、math.hといった数式ライブラリを使わなきゃ……と、常日頃思っていることでしょう。
こういう、ライブラリを引っ張ってくるときは先のような方法ではなく

target_link_libraries(Project_name m)

と、すればオーケーです。上記は、math.hをリンクした例です。

その他、詳しく知りたいのであれば、まずはCLionのHelpにあるCMakeのチュートリアルをやってみるのをオススメします。 www.jetbrains.com

おわりに

いかがでしたでしょうか。CLionを始めとしたJetBrainsのIDEはUIが非常に好みで、使いやすいと感じています。
なんといってもIDEを使うメリットは

などとあり、作業の効率化につながると考えています。
今回はLinux版の導入に触れましたが、WindowsMacにも対応していますので、IntelliJを入れるついでに、導入してみてはいかがでしょうか。
ちょっと気になるな……と、思われた皆さんはぜひCLionを使ってみてください。
これからガンガン使っていくぜとなった方は、ここに書いていないような設定のアレコレも、時間の許す限り触ってみて欲しいと思います。
よきコーディングライフを。

明日はid:Kniumさんです。
UEC Advent Calendar 2016の作成者ですね。お楽しみに。


*1:電気通信大学の二学期に開講されるプログラミングに関する基礎知識を学ぶ講義である。今年度より講義内容が一新されたらしい。

*2:余談だが、筆者はnanoをよく用いている。

*3:統合開発環境のこと。

*4:https://www.jetbrains.com/student/

*5:(「・ω・)「ガオー

雑感(11/30)

どうもブログを更新しなさすぎているので、ここいらで書きたいことを書き連ねておこうと思う。

しごと

2月頃から、今までメインのバイトだった商業施設の警備業務から技術系(?)バイトに切り替えた。
警備業務そのものは、それほどしんどいといったことは無かったが、変化と技術的なものを求めて、職場を変えた。
運良く、某友人からの紹介もあり、すんなり入社。4時間を週2から3程度で程よく仕事をしている。
職場環境は、非常に良いと思う。むしろ貢献度を考えると、アルバイトの自分の力は微々たるもので、申し訳ないと感じる部分が多々ある。
今の主業務は、Androidの開発と、並列処理化して高速最適化したりしている。
Intelのリファレンスをチラチラ見ながら、微々たる速度の向上や停滞に一喜一憂する。少し、根気が身についたかなとは思う。
こういった経験は、自分からすることはほぼ無いだろうし、転職して本当に良かったと感じている。

がくぎょう

絶賛卒研配属期間中だが、卒研配属に関しては省く。
たまに出る実験や講義のレポート課題を見ながら、何も考えずにやると何も身につかないよな、と、それはそう。 統計数学のレポート課題を解くのにPythonで計算させてグラフ生成させてみたり、簡単なプログラムでもあえてC++を使ってみたり、とにかく自分の技術力向上の為に、それっぽいことを思いついたら、すぐ実行するようにしている。
これで、ほんとに身になるんかいな。という話ではあるが、やっていくうちにわかることもあるだろうと信じて、やっていきましょう。
最近本当に、離散数学だったり、統計数学だったりの分野の話が面白くて仕方がないので、そっちのほうを当分はやっていければいいな……

どくしょ

職場が新宿にあるため、電車移動が発生する。
大学の最寄りの調布駅から新宿駅までは、そうそう時間のかかる移動ではないが、隙間の時間は基本的に本を読むようにしている。
もともと、現代作家のミステリーばかり読んでいたが、あまりジャンルが偏るのも良くないよなと思っていろいろなものに手を出す。 意識して選ぶと、好みに偏ってしまいがちなので、最近はあらすじさえチェックしない。
本屋に積まれたり、棚に入っている本を表紙絵とタイトルだけでバッと選び、スッとレジに持っていく。
自らに選択する余地を与えない。おかげで、自分が気に入るような本ばかりが手に入るわけではない。
しかしながら、新しい出会いというのはやはり顕著で、新鮮味があって、普段読んでいる時に生まれないだろう感情が湧き出てくる。
最近読んだ本だと『ふたつの星とタイムマシン』は非常に良かった。SFチックな短編が好きな人にはぜひ、おすすめしたい。 bookmeter.com

あれこれ

そんなこんなで、時間つぶしも兼ねて思っていたことを軽く文章にまとめたが、書き出すとあれもこれも書きたくなってくる。
小説を書いているときもそう思うのだが、一度の情報量はあまり多すぎてもなあと考えてしまう。
ここらでいい塩梅だと思って、一旦筆を置くことにする。
明日からは12月で、もう一年も、平成も終わってしまうので、少し悲しさを覚えるが、それよりもUEC Advent Calendarの記事を書かなければと思って、もうひと踏ん張りしたい。
それでは。 adventar.org

Java2年生がKotlinを学ぶ -1- 「var, val」

Google I/O 2017、我々はこの流れに乗るしかない。
皆様方が御存知の通り、KotlinがAndroidの公式言語になったのですね。

Javaに関してはOracleGoogleが揉めていた1こともあって、「そうだねぇ……」という感じではありましたが、Kotlinは元々Androidでよく使われている言語の一つです。無知な私は「はへー」となって、「ほーん」となって、「あひょー」という感じでした。

“Kotlin is 100% interoperable with the Java programming language2

はーん、そりゃすごい。あとなんかJavaナウい感じにイケイケにした言語っぽい。
そんあこんなあって、流行りのなんとかウェーブに乗ってやるぜという気持ちになってきました。
素晴らしいことにこのイケイケウェーブのおかげで、Kotlinプログラマーが情報提供をドバドバしているっぽくて最高そうです。
やるか。そうやって我々はKotlinの奥地へなんとかかんとか。

変数宣言

var

今回は変数宣言なわけですが、こんな感じで。

/* Java */
String str = "hoge";
int num = 123;
/* Kotlin */
var str: String = "hoge"
var num: Int = 123

Kotlinで変数宣言する場合にはvarを使います。変数の型は(変数名): (型)と、:の後に入れる感じで。

ただ、KotlinはJavaと違って型推論があるイケイケ言語なのだ。我々Kotlinは賢いので上の場合だとこうできます。

var str = "hoge"
var num = 123

イケイケ~
Kotlinが型推論出来るのはいろんなところで効いてきます。良い。

val

私みたいなポンコツはたまに何も考えないのでダメなんですけど、プログラミングにおいて不変のものは不変の型にしてしまうほうが望ましいのです。Javaだとfinalを付けますよね。Kotlinはfinalを付けるかわりに、valで変数を宣言します。

/* Java */
final String str = "fuga";
/* Kotlin */
val str: String = "fuga"

変数宣言、どんどんvalでやっていきましょう。もちろん、varを使う場面もあるので、そこら辺はいい感じに使い分けましょう。

Nullable

他言語ではOptionalと呼ばれていますが、KotlinではNullableと呼ばれます。まんまや。

これの何がいいかって話です。Nullableでない型(Non-Null types)にnullが代入できないことで、Javaのような実行時のNullPointerExceptionを回避できるわけです3。ヌルヌルしません。null安全じゃーんイケイケ。

通常、型はNullableではありません。Nullableの型を宣言する時には型のあとに?を付けます。

/* Java */
String str = null; // コンパイルエラーしない
/* Kotlin */
val hoge: String = null // コンパイルエラー
val fuga: String? = null // コンパイルエラーしない

KotlinのNull安全の話はまた今度詳しく書き留めておこうと思います。

イケイケ言語Kotlinこれからやっていくぞ!

参考にしました

kotlinlang.org qiita.com qiita.com kotlinlang.org

中罠 プラスボム のすゝめ

気づけば、17弾「エクスポーズドセレクター」が発売。
環境変われば、前の記事の続きもお蔵入りにならざる得ないわけです。

さて、新弾ではやれアロピだの、シクのイカだの、カーニバルだのと皆さんの話題はそちらばかり。
そんな中私の新弾一番のオススメはこちらです。
f:id:nersonu:20170227123405j:plain
プラスボムちゃん!
www.takaratomy.co.jp

出現時能力でトラップアイコンの付いたプラスボム以外のシグニを、トラッシュから3枚までメインデッキに戻すことが出来ます。
デッキ圧縮が捗る捗る。リフレッシュのタイミングの調整にも使えますね。

f:id:nersonu:20170227124051j:plain
相手が脳死でホログラフの宣言を「トラップアイコン無し」と宣言する以上は、ホログラフの強化になります。
しかし、それ以上にこの恩恵を受けるのは

f:id:nersonu:20170227124302j:plain
チュモーイ先生!もう運ゲーとは言わせない。
低枚数のメインデッキならば、あーやⅣの自動効果とも合わせて圧縮してからアタックフェイズに臨みたいものです。
あーやはどうしてもシグニアタックを通す手段が少ないのでイカからの卒業はまだ難しいですが、チュモーイの効果を発揮しやすくなってるんではないかと思います。
ハニトラは……。

ただしこの出現時能力、注意すべき点があります。
f:id:nersonu:20170227125000j:plain
新弾のトレインボムの効果である、トラップ効果のトラッシュからの参照。
トラッシュ枚数が少ない時に参照したいシグニを戻してしまって、使いたいトラップ効果が使えない……なんて事態にならないように気をつけたいですね。

プラスボム自身のトラップ効果も非常に優秀です。
トラッシュをメインデッキに戻す効果は以下のようなシグニを擁する赤ルリグや、
f:id:nersonu:20170227125523j:plain f:id:nersonu:20170227125556j:plain

トラッシュ利用がメインの黒ルリグ、バイジェ等にも有効でしょう。
f:id:nersonu:20170227125802j:plain f:id:nersonu:20170227125900j:plain
おまけにバニッシュ効果もあるので、緊急時は頼るのもアリです。
ただし、相手のデッキ枚数、サーバントの枚数も考慮しながら相手に合わせてうまく利用したいところ。

という感じで、新弾ではARROW RAIN、トレインボム、クレイモアを含めてあーやとしては非常にいい強化を頂いた感じとなりました。
f:id:nersonu:20170227130528j:plain f:id:nersonu:20170227130536j:plain
WBC東京はもし抽選に通ればあーやで参戦しようかと思っている次第です。
あーや使いの皆さん、頑張っていきましょう。

f:id:nersonu:20170227130751j:plain
ウェポン……?知らない子ですね……。