本を書きました。『基礎からしっかり学ぶC++の教科書』


4822298930
『基礎からしっかり学ぶC++の教科書』(日経BP, 2017)

プログラミング言語なんて,Python一択になるんじゃないの?という向きは,TensorFlowのコードや,世界コンピュータ将棋選手権の参加チームの使用言語をご覧になるといいでしょう。「どうしてJavaやC++よりも遅いPythonが機械学習で使われているの?」などという話もあります。

『文法からはじめるプログラミング言語 MS Visual C++入門(マイクロソフト公式解説書)』(日経BP, 2009)の改訂版という位置付けですが,かなりの部分を書き直しました。

新しい話

  • C++11, C++14に対応しました。新しい話題は,型推論・ラムダ・ムーブ・新しい標準ライブラリ(ハッシュテーブル・並列処理・乱数・時間)などです。
  • Visual C++に加えて,GNU C++とClangでも,サンプルコードの動作を確認しています。
  • (実用的かどうかはともかく)C++の高速性が活きる例として,組み合わせパズルを解きます。(何を勘違いしたか,初刷では幅優先探索の英語が間違ってますな!)

なくしたもの

  • GUI(GUIアプリを作るならC++でなくてもいいだろうと考えてのことです。)
  • C++/CLI(旧版で,マネージ拡張という失敗例を紹介したわけですが・・・)

C++入門書の執筆は,プログラミング初心者からは「難しい」,C++のプロからは「いいかげん」と言われる,負けの決まった戦いです。(いいわけ)

関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間


4798043761岡部健『関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間』(秀和システム, 2015)

「愛情の裏返しか」と思わせるほどネットでたたかれている本書。同じ用語だけど定義を変えてきたな,言いたいことはなんとなくわかるけどこれじゃ伝わらないな,などと考えながら読むと意外に楽しめる。文章を書くのと違って,プログラミングには,コンピュータが指示どおりに動くかどうかが表現の明確さの一つの指標になるという特徴がある。この特徴を生かして,バシっとプログラムで表現すればよかったのにと思わせる部分は多い。

参考文献リストなし・索引なし

HTMLとCSSだけで作るマルバツ


マルバツを題材にしたプログラミング入門書を紹介したときに,「自分ならどうするか」を考えると楽しいと書きました。

私の場合,HTML+CSS+JavaScriptで作ることを最初に考えますが,HTMLとCSSだけ,つまりJavaScriptなしというのも面白いですね。根性があれば,プログラミングは不要です。(CSSも本質的には不要ですが,見た目があまり貧弱だとイヤなので・・・)

COMは負けないマルバツ+αのつもりです。勝つ場合の手数は考慮していません。

Manifold JSで別のプラットフォーム用に変換できます。

1594746877Tic Tac Tome は,この記事でやっているのとと同じことを紙で試みているすごい本です(1ページ1局面,一部両面印刷で約700枚!)。残念なことに,先手が人で後手が最善の場合は網羅されているようですが,後手が人の場合は,先手が真ん中を選ぶケースしか扱っていないようです。つまり,上述の「COMが先手」のパターン1と2は扱われていません(上の実装なら,1ページ1局面,一部両面印刷で約230枚程度で足りるはずです)。

この本がマルバツを理解しているかというと,そういうわけではないと思いますが,そういうことを考えるのも楽しいものです。

参考:1人で「三目並べ」を遊ぶことができるゲームブック「Tic Tac Tome: The Autonomous Tic Tac Toe Playing Book」

世界が変わるプログラム入門


4480689389山本貴光『世界が変わるプログラム入門』(筑摩書房, 2015)

マルバツゲームの開発を例に,プログラミングとは何かを解説する入門書。使っている言語は擬似的なもので,実際に動かして試すことはできない。プログラムは動くことが最重要だという私の好みには合わないが,面白い試みではある。残念なのは,例がすべて手続き的なため,マルバツとはいえ,その規模がかなり大きくなってしまっていることだ。マルバツを作れるようになったくらいの人が,自分ならどうするかと考えながら読むと楽しめるかもしれない。

参考:HTMLとCSSだけで作るマルバツ

名前に非ASCII文字を含むユーザーがRを使う方法


注意:名前に非ASCII文字を含まないにもかかわらずうまく行かない場合にも遭遇したことがあります。その時は、セキュリティソフトを一時的にオフにすることで解決できました。

Windowsでは、ユーザー名に非ASCII文字を含めることができますが、ユーザー名が非ASCII文字を含んでいるといろいろ問題が起こります。たとえばRでは、パッケージのインストールに失敗します。

Windows環境で「R」を導入するための絶対確実な方法という記事によると、(1)マルチバイト文字を含まない名前のユーザーを新たに作り、(2)マルチバイト文字を含まない名前のディレクトリにRやRStudioをインストールすればいいそうです。

しかし、ユーザーを作り直すのはかなり大変な作業ですし、そもそも、共有PCなど、管理者権限を使えない状況では不可能です(絶対?)。

そこで、管理者権限が無くても使える、ユーザーを作り直さなくていい方法を紹介しましょう。

RStudioを使わない場合

  1. インストーラのいいなりにRをインストールする。
  2. c:/rlibsのような、ASCII文字だけで構成される名前のディレクトリを作り、環境変数R_LIBS_USERの値がこのディレクトリ名になるようにする。
  3. WIndowsを再起動する。

RStudioを使う場合

  1. Rをアンインストールし、c:/Users/ユーザ名/Documents/Rを削除する。
  2. c:/Rのような、ASCII文字だけで構成される名前のディレクトリを作り、そこにRをインストールする。
  3. c:/RStudioのような、ASCII文字だけで構成される名前のディレクトリにRStudioのzipファイルを展開する(管理者権限がないため、インストーラは使えない)。
  4. c:/tmpのような、ASCII文字だけで構成される名前のディレクトリを作り、環境変数TMPの値がこのディレクトリ名になるようにする。
  5. WIndowsを再起動する。

管理者がアプリをインストールし、標準ユーザーがアプリを利用するという、MacやLinuxでは一般的な運用方法を採用している場合は、次のような方法でも大丈夫です。(環境変数TMPの値を変更しています。ここで指定したディレクトリを削除すると、Excelなど,他のアプリに悪影響があります。)

  1. 管理者としてインストーラを起動し、インストーラのいいなりにRとRStudioをインストールする。
  2. c:/rlibsc:/tmpc:/homec:/ruserのような、ASCII文字だけで構成される名前のディレクトリを作り、環境変数R_LIBS_USERTMPhomeR_USERの値がこれらのディレクトリ名になるようにする。環境変数は、コントロールパネルの検索窓に「PATH」と入れて出てくる「環境変数の編集」をクリックして編集する。ここで挙げた例ならば、次のように設定する。
    変数
    R_LIBS_USER c:/rlibs
    TMP c:/tmp
    home c:/home
    R_USER c:/ruser
  3. WIndowsを再起動する。(不要かも)

Windows 10上のR 3.3.2、RStudio 1.0.136で動作を確認しています。

MacやLinuxに比べると、Windowsはいろいろよくわからない部分があるのは確かですが、ここで扱っている問題は、Windowsの問題というよりは、RやRStudioの問題という気がします(テストが不十分)。WindowsもMacのように、サポート期間を短くして、古いユーザーをどんどん切り捨てていくなら、こういうことは少なくなるのでしょうが。