fenri's diary

基本的には勉強し始めたC#のメモ。後は140字で収まらない駄文。

ListBoxとScrollViewer

リストボックスで表示したリストがスクロールできるようにするには
ScrollViewerの中にListBoxを入れてあげる必要がある

そのとき、ListBoxのサイズの指定はしないこと

        <ScrollViewer x:Name="scv1" HorizontalAlignment="Left" Height="321" Margin="14,99,0,0" VerticalAlignment="Top" Background="#FFFFFFFE" HorizontalScrollBarVisibility="Visible" Width="372" BorderBrush="Black" BorderThickness="1">
            <ListBox x:Name="lstSokuteiTenList" HorizontalAlignment="Left" VerticalAlignment="Top" BorderBrush="Black" ScrollViewer.HorizontalScrollBarVisibility="Auto" Background="#CCFFFFFE" FontFamily="Microsoft NeoGothic" FontSize="20" RenderTransformOrigin="0.772,0.573" BorderThickness="0" SelectionChanged="SelectionChanged" FontWeight="Bold"/>
        </ScrollViewer>

指輪型ウェアラブルデバイス「Ring」レビュー

半年以上前にKickstarterで出資した 指輪型ウェアラブルデバイス「Ring」が到着したのでレビューを書いてみる。


まずなんぞやってのをざっと書くと
Ringとは
人差し指で空中に文字を描くようにジェスチャーすることで
色々なものをコントロールしたり文字を入力したりできる指輪型のウェアラブルデバイス。

Kickstarterにて資金調達して期間は2月末から4月までの1ヶ月強
目標金額250,000ドルに対して最終的に集まったのが880,998ドル(約9500万円)
クラウドファンディングお決まりの仕様変更、デザイン変更、出荷遅延を経て
10月頭から出荷を開始
Ring Kickstarter
Ring : Shortcut Everything. by Logbar inc. — Kickstarter


まぁ文字で説明するより動画で見たほうが速い。。。

Ring : Shortcut Everything. by Logbar inc. - YouTube

Ring : Shortcut Everything. by Logbar inc. — Kickstarter


この動画みた瞬間これ面白い!って思ったので人柱として出資。
で、先週末に届きました。

ちなみにITMedia的には仕様変更で炎上って事になってたみたいだけど
こんなもんクラウドファンディングじゃ当たり前だし、騒いでる人もそんなにいないように思えました。
指輪型デバイス「Ring」炎上 出荷遅延・デザイン変更……「9月末発送に向け量産中」と開発会社 - ITmedia ニュース




で、やってみた結果。
▷を描いて音楽を再生したり


↓↑のジェスターで音量を調整したり

凸のジェスチャーでカメラを起動&撮影したり。


これは...

楽しい(・∀・)

まだジェスチャーに慣れてないからだいぶぎこちないけど
指先で操作できるのは未来感があってそれだけで楽しいw


以下まとめきれてないまとめ。
サイズについて

 見た感じ大きいので指に装着してもなかなかのインパクトはあるんだけど
 装着してみるとそこまで違和感はない。
 たぶん左右の厚みを薄くして上部を厚くしてるから他の指に干渉しづらいんじゃないかと。
 ただ通販で買うなら内径には気を使ったほうが良さそう。
 ぴったりサイズを買わないとジェスチャー中にスッポ抜けるw
 (ちなみにサイズ調整用のパーツは入ってたのでちょっと大きくらいは大丈夫)
 

動作について

 基本的に狙ったジェスチャーを認識してくれるもののちゃんと動作しないことも。
 上でやった音楽再生もジェスチャーは認識してるけど再生してくれない事が何回かあった。
 これはアプリの問題っぽいのでいずれ解決するのかな。
 

実用性について

 今のところできることが限られるので実用性はあまりなさそう。
 自分の環境だと上でやった音楽操作、カメラ操作くらい。
 使ってるサービス(ツイッターとかFoursquareとか)によってできることがあるので
 そうゆうサービス使ってる人はもうちょっと遊べるっぽい。
 あとhueっていうiPhoneに接続できる電球があると電気のON/OFF 色の調整もできるらしい。
 これはちょっと欲しい。。
 Ringで電球の色を変える! — Ring Blog by Logbar (Japanese)

その他

 実用性のところでも書いたけど今はできることがかなり限られてるので今後に期待。
 SDKも公開されるみたいだから有志が色んなアプリを作ったり、
 あと公式にはRing Hubとかいう中継器が今後発売されるらしくそれがあれば家電も操作できるようになるとか。
 そこまで来るとさらにおもしろい事になるんじゃないかなと。
 さらにハードももうちょい小さくなればいつも着けてて気づいた時にさらっとジェスチャー出来るようになるんかなと。。。
 
 
とりあえず今のところの使用感はこんな感じです。

C#の値渡しと参照渡し

