これから Linux を始めるなら

好むと好まざるとに関わらず、これから初めて Linux に触れようとする人には『新しいLinuxの教科書』がオススメです。

この書籍の凄いところは、記載内容に無駄なところが一つもない点で、書かれている内容は Linux を使用していく上で実際に役に立つものばかりです。

本書の内容を 100% 理解していれば、今後の Linux を使用した研究、開発、システム運用などがスムーズに行えるようになることは容易に想像できます。


新しいLinuxの教科書

もっと早いうちから、この本に出会いたかったなというのが正直な感想です。

特に大学の学部4年、大学院の修士1年ぐらいの時に読了していれば、その後の研究生活は随分と楽になっただろうなと思えます。

私と Linux との出会いは、ちょうど2000年代の終わり、2010年代の始まり頃で、大学の研究室に入ったら、いきなり CentOS を使用することになりました。

私の研究室は学部レベルでは電気電子に所属していたので、新入生はほぼ全員が初めて Linux に触れる素人ばかりでした。

当然、研究生活に必要な知識を身につけるための勉強会が毎日のようにあったのですが、その内容がまさに本書の内容とほとんど同じだったので驚きました。

相違点があるとすれば、グリッド・コンピューティングや独自ライブラリの使い方、ドキュメントの書き方も勉強会には含まれていたことぐらいです。

それぐらい実践的で、直ぐにでも役に立つ内容ばかりです。




日本で広く使われている CentOS を対象としている点も実用的で好感が持てます。

いくら Ubuntu の方がハードウェア認識率が高くても、Gentoo の方がシンプルで使いやすくても、研究組織や企業で最も使われていることを考えると、日本語環境から自由にならない限りは CentOS との付き合いは避けては通れません。

これだけ実用的な本書ですが、 (残念ながら) もちろん一冊で必要なことが全て学べる訳ではありません。

本書中にもある Vi(m) エディタの使い方やシェルスクリプトの書き方、頻繁に使うコマンドラインツール、 バージョン管理システム (Git) の使い方などは本書の断片的な情報に留まらず、別の書籍も用いて網羅的に学んだほうが良いです。

また、そのタイトルに反してカーネルやデバイスドライバについて書かれた書籍ではないので、Linux や OS について詳しく学ぼうとする用途には適していません。

実のところ、私はハードウェアに近い低レイヤの理解を深めたくて本書を手に取ったので、その点ではあまり役に立たなかったとも言えるのですが、勘違いという一面もあるので仕方ありません。

いまやネットワークサーバだけでなく、Android 端末やドローンや組み込みシステムに普遍的に用いられている Linux への理解を深めることは無駄にはなりません。

そのための第一歩として本書は間違いのない教科書です。

ただし、Linux を実際に使うのであれば、他にも読んでおくべき本はたくさんあるので、本書だけに留まらず、実現したい目的に応じて周辺知識も同時に学んでいくことが重要です。

以下は読んでおくべき本の一例


Advanced Programming in the UNIX Environment (3rd Edition) (Addison-Wesley Professional Computing Series)


Computer Networks: Pearson New International Edition


An Introduction to Database Systems

表計算ソフトを常用する人に勧めたい『10年戦えるデータ分析入門』

10年戦えるデータ分析入門』という本を読みました。

この書籍の趣旨は、データベース操作言語 SQL を使って分析を行いビジネスに役立てようというもの。

なぜSQLを使うのか (どうして Excel や R や C++ ではいけないのか) という根本的な疑問に対して、著者は第1章の冒頭から SQL を使うことが適当である事の明確な根拠を提示します。

第2章でリレーショナルデータベースについての導入が行われ、以後のページの大半を占める第1部は日常業務で便利なデータの探索や集計の具体的な実行方法の解説に費やされます。

普段は意図して触れていませんが私もソフトウェア開発に携わる者なので、これだけであれば本書に内容的な新規性を見出す事はなかったでしょう。

