niszetの日記

細かい情報を載せていくブログ

R4.0.0でRToolsを入れるのに少し手間取ったのでメモ。

大事なことは大体マニュアルに書いてある。

背景

先日(結構前ですけど)、Rのバージョン4.0.0がリリースされました。まぁ、まだ使ってないんですが…。

cran.r-project.org

この時、試しに入れたパッケージが更新入っていたので更新したところ、更新されないパッケージがあり、ソースからビルドするタイプが抜けていました。 RToolsを更新するの忘れていたなぁ・・・ということで、RTools40を入れたのですが…

cran.r-project.org

RStudioもバージョンを上げる必要がある。

RToolsのページにも書いてあるのですが、RStudioは新しいものを使ってください。以下引用。

Note for RStudio users: please check you are using the latest version of RStudio (at least 1.2.5042) to work with rtools40.

現時点の安定版の最新が1.2.5042ですので、コレをインストールします。

rstudio.com

古いのがあってもそのままインストールで問題ないと思いますが…どうなんでしょう。

んで、これですべて整った・・・というわけではなく、PATHの設定が必要になります。

これも、RToolsのページの下の方にに書いてありました。すべては良く読めって話だった。

Rのコードで変更するやり方も書いてあるので、コピペで実行しても良いかと思います。私は何も考えずにコピペ実行してちゃんとPATHが通っている(マニュアルのページのmakeのパスの確認方法で)ので大丈夫だと思いますが、自己責任で。

そして、RStudioを再起動して再度パッケージを更新したところソースからビルドするか?と聞かれ、実行して更新を確認しました。

PATHを設定しないといけないので、初心者Winユーザにはちょっと敷居が上がったような…。まぁ、ソースからビルドしなければ良いわけで、ソースからビルドする人はPATHの設定とかは問題ないのでは?という気はしますね…。

The Little Typerを読み始めた

ちょっと前に書いた日記が埋もれていたので一旦公開。

先日読んだ定理証明手習いですが、原著はThe Little Proverといい、The Little er (The ***erのパタンもある)のシリーズ?で出ている書籍の1つでした。

んで、Amazonの奥地に行って色々調べていたところ、The Little Typerという本を見つけました。型についての本のようです。

thelittletyper.com

mitpress.mit.edu

まだ翻訳はされていないぽい(たぶん)。Schemeかな、ちょっと独特な制限が入っている気がする(Lispのオリジナルの言語仕様とは異なる箇所については触れられている)ので、言語仕様的にうーんみたいなことはあるかもしれないですが、これは型とは何かについて知るための本なので別にそれは良いかな…と。

ちょっと今は積んでしまっていますが、最初の方でやっている内容はプログラミング言語の基礎概念の1章でやっていた内容なので、アレを会話形式のやり取りでわかりやすく?書いた本な気がします。といってもまだ型の話がそんなに出てきていないのですが。あちらを読んだことで、judgementは判断って訳語でいいんだな、とかそういう知識の紐づけが出来て読みやすくなった、ような…。

あと、この本読んでる人ほとんどいなそうなので、訳が出ることは期待薄そう…なので、原著でがんばって読んでいきます。。。

結構分厚い本なので、読むのに数ヶ月~半年コースだと思います。そろそろ再開させよう。頑張ろう…。

プログラミング言語の基礎概念を読んだ

読んだだけ…

先週読み始めて1週間で一応読み終わったので(読んだだけね)記録。

型の話に入ってからの理解がかなり怪しく、途中から式変形と証明が追えなくなってしまったので再履修が必要かな。ある程度Haskellについて知ってるので読めたという部分があるので、具体的な関数型言語の仕様を押さえておいてそれを具体例として頭に持ったうえで読める方がよいのかなという感じです。

特に型多相についてはHaskellでもまだ自分のモノにできてない気がしていたので、それがそのまま影響している気がしますね…。具体から抽象に向けてやっていくのは多分やりやすいはず…。

出版社さんのページはこちら。 www.saiensu.co.jp

また、この本にはサポートサイトがあり、特に演習システムを使って実際に動かしてみて自分の理解があってるかを確かめられるので、これを進めていきたい…。 www.fos.kuis.kyoto-u.ac.jp

あと、継続の話はこのサイト上にある(本文にはない)のであわせて読まないといけないですね。

型システム入門に手を付けてみるも、現時点での理解力ではちょっと厳しいなぁというのと、ボリューミーなので進捗的にも結構時間がかかるため、まずは全体をさらって俯瞰したいという気持ちではじめました。

型システム入門 プログラミング言語と型の理論

www.ohmsha.co.jp

結果として、前半はともかく後半は理解に結構時間がかかるなということが分かった(それがそのまま型システムにつながるんだけど)ので、良かったかな。