MemberwiseClone メソッドを使用することでインスタンスのコピーを作成することができる。
 「自分自身のなかに持っているデータをそっくり丸ごとnewしたインスタンスにコピーしてやる、という機能を持つ。」
  オブジェクト全体の浅いコピーを作成する機能を持ったものである。
 「浅いコピー」とは、そのオブジェクトだけの複製を作ることを意味する。
  逆に深いコピーとは、オブジェクトから参照されるオブジェクトも含めたコピーを作成すること。

Structsは値型である為、newの必要がなく、代入は値渡しになる。

クラスは参照型である為、newが必要で、代入は参照渡しになる。

object型はすべてのクラスのスーパークラス、参照型。

object testObject1,testObject2;
testObject1 = 123;

と記述するとボクシング処理が自動的に挿入され、そのインスタンスが自動で作成される。
「int型整数の123という値をobject型の変数に入れようとしている。
 このような値型を参照型として使おうとする状況があると、
 コンパイラはボクシング処理を自動的に挿入する。
 その結果、整数型の変数を包み込むクラスが見えないところで準備され、
 そのインスタンスが自動的に作成され、ここでは123という値が書き込まれる。」


連載:C#入門 第6回 変数を極めろ

amespace ConsoleApplication9

 using System;

 public class TestClass : ICloneable
 {
   public int n;
   public object Clone()
   {
     return MemberwiseClone();
   }
 }
 public struct TestStructs
 {
   public int n;
 }
 public class Class1
 {
   public static int Main(string[] args)
   {
     int testInt1,testInt2;
     testInt1 = 123;
     testInt2 = testInt1;
     testInt1 = 456;
     Console.WriteLine( "Answer1 testInt1={0}, testInt2={1}", testInt1, testInt2 );

     TestClass testClass1,testClass2;
     testClass1   = new TestClass();
     testClass2   = new TestClass();
     testClass1.n = 123;
     testClass2.n = testClass1.n;
     testClass1.n = 456;
     Console.WriteLine( "Answer2 testClass1.n={0}, testClass2.n={1}", testClass1.n, testClass2.n );

     TestClass testClass1a,testClass2a;
     testClass1a   = new TestClass();
     testClass1a.n = 123;
     testClass2a   = testClass1a;
     testClass1a.n = 456;
     Console.WriteLine( "Answer3 testClass1a.n={0}, testClass2a.n={1}", testClass1a.n, testClass2a.n );

     TestClass testClass1b,testClass2b;
     testClass1b   = new TestClass();
     testClass1b.n = 123;
     testClass2b   = (TestClass)testClass1b.Clone();
     testClass1b.n = 456;
     Console.WriteLine( "Answer4 testClass1b.n={0}, testClass2b.n={1}", testClass1b.n, testClass2b.n );

     TestStructs testStructs1,testStructs2;
     testStructs1.n = 123;
     testStructs2   = testStructs1;
     testStructs1.n = 456;
     Console.WriteLine( "Answer5 testStructs1.n={0}, testStructs2.n={1}", testStructs1.n, testStructs2.n );

     object testObject1,testObject2;
     testObject1 = 123;
     testObject2 = testObject1;
     testObject1 = 456;
     Console.WriteLine( "Answer6 testObject1={0}, testObject2={1}", testObject1, testObject2 );

     return 0;
   }
 }

f:id:fenri:20141001171447g:plain

複数のプロジェクトでファイルを共有する / Versionの一括変更

一つのプロジェクトの中に
SharedAssemblyInfo.cs
をクラスとして新規追加
中身を

using System.Reflection;

[assembly: AssemblyVersion("0.1.0.0")]
[assembly: AssemblyFileVersion("0.1.0.0")]

とする

別プロジェクトに「既存のファイルを追加」でファイルを選択し、「追加」を押す代わりに「リンクとして追加」で追加する。

各プロジェクトのAssemblyInfoを重複してしまうので今までの方は削除する


複数のプロジェクトでファイルを共有するには? − @IT

TrackRめも

f:id:fenri:20140901184830p:plain

公式
StickR TrackR


公式サポートサイト
TrackR Support


以下、公式FAQをテキトーに邦訳し加筆修正したものです。
内容は保証しない。


trackrデバイスに電池を挿入する方法
1)基板側がマイナスになるように電池を入れる。
2)側面のボッチが1/8ずれるように蓋と本体をあわせる。
3)2つのボッチを合わせるように回転させる。
4)青のLEDが点滅します

接続が頻繁に切れる。
解決策1:デバイス側面のボッチがキチンと揃っていることを確認してください。
解決策2:お使いのデバイスのファームウェアが完全に最新の状態であることを確認してください。
解決策3:TrackRデバイスをオープンし、装置内部にスコッチテープの2層を貼ります。デバイスを閉じて、2ボッチが整列していることを確認してください。
解決策4:一度アプリを削除して再インストールしてください。
解決策5:バッテリーを交換してみてください。
これらの解決策のいずれも動作しない場合は、TrackR公式サイトから電子メールを送り、我々は交換のために手配することができます。

