<?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>Video &#8211; Mach3.laBlog</title>
	<atom:link href="https://blog.mach3.jp/tag/video/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.mach3.jp</link>
	<description></description>
	<lastBuildDate>Mon, 27 Jul 2015 07:44:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Youtube IFrame API を使って遊んでみよう</title>
		<link>https://blog.mach3.jp/2015/07/27/youtube-iframe-api.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 27 Jul 2015 07:44:32 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=4094</guid>

					<description><![CDATA[Webページで動画を活用したコンテンツもかなり増えてきた昨今ですが、如何お過ごしでしょうか。 今回はYoutubeの動画をJavaScriptで操作する Youtube IFrame API を使って色々遊んでみましょう [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Webページで動画を活用したコンテンツもかなり増えてきた昨今ですが、如何お過ごしでしょうか。 今回はYoutubeの動画をJavaScriptで操作する Youtube IFrame API を使って色々遊んでみましょう。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-tY3hAtMis80/VdLp0b9LA5I/AAAAAAAAC9g/3c1afy9i_60/s400-Ic42/2015-0727-00.png" alt="Youtube IFrame API を使ってみよう"/></figure>



<p></p>



<span id="more-4094"></span>



<ol class="wp-block-list">
<li>Youtube IFrame API とは</li>



<li>基本的な使い方</li>



<li>動的にスクリプトをロードする</li>



<li>見た目・挙動・イベントを設定する</li>



<li>動画再生のイベントトラッキング</li>



<li>動画の再生の任意のタイミングでアクションを起こす</li>



<li>埋め込みプレイヤーでAPIを利用可能にする</li>



<li>まとめ</li>
</ol>



<h2 class="wp-block-heading">Youtube IFrame API とは</h2>



<ul class="wp-block-list">
<li><a href="https://developers.google.com/youtube/iframe_api_reference">iframe 組み込みの YouTube Player API リファレンス | YouTube IFrame API | Google Developers</a></li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>IFrame Player API を使うと、YouTube 動画プレーヤーをウェブサイトに埋め込み、JavaScript でプレーヤーを制御できます。</p>
</blockquote>



<p>Youtube の埋め込み動画プレーヤーは <strong>iframe</strong> 要素でパブリッシュされますが、 それを動的に生成したり、プレーヤーの再生等を操作したり、イベントを検知して何かアクションを起こしたりする事が出来ます。 動画を軸にしたコンテンツ作りに大活躍しそうですね。</p>



<h2 class="wp-block-heading">基本的な使い方</h2>



<p>プレーヤーの生成は <strong>YT.Player</strong> というクラスを利用して行います。 引数にはプレイヤーを表示する為のコンテナ要素と、オプションを渡します。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"movie"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="actionscript">
<span class="hljs-keyword">var</span> onYouTubeIframeAPIReady = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span></span>{
    <span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> YT.Player(<span class="hljs-string">"movie"</span>, {
        videoId: <span class="hljs-string">"c5kmKO_gGsc"</span>,
        width: <span class="hljs-number">1600</span>,
        height: <span class="hljs-number">900</span>
    });
};
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p><strong>onYouTubeIframeAPIReady</strong> という関数は、APIのJavaScriptの準備が完了した段階で自動でコールされます。 そして、APIのJavaScript本体を読み込みましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"//www.youtube.com/iframe_api"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>これで <strong>#movie</strong> 要素内にプレーヤーが生成されます。とても簡単ですね。</p>



<p>ここでは第一引数に要素のid名を渡していますが、HTMLElementその物でも構いません。 なんでしたら、新たに生成した空要素でもよいでしょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">new</span> YT.Player(<span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"movie"</span>), {...});
<span class="hljs-keyword">new</span> YT.Player(<span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"div"</span>), {...});
</code></span></pre>


<h2 class="wp-block-heading">動的にスクリプトをロードする</h2>



<p><strong>onYouTubeIframeAPIReady</strong> は、スクリプトのロードが完了された時に一度しか実行されません。 つまり既にスクリプトが読み込まれて初期化された状態で onYouTubeIframeAPIReady を設定したとしても、 その処理は行われずに何も起こらない事になります。</p>



<p>そこで、「既にロードされている場合は即時実行、まだの場合はスクリプトを読み込んでから実行」という処理を関数にまとめてみます。 （jQuery使用）</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.youtubeReady = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">callback</span>)</span>{
    <span class="hljs-keyword">var</span> EVENT_READY = <span class="hljs-string">"youtubeready"</span>;

    <span class="hljs-keyword">if</span>(<span class="hljs-built_in">window</span>.YT &amp;&amp; <span class="hljs-built_in">window</span>.YT.Player){
        <span class="hljs-keyword">return</span> callback();
    }
    $(<span class="hljs-built_in">window</span>).on(EVENT_READY, callback);
    <span class="hljs-built_in">window</span>.onYouTubeIframeAPIReady = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
        $(<span class="hljs-keyword">this</span>).trigger(EVENT_READY);
        <span class="hljs-built_in">window</span>.onYouTubeIframeAPIReady = <span class="hljs-keyword">void</span> <span class="hljs-number">0</span>;
    };
    $(<span class="hljs-string">"&lt;script&gt;"</span>, {<span class="hljs-attr">src</span>: <span class="hljs-string">"//www.youtube.com/iframe_api"</span>}).appendTo(<span class="hljs-string">"body"</span>);
};
</code></span></pre>


<p>$.youtubeReady には実行したいコールバック関数を渡します。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">$.youtubeReady(<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> YT.Player(...});
});
</code></span></pre>


<h2 class="wp-block-heading">見た目・挙動・イベントを設定する</h2>



