やっと起きたエンジニアのメモ

ruby, js, 興味の赴くままに

Android Wear 勉強会 #1 に参加してきた #AndroidWear

仕事で平日の勉強会に参加できずにいたので、久しぶりの勉強会となる。

Android Wear 勉強会 #1 : ATNDAndroid Wear 勉強会 #1 : ATND


GoogleからSDKが公開されたのは知っていたので、ネットサーフィンしてたら見つけたのが今回の勉強会との出会いで!!

勉強会の構成はこんな感じ。

  1. 19:00-19:20 Android Wearインパクトとこれから(仮):塚本昌彦 教授(@tuka000)
  2. 19:20-19:40 Android Wearの概要とポテンシャル(仮):@kojira
  3. 19:40-20:00 Apple Notification Center Service(ANCS)とAndroid Wearの比較 :@gclue_akira
  4. 20:00-20:20 Android Wear vs Pebble vs Sony SmartWatch vs Tizen Wearable :@sys1yagi
  5. 20:25-20:45 wearのUIガイドライン解説と円型画面UXのポイント:@yukio_andoh
  6. 20:45-20:55 Wearアプリ開発経験談(仮) :@korodroid
  7. 20:55-21:00 iBeaconをトリガーにしたAndroid Wear :@amyu_san

感想

本当にためになるお話でした。登壇者および関係者の皆さん、ありがとうございます。
また、登壇者は泣きながらコードを書いてるwってことを始めて知りました。


まだまだ自分にとっては未知のドメインであるAndroid Wearについて、コンセプト、概要、デモ、UI/UX、Beaconなど沢山の刺激をもらいました。
短い時間ではあったが色々な視点でのお話を聞けました。(休憩時間がなかったので、トイレに行くタイミングを逃しましたが、、)



さっそく、Developer Previewにサインアップして自分で触ってみることにしよう。



Sign Up for the Developer Preview | Android DevelopersSign Up for the Developer Preview | Android Developers


Android Wearのプロモーションムービーはコレ!!

Android Wearインパクトとこれから(仮):塚本昌彦 教授(@tuka000)

現状と今後のAndroid Wearについてとスマートウォッチの機能、難点、形状についての話。
特に、複数のウォッチ連携の話は面白そうだと感じた。(教授もスマートウォッチ3つつけてたけど、まだ連携はできていないそうな。。)


ウォッチ以外にも連携できるデバイスが出てくるはずなので、色々な連携が増えていくと思う。
ただ、通信方法について基本Bluetoothのようなのでもっと別の通信方法を組み込んだデバイスがあってもよいね。


どんなセンサーがあるのかは公開されていないようだけど、シンプルな操作性によって子供や老人、視覚・聴覚障害を持つ方々でも
手軽にコミュニケーションを取れる手段として発展していくと、もっともっとハッピーなアイテムが増えていくと思う。


Android Wearの概要とポテンシャル(仮):@kojira

実際にスマートフォンとスマートウォッチについてSDKに含まれるサンプルを使ってのデモ。
デモの内容よりも、デモ中の「大好き」に心奪われた。


ちなみに、僕はAndroidのコードとは2010年のデブサミで購入した「Android Hacks」が最初の出会いだった。

Android Hacks ―プロが教えるテクニック & ツール

Android Hacks ―プロが教えるテクニック & ツール


デモで知ったことはスマートウォッチのエミュレータは音声には対応していないため、
音声の代わりにテキスト入力で開発を進めることができる。
アプリは文字ベースで情報を取得するので、音声を意識せずに開発できるのも楽に感じる。


逆に音声を使ってアプリ側でごにょごにょできないのは寂しい気もする。
音声自体を使った通信にも興味があったのに、、


Apple Notification Center Service(ANCS)とAndroid Wearの比較:@gclue_akira

話の内容は聞いていて面白そうだと感じた。
ただ、ANCSとか初めて聞いたわけで、、、理解している人にはもっと面白いお話だったことだろう。。


