<?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>Articulating ideas</title>
	<atom:link href="http://www.zoharbabin.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.zoharbabin.com</link>
	<description>Searching for the limits of web video. Exploring innovative ideas to change the ways we communicate.</description>
	<lastBuildDate>Sun, 08 Jan 2012 07:46:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Which FizzBuzz solution is the most efficient?</title>
		<link>http://www.zoharbabin.com/which-fizzbuzz-solution-is-the-most-efficient</link>
		<comments>http://www.zoharbabin.com/which-fizzbuzz-solution-is-the-most-efficient#comments</comments>
		<pubDate>Sun, 08 Jan 2012 07:41:11 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[C# (CSharp)]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Developer Interview]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[FizzBuzz]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[solution]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=234</guid>
		<description><![CDATA[This little &#8220;poor-developer filter&#8221; was discussed and solved many times. Despite the number of discussions it spur, and the many suggested ways to solve the problem, the question regarding which solution would be the most efficient, remained unclear. Maybe because its original goal was to screen &#8220;bad&#8221; developers rather than actually solve the problem efficiently or [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>This little &#8220;poor-developer filter&#8221; was <a href="http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/" target="_blank">discussed</a> and <a href="http://rosettacode.org/wiki/FizzBuzz" target="_blank">solved</a> <a href="http://www.reddit.com/r/programming/tb/10d7w" target="_blank">many</a> times.</p>
<p>Despite the number of discussions it spur, and the many suggested ways to solve the problem, the question regarding which solution would be the most efficient, remained unclear. Maybe because its original goal was to screen &#8220;bad&#8221; developers rather than actually solve the problem efficiently or demonstrate creativity. <a href="http://weblog.raganwald.com/2007/01/dont-overthink-fizzbuzz.html" target="_blank">It was also said</a> that during an interview, solving the problem in more efficient less readable manner would disqualify the developer.</p>
<p>The FizzBuzz problem seems so naive and simple to solve, that it becomes an even more intriguing task to optimize it. So I&#8217;ve looked around the various suggestions (more than 80 languages!), and isolated the key ways to solve the problem. Then I added a simple timing and below are the results. Which FizzBuzz solution is the most efficient?</p>
<p>It seems that there are 4 main patterns to solve the FizzBuzz problem:</p>
<ol>
<li>Using <a href="http://en.wikipedia.org/wiki/Modulo_operation" target="_blank">modulo</a> and int equality test.</li>
<li>Using modulo and string equality test.</li>
<li>Count 3 and 5 down or up as <em>i</em> progress (testing counts of 3 and 5).</li>
<li>Using some <a href="http://en.wikipedia.org/wiki/Bitwise_operation" target="_blank">bitwise</a> trickery.</li>
</ol>
<p>I&#8217;m using C# in the implementation example, yet the above methods apply to all languages (possibly languages will deffer being better than others comparing ints vs. comparing strings).</p>
<p>As shown below, the most effective methods were the ones with: 1. the least int equality tests, and 2. those using less modulo.</p>
<p>The most efficient? we almost have a tie between the following 3 marked in yellow.</p>
<p><a href="http://www.zoharbabin.com/wp-content/uploads/2012/01/FizzBuzz-Methods-Tests1.jpg"><img class="alignnone size-full wp-image-253" title="FizzBuzz Methods Tests" src="http://www.zoharbabin.com/wp-content/uploads/2012/01/FizzBuzz-Methods-Tests1.jpg" alt="" width="382" height="157" /></a></p>
<p>Comparing int values (in loop), using 4 (in loop) modulo operations and chained if..else:</p>
<div class="my_syntax_box"><span class="my_syntax_selecall"><a href="javascript:;" onclick="selectCode(this); return false;">Selec All</a> </span><span class="my_syntax_Bar">Code:</span><div class="my_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #008000;">=</span> N<span style="color: #008000;">;</span> <span style="color: #008000;">++</span>i<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">&#40;</span>i <span style="color: #008000;">%</span> <span style="color: #FF0000;">3</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&amp;&amp;</span> <span style="color: #008000;">&#40;</span>i <span style="color: #008000;">%</span> <span style="color: #FF0000;">5</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;FizzBuzz&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #008000;">%</span> <span style="color: #FF0000;">3</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;Fizz&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #008000;">%</span> <span style="color: #FF0000;">5</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;Buzz&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">else</span> result <span style="color: #008000;">+=</span> i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;, &quot;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div></div>
<p>Comparing int values, using 2 (in loop) modulo operations and 4 (in loop) int equality tests:</p>
<div class="my_syntax_box"><span class="my_syntax_selecall"><a href="javascript:;" onclick="selectCode(this); return false;">Selec All</a> </span><span class="my_syntax_Bar">Code:</span><div class="my_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #008000;">=</span> N<span style="color: #008000;">;</span> <span style="color: #008000;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    f <span style="color: #008000;">=</span> i <span style="color: #008000;">%</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">;</span>
    b <span style="color: #008000;">=</span> i <span style="color: #008000;">%</span> <span style="color: #FF0000;">5</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>f <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;Fizz&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>b <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;Buzz&quot;</span><span style="color: #008000;">;</span> 
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>f <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> b <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;, &quot;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div></div>
<p>Comparing strings, using 2 (in loop) modulo operations:</p>
<div class="my_syntax_box"><span class="my_syntax_selecall"><a href="javascript:;" onclick="selectCode(this); return false;">Selec All</a> </span><span class="my_syntax_Bar">Code:</span><div class="my_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #008000;">=</span> N<span style="color: #008000;">;</span> <span style="color: #008000;">++</span>i<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    outp <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #008000;">%</span> <span style="color: #FF0000;">3</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> outp <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Fizz&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>i <span style="color: #008000;">%</span> <span style="color: #FF0000;">5</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> outp <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;Buzz&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>outp <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#41;</span> outp <span style="color: #008000;">=</span> i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    result <span style="color: #008000;">+=</span> outp <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div></div>
<p>Counting up, using 2 single (out of loop) modulo operations:</p>
<div class="my_syntax_box"><span class="my_syntax_selecall"><a href="javascript:;" onclick="selectCode(this); return false;">Selec All</a> </span><span class="my_syntax_Bar">Code:</span><div class="my_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">int</span> x <span style="color: #008000;">=</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">int</span> y <span style="color: #008000;">=</span> <span style="color: #FF0000;">5</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">int</span> a <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span>
b <span style="color: #008000;">=</span> N<span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">int</span> x1 <span style="color: #008000;">=</span> a <span style="color: #008000;">%</span> x<span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">int</span> y1 <span style="color: #008000;">=</span> a <span style="color: #008000;">%</span> y<span style="color: #008000;">;</span>
result <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> a<span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #008000;">=</span> b<span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>x1 <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;Fizz&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>y1 <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;Buzz&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>x1 <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> y1 <span style="color: #008000;">!=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span> result <span style="color: #008000;">+=</span> i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    result <span style="color: #008000;">+=</span> <span style="color: #666666;">&quot;, &quot;</span><span style="color: #008000;">;</span>
    x1 <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>x1 <span style="color: #008000;">==</span> x <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span> <span style="color: #008000;">?</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">:</span> x1 <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
    y1 <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span>y1 <span style="color: #008000;">==</span> y <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span> <span style="color: #008000;">?</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">:</span> y1 <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div></div>
<p>Counting down, using no modulo operations, chained if..else:</p>
<div class="my_syntax_box"><span class="my_syntax_selecall"><a href="javascript:;" onclick="selectCode(this); return false;">Selec All</a> </span><span class="my_syntax_Bar">Code:</span><div class="my_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">int</span> fizz <span style="color: #008000;">=</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">int</span> buzz <span style="color: #008000;">=</span> <span style="color: #FF0000;">5</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">for</span><span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #008000;">=</span> N<span style="color: #008000;">;</span> <span style="color: #008000;">++</span>i<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
	fizz<span style="color: #008000;">--;</span>
	buzz<span style="color: #008000;">--;</span>
    <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>fizz <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">&amp;&amp;</span> buzz <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
		outp <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;FizzBuzz&quot;</span><span style="color: #008000;">;</span>
		fizz <span style="color: #008000;">=</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">;</span>
		buzz <span style="color: #008000;">=</span> <span style="color: #FF0000;">5</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>fizz <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
		outp <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Fizz&quot;</span><span style="color: #008000;">;</span>
		fizz <span style="color: #008000;">=</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">;</span>
    <span style="color: #008000;">&#125;</span>
    <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>buzz <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">&#41;</span>
    <span style="color: #008000;">&#123;</span>
		outp <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Buzz&quot;</span><span style="color: #008000;">;</span>
		buzz <span style="color: #008000;">=</span> <span style="color: #FF0000;">5</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span> <span style="color: #0600FF; font-weight: bold;">else</span> <span style="color: #008000;">&#123;</span>
		outp <span style="color: #008000;">=</span> i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span>
	<span style="color: #008000;">&#125;</span>
	result <span style="color: #008000;">+=</span> outp <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div></div>
<p>All Bitwise operations (using predefined 0-15 numbers mask):</p>
<div class="my_syntax_box"><span class="my_syntax_selecall"><a href="javascript:;" onclick="selectCode(this); return false;">Selec All</a> </span><span class="my_syntax_Bar">Code:</span><div class="my_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> messages <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">&#123;</span><span style="color: #0600FF; font-weight: bold;">null</span>, <span style="color: #666666;">&quot;Fizz&quot;</span>, <span style="color: #666666;">&quot;Buzz&quot;</span>, <span style="color: #666666;">&quot;FizzBuzz&quot;</span><span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span>
<span style="color: #6666cc; font-weight: bold;">int</span> acc <span style="color: #008000;">=</span> <span style="color: #FF0000;">810092048</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//11 00 00 01 00 10 01 00 00 01 10 00 01 00 00</span>
<span style="color: #6666cc; font-weight: bold;">int</span> c <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
<span style="color: #0600FF; font-weight: bold;">for</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span> i<span style="color: #008000;">=</span><span style="color: #FF0000;">1</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&lt;</span> <span style="color: #008000;">=</span> N<span style="color: #008000;">;</span> <span style="color: #008000;">++</span>i<span style="color: #008000;">&#41;</span>  <span style="color: #008000;">&#123;</span>
    c <span style="color: #008000;">=</span> acc <span style="color: #008000;">&amp;</span> <span style="color: #FF0000;">3</span><span style="color: #008000;">;</span>
    result <span style="color: #008000;">+=</span> <span style="color: #008000;">&#40;</span>c <span style="color: #008000;">&gt;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">?</span> messages<span style="color: #008000;">&#91;</span>c<span style="color: #008000;">&#93;</span> <span style="color: #008000;">:</span> i<span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;, &quot;</span><span style="color: #008000;">;</span>
    acc <span style="color: #008000;">=</span> acc <span style="color: #008000;">&gt;&gt;</span> <span style="color: #FF0000;">2</span> <span style="color: #008000;">|</span> c <span style="color: #008000;">&lt;</span> <span style="color: #008000;">&lt;</span> <span style="color: #FF0000;">28</span><span style="color: #008000;">;</span>
<span style="color: #008000;">&#125;</span></pre></td></tr></table></div></div>
<p><strong>@<a href="http://www.zoharbabin.com/wp-content/uploads/2012/01/FizzBuzz-Methods-Tests.zip" target="_blank">Download the full C# code</a></strong></p>
<p>Can you find a more efficient way?</p>
<div class="shr-publisher-234"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/which-fizzbuzz-solution-is-the-most-efficient/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Steal this comic</title>
		<link>http://www.zoharbabin.com/steal-this-comic</link>
		<comments>http://www.zoharbabin.com/steal-this-comic#comments</comments>
		<pubDate>Sun, 18 Dec 2011 01:46:56 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[Community]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=228</guid>
		<description><![CDATA[[http://www.virtualshackles.com/275]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.virtualshackles.com/275"><img class="aligncenter" title="Steal this comic by Virtual Shackles" src="http://www.virtualshackles.com/img/sopa.jpg" alt="Steal this comic by Virtual Shackles" width="800" height="778" /></a></p>
<p>[<a href="http://www.virtualshackles.com/275">http://www.virtualshackles.com/275</a>]</p>
<div class="shr-publisher-228"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/steal-this-comic/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Do Noise Reduction Using ffmpeg And sox</title>
		<link>http://www.zoharbabin.com/how-to-do-noise-reduction-using-ffmpeg-and-sox</link>
		<comments>http://www.zoharbabin.com/how-to-do-noise-reduction-using-ffmpeg-and-sox#comments</comments>
		<pubDate>Mon, 12 Dec 2011 20:39:22 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[sox]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=214</guid>
		<description><![CDATA[Need a quick, easy and free way of cleaning up a video&#8217;s audio from background noise? Follow the steps below. First get and install the tools: FFMPEG. SoX &#8211; Sound eXchange. Then clean your noise! Split the audio and video streams into 2 seperate files: The VIDEO stream: ffmpeg -i input.mp4 -sameq -an tmpvid.mp4 The AUDIO [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p style="text-align: left;">Need a quick, easy and free way of cleaning up a video&#8217;s audio from background noise? Follow the steps below.</p>
<p style="text-align: left;"><span style="text-decoration: underline;"><strong>First get and install the tools:</strong></span></p>
<ul>
<li><a title="FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video" href="http://ffmpeg.org/" target="_blank">FFMPEG</a>.</li>
<li><a title="SoX, the Swiss Army knife of sound processing programs" href="http://sox.sourceforge.net/" target="_blank">SoX &#8211; Sound eXchange</a>.</li>
</ul>
<p style="text-align: left;"><span style="text-decoration: underline;"><strong>Then clean your noise!</strong></span></p>
<ol style="text-align: left;">
<li>Split the audio and video streams into 2 seperate files:<br />
The VIDEO stream: <em><strong>ffmpeg -i input.mp4 -sameq -an tmpvid.mp4</strong></em><br />
The AUDIO stream: <em><strong>ffmpeg -i input.mp4 -sameq tmpaud.wav </strong></em></li>
<li>Generate a sample of noise from the audio of the file:<br />
<em><strong>ffmpeg -i input.mp4 -vn -ss 00:00:00 -t 00:00:01 noiseaud.wav<br />
</strong></em><strong>-ss</strong>: the time offset from beginning. (h:m:s.ms).<br />
<strong>-t duration</strong>: record or transcode duration seconds of audio/video.<br />
Choose a segment of the audio where there&#8217;s no speech, only noise (e.g. speaker was silent for a sec).</li>
<li> Generate a noise profile in sox:<br />
<em><strong>sox noiseaud.wav -n noiseprof noise.prof</strong></em></li>
<li>Clean the noise samples from the audio stream:<br />
<em><strong>sox tmpaud.wav tmpaud-clean.wav noisered noise.prof 0.21<br />
</strong></em>Change <em><strong>0.21</strong></em> to adjust the level of sensitivity in the sampling rates (I found 0.2-0.3 often provides best result).</li>
<li>Merge the audio and video streams back together:<br />
<em><strong>ffmpeg -i tmpaud-clean.wav -i tmpvid.mp4 -sameq vid.mp4</strong></em></li>
</ol>
<div style="text-align: left;">I&#8217;m thinking of automating this via a web interface that allows uploading a video file, selection of the noise sample and playing with the noisered levels producing a cleaned version&#8230; think it&#8217;s a useful tool?</div>
<div style="text-align: left;"></div>
<div class="shr-publisher-214"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/how-to-do-noise-reduction-using-ffmpeg-and-sox/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YouTube Direct Upload in ActionScript3</title>
		<link>http://www.zoharbabin.com/youtube-direct-upload-actionscript3</link>
		<comments>http://www.zoharbabin.com/youtube-direct-upload-actionscript3#comments</comments>
		<pubDate>Sun, 04 Sep 2011 02:39:56 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[YouTube]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=205</guid>
		<description><![CDATA[&#160; An app I wrote needed the following features: Application has to run in the browser as a SWF. Application will run in filesystem mode (file://). Application will not have server side (except for YouTube). Application will have to login to YouTube using ClientLogin instead of AuthSub to avoid redirects. Application will have to upload a manipulated [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><img class="size-full wp-image-211 alignnone" style="border-style: initial; border-color: initial;" title="youtubeupload" src="http://www.zoharbabin.com/wp-content/uploads/2011/09/youtubeupload.png" alt="" width="283" height="112" /></p>
<p>&nbsp;</p>
<p>An app I wrote needed the following features:</p>
<ol>
<li>Application has to run in the browser as a SWF.</li>
<li>Application will run in filesystem mode (file://).</li>
<li>Application will not have server side (except for YouTube).</li>
<li>Application will have to login to YouTube using <a title="Google ClientLogin for installed applications" href="http://code.google.com/apis/youtube/2.0/developers_guide_php.html#ClientLogin_for_Installed_Applications" target="_blank">ClientLogin</a> instead of <a title="Google AuthSub Login" href="http://code.google.com/apis/youtube/2.0/developers_guide_php.html#AuthSub_for_Web_Applications" target="_blank">AuthSub</a> to avoid redirects.</li>
<li>Application will have to upload a manipulated ByteArray, not directly from FileReference.browse().</li>
</ol>
<div>First thing you do: Search Google for <a href="http://www.google.com/search?q=YouTube%2BUpload%2BActionScript" target="_blank">YouTube+Upload+ActionScript</a>, which brings up many results, including <a title="as3-youtube-data-api :: ActionScript 3.0 Library for YouTube Data API" href="http://code.google.com/p/as3-youtube-data-api/" target="_blank">this library</a>.</div>
<div>Unfortunately, none of the results presented a solution to the above, and surprisingly, the AS3 DataAPI library doesn&#8217;t even implement an upload API.</div>
<div>A few other search queries&#8230; no results.</div>
<p>So, I turned to the YouTube API docs, looked at the PHP implementations and the result is this class which I&#8217;m sharing with you now.</p>
<p>Introducing: YouTubeDirectUploader.as &#8211; A utility class for uploading to YouTube using email and password.</p>
<p>The class provides two methods of uploading:</p>
<ol>
<li>Using FileReference and browse() &#8211; which will opt the user to select their video to upload.</li>
<li>Using a ByteArray &#8211; which allows the Application to manipulate the FLV before uploading to YouTube (what was needed in my case).</li>
</ol>
<p>It was also designed to be used as a declared object in MXML, just to ease the use and allow bindings to form elements.</p>
<div><a title="YouTube Upload in ActionScript3 - Source Code on GitHub" href="https://github.com/zoharbabin/YouTubeDirectUploader" target="_blank">Check/Fork the code on GitHub</a>. Share your thoughts below : )</div>
<div class="shr-publisher-205"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/youtube-direct-upload-actionscript3/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hacking in FLV Bits &#8211; Part 2</title>
		<link>http://www.zoharbabin.com/hacking-in-flv-bits-part-2</link>
		<comments>http://www.zoharbabin.com/hacking-in-flv-bits-part-2#comments</comments>
		<pubDate>Mon, 04 Jul 2011 04:24:48 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[Community]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=196</guid>
		<description><![CDATA[Another sleepless night&#8230; Got some new features to FLVWizard, there are now new functions to: Slice / Trim video. Sequence a vector of FLV ByteArrays. Minor things. Check out the source code for ClippingApp, a small app that allows clipping and sequencing of clip&#8217;s parts. More to come&#8230;]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Another sleepless night&#8230; Got some new features to <a title="ActionScript3 (FP 10.1) Utility class for manipulating FLV bits - trim, merge and more. " href="http://www.zoharbabin.com/hacking-in-flv-bits" target="_blank">FLVWizard</a>, there are now new functions to:</p>
<ul>
<li>Slice / Trim video.</li>
<li>Sequence a vector of FLV ByteArrays.</li>
<li>Minor things.</li>
</ul>
<p>Check out the <a href="https://github.com/zoharbabin/ClippingApp" target="_blank">source code</a> for <a title="ClippingApp - An FLVWizard App" href="http://www.zoharbabin.com/wp-content/uploads/2011/07/clippingapp.html" target="_blank">ClippingApp</a>, a small app that allows clipping and sequencing of clip&#8217;s parts.<br />
More to come&#8230;</p>
<div class="shr-publisher-196"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/hacking-in-flv-bits-part-2/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hacking in FLV bits</title>
		<link>http://www.zoharbabin.com/hacking-in-flv-bits</link>
		<comments>http://www.zoharbabin.com/hacking-in-flv-bits#comments</comments>
		<pubDate>Sat, 14 May 2011 20:44:09 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[Community]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=170</guid>
		<description><![CDATA[Been a while now since I&#8217;ve last opened my Adobe Flex Builder and wrote some AS3&#8230; Working on the  Gendered Advertising Remixer a while ago, made me curious again about whether it will be possible to merge the video &#38; audio channels of given FLVs in run-time on the client-side (in AS3). So I&#8217;ve decided to take [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Been a while now since I&#8217;ve last opened my Adobe Flex Builder and wrote some AS3&#8230;</p>
<p>Working on the  <a title="The Gendered Advertising Remixer" href="http://blog.kaltura.org/gendered-advertising-remixer" target="_blank">Gendered Advertising Remixer</a> a while ago, made me curious again about whether it will be possible to merge the video &amp; audio channels of given FLVs in run-time on the client-side (in AS3). So I&#8217;ve decided to take a few hours this weekend to add a download option to the <a href="http://blog.kaltura.org/gendered-advertising-remixer" target="_blank">GAR</a> : )</p>
<p>At Kaltura, we&#8217;ve used to do this server side for creating video remixes. The video editors were written in Adobe Flex, targeting Flash 9.0. When-ever a video trimming or merging was needed, the editor would have send a request to the server, then download a whole new video stream. This not only makes poor experience since the user has to wait for videos to download, but it also gets costly as bandwidth consumption grows as well as making it a messy deployment.</p>
<p>A 1.1 version later, Flash 10.1 introduced <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;">NetStream.appendBytes()</span> &#8211; the ability to push a ByteArray containing FLV bits down the NetStream playback throat. Wonderful! now all I need the server for is to host my videos, all trimming/merging work can now be done on the client computer, all in ActionScript3.</p>
<p><strong>Manipulating bits by the <a title="Adobe Flash Video File Format Specification (Version 10.1)" href="http://www.adobe.com/devnet/f4v.html" target="_blank">FLV spec</a></strong></p>
<p>Reading through related posts on the web, I&#8217;ve found Thibault Imbert&#8217;s <a title="FLVSlicer by Thibault Imbert" href="http://code.google.com/p/flvslicer/" target="_blank">FLVSlicer</a> at <a title="Introducing FLVSlicer (slicing and merging capabilities) by Thibault Imbert" href="http://www.bytearray.org/?p=955" target="_blank">ByteArray.org</a>. FLVSlicer was a great start &#8211; it showed an easy way of slicing through FLV frame-tags and merging slices of the same video.</p>
<p>FLVSlicer was missing 2 pieces important to my desired <a title="The Gendered Advertising Remixer" href="http://blog.kaltura.org/gendered-advertising-remixer" target="_blank">GAR</a> implementation:</p>
<ol>
<li>Easily split audio and video channels, and merge audio and video channels to a new video.</li>
<li>Perform all operations on FLVs that are not necessarily the same original FLV (In GAR we merge 2 different videos).</li>
</ol>
<p>Additionally, I wanted to loose the complex object oriented approach taken in the FLVSlicer. Even though OO might make sense in simplifying complex architectures, I&#8217;ve found that in this specific case, it only added unneeded fat to the utility. FLVSlicer seemed to have been built with scale-ability in mind, defining events and separating objects for Slices&#8230; maybe for more complex situations like manipulating very long videos, it will be right to go back to this architecture and implement an asynchronous merging/trimming algorithms.</p>
<p><strong><a title="FlvWizard - Source on GitHub" href="https://github.com/zoharbabin/FlvWizard" target="_blank">FlvWizard</a> - Utility class for manipulating FLV bits</strong></p>
<p>Re-implementing Thibault&#8217;s FLVSlicer, I&#8217;ve create FlvWizard. Answering the two needs above and merged into a single class that gets FLV ByteArrays as input and spits FLV ByteArrays as output. No need for more objects, output is ready to be served as is, into the <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;">NetStream.appendBytes()</span> function.</p>
<div class="my_syntax_box"><span class="my_syntax_selecall"><a href="javascript:;" onclick="selectCode(this); return false;">Selec All</a> </span><span class="my_syntax_Bar">Code:</span><div class="my_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> flvwiz<span style="color: #000066; font-weight: bold;">:</span>FlvWizard = <span style="color: #0033ff; font-weight: bold;">new</span> FlvWizard <span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
videoBytes = flvwiz<span style="color: #000066; font-weight: bold;">.</span>extractChannel<span style="color: #000000;">&#40;</span>boyVideo<span style="color: #000066; font-weight: bold;">,</span> FlvWizard<span style="color: #000066; font-weight: bold;">.</span>VIDEO_CHANNEL<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
soundBytes = flvwiz<span style="color: #000066; font-weight: bold;">.</span>extractChannel<span style="color: #000000;">&#40;</span>girlVideo<span style="color: #000066; font-weight: bold;">,</span> FlvWizard<span style="color: #000066; font-weight: bold;">.</span>SOUND_CHANNEL<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
mergedBytes = flvwiz<span style="color: #000066; font-weight: bold;">.</span>mergeChannels<span style="color: #000000;">&#40;</span>videoBytes<span style="color: #000066; font-weight: bold;">,</span> soundBytes<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span>
ns<span style="color: #000066; font-weight: bold;">.</span>appendBytes<span style="color: #000000;">&#40;</span>bytes<span style="color: #000000;">&#41;</span><span style="color: #000066; font-weight: bold;">;</span></pre></td></tr></table></div></div>
<p>Currently capable of splitting audio and video channels, and then merging channels into a new video. Followup in the next post when I&#8217;ll extend it further to enable easy client side trimming and sequencing of given videos.</p>
<p><strong>Try it out with this little demo</strong></p>
<p>Follow the numbers (1. Click to watch original Boys video, 2. Click to watch original Girls video, 3. Click to merge video from Boys and audio from Girls and watch the merged Flv, 4. Click to save the merged Flv to your disk).</p>
<p><object id="flvWizardTest" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="320" height="280" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"><param name="movie" value="http://www.zoharbabin.com/wp-content/uploads/2011/05/tests.swf" /><param name="base" value="http://www.zoharbabin.com/wp-content/uploads/2011/05/" /><embed type="application/x-shockwave-flash" width="320" height="280" src="http://www.zoharbabin.com/wp-content/uploads/2011/05/tests.swf" base="http://www.zoharbabin.com/wp-content/uploads/2011/05/" name="flvWizardTest" pluginspage="http://www.adobe.com/go/getflashplayer"></embed></object></p>
<p><a title="ActionScript3 (FP 10.1) Utility class for manipulating FLV bits - trim, merge and more. " href="https://github.com/zoharbabin/FlvWizard" target="_blank">Find the source code at GitHub</a>.</p>
<p><strong>What&#8217;s next?</strong></p>
<p>Even though this provides a great solution for the GAR project needs, and even for most smaller remixing use-cases, I find this not satisfying. A better way should be hacked to:</p>
<ol>
<li>Allow manipulation and streaming of h264/webm and not just FLV. The problem with this at the moment is that <span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: 12px; line-height: 18px; white-space: pre;">appendBytes()</span> only handles FLV.</li>
<li>Better performance so that we can handle long video sequences.</li>
<li>Further manipulation of the actual FLV tags &#8211; Allowing trimming in between key-frames.</li>
<li>Encoding of effects and overlays on top of the video. (Lee Felarca&#8217;s <a title="Updated FLV Encoder, 3.5x faster with Alchemy" href="http://www.zeropointnine.com/blog/updated-flv-encoder-alchem/" target="_blank">FLV Encoder</a> might be a good start).</li>
</ol>
<p>Maybe an alchemy port for an h264/webm/flv codec be a good direction? Or a full ffmpeg port?&#8230;</p>
<div class="shr-publisher-170"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/hacking-in-flv-bits/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>HTML5 Video Take 2</title>
		<link>http://www.zoharbabin.com/html5-video-take-2</link>
		<comments>http://www.zoharbabin.com/html5-video-take-2#comments</comments>
		<pubDate>Fri, 19 Nov 2010 00:01:08 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[Community]]></category>
		<category><![CDATA[kaltrua]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=134</guid>
		<description><![CDATA[Now that Streaming Media Europe and West HTML5 Media Workshops are over (and that I'm back home), as promised, here are the slides and some answers to common questions. This post is about the current state of HTML5 Media, links to resources about the Kaltura HTML5 Media Library, answers to the common questions from the workshop and some of my own personal view.]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://streamingmedia.com/Conferences/West"><img class="alignleft" style="margin-right: 10px; margin-bottom: 10px;" title="Streaming Media West Logo" src="http://www.streamingmedia.com/fly/FlyLogo.jpg" alt="Streaming Media West Logo" width="200" height="105" /></a>Many thanks to <a href="http://streamingmedia.com/" target="_blank">StreamingMedia.com</a> for inviting <a href="http://metavid.org/blog/">Michael</a> and me to speak about HTML5 and our adventures with creating the <a href="http://www.kaltura.org/project/HTML5_Video_Media_JavaScript_Library" target="_blank">Kaltura HTML5 Media library</a>.</p>
<p>Now that Streaming Media Europe and West HTML5 Media Workshops are over (and that I&#8217;m back home), as promised, here are the slides and some answers to common questions. Slides: <a href="http://www.zoharbabin.com/wp-content/uploads/2010/11/HTML5_StreamingMediaWest_Workshop_2010.pdf">HTML5 Streaming Media West Workshop 2010</a></p>
<p>This post is about the current state of HTML5 Media, links to resources about the Kaltura HTML5 Media Library, answers to the common questions from the workshop and some of my own personal view.</p>
<p>-</p>
<p><strong>General note: &#8220;HTML5 is ready to rock!&#8221;</strong></p>
<p>It is, almost all the new features are deployed across all major browsers (YES! including Microsoft IE), new devices will ship with browsers ready for HTML5 and we have almost all features defined and ready to go.</p>
<p><strong>But it will take long to mature&#8230;</strong></p>
<p>Yes, it is also not complete yet. Just like a newborn, the new features with version 5 of HTML will take some time to stabilize, grow and mature.<br />
The spec &amp; implementations <a href="http://www.w3.org/QA/2010/10/html5_the_jewel_in_the_open_we.html" target="_blank">need to be finalize</a> and get fully compatible across all browsers. The authoring tools are starting to show (<a title="Cooties – IDE for Creating HTML5 Animations" href="http://cooties.bluedojo.com/" target="_blank">Cooties</a>, <a href="http://mashable.com/2010/09/13/adobe-illustrator-html5/" target="_blank">HTML5 for Illustrator</a>, <a href="http://labs.adobe.com/downloads/html5pack.html" target="_blank">Dreamweaver HTML5 Pack</a>, <a href="http://tv.adobe.com/watch/adc-presents/preview-of-the-edge-prototype-tool-for-html5-/" target="_blank">Adobe Edge</a>, <a title="Adobe demos Flash-to-HTML5 conversion tool" href="http://blogs.adobe.com/jnack/2010/10/adobe-demos-flash-to-html5-conversion-tool.html" target="_blank">Flash to HTML5</a>&#8230;), nevertheless, it will take these a while to get to the level of Flash IDE. And unfortunately, it doesn&#8217;t seem like we&#8217;re going to have a solution for old browsers soon as adoption is sooo slooooww&#8230; (Maybe we should write a worm that upgrades old browsers… err)</p>
<p>There&#8217;s a great<strong> </strong>post by <a href="http://www.sitepoint.com/articlelist/560" target="_blank">Craig Buckler</a> demystifying much of the latest confusion of &#8220;HTML5 ready or not&#8221; debate: <a href="http://blogs.sitepoint.com/2010/10/08/the-w3c-and-the-html5-isnt-ready-backlash/" target="_blank">The W3C and the “HTML5 Isn’t Ready” Backlash</a>. While I agree with most his notes, I found the 2 comments below somewhat lacking:</p>
<ul>
<li>&#8220;Interoperability always has      and always will be an issue&#8230;&#8221; &#8211; While it&#8217;s true that it has always      been a pain, this is due to the way browsers were made. Part of what made      Flash so successful was its ability to provide a &#8220;write once deploy      everywhere&#8221; solution, and more so, it&#8217;s ability to update and      fall-back very well. I don&#8217;t think there will be many reasons for      companies, website creators to make a business decision to prefer pure      HTML5 Media adoption if cross-browser experience support stays awkward.      Instead, except for where HTML5 is a must (iOS), we&#8217;ll use Flash.</li>
<li>&#8220;&#8230;but there’s little to      stop you writing HTML5 code today&#8221; &#8211; This is just an overlooking of      what HTML5 Canvas, Video and the addition of SVG and JS control on these means. It&#8217;s true that to      write HTML you don&#8217;t need more than a text editor. But you don&#8217;t expect      designers to create rich-user-interfaces and animations just by writing code&#8230; The lack of good Authoring Tools slows down the ability of      designers to create great content. The alternative is yet again Flash IDE,      which hopefully materialize the promise of JS, Canvas and SVG export.</li>
</ul>
<p>-</p>
<p><strong>Streaming Media West Workshop Discussion</strong> [[<a title="Streaming Media West 2010 - HTML5 and Web Video Standards Workshop" href="http://www.zoharbabin.com/wp-content/uploads/2010/11/HTML5_StreamingMediaWest_Workshop_2010.pdf">Download The Slides</a>]]</p>
<p>The live discussion with developers and users of online video during the workshops made it clearer &#8211; the 3 outstanding questions are:</p>
<ol>
<li>Does feature parity with Flash      media exist? (Adaptive, live, drm, performance, etc.)</li>
<li>Backward support.</li>
<li>Performance.</li>
</ol>
<p>So why is it such a big buzz?</p>
<p>This yields another question, how can HTML5 make such a big noise, while none of the above questions can positively be answered today?<br />
Truth is, HTML5 have been fortunate enough to gain Apple&#8217;s push, excluding Flash from the iOS devices.</p>
<p>So considering the above general points, let&#8217;s try to answer in more details.</p>
<p><strong>Who&#8217;s using HTML5 &lt;video&gt; today?</strong></p>
<ul>
<li>Video Hubs: YouTube has a <a href="http://www.youtube.com/html5" target="_blank">trial for HTML5</a>,      it is not clear when or if they&#8217;ll make it default choice. Same for <a href="http://vimeo.com/blog:268" target="_blank">Vimeo</a>, <a href="http://www.dailymotion.com/html5" target="_blank">Dailymotion</a>…</li>
<li>Content Sites: CNN, New York      Times, ESPN, The White House, Flickr, National Geographic, and <a href="http://www.apple.com/ipad/ready-for-ipad/" target="_blank">others</a>.</li>
<li>More sites can be found on <a href="http://html5gallery.com/">http://html5gallery.com</a></li>
</ul>
<p>Note there are no Hulu or NetFlix on this list&#8230;<br />
Part in beta part production &#8211; HTML5 video is definitely already in use by leading websites. So it is just a matter of time&#8230; let&#8217;s look at the features:</p>
<p><strong>Starting with the hardest &#8211; DRM</strong></p>
<p>As it faces growing interest from the media world, there still 1 main are that left open &#8211; the way to protect ones content.<br />
According to the <a href="http://www.w3.org/html/wiki/FAQs#Is_there_support_for_digital_rights_management_.28DRM.29_in_HTML5_video.3F" target="_blank">W3C HTML5 FAQ</a>, current approach that seem to be taken by the standard is of a bystander waiting for the various stakeholders (members of W3C; browser makers, etc.) to decide among them on a unified solution, what seem to be unlikely to ever happen due to the nature of DRM;</p>
<p><a href="http://www.defectivebydesign.org/" target="_blank">Evil</a> or not, mathematically impossible or not, DRM is a solution currently forced upon premium content networks like Hulu and NetFlix. It looks as if DRM will not be made possible across browsers, premium sites will have to rely on alternatives like Flash and Silverlight, or carefully chose their target audience based on available DRM technology for HTML5.</p>
<p>Interesting discussions on the topic can be found on the <a href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=10902" target="_blank">W3C issue queue</a> and <a href="http://lists.whatwg.org/htdig.cgi/whatwg-whatwg.org/2010-July/026955.html" target="_blank">lists</a>.</p>
<p><strong>Live streaming and Adaptive bitrate</strong></p>
<p>Possible on <a href="http://en.wikipedia.org/wiki/HTTP_Live_Streaming" target="_blank">Apple&#8217;s HTTP Live Streaming</a> and via <a href="http://nicklothian.com/blog/2009/11/17/using-a-webcam-with-html-5-via-vlc/" target="_blank">VLC</a>. The standard, doesn&#8217;t constrain upon content length, thus making live broadcasting possible, combined with chunking the stream this makes simple HTTP Adaptive Streaming. Additionally, groups like <a href="http://www.foms-workshop.org/foms2010OVC/pmwiki.php/Main/CommunityGoals" target="_blank">FOMS</a> (Foundations of Open Media Software) and <a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-03" target="_blank">IETF</a> (Internet Engineering Task Force) are developing solutions for better adaptive streaming. That said, the spec does not define any specific details for adaptive or live broadcast, so we&#8217;re about to face different solutions and different implementation details.</p>
<p>Hopefully, the standard for <a href="http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-reqs/#scenario4.5" target="_blank">Media Fragments</a>:</p>
<p><em>&#8220;Davy is looking for videos about allergies and would like to get previews at a lower frame rate to decide whether to download and save them in his collection. He would like to be able to specify in the URI a means of telling the media server the adaptation that he is after. For video he would like to adapt width, height, frame rate, colour depth, and temporal subpart selection.&#8221;</em></p>
<p>&#8230;there would be a standardized way to communicate between the client and the server asking for specific parts or specific playback flow of a media asset.</p>
<p><strong>The Video Codec War</strong></p>
<p>Browser wars? IE6 special HTML?&#8230; Now we have it the video way &#8211; The standard don&#8217;t and isn&#8217;t going to in the near future define a must have common base codec. What it does instead is providing a graceful fallback option using the &lt;source&gt; tag. Not the end of the world considering you only need two codecs today: h264 and webm or h264 and ogg theora. And if you&#8217;re using Flash or Silverlight as your fallback, h264 is enough (iOS will play it using HTML5 based on built-in QT and Flash on all the other devices/browsers).</p>
<p><strong>Performance</strong></p>
<p>With latest GPU additions to Flash Player and other plugins, video is really not a cpu hog anymore, what seem to soon be the case with all HTML based video too - As all browsers are going to have GPU acceleration soon (if not already), Safari and IE will both have it in the underlying OS video rendering, Mozilla will be <a href="http://hacks.mozilla.org/2010/09/hardware-acceleration/" target="_blank">utilizing the GPU</a> soon and so is <a href="http://www.chromium.org/developers/design-documents/gpu-accelerated-compositing-in-chrome" target="_blank">Chrome</a>.</p>
<p>-</p>
<p><strong>Let&#8217;s build an HTML5 &lt;video&gt; Player. What should I know?</strong></p>
<p>If you don&#8217;t have to, don&#8217;t. At least till early 2012 after comments phase is over upon the May 2011 future released final specification, Flash is easier and the only true cross-browser experience. Even then, we will still have issues with backward compatibility; unfortunately, browser adoption rate is very slow.</p>
<p>But you want iOS playback too&#8230; So you&#8217;re left with JavaScript solutions to do the calculated fall-back/forward and somewhat unified cross-browser experience.</p>
<p>Here are some pointers when you choose to deploy your HTML5 player:</p>
<ol>
<li>Codecs are not that big deal &#8211; To      be honest, if you choose to use Flash as the default, and HTML5 just for      iOS, then h264 is all you need.</li>
<li>Though, playback quality and      bandwidth usage are bit more complicated. Whether you use HTML5 or not,      different devices have different screen sizes and bandwidth varies from      place to place. This requires different video flavors for best experience.      You can transcode the videos and specify various &lt;source&gt; tags, but      how does the browser choose between mp4 for iPhone, mp4 for iPad and HD      mp4 for TV? -Use JS to identify the device and use the right &lt;source&gt;      accordingly.</li>
<li>Every browser has it&#8217;s controls,      it&#8217;s ugly, and you need your own unified branded player UI. Simple: Use      HTML for the UI, standard clean HTML4 elements. Use Flash as black box      replacement for to cover up for non-HTML5 browsers.</li>
<li>If you need DRM &#8211; go Flash or      Silverlight.</li>
<li>Advertising is possible, but not      entirely; some devices don&#8217;t support overlays that well, especially not      with full-screen, and JS based video advertising doesn&#8217;t really make sense      when simple grease monkey scripts can automatically strip it out&#8230;</li>
<li>Sharing is not straight forward. With Flash you only had to copy one &lt;object&gt; or &lt;embed&gt; tag. Sometimes our player will have many lines of code&#8230; The easy way &#8211; <a title="A New Way To Embed YouTube Videos" href="http://apiblog.youtube.com/2010/07/new-way-to-embed-youtube-videos.html" target="_blank">use iframe</a>.</li>
</ol>
<p>-</p>
<p><strong>JavaScript mixes Flash and HTML5 for truly cross-browser/device experience: Kaltura&#8217;s HTML5 Media Library</strong></p>
<p>HTML5 and Flash hybrids are the solution to this mess, for now. My currently preferred way: HTML for the UI, Flash as the default playback and HTML5 &lt;video&gt; for the iOS. Throw a Kaltura server (<a href="http://www.kaltura.org/project/community_edition_video_platform">CE v3.0 is out!</a> and available as <a href="http://blog.kaltura.org/kaltura-in-the-amazon-cloud">free public AMI</a> too!) on the back end, providing the encoding and management service for the various devices out there and you&#8217;re all set to go. On devices where no Flash or HTML5 exist – the library shows a direct link to the supported video format (usually 3gp).</p>
<p>Moreover, the library aims to solve the problems of easy embedding through the use <a href="http://www.kaltura.org/apis/html5lib/kplayer-examples/Player_IFrameResizable.html" target="_blank">iFrame encapsulation</a> and API bridging, VAST integration for advertising, integrated plugins, custom skinning (either via <a href="http://www.kaltura.org/apis/html5lib/kplayer-examples/Player_Themable.html">ThemeRoller</a> and jQuery or event binding to DOM elements) and more&#8230;</p>
<p>Learn more at Kaltura.org - <a href="http://www.kaltura.org/project/HTML5_Video_Media_JavaScript_Library">Kaltura HTML5 Video Media JavaScript Library</a></p>
<p>-</p>
<p><strong>More advanced use cases… Let&#8217;s explore Wikipedia</strong></p>
<p>About 2 years after the <a title="Wikipedia Invites Users to Take Part in Open, Collaborative Video Experiment" href="http://wikimediafoundation.org/wiki/Wikipedia_Invites_Users_to_Take_Part_in_Open,_Collaborative_Video_Experiment" target="_blank">early announcement</a> about <a title="Let’s Get Video on Wikipedia" href="http://videoonwikipedia.org/" target="_blank">getting video on Wikipedia</a> and a year and half after the <a title="Kaltura sponsors Michael Dale, open source video developer" href="http://blog.wikimedia.org/blog/2008/07/23/kaltura-sponsors-michael-dale-open-source-video-developer/" target="_blank">project launched</a>, it is now <a title="Video Labs: Kaltura HTML5 Sequencer available on Wikimedia Commons" href="http://techblog.wikimedia.org/2010/09/video-labs-kaltura-html5-sequencer-available-on-wikimedia-commons/" target="_blank">showing fruits</a>. As we keep pushing the bar of HTML5, this project aimed from the very beginning (long before many have heard of the HTML5)  to create a fully functional collaborative online HTML5 based video editing system complete with audio and video tracks, transitions, effects and more. The <a title="Kaltura DevBlog: Kaltura HTML5 Sequencer available on Wikimedia Commons" href="http://blog.kaltura.org/kaltura-html5-sequencer-available-on-wikimedia-commons" target="_blank">Kaltura HTML5 Sequencer</a>, developed as part of the Kaltura HTML5 Media Library is a great proof of the underlying potential of HTML5 media. <a href="http://commons.wikimedia.org/w/index.php?title=Sequence:Cats&amp;withJS=MediaWiki:MwEmbed.js" target="_blank">Try the Sequencer here</a>.</p>
<p style="text-align: center;"><a href="http://commons.wikimedia.org/w/index.php?title=Sequence:Cats&amp;withJS=MediaWiki:MwEmbed.js"><img class="size-full wp-image-144 aligncenter" title="HTML5-Sequencer" src="http://www.zoharbabin.com/wp-content/uploads/2010/11/HTML5-Sequencer.png" alt="" width="280" height="193" /></a></p>
<p><strong>After blurb&#8230;</strong></p>
<p>In this post I tried to focus mainly on the one specific controversial &lt;video&gt; tag and its aspects. HTML5 and the even wider <a title="Highly recommended HTML.next slides from TPAC 2010" href="http://www.w3.org/2010/11/TPAC/PlenaryAgenda#HTMLnext" target="_blank">HTML.next</a> define a much larger set of tools that will change the online experience. We are now standing upon a new web, where semantic, media and applications are blending together with the physical world (devices), and a new mesh is to be created.</p>
<p>If you&#8217;ve read so far, thanks (!). Let me know what you think below.</p>
<p><a href="http://www.apple.com/ipad/ready-for-ipad/"></a></p>
<div class="shr-publisher-134"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/html5-video-take-2/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>5 Steps to get ImageMagick on XAMPP 1.7.3</title>
		<link>http://www.zoharbabin.com/5-steps-to-get-imagemagick-on-xampp-1-7-3</link>
		<comments>http://www.zoharbabin.com/5-steps-to-get-imagemagick-on-xampp-1-7-3#comments</comments>
		<pubDate>Sun, 17 Oct 2010 16:01:56 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[system]]></category>
		<category><![CDATA[xampp]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=127</guid>
		<description><![CDATA[Re-iterating what took too long (couple of hours) to pinpoint and solve. Getting ImageMagick (Imagick) installed on XAMPP 1.7.3 has it right there and clear, If you want to get Imagick installed on XAMPP 1.7.3, you&#8217;d need to: Install the LATEST OFFICIAL version of ImageMagick from http://www.imagemagick.org/script/binary-releases.php#windows . (I first tried installing the one from [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a title="Google search for ImageMagick on XAMPP 1.7.3" href="http://www.google.com/#hl=en&amp;q=Imagick+xampp+1.7.3" target="_blank">Re-iterating</a> what took too long (couple of hours) to pinpoint and solve.</p>
<p><a title="Post by http://jerodmoore.com" href="http://jerodmoore.com/?p=11" target="_blank">Getting ImageMagick (Imagick) installed on XAMPP 1.7.3</a> has it right there and clear, If you want to get Imagick installed on XAMPP 1.7.3, you&#8217;d need to:</p>
<ol>
<li>Install the LATEST OFFICIAL version of ImageMagick from <a href="http://www.imagemagick.org/script/binary-releases.php#windows">http://www.imagemagick.org/script/binary-releases.php#windows</a> . (I first tried installing the one from <a href="http://image_magick.veidrodis.com/image_magick/binaries/">http://image_magick.veidrodis.com/image_magick/binaries/</a> specified in the post above, didn&#8217;t work here as it&#8217;s missing a required DLL).<br />
Download the Win32 dynamic at 16 bits-per-pixel version.<br />
Make sure it&#8217;s installed in a simple non spaces folder name, e.g. C:\imagemagick .<br />
During installation, make sure you check the box for &#8220;Add application directory to your system path&#8221; (otherwise make sure to do this manually).</li>
<li>Download the following DLL &#8211; <a title="Mirror for http://www.sk89q.com/downloads/imagick/2.3.0/API20090626-TS-VC6/php_imagick.dll" href="http://jerodmoore.com/?p=11" target="_blank">php_imagick.dll</a> courtesy of http://www.sk89q.com (<a title="API20090626-TS-VC6/php_imagick.dll" href="http://www.sk89q.com/downloads/imagick/2.3.0/API20090626-TS-VC6/php_imagick.dll" target="_blank">original link</a>).<br />
Place this file into your php\ext folder inside xampp, e.g. C:\xampp\php\ext .</li>
<li>Edit php.ini (C:\xampp\php\php.ini) and add the following line: extension=php_imagick.dll</li>
<li>RESTART windows. (If you won&#8217;t, you might receive the following error: <a href="http://www.imagemagick.org/discourse-server/viewtopic.php?f=3&amp;t=16762" target="_blank">The program cannot start because CORE_RL_wand_.dll is missing from your computer.</a></li>
<li>Start Apache. it should work well.</li>
</ol>
<p>Thanks to<a href="http://jerodmoore.com" target="_blank"> jerodmoore.com</a> I can now run a fully functional Drupal 7 on xampp on Win7.</p>
<div class="shr-publisher-127"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/5-steps-to-get-imagemagick-on-xampp-1-7-3/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flash Developer Take on HTML5 Multimedia Future</title>
		<link>http://www.zoharbabin.com/flash-developer-take-on-html5-multimedia-future</link>
		<comments>http://www.zoharbabin.com/flash-developer-take-on-html5-multimedia-future#comments</comments>
		<pubDate>Fri, 23 Jul 2010 22:56:26 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[Community]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=104</guid>
		<description><![CDATA[Coming from the Flash world, where the community has a voice and there&#8217;s a name &#38; address assigned for every complaint &#8211; existing state of things with HTML5 as an Open Standard just doesn&#8217;t make much sense. True, Flash wasn&#8217;t that visible &#8211; but, they (MM/Adobe) still made sure to listen and improve upon the [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.zoharbabin.com/wp-content/uploads/2010/07/highway-vs-mess-flash-html5.jpg"><img class="aligncenter size-full wp-image-103" title="highway-vs-mess-flash-html5" src="http://www.zoharbabin.com/wp-content/uploads/2010/07/highway-vs-mess-flash-html5.jpg" alt="" width="550" height="185" /></a></p>
<p>Coming from the Flash world, where the community has a voice and there&#8217;s a name &amp; address assigned for every complaint &#8211; existing state of things with HTML5 as an Open Standard just doesn&#8217;t make much sense.</p>
<p>True, Flash wasn&#8217;t that visible &#8211; but, they (MM/Adobe) still made sure to listen and improve upon the community&#8217;s demand, keep a system.<br />
Flash is truly cross-platform &#8220;write once deploy all&#8221; solution that just works, there are great solutions for designers as well as developers (latter can be improved).</p>
<p>Many would see my point of view as an anti-HTML5 pro-Flash developer. Let me correct this:<br />
While today Flash provides the only available cross-platform-device solution for online media, HTML5+JS+CSS3 answers to the lack of visibility and openness as well as a true native browser technology that Flash lacks. As developers we are commuted to provide the best solution to the client requirements regardless of what technology is being used.<br />
Open Source is my native choice, not because of it being at the price of 0 (usually) nor because of its &#8220;underground aura&#8221; &#8211; But because of its visibility, openness and ability to generate global consensus due to having all facts revealed.</p>
<p>HTML5 is being controlled and lead by a consortium of major companies &amp; organizations &#8211; not by a community.<br />
HTML5 promises is to be open and agreed-upon, however the reality is the opposite: no agreement, no single implementation that will just work the same everywhere and no single place that provides visibility on the process. Just half-results published on the W3C site when things are finally ironed out, and implementation on the browser side is not even being discussed, so using the same HTML5+JS+CSS script will not necessarily provide the same result across all browsers/devices.</p>
<p>Until the browser creators and many member organizations on the W3C will agree on things like codecs &amp; implementations we will not have a true cross-platform-device Open Standard, and we as web developers will still have to rely on weird hacks to solve cross-platform issues.</p>
<p>As web developers, we should make the noise and send the message to the standard creators and browser makers: This time work together! We want to write HTML+JS+CSS once, and no dirty hacks!</p>
<p>HTML5 rocks! Please do it right this time.</p>
<p><strong>Now on the technical side.</strong><br />
In order for HTML5 to truly replace Flash in the kingdom of multimedia, there must be solutions for all 3 below:</p>
<ol>
<li> Cross-Platform-Device (&#8216;nuogh said).</li>
<li> Hardware accelerated optimized run-time &#8211; Games &amp; RIA&#8217;s must be responsive. This is not 1990, we want to use vector graphics, great filters &amp; display-list architecture that allows easy to understand and manage z-ordering.</li>
<li> Authoring Environment &#8211; The fact that SVG can be used to create kick-ass vector illustrations and some animation is not enough, designers usually don&#8217;t write code. Major part of the success Flash has is attributed to the great designer and designer-developer workflow tools that MM/Adobe created. For HTML5 to provide a true alternative, solutions like the Flash IDE will need to be created (or the Flash IDE will start exporting to HTML5+SVG).</li>
</ol>
<p><strong>OSCON Interview:</strong><br />
<object id="kaltura_player" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="330" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="kaltura_player" /><param name="allowfullscreen" value="true" /><param name="data" value="http://www.kaltura.com/index.php/kwidget/cache_st/1279919914/wid/_224962/uiconf_id/1665962/entry_id/0_j16kbz4o" /><param name="allowFullScreen" value="true" /><param name="allowNetworking" value="all" /><param name="allowScriptAccess" value="always" /><param name="bgcolor" value="#000000" /><param name="flashVars" value="&amp;" /><param name="src" value="http://www.kaltura.com/index.php/kwidget/cache_st/1279919914/wid/_224962/uiconf_id/1665962/entry_id/0_j16kbz4o" /><param name="flashvars" value="&amp;" /><embed id="kaltura_player" type="application/x-shockwave-flash" width="400" height="330" src="http://www.kaltura.com/index.php/kwidget/cache_st/1279919914/wid/_224962/uiconf_id/1665962/entry_id/0_j16kbz4o" flashvars="&amp;" bgcolor="#000000" allowscriptaccess="always" allownetworking="all" data="http://www.kaltura.com/index.php/kwidget/cache_st/1279919914/wid/_224962/uiconf_id/1665962/entry_id/0_j16kbz4o" allowfullscreen="true" name="kaltura_player"></embed></object></p>
<p><strong>The Prezi from OSCON Future of HTML5 Multimedia (Flash Developer Part):</strong><br />
<object id="prezi_qr8b4eqdfsp9" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="prezi_qr8b4eqdfsp9" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="prezi_id=qr8b4eqdfsp9&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no" /><param name="src" value="http://prezi.com/bin/preziloader.swf" /><embed id="prezi_qr8b4eqdfsp9" type="application/x-shockwave-flash" width="550" height="400" src="http://prezi.com/bin/preziloader.swf" flashvars="prezi_id=qr8b4eqdfsp9&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" name="prezi_qr8b4eqdfsp9"></embed></object></p>
<div class="shr-publisher-104"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/flash-developer-take-on-html5-multimedia-future/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Open Video Conference 2010</title>
		<link>http://www.zoharbabin.com/open-video-conference-2010-registration-open</link>
		<comments>http://www.zoharbabin.com/open-video-conference-2010-registration-open#comments</comments>
		<pubDate>Mon, 19 Jul 2010 21:50:38 +0000</pubDate>
		<dc:creator>Zohar Babin</dc:creator>
				<category><![CDATA[Community]]></category>
		<guid isPermaLink="false">http://www.zoharbabin.com/?p=97</guid>
		<description><![CDATA[Register by August 1st for early bird rates! About OVC The Open Video Conference (OVC) is a multi-day summit of thought leaders in business, academia, art, and activism to explore the future of video on the web. Join us October 1-2 for two days of learning and inspiration. And stick around for the OVC hack [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.openvideoconference.org/" target="_blank"><img class="alignnone size-full wp-image-96" title="Open Video Conference" src="http://www.zoharbabin.com/wp-content/uploads/2010/07/ovc.jpg" alt="Open Video Conference Logo" width="200" height="218" /></a></p>
<p><a href="https://www.openvideoconference.org/register/" target="_blank">Register </a>by August 1st for early bird rates!</p>
<p><strong>About OVC </strong><br />
The Open Video Conference  (OVC) is a multi-day summit of thought leaders in business, academia,  art, and activism to explore the future of video on the web. Join us  October 1-2 for two days of learning and inspiration. And stick around  for the OVC hack labs, presented in partnership with NYU ITP.</p>
<p><strong>Who&#8217;s  coming to OVC?</strong><br />
Connected creatives, technologists and businesspeople  of all stripes. Over 100 open source projects. Innovative filmmakers.  Visionaries like Tim Wu, cultural anthropologist Michael Wesch, former  Obama adviser Susan Crawford, and Damian Kulash of OK Go.</p>
<p>OVC  partner organizations include Creative Commons, the Workbook Project,  Intelligent Television, Columbia Center for New Media Teaching and  Learning, the Electronic Frontier Foundation, and more.</p>
<p>Sponsor  application deadline (go <a href="https://www.openvideoconference.org/sponsorship/" target="_blank">here for more</a>)<br />
If your company or organization is interested in  supporting the Open Video Conference, please be in touch by August  13th.</p>
<p>Watch the <a href="http://openvideoalliance.org/about/documentary/?l=en" target="_blank">Open Video Documentary</a>.</p>
<div class="shr-publisher-97"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.zoharbabin.com/open-video-conference-2010-registration-open/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  www.zoharbabin.com/feed ) in 0.49136 seconds, on Feb 5th, 2012 at 10:42 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 5th, 2012 at 11:42 am UTC -->
<!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<!-- Quick Cache Is Fully Functional :-) ... A Quick Cache file was just served for (  www.zoharbabin.com/feed ) in 0.00047 seconds, on Feb 5th, 2012 at 10:50 am UTC. -->
