ペペロン頭脳

ソフトウェアエンジニアのメモ的なアレ。

「Windows 9」が欠番である本当の理由?

先日発表された次期Windowsは、9ではなく10とのこと。
上の公式のアナウンスでは9をスキップした理由がふわっとしていてよくわからないが・・
プログラマーの間でまことしやかに囁かれている説があるので、非エンジニア向けの説明をしてみよう。

Windows 9x系を考慮?

本日はてブで上がってきたのがこれ。

プログラマー以外には何のことやらわからないと思うので、例を挙げて説明してみるです。

時は00年代半ば。Windows XP全盛時代です。
あなたはWindowsで動く何かしらのプログラムの開発を依頼されました。
このプログラムは古いWindowsはサポート対象外とする、とのことです。
そこで、起動した時にOSのバージョンを調べて、

上記いずれかの場合は警告メッセージを出してプログラムを終了することにします。あなたはその部分の処理を、下記のように組んでみました。

  1. 起動したら、自身が動作しているOSの名称文字列を取得する
  2. その文字列が"Windows 9"から始まっているか調べる。
    1. "Windows 9~"であればWindows 95/98のいずれかである。警告メッセージを出してプログラムを終了する。
  3. Windows 9x系でなければ処理を続行する

よしよし。"Windows 9なんとか"なのは95と98だけだ。これでバッチリ必要十分なプログラムが書けたぞ。

・・・さて、時は過ぎて2014年になりました。
新OSの名称が"Windows 9"とか"Windows 9.1"であった場合、
新OS上でこのプログラムを実行するとどうなるでしょう??

そうですね。大惨事ですね。

クレームの電話が鳴り止みませんね。
なぜなら"Windows 9"で動かした場合、自身がWindows 95や98上で実行されていると誤判定して終了してしまうからです。
上の例ではとりあえず終了しちゃうという動作をしますが、もしOSのバージョンによって続きの処理を分岐する、という作りになっていたら?
誤判定してそのまま動き続けた場合、予期しない動作が起こるのでは・・・?

こういった判定をしているプログラムが世の中にびっくりするほどたくさんあるよ、というのが上のリンク先なのです。
正直雑な判定方法ではあるのですが、よりシンプルに書こうとして上記の形に落ち着いたということなのでしょう。
XPやVistaの時代を思えば、今のようなナンバリング体系になると想像できなかったとしても仕方ないか・・という気もします(甘い?)。

さて。
サポートを継続しているソフトウェアであれば「ごめんねー★テヘペロ」でちょろっと修正すればいいかもしれません。
が、とっくの昔に開発終了しているプロダクトだったら?
しかもそれが現在も幅広く使われ、業務システムの根幹に深く関わっていたら?
誤動作によって発生する損失は?
調査・改修するための費用は?

Microsoftは影響が広範囲に及ぶことを懸念し、新OSを「Windows 10」と名づけたのではないでしょうか?

っつー憶測ながらもかなりこわい話でした。

2014/10/03 追記

出典付きの詳しいエントリを書いている方がいらっしゃるので紹介。

読書感想文は、とてもおもしろかったです。


嘘です。嫌で仕方ありませんでした。

上記のエントリを読んで色々思い出してしまったので。
読書メモ、いいなぁ。これ読書感想文以外にも使えるよね。こういう進め方があるんだって小学生の時に知ってたらもう少し作文好きになれたかも・・

僕は読書が嫌いでもなかったのに語彙力が貧弱で、「おもしろかったです」以上にどうやっても言語化された思念を引っ張り出せない子供だった。
そして何より親を含む大人に対して感想やら心情やらをオープンにするのが恥ずかしくて耐えられないボーイだった。
そんな子供に対して「もっと自由に書いてみな。感想がないわけないだろ?」ってのはこの上ない絶望を与えるに等しい行為でしたね。

とにかく苦痛で仕方がない催し物でしたよ。

毎回あらすじと数行感想でごまかすだけの無意味なプロダクトが生まれていた。両親から「こんなのは感想文じゃない!」と怒鳴られても何を直したらいいのかわからず、相手が怒り疲れるのを待つだけの苦行。
ああセミ取りに逃げたい。

感想文じゃない作文は幾分気持ちが楽だった。
夏休み中の旅行なんかで起こったことを時系列で並べて、最後に「とても楽しかったです。」「また行きたいです。」で締めればいいだけだからだ。そんな工程表みたいな文は書くだけ無駄なのだが、当時はそのテンプレ以外に文章の型を知らなかったのだ。マジで。高学年になっても。
これまた両親に「何が面白かったのか、何を感じたのかを書けよ!(どんっ!)」と指摘されるが、書けない。そしていろいろアドバイスを受けるも原稿用紙に反映できない。そもそも自分が書いたクソ文が白日の下に晒されていて恥ずかしいことこの上ない。
ああザリガニ捕まえに行きたい。