本書は結構読みやすいかと思うのですが、記法について最初に説明なくはじまることがあって少し混乱しますね。読み進めると書いてあったりするんですが…。 あと、2章の2.2以降は初見は飛ばしてよいってなってたので飛ばしてしまってます。これも再読時にはやらなくては。

1章の内容はThe Little Typer(最近積みがち)でやった内容で、コレは…アレでやったやつ…!ってのを体感しました。次はアレを読み切るのが良さそうかな…。 また、プログラミング言語について学んでいるので、先日のRubyでつくるRubyの知見も活きてきていますね。1章とか3章あたりがつながってるかな。

今は全然証明も書けないのでダメダメですが、いずれ書けるようにしていかねば…。

という、読書記録の日記でした。

自走プログラマー ~Pythonの先輩が教えるプロジェクト開発のベストプラクティス120を読んだ

幅広い層を対象にしている初心者の次のステップの本

主に先月読んでいた自走プログラマーが読み終わったので簡単に感想を書いておきます。

出版社さんのページはこちら。サポートページがあり、正誤表がありますね。

gihyo.jp

1章から順に、コード実装、モデル設計、エラー設計、システム設計、やることの明確化となっており、章ごとに内容が基本的に独立しているのでどの章からでも読めます。また、章の中の各節についても相互に関連しているものもありますが独立して読めるものが多いので、ちょっと時間が空いたときに少しずつ読む、という事で読み進められると思います(私はそんな感じで読み進めた)

1章ではPythonでコードを書く上でのノウハウなのでPythonの内容ですが、5章のやることの明確化は言語に依らない内容になってるなど、詳細度(というか具体例の度合い)が章ごとに違います。とはいっても基本はPython+Djangoの話だと思った方が良いかな。

内容的には初級以降~中級以上の内容で、ある程度コードがかけるとか、各設計をしたことがあると丁度良さそうです。逆にその章の内容に対して完全な初心者(はじめたばっかり)だとピンとこないかもしれません。私はその点でモデル設計はピンと来ない(モデル設計や関連することをしたことがない)ので、今回は飛ばしてしまいました。いつか必要になる日が来るかもしれませんが…。 逆に、コード設計、エラー設計、やることの明確化は私にはすぐに役に立ちそうかなと思います。そういった取捨選択がしやすい構成ですね。

扱ってる項目は多岐にわたりますが、散らかってる感じはせず、読み通してみても個別のトピックを見ても読みやすい構成になっていると思いました。文体の揺れを感じないので全体として文章がまとまっている感じですね。 内容のすべてがドンピシャに当てはまる人というと対象が絞られる印象ですが、逆に内容のいくつか~大部分がヒットするという人は多そうという印象です。この本は実務に近い内容で読んだことをすぐに活かせるという人も多いのではと思います。

初心者が一通り基礎が出来た後に次に読む本、中級者向けの本というのがあまり世の中にはないとよく言われますが、お仕事的に考えれば、まずは自分の与えられた業務をこなせるようにすること、そして周囲の関連する内容やその情報を知り、吸収していくフェーズになるかと思います。 そういう意味で、この本はまさにタイトルの通り「自走」出来るようになるための取っ掛かりになる本なのではないかと思いました。

…とはいえ、私自身はソフト屋さんではないので、上で書いたことはお仕事のアナロジーで考えた話+ちょっとコード書いた経験からの感想ですが。

要望的なやつ

ちょっと思ったのですが、本書は参考になるサイトや書籍などの情報が節の間に書かれていて、あとから探すのがちょっと大変じゃないかな…と。どこかに(再度)まとまってると良いのではないかなとちょっと思いました。

中級者向けの本の話。

ここからは蛇足。初心者向けの本というのはこの間書いたように、情報量必要十分の最小限にまで絞って、迷わずにゴールまでたどり着ける内容と分量で書かれているとよいかなと思うのですが、 中級者は上に書いた通り求められるスキルがより広くかつレベルの高いものを要求され、自身のタスクが自分で完了できることや自身のタスクの周辺、関連、前後のタスクとの協調やらなんやらを求められていきますね。

そういう意味で、中級者向けの本というのはこの本のように情報量が多い本というのが良いのかなと思います。そういう意味では技術評論社さんの本は比較的情報量を多めにする傾向があるので中級者向けに良い本が多い印象がありますね。

