<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
><channel><title>Web scratch &#187; Firefox</title> <atom:link href="http://efcl.info/category/firefox/feed/" rel="self" type="application/rss+xml" /><link>http://efcl.info</link> <description>フリーソフトやFirefoxなどについて、web全般なサイト</description> <lastBuildDate>Sat, 14 Apr 2012 15:37:26 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.2</generator> <item><title>Mozilla Vision 2012 Conference Day アウトラインメモ</title><link>http://efcl.info/2012/0121/res2997/</link> <comments>http://efcl.info/2012/0121/res2997/#comments</comments> <pubDate>Sat, 21 Jan 2012 13:44:16 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[イベント]]></category> <category><![CDATA[javascript]]></category><guid
isPermaLink="false">http://efcl.info/?p=2997</guid> <description><![CDATA[Mozilla Vision 2012 – Conference Day Mozilla Vision 2012 Conference Dayに参加してきたので、その時のメモです。(いつも通り正確性は保証されません) &#038; [...]]]></description> <content:encoded><![CDATA[<h1 style="margin-top: 0px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; font-weight: bold; font-style: normal; font-size: 30px; line-height: 36px; font-family: inherit; color: #404040; padding: 0px; border: 0px initial initial;">Mozilla Vision 2012 – Conference Day</h1><p><a
href="http://mozilla.jp/events/vision/2012/conference/">Mozilla Vision 2012 Conference Day</a>に参加してきたので、その時のメモです。(いつも通り正確性は保証されません)</p><p><img
title="NewImage.png" src="http://efcl.info/wp-content/uploads/2012/01/NewImage.png" alt="NewImage" width="448" height="600" border="0" /></p><p><span
id="more-2997"></span></p><p>&nbsp;</p><h1>Boot to Gecko</h1><p>B2G = Boot to Gecko</p><h3>なぜ必要なのか</h3><p>モバイルは閉鎖的すぎる</p><p>過去を振りかえる</p><ul><li>2002年 ブラウザの場合</li></ul><p>IE のみだったので、拡張性はなかった。 拡張する必要がなかった</p><p>やがて複数のブラウザが登場して競争するようになった。 ブラウザ間で実装の競争が起こると</p><ul><li>UXが良くなる</li><li>ユーザーはハッピーになる</li><li>標準化も良くなっていく -&gt; 書き手もハッピー</li></ul><h3>ブラウザとモバイル</h3><p>モバイルプラットフォームは閉鎖的で、プラットフォーム側がコントールできるようにしている。</p><p>様々なプラットフォームに対応しようとするとそのプラットフォームに対応しないといけない -&gt; 時間の無駄になってる。</p><p>プラットフォームを移行するとデータが移行できない。 このようなsilosがあるとオープンではない</p><p>これを変えるためにB2Gを作っていく。</p><h3>Webプラットフォームができる事</h3><p>オープンなものにするために必要なもの</p><ul><li>オープンなApp Marketsが必要</li><li>プラットフォーム間を移行する際にデータも移行できる Firefox Syncのデバイスを超えた同期システム。</li><li>BrowserID</li></ul><p>ネイティブアプリだと使えるケドWebからは使えないモバイルの機能があるのはWebのバグなども</p><h3>Boo2Gecko</h3><p>B2Gに必要なもの</p><ul><li>iOS負けないUX</li><li>オープンスタンダートを構築する。B2G以外でも同じAPIが利用できる</li><li>Apps。Web自体がapp storeみたいなもの</li></ul><h3>デモ</h3><ul><li>ロックスクリーン、ホーム画面もWebアプリとして実装されている</li><li>60FPS出るようにしている</li></ul><p>電話ができるようにWeb APIとしてDevice APIを実装してある。 ネイティブコードではなくてWebの技術で実装されている。</p><p>ホーム画面もHTMLベースなので、ソースコードが見られる</p><ul><li>Quake 3を使ったアプリ<ul><li>WebGLのエンジン</li></ul></li></ul><p>クラッシュしたけど、直ぐ立ち上がる。</p><h3>B2Gの実装</h3><p>iOSなどのネイティブAPIの代わりに、Webエンジン/標準化されたDevice APIsがあり、ネイティブUIの代わりにWebベースのUIが存在する。</p><p>すべて再開発するわけではなく、Webレイヤー以外の部分は既存のものをサイっ利用したりする。</p><p>Gonk ( Androidのものも再利用) WebランタイムにMozillaは集中開発して、GPSなど他の部分に関してはAndroidのコードを利用する。</p><h3>B2Gは何がしたい</h3><ul><li>モバイルをオープンにしたい</li><li>プランや開発やソースコードもオープンにしている</li><li>作成したAPIを標準化したい</li><li>オープンなエコシステムを作成したい</li><li>Boot2Webkit など他の実装も作れるようにしたい</li><li>B2Gで動くものはB2Wでうごくようになるべき</li></ul><p>一からはじめたプロジェクトではない。 Androidのコミュニティ</p><h3>Q&amp;A</h3><p><em>Q</em> どのようにして標準化していくのか。 それぞれの実装に対してそれぞれのUIがあるから、ポートする作業していく必要がでていく。 Gaiaに対してのUIのガイドラインが必要</p><p><em>A</em> 標準化していくのはシステムのテーマ</p><p><em>Q</em> non-nativeなものを場合、ゲーム等最大限の性能出すためにネイティブAPIを開発するの?</p><p><em>A</em> ネイティブAPIを実装するつもりはない。 WebGLがOpenGLが遅ければそれはWebのバグである。 クロスプラットフォームを常に担保していくという目的を持っているので、少し遠回りでもWeb APIをやっていく。</p><p><em>Q</em> アプリが落ちたときに他のシステムを巻き込むの?</p><p><em>A</em> プライオリティの高いものを別のプロセスを走らせる事もできる。 OSがとても軽量なので、全てがダウンしても直ぐに起動できる。</p><p>電話のプロセスは別のものとして動いてるのでOSがダウンしても生きてる。 プロセスのセパレーションと呼ばれるものが実装できてる。</p><p>Linuxカーネルがあってその上にいくつかのXULや電話やBTなどのプロセスなどを起動していく。そして最後にB2Gのプロセスが起動して、その中でWeb Appが起動する。</p><p>Chromelessのようなイメージで、全てがiframeのようなものになって、iframeにマニフェストを与えて、iframeを別プロセスで動作させることができる。</p><p><em>Q</em> どのようにB2Gを提供していくか? Mozillaがサポートするの?</p><p><em>A</em> Mozillaは直接デバイスを出荷することはなく、 Mozilla Phoneパートナーと一緒してやっていく。 メジャーなキャリアとはやり取りを始めていて、最終的にそのキャリアが出していくことになる。</p><p><em>Q</em> デバイスを買ってきて、OSとしてB2Gを後入れるということはできるの?</p><p><em>A</em> 今サムソンのデバイスを使ってるが勝手に入れてる。 なので、将来的にはより多くのデバイスをサポートして行って、そのような事が可能になる</p><h1>Web 標準の今、そして未来</h1><p>Tantek Çelik</p><p>スライド : <a
href="http://tantek.com/presentations/2012/01/open-web/">Open Standards Stories &amp; Practices</a></p><p>CSSの標準化に参加したことについてのお話</p><ul><li>ISO</li></ul><p>買った上で誰でも見ることができる =&gt; 昔のオープン</p><ul><li>CalConnect</li></ul><p>お金を払った上にテストに参加できる。 テストスイートなのに、対象が限定されている。</p><p>W3Cはだれても見られるオープン</p><ul><li>W3C tests</li></ul><p>CSS WGはレポートを公開していたので誰でも見ることができた。 CalcConnectは公開してはいけないという縛りがあった</p><p><strong>オープンなテストは再現性が担保されている</strong></p><h3>まだCSS WG不満があった</h3><p>更にテスト、レポートをオープンにしていく必要がある。</p><ul><li>Blog</li><li>Wiki</li></ul><p>CSS WGのWikiを作成した。まだ閉ざされていた部分があったが、IRCやバグトラッカーなども公開していくようにした。</p><p>当時にメーリングリストはあったが、W3Cのメンバーでないとみられないようになっていたが、テクニカルな内容のものは全てPublicにしていくようにした。</p><ul><li>editor &#8216;s drafts</li></ul><p>これもエディターが書いてる途中のものも公開していくようにした。</p><ul><li>last call</li></ul><p>2011になってCSS2.1がやっとRCになった。9年もかかった。</p><p>CSS3の確固たる基盤になるCSS2.1ができた。</p><h3>学んだ事</h3><p>オープンは進化する</p><h2>2. XFN</h2><ul><li>2003年</li></ul><p>SXSWという会議に参加した時の話。</p><p>ブログロールの仕組みについての会議で、ものすごく複雑な仕様になっていた。</p><p>rel=&#8221;friend&#8221;がついてればいいぐらいな簡単なものを提案した。</p><p>実際にどういう状態がfriendなのかについて調査した。</p><h3>CC</h3><p>XFNは初めてのCCライセンスを使ったオープンな標準化となった。 そこからフィードバックをもらってXFN1.1をリリースした。</p><h3>rel=me</h3><p>一番大きな6文字。自分を示すrel属性で、多くのSNSなどで使用されている。</p><h3>rel=me , OAuth</h3><p>２つを組み合わせることで、OpenIDをよりシンプルなものを実現できるでは?</p><p>XFNから学んだものは単純でシンプルであるべきということ</p><h2>3. MicroFormat</h2><ul><li>rel=license</li></ul><p>この時初めてMicroFormatという事が使われた</p><p>その頃はまだ標準に関するWikiがなかったので、Wikiで公開した。= 初めてのWikiで公開され知多Web標準</p><h3>人を表現するhtml</h3><p>classnameでつけていた習慣など、定義されていた言葉を元に定義した。</p><h3>hcard , hcalendar</h3><p>既にある用語を元に作成した標準。 既存のフォーマットを使用したので馴染みやすい。</p><h2>Webレビューのフォーマット</h2><p>いろいろ研究した</p><p>80/20の法則 : 比較などのある程度のフォーマットの表現が見えてきた</p><ul><li>hreview</li></ul><p>hreviewという標準化した</p><h3>microformats.org</h3><p>これまでの標準化団体とは少し異なる。</p><ul><li>プロセスそのものを文章化</li><li>今までの教訓を掲載した</li><li>IRCもオープンに</li><li>パブリックなログを公開</li></ul><p>wikiがemail以上の公式な文章であるとした。 -&gt; Wikiが厳格であるようにした</p><ul><li>IRCに変更をとばすbot</li><li>スパムの除去</li></ul><p>Wikiのイイ点としては同時に翻訳が行えるようになった。 今も標準化作業中に17ヶ国に翻訳作業がされている。</p><p>どんどんフィードバックを送る。標準化は誰でも参加ができる環境に翻訳は重要</p><p>Wikiは誰でも参加できる。W3Cは組織としての参加が必要になってる。</p><p>全てPublic domain / CC0にすることで全てがオープンであることを体現する。</p><h3>microformats2</h3><p>更にシンプルになるMicroformat。 ユーザーはシンプルなしようが求められる。</p><h2>4. HTML5</h2><ul><li>2004年</li></ul><p>W3Cのワークショップが始まり。</p><p>HTM + CSS + DOM VS XHTML2 +XForms +etc..</p><p>これまでを進化させていく方向　VS W3CのXML</p><p>incremental VS replace</p><p>進化させていくと置き換えていくの対決</p><p>HTML VS XML は8:11でHTMLは負けた</p><p>ベンダーはHTMlの方を支持していた。MS,Apple,Mozilla等</p><p>Web自体は進化しないと行けない</p><h3>WHATWGが設立</h3><p>ここでHTMLは進化していった。</p><p>Web Apllication specがHTMl5になっていった。</p><p>Core+new APIsという構成はCSSも同じ</p><p>WHATWGはMITライセンスをしようした!!! これまであるライセンスを再利用した</p><p>W3Cは独自のライセンス &#8211; フォークが許されないライセンス</p><h3>W3CとWHATWGの共通点</h3><ul><li>要素</li></ul><p>エディタを信頼する VS WG全体で協議する</p><p>というような対立が生まれてた。</p><h2>5. W3C CGs (コミュニティグループ)</h2><ul><li>2011年</li></ul><p>2011にW3Cコミュニティグループができた</p><p>あるテーマに関するコミュニティグループは4人いればできる</p><h3>CC0 &amp; OWFa の仕様</h3><p>Mozillaの弁護士にそれぞれ調べて持ったが、どちらもいい感じだった。 オープンに使えるライセンス。</p><h2>仕様作成の10個のベストプラクティス</h2><ol><li>オープンに作る(標準をオープンに作っていく)</li><li>オープンに反復を行う(完璧じゃなくてもいいから試行錯誤を出す)</li><li>オープンWikiを使う</li><li>オープンに討議をする</li><li>ブログ、Tweet、あらゆる手を使ってオープンに</li><li>オープンなアーカイブ&amp;ログ</li><li>Wiki編集はIRCに投げる</li><li>オープンテストスイート(堅牢、反復的に</li><li>テストレポートをオープンにする</li><li>可能な限りコミュニティを巻き込む( 多くの人を巻き込む)</li></ol><p>境界を超えた範囲で巻き込んだ作業をする。標準はグローバル</p><h2>Q&amp;A</h2><p><em>Q</em> MicroFormats以外に草の根的なものはありますか?</p><p><em>A</em> OAuthはメーリングリストだけでできてきた</p><p><em>Q</em> ベストプラクティスはWeb以外に対しても適応できる?</p><p><em>A</em> 他にも適応できるだろう.</p><p>Facebookがオープンプラットフォームということをやろうとしている</p><p><em>Q</em> W3Cのノンフォークライセンスだということだけど、コミュニティができてフォークが行われてる。W3Cが変わってきてるの?</p><p><em>A</em> 今は２つの方向ができてきてる。 HTML5はまだノンフォークなライセンスになってる。</p><p>将来的には切り替わるかもしれない。</p><h1>pdf.js — HTML5 と JavaScript の限界に挑戦する</h1><h3>なぜpdf.jsが必要なのか</h3><p>信頼されたネイティブコードは脆弱性があると問題になる。</p><h3>pdfに何が必要なのか</h3><p>portableなのに巨大なフォーマット</p><ul><li>Adobeのみが実装してるサブセットがある</li><li>pdfの一部サブセットを実装することを目的にした</li></ul><p>圧縮されたpdfを戻して、パースしてdrawTextみたい形にしてレンダリングする。</p><p>Document -&gt; ページとオブジェクトがある。</p><h3>HTML/CSS/JS</h3><ul><li>JavaScriptはTyped Arrayなどを使用して高速化</li><li>Fast 2D Canvas、GPUで加速的</li><li>CSS @fant-face フォントに対応、ダイナミックにフォントをロードする機能</li><li>data: URI バイナリデータをJavaScript上で作れる</li></ul><p>SVGなどを使わなかった理由もある。 = スピード</p><h3>pdf.jsの手順</h3><h4>ダウンロード</h4><p>バイナリデータをXHRでresponseTYpe = &#8220;arraybuffer&#8221;でダウンロードできる。</p><h4>デコード、解読、パース</h4><ul><li>PNG,LZWデコーダーをJavaScriptで書いた</li><li>パーサーもJavaScriptで書いた</li></ul><h4>レンダリング</h4><p>パースしたものをレンダリングしていくのが大変</p><ul><li>2D CanvasでLineやarcsなどを描いていく</li><li>bitmapもimgで描画する</li></ul><h4>問題</h4><ul><li>2DCanvasは十分ではなかった。</li><li>Dash line等Canvasには実装されてなかった。 even odd ruleなどもそう</li></ul><p>解決方法として2DCanvas自体を拡張していく</p><p>bitmap画像のデコードをサポートしてなかった。</p><ul><li>img と Canvasはjpeg2000</li><li>フォーマットを追加するのは大変</li><li>JavaScriptでデコーダーを書く</li></ul><p>フォントの問題</p><ul><li>OpenType , TrueTypesなどブラウザはサポートしてないTypeがあった</li><li>Type1は一番PDFで使わてるのにCSS Font faceでサポートされてない</li></ul><p>解決方法としてOpenTypeに変換して、中間フォーマット的にType1をサポートした。</p><p>まだまだやることはいろいろ</p><ul><li>Shading fillはCSS gradientsで実装されてる</li><li>Image Mask はCanvasがネイティブでできる</li><li>PostScriptオブジェクト &#8211; PostScriptのインタープリタをJSで</li><li>TYpe3フォント PDF.js自体でレンダリングを行ってる</li></ul><p>pdfをWeb技術でレンダリングする事に成功した。</p><h3>デモ</h3><ul><li>Web技術で実装するとモバイルでも動かせる</li><li>フルのPDFレンダラーがブラウザ上で走っている</li></ul><h3>PDFビューアーのUI</h3><p>UIを作っていく</p><ul><li>ページビュー(サイドでページをプレビューする)</li><li>ハイパーリンクのサポート</li><li>テキストの選択 &#8211; 難しい</li><li>テキストの検索 &#8211; 難しい</li></ul><h4>ハイパーリンクの実装</h4><p>2種類のリンク方式がある</p><ul><li>相互参照</li><li>外部リング</li></ul><p>Webブラウザが認識できるaリンクに変換した。 そのオブジェクトをpdf.jsでレンダリングした上にaリンクを重ねたものを表示して扱うようにした。</p><p>相互参照はポイントへ飛ぶようにしていて、バックボタンが機能するようになっている。</p><h4>テキストの選択</h4><p>Canvasは画素が並んでいるだけなので選べないが、オーバーレイに透過性を持ったdivタグでテキストを描画している。</p><p>アクセシビリティもサポートできている。</p><h3>pdf.jsの高速化</h3><h4>コンパイル</h4><p>pdf.jsはPDFのサブセットをレンタリング</p><ul><li>PDFレンダラーはインタープリタだった</li><li>PDFレンダラーのJITコンパイルする switch等をコンパイルしたら省略できるので、直接draw*を呼べるようにできて十数倍の動作速度が得られる。</li><li><a
href="http://blog.mozill*A*com/cjones/2011/06/15/overview-of-pdf-js-guts/">Overview of pdf.js guts &lt; Chris Pitchin&#8217; Hey</a></li></ul><p>ダイナミックなコンパイレーションを行なってFunction()で実行してる。</p><h4>Web Workers</h4><p>Web Workersを使って別のスレッドで、デコード、パース、フォント変換、デコードイメージを行う。</p><ul><li>main threadではdrawを行なっていく。(これはUIブロックを生む)</li><li>別スレッドで実行してるものはUIブロックの影響されない</li><li>同時併用でタスクを実行できるので高速化</li></ul><h3>pdf.jsの現状</h3><ul><li>大部分の機能は完成している</li><li>Firefox,Chromeの拡張して利用できる</li></ul><p><em>* HTML/JS/CSS Can redner PDFs *</em></p><h3>next</h3><ul><li>PDF内のテキストを検索</li><li>HTTP byte-rangeリクエストを使ってPDFを分割ロード。メモリの削減になる</li><li>Web Worker内でCanvasをサポート。UIブロックを潰せる</li><li>(maybe) WebGLで高速レンダリング？？？ GPUをもっと使える</li></ul><h3>質問</h3><p><em>Q</em> なぜCanvasを使用したのか?</p><p><em>A</em> JavaScriptが直接やり取りできる。SVGはDOMを経由しないといけないため、より早くするには難しい。</p><p>PDFではPDFファイルがあるのだからDOMを作成してやるのは不要だ。</p><p><em>Q</em> 政府などでフォームとしてPDFを利用する場合。インタラクティブなPDFな方向はするのか?</p><p><em>A</em> ２つのフォームフォーマットがある</p><ul><li>Acro format &#8211; 標準化されてる</li><li>XNA format &#8211; プロレタリア</li></ul><p>PDF.jsでも実装しやすい部類のもの。 AdobeではSpiderMonkeyベースのエンジンが使わていて、Validationが行われていたりする。</p><p>pdf.jsは100%のpdfのサポートするわけではないので、フォームなどのやり取りをべーすとするならばHTMLベースのほうがよいものになるかもしれない。</p><p><em>Q</em> セキュリティポリシーについて</p><p><em>A</em> pdf.jsの用途について</p><p><em>A</em> メールクライアントなどの場合 HTMLのセキュリティポリシーに寄っていく(クロスドメインの問題がでるかもしれない)</p><p><em>Q</em> テキストの描画方法</p><p><em>A</em> PDFは左から右へ書けというようなコマンドが存在する。 まだ、サポートしてないが、Canvasの機能を一部利用かもしれない。</p><p><em>Q</em> Canvasにテキスト選択を追加しなかった理由?</p><p><em>A</em> Canvasにそれが実装されなかったのはとても管理が大変だったから。パフォーマンスとテキスト選択のトレードオフの結果</p><p><em>Q</em> 対応するブラウザについて</p><p><em>A</em> pdf.jsはオープンWeb標準を使って作っていくという方向から始まった。だが、ブラウザにはまだ実装されていない機能があって、その部分が拡張実装として、Firefox や Webkitに実装されていった。</p><p>dot line と even fill あたりが互換性ブラウザの問題を生んでる。 =&gt; スタンダートを追加していく</p><p>重要なのはTyped Arrayのサポートが大事で高速に動作するにはこれが必須。# LT</p><h1>LT</h1><h2>&#8220;実践&#8221;Emscripten</h2><ul><li>Alon zakai<ul><li>EmScriptenの作者</li></ul></li><li>C, C++をLLVMでJavaScriptへ変換する<ul><li>バイトコードになってそれをエミュレート</li></ul></li><li>手作業よりも少し遅いぐらい</li><li>まとめ<ul><li>2-4倍ぐらい遅くなる</li><li>変換作業が短くすむ</li></ul></li><li>JSViz<ul><li>GraphVizを変換</li><li>アニメーション機能付き</li><li>グラフを考えるようにするのを視覚化</li></ul></li></ul><h2>ブラウザプレゼンテーションの教育的利用</h2><ul><li>Nurota Lab.</li><li>教師と生徒とのやり取りが必要になる。<ul><li>臨機応変に内容を変えられるようにする</li><li>黒板以上のことをできるようにする</li></ul></li><li>インタラクティブにコードを実行しながら事業を進行できる</li><li>Webページを埋め込むとかWeb技術を使える</li><li>数学とか物理とか利用方法がある</li></ul><h2>Firefox Syncサーバを建てて見た</h2><ul><li>Firefox Sync<ul><li>保存情報をアドオンを同期する機能</li><li>Androidとも同期できる</li></ul></li><li>Mozillaのサーバに情報が転送される<ul><li>ローカで暗号化されてから送信している</li></ul></li><li>Syncサーバを自前で建てて利用する<ul><li>証明書を用意してHTTPSでやり取りできる</li></ul></li><li>Python, SQLite、Macurialで動く<ul><li>ビルドして、コマンドだけ動く</li></ul></li><li>いろいろ調整しないと動かないけど</li></ul><h2>Firefox 布教大作戦</h2><ul><li>Firefox を 灘高校 に広める<ul><li>IE 83%のシェアな高校</li></ul></li><li>Firefoxノートを1300部発注<ul><li>教員に止められた</li></ul></li><li>「布教」は簡単ではない</li></ul><h2>Firefoxのゴキゲンな通知UI</h2><ul><li>Popup Notifications<ul><li>doorhangerがコードネーム</li></ul></li><li>ノンブロッキングな通知UI</li><li>PopupNotification.show()<ul><li>6つの引数で設定</li></ul></li><li>通知の複数表示ができないバグ</li><li>ドキュメントが充実してない<ul><li>コードはドキュメントになってる</li></ul></li><li>まとめ</li></ul><h2>ドアハンガーをもっと簡単につかいたい! &#8211; Piro</h2><ul><li>PopupNotication.jsmの罠<ul><li>CSSでアイコンの表示</li><li>コードバックをたくさん指定しないといけない</li></ul></li><li>簡単に扱えるライブラリを書いた</li></ul><h2>海外の開発コミュニティをを利用して世界デビューをしよう</h2><ul><li>Linuxに企業として参加<ul><li>コミニティに参加していくには</li></ul></li><li>ユーザーもどんどん参加する</li><li>英語のレベルはあまりきにしない</li><li>批判されても落ち込まない</li><li>思いついたらすぐ投稿(反応を早く)</li><li>オープンにディスカッションをする</li><li>キーとなる人を早く見つける</li><li>まずは感謝</li></ul><h2>才能のソーシャルメディア</h2><ul><li>Stylelist DirectoryというSNSサービス<ul><li>才能のソーシャルメディア</li><li>美容師のソーシャルメディア</li></ul></li><li>欧米だと美容師は芸術家的に個人活動<ul><li>日本だとサロン</li></ul></li><li>美容師が才能を発揮できるようなサイト<ul><li>活躍のアピール</li><li>一般の人たちもそれらに反応</li></ul></li><li>Joomla の CMSを使って運営してる<ul><li>他の業界とのコラボレーションとかやっていきたい</li></ul></li></ul><h2>Scratchでつなぐオープンな学び</h2><ul><li>Openな学び</li><li>Scratch<ul><li>8 &#8211; 12歳向けのMITが開発してるソフト</li><li>80万人ぐらいアクティブユーザー</li></ul></li><li>デモ</li></ul><h2>Interop Tokyoでのオープンなネットワークエンジニア育成</h2><ul><li>Interop<ul><li>ネットワークの国内最大のイベント</li><li>いろんな会社の機器を使ってネットワークを構築する</li><li>超ネット</li></ul></li><li>ShowNet<ul><li>STMプログラム</li><li>インターネット技術者を育てる</li></ul></li></ul><h1 style="margin-top: 0px; margin-right: 0px; margin-bottom: 18px; margin-left: 0px; font-weight: bold; font-style: normal; font-size: 30px; line-height: 36px; font-family: inherit; color: #404040; padding: 0px; border: 0px initial initial;"><span
style="font-size: 24px; color: #000000; line-height: normal;">まとめ</span></h1><p>Web 標準の今、そして未来 by Tantek Çelik がとても面白かった。仕様を作っている側からの視点の話は結構貴重な貴重な気がした。</p><p>Mozilla飯よかった。</p><p>メモツール(セッションごとに別々のファイルで保存)</p><ul><li><a
href="http://www.inkcode.net/qute">Qute for PC/Mac</a></li><li><a
href="http://mouapp.com/">Mou</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2012/0121/res2997/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Mozilla 勉強会＠東京 6thのアウトラインメモ</title><link>http://efcl.info/2011/1003/res2967/</link> <comments>http://efcl.info/2011/1003/res2967/#comments</comments> <pubDate>Mon, 03 Oct 2011 14:01:06 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[イベント]]></category> <category><![CDATA[アウトライン]]></category><guid
isPermaLink="false">http://efcl.info/?p=2967</guid> <description><![CDATA[2011年10月1日に行われたMozilla 勉強会＠東京 6thのメモ イベントのページ: Mozilla 勉強会＠東京 6thTwitterのまとめ: Mozilla 勉強会＠東京 6th &#8211; Toget [...]]]></description> <content:encoded><![CDATA[<p>2011年10月1日に行われた<a
href="https://dev.mozilla.jp/events/workshop11/">Mozilla 勉強会＠東京 6th</a>のメモ</p><p>イベントのページ: <a
href="https://dev.mozilla.jp/events/workshop11/">Mozilla 勉強会＠東京 6th</a><br
/>Twitterのまとめ: <a
href="http://togetter.com/li/195486">Mozilla 勉強会＠東京 6th &#8211; Togetter</a></p><ul
style="font-family: Arial;"><li>14:30 – 15:00: 開場、発表者準備</li></ul><ul
style="font-family: Arial;"><li>15:00 – 15:10: Opening</li></ul><p>自己紹介の流れ。</p><div
style="font-family: Arial;">■15:10 – 15:50: Firefox for Developers – 開発者ツール＆セキュリティ編</div><div
style="font-family: Arial;">発表資料: <a
rel="nofollow" href="http://www.slideshare.net/dynamis/firefox-developer-tools">開発者ツールの紹介</a></div><div
style="font-family: Arial;">Firefox開発者ツール &#8211; Web Console</div><ul
style="font-family: Arial;"><li>コマンドの補完</li></ul><p>Inspector</p><div
style="font-family: Arial;"><ul><li>DOM Inspectorみたいなもの</li><li>要素を調査するツール</li><li>Style Inspector(開発中)</li></ul> CSS Doctor</div><div
style="font-family: Arial;"><ul><li>CSSの間違いとか</li></ul> ScrachPad</div><div
style="font-family: Arial;"><ul><li>エディタ</li><li>選択行のコードだけを実行できたりする。</li></ul><div>GCLI</div><ul><li>ubiquityみたいな感じの</li><li>CUIとGUI</li></ul> Source Map</div><div
style="font-family: Arial;"><ul><li>CoffeeScriptのような変換コードと元コードをマッピングしたたものを作る</li><li>変換前の言語</li></ul> Tilt</div><div
style="font-family: Arial;"><ul><li>DOMマップを3D化するアドオン</li></ul> <strong>about:Firefox</strong></div><div
style="font-family: Arial;">セキュリティとプライバシーの話</div><div
style="font-family: Arial;">発表資料: <a
rel="nofollow" href="http://www.slideshare.net/dynamis/firefox-security-features">セキュリティ機能の紹介</a></div><div
style="font-family: Arial;">Same Origin Policy</div><div
style="font-family: Arial;">Content Security Policy</div><ul
style="font-family: Arial;"><li>次世代のセキュリティポリシー<ul><li>XSSの攻撃防止</li></ul></li><li>コンテンツ種別で読み込み制御<ul><li>画像やCSSやJSなども制御できるようにする</li></ul></li><li>Webkitではほぼ開発されてる</li></ul><ul
style="font-family: Arial;"><li>デフォルトセキュリティポリシーがいろいろ強化される</li><li>CSPの使い方<ul><li>X-Content-Security-PolicyのHTTPレスポンスヘッダを送信</li><li>HTMLのメタタグは書き換えできたりするものだからヘッダーで</li><li>Apache でCSPの設定</li></ul></li><li>CSP対応に移行する<ul><li>JS,CSSは外部ファイルに</li><li>evalを使わない</li><li>ポリシー違反レポートでどこがおかしいのかも確認できる<ul><li>ヘッダーでレポートを報告するURLを指定してログを残せる</li></ul></li><li>CSPブックマークレットもある</li></ul></li></ul><p>HTTP Strict Transport Security</p><div
style="font-family: Arial;"><ul><li>HTTPSでの接続を要求するヘッダ</li></ul> X-Frame-Options</div><div
style="font-family: Arial;"><ul><li>クリックジャッキングとか</li></ul> Cross-Origin Resource Sharing</div><div
style="font-family: Arial;"><ul><li>クロスドメインでの読み込み許可</li><li>他のドメインから読み込まれてもいい場合の設定</li><li>XHR2とか</li></ul> ユーザ追跡拒否ヘッダ</div><ul
style="font-family: Arial;"><li>Do-Not-Trackヘッダ<ul><li>ブラウザ側でサイトに通知する</li><li>IE,Safariも対応</li><li>Chromeだけ非対応</li></ul></li><li>受け取ったらユーザー追跡をしない</li></ul><div
style="font-family: Arial;"><div>■15:50 – 16:30: Pano って拡張機能 teramako</div><div>発表資料: <a
rel="nofollow" href="http://teramako.github.com/doc/modest-20111001/">Pano って拡張機能</a></div><div>Panorama</div><ul><li>Firefox4から導入された</li><li>タブグループを管理するビュー<ul><li>アクティブなタブグループの切り替え</li></ul></li></ul> タブの種類</div><div
style="font-family: Arial;"><ul><li>ピン止めタブ(AppTab)</li><li>グループの属するタブ</li><li>グループに属さないタブ(Firefox7で廃止)</li></ul> Pano できること</div><div
style="font-family: Arial;"><ul><li>グループの作成/削除</li><li>グループ名の変更</li><li>D&amp;D操作</li></ul> 実装の仕組み</div><div
style="font-family: Arial;"><ul><li>panoramade上で起こったイベントを拾ってビューを作ってる<ul><li>tabopenなど</li><li>起こらないイベントは上書きして起こす</li></ul></li><li>基本的にはビュー</li></ul> 頑張った所</div><div
style="font-family: Arial;"><ul><li>アイコンはSVG<ul><li>いろいろな場所で使われてる</li><li>使いまわしたい -&gt; SVGで作る</li></ul></li><li>SVG<ul><li>ベクターなので拡大縮小できる</li><li>ファイルサイズも小さい</li></ul></li><li>about:addonsでアイコンが表示されてない<ul><li>アイコンのサイズが指定されてなかった</li><li>SVG内にサイズの指定した</li></ul></li><li>タブ、Panoramaから発生するDOM Eventを拾う<ul><li>Panoramaから発生しないEvent<ul><li>グループが作成された</li><li>グループから削除された</li><li>グループから移動した</li></ul></li><li>取れないEventは無理やり発行させる<ul><li>Gropuが作成されたときに起きるイベントを上書きする</li></ul></li></ul></li><li>GroupItems.registerの上書き<ul><li>元関数を実行</li><li>DOM Eventを発行</li><li>コールバックシステムに関数を登録してDOM Eventを発行させる</li></ul></li></ul> 起動速度の改良</div><div
style="font-family: Arial;"><ul><li> 起動時のスクリプトは最小限<br
/><ul><li>必要なときにロードさせる</li><li>mozUSSubScriptLoaderの使用</li></ul></li><li>必要なときに取得<ul><li>getterの使用</li></ul></li><li>速い読み込み<ul><li>Firefox8 から mozUSSubScriptLoader もキャッシュされる</li></ul></li></ul> 実装方法<br
/><ul><li>最初の読み込みは必要最小限<ul><li>40行ほど</li><li>最初はロードするものを書いておいて、ロードしたときにそれを上書きする</li></ul></li><li>getterの使用<ul><li>XPCOMUtil.jsmを使用してgetterを使いやすくする</li><li>defineLazyGetter</li></ul></li></ul> コンテンツの遅延読み込み</div><div
style="font-family: Arial;"><ul><li>bartab<ul><li>起動したときはタブはできるが、ロードはされない</li><li>タブが選択されたときに初めてロードされる</li></ul></li><li>nsISessionStoreが鍵<ul><li>短いコードで実現する</li></ul></li></ul> 非アクティブなグループ内に開くには</div><div
style="font-family: Arial;"><ul><li>Panoramaとバッテングして上手く行かなった</li><li>上手い解決方法が見つからない<ul><li>setTimeoutでぐるぐるー</li></ul></li></ul> パネルでD&amp;Dするために</div><div
style="font-family: Arial;"><ul><li>パネルをドラッグする前に閉じないようにする<ul><li>noAutohide = true</li></ul></li><li>メニューボタンを押したときは閉じない様にする</li></ul><div>■16:40 – 17:20: restartless – 再起動不要なアドオンをSDK無しで作るフレームワーク &#8211; Piro</div><div>発表資料: <a
rel="nofollow" href="http://piro.sakura.ne.jp/xul/doc/20111001workshop11/">restartless – 再起動不要なアドオンをSDK無しで作るフレームワーク</a></div><div>Add-on SDKの目的</div><ul><li>誰でも開発できるようにする</li><li>高機能なアドオンの開発は目的ではなかった</li><li>今までのアドオン開発<ul><li>自由すぎた</li><li>敷居高い</li><li>何でもできた</li></ul></li><li>SDKを使えばある程度制限された状態で簡単作れるようになる</li></ul> Add-on SDKはGreasemonkeyスクリプトと同じような立ち位置</div><div
style="font-family: Arial;">restartlessの目的</div><div
style="font-family: Arial;"><ul><li>再起動不要なアドオンを今までの開発と同じ方式で作れるように</li><li>Mozilla特有の事情を必要なのも従来方式</li><li>対象も従来の開発者向け</li></ul><div>restartlessの使い方</div><ul><li>main.jsの内容<ul><li>startup()で読み込まれる</li><li>専用の名前空間で実行される</li><li>shutdown()を定義</li></ul></li><li>ユーティリティ<ul><li>location.href</li><li>load関数 = Cu.importと互換</li><li>require関数</li><li>existsでファイルの有無を調べる</li><li>resolve 相対パスの解決</li><li>EXPORTED_SYMBOLS</li><li>doAndWait<ul><li>非同期処理を同期的に扱うときに使用</li></ul></li><li>jstimer</li><li>pref</li><li>locale<ul><li>国際化</li></ul></li><li>config</li><li>WindowManager<ul><li>DOMWindowにアクセスする</li><li>ウィンドウのopenを監視</li></ul></li><li>KeyboardShortcut<ul><li>ショートカットの定義</li></ul></li><li>jsDefferred</li></ul></li></ul> restartlessの利用例</div><ul
style="font-family: Arial;"><li>ALT</li><li>back to owner tab</li><li>Fox Splitter</li></ul><p>restartlessのコードリーディング</p><div
style="font-family: Arial;"><ul><li>index.rdf<ul><li>bootstrap=&#8221;true&#8221;で再起動不要と認識される</li></ul></li><li>bootstrap.js<ul><li>モジュールのロードとか</li></ul></li><li>loader.js<ul><li>ユーティリティとかが定義されている</li><li>doAndWait<ul><li>スレッドをたててメインループを回す実装</li></ul></li></ul></li><li>main.js<ul><li>各アドオンのコード</li></ul></li><li>module<ul><li>各ライブラリが入ってるので、削除すれば消える</li></ul></li></ul><div>■17:20 – 18:00: Lightning Talk</div></div><ul
style="font-family: Arial;"><li><a
rel="nofollow" href="http://www.slideshare.net/knagato/mozilla-workshop-20111001-lt-addon-sdk">アドオン SDK を利用した初めてのアドオン開発</a>– by knagato<br
/><ul><li>初めてアドオン開発する人が対象</li><li>SDKを使ったアドオン開発を特徴<ul><li>HTMLやJavaScriptなどが中心で、XULやXPCOMなどMozilla特有の機能を使わなくても開発できる</li></ul></li><li>開発環境の種類<ul><li>Add-on BuilderをWeb上での開発<ul><li>再起動不要なのでその場で試せる</li></ul></li><li>Addon SDKを使った開発<ul><li>コマンドラインベース</li></ul></li></ul></li><li>Add-on SDKのチュートリアル</li></ul></li><li><a
rel="nofollow" href="http://www.p2pwf.com/">Thunderbirdアドオンによるワークフロー開発について</a>– by Nakashima<br
/><ul><li>提案するツール<ul><li>自分自身でのプロセス改善が可能</li><li>やり取りの簡略化ができる</li></ul></li><li><a
href="http://www.p2pwf.com/">http://www.p2pwf.com/</a> に仕様の詳細</li></ul></li><li><a
rel="nofollow" href="http://www.slideshare.net/saneyuki/forking-secure-login">Forking Secure Login</a> – by saneyuki_s<br
/><ul><li>Secure Loginアドオンのフォークの話<ul><li>現在はメンテナンスアップデートのみになってる</li><li>全面改装してる</li></ul></li><li>一部機能の省略</li><li>レガシーコードの除去</li><li>doorhanger対応<ul><li>Firefoxに入ってるSSLのポップアップするやつ</li></ul></li></ul></li><li><a
rel="nofollow" href="http://0-9.sakura.ne.jp/pub/lt/modest/start.html">jQueryで破棄されたrequestAnimationFrameとJSでのアニメーション実装で注意すること</a> – by <a
rel="nofollow" href="https://twitter.com/#%21/kyo_ago">kyo_ago</a><br
/><ul><li>requestAnimationFrame<ul><li>setIntervalの問題点としてアニメーション向けではない</li></ul></li><li>jQuery 1.6から削除された<ul><li>setIntervalとrequestAnimationFrameが衝突してキューがたまる</li><li>タブがバックグランドにあるときの挙動</li></ul></li></ul></li><li><a
rel="nofollow" href="http://d.hatena.ne.jp/mooz/20111002/p1">ES.next WeakMap</a>– by mooz (<a
rel="nofollow" href="https://twitter.com/#%21/stillpedant">@stillpedant</a>)<br
/><ul><li>WeakMap = 連想配列</li><li>Firefox6から利用可能</li><li>{}やObject()と比較して<ul><li>keyにオブジェクトが指定可能<ul><li>ハッシュはkeyに文字列しか指定できない(toStringされてる)</li><li>WeakMapはkeyにオブジェクトが指定可能<ul><li>オブエジェクトしか指定できない</li><li>プリミティブ値はエラー</li></ul></li><li>オブジェクトの外部拡張<ul><li>DOMノードに独自プロパティは危険</li><li>ES5ではオブジェクトの拡張がfreezeできる</li><li>オブジェクト自体は拡張しないで、外部に付加情報を持つ</li><li>WeakMapを利用する<ul><li>キーとして外部情報をもたせる</li></ul></li></ul></li></ul></li><li>keyに指定されたオブジェクトを弱く参照<ul><li>CGにたいして</li></ul></li></ul></li></ul></li><li>Firefox4以降のE4X– by teramako<ul><li>ワイルドカード<ul><li>*が指定子に使える</li></ul></li><li>属性アクセス<ul><li>@が使える</li></ul></li><li>Firefox3.6までは上記のものがE4X以外でも使えた<ul><li>Firefox4以降は禁止された</li><li>ざんねんでしたね</li></ul></li></ul></li></ul>]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/1003/res2967/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Scriptish v0.1.3の更新内容とGreasemonkeyの互換性について</title><link>http://efcl.info/2011/0712/res2923/</link> <comments>http://efcl.info/2011/0712/res2923/#comments</comments> <pubDate>Tue, 12 Jul 2011 08:07:44 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[Scriptish]]></category><guid
isPermaLink="false">http://efcl.info/?p=2923</guid> <description><![CDATA[Scriptishが0.1 -&#62; 0.1.3へとアップデートされたのでそれの更新内容を調べてみる。 - Version 0.1.1 issues - Version 0.1.2 issues - Version 0 [...]]]></description> <content:encoded><![CDATA[<p><a
href="https://addons.mozilla.org/ja/firefox/addon/scriptish/">Scriptish</a>が0.1 -&gt; 0.1.3へとアップデートされたのでそれの更新内容を調べてみる。</p><p>- <a
href="https://github.com/erikvold/scriptish/issues?milestone=5&amp;state=closed">Version 0.1.1 issues</a> <br
/>- <a
href="https://github.com/erikvold/scriptish/issues?milestone=7&amp;state=closed">Version 0.1.2 issues</a> <br
/>- <a
href="https://github.com/erikvold/scriptish/issues?milestone=10&amp;state=closed">Version 0.1.3 issues</a></p><p>に全部載っている事です。 <br
/>バグとかは面倒なので省いています。結構いろいろあるので気になる人は上のを見ておくといい。</p><ul><li><div><a
href="https://github.com/erikvold/scriptish/issues/347">#347: support GM&#8217;s openInTab&#8217;s new aLoadInBackground argument &#8211; Issues &#8211; erikvold/scriptish &#8211; GitHub</a> <br
/><a
href="https://github.com/erikvold/scriptish/wiki/GM_openInTab">GM_openInTab</a>に、バックグラウンドでタブを開くオプションが入った</div></li><li><div><a
href="https://github.com/erikvold/scriptish/issues/225">#225: Add ignoreRedirect argument to GM_xhr &#8211; Issues &#8211; erikvold/scriptish &#8211; GitHub</a> <br
/><a
href="https://github.com/erikvold/scriptish/wiki/GM_xmlhttpRequest">GM_xmlhttpRequest</a>にXHR先のリダイレクトを無視する<em>ignoreRedirect</em>のオプションが入った。</div></li><li><div><a
href="https://github.com/erikvold/scriptish/issues/374">#374: console.log etc. should be hooked to the corresponding web console &#8211; Issues &#8211; erikvold/scriptish &#8211; GitHub</a> <br
/>Firefox4から<a
href="https://developer.mozilla.org/en/Using_the_Web_Console">Web Console</a>が入ったので、console APIがそれにも対応(Firebugとか使ってればあんまり関係ない)</div></li><li><div><a
href="https://github.com/erikvold/scriptish/issues/338">#338: Add a hidden preference to allow customizing support for URI scheme &#8211; Issues &#8211; erikvold/scriptish &#8211; GitHub</a> <br
/>geo: URI scheme handler, lp: URI scheme handler といった、他の拡張などで用意されたURIスキームでもスクリプト動かせるオプションが用意された。 <br
/>extensions.scriptish.enabledSchemes.* という設定をabout:configから作って真偽値を入れる事で可能になるようだ。 <br
/>extensions.scriptish.enabledSchemes.foo が true ならfoo: というスキームで動作する。 <br
/>- <a
href="https://github.com/erikvold/scriptish/wiki/Manual%3A-Preferences">Manual: Preferences &#8211; GitHub</a> <br
/> <br
/><a
href="http://efcl.info/wp-content/uploads/2011/07/image.png"><img
style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/07/image_thumb.png" width="240" height="84" /></a> <br
/> <br
/>それぞれデフォルトで存在するプロトコルも同じ方式で書かれている。</div></li><li><div>configファイルがscriptish-scripts.xml から scriptish-scripts.jsonに <br
/>ちょっと該当bugはどれか分からないけど、多分そうなっています。</div></li></ul><p><strong>オプション画面の変更</strong></p><p><a
href="http://efcl.info/wp-content/uploads/2011/07/image1.png"><img
style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/07/image_thumb1.png" width="240" height="126" /></a></p><p>Scriptish自体のオプション画面も大きく変更されています。</p><p><a
href="http://efcl.info/wp-content/uploads/2011/07/image2.png"><img
style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/07/image_thumb2.png" width="213" height="240" /></a><a
href="http://efcl.info/wp-content/uploads/2011/07/image3.png"><img
style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/07/image_thumb3.png" width="213" height="240" /></a></p><p>一枚目は主要プロトコルでの動作の設定以外は以前とそこまで変わらないので、問題ないと思います。 <br
/>二枚目はグローバルのExclude(スクリプトに書かれてるexcludeとは違ってグローバルで動かないURL)の設定がタブに分かれて書きやすくなっています。</p><p><a
href="http://efcl.info/wp-content/uploads/2011/07/image4.png"><img
style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/07/image_thumb4.png" width="213" height="240" /></a></p><p>三枚目が結構重要な変更が入っていて、特にGreasemonkeyスクリプトを書く人はここの設定に注意する必要があります。</p><p>☑ユーザスクリプトをキャッシュする</p><p>という設定にチェックが入っていると、スクリプトを書き換えてページをリロードしても、すぐには反映しない(キャッシュが使われる)ため、スクリプトを書く人はチェックを外した方がいいと思います。</p><ul><li><a
href="https://github.com/erikvold/scriptish/issues/289">#289: Provide user pref for caching script &amp; dep contents &#8211; Issues &#8211; erikvold/scriptish &#8211; GitHub</a></li></ul><p>後は、UIを常に英語にしたり、今までabout:configから直接決めないといけなかったものもGUIから設定できるようになっているみたいです。(全てではないですが)</p><ul><li><a
href="https://github.com/erikvold/scriptish/wiki/Manual%3A-Preferences">Manual: Preferences &#8211; GitHub</a></li></ul><p>これ以外にも、パフォーマンスとか内部のバグなど結構改善されてると思います。</p><h3>Greasemonkeyとの互換性の話</h3><p>新しいAPIはGreasemonkeyが実装してくれないと互換性はない(fail safeを書くか、分岐するなどで対処)ですが、元々あった<a
href="https://github.com/erikvold/scriptish/wiki/GM_openInTab">GM_openInTab</a>などは拡張して実装されてるので基本的にGreasemonkeyと互換性があると思います。</p><p>ただ、GM_registerMenuCommandはGreasemonkeyでは第一引数にeventオブジェクトが渡されるようになって、</p><div
id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode"><span class="kwrd">function</span> sayHello(evt) { console.log(evt) }<br />GM_registerMenuCommand(<span class="str">&quot;Hello, world (simple)&quot;</span>, sayHello);</pre></div><p>のようなコードがScriptishではundefinedで、Greasemonkeyで動かすとなぜかイベントオブジェクトが入るようになり互換性がちょっとないです。(これはGreasemonkeyが勝手に壊した感じです)</p><p
id="codeSnippetWrapper"></p><pre id="codeSnippet" class="csharpcode"><span class="kwrd">function</span> sayHello(evt) { console.log(evt) }<br />GM_registerMenuCommand(<span class="str">&quot;Hello, world (simple)&quot;</span>, <span class="kwrd">function</span>(){<br />    sayHello();<br />});</pre><p>そのため、Scriptish、Greasemonkeyどちらでも安全に動くようにするには、明示的に無名関数などを使った方が良いでしょう。</p><p>後、<a
href="http://subtech.g.hatena.ne.jp/mala/20101021/1287670869">外部コンテンツを読み込む系のGreasemonkeyやブラウザ拡張を作る際の注意事項</a>などの対策(Full Feedのものが行ってるタイプ)として、GM_xhrで取得したコンテンツを自前でフィルターするのをベタに書くと速度的な問題が発生したりするので、そういう時はScriptishにある<a
href="https://github.com/erikvold/scriptish/wiki/GM_safeHTMLParser">GM_safeHTMLParser</a> APIを使用するのが良いでしょう。<br
/>自前で書いても工夫すれば実用的な速度にはなるが、用意されているものを使うのが楽という意味で。</p><ul><li><a
href="http://d.hatena.ne.jp/Constellation/20101026/1288020124">http://d.hatena.ne.jp/Constellation/20101026/1288020124</a></li></ul><p>また、まだ入っていませんが、Scriptish 2.0で<a
href="https://github.com/erikvold/scriptish/wiki/GM_xpath">GM_xpath &#8211; GitHub</a>というXPathのAPIが入るようなので楽しみ。</p><ul><li><a
href="https://github.com/erikvold/scriptish/issues/45">#45: Support @xpath &#8211; Issues &#8211; erikvold/scriptish &#8211; GitHub</a></li></ul><p>Greasemonkeyにとどまる意義はあまり見つける事ができませんが、Scriptitshに移行する意義は見つける事ができるような感じの状態です。 <br
/>Scriptish作者の<a
href="http://erikvold.com/index.cfm">Erik Vold</a>さんはGreasemonkeyに対してさよならと言ってるので、これから少しずつ差が出てくるような気がします。</p><ul><li><a
href="http://groups.google.com/group/greasemonkey-dev/browse_thread/thread/3932e546be2cf626?hl=en&amp;pli=1">Farewell &#8211; greasemonkey-dev | Google Groups</a></li></ul><p>これからGreasemonkeyスクリプト実行環境がどうなるのかはまだ何ともいえませんが、とりあえず私はScriptishを中心に使っていきます。</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0712/res2923/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Re:ブラウザの最新情報を知るために、Web開発者が読んでおくべきブログ</title><link>http://efcl.info/2011/0624/res2917/</link> <comments>http://efcl.info/2011/0624/res2917/#comments</comments> <pubDate>Fri, 24 Jun 2011 08:25:49 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[まとめ]]></category> <category><![CDATA[blog]]></category> <category><![CDATA[browser]]></category> <category><![CDATA[chrome]]></category> <category><![CDATA[IE]]></category><guid
isPermaLink="false">http://efcl.info/?p=2917</guid> <description><![CDATA[ブラウザの最新情報を知るために、Web開発者が読んでおくべきブログの内容を更新した。 Hebikuzure’s Tech Memo Internet Explorer デベロッパーセンター Mozilla Flux Go [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://efcl.info/2011/0301/res2303/">ブラウザの最新情報を知るために、Web開発者が読んでおくべきブログ</a>の内容を更新した。</p><ul><li><a
href="http://hebikuzure.wordpress.com/">Hebikuzure’s Tech Memo</a></li><li><a
href="http://msdn.microsoft.com/ja-jp/ie/aa740469">Internet Explorer デベロッパーセンター</a></li><li><a
href="http://d.hatena.ne.jp/Rockridge/">Mozilla Flux</a></li><li><a
href="http://chromestory.com/">Google Chrome OS &amp; Chromebook Review Tips Themes How to Use Install and Learn</a></li></ul><p>などを追加して更新しました。</p><p>後、alice0775さんのブログの内容(というかスクリプト群)が<a
href="https://github.com/alice0775">alice0775&#8242;s Profile &#8211; GitHub</a>に移行していました。</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0624/res2917/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>gistページにraw masterへのリンクを追加するGreasemonkey</title><link>http://efcl.info/2011/0615/res2874/</link> <comments>http://efcl.info/2011/0615/res2874/#comments</comments> <pubDate>Tue, 14 Jun 2011 16:45:23 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[gist]]></category> <category><![CDATA[Git]]></category> <category><![CDATA[URL]]></category><guid
isPermaLink="false">http://efcl.info/?p=2874</guid> <description><![CDATA[gistに置いたファイルの最新版を常に参照するraw masterなURLが最近変更されたり、昔使えた方法が使えなくなっています。 詳細は以下を参考に Gist の raw ファイルの URL が変わった: 「わ」の日記 [...]]]></description> <content:encoded><![CDATA[<p>gistに置いたファイルの最新版を常に参照するraw masterなURLが最近変更されたり、昔使えた方法が使えなくなっています。</p><p>詳細は以下を参考に</p><li><a
href="http://wa.cocolog-enshu.com/pseudodiary/2011/06/gist-raw-url-72.html">Gist の raw ファイルの URL が変わった: 「わ」の日記もどき</a></li><p>以前はURLに.txtとつければよかったので、特に何もしなくても不便はしなかったのですが、2011年6月15日現在はraw masterなURLへのURLにするにはちょっと書き換える量が多いのでGreasemonkeyを書きました。</p><p>gistのページのファイル名の横にraw master URLへのリンクを追加するGreasemonkeyです。 <br
/>Scriptishの場合は、リンクをクリックするだけでクリップボードにURLをコピーします。</p><p><code><a
href="http://efcl.info/wp-content/uploads/2011/06/2011-06-14-ss1.png"><img
style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2011-06-14-ss1" border="0" alt="2011-06-14-ss1" src="http://efcl.info/wp-content/uploads/2011/06/2011-06-14-ss1_thumb.png" width="240" height="209" /></a></code></p><li><a
href="http://userscripts.org/scripts/show/104764">gist: raw master URL for Greasemonkey</a></li><p>この仕様変更により、Greasemonkeyで.txtでrequireしてたりするスクリプトは新しくインストールすると死んでいると思うので確認が必要になるかもしれません。</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0615/res2874/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Firebugを使ったページロード解析(Net panelの読み方)</title><link>http://efcl.info/2011/0612/res2855/</link> <comments>http://efcl.info/2011/0612/res2855/#comments</comments> <pubDate>Sun, 12 Jun 2011 10:37:50 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[Firebug]]></category><guid
isPermaLink="false">http://efcl.info/?p=2855</guid> <description><![CDATA[Software is hard &#124; Page load analysis using Firebug の記事を元に書いています。 January 18th, 2010に書かれた時点での例を使用しているため、現在のブラウ [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://www.softwareishard.com/blog/firebug/page-load-analysis-using-firebug/">Software is hard | Page load analysis using Firebug</a> の記事を元に書いています。 <br
/>January 18th, 2010に書かれた時点での例を使用しているため、現在のブラウザでは若干挙動が違うかもしれません。 <br
/>また、著者の<a
href="http://www.softwareishard.com/blog/about/">Jan Odvarko</a>さんに翻訳許可は頂いていますが、翻訳というより意訳や自分の理解のために書いていたので、いろいろ書き加えたりしています。 <br
/>Net panel(ネットパネル)について理解したいと思って書いたので、Net Panel自体の解説記事<a
href="http://www.softwareishard.com/blog/firebug/introduction-to-firebug-net-panel/">Software is hard | Introduction to Firebug: Net Panel</a>も一緒に読むといいかもしれません。</p><p>翻訳許可のメールをわずか15分で返してくれた著者の<em>Jan Odvarko</em>さんに感謝を。 <br
/>Thnak you, <em>Jan Odvarko.</em></p><span
id="more-2855"></span><hr
/><p>原文: <a
href="http://www.softwareishard.com/blog/firebug/page-load-analysis-using-firebug/">Software is hard | Page load analysis using Firebug</a></p><p>ページ読み込みパフォーマンスはWeb開発者にとって重要なトピックです。 <br
/>各ページロードの例において、FirebugのNet panelから得たデータをどのように解析するかを見ていきます。</p><p>このテストにおける例は<a
href="http://www.mozilla.com/en-US/firefox/all-beta.html">Firefox 3.6</a> + <a
href="http://getfirebug.com/releases/firebug/1.5X/">Firebug 1.5</a> + <a
href="http://www.softwareishard.com/blog/netexport/">NetExport 0.7</a>においてのNet Panelの結果をNetExportにより<a
href="http://groups.google.com/group/firebug-working-group/web/http-tracing---export-format">HAR</a>形式で出力したものをオンラインで表示しています。 <br
/>(<a
href="http://groups.google.com/group/firebug-working-group/web/http-tracing---export-format">HAR</a>形式はChromeのWeb Inspectorからも出力できます。)</p><ul><li><a
href="http://www.janodvarko.cz/har/viewer/">HTTP Archive Viewer 2.0.10</a>(オンラインビューアー)</li></ul><h4>Example 1: Simple Page Load</h4><p><iframe
class="harPreviewFrame" height="220" border="0" src="http://www.janodvarko.cz/har/viewer//loader.php?service=pagelist&amp;expand=true&amp;path=/har/examples/posts/analysis-using-firebug/simple-page-load.har" frameborder="0" width="518"></iframe></p><p>ここでは2つのリクエストが表示されています。 <br
/>1つめのリクエストではページは16msで取得できていて、load event (赤いライン)は58msで発生している事がわかります。ログ上にマウスオーバーさせると詳細な表示がされます。</p><p><a
href="http://efcl.info/wp-content/uploads/2011/06/image11.png"><img
style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/06/image_thumb11.png" width="300" height="249" /></a></p><ul><li>青の縦線であるDOM Loaded はDOMContentLoaded event</li><li>赤の縦線であるPage Loaded はLoad event</li><li>灰色のReceiving がページの取得にかかった時間</li></ul><p><a
href="http://efcl.info/wp-content/uploads/2011/06/image12.png"><img
style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/06/image_thumb12.png" width="158" height="77" /></a></p><p>同じように2つ目のリクエストを見てみると、5msでXHRが実行されています。 <br
/>そして合計経過時間は408msであることもわかります。</p><p><a
href="http://efcl.info/wp-content/uploads/2011/06/image13.png"><img
style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/06/image_thumb13.png" width="307" height="250" /></a></p><p>2つ目のリクエスト(XHR)上でもマウスオーバーで詳細な情報が表示されています。 <br
/>こちらでもload event を表していますが、こちらはXHRのリクエストからの相対値が表示されています。XHRが発生(Started)したのは403msなので 403 &#8211; 357 = 58msでload event が発生したことがわかります。(load eventはページの取得を見た方がわかりやすいからこう見る必要はない気がするけど)</p><h4>Example 2: Connection Limit</h4><p>各ブラウザは一つのページをダウンロードするのに同時接続制限あります。もし、同時接続の制限に達したとき、他のリソースは接続してるリソースが解放されるまでブラウザ内部のキューで待機させられます。 <br
/>次の2つのページログを見ると、同時接続制限数の違いで8つの画像をロードするのにどれぐらいの違いがでるかがわかります。</p><div
class="harPreviewBox"><iframe
class="harPreviewFrame" height="220" border="0" src="http://www.janodvarko.cz/har/viewer//loader.php?service=pagelist&amp;expand=true&amp;path=/har/examples/posts/analysis-using-firebug/browser-blocking-time.har" frameborder="0" width="518"></iframe></div><p><strong>#1 Cuzillion (同時接続制限 == 6)</strong></p><ul><li>Firefox 3.6の同時接続制限のデフォルト値は6で、最初の6つの画像をダウンロード開始した時点でドキュメントは利用可能(DOMContentLoaded event が発生する)</li><li>他の2つの画像はコネクションが空くまで待っている(light-brown 色の部分がblocking部分)</li><li>他の2つの画像がダウンロードされたときは緑色のconnectionフェーズ無いのは、最初の6つの画像をダウンロードに使用したconnectionを再利用しているためです。</li></ul><p><strong>#2 Cuzillion (同時接続制限 == 2)</strong></p><p>このテストだと、各画像ごとに2～3秒の時間がかかり、合計経過時間やload eventが発生時間に#1の2倍弱近くかかっていることがわかります。 <br
/>同時接続制限が2なのはIE7以下のものやモバイル向けのブラウザなどがあります。 <br
/>各ブラウザの同時接続数は<a
href="http://www.browserscope.org/?category=network">Home &#8211; Browserscope</a>を見るといいでしょう。 <br
/>Firefoxではabout:configのnetwork.http.max-persistent-connections-per-serverの設定から変更可能です。</p><p><a
href="http://efcl.info/wp-content/uploads/2011/06/image14.png"><img
style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/06/image_thumb14.png" width="514" height="240" /></a></p><p>同じように#2のポップアップされる詳細のログを見てみると、Blocking(light-brown 色)はページを取得(DOM Loaded)した時から4.63s待たされていて、リソースの取得は2.22sかかり、6.85sで完了している事がわかります。</p><h4>Example 3: Pipelining</h4><p>#2と同じページを使い、ブラウザの<a
href="https://developer.mozilla.org/ja/HTTP_Pipelining_FAQ">パイプライン処理</a>がONとなっている場合を見てみる。</p><div
class="harPreviewBox"><iframe
class="harPreviewFrame" height="220" border="0" src="http://www.janodvarko.cz/har/viewer//loader.php?service=pagelist&amp;expand=true&amp;path=/har/examples/posts/analysis-using-firebug/pipelining.har" frameborder="0" width="518"></iframe></div><p>Firefox(3.6)でパイプライン処理が有効(network.http.pipelining == true)になっている場合を比べてみると、実際にはload eventが発生するまでにかかる時間が増えていることがわかります。 <br
/>1から6の画像はそれぞれ異なる接続を利用していますが、7から8の画像は共有接続を利用してダウンロードしています。実際にどれと接続を共有しているかは明らかではありませんが(Firebugからそれを知るAPIはないため)、最後の2つの画像は接続を共有して合計時間を増加させているのは明らかです。</p><h4>Example 4: Persistent Connections</h4><p>このテストはHTTP <em>Connection</em>ヘッダーの効果を現しています。このヘッダーは既存の接続が閉じられているか将来のリクエストのために保持されているのかをサーバーに教えるために使われます。 <br
/>それぞれ<em>Keep-Alive</em> (default in HTTP/1.1) or <em>Close</em>でどのような違いが出るかを見てみましょう。</p><div
class="harPreviewBox"><iframe
class="harPreviewFrame" height="220" border="0" src="http://www.janodvarko.cz/har/viewer//loader.php?service=pagelist&amp;expand=true&amp;path=/har/examples/posts/analysis-using-firebug/persistent-connections.har" frameborder="0" width="518"></iframe></div><p>それぞれのログで、最初のページと3つのリクエストとで合計4つが表示されています。 <br
/><em>Connection</em>ヘッダーは3つ(file1.php, file2.php, file3.php)のリクエスト時に要求されます。</p><p><strong>#1 Test page (Connection: Keep-Alive)</strong></p><ul><li>一つ目のページのログでは、ページダウンロードのための一つの接続しか作られていないことがわかります。緑色のConnectionフェーズが一つだけになっていて接続が再利用されている事がわかります。</li></ul><p><strong>#2 Test page (Connection: close)</strong></p><ul><li>二つ目のログでは、ページダウンロードと<em>file1.php</em>のリクエストで接続が再利用されている事がわかります。しかし、他の接続ではConnection: closeなため、また接続を作り直す必要があります。</li></ul><h4>Example 5: Inline Scripts Block</h4><p>インラインスクリプトがページのダウンロードをブロックすることはよく知られていますが、ネットワークの観点から見るとどのように見えるかを調べてしましょう。</p><div
class="harPreviewBox"><iframe
class="harPreviewFrame" height="220" border="0" src="http://www.janodvarko.cz/har/viewer//loader.php?service=pagelist&amp;expand=true&amp;path=/har/examples/posts/analysis-using-firebug/inline-scripts-block.har" frameborder="0" width="518"></iframe></div><p><strong>#1 Cuzillion</strong></p><p>3番目と4番目のリクエストの間に隙間ができています。これは5秒間のインラインスクリプトの実行によりブロッキング発生しています。 (*ここで言うインラインスクリプトとは&lt;script&gt;/*実行スクリプト*/&lt;/script&gt;という感じで&lt;script&gt;タグ内で実行しているものを言う) <br
/><a
href="http://stevesouders.com/cuzillion/?ex=10100&amp;title=Inline+Scripts+Block">Inline Scripts Block</a>のページにて試すことができます。</p><p><a
href="http://efcl.info/wp-content/uploads/2011/06/image15.png"><img
style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://efcl.info/wp-content/uploads/2011/06/image_thumb15.png" width="320" height="141" /></a> <br
/>Firefox5に試すとちょっと挙動が異なるけど、インラインスクリプトで隙間ができるのは同じ。 <br
/>どちらかというとChromeがログに近い動きをしていた。 <br
/>Firefox4からインラインスクリプトの実行タイミングが変わったのも関係するかもしれない。 <br
/>詳細は<a
href="http://www.softwareishard.com/blog/firebug/script-execution-analysis-in-firefox-4/">Software is hard | Script Execution Analysis in Firefox 4</a>に。</p><p><strong>#2 Cuzillion</strong></p><p>こちらはインラインスクリプトをページの底(&lt;/body&gt;前かな?)に置いた場合のログです。 <br
/>リクエストの合計時間は減っていますが、load eventは#1と同じくインラインスクリプトにより遅れていることがわかります。 <br
/>こちらは<a
href="http://stevesouders.com/cuzillion/?c0=bi1hfff1_0_f&amp;c1=bi1hfff1_0_f&amp;c2=bb0hfff0_5_f&amp;t=1307854749986">Cuzillion</a>のようなイメージだと思います。</p><p>特にこれをどうとらえるべきかについては元記事に記述はありませんでしたが、この例はリソースのダウンロード時間よりもload eventなどへブロックが発生している事が重要な気がします。 <br
/>負荷が大きいインラインスクリプトやdocument.writeなどのブロッキングを誘発するものがある場合loadやDOMContentLoadedイベントの発生を遅くしてしまいます。そのためdocument.writeそのものを避けることや、load eventなどイベントリスナーにして実行させるなどした方がページの表示は速くなるかと思います。</p><h4>Example 6: Redirects</h4><p>これはネットパネルにて、リダイレクトがどのように見えるかを表示した例。</p><div
class="harPreviewBox"><iframe
class="harPreviewFrame" height="220" border="0" src="http://www.janodvarko.cz/har/viewer//loader.php?service=pagelist&amp;expand=true&amp;path=/har/examples/posts/analysis-using-firebug/redirects.har" frameborder="0" width="518"></iframe><div
class="harPreviewResizer"></div></div><p><strong>#1 Final Page (one redirect)</strong></p><p>サーバーによって301リダイレクトが行われて、URLの末尾に/がついたことがわかります。</p><p><strong>#2 Final Page (infinite redirection)</strong></p><p>無限ループしているリダイレクトの例 <br
/>自分自身にリダイレクトしているのでいつまでもループしてしまいますが、Firefoxではデフォルトで20回で停止しています(<em>network.http.redirection-limit</em> の設定値)</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0612/res2855/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>JavaScriptリファレンスを高速検索するKeySnailプラグイン</title><link>http://efcl.info/2011/0606/res2830/</link> <comments>http://efcl.info/2011/0606/res2830/#comments</comments> <pubDate>Sun, 05 Jun 2011 17:02:35 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[KeySnail]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[リファレンス]]></category> <category><![CDATA[検索]]></category><guid
isPermaLink="false">http://efcl.info/?p=2830</guid> <description><![CDATA[JSReferenceというFIrefoxアドオンであるKeySnail上で動くプラグインの紹介 このプラグインはChemr-jsのように先にリファレンスサイトのインデックスのキャッシュを作っておいて、複数のリファレンス [...]]]></description> <content:encoded><![CDATA[<p><a
href="https://github.com/azu/KeySnail-Plugins/tree/master/JSReference">JSReference</a>というFIrefoxアドオンである<a
href="https://github.com/mooz/keysnail/wiki/keysnail-japanese">KeySnail</a>上で動くプラグインの紹介</p><p>このプラグインは<a
href="http://subtech.g.hatena.ne.jp/cho45/20100901/1283268146">Chemr-js</a>のように先にリファレンスサイトのインデックスのキャッシュを作っておいて、複数のリファレンスからまとめて検索をすることができるプラグインです。</p> <iframe
width="640" height="510" src="http://www.youtube.com/embed/8-qRFqdtgz4" frameborder="0" allowfullscreen></iframe><p>動画だと対応サイトが少ないですが、現在は以下のサイトに対応しています。 <br
/>(最新の対応サイトリストは<a
href="https://github.com/azu/KeySnail-Plugins/tree/master/JSReference">JSReference at master from azu/KeySnail-Plugins &#8211; GitHub</a>を参照してください)</p><ul><li><a
href="http://developer.mozilla.org">developer.mozilla.org</a></li><li><a
href="https://developer.mozilla.org/ja">jp.developer.mozilla.org</a></li><li><a
href="http://www2u.biglobe.ne.jp/%7Eoz-07ams/prog/ecma262r3/">www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/</a></li><li><a
href="http://api.jquery.com">api.jquery.com</a></li><li><a
href="http://es5.github.com/">es5.github.com</a></li><li><a
href="http://msdn.microsoft.com/en-us/library/yek4tbz0%28v=VS.94%29.aspx">msdn.microsoft.com</a></li></ul><p>ECMAScriptの仕様書、MDCのドキュメント、jQueryのAPIドキュメント、IEのJavaScriptリファレンスなどを同時に引けるので結構便利です。<a
href="http://efcl.info/wp-content/uploads/2011/06/image8.png"><img
style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" src="http://efcl.info/wp-content/uploads/2011/06/image_thumb8.png" border="0" alt="image" width="640" height="116" /></a></p><p>対応サイトもSITEINFO的なものを書けば増やせるので、<a
href="https://github.com/azu/KeySnail-Plugins/tree/master/JSReference">JSReference at master from azu/KeySnail-Plugins &#8211; GitHub</a>を参考に見てみるといいです。</p><p>プラグインをインストールするとプラグインマネージャーにドキュメントが表示されるので、そこに使い方が書いてありますが簡単に説明すると二つのコマンドが追加されます。</p><table
border="1" cellspacing="0" cellpadding="2" width="446"><tbody><tr><td
width="200" valign="top">JsReferrence-open-prompt</td><td
width="244" valign="top">JsReferrenceで検索を開始する</td></tr><tr><td
width="200" valign="top">JsReferrence-reIndex</td><td
width="244" valign="top">JsReferrenceのインデックスを作り直す</td></tr></tbody></table><p>このコマンドをKeySnailの設定メニューや_keysnail.jsファイルに直接書き込むなどでショートカットに割り当てて使います。</p><p><a
href="http://efcl.info/wp-content/uploads/2011/06/image9.png"><img
style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" src="http://efcl.info/wp-content/uploads/2011/06/image_thumb9.png" border="0" alt="image" width="240" height="88" /></a> <br
/>設定画面の場合</p><div><pre id="codeSnippet" class="csharpcode">key.setGlobalKey(['C-b', 'j'], function (ev, arg) {
    ext.exec(<span class="str">"JsReferrence-open-prompt"</span>, arg, ev)<span class="rem">;</span>
<span class="rem">}, 'JsReferrenceのプロンプトを開く', true);</span>
key.setGlobalKey(['C-b', 'r'], function (ev, arg) {
    ext.exec(<span class="str">"JsReferrence-reIndex"</span>, arg, ev)<span class="rem">;</span>
}, 'JsReferrenceののインデックスを作り直す', <span class="kwrd">true</span>);</pre></div><div>_keysnail.jsファイルに書き込まれる内容。</div><div></div><div>これらのコマンドは引数を受け取ることができて、ドメイン(上のリストで書かれている<a
href="http://es5.github.com/">es5.github.com</a>といったサイトの固有なもの)を配列で渡すことで、それぞれそれらのサイトを対象にした動作になります。</div><div>デフォルトだとすべてのサイトを対象するので、ドメインを指定したものを_keysnail.jsで複数のショートカットに割り当てれば、グループに分別でプロンプトから検索するなども可能です。</div><div
id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode">// 二つのサイトを候補にする - JavaScript
key.setGlobalKey(['C-b', 'l'], function (ev, arg) {
    ext.exec(<span class="str">"JsReferrence-open-prompt"</span>, [<span class="str">"developer.mozilla.org"</span>, <span class="str">"www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/"</span>], ev)<span class="rem">;</span>
<span class="rem">}, 'JsReferrenceのプロンプトを開く', true);</span>
// msdn.microsoft.comのインデックスだけを再構築する
key.setGlobalKey(['C-b', 'r'], function (ev, arg) {
    ext.exec(<span class="str">"JsReferrence-reIndex"</span>, [<span class="str">"msdn.microsoft.com"</span>], ev)<span class="rem">;</span>
}, 'JsReferrenceのプロンプトを開く', <span class="kwrd">true</span>);</pre></div><div>また、これはKeySnailの設定になりますが、<a
href="https://github.com/mooz/keysnail/wiki/Customizing-(Japanese)">Customizing (Japanese) &#8211; GitHub</a>を読んで、プロンプトの設定をしてC-Enterで連続的にサイトを開くなどできるようにするととても便利になります。</div><div></div><div>KeySnailのプロンプトはとてもできがいいので、前から言っていますがこれのためだけにKeySnailを使うのもありだと思います。<a
href="https://github.com/mooz/keysnail/wiki/plugin">Plugin</a>のHatebnailのはてなブックマーク検索やすべてのタブからGrep検索する事ができる<a
href="https://gist.github.com/raw/905297/find.ks.js">Find</a>などはものすごくプロンプトと相性がいいです。</div><div>リファレンスは何度も見ると思うので、この部分を早くできるようになるとストレスが減ってとてもいいので是非試してみてください。</div><div></div><div>右クリックからインストール→<a
href="https://github.com/azu/KeySnail-Plugins/raw/master/JSReference/js-referrence.ks.js">https://github.com/azu/KeySnail-Plugins/raw/master/JSReference/js-referrence.ks.js</a></div><ul><li><a
href="https://github.com/mooz/keysnail/wiki/keysnail-japanese">KeySnail</a></li><li><a
href="https://github.com/azu/KeySnail-Plugins/tree/master/JSReference">JSReference at master from azu/KeySnail-Plugins &#8211; GitHub</a></li><li><a
href="http://efcl.info/2011/0402/res2453/">KeySnailプラグイン開発の方法とデバッグ | Web scratch</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0606/res2830/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>JavaScriptでAmazonからASINを取得する方法など</title><link>http://efcl.info/2011/0605/res2817/</link> <comments>http://efcl.info/2011/0605/res2817/#comments</comments> <pubDate>Sun, 05 Jun 2011 01:24:13 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[Amazon]]></category> <category><![CDATA[ASIN]]></category><guid
isPermaLink="false">http://efcl.info/?p=2817</guid> <description><![CDATA[一つの方法はinput要素から取得する方法 document.getElementById("ASIN").value Amazonはページ中のhiddenなinput要素にASINを持たせてるのでこういう手が取れる。  [...]]]></description> <content:encoded><![CDATA[<h4>一つの方法はinput要素から取得する方法</h4><div
id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode">document.getElementById(<span class="str">"ASIN"</span>).value</pre></div><p>Amazonはページ中のhiddenなinput要素にASINを持たせてるのでこういう手が取れる。</p><div
id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode">&lt;input id=<span class="str">"ASIN"</span> type=<span class="str">"hidden"</span> value=<span class="str">"4253196519"</span> name=<span class="str">"ASIN"</span>&gt;</pre></div><p>ページの構造が変わったらダメだけど、結構昔からこの部分は変わってないので意外と安定しているかもしれない。 <br
/>amazon.comだと構造が違うものがあって、<a
href="http://www.amazon.com/gp/product/B004LRPGPC/ref=s9_simh_gw_p351_d0_i2?pf_rd_m=ATVPDKIKX0DER&amp;pf_rd_s=center-3&amp;pf_rd_r=1GAMW69P6270WWBTEW98&amp;pf_rd_t=101&amp;pf_rd_p=470938811&amp;pf_rd_i=507846">Amazon.com: Buried Prey eBook: John Sandford: Kindle Store</a>のようにKindle Storeだとページ構造が違ってID=ASINがない代わりに次のようなものがある。</p><div><pre id="codeSnippet" class="csharpcode">&lt;input type=<span class="str">"hidden"</span> value=<span class="str">"B004LRPGPC"</span> name=<span class="str">"ASIN.0"</span>&gt;</pre></div><div>なので、inputを取得する場合は次のような形になる。</div><div
id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode"><span class="kwrd">var</span> ASIN = document.getElementById(<span class="str">"ASIN"</span>) || document.getElementsByName(<span class="str">"ASIN.0"</span>)[0];</pre></div><h4>もう一つの方法はwindowオブジェクトのプロパティから取得する方法</h4><p>(2011年6月5日現在だと)</p><div
id="codeSnippetWrapper"><pre id="codeSnippet" class="csharpcode">window.sitbAsin;</pre></div><div>にASINの数値が入っている。(ちょっとできるタイミングが特殊な気がするから扱いにくいかも) <br
/>これはAmazon側のJavaScriptが生やしているので、ページのちょっとした構造の変化では変わらないと思うけど使うライブラリを変えたりJavaScriptが大きく変わると変更されることがある。 <br
/>以前はwindow.productTagsに入っていた。</div><ul><li><a
href="http://subtech.g.hatena.ne.jp/h2u/20090529/1243587848">Amazonの商品個別ページでASINを抜き出す &#8211; おれ ここ めも かきなぐる おまえ ここ よむ なぐる &#8211; subtech</a></li></ul><h4>最後はURLからASIN部分を切り出す方法</h4><p>URLにはASINが入ってるはずなので、ページに構造の変化には強いけど、少しパースが面倒なところがある。 <br
/>どのようなURLがあるかを把握する必要があるので、条件分けなども必要になる。 <br
/>まあASINのフォーマットは\w{10}と決まっているので、ある程度安定するのかもしれない。</p><p>ついでに、replaceStateを使ってリロードなしでAmazonのURLを/dp/ASINだけの短いURLにするGreasemonkey書いた。</p><ul><li><a
href="http://userscripts.org/scripts/show/104173">Amazon URL Cleaner for Greasemonkey</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0605/res2817/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Gihubのcanonicalを除去するGreasemonkey</title><link>http://efcl.info/2011/0601/res2788/</link> <comments>http://efcl.info/2011/0601/res2788/#comments</comments> <pubDate>Tue, 31 May 2011 16:04:43 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Greasemonkey]]></category> <category><![CDATA[github]]></category><guid
isPermaLink="false">http://efcl.info/?p=2788</guid> <description><![CDATA[最近、Gihubのレポジトリでlink rel=&#34;canonical&#34;が、treeのその時一番新しいものを示すようになっていて、そのためブックマークが分散したり、気持ち悪いURLを知らない間に登録して [...]]]></description> <content:encoded><![CDATA[<p>最近、Gihubのレポジトリでlink rel=&quot;canonical&quot;が、treeのその時一番新しいものを示すようになっていて、そのためブックマークが分散したり、気持ち悪いURLを知らない間に登録していたりします。</p><p>なので、link rel=&quot;canonical&quot;のタグを削除するGreasemonkeyを書いてみました。</p><ul><li><a
href="http://userscripts.org/scripts/show/103900">GitHub: remove canonical for Greasemonkey</a></li></ul><p>何でこんな仕様なのか意味不明なので、いずれは元に戻って欲しいです。(このGreasemonkeyは一応、仕様が変わったかどうかかもチェックしてます)</p><p>Githubはhisotyオブジェクトを使って<a
href="http://d.hatena.ne.jp/zentoo/20101221/1292953257">動的にURLを書き換えてる</a>のは知ってる人多いと思いますが、link rel=&quot;canonicalもそれにあわせて動的に書き換えています。 <br
/>$.attrで書き換えてるだけなので、link要素を削除してもエラーは特にでないようになっています。</p><p>link rel=&quot;canonicalはあった方がうれしいと思ってたけど、あると困るケースに遭遇したのは初めて。</p>]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0601/res2788/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>adblock++からadblock#へ移行する</title><link>http://efcl.info/2011/0524/res2760/</link> <comments>http://efcl.info/2011/0524/res2760/#comments</comments> <pubDate>Mon, 23 May 2011 16:47:16 +0000</pubDate> <dc:creator>azu</dc:creator> <category><![CDATA[Firefox]]></category> <category><![CDATA[userChome.js]]></category> <category><![CDATA[Firebug]]></category> <category><![CDATA[javascript]]></category> <category><![CDATA[広告]]></category><guid
isPermaLink="false">http://efcl.info/?p=2760</guid> <description><![CDATA[危険な広告を除去するのにAdblock++を使用していましたが、Firefox5では動かないようなので(ネイティブなものはバージョン毎にコンパイルする必要があるとかないとか)代替として、adblock#.uc.jsを使っ [...]]]></description> <content:encoded><![CDATA[<p>危険な広告を除去するのに<a
href="http://park2.wakwak.com/~benki/">Adblock++</a>を使用していましたが、Firefox5では動かないようなので(ネイティブなものはバージョン毎にコンパイルする必要があるとかないとか)代替として、<a
href="http://loda.jp/script/?andor=and&amp;sword=adblock%23.uc.js&amp;mode=ret">adblock#.uc.js</a>を使ってみることにしてみました。</p><p><a
href="http://loda.jp/script/?andor=and&amp;sword=adblock%23.uc.js&amp;mode=ret">adblock#.uc.js</a>にはadblock系リスト変換君.htmlというadblock++形式などから変換できるものが入ってますが、さすがニッチなadblock++からadblock#への変換はないようなので書いてみました。 <br
/>(今思えばadblock系リスト変換君.htmlを拡張すればよかったかも…)</p><p>必要なもの</p><ul><li><a
href="https://addons.mozilla.org/ja/firefox/addon/firebug/">Firebug</a></li></ul><script src="https://gist.github.com/986965.js"> </script><p>以下のコードをFirebugのコンソール上で実行</p><p>adblockDataの部分は自分のabout:configからextensions.adblock++.filter_array の値に差し替えてください。 <br
/>最後のcopy関数以外は別にFirebugに依存しているわけじゃないので、他の環境でも少し書き換えれば動作すると思います(MITライセンスなのでご自由に) <br
/>変換したものはクリップボードに入るので、後はadblock#.uc.js Filter Managerを開いて、入力欄にペーストして&#8221;追加&#8221;のボタンを押せばフィルターを移行できると思います。</p><p>Adblock++は<a
href="http://sig.clipp.in/entry/172291">フィルタにコンテンツの種類を設定できる</a>のですが、<a
href="http://loda.jp/script/?andor=and&amp;sword=adblock%23.uc.js&amp;mode=ret">adblock#.uc.js</a>は対応していないのでそれ系のフィルターは自動で外されます。また既にdisableなフィルターも外されます。 <br
/>正規表現周りは元々使ってないので、ちゃんと動作するかは微妙です。 <br
/>一応、Readmeに従って下記の処理には対応させたつもりです。</p><blockquote><p>ただし,「/ads/」のように前後に「/」が付く物は正規表現フィルタと誤認識されるのを防ぐため,「*/ads/*」と表記する.</p></blockquote><ul><li><a
href="https://gist.github.com/986965">adblock++ から adblock# 形式へ変換する(Firebug上で実行) — Gist</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://efcl.info/2011/0524/res2760/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 2/40 queries in 0.070 seconds using disk: basic
Object Caching 755/847 objects using disk: basic

Served from: efcl.info @ 2012-05-22 12:25:44 -->