<p>オプションの <strong>playerVars</strong> プロパティでプレーヤーの見た目・挙動を、 また同じく <strong>events</strong> プロパティでイベントハンドラの設定をする事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> YT.Player(<span class="hljs-string">"movie"</span>, {
    <span class="hljs-attr">videoId</span>: <span class="hljs-string">"c5kmKO_gGsc"</span>,
    <span class="hljs-attr">width</span>: <span class="hljs-number">1600</span>,
    <span class="hljs-attr">height</span>: <span class="hljs-number">900</span>,
    <span class="hljs-attr">playerVars</span>: {
        <span class="hljs-attr">autoplay</span>: <span class="hljs-number">1</span>, <span class="hljs-comment">// 自動再生する・しない</span>
        <span class="hljs-attr">controls</span>: <span class="hljs-number">0</span>, <span class="hljs-comment">// コントロールを表示する・しない</span>
        <span class="hljs-attr">showinfo</span>: <span class="hljs-number">0</span>, <span class="hljs-comment">// 動画の情報テキストを表示する・しない</span>
        <span class="hljs-attr">theme</span>: <span class="hljs-string">"light"</span> <span class="hljs-comment">// テーマの選択（dark|light）</span>
    },
    <span class="hljs-attr">events</span>: {
        <span class="hljs-attr">onReady</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"--APIの準備が整いました--"</span>);
        }
        <span class="hljs-attr">onStateChange</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            <span class="hljs-keyword">if</span>(e.data === YT.PlayerState.PLAYING){
                <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"--再生中--"</span>);
            }
        }
    }
});
</code></span></pre>


<p>playerVars では非常に細かい設定が可能です。 詳しくは<a href="https://developers.google.com/youtube/player_parameters?playerVersion=HTML5#Parameters">公式のドキュメント</a>でお探しください。</p>



<p>YT.Player で動画を操作する為には、APIの準備を待たなければなりません。 初期化時に動画を操作するためのアクションは <strong>onReady</strong> 内に書くと良いでしょう。</p>



<h2 class="wp-block-heading">動画再生のイベントトラッキング</h2>



<p>このAPIを調べるきっかけになったテーマなのですが、 例えばユーザーがプレイヤーをクリックしてビデオを再生した時に、Google Analyticsにイベントを一度だけ送信したい場合。</p>



<p>onStateChange イベントを利用する事で実現できますが、 再生中何度もPLAYING（再生中）ステートに切り替わる可能性がありますので、 一度イベントを送信したらその処理を無効化する必要があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> playerTrackEvent = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    <span class="hljs-comment">// 一度だけトラッキングイベントを送信</span>
    <span class="hljs-keyword">if</span>(ga){
        ga(<span class="hljs-string">"send"</span>, <span class="hljs-string">"event"</span>, <span class="hljs-string">"video"</span>, <span class="hljs-string">"play"</span>, <span class="hljs-string">"My Video"</span>);
        playerTrackEvent = <span class="hljs-literal">undefined</span>;
    }
};

<span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> YT.Player(<span class="hljs-string">"movie"</span>, {
    ...
    events: {
        <span class="hljs-attr">onStateChange</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            <span class="hljs-keyword">if</span>(e.data === YT.PlayerState.PLAYING &amp;&amp; playerTrackEvent){
                playerTrackEvent();
            }
        }
    }
});
</code></span></pre>


<h2 class="wp-block-heading">動画再生の任意のタイミングでアクションを起こす</h2>



<p>例えば「再生時間1:00のタイミングで背景を暗転させたい」など、動画の再生の経過時間をトリガーにしてアクションを起こしたい場合は、 イベントを活用したい所ではありますが、events には <strong>onProgress</strong> のような物は用意されていません。 その為、監視する関数を自前で書く必要があります。</p>



<p>（もっともそのような物を常に発火させていたらコスト的にもよろしくないでしょう）</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// 再生時間が1:00を超えたらページ背景を黒くする</span>
<span class="hljs-keyword">var</span> player, timer, playerProgress;

playerProgress = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
    clearTimeout(timer);
    <span class="hljs-keyword">if</span>(
        player.getPlayerState() === YT.PlayerState.PLAYING
        &amp;&amp; player.getCurrentTime() &gt; <span class="hljs-number">60</span>
    ){
        $(<span class="hljs-string">"body"</span>).css(<span class="hljs-string">"background-color"</span>, <span class="hljs-string">"#000"</span>);
        <span class="hljs-keyword">return</span>;
    }
    timer = setTimeout(playerProgress, <span class="hljs-number">100</span>);
};

player = <span class="hljs-keyword">new</span> YT.Player(<span class="hljs-string">"movie"</span>, {
    ...
    events: {
        <span class="hljs-attr">onReady</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            playerProgress();
        }
    }
});
</code></span></pre>


<p>多用するのはあまり良くなさそうですが、 動画の再生にあわせてページに演出効果を加えたりするなど、ちょっと面白そうですね。</p>



<h2 class="wp-block-heading">埋め込みプレーヤーでAPIを利用可能にする</h2>



<p>Youtube のビデオ再生画面で取得できる「埋め込みコード」による埋込プレーヤーでも、APIが利用可能です。 つまりHTMLに埋め込みコードの <strong>iframe</strong> を直書きして、それを元にインスタンスを生成して操作する事が出来ます。</p>



<p>下の例では、準備が完了した時点でプレーヤーをフェードインさせてみます。</p>



<h3 class="wp-block-heading">HTML/CSS</h3>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">style</span>&gt;</span><span class="css">
<span class="hljs-selector-id">#movie</span> {
    <span class="hljs-attribute">transition</span>: opacity <span class="hljs-number">1s</span> ease <span class="hljs-number">0s</span>;
    <span class="hljs-attribute">opacity</span>: <span class="hljs-number">0</span>;
}
<span class="hljs-selector-id">#movie</span><span class="hljs-selector-class">.show</span> {
    <span class="hljs-attribute">opacity</span>: <span class="hljs-number">1</span>;
}
</span><span class="hljs-tag">&lt;/<span class="hljs-name">style</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">iframe</span>
    <span class="hljs-attr">width</span>=<span class="hljs-string">"320"</span>
    <span class="hljs-attr">height</span>=<span class="hljs-string">"180"</span>
    <span class="hljs-attr">id</span>=<span class="hljs-string">"movie"</span>
    <span class="hljs-attr">src</span>=<span class="hljs-string">"https://www.youtube.com/embed/c5kmKO_gGsc?rel=0<span class="hljs-symbol">&amp;amp;</span>controls=0<span class="hljs-symbol">&amp;amp;</span>showinfo=0<span class="hljs-symbol">&amp;amp;</span>enablejsapi=1"</span>
    <span class="hljs-attr">frameborder</span>=<span class="hljs-string">"0"</span>
    <span class="hljs-attr">allowfullscreen</span>