本書が特徴的であるのは、検索したデータを表示する際に「limit節で表示行数を絞る (48p) 」などの具体的なアドバイスや HAVING や GROUP BY などの「select文の節の実行順序 (77p) 」など、自明であると思われている (事が多い) が故に省略されがちな項目についても丁寧に記述されている点です。

先述の SQL (リレーショナルデータベース) を使う事が適当である理由とも合わせて、データ分析よりもむしろデータベースに初めて触れる人に最初に読んでもらいたい本であると思われた事が、本書を購入した実の理由です。

本書では「正規化」と「テーブル作成」という言葉こそ登場しますが、具体的な正規形や論理設計の詳細には触れられていません。まして通読中に物理設計やパフォーマンスを意識する事は基本的にはありません。

こうした割り切った構成で、集計表の作成など日常業務で頻繁に使われるデータの参照方法に特化している点に好感が持てます。

(知らずのうちであったとしても) データベースに触れない日はないほどデータベースが普及している今日では、そこに蓄えられたデータを参照して活用できるようになる事が第一で、新規にデータベースを設計する為の技術は必要になってから学べば良いからです。

そうした意味で第1部を読み終えた後に更にテーマを深化させた内容としてお勧めしたいのが、『達人に学ぶ SQL徹底指南書』です。

CASE式を使った条件分岐から始まり、行列変換、行間比較、集合演算など、SQL だけでここまで表現 (分析) できるのかと感嘆し、長すぎる 学生生活の中で何度も読み直したものですが、データ分析のためのSQL技術書という点で本書の延長上に位置する内容となっています。




一方、SQLを用いた分析システム構築について触れた第2部については、一転して概念の導入的な記述が増えます。一つ一つのテーマについて具体的に触れていると、それだけで分厚い本が何冊も書ける容量と高度な専門性が要求される内容となってしまい本書の趣旨が曖昧になるので、導入に留めて詳細は他の書籍に譲るという割り切りなのかもしれません。

第2部の内容のみでシステム設計ができる訳ではありませんが、重要な項目は一通り押さえられています。対して本書を通して触れられていない項目には、内部スキーマ、サイジング等のパフォーマンスに関連するもの、相関等の統計的な分析手法、分析結果の可視化と評価等があります。

そうした点を加味しても、本書に対する私の印象は通読するだけの価値があったというものでした。表計算ソフトを日頃から常用しており、入力する行数が増えてくるとパソコンの反応が鈍くなって埒が明かないと思う人にとっては、SQLの利用により劇的に作業効率が上昇する事も十分に考えられる為、本書を上梓して下さった著者に賞賛を送りたい気分でさえあります。

本書の参考文献には挙げられていませんが、経営視点からのデータ分析について私は個人的に『14のフレームワークで考えるデータ分析の教科書』をお勧めします。どのようなデータを収集し、何の目的に使用するかを具体的に記述している点が特徴です。

統計学については『統計学入門』と言いたいところですが、読み手を選ぶので『完全独習 統計学入門』あたりをまず一読される事を提案いたします。

機械学習については ベイズの 定番 Pattern Recognition and Machine Learning (Information Science and Statistics) も良いのですが、昨今の日本語書籍の充実ぶりも目覚ましいものがあります。

中でも個人的にお勧めなのが『言語処理のための機械学習入門 』です。

必要な数学的知識 (最適化・確率・情報量) から始まり、深層学習の登場以前の種々の手法について丁寧に解説されています。

OpenStreetMapからGarmin GPS用の地図ファイルを作成する

MAXXIS太魯閣国際ヒルクライム2016に参加する際、Garmin GPS デバイス用の台湾地図が欲しかったので、Open Street Mapから自分で作成する事にしました。

太魯閣や花蓮について一般地図よりも詳細な地図が欲しいところですし、今後、出張でイスラエルやメキシコに行く事があった際などに自分で何とかできるようになりたいので、この機会に覚えてしまいます。

使用するのは mkgmap と splitter というJavaのソフトウェア(というかライブラリ)です。