具体的な通信の仕組み(Notification)理解、面白そうなアイデアのきっかけをくれたセッションでもある。
資料が公開されているので、調べながら知識を深めていこう。


Android Wear vs Pebble vs Sony SmartWatch vs Tizen Wearable:@sys1yagi

スマートウォッチの競合比較についてと実際に触った感想。
それぞれの開発環境についての説明は今後試すよいきっかけになったと思う。


COOKPADでのAndroid開発秘話なんかも聞いてみたいと思った。

wearのUIガイドライン解説と円型画面UXのポイント:@yukio_andoh

デザイナー参加率0%というなかでのデザインのお話。
僕自身もデザイナーではないけれど、UXについて参考となるお話だったと感じている。


スマートウォッチは円形と四角形しか現状無いけれど、今後は型破りな形のデバイスも出てくると思う。
また、glancabilityと音のデザインについては、新たなパターンが生まれる予感。



Wearアプリ開発経験談(仮):@korodroid

セカイフォン+SmartWatch2→セカイフォン+Android Wearのお話。ドラえもんの「ほんやくこんにゃく」と言えばわかりやすいかな。
実際開発するにあたって、経験に基づいたお話を聞けたのはありがたい。


iBeaconをトリガーにしたAndroid Wear Android Wearの王道的名使い道:@amyu_san

タイトルは変わったが、より開発者視点の話だった。

amyu_sanの見解としてプロモーションムービーに出てくるQRコードを利用した搭乗手続きは
現状のSDKではできないというお話も実際に試してみたくなるね。
あと、試してみたくなったのが「Adding Pages to a Notification + Stacking Notifications」の動作。



当日は、発熱もあってビアバッシュに参加できなかったのが残念だったので、次回の勉強会では参加したいな!!

Android Studio テーマの変更方法」

Andoid Studioを使ってみることにしたときに、デフォルトのテーマの変え方が分からなかったのでメモしておく。

といっても、分かってしまえば簡単なのだけど、、

テーマ自体はgithubに結構あるので、自分に合ったテーマを探してみるといいと思う。

OtaK/jetbrains-monokai-sublime · GitHubOtaK/jetbrains-monokai-sublime · GitHub

jeromevdl/android-holo-colors-idea-plugin · GitHubjeromevdl/android-holo-colors-idea-plugin · GitHub

Color Themes & FontsColor Themes & Fonts

カラーはいいのだけれど、しっくりくるフォントを見つけるのが大変な気がする。

テーマとなる.jarファイルをダウンロードしたら、Android Studio上で「File > Import Settings...」からダウンロードしたファイルをするだけでした。


設定後にAndroid Studioが再起動して設定完了。


これからは、ちょくちょくAndroid開発についても触れていこうと思う。。

リファクタリング・ウェットウェア- 達人プログラマーの思考法と学習法 - 読了

だいぶ前に読み終えていた良書。

より優れた学習技術をマインドマップにまとめた。

習慣づくまでは思い返してみようと思う。

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

ゲーミフィケーション―がビジネスを変える 読了

ちょうどこの本を読む前にリファクタリング・ウェットウェアを読んだので、マインドマップを書いてみた。

紙とペンでマインドマップを書くのに比べると、ツールを使うとなんでもかんでも詰め込んでしまうみたい。



この本では、どうやって「ソーシャル」に「ゲームの要素を取り入れる」かを実際の企業やアプリを例に記載してある。
バッジウィル、スカベンジャー、フォースクエア、フェイスブック・・・のお話が多かったので、、


構成としては、
前半:「ゲーミフィケーションって何?」
後半:「ゲーミフィケーションを考える」
って流れだったと思う。