&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">iframe</span>&gt;</span>
</code></span></pre>


<h3 class="wp-block-heading">JavaScript</h3>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> player = YT.Player(<span class="hljs-string">"movie"</span>, {
    <span class="hljs-attr">events</span>: {
        <span class="hljs-attr">onReady</span>: <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
            $(e.target).addClass(<span class="hljs-string">"show"</span>);
        }
    }
});
</code></span></pre>


<p>埋め込みプレーヤーのURLに <strong>enablejsapi=1</strong> のパラメータを付加しなければならない点に注意しましょう。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>動画の活用は負荷もそれなりなので使い所は考えなければなりませんが、 訴求力を高めるには中々良い手段なので、上手に活用していきたいですね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>&#034;Video&#034; &#8211; Alphabetical Advent Calendar 2013</title>
		<link>https://blog.mach3.jp/2013/12/21/jaac2013-v-video.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sat, 21 Dec 2013 01:10:28 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[Advent Calendar 2013]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MediaElement]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=3778</guid>

					<description><![CDATA[&#8220;V&#8221; は video の &#8220;V&#8221;。 Video 古くは Flash だったり wmv だったりしたWeb上での動画ファイルの再生も、 最近では HTML5 で追加された  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>&#8220;V&#8221; は video の &#8220;V&#8221;。</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/-0EyMicsS5I0/UqR4mEQ-BGI/AAAAAAAACYg/_vfWt_n5kgs/s400/ac2013-v.png" alt="V"/></figure>



<p></p>



<span id="more-3778"></span>



<h2 class="wp-block-heading">Video</h2>



<p>古くは Flash だったり wmv だったりしたWeb上での動画ファイルの再生も、 最近では HTML5 で追加された <strong>video</strong> 要素のおかげで統一化が図られています。 勿論IE8以下ではサポートしていないので Flash 等で対応してあげる必要がありますが、 その辺の面倒をしっかり見てくれるライブラリも公開されています。</p>



<h2 class="wp-block-heading">video 要素</h2>



<p>まずは <strong>video</strong> 要素を簡単におさらいします。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">video</span> <span class="hljs-attr">poster</span>=<span class="hljs-string">"img/poster.jpg"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my-video"</span> <span class="hljs-attr">controls</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">source</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"movies/movie.mp4"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"video/mp4"</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">source</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"movies/movie.webm"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"video/webm"</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">video</span>&gt;</span>
</code></span></pre>


<p>video 要素は <strong>source</strong> 要素をぶらさげ、形式ごとに動画ファイルを列挙していきます。 video の src 属性で指定する事もできますが、ブラウザ環境ごとに再生が出来る形式が限定されているので、 複数の形式を連ねて再生可能な形式で再生する方法が広く使われます。 どの環境でどの形式がサポートされているかは下記URLにて詳細がまとめられています。</p>



<ul class="wp-block-list">
<li><a href="https://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats#Browser_compatibility">HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット &#8211; HTML | MDN</a></li>
</ul>



<h3 class="wp-block-heading">ムービーのコントロール</h3>



<p>video 要素の元となる <strong>HTMLMediaElement</strong> には動画の再生をコントロールするメソッドがぶら下がっているので、 それを利用して操作する事ができます。ブラウザによっては他にもメソッドも独自に実装されている事があります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-keyword">var</span> video = <span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"#my-video"</span>);
...
video.load(); <span class="hljs-comment">// ビデオのロード</span>
video.play(); <span class="hljs-comment">// 再生</span>
video.pause(); <span class="hljs-comment">// 停止</span>
</code></span></pre>


<h3 class="wp-block-heading">ムービーのシーク</h3>



<p>動画の指定した時間へのジャンプは <strong>currentTime</strong> プロパティの値を変更する事で可能です。 currentTime プロパティは通常の呼び出しでは現在の再生位置を返しますが、 値を指定する事でその再生位置にジャンプする事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">video.currentTime; <span class="hljs-comment">// 12.345 など（再生位置を秒で返す）</span>
video.currentTime = <span class="hljs-number">30</span>; <span class="hljs-comment">// 30秒の位置に移動する</span>
</code></span></pre>


<p>しかし、currentTime に代入してシークを行おうとした場合にエラーが発生する場合があります。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable</p>
</blockquote>



<p>これは動画ファイルの情報がまだ利用可能でない為起こる様です。 他の外部リソース同様にメタ情報のロードを待つ必要がありますね。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">video.addEventListener(<span class="hljs-string">"loadedmetadata"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">e</span>)</span>{
    e.target.currentTime = <span class="hljs-number">30</span>;
}, <span class="hljs-literal">false</span>);
</code></span></pre>


<p>この他にも多くのプロパティが実装されているので、 JavaScript でさらに進んだ処理をしたい時は <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#htmlmediaelement">W3Cのページ</a> を訪れてみましょう。</p>



<h2 class="wp-block-heading">ビデオプレイヤーライブラリ</h2>



<p>限られた環境で動画を再生するだけならば素のまま使えば良いのですが、 やはりどうしてもレガシーな環境に対応しなければならない時があります。 面倒な部分は優秀なライブラリにお願いしてしまいましょう。</p>



<h3 class="wp-block-heading"><a href="http://www.videojs.com/">Video.js</a></h3>



<p><a href="http://www.videojs.com/">http://www.videojs.com/</a></p>



<p><strong>Video.js</strong> は Flash をフォールバックに使用しているプレイヤーライブラリです。 スタイルシートとJavaScriptファイルを読み込み、video 属性に専用のクラスを指定して使用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">video</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my-video"</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"video-js vjs-default-skin"</span>&gt;</span> ... <span class="hljs-tag">&lt;/<span class="hljs-name">video</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="actionscript">
<span class="hljs-keyword">var</span> player = videojs(<span class="hljs-string">"my-video"</span>, { <span class="hljs-comment">/* options */</span> });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>プレイヤーに好みのスキンを着せる事が出来るのが特徴で、 ブラウザ上でプレビューを確認しながらスキンを編集出来るツールも公開しています。 スタイルの編集は Less で行う事ができます。</p>



