26.2K Views
November 14, 22
スライド概要
Microsoft Ignite 2022の資料です。
https://ignite.microsoft.com/ja-JP/sessions/a797ea25-fb09-40d5-9383-498f6365eb7c
CrystalDiskMark&CrystalDiskInfo開発裏話 〜個人開発の限界突破!世界中のユーザーに愛されるソフトウェアを目指して〜 宮崎 典行
Agenda 自己紹介 はじめに 致命的な不具合 オープンソースの奇跡 モチベーションを維持・向上するための秘訣 まとめ
自己紹介 名前:宮崎 典行 / hiyohiyo 趣味:ソフトウェア開発(24年) 受賞:Microsoft MVP for Developer Technologies (2014年1月~) Web:https://crystalmark.info/ Microsoft Global Summit 2019
【代表作】以前開発していたソフトウェア CrystalMark 2004 総合ベンチマークソフト フリーウェア CrystalCPUID CPU情報ソフト 修正BSDライセンス
【代表作】現在開発しているソフトウェア CrystalDiskMark ストレージベンチマークソフト MITライセンス 2,500万DL CrystalDiskInfo ストレージ情報ソフト MITライセンス 5,000万DL
個人開発者としての24年 98 99 00 大学 01 02 03 大学院 修士 04 05 06 07 埼玉勤務 08 09 10 11 12 13 札幌勤務 14 15 16 17 18 19 20 東京勤務 CrystalMark Microsoft MVP CrystalCPUID CrystalDiskMark CrystalDiskInfo 21 22
Agenda 自己紹介 はじめに 致命的な不具合 オープンソースの奇跡 モチベーションを維持・向上するための秘訣 まとめ
はじめに 世界中のユーザーに愛されるソフトウェアを目指すことで 私の人生は豊かで鮮やか になりました。 【本セッションの主な内容】 ・致命的な不具合が発生したときの乗り越え方 ・ユーザーから厳しいご意見をいただいた時の受け止め方 ・コミュニティの協力を仰ぎながら技術的な壁を突破する方法 ・モチベーションを保ち続けるための秘訣
ソフトウェア開発をはじめた きっかけ 高校時代に、友人がパソコン通信で見つけてきたWindSockを実行した瞬間に 「いつかベンチマークソフトを作る!」と決意しました! WindSock by Chris Hewitt, Copyright (c) 1992, 1993 Technical Pixies
CrystalMark 2004(総合ベンチマークソフト) 世界一の総合ベンチマークソフトを目指して開発!!
CrystalMark 2004(総合ベンチマークソフト) 日本では広くご利用いただいたものの・・・ グローバル知名度は ほぼ0
CrystalCPUID(CPU情報ソフト) 世界一のCPU情報ソフトを目指して開発!! 差別化要素:独自のクロック周波数制御機能
CrystalCPUID(CPU情報ソフト) ほんのわずかな期間だけ世界中でご利用いただけたものの・・・ 新CPUに対応できず フェードアウト
個人開発者としての24年 98 99 00 大学 01 02 03 大学院 修士 04 05 06 07 08 09 10 埼玉勤務 11 12 13 札幌勤務 14 15 16 17 18 19 20 東京勤務 CrystalMark Microsoft MVP CrystalCPUID 開発断念 CrystalDiskMark CrystalDiskInfo 21 22
Agenda 自己紹介 はじめに 致命的な不具合 オープンソースの奇跡 モチベーションを維持・向上するための秘訣 まとめ
CrystalDiskMark(ストレージベンチマークソフト) ストレージに特化すればイケるのでは? 約2ヵ月かけてシンプルなストレージベンチマークソフトを開発 翌々営業日に 窓の杜に掲載 http://www.forest.impress.co.jp/article/2007/04/03/crystaldiskmark.html
バグ・ストーリーは突然に ある日、掲示板にこんな書き込みが・・・ 原文ママ CrystalDiskMark1.0のDiskBench.cppの372行目で、4KBのランダム アクセスのための領域の個数を split = 64 * (DiskTestSize / 1024 / 1024); で決めていると理解したのですが、ここは64ではなくて256でないと、 多くてもテストファイルの1/4しか使わないのではないでしょうか。 (1MBあたりの4KB領域の個数が入るべきという理解です) 理解が間違っていたらすみません。よろしくお願いいたします。
致命的なバグが発覚! バグの内容 テストファイルサイズ 4KBランダムリード・ライトテストに おいて、テストファイルの先頭1/4しか使用しない。 ⇒ 実態よりも良い結果となる。 1/4 アクセス範囲 // テストファイルを4KBで分割 正)split = 256 * (DiskTestSize / 1024 / 1024); 誤)split = 64 * (DiskTestSize / 1024 / 1024); // ループ内でファイルポインタを操作しながらリード/ライトを実行 SetFilePointer(hFile, (rand() % split) * bufSize, NULL, FILE_BEGIN);
人間だもの もみ消して、 しれっと修正 しちゃえば・・・
当日:修正版リリース 不具合の詳細と改善内容
翌々日:窓の杜で記事化 致命的な不具合ながらも迅速かつ誠実な対応を評価する声もあり、 ユーザーの優しさを嚙み締めました。しかし・・・ https://forest.watch.impress.co.jp/article/2008/01/15/crystaldiskmark200.html
数ヶ月後:致命的な不具合が2件発覚 https://forest.watch.impress.co.jp/article/2008/02/04/crystaldiskmark210.html https://forest.watch.impress.co.jp/article/2008/09/16/crystaldiskmark220.html
こんなベンチマークソフトは見たことがない! ユーザーの反応(原文ママ、一部伏字) • 〇んでしまえ • お前のソフトは二度と使わん • お前にソフトを作る資格はない 自業自得ではあるが、さすがに凹む・・・
危機管理の原則 包み隠さず公表 迅速に対応
CrystalDiskMark 3.0 NCQ(Native Command Queuing)対応で復活 https://forest.watch.impress.co.jp/docs/news/356338.html
CrystalDiskMark 4.0 秘話 ある日こんなメールを受領(要旨) やぁ、ひよひよ! 今度、台湾出張があるんだけど ついでに遊びに行っても良いかい?
インテル(米国本社)のエンジニアが札幌の自宅に!? 検証用機材の提供 技術課題の共有 当 時 非 常 に 高 価 だ っ た NVMe SSD CrystalDiskMark 3.0では、 を評価用にご提供いただきました。 Intel SSD 750 1.2TB 最新NVMeのパフォーマンスを 適切に評価できない。 ↓ マルチスレッド対応が必要 ↓ しかし、自力での対応は難しそう・・・
CrystalDiskMark 4.0 Microsoft製ストレージベンチマーク (MITライセンス) ベンチマーク部にDiskSpdを採用 CrystalDiskMark 3 内製 UI ベンチマーク機能 CrystalDiskMark 4 以降 全て内製 DiskSpd https://github.com/Microsoft/diskspd
定番ストレージベンチマークソフトの地位を確立 新製品発表、PC雑誌、レビュー記事、個人ブログなど 世界中で広く活用いただけるようになりました! CES2020 https://pc.watch.impress.co.jp/docs/news/event/1228117.html https://www.phison.com/en/company/newsroom/event-presskits/event/1210-ces-2020 COMPUTEX 2018 https://www.gdm.or.jp/review/2019/0101/288880/3
macOS版&Linux版も! AmorphousDiskMark by Katsura Shareware https://www.katsurashareware.com/ja/amorphousdiskmark/ KDiskMark by JonMagon https://github.com/JonMagon/KDiskMark
Agenda 自己紹介 はじめに 致命的な不具合 オープンソースの奇跡 モチベーションを維持・向上するための秘訣 まとめ
CrystalDiskInfo(ストレージ情報ソフト) データ消失のリスクからユーザーを守りたい! 約5ヵ月かけてシンプルなストレージ情報ソフトを開発 GoogleがHDDの故障に関する論文を公開 故障の予兆検知、データ消失リスク低減 (バックアップの取得、ストレージ交換など) 世界中にストレージの故障を予測するソフトは 多数存在したが、圧倒的なソフトは存在しない https://static.googleusercontent.com/media/research.google.com/ja//archive/disk_failures.pdf
CrystalDiskInfo の戦略 世界中の人々に愛される ストレージベンチマーク&情報ソフトを目指す CrystalDiskMarkとの相乗効果を狙う
某巨大掲示板の評価 ベータ版の評価はイマイチ 某巨大掲示板のログ S.M.A.R.T.値を表示するだけ だとなあ、一工夫ほしいところ S.M.A.R.T.そのまま表示する だけであんまし意味ねえ。w S.M.A.R.T.(Self-Monitoring Analysis and Reporting Technology): ストレージの健康状態や温度などをレポートする機能 https://pc11.5ch.net/test/read.cgi/software/1173061928/
名無しさんのコメントを真に受けて・・・自問自答 S.M.A.R.T.情報を 表示するだけのソフトを 作って誰が喜ぶの? 喜んでくれる人はいない!
本当に必要な機能を実装! 正式版リリースを約2ヵ月延期 グラフによる可視化 常駐と警報
オープンソースの奇跡 >1<
ユーザーからの要望には応えていきたい・・・ 世界中から 100万回いただいたリクエスト USB-HDD対応まだですか?
USB/SCSI/ATAについて調査したものの・・・ USB-HDD対応方法 全然わからん! 自身のWebサイトと掲示板にその旨記載
USB-HDD対応!! ある日、掲示板にUSB-HDD対応パッチが 対応パッチ キタ━━━━(゚∀゚)━━━━!!
SCSI/ATA Translation (SAT) USB パケット or IEEE 1394 パケット 特殊な SCSI コマンド (ベンダー固有) 普通の ATA コマンド 外付けHDD シリアルATA/パラレルATA USB-ATA 変換チップ
情熱の新規USB-HDD対応作業
窓の杜大賞受賞 (2008年) リリースから約半年後に窓の杜大賞を受賞 https://forest.watch.impress.co.jp/prize/2008/result.html
名無しさんの一言が 人生を変えた!?
オープンソースの奇跡 >2<
新しい規格には迅速に対応していかなければならないが・・・ 世界中から 100万回いただいたリクエスト NVMe対応まだですか? SSD接続用の新しい規格(Non-Volatile Memory Express)
NVMeについて調査したものの・・・ Windows 8.1のNVMe ドライバはS.M.A.R.T. 情報取得に非対応!? TwitterにNVMe対応の課題を投稿
世界の誰かが助けてくれる! (かもしれない) 初ツイート
コミュニティの力を借りてNVMe SSD対応 Delphi製コードをC++に移植して対応方法を伝授いただきました! NVMe対応コードを適用 https://github.com/ebangin127/nvmetools https://naraeon.net/
オープンソースの奇跡 >3<
ベンダーからUSB-NVMeブリッジチップへの対応依頼を受領 世界初 3機種対応 • JMicron JMS583 • ASMedia ASM2362 • Realtek RTL9210 ベンダーからの提供物 • 検証用ボード • 詳細なデータシート • パッチ
NVMe Pass Through USB パケット 特殊な SCSI コマンド (ベンダー固有) NVMe コマンド 外付けSSD USB-NVMe 変換チップ NVMe SSD (M.2)
NVMe Pass Through (ASMedia専用コマンド) USB パケット 特殊な SCSI コマンド (ベンダー固有) NVMe コマンド sptwb.Spt.Cdb[0] = 0xE6; // NVME PASS THROUGH sptwb.Spt.Cdb[1] = 0x02; // GetLogPage sptwb.Spt.Cdb[3] = 0x02; // S.M.A.R.T. sptwb.Spt.Cdb[7] = 0x7F; length = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, DataBuf) + sptwb.Spt.DataTransferLength; bRet = ::DeviceIoControl(hIoCtrl, IOCTL_SCSI_PASS_THROUGH, &sptwb, length, &sptwb, length, &dwReturned, NULL);
オープンソースの奇跡 >4<
世界中から 100回いただいたリクエスト DELL製PCのNVMe SSD が見えないんですけど?
とりあえず実機購入! 動作検証のためだけに購入 約20万円
実機を購入したものの・・・ 対応方法がわからん! CrystalDiskMark 4.0の開発でお世話になった 方に相談してみよう!
Intel RST対応に必要な情報を正式ルートで入手! Intel Rapid Storage Technology 動作確認後は押入れで保管! ひたすらお金がかかります!
オープンソースが生んだ好循環 ユーザー 増 ベンダー: 新製品を出すので 対応お願いします!! 対応HW 開発 増 協力 ベンダー 対応HW サポート 増 圧力 ユーザー 増 ✓ USB-HDD対応 ✓ NVMe対応 ✓ RAID対応 など
Linux版(TUI)も! CrazyDiskInfo by otakuto https://github.com/otakuto/crazydiskinfo
Agenda 自己紹介 はじめに 致命的な不具合 オープンソースの奇跡 モチベーションを維持・向上するための秘訣 まとめ
ひたすらコミュニティに貢献! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! GIVE! TAKE!
経験則 ユーザーに喜んでもらった分だけ 回り回って幸運が訪れる
自らを励まし続ける仕組み ソフトウェア開発を止める理由(想像) • 職場環境/家庭環境の変化 • ユーザーサポートによる疲弊 モチベーションを維持・向上 するための仕組みが重要 ⇒ 心無いコメントでメンタル崩壊 • 作りたいものがなくなる • 他にやりたいことが見つかる • ウイルス誤判定・・・ 公式応援キャラクター?
公式応援キャラクター 超美麗8K壁紙(20種類以上) 水晶雫(すいしょうしずく) 多種多様なグッズ制作&イベント開催 AKIBA PC Hotline!主催 「アキバで見かけた萌えキャラコンテスト」2連覇! イラストレーター:桐野霞 @kirinokasumu | プロデューサー:橘べるちぇ @bellche
世界一萌えてるストレージソフトウェア CrystalDiskMark Shizuku Edition CrystalDiskInfo Shizuku Edition
Agenda 自己紹介 はじめに 致命的な不具合 オープンソースの奇跡 モチベーションを維持・向上するための秘訣 まとめ
まとめ 世界中のユーザーに愛されるソフトウェアを目指すことで あなたの人生も豊かで鮮やか ますます になると思います。 まずは「日本中のユーザー」「身近なユーザー」「お客様」に愛されるソフトウェアを 目指してみませんか?