個人的には、前半より後半の話の方が面白かった。(読んでみることをおすすめする。


ゲーミフィケーションって、ゲームを作るって思われがちだけど、「ゲームの要素を取り入れる」ってことらしい。
また、ゲームの要素の取り入れやすさがソーシャルにあるってわけだ。(そんな時代が到来したわけね。
で、ソーシャルゲームとかが爆発的に普及したことで、商品販売とも紐つくようになったと。

いろんなこと書いてあったけど、自分としては「動機づけ」「記録」「時間の獲得・最適なタイミング」が興味深かった。

「動機づけ」

「外発動機づけ」と「内発動機づけ」については、ほかの本にも載っている内容(モチベーション3.0だったかな
どちらも重要で、両立する関係にあったような。

「外発動機づけ」を経て「内発動機づけ」へと遷移することがポイント。
簡単に言えば、はじめは「餌」を与えることでモチベーションをあげて、
その後は、自らの好奇心や関心によってモチベーションを維持・向上させることで継続して使ってもらうようにする。

外発動機づけ
義務、賞罰、強制などによってもたらされる動機づけである。
         
内発動機づけ
好奇心や関心によってもたらされる動機づけであり、賞罰に依存しない行動である。

                                          引用元:wikipedia - http://bit.ly/bfepVu

「記録」

なにかを計測して、記録を取ることがゲームになるってこと。
また、記録を取るためのセンサーが充実してきたことが、ゲーム環境の拡大につながったようだ。

ライフログなんかをみると、日常生活のあらゆるものが計測できる環境になったと感じる。
あとは、センサー自体(キネクトとか)が安価になったことも要因と考えられる。

「時間の獲得・最適なタイミング」

そもそも、人間の欲望とは時間の経過と共に衰退していくというお話。
どうしたら衰退化を抑止できるかというと、「フィードバックの高速化」があげられる。

そういった意味でも、今は、ゲーミフィケーションを取り入れやすい環境になってきたんだと思う。
スマートフォンが普及して、どこにいてもツイッタースカイプフェイスブックなどが使用できる環境ができあがっている。
すばやいフィードバックによってモチベーションの維持・向上にもつながっている。


ここまでは、前半のお話。後半では、じゃあどうやって実践するの?とか、問題点、争点なんかが説明されている。

一番実践して欲しいと思ったのが、

ゲーミフィケーションを使って、家族がいる社員を定時であがらせるようにすること」

でした。これは、とてもよい発想だと思った。


ゲーミフィケーション―<ゲーム>がビジネスを変える

ゲーミフィケーション―<ゲーム>がビジネスを変える

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

リファクタリング・ウェットウェア ―達人プログラマーの思考法と学習法

yield を使ってみた

yieldって遅いからあまり使わないみたいだけど、使う機会に巡り会った^^

コンテキスト キーワード yield - C# リファレンス | Microsoft Docs

List>型のデータをフラット(配列)にする必要があって、初のyieldを使うことになった。(データ量は100程度だったので速度は気にならなかった。

namespace Sample
{
    public class MyItem
    {
        public Guid ID;

        public MyItem()
        {
            this.ID = Guid.NewGuid();
        }
    }

    public class MyItems : IEnumerable<MyItem>
    {
        public List<MyItem> itemList = new List<MyItem>();
    
        public IEnumerator<MyItem>  GetEnumerator()
        {
            return this.itemList.GetEnumerator();
        }
        
        IEnumerator  IEnumerable.GetEnumerator()
        {
 	    throw new NotImplementedException();
        }
    }

    class YieldSample
    {
        static void Main(string[] args)
        {
            List<MyItems> itemList = new List<MyItems>();
            // データ格納
            ・・・

            foreach (var item in GetEnumerable(itemList))
            {
                Console.write(item.ID);
            }
        }

        public static IEnumerable<MyItem> GetEnumerable(List<MyItems> itemsList)
        {
            foreach (var itemList in itemsList)
            {
                foreach (var item in itemList)
                {
                    yield return item;
                }
            }
        }
    }
}

スッキリ書く事はできたと思う。。

Developers Summit 2012 (二日目)に行ってきた - #devsumi

去年に続き、2回目のデブサミに参加してきました。

両日共に参加予定だったのですが、、仕事の都合で二日目のみの参加になりました。。
一日目に参加できなかったコトを悔やむ。。


参加セッション

「10年後も世界で通じるエンジニアであるために」

  • 【17-B-1】差別化で未来を生き抜くエンジニアの7つの秘訣 山本 裕介 氏
  • 【17-A-2】仕事のバトン、渡っていますか? - プロジェクト管理におけるコミュニケーション基盤作り 鈴木 雄介 氏
  • 【17-B-3】言語の世界 まつもと ゆきひろ 氏
  • 【17-B-4】マイクロソフトの変化を体現するAzureエバンジェリスト2人が語る今後10年を見越したオープン戦略 砂金 信一郎 氏 / 佐藤 直生 氏
  • 【17-B-5】アジャイルマニフェスト ディケイド 角谷 信太郎 氏
  • 【17-B-6】Building scalable web apps Christopher Stolt 氏
  • 【17-D-7】実践Android Developer Testing 吉澤 毅 氏 / 持田 真哉 氏 / 長谷川 孝二 氏 / 松木 晋祐 氏

セッション資料はデブサミ2012、講演スライド資料まとめ:CodeZine(コードジン)にまとめられていました。

参加してみて

うーーん。
良くも悪くも考える時間を作るきっかけにはなった気がする。

山本さんの話を聞いて、ほんとそう思ったのは10年後のことなんてわかるはずもないと思った。
でも、10年後に自分が何をしていたいか?は自分で決めることができるんだよね。
そこに「差別化」がくっついてくる感じなのだろう。
強く印象に残ったのは”困っとことを解決してくれる”アイツになるってフレーズ。
当然のことだけど、そうなるしかないよね。




角谷さんの話を聞いて、「自然なソフトウェア」に惹かれた。
それは、小難しい事ではないけど、今の自分には実践するのがとても難しいと感じた。
なんでなんだろう。。って考えてみると、自分が外部に対して輪を広げられていないということなのだろう。(時間という制約も、、


あと、重要なのはコンテキストであって、自分たちでモノにしていくしかない。
そのままやっても上手くいくはずがないというのは当たり前のこと。
そもそも、アジャイルやろうとかスクラムやろうとか、、そんなんだから失敗するっていう失敗を経験したしね。

じっくり考えて、自分で答えをだすとしよう。

10年後には世界でも通じるエンジニアになるために、、

そもそも、世界で通じるエンジニアとは??から考える必要があるけれど。

XmlSerializerのデシリアライズで空白が削除されないようにする

とあるバグの調査中に気づいたこと、、今更感もあるけどメモしておく

XMLのデシリアライズ時に、要素の空白が削除されていることに気づいた。

空白をデータとして扱いたいのに、削除されているとは、、Σ(゚Д゚|||)

例えば、区切り文字を要素として格納する場合、区切り文字を空白として指定すると
下記のコードではデシリアライズで空白が削除される。

      XmlSerializer serializer = new XmlSerializer(typeof(Delimiter));
      Stream reader= new FileStream(filename,FileMode.Open);     
      Delimiter delimiter;

      delimiter = (Delimiter)serializer.Deserialize(reader);

空白を残したい場合にはXmlDocument.PreserveWhitespaceプロパティを使用する必要があるみたい。
XmlSerializerクラス自身が持っていればいいのに、、

仕方がないのでこんな感じで書いた。

      XmlSerializer serializer = new XmlSerializer(typeof(Delimiter));
      Stream reader= new FileStream(filename,FileMode.Open);
      XmlDocument doc = new XmlDocument();
      doc.PreserveWhitespace = false;
      doc.Load(reader);
   XmlNodeReader nodeReader = new XmlNodeReader(doc.DocumentElement);
      Delimiter delimiter;

      delimiter = (Delimiter)serializer.Deserialize(nodeReader);

もっといい書き方もあるんだろうが、、現状はこんな感じ