普段使いの PC における Linux の使い心地 — そして MacBook と Chromebook

一昔前に Windows から Ubuntu への移行が盛んに唱えられた時期がありました。調べてみると5年前 (2014年) あたりにも Windows XP の延長サポート終了に伴って、そんな意見が盛り上がっていたみたいです。

当時から「正気か?!」と思い続けていますが、定期的に聞かれて消えることのない意見です。 Linux Kernel を用いた OS としては桁違いに普及した Android を除いても、デスクトップ Linux は徐々に PC オペレーティングシステム (OS)の中でのシェアを伸ばしているようです。

と言っても、2018年現在でもデスクトップ OS 全体の約 2% のシェアしかありませんけれども、それでも随分と増えたものです (PCそのものの利用が縮小している中で減少幅が少ないだけかもしれません)。




デスクトップ Linux そのものは大きく変化していないなかで、これだけシェアが増えているのは驚きですね。

なんと言っても Apple iTunes や Adobe Photoshop/Photoshop Lightroom に Microsoft Office などを筆頭に人気の商用ソフトウェアは、デスクトップ Linux では使えない事が普通です。

AMD の CPU や NVIDIA の GPU ドライバと組み合わせると、相性が良くないので頻繁にフリーズします。

いつの時代の計算機なんだよという感じですね。

それでも Apple の Common Unix Printing System (CUPS) のお陰で、プリンタ関係のドライバも充実して、印刷 (とくに日本語などのマルチバイト文字の印刷) に泣かされることは少なくなりました。

スマートフォンやタブレットなどのモバイル端末から印刷を行うのと同じように、無線LAN対応のプリンタも Linux PC から当たり前のように使えるようになったのは一昔前では考えられなかった環境の変化です。

運良くバイナリパッケージが配布されていても、それを自分のシステム環境に合わせて設定し直してインストールするまでに一苦労。エラーを吐いても何処にも解決法が記載されていないことも珍しくはありませんでした。

さらに昔は日本語の表示や入力すら… と考えると、まさに隔世の感があります。

もう一つの大きな環境の変化は Chromebook の登場です。


ASUS Chromebook Flip C101PA シルバー 10.1型ノートPC OP1 Hexa-core/4GB/eMMC16GB/C101PA-OP1

Chromebook とは ChromeOS を搭載したノートPCです。ChromeOS は Google が Linux Kernel を用いて製作した OS でして、デスクトップ Linux 向けに開発された Gimp や Inkscape といったソフトウェアを動かすこともできます。

つまり Chromebook とは Linux Kernel 向けにPCベンダーが提供するノートPC筐体 (しかも継続販売されるほど普及している) と見なすことができます。

これがどれだけ凄いことかを即座に理解できるのは Linux ユーザーです。

長い間、デスクトップ Linux はユーザーが勝手にインストールする OS であることが一般的であり、ハードウェアメーカーが動作を保証しているのは一部の市販モデルに留まるなど例外的な状況でした。

私もネットブックに当時の流行だった Arch Linux をインストールして CPU の高熱に苦しめられたり、スピーカーの音割れを経験したり、プロジェクターを認識せずに発表で使えなかったりと Linux のダメなところを飽きるぐらい身を以て経験しました。

現在使用しているワークステーションでもフリーズ対策として、安定するまで /etc/default/grub を何箇所 (どうやら Global C-state Control と I/O MMU が鬼門らしく、ここを disable にするとフリーズ頻度が大きく減りますが完全には直りません) も書き換えています (仮想環境で使用しないのは GPU に計算させたい場合があるからです)。

しかし、これでもハードウェアを認識しているだけ、まだ状況としては良い方なのです。

動作も安定していて滅多にフリーズなどせず、人気のソフトウェアも使用できて、一定期間はサポートも期待できる Windows を消去して乗り換えるなど、安易に他人に薦められるものではありません。

とくにラップトップでは Windows OS 用に最適化されたハードウェアを Linux で動かすとバッテリーの消費量が大きくなる可能性があるなど明確なリスクがあります。最近の薄型軽量のノートPCでは仮想環境にインストールしたり、デュアルブートするほど SSD 容量に余裕がないことも多く、そもそも Linux を使おうという気分にすらなりません。

ところが最初から「Linux」向けに開発されている Chromebook は話が別です。

