20130412 titanium meetupvol7

21
TiQiita作ったら結果的にオレオレフ レームワークも出来た photo by Ars Electronica http://www.flickr.com/photos/arselectronica/4950684667/ 13412日金曜日

Upload: hiroshi-oyamada

Post on 28-Nov-2014

1.501 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 3: 20130412 titanium meetupvol7

小山田 浩(@h5y1m141)

エンジニアではありませんが趣味でTitaniumいじっていて勉強したことをブログ書いて

います

JavaScript(JScript,Titanium Mobileな

ど)経験2年程度※最近はCoffeeScript好き

13年4月12日金曜日

Page 4: 20130412 titanium meetupvol7

Agenda• これから話すこと• 最近作ったTiQiitaを簡単に紹介• 自分の中の設計方針• お世話になったライブラリ• 今日話さないこと• ソースコードの細かい解説※気になる方はLT終了後お声がけ下さい

13年4月12日金曜日

Page 6: 20130412 titanium meetupvol7

アカウント認証画面

左側のメニュースライド

「Emacs」投稿一覧

投稿情報詳細

Qiitaへストック

ストック情報表示

以前の投稿読み込み

引っ張って更新

Demo

13年4月12日金曜日

Page 7: 20130412 titanium meetupvol7

・MVCモデルを意識して分割・1メソッド1画面を心がける・ 先人の知恵を活用してスパゲッティコード化を防ぐ

photo by aagiushttp://www.flickr.com/photos/aagius/

自分の中の設計方針

13年4月12日金曜日

Page 8: 20130412 titanium meetupvol7

ディレクトリ構成Resources

├── controller├── test├── model└── ui

coffee

├── controller├── test├── config├── model└── ui

はてなAPI 利用する際のConsumerKey等の情報をJSON形式のファイルで格納

{"consumerKey": "S0=xxx","consumerSecret":

"xxxxx"}

13年4月12日金曜日

Page 9: 20130412 titanium meetupvol7

├── baseCommand.coffee├── configCommand.coffee├── getFeedByTagCommand.coffee├── getFollowingTagsCommand.coffee├── getMyStocksCommand.coffee├── getOldEntryCommand.coffee├── getStocksCommand.coffee├── hatena.coffee├── loginCommand.coffee└── qiita.coffee

MVCモデル

├── activityIndicator.coffee├── alertView.coffee├── configMenu.coffee├── mainTable.coffee├── menuTable.coffee├── progressBar.coffee├── statusView.coffee├── webView.coffee└── window.coffee

uiModel

├── commandController.coffee├── mainContoroller.coffee└── menu.coffee

Controller

13年4月12日金曜日

Page 10: 20130412 titanium meetupvol7

Model概要①メニューに対応する処理を実装

(GoFのCommandパターン適用)

loginCommand_showStatusView()_hideStatusView()

baseCommand_showStatusView()_hideStatusView()

getMyStocks()execute() _showStatusView()_hideStatusView()

getMyStocksCommand

13年4月12日金曜日

Page 11: 20130412 titanium meetupvol7

Model概要②WebAPIと連携する

qiita_auth()_mergeItems()_mockObject()_storedStocks()_request()_convertLinkHeaderToJSON()_mergeItems()_parsedResponseHeader()isConnected()

getStocks()getFollowingTags()getFeed()getNextFeed()getMyStocks()putStock() : ~以下略~

login()postBookmark()

hatena

TiplatformConnectを利用

13年4月12日金曜日

Page 12: 20130412 titanium meetupvol7

View概要

mainWindow

configWindow

WebViewWindow

configMenu

webView

mainTable

menuTable

alertViewprogressBar

13年4月12日金曜日

Page 13: 20130412 titanium meetupvol7

Controller概要• mainController• 基本的にはModelとViewの橋渡しはこのControllerが担う

• commandController• mainControllerに集約してもよかったが、Commandパターンで実装してるModelが増えたので別に切り出した

13年4月12日金曜日

Page 14: 20130412 titanium meetupvol7

先人の知恵:menuTableの各項目をクリック後の

処理はCommandパターン

1.qiita.getMyStocks()実行2.次ページのURL情報が後々必要になるためTi.App.Propertiesで格納3. ActivityIndicatorの制御4.その他・・

getMyStocksCommand()

13年4月12日金曜日

Page 15: 20130412 titanium meetupvol7

お世話になったライブラリ

https://github.com/viezel/NappSlideMenu

moment.jsmomentja.js

TiPlatformConnect

NappSlideMenu Module

スライドメニューはネイティブモジュール活用

「xx時間前」みたいなやつを実現するCommonJSなもの

Kosuke Isobe@k0sukey

13年4月12日金曜日

Page 16: 20130412 titanium meetupvol7

GitHub上にコードありますので気になる方はご覧くださいー

https://github.com/h5y1m141/TiQiita

13年4月12日金曜日

Page 17: 20130412 titanium meetupvol7

またまた宣伝を・・

これじゃなくって、ストリートアカデミーで告知してるTitaniumの勉強会を宣伝させてください

13年4月12日金曜日

Page 18: 20130412 titanium meetupvol7

こんなことをやろうとしています

http://www.street-academy.com/myclass/44313年4月12日金曜日

Page 19: 20130412 titanium meetupvol7

サイトで告知してる内容• <こんな事を教えます>

• Titanium Mobileを使ったスマフォアプリの作り方

• <こんな事が出来るようになります>

• RSSリーダー風アプリのようにサーバーサイドと連携するスマートフォンアプリが作れるようになります。

• <所要時間と当日の流れ>

• 1回あたり60分程度。数回のシリーズものとして実施予定

• 開催場所は高田馬場にある10°cafeというお店でごはんでも食べながらカジュアルな雰囲気で進めていこうと思ってます

• <想定参加者>

• 「こんなスマートフォンのアプリが欲しい」と具体的なアイデアを持っててHTML/CSSのコーディング程度は可能なレベル

13年4月12日金曜日

Page 20: 20130412 titanium meetupvol7

おまけ:今これ作ってます。2週間程度でここまで出来ました

13年4月12日金曜日

Page 21: 20130412 titanium meetupvol7

ご清聴ありがとうございました

13年4月12日金曜日