プログラミング生放送勉強会第25回@品川に参加しました。

http://atnd.org/events/41993

f:id:suzaku114:20130824122050j:plain

Windows ストア アプリケーションのUIデザイン

  • UX
  • ユーザビリティテスト
  • マニュアルは読まれない前提でUIを作る

Modern Style

  • Metroと呼ばれていたもの
  • 10フィート離れたところからリモコンで操作出来るように
  • 日本の地下鉄は複雑だけど、路線図を見れば、なんとなくわかる→Metro UI

Application Design

  • タブレットのデザインは難しい
    →広い、統一できない、まとまらない
  • コンテンツが最優先

そぎ落とす

  • Crome(余計な装飾・今使わないメニュー)は要らない
  • 左上は一番重要
    →コンテンツを置くべき
  • RSSリーダーに、3つもペインは必要ない。人間は一度にそんなに情報を処理できない。
  • 重複なアイコン→共通メニュー(アプリバー)
  • ほんとうに、今、これが必要なのかを考えて作る
  • デベロッパーはデザイナーの下僕です。

構造とリズム

  • タイポグラフィ
  • 非デザイナーがなんとなく作って、なんとなくかっこ悪いのはルールがないから
  • フォントも4つに絞る(9pt, 11pt, 20pt, 42pt)
  • 文字サイズを大きくすると、細いフォントを利用する
  • グリッド
  • 1unit = 20px x 20px
  • 1sub unit = 5px x 5px

軽快に、滑らかに

  • ビジュアルなフィードバック
  • スプラッシュスクリーンの本当の意味は、起動にかかる時間をごまかすため
  • 5mm なら、30回に1回ぐらいタップミスする
  • 7mm なら、100回に1回ぐらいタップミスする(だいたい大丈夫)

デザインガイドラインをぜひ見てください(MSDNのUXパターン)

Leap Motion ではじめるNUIプログラミング

NUI概要

  • Project Natal(のちのKINECT
  • 3D深度センサー・RGBカメラ・マルチアレイマイク

Leap Motion概要

  • 様々な言語で開発可能
  • デモアプリがかっこいい

C#によるLeap Motionプログラミング

  • センサーの視界領域にある手や指を追跡
  • Controller, Listener などのクラスが用意されている
  • PUSH形式とPULL形式のデータ取得が可能
  • ListenerのOnFrameでFrameを取得して操作する
  • Gestureは4種類
  • onFrameはすごい勢いで呼び出される(秒間数十?)
  • InteractionBoxクラス(箱状の領域を設ける)

ソフトウェアアーキテクチャの求め方

結局何を決めなければいけないのか?

  • アーキテクチャという言葉の定義に「万人の合意」は存在しない
  • 複雑さへの対処
  • 整理・細分化を行う→「関心事の分離」
  • 開発や運用が容易な大きさの集合に分解する
  • モジュール化・カプセル化
    再利用可能は必須ではない

設計パターンを用いた分離

  • 設計パターンといわれるものは、本質をつかみづらい
    用語の誤認と誤った情報が配信されているため
  • 関心事を分離する視点そのものが、いわゆる設計パターン
    切った結果ではない
    →サンプルコードから読み取ることは不可能
  • 設計パターン→設計視点

実際の分離で使用する視点の例

  • Presentation Domain Separation(PDS)
  • 分離したいのは、プレゼンテーション部分は他のコードと別の知識・制約がかかるから
  • 次の入力フォーカスをどこに置くべきかは、Domain側に書くべき
  • 資料:「GUIアーキテクチャの基礎からMVVMパターンへ」
  • PDSとは、アプリケーション全体から「PresentationPlatform関連」を分離する「視点」

  • Domain Logic Pattern

  • アプリケーションの状態の持ち方の特性で大きく分かれる
  • TransactionScript or Domain Model
  • 資料:「Modelの中身 - ドメインロジックパターン」
  • TransactionScriptが有用な場面ではDRY原則は原則ではなくなる
  • DomainModelで継承してると、仕様変更で継承関係が変わってしまうと大変になる

  • 大きな食べ物を順々に切り分けていく間隔
    前のステップでの切り方によって、次のステップの切り方は変わってくる

まとめ

  • すべては「関心ごとの分離」に通ず
  • 「設計パターン」って言葉よくないよ!
  • 大体いつも使う知見:PDS(MVC系の裏), Domain Logic Pattern
  • なぜそうしたいのか?なぜこれが必要になったのか?から考え直す
  • どこにも載ってない情報は自分で考えるしかない

Visual C++C++10.8 ←イマココ

  • gcc / clangと比べると、Visual C++ はイケてない
  • Visual C++ 12でようやく追い付いてきたぐらい

delegating constructor

uniformed initialization

  • "()"ではなく、"{}"でコンストラクタを呼び出す
    cplx c0(); では、関数宣言になってしまう

initializer_list

  • initializer_list という型の定義
    追加・挿入・変更できないコンテナ
    initializer_list<int li { 1, 2, 3 };

explicit conversion operator

  • 暗黙の変換を抑止する "explicit"がないと、加算出来たりする

LT

@ZuQ9Nn 自作アプリの宣伝

  • 虹人間カメラ - RainbowMainCamera
  • あざとい感じのアプリ名
  • なんの成果も得られませんでした
  • 初日1桁DL

残念な原因 - アプリの説明がわかりにくい - 宣伝を全くしなかった - 露出が少なすぎるために、存在していないのと同じ

  • 現在、App Storeのランキングはお金で買える
    →個人が趣味で作って上位になるのは大変難しい

@@ww24 FlashAir x Node.js

  • Wi-Fi対応SDカード
  • FlashAir - 開発者向けにAPIを公開
  • FlashAir -> node -> chrome
  • デモ成功

@_kz6 Javaを勉強してわかったこと

  • 30億のデバイスで走るJava
  • 世界の人口の1/2
  • 例外処理は便利
  • Minecraft はいろんなOSで動く
  • プラットフォームとの互換性が高い
  • 一般的な高校生が理解できる

@azyobuzin イカすJava Xtendの話

  • Java嫌い
  • 一般的な高校生には理解できない
  • Java1.5相当に変換される
  • Eclipseのプラグイン
  • ラムダ式
  • 拡張メソッド
  • プロパティ
  • null 処理
  • No Statements
  • 型推論
  • defで戻り値の型を書かなくて良い
  • ドキュメントに書いてあっても出来ないこともある
  • それでもJavaよりまし

@mikan_x コミックマーケットでの携帯電話のお話

  • いつも電波悪いよね
  • C84では改善された
  • 以前まではau, docomoが厳しかった
  • 201THを使え(衛星電話高い)
  • emobileはユーザが少ないから最強
  • 電波が無いなら、迷子にならないで
  • 将来的にwebカタログが使えるかも

@shinoblogavi お絵かきツールとしての Blend と Power Point

  • パスで描く
  • 部品管理とグループ化は大事
  • 図形の結合
  • トリミング・図形貼り付け・半透明化
  • パワポまじ凄い

@daruyanagi プロ生ちゃんの声をアプリに組み込もう

  • Expressでも使える

感想

  • MSはUI/UXに頑張ってる
  • Leap Motionすごい。欲しい。
  • ソフトウェアアーキテクチャを考えるためには、視点を学ぶ必要がある
  • gloops はアーキテクチャをしっかり考えて作ってるっぽい
  • C++、言語としては残念
  • FlashAirすごい
  • PowerPointまじすごい。絵を描ける
  • プロ生ちゃんって、結局なんだったのだろう(ぇ

f:id:suzaku114:20130824182213j:plain