ゆるふわ技術日誌

エンジニア見習いの悪戦苦闘日記

TeXのインストールに失敗した/Rails書いたりした #261

TeXのインストールに失敗した

(´・ω・`) <つらいんご

つらい。レポート書こうとしてMacTeXをインストールした。インストール作業自体は正常に終わったけれど、日本語が出力されない…。

原因は多分わかってて、HighSierraからシステムのフォントの何かが変更されたらしくて、それに対応する設定しないといけないっぽい。

一応いろいろなサイトを参考にやってはみたものの、直らず。とりあえず今日出さなきゃいけないレポートだったので、Pagesで書いてみた。

f:id:uutarou:20180131233943p:plain

こんな感じ。フォントとかさえ変えてあげれば悪くない見た目になる気がする。図表番号とか手打ちだったりするので長いレポートをこれで書くのは勘弁って感じですが。

ちなみにソースコード貼ってる部分はこちらを参考にさせてもらいました。

tsukurunote.com

Rails

ま〜〜〜〜たRailsかよ…って感じですが、またです。

APIモードにしたRailsさん、簡単なAPIサーバー作るならもってこいだなぁなんて思っている今日この頃です。

ちなみにRubyMine入れてみた。ついでにテーマも変えてみた。

f:id:uutarou:20180131234344p:plain

マテリアルっぽいテーマ入れたらAtomみたいになった。

やっぱり補完効くの正義だなぁと思った。

課題の実装を終えたよ! #260

課題の実装を終えた!

終えました!

リポジトリはこちら

https://github.com/uutarou10/basic-interpreter-javagithub.com

※2018/01/31追記:先輩からの助言により(コピペレポート防止のため)にしばらく非公開リポジトリとします。

徹夜作業の甲斐あり、無事に完成しました。妥協実装してたり、汚いコード書いてたりしてるところがあるのでその辺は余裕があったら提出前に修正してやりたいですが、とりあえず今日は疲れたのでこのままにしておきます。

f:id:uutarou:20180130232528p:plain
喜びのコミットメッセージ

よくみたらTypoしてるし笑う。

一応

a = 5
DO UNTIL a < 1
PRINT("Hello")
a = a - 1
LOOP
END

こんな感じのBasic風ソースコードを読ませるとHelloが出力されます。

たったこれだけのことを半年もかけてやってしまったのが悔しいところではあるのですが、いい勉強になったなぁと思います。

今回Javaで書いたのですが、もっといろいろとJavaの機能とかうまい設計のやり方とか知っていれば、綺麗にみやすくかける部分もあるのだろうと思います。

あと他の言語とかで同じもの実装したりすると、その言語の特徴的な機能とかの勉強もできていいのかなぁなんて思ったり。

次やれば、3週間くらいで作れる気がする。

雑談

徹夜は賭けというか今回はうまく行ったからよかったけど大抵寝落ちして進捗が生み出されなくなるのでよくないです。やらないほうがいい。

レポート課題でひたすらJava書いてました #259

レポート課題

このブログで何回も書いてるんですけど、Javaを使ってBasic言語もどきのインタプリタを作るという課題をやっています。

実装の流れとしては

みたいな感じ。

構文解析のところを昨日全部消して作り直してしまったので圧倒的進捗遅れ状態なうです。つらい。

今日一晩でとりあえずレポートかけるところ(=実行系の完成)まで行くべく頑張ります。

雑談

早く自分のやりたいことをやりたい…

まずはレポート終わらせることにした #258

まずはレポートやる

試験こそ終わったものの月末〆切のレポートがあったなぁということで、今日はちょこちょことそれらを解体してました。

もう丸1日くらいはかかっちゃいそうだなぁ。

昨日はハンズオンでElm書いて、帰宅後Ruby(Rails)書いて、今日はJavaゴリゴリ書いてさっき息抜きにRails書いたりしてたらだんだん文法が頭の中で混ざってつらいことになる。さっさとJavaさんの課題を終えてElmとか書きたい。

Elm日本語ドキュメント

日本語版あったのですね…

イントロダクション · Elm Tutorial

バージョンも現在の最新である0.18に対応しているようなので英語版と併せて活用していきたい。とりあえずElm Architecutreに関して、理解が及んでない感がすごいのでその辺を中心に。

あと、Elmに限った話ではないのですが、GitBookってMobiとかPDFとかePubとかでダウンロードできるんですね…知らんかった。

Elm Tutorial · GitBook

Elmチュートリアルはここからいける。最高か。

雑談

明日は大学行って圧倒的進捗を生み出したい所存。生まれるかな進捗。

行ってきたぜ!Elmハンズオン!! #elm_tokyo #257

#行ってきたぜ! 定期試験も昨日で終わり、晴れやかな気持ちでこちらのハンズオンに行ってまいりました。

elm-tokyo.connpass.com

Elmの文法一通り学んだらあとは課題の簡易チャットアプリ作ってみようみたいな感じでした。

ご注意

この記事はElmはおろか、JSすら満足に扱えないくらいのスキルの人間が書いています。

誤りがあったらそっと教えてくれるとうれしいです。

JSのフレームワークについて言及してますが、その辺も経験豊富なわけではないので、ツッコミ歓迎です。

やってみてどうだったか

Elmを語れるほどよくわかってるわけではないのですが、Elmってなんぞと言う話。

http://elm-lang.org/

こちらが公式サイト。

A delightful language for reliable webapps.だそうです。

Webアプリケーションを作ることに特化したプログラミング言語です。

俗に言う関数型言語のような文法をしています。

とは言ったものの私は関数型言語の経験は全くないです。(あと、Elm公式では関数型言語とは一言も言ってないらしく、あくまでA delightful language for reliable webappsということで、Webのためのめっちゃ楽しい言語と言う立ち位置みたいです。導入のハードルを下げるためだとか)

文法とかはまぁ公式ドキュメントを読んでもらうとして。

やってみた感じの感想は、文法を削ってなるべくシンプルな言語仕様にしてやることで、学習コストを下げてるのかな〜という感じでした。実際とっつきにくさを感じたのは最初だけで、コード見ながらドキュメント行ったり来たりを数回してるとなんとなくわかるようになっていく感じがします。

あと、静的型付で、immutableです。個人的には静的型付け言語が大好きなので、(というか動的型付けが嫌い)嬉しいですね。というか、Elmやってみようと思ったのもここが要因として大きいかも。

そして、Elm Architectureというのが言語として定義されていて、これのために言語仕様が作られている(?)ので、流派とかそういうのにとらわれずにかける言語だなと個人的に感じました。

ちなみにReduxはこのElm Architectureに影響されて作られました。

Reduxを書いた経験はあるのですが、リファクタリングをしようと思うと複数の箇所を忘れずに書き換えないとすぐに壊れてしまうな〜という印象を受けました。しかもエラーがわからない。その点Elmはコンパイルの時点でエラーを吐いてくれるのでリファクタリングが怖くない&高速にできる印象を受けました。Elm Architectureを無理やりJSで実装したものがReduxなのでは…という気がしてきた…。こんなこと言ったらいろんな人から怒られそう…。

今回のハンズオンでは通信などに関しては一切扱わなかったので、その辺がどんな感じなのかはこれから試してみてと言う感じですが、このへんのドキュメント

HTTP · An Introduction to Elm

JSON · An Introduction to Elm

見る限り、APIからのレスポンスを定義しておいて、その型に合わせてDecodeして〜みたいなことができるっぽいですね。

これは幸せですわ…。

雑感

いやこれ使えるようになったら強くね?って普通に思いました。(語彙力が低くてごめん)

JSにもflowとかTypeScriptとかあるけど型付は任意だし、型定義ファイルないとそれを作る or Anyでやり過ごすみたいな選択をする羽目になって、だんだんと崩壊していっちゃった…みたいなことにもならないしめっちゃいい気がする。

あとはもっと大きいプロダクトを作ってみないことには、欠点は見えてこない感じはあるけど、今日の講師陣の会社では、本番のプロダクトですでにElmを採用していて、特に大きな問題にはなってないみたいな実績もあるし(参考: 新サービスUniposに新言語elmを導入しました! - Fringeneer's Tech blog )もっと流行ってほしいな!と思いました。

懸念になりそうなこととしては、やっぱり情報が少ない(特に日本語)し、人口が圧倒的に少ないのでライブラリ等の絶対量では劣るだろうし、その辺がどれくらい響いてくるのかなあと感じました。あと、ReactだとJSXを使ってHTMLっぽくViewを作ることができるのですが、Elmではそのようなものはなく以下のような感じになってしまいます。

<div class="content">
  <h1>Hello world!</h1>
  <p>This is HTML!</p>
</div>

これをElmのコードで書くと

div [ class "content" ]
    [ h1 []
        [ text "Hello world!" ]
    , p []
        [ text "This is HTML!" ]
    ]

こうなる。いやこれ分かりづらくねぇか?と個人的にはめっちゃ思ったのですが、Elmmerの人たちは特にそんな様子もなかったので、ただ単にElmの文法に慣れてないだけかもしれないです。あとHTMLからElmの文法への変換はHTML to Elmというツールがあるのでこれを使うといいらしいです。

とりあえず今日のイベントは楽しかったです。これからも継続的に使ってみようと思いました。

運営の皆様ありがとうございました。

雑談

とりあえず、研究室のサイトを僕はいま作り直すと言うことをやっているので、管理画面みたいなのでもElmで作ってみようかなと思いました。(ちょっとしたCMSみたいなのになる予定)

まぁまだサーバーサイドできてないんですけどね。

人生楽しい。Elmがんばってやっていきたい。


渋谷すごい

なんかガラス貼ってる途中みたいな感じになってた。

試験終わったのでElmデビューした #256

試験終わった

最終日は穏やかに終わった。単位を落としたということは多分なさそう。

ボスの講義なので安心した。

Elmデビュー

散々Elmハンズオンに行くぞと言ってまいりましたがいよいよ明日に迫ってきたのでせめて基本構文くらい学んでから行こうと思って公式のドキュメント読みながらちまちまコード書いたりしました。

Elm reactorすごいの図。

関数型言語自体初めてでめっちゃビビってますが物怖じせず明日はチャレンジしたい!

雑談

試験終わったので調子乗って遊んでたらブログ更新し忘れるとこだった。(ほんとは公式ドキュメント読んで思ったこととか書こうとしてたけどそれはまた明日。)

セーフ!!

試験3日目 #255

試験3日目

折り返しや…。明日の試験で最後です。

OSの設計と実装という講義、研究室のボスの講義です。

システムコールがうんぬんとかLinuxカーネルの通信機能(IP,TCP, UDP)とか。

OS考えた人って頭いいんだろうなぁ(小並感)みたいな気持ちになります。

眠いので、いいところまで勉強したらさっさと寝たいと思います。

雑談

明後日が、Elmハンズオンなので明日は試験が午前で終わったらElmの勉強をするぞ!

久々にコードをバリバリ書けそうで嬉しい