<?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>IONCANNON &#187; web design</title>
	<atom:link href="http://www.ioncannon.net/category/web-design/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ioncannon.net</link>
	<description>Thoughts on Software Development and Engineering</description>
	<lastBuildDate>Tue, 03 Jan 2012 13:59:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<atom:link rel='hub' href='http://www.ioncannon.net/?pushpress=hub'/>
		<item>
		<title>Mingruby 0.1.8 released</title>
		<link>http://www.ioncannon.net/ruby/111/mingruby-018-released/</link>
		<comments>http://www.ioncannon.net/ruby/111/mingruby-018-released/#comments</comments>
		<pubDate>Sun, 17 Dec 2006 19:41:33 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/ruby/111/mingruby-018-released/</guid>
		<description><![CDATA[I have brought the Ming Ruby library up to date with Ming 0.3, added patches submitted by users over the past year and included a ton of user supplied examples. I hope to find time soon to include the real examples on a page by themselves with the code needed to generate each. You can [...]]]></description>
			<content:encoded><![CDATA[<p>I have brought the Ming Ruby library up to date with Ming 0.3, added patches submitted by users over the past year and included a ton of user supplied examples. I hope to find time soon to include the real examples on a page by themselves with the code needed to generate each. You can check it out on rubyforge: <a href="http://mingruby.rubyforge.org/">Ming Ruby 0.1.8</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/ruby/111/mingruby-018-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Flash video metadata to display annotations</title>
		<link>http://www.ioncannon.net/php/110/using-flash-video-metadata-to-display-annotations/</link>
		<comments>http://www.ioncannon.net/php/110/using-flash-video-metadata-to-display-annotations/#comments</comments>
		<pubDate>Sat, 09 Dec 2006 19:58:30 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[utilities]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/php/110/using-flash-video-metadata-to-display-annotations/</guid>
		<description><![CDATA[Now that you can create a streaming Flash video player with PHP or Ruby and you know add metadata for cuepoints to Flash videos you are ready for something else. The following code will show you how to create a video player with PHP that will watch for metadata events and display annotations contained inside [...]]]></description>
			<content:encoded><![CDATA[<p>Now that you can <a href="http://www.ioncannon.net/ruby/108/flash-video-steam-ming-php-ruby/">create a streaming Flash video player with PHP or Ruby</a> and you know <a href="http://www.ioncannon.net/web-design/109/metadata-cuepoint-flash-video-flvtool/">add metadata for cuepoints to Flash videos</a> you are ready for something else. The following code will show you how to create a video player with PHP that will watch for metadata events and display annotations contained inside the metadata either over the video itself or in a div on the same page as the movie.<br />
<span id="more-110"></span></p>
<p>The first steps are to create your Flash video if you haven&#039;t already and then add the metadata to it. See my post on <a href="http://www.ioncannon.net/web-design/109/metadata-cuepoint-flash-video-flvtool/">adding cuepoint metadata with flvtool2</a> if you want to know more on how to create the Flash video and add the metadata. I&#039;m using the same video from that post but a different set of metadata. </p>
<p>Here is the metadata I&#039;ve added to the video for the following examples:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;tags<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 1<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>4000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mydata<span class="re2">&gt;</span></span></span>Some data 1<span class="sc3"><span class="re1">&lt;/mydata<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>event<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 2<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>8000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mydata<span class="re2">&gt;</span></span></span>Some data 2<span class="sc3"><span class="re1">&lt;/mydata<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>event<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 3<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>12000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mydata<span class="re2">&gt;</span></span></span>Some data 3<span class="sc3"><span class="re1">&lt;/mydata<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>event<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 4<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>16000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;mydata<span class="re2">&gt;</span></span></span>Some data 4<span class="sc3"><span class="re1">&lt;/mydata<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>event<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/tags<span class="re2">&gt;</span></span></span></div>
</div>
<p>The main thing to notice here is that the <b>type</b> for each metatag is <i>event</i> and in the <b>parameters</b> list there is a tag called <b>mydata</b> that contains some text. The text inside <b>mydata</b> is what we will be using for annotations. This tag can be called anything you like and you can have more than one.</p>
<p>I am using icons from the <a href="http://www.famfamfam.com/lab/icons/silk/preview.php">famfamfam silk</a> collection in the following examples. You will want to download them before trying these examples. </p>
<div class="codesnip-container" >
<div class="text codesnip" style="font-family:monospace;">wget http://www.famfamfam.com/lab/icons/silk/icons/control_pause.png<br />
wget http://www.famfamfam.com/lab/icons/silk/icons/control_pause_blue.png<br />
wget http://www.famfamfam.com/lab/icons/silk/icons/control_start.png<br />
wget http://www.famfamfam.com/lab/icons/silk/icons/control_start_blue.png<br />
wget http://www.famfamfam.com/lab/icons/silk/icons/control_play.png<br />
wget http://www.famfamfam.com/lab/icons/silk/icons/control_play_blue.png</div>
</div>
<p>The first example will display the annotation over the video itself. Here is the PHP code for generating the Flash player to display the annotations:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span><br />
<span class="kw2">function</span> createImage<span class="br0">&#40;</span><span class="re0">$img</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$shape</span> <span class="sy0">=</span> <span class="kw2">new</span> SWFShape<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">setRightFill</span><span class="br0">&#40;</span><span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">addFill</span><span class="br0">&#40;</span><span class="kw2">new</span> SWFBitmap<span class="br0">&#40;</span><a href="http://www.php.net/fopen"><span class="kw3">fopen</span></a><span class="br0">&#40;</span><span class="re0">$img</span><span class="sy0">,</span> <span class="st0">&quot;rb&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">drawLine</span><span class="br0">&#40;</span>16<span class="sy0">,</span>0<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">drawLine</span><span class="br0">&#40;</span>0<span class="sy0">,</span>16<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">drawLine</span><span class="br0">&#40;</span><span class="sy0">-</span>16<span class="sy0">,</span>0<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">drawLine</span><span class="br0">&#40;</span>0<span class="sy0">,-</span>16<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">return</span> <span class="re0">$shape</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw2">function</span> createButton<span class="br0">&#40;</span><span class="re0">$movie</span><span class="sy0">,</span> <span class="re0">$name</span><span class="sy0">,</span> <span class="re0">$loc</span><span class="sy0">,</span> <span class="re0">$script</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$button</span> <span class="sy0">=</span> <span class="kw2">new</span> SWFButton<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$button</span><span class="sy0">-&gt;</span><span class="me1">addShape</span><span class="br0">&#40;</span>createImage<span class="br0">&#40;</span><span class="st0">&quot;control_&quot;</span> <span class="sy0">.</span> <span class="re0">$name</span> <span class="sy0">.</span> <span class="st0">&quot;.png&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span> SWFBUTTON_UP<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$button</span><span class="sy0">-&gt;</span><span class="me1">addShape</span><span class="br0">&#40;</span>createImage<span class="br0">&#40;</span><span class="st0">&quot;control_&quot;</span> <span class="sy0">.</span> <span class="re0">$name</span> <span class="sy0">.</span> <span class="st0">&quot;_blue.png&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span> SWFBUTTON_DOWN <span class="sy0">|</span> SWFBUTTON_HIT <span class="sy0">|</span> SWFBUTTON_OVER<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$button</span><span class="sy0">-&gt;</span><span class="me1">addAction</span><span class="br0">&#40;</span><span class="kw2">new</span> SWFAction<span class="br0">&#40;</span><span class="re0">$script</span><span class="br0">&#41;</span><span class="sy0">,</span> SWFBUTTON_HIT<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$item</span><span class="sy0">=</span><span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">add</span><span class="br0">&#40;</span><span class="re0">$button</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$item</span><span class="sy0">-&gt;</span><span class="me1">moveto</span><span class="br0">&#40;</span><span class="re0">$loc</span><span class="sy0">,</span>248<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><a href="http://www.php.net/ming_setscale"><span class="kw3">Ming_setScale</span></a><span class="br0">&#40;</span>20<span class="sy0">.</span>0000000<span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://www.php.net/ming_useswfversion"><span class="kw3">ming_useswfversion</span></a><span class="br0">&#40;</span>7<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$movie</span> <span class="sy0">=</span> <span class="kw2">new</span> SWFMovie<span class="br0">&#40;</span>7<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">setDimension</span><span class="br0">&#40;</span>320<span class="sy0">,</span>270<span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// width x height</span><br />
<span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">setBackground</span><span class="br0">&#40;</span>0&#215;33<span class="sy0">,</span>0&#215;33<span class="sy0">,</span>0&#215;33<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">setRate</span><span class="br0">&#40;</span>8<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>createButton<span class="br0">&#40;</span><span class="re0">$movie</span><span class="sy0">,</span> <span class="st0">&quot;start&quot;</span><span class="sy0">,</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="st0">&quot;_root.videoStream.seek(0);&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
createButton<span class="br0">&#40;</span><span class="re0">$movie</span><span class="sy0">,</span> <span class="st0">&quot;pause&quot;</span><span class="sy0">,</span> <span class="nu0">40</span><span class="sy0">,</span> <span class="st0">&quot;_root.videoStream.pause(true);&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
createButton<span class="br0">&#40;</span><span class="re0">$movie</span><span class="sy0">,</span> <span class="st0">&quot;play&quot;</span><span class="sy0">,</span> <span class="nu0">70</span><span class="sy0">,</span> <span class="st0">&quot;_root.videoStream.pause(false);&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$strAction</span> <span class="sy0">=</span> <span class="st0">&quot;<br />
this.createTextField(&#039;video_txt&#039;, 999, 0, 0, 100, 100);<br />
video_txt.autoSize = &#039;left&#039;;<br />
video_txt.multiline = true;<br />
video_txt.textColor = 0xeeeeee;</p>
<p>stop();<br />
nc=new NetConnection();<br />
nc.connect(null);<br />
videoStream=new NetStream(nc);<br />
videoStreamItem.attachVideo(videoStream);<br />
videoStream.setBufferTime(10);<br />
videoStream.play(&#039;http://localhost/test.flv&#039;);<br />
videoStream.pause();</p>
<p>videoStream.onCuePoint = function(infoObject)<br />
{<br />
&nbsp; video_txt.text = &#039;Name: &#039; + infoObject.name + &#039;<span class="es1">\n</span>&#039;;<br />
&nbsp; if( infoObject.parameters != undefined )<br />
&nbsp; {<br />
&nbsp; &nbsp; video_txt.text += &#039;Info: &#039; + infoObject.parameters['mydata'] + &#039;<span class="es1">\n</span>&#039;;<br />
&nbsp; }<br />
&nbsp; else<br />
&nbsp; {<br />
&nbsp; &nbsp; video_txt.text += &#039;Info: undef<span class="es1">\n</span>&#039;;<br />
&nbsp; }<br />
};<br />
&quot;</span><span class="sy0">;</span></p>
<p><span class="re0">$stream</span> <span class="sy0">=</span> <span class="kw2">new</span> SWFVideoStream<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$stream</span><span class="sy0">-&gt;</span><span class="me1">setDimension</span><span class="br0">&#40;</span>320<span class="sy0">,</span> 240<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$item</span><span class="sy0">=</span><span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">add</span><span class="br0">&#40;</span><span class="re0">$stream</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$item</span><span class="sy0">-&gt;</span><span class="me1">setName</span><span class="br0">&#40;</span><span class="st0">&quot;videoStreamItem&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> SWFAction<span class="br0">&#40;</span><span class="re0">$strAction</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">nextFrame</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="st0">&quot;test.swf&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="sy1">?&gt;</span></div>
</div>
<p>The following part of the above PHP is what connects the cuepoints to the overlay text. Notice the use of the <b>mydata</b> tag. The tag data is available in the parameters hash:</p>
<div class="codesnip-container" >
<div class="text codesnip" style="font-family:monospace;">videoStream.onCuePoint = function(infoObject)<br />
{<br />
&nbsp; video_txt.text = &#039;Name: &#039; + infoObject.name + &#039;\n&#039;;<br />
&nbsp; if( infoObject.parameters != undefined )<br />
&nbsp; {<br />
&nbsp; &nbsp; video_txt.text += &#039;Info: &#039; + infoObject.parameters['mydata'] + &#039;\n&#039;;<br />
&nbsp; }<br />
&nbsp; else<br />
&nbsp; {<br />
&nbsp; &nbsp; video_txt.text += &#039;Info: undef\n&#039;;<br />
&nbsp; }<br />
};</div>
</div>
<p>Here is the result (hit the play button to start the video):</p>
<p><object type="application/x-shockwave-flash" data="http://d28nuaxr58rcpu.cloudfront.net/annotation-examples/test1.swf" width="320" height="270" id="go1"><param name="movie" value="http://d28nuaxr58rcpu.cloudfront.net/annotation-examples/test1.swf" /><param name="quality" value="high" /></object></p>
<p>The following examples is the same as the above example except that it uses a javascript call to display the annotation data in a div on the page:</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span><br />
<span class="kw2">function</span> createImage<span class="br0">&#40;</span><span class="re0">$img</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$shape</span> <span class="sy0">=</span> <span class="kw2">new</span> SWFShape<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">setRightFill</span><span class="br0">&#40;</span><span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">addFill</span><span class="br0">&#40;</span><span class="kw2">new</span> SWFBitmap<span class="br0">&#40;</span><a href="http://www.php.net/fopen"><span class="kw3">fopen</span></a><span class="br0">&#40;</span><span class="re0">$img</span><span class="sy0">,</span> <span class="st0">&quot;rb&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">drawLine</span><span class="br0">&#40;</span>16<span class="sy0">,</span>0<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">drawLine</span><span class="br0">&#40;</span>0<span class="sy0">,</span>16<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">drawLine</span><span class="br0">&#40;</span><span class="sy0">-</span>16<span class="sy0">,</span>0<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$shape</span><span class="sy0">-&gt;</span><span class="me1">drawLine</span><span class="br0">&#40;</span>0<span class="sy0">,-</span>16<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="kw1">return</span> <span class="re0">$shape</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><span class="kw2">function</span> createButton<span class="br0">&#40;</span><span class="re0">$movie</span><span class="sy0">,</span> <span class="re0">$name</span><span class="sy0">,</span> <span class="re0">$loc</span><span class="sy0">,</span> <span class="re0">$script</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="re0">$button</span> <span class="sy0">=</span> <span class="kw2">new</span> SWFButton<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$button</span><span class="sy0">-&gt;</span><span class="me1">addShape</span><span class="br0">&#40;</span>createImage<span class="br0">&#40;</span><span class="st0">&quot;control_&quot;</span> <span class="sy0">.</span> <span class="re0">$name</span> <span class="sy0">.</span> <span class="st0">&quot;.png&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span> SWFBUTTON_UP<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$button</span><span class="sy0">-&gt;</span><span class="me1">addShape</span><span class="br0">&#40;</span>createImage<span class="br0">&#40;</span><span class="st0">&quot;control_&quot;</span> <span class="sy0">.</span> <span class="re0">$name</span> <span class="sy0">.</span> <span class="st0">&quot;_blue.png&quot;</span><span class="br0">&#41;</span><span class="sy0">,</span> SWFBUTTON_DOWN <span class="sy0">|</span> SWFBUTTON_HIT <span class="sy0">|</span> SWFBUTTON_OVER<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$button</span><span class="sy0">-&gt;</span><span class="me1">addAction</span><span class="br0">&#40;</span><span class="kw2">new</span> SWFAction<span class="br0">&#40;</span><span class="re0">$script</span><span class="br0">&#41;</span><span class="sy0">,</span> SWFBUTTON_HIT<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$item</span><span class="sy0">=</span><span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">add</span><span class="br0">&#40;</span><span class="re0">$button</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$item</span><span class="sy0">-&gt;</span><span class="me1">moveto</span><span class="br0">&#40;</span><span class="re0">$loc</span><span class="sy0">,</span>248<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></p>
<p><a href="http://www.php.net/ming_setscale"><span class="kw3">Ming_setScale</span></a><span class="br0">&#40;</span>20<span class="sy0">.</span>0000000<span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://www.php.net/ming_useswfversion"><span class="kw3">ming_useswfversion</span></a><span class="br0">&#40;</span>7<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$movie</span> <span class="sy0">=</span> <span class="kw2">new</span> SWFMovie<span class="br0">&#40;</span>7<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">setDimension</span><span class="br0">&#40;</span>320<span class="sy0">,</span>270<span class="br0">&#41;</span><span class="sy0">;</span> <span class="co1">// width x height</span><br />
<span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">setBackground</span><span class="br0">&#40;</span>0&#215;33<span class="sy0">,</span>0&#215;33<span class="sy0">,</span>0&#215;33<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">setRate</span><span class="br0">&#40;</span>8<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p>createButton<span class="br0">&#40;</span><span class="re0">$movie</span><span class="sy0">,</span> <span class="st0">&quot;start&quot;</span><span class="sy0">,</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="st0">&quot;_root.videoStream.seek(0);&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
createButton<span class="br0">&#40;</span><span class="re0">$movie</span><span class="sy0">,</span> <span class="st0">&quot;pause&quot;</span><span class="sy0">,</span> <span class="nu0">40</span><span class="sy0">,</span> <span class="st0">&quot;_root.videoStream.pause(true);&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
createButton<span class="br0">&#40;</span><span class="re0">$movie</span><span class="sy0">,</span> <span class="st0">&quot;play&quot;</span><span class="sy0">,</span> <span class="nu0">70</span><span class="sy0">,</span> <span class="st0">&quot;_root.videoStream.pause(false);&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$strAction</span> <span class="sy0">=</span> <span class="st0">&quot;<br />
this.createTextField(&#039;video_txt&#039;, 999, 0, 0, 100, 100);<br />
video_txt.autoSize = &#039;left&#039;;<br />
video_txt.multiline = true;<br />
video_txt.textColor = 0xeeeeee;</p>
<p>stop();<br />
nc=new NetConnection();<br />
nc.connect(null);<br />
videoStream=new NetStream(nc);<br />
videoStreamItem.attachVideo(videoStream);<br />
videoStream.setBufferTime(10);<br />
videoStream.play(&#039;http://localhost/test.flv&#039;);<br />
videoStream.pause();</p>
<p>videoStream.onCuePoint = function(infoObject)<br />
{<br />
&nbsp; if( infoObject.parameters != undefined )<br />
&nbsp; {<br />
&nbsp; &nbsp; geturl(&#039;javascript:aTestCall(\&#034; + infoObject.parameters['mydata'] + &#039;\&#039;)');<br />
&nbsp; }<br />
};<br />
&quot;</span><span class="sy0">;</span></p>
<p><span class="re0">$stream</span> <span class="sy0">=</span> <span class="kw2">new</span> SWFVideoStream<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$stream</span><span class="sy0">-&gt;</span><span class="me1">setDimension</span><span class="br0">&#40;</span>320<span class="sy0">,</span> 240<span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$item</span><span class="sy0">=</span><span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">add</span><span class="br0">&#40;</span><span class="re0">$stream</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$item</span><span class="sy0">-&gt;</span><span class="me1">setName</span><span class="br0">&#40;</span><span class="st0">&quot;videoStreamItem&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">add</span><span class="br0">&#40;</span><span class="kw2">new</span> SWFAction<span class="br0">&#40;</span><span class="re0">$strAction</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">nextFrame</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="re0">$movie</span><span class="sy0">-&gt;</span><span class="me1">save</span><span class="br0">&#40;</span><span class="st0">&quot;test.swf&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="sy1">?&gt;</span></div>
</div>
<p>This javascript will display the data in the div (note that this won&#039;t work for all browsers, I&#039;m just making it simple):</p>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;"><span class="kw2">function</span> aTestCall<span class="br0">&#40;</span>data<span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;infoDisplayArea&quot;</span><span class="br0">&#41;</span>.<span class="me1">innerHTML</span> <span class="sy0">=</span> data<span class="sy0">;</span><br />
&nbsp; <span class="br0">&#125;</span></div>
</div>
<p>This is how you would set up the div to display the data:</p>
<div class="codesnip-container" >
<div class="html4strict codesnip" style="font-family:monospace;"><span class="sc2">&lt;<a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;infoDisplayArea&quot;</span> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;border: solid 1px #000; padding: 5px 5px 5px 5px; width: 50%;&quot;</span>&gt;</span><br />
No data yet&#8230;<br />
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/div.html"><span class="kw2">div</span></a>&gt;</span></div>
</div>
<p>Here is the result (hit the play button to start the video):</p>
<p><script type="text/javascript">//<!--
function aTestCall(data){document.getElementById("infoDisplayArea").innerHTML = data;} // --></script></p>
<p><object type="application/x-shockwave-flash" data="http://d28nuaxr58rcpu.cloudfront.net/annotation-examples/test2.swf" width="320" height="270" id="go2"><param name="movie" value="http://d28nuaxr58rcpu.cloudfront.net/annotation-examples/test2.swf" /><param name="quality" value="high" /></object></p>
<div id="infoDisplayArea" style="border: solid 1px #000; padding: 5px 5px 5px 5px; width: 50%;">
No data yet&#8230;
</div>
<p>Keep an eye on the above box while the video is playing to see the annotations.</p>
<p>Tags: <a href="http://technorati.com/tag/flash" rel="tag">flash</a>, <a href="http://technorati.com/tag/flash+video" rel="tag"> flash video</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/php/110/using-flash-video-metadata-to-display-annotations/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How to create and use Flash video metadata to add cue-points with flvtool2</title>
		<link>http://www.ioncannon.net/web-design/109/metadata-cuepoint-flash-video-flvtool/</link>
		<comments>http://www.ioncannon.net/web-design/109/metadata-cuepoint-flash-video-flvtool/#comments</comments>
		<pubDate>Fri, 08 Dec 2006 13:31:09 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[utilities]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/web-design/109/metadata-cuepoint-flash-video-flvtool/</guid>
		<description><![CDATA[Adding cue-points allows you to spice up your flash videos created with FFMpeg. Adding metadata to a FLV will allow you to introduce cue-points that have their own metadata that can be display when the cue-point is reached or let you jump to that cue-point. In the following tutorial you will learn how to add [...]]]></description>
			<content:encoded><![CDATA[<p>Adding cue-points allows you to spice up your <a href="http://www.ioncannon.net/linux/105/create-flash-videos-ffmpeg/">flash videos created with FFMpeg</a>. Adding metadata to a FLV will allow you to introduce cue-points that have their own metadata that can be display when the cue-point is reached or let you jump to that cue-point. In the following tutorial you will learn how to add metadata to your FLV files using <a href="http://inlet-media.de/flvtool2">flvtool2</a> and how it is useful for adding cue-points.<br />
<span id="more-109"></span></p>
<p>Metadata is added to a FLV file with flvtool2 using the following XML format:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;tags<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 1<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>2000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textinfo<span class="re2">&gt;</span></span></span>This is some text 1<span class="sc3"><span class="re1">&lt;/textinfo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>test1.jpg<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>navigation<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 2<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>4000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textinfo<span class="re2">&gt;</span></span></span>This is some text 2<span class="sc3"><span class="re1">&lt;/textinfo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>test2.jpg<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>navigation<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/tags<span class="re2">&gt;</span></span></span></div>
</div>
<p>Most of the tags are obvious but the following tags are important to point out:</p>
<ul>
<li>metatag &#8211; When the overwrite flag is set to true the metadata is overwritten at the given timestamp</li>
<li>timestamp &#8211; This is where to put the metadata in milliseconds from the start of the FLV</li>
<li>parameters &#8211; This is the metadata for the given metadata. It allows you to specify any named parameter that will then be turned into a map available to your actionscript in the flash player playing your FLV file.</li>
<li>type &#8211; This specifies what this metadata is used for. The options are: navigation, event</li>
</ul>
<p>The following syntax is used when running flvtool2:</p>
<p>Usage: flvtool2 [-ACDPUVaciklnoprstvx]&#8230; [-key:value]&#8230; in-path|stdin [out-path|stdout]</p>
<p>Note that you can add any key-value pair by specifying them here. From the help the key-value pair: key:value &#8211; Key-value-pair for onMetaData tag (overwrites generated values).</p>
<p>After building your metadata xml file with the above syntax you would run a command like the following:</p>
<div class="codesnip-container" >
<div class="text codesnip" style="font-family:monospace;">flvtool2 -AUtP mymeta.xml -thumbLocation:http://localhost/thumb test.flv</div>
</div>
<p>Now that you know how to create metadata and cue-points we can talk about one of the things you can do with them. With FFMpeg you can generate thumbnails of your FLV using the following command:</p>
<div class="codesnip-container" >
<div class="text codesnip" style="font-family:monospace;">ffmpeg -i test.flv -an -ss 00:00:06 -r 1 -vframes 1 %d.jpg</div>
</div>
<p>That command tells FFMpeg to open the file test.flv with no audio support then seek to the 6th second. After seeking to the 6th second it records 1 frame at a framerate of 1. Here are the description of each option from the FFMpeg help:</p>
<ul>
<li>-i = input video</li>
<li>-an = disable audio</li>
<li>-ss = set the start time offset</li>
<li>-r = set frame rate</li>
<li>-vframes = number of frames to record</li>
</ul>
<p>Now we need to put these two things together with a flash video player that will use the cue-point metadata. One such player is the open source flash video player <a href="http://flowplayer.sourceforge.net/">FlowPlayer</a>. To get the following to work you will need to have a streaming video server to stream the FLV from.</p>
<p>I started with the public domain video from the following page: <a href="http://www.archive.org/details/merry_melodies_fresh_hare">Archive.org &#8211; Merry Melodies Fresh Hare</a>. I encoded 17 seconds, starting at the 3rd second and ending at the 20th, of the video with ffmpeg.</p>
<div class="codesnip-container" >
<div class="text codesnip" style="font-family:monospace;">wget http://www.archive.org/download/merry_melodies_fresh_hare/merry_melodies_fresh_hare.mpg<br />
ffmpeg -ss 00:03:00 -t 00:00:20 -i merry_melodies_fresh_hare.mpg -s 320&#215;240 -ar 22050 -r 12 test.flv</div>
</div>
<p>Next I created 4 thumbnails at 4 second intervals using ffmpeg at a size of 110&#215;80 each:</p>
<div class="codesnip-container" >
<div class="text codesnip" style="font-family:monospace;">ffmpeg -i test.flv -an -ss 00:00:04 -r 1 -vframes 1 -s 110&#215;80 %d.jpg<br />
mv 1.jpg test1.jpg<br />
ffmpeg -i test.flv -an -ss 00:00:08 -r 1 -vframes 1 -s 110&#215;80 %d.jpg<br />
mv 1.jpg test2.jpg<br />
ffmpeg -i test.flv -an -ss 00:00:12 -r 1 -vframes 1 -s 110&#215;80 %d.jpg<br />
mv 1.jpg test3.jpg<br />
ffmpeg -i test.flv -an -ss 00:00:16 -r 1 -vframes 1 -s 110&#215;80 %d.jpg<br />
mv 1.jpg test4.jpg</div>
</div>
<p>The results are shown here:</p>
<p><img src="http://d28nuaxr58rcpu.cloudfront.net/cfvm-thumb/test1.jpg"/><img src="http://d28nuaxr58rcpu.cloudfront.net/cfvm-thumb/test2.jpg"/><img src="http://d28nuaxr58rcpu.cloudfront.net/cfvm-thumb/test3.jpg"/><img src="http://d28nuaxr58rcpu.cloudfront.net/cfvm-thumb/test4.jpg"/></p>
<p>I then created the following metadata xml file to specify the cue-points and the thumbnails for each:</p>
<div class="codesnip-container" >
<div class="xml codesnip" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;tags<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 1<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>4000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textinfo<span class="re2">&gt;</span></span></span>This is some text 1<span class="sc3"><span class="re1">&lt;/textinfo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>test1.jpg<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>navigation<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 2<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>8000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textinfo<span class="re2">&gt;</span></span></span>This is some text 2<span class="sc3"><span class="re1">&lt;/textinfo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>test2.jpg<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>navigation<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 3<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>8000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textinfo<span class="re2">&gt;</span></span></span>This is some text 3<span class="sc3"><span class="re1">&lt;/textinfo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>test3.jpg<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>navigation<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;metatag</span> <span class="re0">event</span>=<span class="st0">&quot;onCuePoint&quot;</span> <span class="re0">overwrite</span>=<span class="st0">&quot;true&quot;</span><span class="re2">&gt;</span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Cue Point 4<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;timestamp<span class="re2">&gt;</span></span></span>8000<span class="sc3"><span class="re1">&lt;/timestamp<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;textinfo<span class="re2">&gt;</span></span></span>This is some text 3<span class="sc3"><span class="re1">&lt;/textinfo<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;thumb<span class="re2">&gt;</span></span></span>test4.jpg<span class="sc3"><span class="re1">&lt;/thumb<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/parameters<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;type<span class="re2">&gt;</span></span></span>navigation<span class="sc3"><span class="re1">&lt;/type<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/metatag<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/tags<span class="re2">&gt;</span></span></span></div>
</div>
<p>And then I added it to the FLV file:</p>
<div class="codesnip-container" >
<div class="text codesnip" style="font-family:monospace;">flvtool2 -AUtP test-meta.xml -thumbLocation:http://d28nuaxr58rcpu.cloudfront.net/cfvm-thumb test.flv</div>
</div>
<p>And here is the result (you need to hit play to get things started and clicking on the images will jump to the cue-points):</p>
<p><object type="application/x-shockwave-flash" width="450" height="500" data="http://d28nuaxr58rcpu.cloudfront.net/FlowPlayerLP.swf" id="FlowPlayerLP"><param name="allowScriptAccess" value="sameDomain" /><param name="movie" value="http://d28nuaxr58rcpu.cloudfront.net/FlowPlayerLP.swf" /><param name="quality" value="high" /><param name="scale" value="noScale" /><param name="wmode" value="transparent" /><param name="flashvars" value="configFileName=http://d28nuaxr58rcpu.cloudfront.net/cfvm-thumb/fp.js" /></object></p>
<p>Tags: <a href="http://technorati.com/tag/flash+video" rel="tag">flash video</a>, <a href="http://technorati.com/tag/flowplayer" rel="tag"> flowplayer</a>, <a href="http://technorati.com/tag/flv" rel="tag"> flv</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/web-design/109/metadata-cuepoint-flash-video-flvtool/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
<enclosure url="http://www.archive.org/download/merry_melodies_fresh_hare/merry_melodies_fresh_hare.mpg" length="54904832" type="video/mpeg" />
		</item>
		<item>
		<title>How to compile ImageMagick for PHP by hand</title>
		<link>http://www.ioncannon.net/php/75/how-to-compile-imagemagick-for-php-by-hand/</link>
		<comments>http://www.ioncannon.net/php/75/how-to-compile-imagemagick-for-php-by-hand/#comments</comments>
		<pubDate>Wed, 01 Nov 2006 00:33:34 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/php/75/how-to-compile-imagemagick-for-php-by-hand/</guid>
		<description><![CDATA[Some time ago I was looking at how to re-size uploaded images in a way that looks good using PHP. I was impressed that when I uploaded a 4M picture to flickr it managed to re-size and compress it into a smaller version that looked correct. I knew they weren&#039;t just resizing it so I [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago I was looking at how to re-size uploaded images in a way that looks good using PHP. I was impressed that when I uploaded a 4M picture to flickr it managed to re-size and compress it into a smaller version that looked correct. I knew they weren&#039;t just resizing it so I went on a quest to find out what it took to do the same thing with PHP. The following is step one in that process.</p>
<p><span id="more-75"></span></p>
<p>My goal was to be able to convert a large image into a smaller one and have it look decent. I tried a few different approaches directly in PHP before I decided to see just how hard it was to do with a command line tool. I found that I could re-size and enhance a photos in a way that made them look pretty good using ImageMagick&#039;s re-size and sharpen (for more on doing this on the command line see my <a href="http://www.ioncannon.net/linux/72/5-imagemagick-command-line-examples-part-2/">ImageMagick command line examples</a>). </p>
<p>At this point I started looking into how to translate what I did on the command line into PHP. The first step was to get access to the ImageMagick libraries into PHP. The first step was to get MagickWand for PHP installed so that I could call the ImageMagick functions with PHP. There are a few other ways of calling ImageMagick out there but they all involved system calls to the convert command and I would rather use library calls. Here are the steps you need to get the MagicKWand extension installed:</p>
<ol>
<li>Install ImageMagick either from source or a binary. In my case I&#039;m running fedora so I just installed it with yum.</li>
<li>Download the <a href="http://www.magickwand.org/download/php/">MagickWand extension</a> for PHP.</li>
<li>Go to your PHP source directory and find the ext directory under it. In the ext directory expand the extension.</li>
<li>Change directories into the magickwand directory under ext and run phpize.</li>
<li>Change back to the root PHP source directory and remove the current configuration file: rm -f ./configure</li>
<li>In the root PHP source directory run ./buildconf &#8211;force to rebuild the configuration script</li>
<li>You can verify the configuration file was created correctly by looking for magickwand in the new configure script: grep magickwand configure</li>
<li>Now reconfigure your PHP. Use the flag &#8211;with-magickwand=<directory to ImageMagick> to enable MagickWand. For me the directory to ImageMagick was /usr</li>
<li>Now you can recompile PHP and reinstall it. You should find MagickWand listed in a phpinfo() once it is compiled in correctly.</li>
</ol>
<p>Next time I will go into how to use PHP to do some of the tricks you can do with ImageMagick on the command line.</p>
<p>Tags: <a href="http://technorati.com/tag/ImageMagick" rel="tag">ImageMagick</a>, <a href="http://technorati.com/tag/PHP" rel="tag"> PHP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/php/75/how-to-compile-imagemagick-for-php-by-hand/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Good article on keeping javascript maintainable</title>
		<link>http://www.ioncannon.net/web-design/86/good-article-on-keeping-javascript-maintainable/</link>
		<comments>http://www.ioncannon.net/web-design/86/good-article-on-keeping-javascript-maintainable/#comments</comments>
		<pubDate>Mon, 17 Jul 2006 18:53:45 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[web design]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/web-design/86/good-article-on-keeping-javascript-maintainable/</guid>
		<description><![CDATA[Vitamin has a good article today on the importance of maintainable javascript. 95% of what the article covers is applicable to any code. The important parts of the article cover javascript specific things like: object literals, namespaces and where to go when you want to compress your javascript to save bandwidth/make it download faster. They [...]]]></description>
			<content:encoded><![CDATA[<p>Vitamin has a good article today on <a href="http://www.thinkvitamin.com/features/dev/the-importance-of-maintainable-javascript">the importance of maintainable javascript</a>. 95% of what the article covers is applicable to any code. The important parts of the article cover javascript specific things like: <a href="http://www.wait-till-i.com/index.php?p=239">object literals</a>, <a href="http://www.dustindiaz.com/namespace-your-javascript/">namespaces</a> and where to go when you want to compress your javascript to save bandwidth/make it download faster. They recommend <a href="http://dean.edwards.name/packer/">packer</a> and <a href="http://javascript.crockford.com/jsmin.html">JSMIN</a> as two javascript compressors but I think JSMIN is probably a better bet mainly because you can run it from the command line and make it part of a build script.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/web-design/86/good-article-on-keeping-javascript-maintainable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interesting alternative to tagging</title>
		<link>http://www.ioncannon.net/web-design/78/interesting-alternative-to-tagging/</link>
		<comments>http://www.ioncannon.net/web-design/78/interesting-alternative-to-tagging/#comments</comments>
		<pubDate>Wed, 12 Jul 2006 22:58:59 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/web-design/78/interesting-alternative-to-tagging/</guid>
		<description><![CDATA[I found a post about an alternative approach to tagging today and thought it would be interesting if someone made a wordpress plugin that would use this idea. It seems like it might be a nice alternative to the normal site map that most sites have when there is a lot of information to drill [...]]]></description>
			<content:encoded><![CDATA[<p>I found a post about <a href="http://blog.thinkphp.de/archives/124-An-alternative-Approach-to-Tagging.html">an alternative approach to tagging</a> today and thought it would be interesting if someone made a wordpress plugin that would use this idea. It seems like it might be a nice alternative to the normal site map that most sites have when there is a lot of information to drill down into.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/web-design/78/interesting-alternative-to-tagging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capture full page screenshots with firefox</title>
		<link>http://www.ioncannon.net/web-design/70/capture-full-page-screenshots-with-firefox/</link>
		<comments>http://www.ioncannon.net/web-design/70/capture-full-page-screenshots-with-firefox/#comments</comments>
		<pubDate>Sun, 09 Jul 2006 13:36:43 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[utilities]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/web-design/70/capture-full-page-screenshots-with-firefox/</guid>
		<description><![CDATA[Ever wanted to capture the entire page you are viewing in firefox instead of just what is shown on your screen? Ever need to do that from a command line? Here are two extensions that let you do just that. Page Saver The first extension is called Page Saver and comes in two versions. The [...]]]></description>
			<content:encoded><![CDATA[<p>Ever wanted to capture the entire page you are viewing in firefox instead of just what is shown on your screen? Ever need to do that from a command line? Here are two extensions that let you do just that.</p>
<h2>Page Saver</h2>
<p>The first extension is called <a href="http://pearlcrescent.com/products/pagesaver/">Page Saver</a> and comes in two versions. The pro version you have to pay for but the free version does a good job all by itself. Here is an example of a fullpage screenshot: <br/></p>
<p><span id="more-70"></span></p>
<p><img src="http://d28nuaxr58rcpu.cloudfront.net/img/news.com.page.saveer.jpg"/><br/></p>
<p>Here is an example of a normal screenshot: <br/></p>
<p><img src="http://d28nuaxr58rcpu.cloudfront.net/img/news.com.page.saveer.visible.jpg"/><br/></p>
<p>I think from a technical standpoint this extension is the better of the two. It seems to perform a little better and doesn&#039;t suffer from any obvious bugs. The pro version doesn&#039;t offer a lot great extras but if you want to save to an FTP/HTTP server or directly to your clipboard then you will probably want to pay for it.</p>
<h2>ScreenGrab</h2>
<p>The second extension is <a href="http://andy.5263.org/?page_id=5">ScreenGrab</a>. This is a completely free screen capture extension but doesn&#039;t have as many features as Page Saver and suffers from a few bugs. Here is an example of what you get when you capture a full page: </br></p>
<p><img src="http://d28nuaxr58rcpu.cloudfront.net/img/news.com.screengrab2.jpg"/><br/></p>
<p>Hower if you happen to have a popup come up in front of the window while it is being captured you get this: <br/></p>
<p><img src="http://d28nuaxr58rcpu.cloudfront.net/img/news.com.screengrab.jpg"/><br/></p>
<p>Here is an example of a normal screenshot: <br/></p>
<p><img src="http://d28nuaxr58rcpu.cloudfront.net/img/news.com.screengrab.viewport.jpg"/><br/></p>
<p>The popup bug seems minor to me so I would say between the two extensions I would pick ScreenGrab because it is completely free. <br/></p>
<p>Tags: <a href="http://technorati.com/tag/firefox" rel="tag">firefox</a>, <a href="http://technorati.com/tag/screen+capture" rel="tag"> screen capture</a>, <a href="http://technorati.com/tag/screenshot" rel="tag"> screenshot</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/web-design/70/capture-full-page-screenshots-with-firefox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Some interesting and useful AJAX/Javascript code</title>
		<link>http://www.ioncannon.net/web-design/63/some-interesting-and-useful-ajaxjavascript-code/</link>
		<comments>http://www.ioncannon.net/web-design/63/some-interesting-and-useful-ajaxjavascript-code/#comments</comments>
		<pubDate>Fri, 23 Jun 2006 15:10:57 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[web design]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/web-design/63/some-interesting-and-useful-ajaxjavascript-code/</guid>
		<description><![CDATA[I like seeing more and more uses of prototype. I&#039;m not sure if the big guys will win out with their UI toolkits (Yahoo UI/GWT) or if it will always feel better to put things together by hand. Either way it is good to understand how this stuff works. This is an edit in place [...]]]></description>
			<content:encoded><![CDATA[<p>I like seeing more and more uses of prototype. I&#039;m not sure if the big guys will win out with their UI toolkits (Yahoo UI/GWT) or if it will always feel better to put things together by hand. Either way it is good to understand how this stuff works. This is an <a href="http://joseph.randomnetworks.com/archives/2006/06/07/ajax-edit-in-place-with-prototype-version-020/">edit in place</a> example that is similar to what you see on flickr.</p>
<p>I&#039;ve seen something like this a number of times when I&#039;ve visited sites. They want your feedback on something or other while you are browsing. It is a little floating plus feedback sign that hangs out in the lower right hand corner. <a href="http://www.ibegin.com/blog/p_ajax_feedback_mechanism.html">Check it out</a>.</p>
<p>Browsing digg I noticed an article on &#034;unobtrusive sidenotes&#034; and found that the idea is pretty cool: The <a href="http://blog.arc90.com/2006/05/introducing_unobtrusive_sideno.php">announcement</a> and <a href="http://lab.arc90.com/2006/05/unobtrusive_sidenotes.php">code</a>. They are done with javascript so you can turn them on and off on the fly.</p>
<p>Tags: <a href="http://technorati.com/tag/javascript" rel="tag">javascript</a>, <a href="http://technorati.com/tag/ajax" rel="tag"> ajax</a>, <a href="http://technorati.com/tag/sidenote" rel="tag"> sidenote</a>, <a href="http://technorati.com/tag/ajax+feedback" rel="tag"> ajax feedback</a>, <a href="http://technorati.com/tag/prototype" rel="tag"> prototype</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/web-design/63/some-interesting-and-useful-ajaxjavascript-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Search Engine Marketing and Google’s new trending tools</title>
		<link>http://www.ioncannon.net/web-design/23/search-engine-marketing-and-googles-new-trending-tools/</link>
		<comments>http://www.ioncannon.net/web-design/23/search-engine-marketing-and-googles-new-trending-tools/#comments</comments>
		<pubDate>Thu, 11 May 2006 18:22:59 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[web design]]></category>
		<category><![CDATA[sem]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/uncategorized/23/search-engine-marketing-and-googles-new-trending-tools/</guid>
		<description><![CDATA[Now that google has anounced their new Google trends site I couldn&#039;t help but mention it. If you spend any type of money at all on SEM you need to check your keywords against this site. There are a couple of intro articles about the new service at Micro Persuasion and TechCrunch. To get a [...]]]></description>
			<content:encoded><![CDATA[<p>Now that google has anounced their new <a href="http://www.google.com/trends">Google trends</a> site I couldn&#039;t help but mention it. If you spend any type of money at all on SEM you need to check your keywords against this site. </p>
<p>There are a couple of intro articles about the new service at <a>Micro Persuasion</a> and <a href="http://www.techcrunch.com/2006/05/10/google-trends-launches/">TechCrunch</a>. </p>
<p>To get a real feel for how important this information will be you should try out a few queries for yourself. Take a simple query like <a href="http://www.google.com/trends?q=motorcyle">&#034;motorcycle&#034;</a> and then look at the regions tab. A lot of the queries about motorcycles originated from the Philippines. Now look at <a href="http://www.google.com/trends?q=pizza">&#034;pizza&#034;</a>, most of the queries there originated from the US. That should make it much easier to target your audience with your advertisments. The trending is nice as well and should give marketers a better idea of when to boost spending to maximize exposure.</p>
<p>This follows another <a href="https://adwords.google.com/select/KeywordToolExternal">tool Google just release for their AdWords service</a>. You can read more about it <a href="http://adwords.blogspot.com/2006/03/keyword-tool-global-trends-and-other.html">at the adwords blog</a>. That tool gives you a different view of the search trends and is more like what you get from <a href="http://searchmarketing.yahoo.com/arp/srch_pr.php">Yahoo&#039;s advertising system</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/web-design/23/search-engine-marketing-and-googles-new-trending-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Search Engine Optimization</title>
		<link>http://www.ioncannon.net/web-design/24/search-engine-optimization/</link>
		<comments>http://www.ioncannon.net/web-design/24/search-engine-optimization/#comments</comments>
		<pubDate>Thu, 11 May 2006 01:38:49 +0000</pubDate>
		<dc:creator>carson</dc:creator>
				<category><![CDATA[web design]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.ioncannon.net/uncategorized/24/search-engine-optimization/</guid>
		<description><![CDATA[Recently I&#039;ve been collecting links on interesting SEO topics. I figured I would dump a few of them out with quick reasons why I think they are good to read. A technical read on how search engines work in general. It focuses on google but has a lot of good general information in it. This [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#039;ve been collecting links on interesting SEO topics. I figured I would dump a few of them out with quick reasons why I think they are good to read.</p>
<p><a href="http://www-db.stanford.edu/~backrub/google.html">A technical read</a> on how search engines work in general. It focuses on google but has a lot of good general information in it.</p>
<p>This is a recent article on how to optimize your site. I like it because it has an acronym on how to do it <a href="http://www.web-designers.biz/2006/01/search-engine-optimization-for.html">&#034;camelot&#034;</a>.</p>
<p>SEO chat has a lot of information in its <a href="http://forums.seochat.com/">forums</a>.</p>
<p><a href="http://www.mattcutts.com/blog/notifying-webmasters-of-penalties/">An article</a> from a guy who works at Google and goes into what the search engines have to deal with to keep people on the up and up. It goes into some of the stuff you don&#039;t want to be doing to try to get your site at the top of a search. For some reason I found it interesting that this guy is from kentucky.</p>
<p>Another good article on the <a href="http://www.seochat.com/c/a/Website-Promotion-Help/SEO-Code-of-Conduct/">&#034;SEO Code of Conduct&#034;</a> AKA what you should not be doing to get your site at the top of a search.</p>
<p>A nice tool to help you find words to go with your website: <a href="http://www.wordtracker.com/">WordTracker</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ioncannon.net/web-design/24/search-engine-optimization/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

