Successfully reported this slideshow.
Your SlideShare is downloading. ×

CrystalDiskMark & CrystalDiskInfo 開発裏話

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
20210828_win32_windows11
20210828_win32_windows11
Loading in …3
×

Check these out next

1 of 68 Ad

CrystalDiskMark & CrystalDiskInfo 開発裏話

Download to read offline

CrystalDiskMark & CrystalDiskInfo 開発裏話 ~ 個人開発の限界突破!世界中のユーザーに愛されるソフトウェアを目指して ~

CrystalDiskMark & CrystalDiskInfo 開発裏話 ~ 個人開発の限界突破!世界中のユーザーに愛されるソフトウェアを目指して ~

Advertisement
Advertisement

More Related Content

Recently uploaded (20)

Advertisement

CrystalDiskMark & CrystalDiskInfo 開発裏話

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

×