たいていのことはある程度時間をかければ上達するもんだと思っていたのに、作文だけはどうアプローチすればいいのかわからなかった。市で最優秀賞とった作品読んで衝撃を受けるも、「すごい。俺のと全然違う・・」以上の感想なし。何が違うのかうまく言語化出来ない。小さな挫折。
でも夏が終われば忘れる。友達とミニ四駆を作ってバラして、ガリガリ君食って、BB弾を収集する。好きな子に嫌がらせをする。やがて思春期に、少年から、大人に変わる。

そんな感じで作文スキルについてはなんとなく、なんとなくで30歳近くまで生きてきた。
未だに書くの遅いし(研修アンケートとか最後まで残って書いてる)、長文まとめるのも苦手だし、なによりこのようなふざけた駄文に2時間以上掛けている。それでもなんだかんだで社会生活は送れている・・・

自分に子供ができたら

ひとまずは上の読書メモなりを活用して、順番に組み立てていこうぜ!ということになるのかな。学校側で何か教えてくれてるならそのやり方を尊重するが。でもシャイボーイ/ガールは宿題に両親が介入してくるのも苦痛で、ずっと見られてると硬直化してしまうから深追いはしないようにしたい。
それで様子見てみて、「作文わからん」「作文嫌い」ってなってもまあいいか、ってのもありなのではと思う。その辺の能力って思春期あたりに急に伸びたりすることあるじゃん。方法論は論理的思考力がしっかりしてきてからでもいいのではないか。
ということで自分語りに体力を奪われて若干めんどくさくなってきたので、ゆるゆる楽観論で締めに致します。

ハウツーみたいなのは安易に与えたくないって思っちゃうけど、自信喪失よりはいいのかなぁ。

なにはともあれ子供ほしいです。

WindowsPCセットアップメモ

再セットアップ用のメモ書き

この前会社のPCが起動しなくなってしまい、結果としてOSインストール以降のセットアップをやり直す羽目になってしまった。
(先日騒ぎになったWindows Updateのバグとは関係ない)
半日くらいかけて必要なソフトを入れ直していたんだが、いざやってみるとぱっと思い出せないものもあったりしたのでこの際に絞って整理してメモ化。

ジュタクでキャクサキジョーチューを続けるのであれば、今後もドザーであり続ける以外の選択肢はないのだから。

Google先生
Editor/Viewer
Git

Github上の個人ツールだったり、ローカルのリポジトリで育てているコードの管理に細々とGitのお世話になっている。
ちなみに職場はVSS一択という環境。

UNIX環境
  • Cygwin - Cygwin前提で組まれたバッチがあるので。
アーカイバ
ユーティリティ系
  • Orchis - シンプルなポップアップ&階層型ランチャー
  • QTTabBar - エクスプローラー拡張。タブ化をはじめ痒いところに手が届く機能盛りだくさん
  • MacType - Windowsでもきれいなフォントレンダリングを望む人向け。中華製。
  • RapidEnvironmentEditor - 環境変数の編集に。これがOS標準搭載されるべき。
  • Unlocker - 「別のプログラムがこのフォルダーまたはファイルを開いてい」てもロック解除できるます。32bitと64bitで別バイナリなので注意。
  • Macrium Reflect Free - ディスクをまるごと圧縮イメージ化できるバックアップツール。対象パーティション選択可。イメージファイルのマウントも可。しかも高速。リストアも簡単かつ完全復元だし無料でここまで出来るので重宝してる。日単位でスケジュールバックアップしておけば、ディスクに物理障害が発生しても新品ディスクにイメージ書き戻すだけで復旧完了。
  • SpaceSniffer - ディスク内のディレクトリとサイズをグラフィカルに表示してくれる。無駄に容量食ってるフォルダを探すときなどに。
  • Everything - 超高速ファイル検索エンジン。リアルタイムにレスポンスが返る。正規表現使用可。
  • AkabeiMonitor - mono bar 2 っていうスキンがシンプルで好きなんだけどもう公開されてない。
  • StickyPaper - 付箋。なんだかんだデスクトップにあると便利。
  • マウスふるふる - 電源オプションの変更権限がない場合、バッチ処理中にスタンバイ移行させないための苦肉の策。

ほか、定番のVisual StudioEclipseJDKAndroid SDK/NDKなど。