どちらも mkgmap 本家からjarファイル形式でダウンロードできます。

リンク先の本家ではパソコン上で作成した地図をデータ転送用のソフトを用いて GPS 端末に転送する方法を説明していますが、私はそんな面倒なことはしたくないので gmapbmap.img やら gmapsupp.img やらのファイルを作成して GPS 端末の Garmin ディレクトリ (フォルダ) 直下に置くことを考えます。

GarminのGPSデバイスは、このディレクトリに含まれている img という形式のファイルを自動的に読み込んで地図として表示します。

したがって、デバイス購入時から含まれている img ファイルを削除して、ご自身で作成された img ファイルで上書きしてしまえば、その地図情報が端末に表示されるようになります。

例えばこんな具合に。


そこで OpenStreetMap というフリーの地図データを素材に、この img ファイルを自作してしまおうという訳です。

そこでドキュメントを読み込んでいくと、どうやらOpenStreetMapの地図ファイル作成には *.pbf という形式のファイルが必要となる事が分かりました。

このPBF形式のファイルの入手は OpenStreetMapによると、複数あるリンク先のサイトの中からダウンロードできるとの事です。

配布元のサイトを幾つか抜粋すると、このような具合。



私が今回欲しいのは台湾の道路地図と花蓮の詳細地図なので、Geofabrikから Sub Region: Taiwan と Metro Extracts から Hualien のタイル (PBFファイル) をダウンロードします。

ファイルを確認すると、ちゃんとpbf形式になっていますね。




Wikiを見ていくと、mkgmap を使う前にpbfファイルを分割する必要がありそうなので、splitterを使ってダウンロードしたファイルを分割します。

これは mkgmap が対応できるデータの容量に限りがあるためで、一部の都市だけのデータを用いる場合など、対象のデータサイズが小さい場合には必要ないこともあります。

しかし、扱う範囲が北海道や九州、台湾ぐらいの大きさになる場合には、予め分割しておいたほうが無難です。

分割する際には Java の VM に 2GB 程度のメモリを割り当てる必要がありますので、実行前にお使いのパソコンの状態をご確認ください (と言っても最近の機種であれば、4GB以上のRAMが搭載されていることが普通なので、あまり問題になることはないかと思います)。

$ java -Xmx2048M -jar ~/lib/splitter-r437/splitter.jar --description="OSM TAIWAN" --output-dir=tmp/ ~Downloads/taiwan-latest.osm.pbf

ここで実行時にエラーを吐き出した場合、おそらくJavaのバージョンがあっていないので、シムリンクを張り替える必要があります。

$ export JAVA_HOME='/usr/libexec/java_home -v 1.8'

実行すると新たなファイルが幾つか生成されますが、このうち使うのは 632なんとか.osm.pbf というファイルです。

$ java -Xmx2048M -jar ~/lib/mkgmap-r3676/mkgmap.jar --route --add-pois-to-areas --bounds=bounds --index --gmapsupp *.osm.pbf

他のファイルを使うと様々な設定ができそうなのですが、取り敢えずはファイルを作成する事を優先するので、今回は割愛します。

何に使うのか、そのうち調べておかないとな(・。・;

mkgmapの実行が終わると、gmapsupp.img というファイルができますので、これをGarmin GPSデバイスの指定ディレクトリ(/Garmin)に置くとデバイスで地図を読み込めるようになります。

一緒に作成された 6324なんとか.img というファイルを試しにデバイスの Garmin ディレクトリに置いてみると、現在の gmapsupp.img の内容(日本地図)に加えて、台湾の地図も表示できる謎デバイスに
仕上がりました。

これってストレージ容量が許す限り、いくらでも重複して入れても良いのですかね。

Garminデバイス側の設定で、どの地図を表示するのか選ぶ事ができるのですが、たくさん有りすぎて、どれがどこの地図だか分からなくなりました。PC上で調べれば分かるので、転送する前に把握しておけば良いのですけどね。

これで一応は、台湾行きの準備が整いました。