ChromeOS 上で Linux ソフトウェアを利用しても良いですし、外出先からサーバーに SSH 接続するためのコンソールとしても利用できます。Vim も Git も GCC も Java VM もローカルで動きますし、Chrome なんて名前が付いているぐらいなので、もちろん V8 の node.js も使えます。

今まで UNIX/UNIX ライク OS 搭載のノートPCで使いやすいのは MacBook ぐらいしか選択肢がなかったのですが、ChromeOS にこれだけできることがあるのならば、もうモバイルは Chromebook で良いではないかという気分にもなってきます。

MacBook は iTunes を始めとする人気ソフトウェアの大多数を利用することができ、(コネクタを使えばという条件付きで) プリンタやプロジェクタで悩まされることもなく、高価で高機能なだけあって性能は良いです。由緒正しい UNIX でもあります。

そこまでの性能が必要ない場合に、安定して使える Linux ノートPCとして複数のメーカーから Chromebook が (必要最低限の構成からハイエンドの Pixelbook まで) 用意されている意義は大きいです。

無責任にデスクトップ Linux への乗り換えを勧めるのはどうかと思いますけど、Chromebook は「普通の人」が「普通に使える」PC です。ChromeOS をデスクトップ Linux と見なすと、これがどれだけ画期的なことかご理解いただけるかと思います。

クラウドサービスが一般的になり、ドキュメントやスプレッドシートの作成、画像編集、メール管理などウェブブラウザで可能なことが多くある現在では、動画編集なり、ゲームなり、機械学習なりの特別な意図がない限り、ローカルマシンは (とくにノートPCは) それほど高性能である必要性はありません。

出張や旅行などで持ち歩くには MacBook は CPU などが高性能すぎて稼働時間が短いですし、高価すぎて盗難や故障が痛いです。一方で MacBook は UNIX 環境でありながら、デスクトップ Linux の弱点をほぼ完全に克服しており、これ1台でおおよそ何でもできます。

Chromebook は商用ソフトウェアの少なさと外部ハードウェア対応の弱さという Linux 由来の弱点をそのまま残しているものの、Google のサポートと安定した動作環境に長い稼働時間という利点があります。

実用的な Linux 搭載モバイルPCとして極めて有用だと個人的に思います。

という訳でつづき: 出張や旅行で大活躍する Chromebook

関連: これから Linux を始めるなら

Ryze Tech Tello とドローンの学習

遅まきながら技術の進展に対応するために トイドローン Ryze Tello Powered by DJI を購入しました。

ところでトイドローンとは何でしょうか。

Toy Drones vs Enthusiast Drones: What’s the Difference? という記事を見てみると、カメラの性能に重きを置いていない、もしくはカメラそのものを搭載していない、極めて安価な手のひらサイズのドローンの総称という理解で良いのでしょうか。

いきなり面倒だと思われたかもしれません。

ドローンは面倒なもので、購入してから飛ばす前に覚えなければならない事柄がたくさんあります。主に航空法と電波法と条例† に関連するドローンを飛ばしてはいけない場所と飛ばしてはいけない条件がその最たるものです。

店舗に足を運べば、技能資格や研修について資料が幾つも並んでいて、敷居がとても高そうに見えます。

そんな面倒で敷居が高そうなドローンの中でも、手軽に始められるエントリーモデルの定番と販売員が薦める Ryze Tech Tello を購入しました。


【国内正規品】 Ryze トイドローン Tello Powered by DJI

トイドローンだから… ではなくて、本体質量が 200g 未満なので航空法の「無人航空機」には該当せずに「模型航空機」と扱われるそうです。

無人航空機になると、人口集中地区の上空や 150m 以上の高さに飛行させる際に予め許可を得る必要があるそうですが、人口集中地区どころか送電線のような人工物がある山中でさえ飛行させるのを躊躇いますし、無線LANで接続するドローンなんて遠距離通信用のアンテナを用意しなければ、条件が良くて 100m ぐらいが通信の限界じゃないのかと考えながら笑顔で頷いていました。

もともと Parrot ANAFI PF728005 の購入を考えていたものとしては、メリットは小型軽量かつ安価 (練習中に安心して墜落させられる) で人気がある (それだけ開発者が多いことが期待できる) ことぐらいです。はい、凄く大きなメリットですね。




実際にコミュニティではネットワークやストリーミングのプロトコルが解析されていて、非公式のライブラリもなかなか充実しています。

