Gaiaにプルリクを投げた話

544145f49d165a7f3cf63d09463b253a?s=47 TETRA2000
December 19, 2015

 Gaiaにプルリクを投げた話

544145f49d165a7f3cf63d09463b253a?s=128

TETRA2000

December 19, 2015
Tweet

Transcript

  1. Gaiaにプルリクを投げた話

  2. Gaiaとは https://developer.mozilla.org/en/docs/Mozilla/Firefox_OS/Platform/Architecture Gaia is the core web apps of the

    device, and user interface layer, all written in HTML5, CSS and JavaScript, with a number of exposed APIs to allow the UI code to interact with the phone hardware and Gecko functionality. だそうです。
  3. Gaiaとは • これら、みんなGaia (HTML/CSS/JS) • ロック画面、ステータスバーな んかも全部!

  4. gaia開発の流れ

  5. Bugzilla

  6. Bugzilla

  7. Bugzilla • Firefox OS 以外でも、mozilla製品全般のissue管理に利用 • 各スレッドはバグ番号で管理される • 不具合、新機能の提案などが書き込まれる ここから、Gaia関連のバグを読み漁り直せそうなものを探した

  8. mozilla-b2g/gaia (GitHub)

  9. mozilla-b2g/gaia (GitHub) • gaia部分の独立したレポジトリがGitHubにある • Pull Request送れる ◦ “Bub [バグ番号]

    - [説明]”の形式のタイトルをつける (テストケース実行などは枚数の都合上、割愛)
  10. gaiaを実行する

  11. Firefox OS Simulator

  12. FirefoxOS Sumulator

  13. FirefoxOS Sumulatorで動かす • DEBUG=1 DESKTOP=0 make • profileを変更して、ビルド先の ディレクトリを指定

  14. けど... • 自分の環境では起動直後にすぐ落ちてしまう... ◦ Gecko以下もnightlyのイメージを使わないとダメ? • 起動している間も、デバッガとは接続できない ◦ 設定の問題かも? シミュレータでの開発を諦める...orz

  15. 実機

  16. 実機にgaiaをインストール • なんといっても、実機が一番 • gaia部分だけを指定して、焼くことができる ◦ システムアプリを個別に焼くことも可能 gaia一括更新 “make reset-gaia”

    or “make install-gaia” アプリ個別更新 APP=calendar make install-gaia https://developer.mozilla.org/en- US/Firefox_OS/Developing_Gaia/Different_ways_to_run_Gaia#Using_Gaia_in_Simulator_via_WebIDE
  17. いざ、開発スタート

  18. Bug 1217825 - [calendar]support for 0 minutes events

  19. Bug 1217825 - [calendar]support for 0 minutes events • 文字通り、開始時間〜終了時間が0分の予定が表示されない

    • Googleカレンダーから読み込んだ際に発生したと書いてある ◦ (端末で0分の予定を作ろうとすると、開始日が勝手にずれて作れない ) • 2015/10/23に報告されて、割と放置されてる これを直してみる!!
  20. Calendar App • 使えるアカウント ◦ Google ◦ Yahoo ◦ CalDav

    今回はGoogleを使用
  21. 0分の予定を作成し...

  22. 比較用に30分の予定も一緒に作成

  23. 端末で同期してみる... 確かに、0分の予定は表示されない

  24. コードを読む

  25. gaia/apps/calendar とりあえずGitHubで読んでみ る

  26. すると...

  27. ん!?!?

  28. Bug 1181061 - Support for events with zero duration

  29. Bug 1181061 - You can't create an event starting and

    ending..
  30. Bug 1181061 - You can't create an event starting and

    ending.. • 端末で0分の予定が作れないというバグ • GitHubをみるまで、気がつかなかった • バグの重複を確認しなかった... ◦ ちなみに、PRは見つけた日の2日前にマージされてた • ステータスは“RESOLVED FIXED” もしかして、もう全部直ってる!?!?
  31. 端末上で0分の予定が作れた

  32. けど... Google Calendarで作った0分の予定は表 示されない... あくまで、端末での予定作成と表示の修正 のみ

  33. 残ってるバグを直す!!

  34. adb logcat • Androidで使えるものと同じ • logcatの内容が全部見れる

  35. カレンダーを起動してみると... I/Calendar( 4905): Content JS LOG: views/settings [calendar] "Will add

    calendar to settings view" {"remote":{"id":" /caldav/v2/****************%40virtual/events/","url":"/caldav/v2/****************/events/","name":"誕生日","color":"#bad600"," description":"Google の連絡先や Google+ の「あなたのサークル」内のユーザーの誕生日を表示します。また、Google の連絡先 に登録されている記念日や予定があれば、それも表示されます。","syncToken":"****************","privilegeSet":["read","read- free-busy","read-current-user-privilege-set","write-properties"]},"accountId":1,"localDisplayed":true,"lastEventSyncDate":" 2015-12-16T15:17:38.634Z","lastEventSyncToken":"****************","firstEventSyncDate":"2015-12-16T15:00:00.000Z"," _id":2} I/Calendar( 4905): at module.exports/< (app://calendar.gaiamobile.org/js/bundle.js:3543:5) I/Calendar( 4905): Content JS LOG: views/settings [calendar] "Will add calendar to settings view" {"remote":{"id":" /caldav/v2/****************/events/","url":"/caldav/v2/****************/events/","name":"日本の祝日","color":"#df4784"," description":"日本の祝日と行事","syncToken":"****************","privilegeSet":["read","read-free-busy","read-current-user- privilege-set","write-properties"]},"accountId":1,"localDisplayed":true,"lastEventSyncDate":"2015-12-16T15:17:38.637Z"," lastEventSyncToken":"****************","firstEventSyncDate":"2015-12-16T15:00:00.000Z","_id":3}
  36. adb logcat • 既ににそれっぽい内容がログに出てる • console.logとかでデバッグできそう

  37. 出力できた!!

  38. テストコードを手がかりに探す • fixturesにicalのダミーデータがあった • ダミーを使ってる箇所から辿っていく

  39. test/service/caldav_test.js

  40. test/service/caldav_test.js

  41. js/service/caldav.js

  42. js/service/caldav.js

  43. ざっと、こんな感じ • 長くなるので割愛 • きちんと記録をとっていないので、どう読んだか覚えてない...orz • 基本的にデータの流れを追っただけ

  44. dtendが無い!! I/Calendar( 3905): Content JS LOG: worker/manager [calendar] {"name":"worker","message":" service/caldav,

    [calendar] , {\"component\":[\"vevent\",[[\"dtstart\",{\"tzid\":\"Asia/Tokyo\"},\"date-time\",\" 2015-12-16T03:00:00\"],[\"dtstamp\",{},\"date-time\",\"2015-12-15T16:49:25Z\"],[\"uid\",{},\"text\",\" lbflmq7d0tdtisbenmd4pj45tk@google.com\"],[\"created\",{},\"date-time\",\"2015-12-15T16:49:25Z\"],[\" description\",{},\"text\"],[\"last-modified\",{},\"date-time\",\"2015-12-15T16:49:25Z\"],[\"location\",{},\"text\"],[\" sequence\",{},\"integer\",0],[\"status\",{},\"text\",\"CONFIRMED\"],[\"summary\",{},\"text\",\"test\"],[\"transp\", {},\"text\",\"OPAQUE\"]],[[\"valarm\",[[\"action\",{},\"text\",\"DISPLAY\"],[\"description\",{},\"text\",\"This is an event reminder\"],[\"trigger\",{},\"duration\",\"-P0DT0H30M0S\"]],[]]]],\"_rangeExceptionCache\":{},\" exceptions\":{},\"rangeExceptions\":[]}"}
  45. dtendが無い!! • いろいろ調べると0分の予定の場合、終了時刻を示す dtendプロパティが渡されて いないことがわかった • そのため、その後の計算で落ちてた http://search.cpan.org/~rfrankel/iCal-Parser-1.16/lib/iCal/Parser.pm

  46. 無理やり補う (けど、これでいいのか???)

  47. 同期できた!!

  48. けど... • Yahooカレンダーで、終日予定の繰り返しの場合は開始時刻 = 終了時刻 となる仕 様がある • それ用の修正と競合して、終日予定扱いされてしまう...

  49. とりあえずPR打つ

  50. テストも勝手に回ります

  51. おわり • まだレスポンスは来てない • 変更内容的に、テストの修正も必要になるかも • 終日予定になる問題は、どちらかというとYahooのデータがおかしいので、直すとし たらそっちを切り分ける感じ

  52. 参考 https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Developing_Gaia https://developer.mozilla.org/en- US/Firefox_OS/Developing_Gaia/Different_ways_to_run_Gaia#Using_Gaia_in_Firefox_Mulet https://developer.mozilla.org/en- US/Firefox_OS/Developing_Gaia/Submitting_a_Gaia_patch#Easy_patch_submission_with_Autolander https://developer.mozilla.org/en/docs/Introduction https://developer.mozilla.org/en-US/Firefox_OS/Phone_guide/Flame/Updating_your_Flame

  53. 参考 https://developer.mozilla.org/en- US/docs/Mozilla/Firefox_OS/Developing_Gaia/Running_custom_builds_in_WebIDE https://developer.mozilla.org/en- US/Firefox_OS/Developing_Gaia/Different_ways_to_run_Gaia#Using_Gaia_in_Simulator_via_WebIDE https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Developing_Gaia/Build_System_Primer https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Developing_Gaia/make_options_reference http://search.cpan.org/~rfrankel/iCal-Parser-1.16/lib/iCal/Parser.pm