第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

81
[1] hiyohiyo Twitter: @openlibsys http://crystalmark.info/ CLR/H 第89回勉強会 ~Community Camp デイ!~

Transcript of 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

Page 1: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[1]

hiyohiyoTwitter: @openlibsys

http://crystalmark.info/

CLR/H 第89回勉強会~Community Camp デイ!~

Page 2: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[2]

本日のお品書き自己紹介萌え駆動開発萌える実践例萌えるWin32まとめQ&A

Page 3: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[3]

自己紹介

Page 4: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[4]

自己紹介

名前:hiyohiyo/ひよひよ

年齢:35歳

家族:妻, 愛娘, 愛息子

趣味:フリーソフト開発 (約16年)

住所:北海道札幌市

□代表作: CrystalDiskInfo, CrystalDiskMark 他(通称 Crystal シリーズ)

パソコンがもっと好きになるフリーソフトを一貫して開発しています

Microsoft MVP for Visual C++Jan 2014 – Dec 2014

Page 5: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[5]

Crystal Dew World 公式応援キャラクター

水晶雫

Page 6: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[6]

CrystalMark 2004

ランキング対応ベンチマーク

Page 7: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[7]

CrystalCPUID

CPU情報ツール

Page 8: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[8]

CrystalDiskMark 3 Shizuku Edition

新世代ディスクベンチマーク

ベンチマーク結果なんておまけですwww

Page 9: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[9]

CrystalDiskInfo 6 Shizuku Edition

HDDやSSDの健康状態を音声で教えてくれる!!

新世代ディスク情報ツール

Page 10: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[10]

本題の前に・・・

CLR/H代表ナオキ氏

@openlibsys ひよひよさんー3月22日CLR/Hでセッション登壇とかして頂けませんかー?

もちろん良いですよ。では、萌える Win32 プログラミングネタで!!

MVP for Visual C++ になったことだし、Server Core で動くアプリ開発ネタかなぁ。

いや、いつも通り萌えとくかw

Page 11: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[11]

Microsoft 公式イベントだったorz

Page 12: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[12]

萌え駆動開発

Page 13: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[13]

はじめに

ソフトウェア開発手法

• テスト駆動開発• チケット駆動開発• モデル駆動開発• ビヘイビア駆動開発• 〆切駆動開発など

Page 14: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[14]

お悩みではありませんか?

やる気が出ない 楽しく開発したい 励ましてもらいたい 早く人間になりたい

既存ソフトウェア開発手法には何かが足りない!!

Page 15: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[15]

萌え

根性

何が足りないのでしょうか?

Page 16: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[16]

萌えです!!

ズバリ

Page 17: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[17]

萌え駆動開発 (MDD:Moe Driven Development)

■定義萌える想いをコードに変換するソフトウェア開発手法

■解説古くからヲタクを中心に実践されてきた伝統的な開発手法です。変数名がアレ。コメントがアレ。コードネームがアレ。開発環境がアレ。など

Page 18: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[18]

圧倒的な開発エネルギー!!

E=Moe2

※E は開発エネルギー

なんて美しい数式なんだ!!アインシュタインも真っ青!?

Page 19: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[19]

技術力は関係ありません!!

Page 20: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[20]

萌え駆動開発

第二世代

Page 21: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[21]

第二世代萌え駆動開発