<ul class="wp-block-list">
<li><a href="http://designer.videojs.com/">Video.js | Video Player Skin Designer</a></li>
</ul>



<p>Video.js の <a href="https://github.com/videojs/video.js/blob/master/docs/api/vjs.Player.md">API</a> は、 イベント・メソッドの名前や仕様などが MediaElement API に倣った形になっています。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript">player.on(<span class="hljs-string">"loadedmetadata"</span>, <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{ ... }); <span class="hljs-comment">// on メソッドでイベントの設定</span>
player.play(); <span class="hljs-comment">// 再生</span>
</code></span></pre>


<h3 class="wp-block-heading"><a href="http://mediaelementjs.com/">MediaElement.js</a></h3>



<p><a href="http://mediaelementjs.com/">http://mediaelementjs.com/</a></p>



<p><strong>MediaElement.js</strong> は、Flash や Silverlight のプレイヤーを使い、 古いブラウザでも HTML5 の MediaElement の API を使用出来るように振る舞ってくれます。 多くのCMS向けのプラグインが公開されており、WordPress はコアにバンドルされているそうです。 動作には jQuery が必要です。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">video</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"my-video"</span>&gt;</span> ... <span class="hljs-tag">&lt;/<span class="hljs-name">video</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span>&gt;</span><span class="javascript">
    <span class="hljs-keyword">var</span> player = <span class="hljs-keyword">new</span> MediaElementPlayer(<span class="hljs-string">"#my-video"</span>, <span class="hljs-comment">/* options */</span>);
    <span class="hljs-comment">// あるいは</span>
    <span class="hljs-keyword">var</span> $media = $(<span class="hljs-string">"#my-video"</span>).mediaelementplayer({ <span class="hljs-comment">/* options */</span> });
</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>プレイヤーの初期化は <strong>MediaElementPlayer</strong> から生成するか、 <strong>$.fn.mediaelementplayer</strong> を使用して行います。 それぞれ返り値が違うので注意しましょう。</p>



<h3 class="wp-block-heading">ライブラリ使用上の共通の注意</h3>



<p>video 要素に対応していないブラウザで使用する場合は、 html5shiv や Modernizr 等で video 要素へのCSSの適用を有効化しておかなければなりません。 あるいは手作業で対応しておきましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"video"</span>);
<span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"audio"</span>);
</code></span></pre>


<p>また、古い環境でエミュレートしてくれるといっても、 コールするタイミングによっては使えなかったり、細かい点で本来の物と挙動が異なってしまったりします。 結局中でIE用の処理を分けざるをえない、といった状況は結構ありますので、がんばりましょう。</p>



<h2 class="wp-block-heading">参考資料</h2>



<ul class="wp-block-list">
<li><a href="https://developer.mozilla.org/en/docs/Web/HTML/Element/video">video &#8211; HTML | MDN</a></li>



<li><a href="https://developer.mozilla.org/ja/docs/Web/HTML/Supported_media_formats">HTML5 の audio 要素と video 要素でサポートされているメディアフォーマット &#8211; HTML | MDN</a></li>



<li><a href="http://www.videojs.com/">HTML5 Video Player | Video.js</a></li>