上級者だとこれを技術的に突き詰める話とエッジケースに対応できるような対応力みたいなのが必要になると思うので、それはそれで書くの大変だよな…って思いますが(そこまでくると書籍はあんまり必要ではないかもしれないけど。

…という、読書日記でした。

追記

Twitterのやりとりで、上に書いた「要望的なやつ」について、情報をまとめたサイトのリンクをこのページに貼る許可を著者の清水川さんからいただきましたので、こちらに貼っておきます。

scrapbox.io

書籍内にあったリンクや参考文献、本書の目的や思いなどが載っていてこちらも情報沢山です。ありがとうございます…!

5/2の朝に考えたこと

あとでまとめるとして、

とりあえず関連するツイを貼る。これに続いてる内容も読むこと。

こちら、得られた知見。やはり世界は広い…

5月の目標

もう1日目が終わろうとしているが…。

input

今月もひたすらinputをしていく。読書メーターとStudyplusで進捗を書いているので、やってないことはすぐわかる。

以下から数冊読み終える目標。

  • プログラミング言語の基礎概念
    • 先月から引き続き。残るは型理論
  • 論理と集合から始める数学の基礎
    • 今月から読み始める。2ヶ月くらいかかるのでは?
  • チャート式大学教養線形代数
    • いわゆる青チャートの線形代数の奴。先月仕掛かったものの進捗があまりない
  • モデル検査上級編
    • 先月読んだ基礎編の続刊。CTLでの記述などに慣れる
  • 自走プログラマー
    • あと4章だけ。ひとまず読み切ろう。
  • 統計学演習
    • 今月から。
  • 徹底解説v6プラス
    • 先月から読んでるので今月中には読み終えたい。

まだ何冊かあるけど、5/10の振り返り時点での進捗次第で入れ替え等行う。

output

  • VSCode拡張のpandocplayの整備
    • GitHubの機能も片っ端から。
  • JavaScriptを使って慣れる
    • ゲーム作るやつとVueを触ってみるのの2つ。
  • AtCoder
    • まずはアリ本をやらないといけない
  • kaggle
    • まずはkaggle入門本を読むところから順次。

その他

  • 引っ越すなら準備
  • 社会人大学院のための準備色々…。

追記

そうそう、月初めに明確な目標を立てるのはカレーちゃんさんの行動を見習ってやってみた感じです。年単位の目標がまだ出来ていないので、来年の4月までの目標ということで1つ作ろうと思います。

RubyでつくるRubyをゼロから学びなおすプログラミング言語入門を読んだので感想。

初心者にも、プログラミング言語の実装に興味がある層にもおすすめ

読んでからすこし日が空いてしまいましたが、RubyでつくるRubyを読み終わったので感想を投下しておきます。この本を読んで初心者向けの本はどうするのが良いのか?を考えていたのでそれについての私の考えがダラダラ書かれていますが、ご容赦を…。

対象読者など

本書のはじめににも結構書いてあるのですが、結論から言えば初心者に特におすすめだし、ある程度プログラムを書いたことがあってもプログラミング言語の実装について良く知らない、といった人におススメです。

私がPandocのことばかりやってるので特にそう思うのかもしれませんが、木構造がたくさん出てきて楽しかった?です。データ構造としての木の構造はそこらじゅうで出てくるので、この本を通して慣れることが出来ると良いのではと思います。

この本を読んで、初心者向けに良いな、と思ったもののうち、構成に関係する部分は主に次の通りです。まだあるかも。

  1. 最後まで読み通せる分量になってるのでとりあえずやってみる、が出来る。
  2. カラー印刷や可愛いキャラクタの絵などで見た目のハードルが低い
  3. 目的(この本の場合はインタプリタを作る)に沿って、道が1本に繋がっている(全体でストーリーがある、という意味)ので迷いにくい
  4. これに関連して、初心者向けに必要十分な情報のレベルまで絞り込んでいる(逆にいえば、情報量を多くした本は中級者向けとしての価値がありますね。上級者向けの場合は内容のレベルがより深いものになるのでトピックとしてはまた絞ったものになっていきますが…)
  5. 各章にまとめの節があり、演習問題がある(初心者は自分の理解が正しいかを確認するのが必要なので。私は演習問題やってないですが…)
  6. 注目しているコード片が本文に随時再掲されるのでページをめくって確認する手間がない(究極的には見開きで見える範囲内の情報+そこまでで理解していること、で十分な状態が初心者に易しい)
  7. 索引が充実しているので困ったら索引を引けば良さそう(pdf版はリンクで飛べるのでさらに便利)

あと細かい点としては、フォントの使い分けとか章の始まりが必ず右ページになってるとか、カバーを外した時に出てくるイラストの間違い探し?とか色々仕込まれまくってるのですが、これは実際に見てみてもらうのがよいかな。電子書籍版はカバーの表紙は見れますが、裏表紙、内側は見れないので物理+電子で買うとお得ですね(宣伝)

本題?の感想

パッと見たときの感想から書いてきますね。上にも書いてますが。

本書は130ページ程の、比較的薄め(物理的な意味で)の本なのですが、この一冊でRubyインタプリタを作ってしまうという本です。この分量で、しかもパラパラとめくっていくと図が多いように見えるのに本当に出来上がるのか…?と途中まで不安というか、疑問に思うわけですが、最終的にRubyでつくるRubyインタプリタが出来ます。すごい。

本文の文章も難しいところは多分ないんじゃないかな…と。読みやすいので独学で進める分にも問題ないんじゃないかなと思います。もちろん、近くに分かる人がいて聞けるのがベストですが。そういう意味では教材として使って、わかる人が要所要所で教えてくれるのが最高…ってそりゃそうか。

この本はRuby言語で書かれていますが、実際に必要なRubyの文法規則はあまりないです。扱う範囲もプログラムの基本的な内容、表示、四則演算、変数の代入、変数の参照、条件分岐、ループ、関数、再帰…といったものなので、特定の言語をよらずに応用できる内容です。

ただ、初心者の場合はそのあたりを抽象的にとらえるのは難しいところがあると思います。が、Rubyの実行できる環境さえあれば実際に動かして確認しながら進められるので、まずはこういう風に書くんだな、という形で進めていくと良いと思います。

そう考えると、よく言われることですが、Python版が欲しいなぁ~という気もしますね。内容的にはもちろん、Pythonでも通じるんですが、あとで書くようにパーサ部分が準備されていないと同じことを実行して確認する、が出来ないのが難点ですね(逆にいえばそこさえあれば…)

ここまで初心者向け~と書いてきましたが、実際のところ、中盤~後半は結構難しい内容を扱ってます。変数を定義したりそれを評価したり、関数を定義したり環境を作ってスコープを実現したり、普段何気なく?使ってるプログラミング言語の裏でどういうことが行なわれているのか?の一端を見ることが出来ます。その観点で、これらの内容に興味があるがよくわかってない(私のような)人にもおススメできる内容です。初心者の人もここまで進めることで、いずれコレはRubyでつくるRubyに書いてあったやつか…!となる日がくるかもしれません。

本題以外の難しい部分の隠蔽の潔さ

本来?インタプリタやらコンパイラを作る上で障壁になるのが字句解析/構文解析…つまりパーサの作成に関する部分なのですが、それが本書ではあらかじめ準備されていて、読者はそれを使うだけで良かったりします。そしてそれについての説明は本書では全くされていない、というかなり潔いことをしています。

しかし、結果として最初から最後まで一貫してインタプリタを作っていく、ということにフォーカス出来ているのが良いですね。パーサ部分の解説本も出ないかなぁ…とか思ったり。

おわりに

なんだか終始べた褒め記事になってしまいましたが、この本も自分にとって必要な本だったので…。はじめは、「Rubyかぁ…」とか、「これは初心者向けの本だからまぁ自分には…」とか思っていたんですが、良い意味で裏切られたのでその反動もありますが。本を読んだ感想は、実際に本を読まないと出てこないんだなぁ…という。そして、いつ何が自分にとって必要になる情報なのか、読めませんねぇ…(そらそうだ

追記

ここから余談なんですが(上に書いたことも余談みたいなもんでは?)、ここ数日はプログラミング言語の基礎概念という本を読んでます。

www.saiensu.co.jp

コレを読んでると、「お。これはRubyでつくるRubyのアレか…」みたいになってつながる部分が出てきます。インタプリタを作る=Rubyの言語仕様を実装しているわけで、それはプログラミング言語の基礎概念にもつながるよね…と。

このプログラミング言語の基礎概念は、型システム入門 プログラミング言語と型の理論という本を読もうと挑戦したものの難しくてもうちょっと入門者向けのがないかな…?ということで手を出したのでした。プログラミング言語の基礎概念は最後に型システムの話があるので、これを読み切れば全体をとりあえず俯瞰できて、それぞれの関連が少しはわかるはず…。

www.ohmsha.co.jp

で、この本の翻訳者の方の一人がRubyでつくるRubyの著者さんで、編集者さんが同じ、という。先回りして全部先に置いておきますね~ってやられている感…。

あと思ったのは、型システムみたいに高度な内容を理解しているから入門書で大事なところが押さえられて書けるんだなぁ…という。もちろん、初心者が実際に手を動かしてハマったところをまとめたもの、とかも価値があるんですが、1つの線に沿って導いていくタイプの入門書はやはり内容の理解が出来ている方が良いんだなぁ…という素朴な感想がありました。

あ、あとすっかり忘れてましたが、RubyでつくるRubyの出版社さんのページへのリンクをぺたりしておきます。完全に忘れてた。

紙+pdf版はこちら。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門(紙書籍+PDF版)www.lambdanote.com

pdf版のみはこちら。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門(PDF版のみ)www.lambdanote.com

私は紙の本が好きなので常にそちらを推していますが、ラムダノートのサイトで購入すると紙+pdfなのでよりお得では?と思いまする。

Twitterではちゃんとサムネイル出るのに…なぜはてなブログでは文字だけになってしまうのか…謎だ…。