■定義人智を超越した萌える想いをオリジナルキャラクターへと昇華させて(*´Д`)

■解説ソフトウェアへの統合やグッズ制作などを通して真実の萌えを極めます

第二世代ならでは

Page 22: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[22]

圧倒的じゃないか、第二世代は

E=Moe3

※E は開発エネルギー

Page 23: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[23]

萌える想いが全てです!!

Page 24: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[24]

でも、何から始めたら良いのかな?

私の体験談を紹介させていただきます

Page 25: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[25]

オープンソースカンファレンス2011 北海道(2011/6/11)

Page 26: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[26]

①メール設定

②メール通知をチェック

メール通知機能を猛アピール

Page 27: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[27]

懇親会にて

橘べるちぇ氏

メール通知なんてレガシー技術!!時代は音声通知ですよ・・・そうだ!!

声優さんに喋ってもらいましょう!!

そっ、それはいいですねぇ(棒)

軽く流しておくか

Page 28: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[28]

ボイスが届いた

イラストが届いた

数週間後・・・何が起きたでしょうか?

Page 29: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[29]

本当に送られてきたよwww

橘べるちぇ氏

声優さんに喋ってもらったから次のバージョンでこれを使ってください。

あっ、ありがとうございます・・・

ネタじゃないwどうなってるんだ!?

Page 30: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[30]

人間とは欲深い生き物・・・

桐野霞先生に伝手があるので頼んでみます!!

せっかくなのでイラストも欲しいです!!※どこまでも他力本願www

キャラクター展開したいなぁ

橘べるちぇ氏

Page 31: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[31]

かっ、かわえぇえぇぇぇえぇぇぇえぇ桐野霞先生ってどんなイラストを描く方かなぁ?

Bing で 検索 してみよう!!

©kirino kasumu http://kirino.moo.jp/

Page 32: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[32]

オープンソースカンファレンス2012 北海道

(2012/6/16)

Page 33: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[33]

CrystalDiskInfo 5 Shizuku Edition

Page 34: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[34]

大きな反響がありました

ひよひよ氏どうした?

出典:http://gigazine.net/news/20120620-crystaldiskinfo-5-shizuku-edition/出典:http://www.forest.impress.co.jp/docs/news/20120618_541019.html

HDDが壊れて悲しい気持ちになってたけどこれを導入したら今度はHDDの異常が楽しみになってきててやばい

コレはよい和服美少女。

CrystalDiskInfo愛用してるけどこんな路線になるとは思わなかったww

結構お固いソフトだと思ってただけに意外。でもかわいい。

なにこれやたらかわいい(:.;゚;Д;゚;.:)ハァハァ

可愛すぎて導入したい

Page 35: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[35]

水晶雫プロデュースで一番意識したこと

もの凄く良いものにすること

ちょっと良い程度では寧ろマイナス• 皆が萌えたいわけではない• そもそも萌えようがない

世界展開を見据える• 和服美少女+黒髪+清楚• 17歳 (X18ダメ絶対!!)• ボイスの国際化は未定orz

Page 36: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[36]

うっ、う~ん特殊過ぎて参考

にならないかも?

Page 37: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[37]

1. 本体 2. イラスト 3. ボイス

クリエイターマッチングサイト活用• プロ・アマ問わず多数のイラスト

レーターさん、声優さんが登録

• この人にお願いしたい!!と強く思う方にお願いする⇒ 多分これが一番大切!!

【想像】第二世代萌え駆動開発の始め方

Page 38: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[38]

萌える実践例

Page 39: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[39]

私と萌え駆動開発

アレなコードネーム

アレな開発環境

アレな部屋

Page 40: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[40]

アレなコードネーム ~CrystalDiskInfo~

1.0: Feena2.0: Earthlight3.0: Moonlight4.0: Licia

5.0: Cynthia6.0: Freesia7.0: ???

© August

第一世代

第二世代

Page 41: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[41]

第二世代は圧倒的ですね!!

Page 42: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[42]

あれ?Ver.5 以降は私だけ

で良いのでは?

第一世代と第二世代は共存可能です。断じて浮気ではありません!!ちなみに・・・二次元と三次元も両立可能です!!

Page 43: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[43]

アレな開発環境 > Visual Studio に壁紙Visual Studio痛IDE拡張1.5

© 踊れないダメ人間 さん http://aoikagami.wordpress.com/

スライドショーにも対応!!

Page 44: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[44]

アレな開発環境 > デスクトップ用壁紙超高解像度(8K/7680x4320)壁紙

http://水晶雫.com/

Page 45: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[45]

アレな部屋

コミケ83記念漢の萌えるデスクトップ

Page 46: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[46]

【参考】プロ生ちゃん

とても美味でした!!

Page 47: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[47]

【参考】クラウディアさん

セクシー過ぎます!!

あまりにセクシー過ぎて Microsoft ロゴをつけられなかったとかなんとか・・・※裏面にはロゴあり

Page 48: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[48]

あまりに厳しい現実・・・

某知人 ~結婚直前~

彼のお兄さん ちょっとヲタクっぽいんだよねぇ。部屋にポスターとかフィギュアとか・・・あっ、ひよひよさんはパソコン系だから大丈夫だよね?

そうですね。アキバではパソコンショップに行くことが多いです。

大丈夫ってなんだよ!!ダメダメだよorz

Page 49: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[49]

家族の理解!!

何より大切なのは・・・

理解ある嫁を貰った私は勝ち組ですw

Page 50: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[50]

萌えるWin32

Page 51: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[51]

Win32 について

Page 52: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[52]

Win32 最大の魅力

Win32/DirectX 9.0c

萌えるげーむ

その他

Page 53: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[53]

デスクトップアプリ

C++/Win32

MFC(Microsoft Foundation Class) C#/VB.NET

.NET Framework

HTML(CSS+JS)

GDI/GDI+ WinForms WPF

ネイティブ マネージド

CrystalDiskInfo 1~5

Page 54: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[54]

HTML + CSS + JavaScript で UI 構築

CSS によりデザインを容易に変更可能 DirectWrite による美しいフォント (IE9以降) JavaScript ライブラリが利用可能

IE の設定に影響を受ける⇒ 画像表示設定など

IE のバージョンにより挙動が異なる⇒ IE6/7/8/9/10/11⇒ Win7/8 で挙動が異なることもorz

IE が存在しない環境では動作しない⇒ Server Core など

Page 55: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[55]

Server Core だと!!

某海外ユーザー

やぁ。ひよひよ。CrystalDiskInfo 5 Shizuku Edition が Server Coreで動かないんだ!! どうにかできないかい?

OK! 考えてみるよ。

Server Core だと!!

Page 56: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[56]

Server Core とは?Windows Server 2008/2012 をサーバーとして動作させるために

必要な最小限の機能のみをインストールするオプションです。GUI 機能は大きく制限されており、IE や WinForms/WPF は使えません。

Page 57: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[57]

Server Core ではIE が使えない!?

でも、どうしたら??

Page 58: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[58]

GDI で書き直す

スルー

一体どうしたらよいのでしょうか?

Page 59: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[59]

一人でも多くの人にShizuku Edition を!!GDI で書き直す!! (キリッ

GDI で新規とか罰ゲームかよorz

第二世代萌え駆動開発の神髄!!

Page 60: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[60]

デスクトップアプリ

C++/Win32

MFCC#/VB.NET

.NET Framework

HTML(CSS+JS)

GDI/GDI+ WinForms WPF

ネイティブ マネージド

CrystalDiskInfo 6Server Core でも動作する

漢のプラットフォーム

Page 61: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[61]

GDI ベースで普通に作ると・・・

これでは萌えられません!!

Page 62: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[62]

HTML ベースから GDI/GDI+ への回帰

CrystalDiskInfo 1~5 CrystalDiskInfo 6

開発環境 Visual C++/MFC Visual C++/MFC

ベースクラス CDHtmlDialog ベース独自拡張 CDialogEx ベース独自拡張

レイアウト HTML + CSS + JavaScript ピクセル固定

HiDPI 対応 OpticalZoom (IE8 以降) 自前拡大 (Per-Monitor DPI 対応)

文字列描画 DirectWrite (IE9 以降)GDI/GDI+(DirectWrite 対応検討中…)

画像描画 IEコンポーネント GDI+

ボタンPNG画像透過PNG対応 (IE7 以降)

CButton ベース独自拡張(背景描画+透過 PNG 対応)

Page 63: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[63]

GDI/GDI+ で UI 構築

Q: 画面がチラつくことがあるんですが…A: ダブルバッファリングしたら?

Q: ボタンに透過 PNG 画像を使いたいのですが…A: オーナードローしたら?

Q: HiDPI に対応したいのですが…A: コントロールを拡大縮小したら?

Q: すっ、少しぐらいは良いところあるんですよね?A: 互換性? あんまりないんじゃない?

嫌な予感しかしない…

Page 64: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[64]

固定ピクセルレイアウト & HiDPI 対応

m_CtrlFirmware.InitControl (256 + OFFSET_X, 88, 180, 20, m_ZoomRatio,m_CtrlSerialNumber.InitControl(256 + OFFSET_X, 112, 180, 20, m_ZoomRatio,m_CtrlInterface.InitControl (256 + OFFSET_X, 136, 180, 20, m_ZoomRatio,m_CtrlTransferMode.InitControl(256 + OFFSET_X, 160, 180, 20, m_ZoomRatio,m_CtrlDriveMap.InitControl (256 + OFFSET_X, 184, 180, 20, m_ZoomRatio,m_CtrlAtaAtapi.InitControl (256 + OFFSET_X, 208, 408, 20, m_ZoomRatio,m_CtrlFeature.InitControl (256 + OFFSET_X, 232, 408, 20, m_ZoomRatio,

x Y W H Zoom

Width=180*m_ZoomRatioHeight=20*m_ZoomRatio

X=(256+OFFSET_X)*m_ZoomRatioY=88*m_ZoomRatio

OFFSET_X

Page 65: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[65]

HiDPI 対応

100% 200% 300%

拡大率ごとに画像を用意しているので、拡大してもクッキリ!!

配布サイズはちょっと大きいですけど…

Page 66: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[66]

透過 PNG 対応ボタン

CButtonCx* クラス (オーナードローによる透過 PNG 表示に対応)

1. ボタンの背景をバックバッファに描画2. 背景と透過 PNG 画像をアルファブレンド (自前)3. GDI もしくは GDI+ で文字列描画 (DirectWrite への対応は検討中)4. 表示 (ダブルバッファ対応)

*ソフト屋 巣さん http://softyasu.net/ の CAlphaButton を参考にさせていただきました。

今どきのライブラリなら全部やってくれるんですけどね…

Page 67: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[67]

Win32 標準コントロールの透過

Win7 以前 Win8 以降

if (m_IsHighContrast) // ハイコントラスト環境では透過機能を無効化{

::SetLayeredWindowAttributes(m_List.m_hWnd, 0, 255, LWA_ALPHA);}else{

::SetLayeredWindowAttributes(m_List.m_hWnd, 0, 192, LWA_ALPHA);}

リストコントロールが透過

Win8 からコントロールのレイヤードウィンドウに対応

Page 68: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[68]

Per-Monitor DPI (Win8.1 以降)

96 dpi (100%) 192 dpi (200%)

DPI境界を跨ぐたびに適切な拡大率に調整※詳細は Per-Monitor DPI で検索!!

タイトルバーとメニューバーのサイズは共通⇒ 大きすぎる/小さすぎるという問題が発生⇒ 自前で描画するしかない?? (未対応)

Page 69: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[69]

めでたく Server Core でも動作!!

Page 70: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[70]

まとめ

Page 71: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[71]

まとめ

萌え駆動開発楽しいですよ!!

第二世代萌え駆動開発の魅力が少しでも伝われば幸いです。

Page 72: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[72]

Q&A

Page 73: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[73]

質問1: 制作したグッズは?

回答1:ポスターポストカード卓上カレンダーかるた

など 今後も色々制作予定です

Q&A

Page 74: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[74]

ポスター

Page 75: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[75]

2012年9月: iPh○ne 5/5s ケース

iPh○ne 5/5s 専用ケース

Page 76: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[76]

コミケ83: インフラエンジニアかるた

サーバ擬人化ユーザ会 さんとコラボで『かるた』と『読み札CD』を制作

Page 77: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[77]

2013年2月: かるたポスター

オリオスペックさん

←ツクモさん

パソコンショップ

アークさん→

出典: http://akiba-pc.watch.impress.co.jp/docs/wakiba/find/20130108_581014.html

Page 78: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[78]

2013年2月: バレンタインチョコ企画

オリオスペックさんとバレンタインコラボ~店頭デモの様子~

出典: http://ascii.jp/elem/000/000/762/762701/

Page 79: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[79]

2013年10月: 卓上カレンダー ポスター他

出典: http://zigsow.jp/?m=zigsow&a=page_fh_own_item_detail&own_item_id=252541

オープンソースカンファレンス 2013 Tokyo/Fall にて無償頒布

Page 80: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[80]

質問2: グッズの制作費用は?

回答2: ※紙質・部数に依存

ポスター: 数千円~ポストカード: 数千円~卓上カレンダー: 数千円~

意外と手軽に制作可能です!!

Q&A

Page 81: 第二世代MDD(萌え駆動開発)によるプログラミングWin32 #CLRH89

[81]

ご清聴ありがとうございました