TrackRはどのデバイスと互換性がありますか?
すべてTrackRデバイスは、Bluetooth Low Energy(Bluetooth 4.0)と4.4以降のAndroidデバイス、iPhone 4S以降、iPadRetina以降で動作します。
お使いのデバイスに互換性があり、あなたが全額払戻しのため、あなたのTrackRsを返すようにしたい場合は、当社に従ってください。

複数スマートフォンと私のTrackRを接続することはできますか?
いいえ。TrackRは一度に1電話/アプリ/デバイスに接続することができる。同時に複数のデバイスに接続することはできません。

TrackRとのペアリングが出来ない。
TrackRは一度電池を外すと再度セットアップが必要です。
再セットアップの前に、端末のBluetooth設定から以前ペアリングしたTrackRを削除する必要があります。

UP24を買って一週間

UP24買って二週間たって感想をまとめたかったんだけど場所がなかったからC#のメモ書いてたここに。


まず先に悪い点
 ・食事登録のデータベースの数が少なく自分で新しく追加出来ない
 ・パワーナップの最大睡眠時間で30分以下が選べないから15分だけ寝るから起こして。が出来ない?
 ・webでもデータを見れたらいいのに。
 ・Androidとの自動同期が気付くとエラーになってる

特に食事関連はちょっと残念。
せめて自分で入力したものが登録されればいいのに。
自分として面倒過ぎて食事登録は断念。
同期エラーはちょっと面倒ではあるけどそこまでではない。
旧モデルの有線と比べたら全然楽。


次に良い点
 ・自分の活動量が見れるのが楽しい。
 ・リマインダが地味に便利
 ・振動が意外と強くて仮眠の目覚ましにいい
 ・電池が結構持つ
 ・Withings体重計と勝手に同期してくれる
 ・連携アプリが豊富
 ・運動を記録するのが楽しいので運動したくなる。
 ・睡眠モードに切替忘れても寝ていた時間を推測してくれる

「活動量が数字で出てくるのが面白い」ってのがなんとも文字化しづらいけど、要は着けてて楽しい。


他の機能として
浅い睡眠時に起こしてくれるスマートアラーム
とか
仮眠時の目覚まし用のパワーナップ
とか
一定時間動いていないと教えてくれるアイドルアラート
とかはまだ試してない


つけ心地は全然問題ないけどキーボードが打つときにちょっと邪魔に思う時もある。
それ以外はほとんど意識しないくらい


概ねいい感じ!
ただ連携アプリのIFTTTの歩数イベントの作り方がいまいちよくわからんからその辺はこれから色々いじっていかないと。。。
何故か指定した歩数歩いてるのにイベントが上がらずTweetされない(ーー;

バージョン情報

f:id:fenri:20140828095815p:plain

1、プロジェクトを右クリック
  プロジェクトのプロパティ

2、アプリケションタブのアセンブリ情報選択
f:id:fenri:20140828100032p:plain


3、バージョン情報を記入

アセンブリ情報	アセンブリ属性	説明
タイトル	AssemblyTitle	プログラムの概要
説明	AssemblyDescription	プログラムの詳細な説明
会社	AssemblyCompany	会社名
製品	AssemblyProduct	プログラムの正式名称
著作権	AssemblyCopyright	著作権情報。記述形式は「Copyright (C) <西暦年> <会社名>.」(例:Copyright (C) 2001-2006 Digital Advantage Corp.)とするのが一般的
商標	AssemblyTrademark	プログラム名称などを商標登録していればその情報を記述する(例えば、Windows (R) は登録商標)。それ以外の場合は何も指定しなくてよい
アセンブリ バージョン	AssemblyVersion	.NETアセンブリ用のバージョン番号。.NET Frameworkのバージョン管理機能で使われる
ファイル バージョン	AssemblyFileVersion	Win32ファイル・システム用のバージョン番号
GUID	Guid	アセンブリを一意に識別するためのGUID(Globally Unique IDentifier)。
 アセンブリがCOM(Component Object Model)に公開される場合のタイプ・ライブラリのIDになる
ニュートラル言語	NeutralResourcesLanguage	ニュートラル・リソース言語。
 ここでリソースのカルチャ(=“ja-JP”や“en-US”などの言語情報)を指定することで、.NETアプリケーション内のリソース管理を担当するResourceManagerオブジェクトが
 メイン・アセンブリに含まれているリソースを検索しなくなるため、パフォーマンスが向上する
アセンブリを COM 参照可能にする	ComVisible	アセンブリ内のマネージ型をCOM(Component Object Model)から参照可能にするかどうか


Visual Studio 2005でバージョン情報を設定するには?[VS 2005のみ、C#、VB] − @IT