加えて公式のダウンロードページから入手できる Python スクリプト (Tello3.py – SDK 1.3.0 バージョン 1/1/2018) だけでも、コマンドライン操作でドローンを離陸させて、移動させて、温度や飛行時間のデータを取るなんてことはプログラミング知識がなくてもできます。

TELLO DOWNLOADS – Ryze Tech
https://www.ryzerobotics.com/tello/downloads

このスクリプトを自身で書き換えて、ビデオの出力を OpenCV や Keras (Tensorflow, CNTK, Theano) に渡して処理みたいなことをするには、さすがに知識と経験が必要になります。個人的には大学の授業の課題で Microsoft Kinect を使ってロボットを作ったことを思い出しました。

適当な Python スクリプトを書いて、取り敢えず動かしてみるのは簡単ですが、きちんと離陸から着陸までの過程を考えてから実機テストを行わないと、スクリプト実行後に操縦不能になって墜落させるしか無くなるのでお気をつけください (私は手で掴もうとして天井まで上昇させた挙句、墜落させました)。

Linux から派生してドローンに興味を持ち DronecodeOpenDroneMap が面白そうで、3D Robotics や Parrot を触ってみたくなったところに、その前段階として導入したトイドローンで意外と遊べてしまったのは存外の幸運でした。

プログラマの玩具としては優秀な Tello ですが、純粋なドローンとしてはやや期待外れに感じました。飛距離とカメラ性能が価格相応なので、いつもと異なる視点からの撮影を求めるのであれば DJI Mavic Air のような本格的なドローンを最初から買ってしまった方が満足度が高いかもしれません。

もちろん、実売価格1万円のドローンやタブレット端末に付属しているカメラとしては、とても良い性能です。バッテリーやCPUなども含めて考えると、この性能と品質をこの価格で提供できるのは凄いことです。それでも動画サイトに投稿されている空撮動画とは、どうしても違いがあります。

本当は景観画像を掲載したかったのですが、練習中に借りていた私有地 (休閑期の畑) の持ち主の許可が得られなかったので、無加工の室内撮影画像で代用します。

自宅を含めた首都圏では人が多過ぎて住居や道路すらまともに整備されていない状況なので、練習どころか撮影テストすら論外です。という訳で、ドローンを飛ばすだけ飛ばして、ついでに以前から興味があったあのソーダを試飲して戻ってきました 😛

話を Tello に戻しますと、物足りないのは飛距離とカメラ性能ぐらいで飛行の安定性と離着陸の安心感、操作の容易さに関しては流石です。市販価格1万円のトイドローンとは思えないほど、安定して飛び続けますし、高度を下げすぎると自動で着陸します。

またセンサーの影響なのか、飛行中に本体の真下に障害物に近づけると無風状態でも勝手に移動して動いていくことがありますので、慣れないと予想外の動きをして戸惑います。私は上記の私有地での屋外飛行までに室内で30回ほどバッテリーが無くなるまで飛行訓練をして 2 回も墜落させました。

時間が足りなかったこともあり、屋外ではそれほど飛ばしていないのですが、風速 1.7m/s でも位置を変えている最中に吹かれると風に流される印象がありました。

自分で飛ばしてみると他の人の技能が少しだけ分かるようになり、やっぱり他の人は上手なのだなと改めて思うものですが、他の人の操縦を見ていても自分で飛ばした時の感動や興奮は分かりません。

ドローンは面倒なことが多いのですが、飛ばしてみると単純に楽しいです。これだけは Tello を購入したことで初めて理解できました。

そして、しばらく使い続けた感想を率直に申せば、トイドローンのカメラ機能に満足できずに空撮はしなくなるので、練習用途ならば最初からカメラを捨てている Parrot Minidorone MAMBO FLY(ミニドローンマンボフライ) PF727078 でも良かったのではないかという事に尽きます (飛行性能や操作性には何の文句もありません)。

価格帯は Tello とほぼ同じで、別売のカメラを搭載できる仕様になっているのですが、こちらの方がしっかりとした SDK が用意されており、開発者目線で見ると面白そうです。


† 小型無人機等飛行禁止法という法令もありますが、こちらは常識的に考えてドローンを飛ばしてはいけない場所を具体的に列挙しているものなので、一読すればその内容と意図は明白です。