<li><a href="http://mediaelementjs.com/">MediaElement.js &#8211; HTML5 video player and audio player with Flash and Silverlight shims</a></li>
</ul>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ちょっと変わった宇宙船映像 on Vimeo</title>
		<link>https://blog.mach3.jp/2010/09/02/starship-on-vimeo.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 02 Sep 2010 04:23:39 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Vimeo]]></category>
		<guid isPermaLink="false">http://blog.mach3.jp/?p=550</guid>

					<description><![CDATA[Starship by Bernard Gigounon on Vimeo ちょっと変わった手法で描いた宇宙船の映像。 なかなか目からウロコだったので思わずご紹介。 Starship by Bernard Gigouno [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p><a href="http://vimeo.com/11280448">Starship by Bernard Gigounon on Vimeo</a></p>



<p>ちょっと変わった手法で描いた宇宙船の映像。<br />
なかなか目からウロコだったので思わずご紹介。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TH8h_xZAfeI/AAAAAAAABAk/fcipIhGmQ68/201009021252.png" alt="Starship on Vimeo"/></figure>



<p></p>



<span id="more-550"></span>



<p><a href="http://vimeo.com/11280448">Starship by Bernard Gigounon on Vimeo</a></p>



<p><iframe src="http://player.vimeo.com/video/11280448?portrait=0&amp;color=59a5d1" width="598" height="449" frameborder="0"></iframe></p>



<p>海を走る船舶の映像を上下対称に編集しているんですね。<br />
それだけなんですが、とてもそれっぽく見えます。<br />
特に夜間の映像は雰囲気もバッチリ。</p>



<p>発想の勝利ですね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>CYRIAK氏による愉快な映像達</title>
		<link>https://blog.mach3.jp/2010/08/08/animations-by-cyriak.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sun, 08 Aug 2010 22:49:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[CG]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/08/08/cyriak%e6%b0%8f%e3%81%ab%e3%82%88%e3%82%8b%e6%84%89%e5%bf%ab%e3%81%aa%e6%98%a0%e5%83%8f%e9%81%94.html</guid>

					<description><![CDATA[先日出会った素敵な映像。 UKのフリーランスアニメーターのCyriak氏のアニメーションがすごく愉快だったのでご紹介。 一番はじめに目についたアニメーションがコレです。 アップテンポな音楽に乗せてキュートなテディベアがト [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>先日出会った素敵な映像。<br />
UKのフリーランスアニメーターのCyriak氏のアニメーションがすごく愉快だったのでご紹介。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TF61jY0_Q8I/AAAAAAAABAA/9dnUdhigSkY/s800/201008082237.png" alt="Cyriak"/></figure>



<p></p>



<span id="more-2252"></span>



<p>一番はじめに目についたアニメーションがコレです。</p>



<p><object width="598" height="361"><param name="movie" value="http://www.youtube.com/v/-0Xa4bHcJu8?fs=1&amp;hl=ja_JP"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/-0Xa4bHcJu8?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="598" height="361"></object></p>



<p>アップテンポな音楽に乗せてキュートなテディベアがトコトコ歩いていると思ったら…<br />
あれよあれよと展開していく、実に飽きの来ないアニメーションです。<br />
大変シュール。</p>



<p><object width="598" height="361"><param name="movie" value="http://www.youtube.com/v/FavUpD_IjVY?fs=1&amp;hl=ja_JP"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/FavUpD_IjVY?fs=1&amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="598" height="361"></object></p>



<p>横スクロールで牛がどんどん変化していく不思議なアニメーションも。<br />
BGMはずっと聴いてると情緒不安定に陥りそうな雰囲気。</p>



<p>良いセンスしてますね…。<br />
他にも色々ビデオを公開しているので、チェックしておきたいです。</p>



<p><a href="http://www.youtube.com/user/cyriak">YouTube &#8211; ‪cyriak さんのチャンネル‬‎</a><br />
<a href="http://www.cyriak.co.uk/">Cyriak</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>死罰には死を &#034;Death to Death Penalty&#034; by Digital District</title>
		<link>https://blog.mach3.jp/2010/07/13/death-to-death-penalty.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 13 Jul 2010 02:59:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[CG]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/07/13/%e6%ad%bb%e7%bd%b0%e3%81%ab%e3%81%af%e6%ad%bb%e3%82%92-death-to-death-penalty-by-digital-district.html</guid>

					<description><![CDATA[本日出会った素敵な動画。 フランスのスタジオ、Digital District™ が手がけた 国際人権団体のAmnestyのコマーシャルビデオがVimeoで紹介されていました。 http://www.digital-di [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>本日出会った素敵な動画。<br />
フランスのスタジオ、<a href="http://www.digital-district.fr/">Digital District<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2122.png" alt="™" class="wp-smiley" style="height: 1em; max-height: 1em;" /></a> が手がけた<br />
国際人権団体の<a href="http://www.amnesty.or.jp/">Amnesty</a>のコマーシャルビデオがVimeoで紹介されていました。</p>



<p><img decoding="async" src="http://lh3.ggpht.com/_JJkNs5Ixl70/TDtXfQumM-I/AAAAAAAAA-I/wSsQ9c8TEiY/s800/201007130248.png" alt="Death to Death Penalty"><br />
<a href="http://www.digital-district.fr/">http://www.digital-district.fr/</a></p>



<span id="more-2245"></span>



<p><iframe src="http://player.vimeo.com/video/12493449" width="597" height="336" frameborder="0"></iframe></p>



<p>どことなく荘厳なイメージを受けますね。</p>



<p>死刑については、このようなブログでさらりと語れる程<br />
簡単なお話ではないと思うのでそれはしませんが、<br />
蝋で作られ、「死刑」をモチーフにした人形や道具が<br />
溶け落ちていく様は、美しく、どこか恐ろしく、<br />
こめられたメッセージが深く突き刺さる演出です。</p>



<p>…考えてしまいますね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHP: CodeIgniterをセキュアに使うチュートリアル</title>
		<link>https://blog.mach3.jp/2010/07/08/php-codeigniter-security.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 08 Jul 2010 00:16:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/07/08/php-codeigniter%e3%82%92%e3%82%bb%e3%82%ad%e3%83%a5%e3%82%a2%e3%81%ab%e4%bd%bf%e3%81%86%e3%83%81%e3%83%a5%e3%83%bc%e3%83%88%e3%83%aa%e3%82%a2%e3%83%ab.html</guid>

					<description><![CDATA[PHPフレームワークは数多く公開されておりますが、 中でも個人的にお気に入りなのはシンプル・軽量さが売りのCodeIgniterです。 » CodeIgniter &#8211; Open source PHP web  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>PHPフレームワークは数多く公開されておりますが、<br />
中でも個人的にお気に入りなのはシンプル・軽量さが売りのCodeIgniterです。<br />
» <a href="http://codeigniter.com/" target="_blank">CodeIgniter &#8211; Open source PHP web application framework</a><br />
この度Nettuts+でCodeIgniterをセキュアに使うためのチュートリアルが紹介されていました。</p>



<p>※2010/08/07 セッションエンコーディングの項で、キー文字列を入力した例を追記</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh5.ggpht.com/_JJkNs5Ixl70/TDSZBzTl3wI/AAAAAAAAA9w/zE4KjrHWOj4/s800/201007072219.png" alt="CodeIgniter"/></figure>



<p></p>



<span id="more-2246"></span>



<p><a href="http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-security/">CodeIgniter from Scratch: Security | Nettuts+</a></p>



<p><embed src="http://blip.tv/play/gcMVgeq9QAI%2Em4v" type="application/x-shockwave-flash" width="480" height="390" allowscriptaccess="always" allowfullscreen="true"><br />
</p>



<p>こちらがそのチュートリアルビデオなのですが…<br />
35分と大変長いので、要点だけ下にまとめておきます。<br />
ビデオではスクラッチから書いていて大変わかりやすいので、<br />
時間がある時に見ておくと良いと思います！<br />
英語ですが、コードだけ見ていても参考になります。</p>



<ol class="wp-block-list">
<li><a href="#security-1">パラメータに使用される文字を制限する</a></li>



<li><a href="#security-2">パスワードエンコーディング</a></li>



<li><a href="#security-3">SQLインジェクション対策</a></li>



<li><a href="#security-4">クロスサイトスクリプティング対策</a></li>



<li><a href="#security-5">セッションエンコーディング</a></li>



<li><a href="#security-6">PHPのエラー表示を消す</a></li>



<li><a href="#security-7">プライベートメソッドを使う</a></li>
</ol>



<h2 class="wp-block-heading" id="security-1">1. パラメータに使用される文字を制限する</h2>



<p>CodeIgniterはURLの一部をメソッドの引数として受け取りますが、<br />
そこで使用可能な文字をconfig.phpで厳しく管理しています。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$config&#91;<span class="hljs-string">'permitted_uri_chars'</span>] = <span class="hljs-string">'a-z 0-9~%.:_-'</span>;
</code></span></pre>


<p>正規表現の書式で指定されているここの値を、より厳格にする事で<br />
クライアント側からの予期せぬインプットを防ぐ事が出来ます。<br />
制作するアプリケーションによって中身を精査すると良いでしょう。</p>



<h2 class="wp-block-heading" id="security-2">2. パスワードエンコーディング</h2>



<p>sha1やmd5等のPHPに既存の関数ではなく、<br />
よりセキュアにエンコーディング出来るencryptライブラリの使用が推奨されています。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;library(<span class="hljs-string">"encrypt"</span>);
<span class="hljs-keyword">$this</span>-&gt;encrypt-&gt;encode($mypassword);
</code></span></pre>


<p>encryptライブラリは、キーとなる文字列を第二引数に指定する事で、<br />
可逆エンコードする事も出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$key = <span class="hljs-string">"this is private key string"</span>;

$encoded_password = <span class="hljs-keyword">$this</span>-&gt;encrypt-&gt;encode($mypassword, $key); <span class="hljs-comment">// エンコード</span>
$decoded_password = <span class="hljs-keyword">$this</span>-&gt;encrypt-&gt;decode($encoded_password, $key); <span class="hljs-comment">//デコード</span>
</code></span></pre>


<p>cf) <a href="http://codeigniter.jp/user_guide_ja/libraries/encryption.html">暗号化クラス : CodeIgniter ユーザガイド 日本語版</a></p>



<h2 class="wp-block-heading" id="security-3">3. SQLインジェクション対策</h2>



<p>SQLインジェクション攻撃に備えて、<br />
クライアント側からインプットされた値をDBに渡す前に消毒してやります。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;database();
$query = <span class="hljs-keyword">$this</span>-&gt;db-&gt;query(<span class="hljs-string">"SELECT * FROM users WHERE name = {$this-&gt;db-&gt;escape($name)}"</span>);
</code></span></pre>


<p>また、ActiveRecordクラスを使用する事で<br />
最小限のスクリプティングでDBへアクセスする事が出来ます。<br />
この場合、入力された値のエスケープは自動で行わるので、意識する必要がありません。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;database();
$query = <span class="hljs-keyword">$this</span>-&gt;db-&gt;select(<span class="hljs-string">"*"</span>)-&gt;from(<span class="hljs-string">"users"</span>)-&gt;where(<span class="hljs-string">"name"</span>,$name);
</code></span></pre>


<p>cf) <a href="http://codeigniter.jp/user_guide_ja/database/active_record.html">Active Record クラス : CodeIgniter ユーザガイド 日本語版</a></p>



<h2 class="wp-block-heading" id="security-4">4. クロスサイトスクリプティング対策</h2>



<p>いわゆるXSSという奴です。<br />
この攻撃に備えて、値のインプットとアウトプット両方において<br />
フィルタをかけてやる必要があります。</p>



<h3 class="wp-block-heading">■インプット</h3>



<p>インプットは、$_POSTを使わずに入力クラスを用いて値を受け取りましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;input-&gt;post(<span class="hljs-string">"comment"</span>, <span class="hljs-keyword">true</span>);
</code></span></pre>


<p>第二引数にtrueを渡す事で、XSSフィルタを入力された値に適用できます。<br />
また、config.phpでの設定で、XSSフィルタリングをデフォルトでかける事が出来ます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// /system/application/config/config.php</span>
$config&#91;<span class="hljs-string">'global_xss_filtering'</span>] = <span class="hljs-keyword">TRUE</span>;
</code></span></pre>


<p>これで第二引数がなくともXSSフィルタがかかるようになりました。</p>



<p>単独でフィルタが使いたい場合は、xss_cleanメソッドを使いましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$clean_string = <span class="hljs-keyword">$this</span>-&gt;input-&gt;xss_clean($string);
</code></span></pre>


<h3 class="wp-block-heading">■アウトプット</h3>



<p>アウトプット時は、PHP組み込みのhtmlspecialcharsを用いるか、</p>


<pre class="wp-block-code"><span><code class="hljs language-php">htmlspecialchars($string);
</code></span></pre>


<p>または、CodeIgniterのヘルパ関数による出力をする事で<br />
自動的にフィルタリングがかけられます。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;helper(<span class="hljs-string">"url"</span>);
<span class="hljs-keyword">echo</span> anchor($url);
</code></span></pre>


<h2 class="wp-block-heading" id="security-5">5. セッションエンコーディング</h2>



<p>CodeIgniterのセッションはPHP組み込みのセッションを使用せず、<br />
独自のセッションデータを生成して利用します。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-keyword">$this</span>-&gt;load-&gt;library(<span class="hljs-string">"session"</span>);
<span class="hljs-keyword">$this</span>-&gt;session-&gt;set_userdata(<span class="hljs-string">"user_id"</span>, <span class="hljs-number">2</span>); <span class="hljs-comment">//セッションデータの入力</span>
<span class="hljs-keyword">$this</span>-&gt;session-&gt;userdata(<span class="hljs-string">"user_id"</span>); <span class="hljs-comment">//セッションデータの取得</span>
</code></span></pre>


<p>上のように、ログイン状態を保持する場合等に頻繁に使われますが、<br />
cookieを覗いて見ると、user_idの値が丸見えになっていて大変危険です。<br />
これを保護する為に、セッションエンコード用のキー文字列を<br />
config.phpで設定してやりましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php"><span class="hljs-comment">// /system/application/config/config.php :</span>
$config&#91;<span class="hljs-string">'encryption_key'</span>] = <span class="hljs-string">""</span>;
</code></span></pre>


<p>デフォルトでは空白なので、なんらかの文字列を入れてあげましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-php">$config&#91;<span class="hljs-string">'encryption_key'</span>] = <span class="hljs-string">"QEE3Ka2A9ABYhY4dU2VIQau8"</span>;
</code></span></pre>


<p>» <a href="http://codeigniter.jp/user_guide_ja/libraries/sessions.html">セッションクラス : CodeIgniter ユーザガイド 日本語版</a></p>



<h2 class="wp-block-heading" id="security-6">6. PHPのエラー表示を消す</h2>



<p>デフォルトがE_ALLになっているので0を入れてあげましょう。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-comment">// /index.php :</span>
error_reporting(<span class="hljs-number">0</span>);
</code></span></pre>


<h2 class="wp-block-heading" id="security-7">7. プライベートメソッドを使う</h2>



<p>コントローラ内のメソッドは基本的に全てアクセス可能ですが、<br />
プライベートな物としてコントローラの中でのみ使いたい、<br />
そんな時はメソッドの頭にアンダースコアをつけてあげると、<br />
外部からのアクセスが出来なくなり、ブラウザでアクセスしても404となります。</p>


<pre class="wp-block-code"><span><code class="hljs language-javascript"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Hoge</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Controller</span> </span>{
    <span class="hljs-comment">/* 中略 */</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">public_method</span> (<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">// アクセス可能</span>
    }
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">_secret_method</span> (<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">// アクセス不可（404）</span>
    }
}
</code></span></pre>


<p>アクセスされる事が好ましくないメソッドは、<br />
プライベートメソッドとして宣言しておきましょう。</p>



<p>以上です。<br />
日々注意しつつ、安全なアプリケーション制作をこころがけましょう！<br />
（と、主に自分に言い聞かせる）</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>LESSをJavaScriptで実現する 「LESS.js」</title>
		<link>https://blog.mach3.jp/2010/06/26/less-js.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Sat, 26 Jun 2010 20:00:00 +0000</pubDate>
				<category><![CDATA[Laboratory]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/06/26/less%e3%82%92javascript%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b-%e3%80%8cless-js%e3%80%8d.html</guid>

					<description><![CDATA[この記事の情報は古くなっています。 現在のLessはRubyではなくJavaScriptベースを基本として開発されています。 LESS &#8211; Leaner CSS LESSというのはCSSをより便利でスマートな [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="caution">
    この記事の情報は古くなっています。<br />
    現在のLessはRubyではなくJavaScriptベースを基本として開発されています。
</p>



<p><a href="http://lesscss.org/">LESS &#8211; Leaner CSS</a><br />
LESSというのはCSSをより便利でスマートな記法に拡張する為のRubyプロジェクトですが、<br />
そのJavaScript版が開発されている模様です。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/TCXdXCVSxnI/AAAAAAAAA9I/5X3vtGiM0i8/s800/201006261957.png" alt="LESS on JS"/></figure>



<p></p>



<span id="more-20"></span>



<h2 class="wp-block-heading">LESSってなぁに</h2>



<p><a href="http://lesscss.org/">LESS &#8211; Leaner CSS</a><br />
まずはLESSについて軽くメモ。<br />
LESSはCSSに様々な機能を提供する為のプロジェクトです。<br />
変数を扱ったり、関数のような記述をしたり、プロパティ内で計算したり…<br />
さらには、無駄のないように最適化を施してくれます。なんという愛。</p>



<p><a href="/2010/07/less-on-ruby-windows.html">Ruby版の詳しい導入方法と記法は別記事を見ていただくとして</a>、これは便利ですね。<br />
重複した記述をしなくて済むようになりますし、<br />
スタイルを一元管理し易くなります。<br />
ネストする記法も直感的で大変分かりやすいです。</p>



<h2 class="wp-block-heading">JavaScriptで動くLESS</h2>



<p>そんなLESSをJavaScriptで動かす為のプロジェクトがこちらです。<br />
<a href="http://code.google.com/p/lesscss/">lesscss &#8211; Project Hosting on Google Code</a><br />
上記のリンクよりdownloadへ進んでスクリプトを取得しましょう。</p>



<p>簡単な使い方。</p>



<p>まずスタイルシートの拡張子を「.less」としてリンク要素で埋め込みます。</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"stylesheet/less"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"style.less"</span> /&gt;</span>
</code></span></pre>


<p>次に、less.jsを読み込みます。（順番が逆ではいけません）</p>


<pre class="wp-block-code"><span><code class="hljs language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"less.js"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span>
</code></span></pre>


<p>これであとはless.jsさんがstyle.lessの中身をLESSルールに則って展開してくれます。</p>



<p>※本稿執筆時のバージョンは1.0.22。IEではエラーが発生。<br />
ChromeはローカルでのテストのみXmlHTTPRequestの都合上動きません。</p>



<p>nettuts+でチュートリアル動画が公開されていましたので、こちらもご参考迄。<br />
<a href="http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-you-need-to-check-out-less-js/">Quick Tip: You Need to Check out LESS.js | Nettuts+</a></p>



<h2 class="wp-block-heading">こんなふうに活用したい</h2>



<p>静的なページスタイルを全てJavaScriptに依存してしまうのは、よろしくない。<br />
現状の使い道としては、ローカルテスト用としてJavaScript版を使用して、<br />
本番化の際にはRubyで書き出してリンクを貼りなおす、といった感じでしょうか</p>



<p>ただ、せっかくJavaScriptで開発してくれているので、<br />
<a href="/2010/06/jslint.html">JSLint</a>や<a href="http://code.google.com/p/zen-coding/">Zen-Coding</a>のようにエディタのプラグインとして導入して、<br />
編集しながら簡単に展開出来る！という形になれば素晴らしいですね。<br />
Zen-Coding + LESSで開発速度が一気に加速しそうです。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Chromeはポテトと同時だった。ではOperaは…？</title>
		<link>https://blog.mach3.jp/2010/06/01/opera-promotion-video.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Tue, 01 Jun 2010 21:37:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Video]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/06/01/chrome%e3%81%af%e3%83%9d%e3%83%86%e3%83%88%e3%81%a8%e5%90%8c%e6%99%82%e3%81%a0%e3%81%a3%e3%81%9f%e3%80%82%e3%81%a7%e3%81%afopera%e3%81%af%e2%80%a6%ef%bc%9f.html</guid>

					<description><![CDATA[Chromeの速さをアピールするためのビデオ YouTube &#8211; Google Chrome Speed Tests が話題を呼びましたが、Operaだって負けていません。 この度、Operaからそのスピード [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Chromeの速さをアピールするためのビデオ<br />
<a href="http://www.youtube.com/watch?v=nCgQDjiotG0">YouTube &#8211; Google Chrome Speed Tests</a><br />
が話題を呼びましたが、Operaだって負けていません。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/TAT-EBFpeNI/AAAAAAAAA7I/gc_swKVgDb0/s800/201006012124.png" alt="Opera CM"/></figure>



<p></p>



<span id="more-27"></span>



<p>この度、Operaからそのスピードを映像化したビデオが公開されています。<br />
Chromeはポテトと同着だって？Operaならポテトを超える。</p>



<p>見てくださいこの大掛かりな装置を。<br />
これは本気だ…。</p>



<p><iframe width="500" height="288" src="//www.youtube.com/embed/zaT7thTxyq8?rel=0" frameborder="0" allowfullscreen=""></iframe></p>



<p>ね、はやかったでしょう？（ボブ</p>



<p>ちなみにOperaが高速というのはジョークでもなんでもなく、<br />
ベンチマークでも良い成績を収めています。<br />
cf) <a href="http://journal.mycom.co.jp/news/2010/02/04/021/index.html">Opera 10.5最速をマーク、Chrome 5とSafari開発版 | エンタープライズ | マイコミジャーナル</a></p>



<p>先日Twitterのフォロアーさんと共同でベンチマークをしていたのですが、<br />
私の環境ではそこでも最速を記録していました。</p>



<p>いろんな意味で、あなどれない存在ですね。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>&#034;MOMENTOS&#034; と素敵なショートフィルム on Vimeo</title>
		<link>https://blog.mach3.jp/2010/05/27/momentos-on-vimeo.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Thu, 27 May 2010 23:20:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Vimeo]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/05/27/momentos-%e3%81%a8%e7%b4%a0%e6%95%b5%e3%81%aa%e3%82%b7%e3%83%a7%e3%83%bc%e3%83%88%e3%83%95%e3%82%a3%e3%83%ab%e3%83%a0-on-vimeo.html</guid>

					<description><![CDATA[今日出会った素敵な映像。 一切台詞がないけれどメッセージがずっしりと届きます。 MOMENTOS from Nuno Rocha on Vimeo. ホームレスの男が路上で寝ていると、 目の前のショーケースにディスプレイ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>今日出会った素敵な映像。<br />
一切台詞がないけれどメッセージがずっしりと届きます。</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh4.ggpht.com/_JJkNs5Ixl70/S_5_KByxqKI/AAAAAAAAA7A/cYq7raC0SH8/s800/201005272311.png" alt="MOMENTOS"/></figure>



<p></p>



<span id="more-31"></span>



<p><iframe loading="lazy" src="//player.vimeo.com/video/17896628" width="597" height="336" frameborder="0" webkitallowfullscreen="" mozallowfullscreen="" allowfullscreen=""></iframe></p>



<p><a href="http://vimeo.com/17896628">MOMENTOS</a> from <a href="http://vimeo.com/nunorocha">Nuno Rocha</a> on <a href="https://vimeo.com">Vimeo</a>.</p>



<p>ホームレスの男が路上で寝ていると、<br />
目の前のショーケースにディスプレイが運ばれてきて…</p>



<p>心温まるストーリーです。イイハナシダナー。<br />
私は皆のガッツポーズにヤラれます。</p>



<p>同じ作者さんのをもう一本。</p>



<p><iframe loading="lazy" src="http://player.vimeo.com/video/6761817?portrait=0&amp;color=59a5d1" width="598" height="299" frameborder="0"></iframe></p>



<p>こっちはユーモラスな作品。<br />
おもわずニヤリとしてしまいますね。<br />
この後二人の勝負の行方はどうなったのか妄想しちゃいます。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>クレイジーでハイテンションな「Television is a drag」 on Vimeo</title>
		<link>https://blog.mach3.jp/2010/05/10/television-is-a-drag.html</link>
		
		<dc:creator><![CDATA[mach3]]></dc:creator>
		<pubDate>Mon, 10 May 2010 22:43:00 +0000</pubDate>
				<category><![CDATA[WebClip]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Vimeo]]></category>
		<guid isPermaLink="false">http://lab.mach3.jp/2010/05/10/%e3%82%af%e3%83%ac%e3%82%a4%e3%82%b8%e3%83%bc%e3%81%a7%e3%83%8f%e3%82%a4%e3%83%86%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%aa%e3%80%8ctelevision-is-a-drag%e3%80%8d-on-vimeo.html</guid>

					<description><![CDATA[今日思わず噴出してしまった動画。 「テレビはドラッグだ」とのことですが… Television is a drug. on Vimeo クレイジーなハイテンションぶりに爆笑してしまいました！ 見て！ぼくを見て！なに！？メ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>今日思わず噴出してしまった動画。<br />
「テレビはドラッグだ」とのことですが…</p>



<figure class="wp-block-image"><img decoding="async" src="http://lh6.ggpht.com/_JJkNs5Ixl70/S-gMAYdAI6I/AAAAAAAAA5I/M6978S99Njw/s800/201005102231.png" alt="Look at Me!"/></figure>



<p></p>



<span id="more-40"></span>



<p><a href="http://vimeo.com/10857606">Television is a drug. on Vimeo</a></p>



<p><iframe loading="lazy" src="http://player.vimeo.com/video/10857606?portrait=0&amp;color=59a5d1" width="598" height="449" frameborder="0"></iframe></p>



<p>クレイジーなハイテンションぶりに爆笑してしまいました！</p>



<p>見て！ぼくを見て！なに！？メシ！？なにか食うの？？<br />
え？寝るの？いいよ！いいとも！戻ってきたら見てね！OK！？</p>



<p>テレビをあまり見ない生活を送っているのでわかりませんが、<br />
依存してる人はこんな感じ…なわけないか。どうなんでしょう。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
