Xamarin.Forms で作った「はてなアプリ」の技術紹介

## 自己紹介
<img width="64" alt="2929454.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/25555/370aff75-8812-9876-ae45-58d894849869.jpeg">

- [@kobake_](https://twitter.com/kobake_)
- http://blog.clock-up.jp/
- https://github.com/kobake
- Xamarin 歴半年（実働1か月）くらい
- C# の仕様をよくわかっていない
- コピペに心を苦しめないタイプの人間

------------------------------------------
## 最近の活動
- C# はいいぞ
- Xamarin
  - 茅場町CO-EDO でほぼ毎月（？）もくもく会やってます  
→ JXUG http://jxug.connpass.com/
- ASP.NET MVC
  - ASP.NET Tips  
http://aspnet.clock-up.jp/
  - 日本C#ユーザ会  
http://csugjp.connpass.com

------------------------------------------
# C# はいいぞ

------------------------------------------
## C# はいいぞ
- サーバ・クライアントが別々の言語とか辛いんじゃ…
- サーバ・クライアントが同じ言語で書ければ…
  - サバクラで同じクラス定義が使えるぞーーやったぜ('ω')
  - （通信は JSON 形式とかで Serialize/Deserialize してやると楽）

------------------------------------------
## C# はいいぞ
- C# は静的な型付けができて最高ですね
- C# は Visual Studio で書けて最高ですね
- NuGet 最高ですね
- ちゃんと言語仕様理解しよ… https://www.oreilly.co.jp/books/9784873116501/

![picture978-4-87311-650-1.gif](https://qiita-image-store.s3.amazonaws.com/0/25555/a9779d56-acf5-1d89-dc3a-8fe1973ff030.gif)


------------------------------------------
# アプリの紹介

------------------------------------------
## アプリ名：Hatenatter
- はてなブックマークでフォローしているユーザのコメントを Twitter のタイムラインっぽく表示するアプリ

<img width="238" alt="capt_20161015_130948_00.png" src="https://qiita-image-store.s3.amazonaws.com/0/25555/6c67809c-7b98-c2c1-52c9-075c0a51ceff.png">

------------------------------------------
## Hatenatter ができるまで
- Twitter → 好き
  - 人間ドリブンのタイムライン → 好き
- はてなブックマーク → まあまあ好き
  - 記事ドリブンのタイムライン → ふーむ  
→ はてなにも「フォロー」機能あるぞい  
→ 人間ドリブンのタイムライン作れそう  
→ 作った (NOW)

------------------------------------------
## ソースコード
- https://github.com/kobake/HatenaProxy
- https://github.com/kobake/Hatenatter

コミットログはあまり見ないで欲しい。

## Google Play ストア
- https://play.google.com/store/apps/details?id=jp.clockup.hatenatter

------------------------------------------
## 動作
![output.gif](https://qiita-image-store.s3.amazonaws.com/0/25555/eb77ab3d-14b0-ccdc-071d-83872a4c034f.gif)

------------------------------------------
# 以降、技術の話

------------------------------------------
## はてなAPIについて
- はてなが提供している REST API があるという噂を昔聞いた
- とりあえずまずは認証 (OAuth) をしてみよう

------------------------------------------
## OAuth 難しい
- http://developer.hatena.ne.jp/ja/documents/auth/apis/oauth
- 勉強不足
- C# での OAuth サンプルなかなか見つからない
  - すごく助かったサンプルhttps://github.com/neuecc/AsyncOAuth/blob/master/AsyncOAuth.ConsoleApp/Hatena.cs

------------------------------------------
## はてなAPIについて２
- ブックマーク ↓  
http://developer.hatena.ne.jp/ja/documents/bookmark
- スター（お気に入り）付けるやつ↓  
http://developer.hatena.ne.jp/ja/documents/other/apis/favorite

ドキュメントを漁る暇がなくなってきたので
→ 次ページ

------------------------------------------
## はてなAPIについて３
はてな API の利用者それほど多くないので情報少なくてググラビリティ低くて迷いまくった
↓
結局スクレイピング (HatenaProxy)
↓
せっかく OAuth した意味ナッシング
（よくある徒労）

------------------------------------------
## 構成
[はてなサーバ **(NORMAL WEB PAGE)**]
　↑
[HatenaProxy (ASP.NET MVC)]
　↑
[Hatenatter (Xamarin)]



------------------------------------------
## やってること：以下ページをスクレイピング
http://b.hatena.ne.jp/kobake/favorite
<img width="300" alt="capt_20161015_142816_00.png" src="https://qiita-image-store.s3.amazonaws.com/0/25555/6f3bbdd5-bec6-193f-de6a-49e2b4b8d7cb.png">

http://b.hatena.ne.jp/kobake/
<img width="300" alt="capt_20161015_142744_00.png" src="https://qiita-image-store.s3.amazonaws.com/0/25555/eb94856f-a1a2-d739-af3c-b8cdff5fbc5d.png">

------------------------------------------
## Xamarin 環境関連で助かったもの
- [Enable XAML Language for Xamarin.Forms](https://visualstudiogallery.msdn.microsoft.com/8195a8e2-a842-4389-a8cb-34e4672e2e13)
  - xaml 編集時のインテリセンスを快適に。

- [Gorilla Player](http://gorillaplayer.com/)
  - xaml のリアルタイムプレビュー
  - これ無いと死ぬ

- [Genymotion](https://www.genymotion.com/)
  - Androidエミュレータ（速い）

------------------------------------------
## Xamarin 拡張機能で助かったもの
- [ACR User Dialogs Plugin for Xamarin and Windows](https://www.nuget.org/packages/Acr.UserDialogs/)
  - 多様なダイアログ機能。今回はローディング表示に使ってる。
  - 入力ボックス付きダイアログとかも使えたりして超絶便利。
  - ソースコード(サンプル付き) … https://github.com/aritchie/userdialogs

------------------------------------------
## C# 関連で助かったもの
- [Json.NET](https://www.nuget.org/packages/Newtonsoft.Json/)
  - JSON のパース
- [CsQuery](https://www.nuget.org/packages/CsQuery/)
  - HTML の jQuery 的なパース

---------------------------------------------
## 飽きないように気を付けます
- メンテナンスを「継続」することは難しいですよね

---------------------------------------------
## 宣伝
OSSにプルリクエストを送るもくもく会
2016-10-16（日）10:00 - 18:00
https://mocmoc.doorkeeper.jp/events/51952
コワーキングスペース茅場町 Co-Edo（コエド）  東京都中央区新川1-3-4 PAビル5F

現在の参加者**2人**

---------------------------------------------
## おしまい