安全なウェブアプリケーションの作成?運用?閲覧?

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践』 という本を読みました。

私は(WEB上のマニュアルやドキュメントであればともかく)脆弱性を専門に扱った書籍に触れるのは初めて、フロントエンドも専門外なので、知らないことが幾つも掲載されていて勉強になりました。

脆弱性の実物に触れることを重視していると筆者が前文に書かれているように、主にWEBブラウザ操作に関連する脆弱性とそれに関連した攻撃手法が具体的に解説されており、配布されている実習環境を用いて脆弱性を体験できる構成になっています。

その内容もSQLインジェクション、OSコマンドインジェクション、スピアフィッシングと言ったよく知られたものから文字コードの取り扱いやファイルアップロードに関連する脆弱性まで詳しく説明されています。

本書のタイトルこそ『安全なWebアプリケーションの作り方』ですが、作る側よりもむしろ(ブログソフトウェアやアップローダを使用したサイトの管理者を含めた)使う側に向けたメッセージなのではないかと思わせる項目も少なからずあります。

少なくともクリックジャギング(詳しくは本書を読んでください)などの一部の項目に関しては、意図して実装するのは攻撃者だけなのではないかという感想を抱きます。これだけに関して言えば、脆弱性を把握していなければならないのは閲覧者です。

作成者と利用者(プログラムを利用したウェブサイト・サービスの管理者を含む)のどちらに向けて書かれた内容なのだろうという疑問は読中は常につきまといます。




セキュリティ意識の高くない私でも知っているようなことは多くの人がおそらく理解しています。

そんな私でも(過去に見たことがないから)きっと自分でも書かないようなコードが危険で非推奨となっている例などをみると、ウェブアプリケーションの利用者側に向けて書かれた内容なのだろうかという思いを改めて強くします。

もちろん作成者だけでなく、それを利用する管理者や閲覧者が脆弱性を把握して対策することが重要なのは言うまでもないことです。しかし、誰がどこまで把握しておくべきなのかを考えると線引きは簡単ではありません。

プログラミング言語を専門にしていないウェブデザイナが JavaScript ライブラリを多用したり、コンテンツ管理システムを使ってウェブサイトを自作したりすることは特に珍しいことではありません。

ところが最新の情報セキュリティを継続的に学び続けているのは、誠に失礼ながら専門家を除けば、知っておかなければならない立場にある一部の開発者や管理者に限られる印象を受けます。

本書の内容も、ウェブの利用者なら誰も知っていて損はないものですが、具体的な対策となるとソースコードを見た瞬間に、サーバやデータベースやウェブブラウザで何が起こるかを把握できないとどうしようもありません。

取り上げられている事例だけでも、呆れるほど多彩な手段で執拗にセッションやクッキーが狙われていることが分かったり、インジェクション攻撃でどれだけ簡単に情報を盗んだり、システムを破壊したりすることができるのかを実例を通して理解でき、実習環境上で簡単に再現できる(責任者の説得にも使える)という点では誰にとっても有益ですが、そこから更に進んで対策を行う段階ではウェブブラウザやOSだけでなくプログラミング言語や文字コード、さらには通信の仕組み等についても正確な理解が必要とされるのが難しいところです。

実習環境では主に PHP が用いられているものの、正規表現など基本的な知識を有していれば、PHP を知らなくても問題なく読めます。

自分で PHP を書くことはありませんし、PHP や Perl の CGI を扱うぐらいならば、よく使われている Java や Ruby で良いのに(個人的にはサーバサイド JavaScript/TypeScript 推し)ぐらいには思っていますが、そんな私でも言語の問題で躓くことはありませんでした。

ただし、HTMLメソッドやブラウザやサーバの機能についての理解は必要ですし、本書に詳しい説明はありませんので全く知識のない方は、先にウェブプログラミングを対象とした書籍を何冊か読まれたほうが良いかと思われます。対象の都合上、どうしてもソースコードやログを読み込んでいかないと本書の内容を完全には理解できません。

このように(解説は平易でわかりやすいのですが)敷居はそれなりに高いので誰にでも薦められるわけではないものの、アプリケーションを作る開発者だけでなく利用者にとっても有益な良書という感想を抱きました。

だからこそ、誰に向けて書かれたセキュリティの入門書なのだろうという疑問が生じるのかもしれません。