学生マーケティング会議企画 Powered by Mozilla  学生マーケティング Firefox  学生向けアドオンパック × × × × ×
スピーカー紹介 佐藤文毅 上智大学法学部法律学科4年 会議メンバーで数少ない文系 パソコンに関する知識が無いため、会議の内容についていけないこともしばしば
スピーカー紹介 守山晃生 元学生  ( 社会人 1 年目 ) 昨年 11 月の  Firefox Developer Conference 2009  の発表後から参加 http: //mozilla .jp/events/2009/fxdevcon/ 開発チーム id: cou929
学生向けアドオンパックのコンセプト
Firefox    を学生に広めるために頑張っています Mozilla Japan で行われる学生向けのプロモーションやイベントのアイデア出しをするミーティングをしています メンバーは全員学生 ミーティングは、お菓子を食べながら結構軽い感じでやってたりw 学生マーケィング会議って ??
IE よりも 玄人 向け;;  アドオン ? Personas ? なにそれ? 理系 大学生も 意外と知りません・・・
実は…  使うと IE には戻れなくなる 友達に使ってもらうと意外と好反応!! 自分好みにカスタマイズできちゃう !
もっと Firefox を広めるために・・・ 学生が欲しい機能を盛り込んだ アドオンパック を作ろう!!
学生にとって便利な機能満載に 初心者でも使いやすい Firefox  を使ったことがない人でも使える インターネット= IE  と思っている人でも ( 以下略 ) PC  をあまり触らないひとでも なんでこんな機能がついてるの? -> へぇー Firefox っていうんだ! を目指して きっかけづくり 学生向けの  Firefox  を作ろう !
どんな機能があったらいい ?
全部実装すると… こんなのだったり
ごちゃごちゃしてわかりづらい 初心者にはとっつきにくすぎる? 怖い、意味分かんない いろんな機能があっても使わない てか、使えない 「直感的に使えるもの」 に絞ることでライトユーザー向けにしようよ! まずは興味を持ってもらう。 はじめの一歩に! 全部実装すると…
アドオンパックの中身 ①  Personas ②  Undo Closed Tab Button ③  ステータスバーに  Yahoo!  の天気予報を ④  Linkification ⑤  オススメアドオン紹介 ⑥  フォクすけの  Firefox  サポート ⑦  論文検索オプション ⑧  次電 + ( つぎでんぷらす ) 既存のアドオン オリジナル    アドオン
① 初心者でも使いやすいか ② 学生のニーズに合っているか ③ 直感的に便利、もしくは斬新だと思ってもらえるか  (いままで使っていたブラウザより良いと思えることが大事)   既存のアドオンの選択基準
学生向けアドオンパックの使い方 https://dev.mozilla.jp/campus/
インストール 初回起動ページ Personas の選択
収録アドオン 既存のアドオン 4 つ オリジナルアドオン 4 つ
既存のアドオン Personas plus https: //addons . mozilla .org/en-US/firefox/addon/10900 Undo Closed Tab Button https: //addons . mozilla .org/en-US/firefox/addon/3082 ステータスバーに Yahoo! 天気予報を https: //addons . mozilla .org/en-US/firefox/addon/77194 Linkification https: //addons . mozilla .org/en-US/firefox/addon/190
Personas plus 簡単に見た目を変更
Undo Closed Tab Button 閉じたタブを復元 初心者は重宝
ステータスバーに Yahoo! 天気予報を ステータスバーに天気予報を表示
Linkification URL をかしこくリンクに変換
オリジナルアドオン オススメアドオン紹介 フォクすけの  Firefox  サポート 論文検索オプション 次電 + ( つぎでんぷらす ) https://dev.mozilla.jp/campus/what/
オススメアドオン紹介 今見ているサイトをさらに使いやすくしてくれるアドオンをサイト別に紹介
オススメアドオン紹介 初心者ユーザのアドオンに関する興味を高め , Firefox  のカスタマイズに挑戦してもらう
フォクすけの  Firefox  サポート Firefox  初心者のためのヘルプ機能 Google  で  Firefox  に関する質問を検索 ポップアップを表示 サポートサイトへ誘導 http://support. mozilla . com/ja/
論文検索オプション Google scholar  へのリンクを  Google  の検索結果上部に挿入 理系学生向け
次電 + ( つぎでんぷらす ) よく利用する学校等の最寄駅やバス停の発着時刻を“ OpenTimetable.jp” というサイトに登録 ブラウザの右下に「今出たら、何分の電車やバスに乗れるかが常に表示される 作業に熱中しすぎて電車やバスに 乗り遅れることもなくなります ! OpenTimetable.jp  について詳しくは後述
OpenTimetable.jp みんなで作る時刻表
OpenTimetable.jp 次電 +  旧バージョン 駅探 , google transit  のデータ使用を想定 ライセンスの問題で使用できないことが判明 既存の路線探索システムを使うと ,  その情報を利用する際にライセンスに引っかかってしまう
OpenTimetable.jp みんなで作る時刻表 ユーザが時刻表のデータを入力 http://opentimetable.jp/
OpenTimetable.jp ライセンスの問題をクリア オープンソースという考え方の啓蒙 特徴 通常の乗換案内サービスで対応できない情報もあつかうことが可能 大学内のバス路線 開発者向け API を提供 誰でも時刻表データを利用可能  (CC BY-SA)
OpenTimetable.jp  の使い方 検索画面 路線名 ,  駅名 ,  方面 ,  曜日 ( 平日  or  休日 )  を入力
OpenTimetable.jp  の使い方 検索画面 見つからない場合は入力を促す画面を表示 編集画面へ
OpenTimetable.jp  の使い方 検索結果
OpenTimetable.jp  の使い方 検索結果 入力済みのデータも編集可能
OpenTimetable.jp  の使い方 編集画面
OpenTimetable.jp  の使い方 1.  ラベルを選択 電車の種別など
OpenTimetable.jp  の使い方 2.  時刻を選択 数字をクリック
OpenTimetable.jp  の使い方 3.  ニックネーム ,  コメントを入力し確定
API 時刻表のデータを取得 http: //opentimetable . jp/dev/api/getTimetable . php パラメータ r:  路線名 p:  駅名 b:  方面 t:  曜日 JSON
API 時刻表の 4 要素 ( 路線名 ,  駅名 ,  方面 ,  曜日 ) を取得 http: //opentimetable . jp/api/getTimetables . php JSON
拡張機能の実装
Agenda ブロックスコープ JS Modules Memorization JavaScript 1.8, 1.8.1  での記法 ロケーションバーの変化の検出  (Progress Listeners) インストール済アドオンの取得
Agenda ブロックスコープ JS Modules Memorization JavaScript 1.8, 1.8.1  での記法 ロケーションバーの変化の検出  (Progress Listeners) インストール済アドオンの取得
ブロックスコープ 名前空間を汚染したくない ブロックスコープを実現する
素直な方法  ( ブロックスコープではない ) 1 つのオブジェクトの中で全部済ませる シンプルで簡単 _ などの命名規則が必要 アクセス時に  this.  または  myExtension.  が必要 setTimeout() などのコールバックの中で this が切り替わってしまい不便
let  によるブロックスコープ シンプルで簡単 Firefox2 以降に限定 遅延初期化はプロパティにアクセスさせる必要
クロージャを用いた方法 this が必要ない グローバルなつもりで使えるので ,  コールバック関数内でも使いやすい よく利用されており ,  書きやすい・読みやすい 全体が 1 つの関数になるため ,  デバッグの際に各メソッドに対してブレークポイントを設定できない
クロージャを用いた方法 2 new  コンストラクタを用いる 特徴は先ほどと同様
with を用いた方法 ブレークポイント設置可能 anonymous object  内での変数・関数の定義では this を気にする必要がある 定義が複雑化すると , this の扱いが面倒
Agenda ブロックスコープ JS Modules Memorization JavaScript 1.8, 1.8.1  での記法 ロケーションバーの変化の検出  (Progress Listeners) インストール済アドオンの取得
JS Modules js のコードをモジュール化 拡張からインポートして使う 特徴 コードの再利用が可能 一度読み込んだモジュールをキャッシュ 2 回目以降のロードではキャッシュされたモジュールが返される パフォーマンス的にも有利 シングルトンのオブジェクトのように使える
モジュールの定義  - JS Modules my_modules.jsm EXPORTED_SYMBOLS エクスポートするオブジェクトを入れる 注意点 window, document  などの一般的な環境ならば存在するオブジェクトがない XMLHttpRequest  オブジェクトなどもグローバルに存在しない etc. https://developer. mozilla . org /ja/Using_JavaScript_code_modules
モジュールの利用  - JS Modules Components.utils.import() 第一引数 :  モジュールの URL スキーマは  resource  か  file 標準モジュールでない場合は  chrome.manifest  で指定 第二引数 :  インポートしたオブジェクトを展開したいスコープ ( オブジェクト ) 省略するとグローバル https://developer.mozilla.org /ja/Using_JavaScript_code_modules
他の方法との比較  - JS Modules Performance/Addons/BestPractices https: //wiki . mozilla . org/Performance/Addons/BestPractices
他の方法との比較  - JS Modules XUL 中の  <script>  で読み込む ウィンドウを開くのが遅くなる 各ウィンドウ毎に別の処理する必要がある場合のみ使う  ウィンドウを読み込むごとにモジュールも読み込まれる XPCOM JS Modules  の方がシンプルで早い mozIJSSubScriptLoader 読み込みをキャッシュせず ,  毎回ロードする
JavaScript code modules - MDC バンドルされている ctypes.jsm PluralForm.jsm XPCOMUtils.jsm etc. https://developer.mozilla.org/En/JavaScript_modules
Labs/JS Modules Mozilla Labs  製 JSON.js Observers.js Prefereneces.js StringBundle.js Etc. https://wiki.mozilla.org/Labs/JS_Modules
Preferences.js Preferences  を楽に使う https: //wiki . mozilla . org/Labs/JS_Modules #Preferences 従来 https://developer.mozilla.org/ja/Code_snippets/Preferences
Preferences.js set() reset() get()
StringBundle.js StringBundle を楽に使う https: //wiki . mozilla . org/Labs/JS_Modules # StringBundle コンストラクタ get()
StringBundle.js getAll()
Agenda ブロックスコープ JS Modules Memorization JavaScript 1.8, 1.8.1  での記法 ロケーションバーの変化の検出  (Progress Listeners) インストール済アドオンの取得
Memorization getter  をメモ化 Performance/Addons/BestPractices https: //wiki . mozilla . org/Performance/Addons/BestPractices # Memoization 初回に呼ばれた時 にはじめて作られる 起動時での処理を回避 遅延初期化 以降はキャッシュされたオブジェクトが返る
Agenda ブロックスコープ JS Modules Memorization JavaScript 1.8, 1.8.1  での記法 ロケーションバーの変化の検出  (Progress Listeners) インストール済アドオンの取得
JavaScript 1.8, 1.8.1  での記法 JavaScript 1.8  : Firefox 3 (Gecko 1.9) Array.reduce() 式クロージャ JavaScript 1.8.1 : Firefox 3.5 (Gecko 1.9.1) String.trim() 参考 https://developer.mozilla.org/ja/New_in_JavaScript_1.8.1 https://developer.mozilla.org/ja/New_in_JavaScript_1.8 https://developer.mozilla.org/ja/New_in_JavaScript_1.7
JavaScript 1.8, 1.8.1  での記法 Array.reduce()  (1.8) 配列の ( 左から右へ ) 2  つの値に対して同時に関数を適用し ,  単一の値にする syntax callback 関数 例  配列内の要素の総和 https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Objects/Array/reduce
JavaScript 1.8, 1.8.1  での記法 Array.map()  (1.6) 配列の要素それぞれに対して関数を適用し ,  新たな配列を返す syntax 例 各要素の平方根 https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Array/map
JavaScript 1.8, 1.8.1  での記法 式クロージャ  (Expression closures, 1.8) 単純な関数の簡略表現 コールバック関数を書くときなどに便利 https://developer.mozilla.org/ja/New_in_JavaScript_1.8#.e5.bc.8f.e3.82.af.e3.83.ad.e3.83.bc.e3.82.b8.e3.83.a3
JavaScript 1.8, 1.8.1  での記法 String.trim()  (1.8.1) 文字列の両端の空白を削除 trim(), trimLeft(), trimRight() https://developer.mozilla.org/Ja/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim
Agenda ブロックスコープ JS Modules Memorization JavaScript 1.8, 1.8.1  での記法 ロケーションバーの変化の検出  (Progress Listeners) インストール済アドオンの取得
ロケーションバーの変化の検出 ロケーションバーの URL の変化を検出したい 進む・戻るボタン タブ切り替え ページのロード Progress Listener  を使う https://developer. mozilla . org/ja/Code_snippets/Progress_Listeners
ロケーションバーの変化の検出 nsIWebProgressListener  インタフェースを実装
ロケーションバーの変化の検出 作成した  Progress Listener  を  browser  か  tabbrowser  要素に追加
ロケーションバーの変化の検出 unload  時 ( あるいはもっと速く ) に removeProgressListener  を呼ぶ
Agenda ブロックスコープ JS Modules Memorization JavaScript 1.8, 1.8.1  での記法 ロケーションバーの変化の検出  (Progress Listeners) インストール済アドオンの取得
インストール済みアドオンの取得 現在のプロファイルにインストール済みの拡張を取得したい nsIExtensionManager  を使う http: //mxr . mozilla .org/mozilla-central/source/toolkit/mozapps/extensions/nsIExtensionManager. idl
インストール済みアドオンの取得 nsIExtensionManager アドオンのインストールや管理の機能を提供 getItemList(2, {}) アドオンの一覧を取得 引数はアドオンの種類 ( 拡張機能なので 2) 返り値は nsIUpdateItems http://www. oxymoronical . com/experiments/apidocs/interface/nsIUpdateItem
今後の予定 リリース 今月中 各大学にインストールしてもらえるよう交渉 PR 活動 ソーシャルメディア イベント開催 etc. 次期バージョンの開発 大学個別のカスタマイズなど
参加者大募集 !! 一緒に企画・開発に携わってくださる学生の方を募集中です サイトごとのオススメアドオンをオススメしてくれる人 OpenTimetable.jp  への時刻登録  ( いたずらはやめてね ) ドキュメント ,  開発 , etc… お問い合わせは [email_address] まで !!

