JXUGC #17 の感想とその他諸々
「JXUGC #17 お前の Xamarin アプリを見せてみろ!」で Xamarin.Forms 製のアプリを発表させていただきました.
ありがたいことに、皆様の投票で3位入賞をいただくことができました.
景品でいただいたサルです.
発表させていただいたアプリは現在 Android版のみ Google Play で公開しています.
Nexus 5X でしかテストしていないので表示ズレなどあるかもしれません.
また、Twitter の認証のあとに私のブログページへリダイレクトされますが、少し待っていただくとアプリ画面に遷移します(この理由は後述します).
過去のツイートを掘り出すときとかに使っていただくと便利かもしれません.
(実際に本記事のツイートの一部は SearchSQL を使って掘り出しています.)
今回は発表が10分と短かく、発表に入れられなかった部分を含めて感想を書いてみます.
発表させていただくことになった経緯
発表することに決めたのはちょうど1か月くらい前の 初心者向けXamarinハンズオン! の懇親会でした.
懇親会中、JXUGC #17 が話題に挙がります.
そのとき発表枠は 18/20 という状態で、まず @qwerty2501 さんに白羽の矢が立ちます.
そして @qwerty2501 さんがその場で発表枠に申し込み.
田淵さん「サンテア君が発表枠じゃないんだよね~(・∀・)ニヤニヤ」
サンテア「∑(゚Д゚)!?」
という流れで、田淵さんを含め回り方に背中を押していただく形で発表を決めました.
このときアプリの進捗は、Twitter API をちょろっと触り始めたくらいで、ページ1つもできていないという、わりと見切り発車の中アプリ開発が始まりました.
サンテアの Xamarin 歩み
発表のときにも述べさせていただきましたが、私は Xamarin を始めてまだ半年(8ヶ月だった)です.
Xamarin を始める前は、WPF, Android を少しやっていて、iOS もほんの少し分かるという感じでした.
ここで私がどのような感じで Xamarin を学んできたのかご紹介します.
2月中旬 ちょまどさんに感化されて Xamarin を始める
このときはまだ Xamarin が MS に買収されていなかったので学生特権でBUSINESSアカウント取得しました.
なのでBUSINESSアカウント持ってたり、Windows 版の Xamarin Studio 持ってたりします.
3月26日 JXUGC #11 Xamarin ハンズオン大会に参加する
ここで初めて JXUGC に参加しました.
田淵さんともここで初めてお会いしました.
Xamarin.Forms すげー!となったのですが、Custom Renderer という魔の響を聞いて、やっぱ Xamarin.Native のほうが無難なんじゃないかと尻込みしました(;´Д`)
3月~4月 Xamarin.Android を触る
もともと Android をやっていたのでまずは Xamarin.Android から始めました.
最初はやれメソッドがプロパティになってるとか、Andorid のイベントが他のイベントに置き換わってるとか、やりずらさはあったんですが慣れるとむしろ書きやすかったりします.
わりと興奮したのが CoodinatorLayout のような Android 特有の View が Xamarin でも使えることでした.
このとき Xamarin.Android 作っていたスプラトゥーン用のアプリは力尽きてお蔵入りしています…
5月7日 JXUGC #13 東京 緊急開催 Xamarin のすべて!に参加する
13:00~18:30 という大ボリューム!
(今回のも似たような時間割ではありましたがw)
なんかやばいのもいくつかあったのですが、初心者に向けた発表もけっこうあり、とても勉強になりました.
この発表で Xamarin.Forms 押しの方が少なからずいらっしゃって、私もここで Xamarin.Forms に再度興味を持ちます.
今回の発表で Xamarin.Forms が多かった(もしかして全部かも?)のは JXUGC #13 が少なからず影響しているのではないかと思ったり思わかったり…
6月~7月
Xamarin.Forms を色々触ってました.
Xamarin.Forms で GPS と加速度のロギングアプリ作ってみたり、OxyPlot でグラフ描いてみたり.
このときはググりながら書き方を学んでいました.
8月10日 JXUGC #16 Xamarin.Forms Custom Renderer ハンズオンに参加する
@ticktackmobileさんによる Custom Renderer ハンズオン.
ここで Custom Renderer と仲良くなります.
多少手順は複雑ですが、順を追っていけば自分でも書けると実感.
Xamarin.Forms の世界がまた一つ広がりました.
そして9月のハンズオン、今回の発表会と続きます.
振り返ってみて思うのは、JXUGC が色々なことの起点となっていることです.
やはり勉強会に参加すると色々な方の知見を吸収できるというのもあるのですが、それ以上に、自分にモチベーションを注入できるというのが大きいのかなと思います.
新しいことを知ったら試してみたくなりますし、すごい発表を見たら自分も頑張ろうって気持ちになります.
そして JXUG にはそんな気持ちにさせてくださる方がたくさんいらっしゃって、本当にいつも勉強させていただいております.
Xamarin はいいぞ!だけでなく、JXUG はいいぞ!JXUGCはいいぞ!
SearchSQL について
Xamarin.Fomrs で作りました.
ほぼ PCL で統合されていて、Custom Renderer は一ヵ所しか使っていません.
まぁこれは Nexus 5X でしかテストしていないのでOS間差異、解像度間差異を吸収できていない可能性があり、別個 Custom Renderer を使わないといけない可能性は十分にあります.
ページ数は全部で5ページなので、かなり小規模なアプリに分類されると思います.
使っているライブラリ
このように、Model-View-ViewModel にわたって色々ライブラリを使っています.
開発の道のり
開発期間はだいたい1ヵ月半くらいです.
半分くらいは文字列のパース方法を考えるのに使いましたが、最終的に DynamicLINQ に処理を全部任せています.
今回の開発はほぼほぼ文字列のパースと Twitter API との格闘で、View はライブラリにお任せスタイルたったので Xamarin.Forms の沼にはあまり踏み込めていません.
ひとつ苦しんだのは、ListView や SfDataGrid などの ItemSource に値をバインディングするのを ViewModel の OnNavigatedTo でやってしまうと正常に動かないことでした.
どうも OnAppearing をフックしていないのが関係しているらしいというのは分かったのですが、まだよく確認はできていません.
そして今回一番面を食らったのがこのアイコンで申請したがために”なりすまし”でリジェクトされたことですw
他にも ListView の画面や TreeMap の画面をスクリーンショットで載せたら著作権違反で再度リジェクトされました.
申請するのもなかなかに大変です(Apple はもっと大変ですよね…)
みなさんの反応
SearchSQL、TwitterをSQLっぽく検索できるアプリ!発想が面白い #JXUG
— キクタロー (@kikutaro_) October 15, 2016
— ぴた﨑ねる (@pittanko_pta) October 15, 2016
おお、面白そうだ!Twitterのツイート検索アプリ #JXUG
— ちょまど@MS入社して5ヶ月 (@chomado) October 15, 2016
入りはなかなか良かった模様
すげ、めっちゃエンジニア向けwww #JXUG
— キクタロー (@kikutaro_) October 15, 2016
これTwitterのAPIしらないと使えないのではw #jxug
— 黒澤ッ㌠@大湊警備府ジェミナ鯖 (@kurosawa0626) October 15, 2016
— Crocus (@crocus7724) October 15, 2016
入力方法がマニアックすぎるw( ゚Д゚) #jxug
— tonkun (@tonkun_no) October 15, 2016
すごいむき出し感ww #JXUG
— Hide (@fjmthdk) October 15, 2016
— キクタロー (@kikutaro_) October 15, 2016
#JXUG
すごい、これ全部ユーザー手打ちか! pic.twitter.com/iGfE3lNNbt— ちょまど@MS入社して5ヶ月 (@chomado) October 15, 2016
bansheeにも昔スクリプディングホストが入っていたことあるし、まあ違和感ないw #jxug
— Atsushi Eno (@atsushieno) October 15, 2016
想像してたアプリの斜め上で面白いw #JXUG
— げんき印の桃団子 (@gnk_f327) October 15, 2016
ユーザに無理を強いるアプリwww #JXUG
— そらたん (@sorasora_chu) October 15, 2016
やはりツッコミが入る入力部分
でも面白く感じていただけたようで嬉しいですw
なんかつもりん臭がする… #jxug
— 黒澤ッ㌠@大湊警備府ジェミナ鯖 (@kurosawa0626) October 15, 2016
なんだかつもりんを感じるぞ #jxug
— いせ (@iseebi) October 15, 2016
あとでお聞きしたのですが、同じようなことをされている方がすでにいらしゃったようです(つもりんさん誰…
えーー!!わたしが1位じゃなかったー!
!悔しいー!!! #JXUG— ちょまど@MS入社して5ヶ月 (@chomado) October 15, 2016
おー、すごい。こんなパネル表示できるのか #JXUG
— キクタロー (@kikutaro_) October 15, 2016
ふぉおおお!ちょまどさん1位!!!(知ってた) #JXUG
— どいつま@留年芸人 (@d01tsumath) October 15, 2016
俺7番目なのw #jxug
— 黒澤ッ㌠@大湊警備府ジェミナ鯖 (@kurosawa0626) October 15, 2016
ピースしてはしゃいでるちょまどさん可愛すぎかよwwwwwwwww #JXUG
— どいつま@留年芸人 (@d01tsumath) October 15, 2016
某社勢2人いたしw #jxug
— いせ (@iseebi) October 15, 2016
勢力図がわかって面白い笑
#JXUG— よしだまさあき (@myoshidan) October 15, 2016
名前かプロフィールにXamarinって入れれば割って入れた気も← #JXUG
— ともぴー@月1台湾国民 (@tomoppy) October 15, 2016
#JXUG
ドヤァアアアアアアアアアア
イェーイ!見て見て〜!ひゃふー!ヽ(ヽ *゚▽゚*)ノわーい! pic.twitter.com/AKidzuTu4f— ちょまど@MS入社して5ヶ月 (@chomado) October 15, 2016
この時、本人ピースして跳ねてましたからね #JXUGhttps://t.co/o0aEOptxgo
— ざまりん.ふぉーむずマン? (@ticktackmobile) October 15, 2016
フォローワー数でのソートは受けがよかった!
私はこのとき間違えないように入力するのに精一杯で全然回りを見れなかったのですが、ちょまどさんにお喜びいただけたようですねw
ゆるふわ詐欺じゃね?w #JXUG
— nuits.jp (@nuits_jp) October 15, 2016
— もくだい Office 365 MVP (@mokudai) October 15, 2016
おい
私はこの最初のスライドを覚えているぞ。
誰が最弱ゆるふわだって????????????(ゆるふわどころかすごい強い感じの話が続いている) pic.twitter.com/ylxHt3s7MM
— ちょまど@MS入社して5ヶ月 (@chomado) October 15, 2016
強い #jxug
— かずき@働きたくないでござる (@okazuki) October 15, 2016
ゆるふわ勢の感想「Xamarin 簡単じゃん」 #JXUG
— これがあめいの選択だよ (@amay077) October 15, 2016
— 黒澤ッ㌠@大湊警備府ジェミナ鯖 (@kurosawa0626) October 15, 2016
みなさんに比べればゆるふわです!!
ライブラリに頼り切ってる部分が多いので…
発表としてはデモをすごく評価いただけたようです.
10分間の構成のうち、デモで6分以上使っているのですが、これは上手くいったかなと思います.
デモで使ったクエリ
SELECT Tweet
FROM Tweets(Query: #JXUG. Count: 500, ResultType: recent, Lang: ja)
WHERE !Tweet.Text.Contains("RT") AND Tweet.CreatedAt.LocalDateTime > DateTime.Parse("2016-10-15")
ORDER BY Tweet.RetweetCount DESC
SELECT User
FROM Users(Query: Xamarin, Count: 200)
WHERE User.Language = "ja"
ORDER BY User.FollowersCount DESC
今後直したいところ、付加したい機能
Twitter 認証時のリダイレクト先が自分のブログになっていること
Twitter の認証時にリダイレクト先を指定しないといけないのですが、ローカルの html を指定する方法がわからなかったので暫定的に自分のブログにしていました.
昨日 @yamamo さんにお聞きしたところによるとローカルの指定はできないとのことですので、どこかにテキトーなページを置こうと思います.
例外処理がわりとひどいこと
はい、見た目の通りひどいです.
開発した本人としてはこれ以上なくわかりやすいんですが、もう少しユーザフレンドリーなメッセージにしないといけません.
GROUP BY句、HAVING句の追加
現状、SELECT, FROM, WHERE, ORDER BY句だけで、集合演算も使えない仕様になっています.
また、テーブルの JOIN も行えません.
SQL のおいしい所がまったく使えないのでここは機能を拡張したいところです.
ただ、文字列のパースが DynamicLINQ 任せで、DynamicLINQ が集合演算に対応していないのでどうしようかなぁという感じです…
その他いろいろあるんですが、まったりと改修していければと思います…
感想
発表して本当に良かったです.
締め切りがなければこんなに頑張ることもなかったと思います.
田淵さんを始め、懇親会で背中を押していただいた方々には本当に感謝です.
ありがとうございました.
また開発途中で、Twitter で私の疑問にお答えいただいた皆様もありがとうございました.
@Santea3173 @qwerty2501 今日は発表頼んじゃったけど、資料作成や発表の練習とか何かあれば手伝うから、気軽に言ってね。でも、二人が持ってる物は共有する価値のある話だと思うし、二人に取っても貴重な機会だと本心から思ってます。楽しんで頑張ろう!
— nuits.jp (@nuits_jp) September 17, 2016
特に @nuits_jp さんには色々気遣っていただいたり、たくさんリプいただいたりとお世話になりました.
ありがとうございました.
今年の内でも JXUG のイベントはまだまだたくさんあるようなので、参加させていただく予定です.
今後ともどうぞよろしくお願い致します!
最後に、今回「君の名前は…!!」的なことがけっこうあって、お名前とお顔がある程度一致してきました.
自分の中で、強くてちょっと怖い人筆頭格なあの人がとても気さくな方だったとわかったのは良かったです笑
ディスカッション
コメント一覧
まだ、コメントがありません