Firefox 学生向けアドオンパック

Editor's Notes

  • #6 まずはじめに、学生マーケティング会議って?? [Enter] Firefox のマーケティング活動を行っている組織 Mozilla Japan で 行われる学生向けのプロモーションやイベントのアイデア出しをするミーティングのことです。 [Enter] ミーティングは、お菓子を食べながら [Enter] こんな感じで結構軽い感じでやってます。 [Enter] 3 学生マーケティング
  • #7 [Enter] 学生から見た Firefox って?? [Enter] [Enter] ・ IE よりも玄人(くろうと)向けというイメージがかなり強かったり [Enter] ・理系大学生の中でも Firefox の知名度は意外と低めだったり [Enter] ・アドオン? Personas ?何それ?って感じの人がすごく多いのが現状です。 ちなみにアドオンとは Firefox を自分の好みに合わせてカスタマイズすることのできる機能のことです。 また、 Personas とは Firefox の見た目を簡単に変えることのできるアドオンのことです。 Personas を使うことで Firefox を自分好みに可愛く、おしゃれにすることもできます。 [Enter] 4 学生マーケティング
  • #8 [Enter] 僕らの考える Firefox 像とは [Enter] [Enter] ・友達に無理やり使ってもらうと結構、好反応だったり [Enter] ・使ってみると IE には戻れなくなるというぐらい Firefox に 病みつきになったというような意見をもらったので [Enter] このようにどんどん使ってもらって知名度の向上を目指していきたいと考えています。 [Enter] 5 学生マーケティング
  • #10 ではここからは石川が具体的な内容を説明させていただきます。 いろいろな案が出たんですけど、僕たちは大学生ということで、 Firefox のキャンパスエディションを作ろうということになりました。 初心者でも使いやすいエディションを作り、なんでこんな機能が付いているの? へー Firefox っていうんだ!っていう状態を目指します。 8
  • #11 頑張って考えましたw 9
  • #12 全部実装すると、こんな感じになりますね。 またはこんな感じとか 10
  • #13 まぁ、もちろん、実装すると初心者的には意味がわからないどころか「怖い」って思ってしまう。つまり、使わないどころか使えないということにいとも簡単に陥ってしまいます。 なので、直感的に使えるものに絞り、はじめの一歩に僕らがなろうというコンセプトにしました。 11
  • #15 これからは、キャンパスエディションを作りながら広めます。 これにより より多くの人に Firefox の良さを理解してもらい、より多くの人に Firefox を使ってもらう! 13
  • #26 データは mozilla.jp のサーバに json を置いている .
  • #29 よく利用する学校等の最寄駅やバス停の発着時刻を“ OpenTimetable.jp” というサイトに登録しておくと、ブラウザの右下に「今出たら、何分の電車やバスに乗れるかが、常に表示されます。
  • #34 南北線 後楽園 赤羽岩淵 平日 七尾線 良川 金沢 平日
  • #47 ブロックスコープをしたい ブロックの中だけで変数を使いたい
  • #51 javascript の場合、 new で呼び出された際の関数が参照する this スコープは、 new された関数に閉じられる
  • #54 つかいまわし
  • #56 第二引数をなくしてもいいかも 省略するとグローバル 入れるとそのオブジェクトのプロパティに定義される Chrome.manifest 標準じゃないやつのときだけ
  • #58 Window を開くのが遅くなる 各ウィンドウごとに処理する必要がないならばやめるべき ( ウィンドウを読み込むごとに読み込まれる ) JSXPCOM を書くとでかくなるよね モジュールでかく方がシンプルではやい
  • #59 Ctypes.jsm JavaScript コードから C 互換な外部ライブラリ関数の呼び出しを可能にします。
  • #61 普通に書くとどうなるかと比較 型 Xpcom 型 Fuel 型なし メソッドが少ない Preference.js もっと便利 LIB.Preferences.get(“foo”);
  • #63 比較 xul
  • #64 すべての string を {key: foo, value: bar} という array で返す
  • #66 遅延初期化 起動時に重い処理をやらせたくない 例を XPCOM 読んでるやつにする Utils.jsm
  • #70 Javascript 1.6 -&gt; firefox 1.5 map に thisObject パラメータが与えられると、 callback の呼び出しのたびにそのオブジェクトが this として使用されます。 thisObject が与えられないか null だと、 callback に結び付けられたグローバルオブジェクトが代わりに使用されます。 callback は、要素の値、要素のインデックス、走査されている Array オブジェクトという 3 つの引数をともなって呼び出されます。
  • #71 Callback で使っているところの例 a1, a2 は array
  • #75 Recommend.processNewUrl(aUri) aUri がキャッシュしてた値と変わっていたら動くようにする
  • #76 順番を上へ
  • #77 Xpcom は自分で delete Window 閉じたときにはごみをとるために remove する必要がある