<?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>Wolf Paulus</title>
	<atom:link href="http://wolfpaulus.com/feed" rel="self" type="application/rss+xml" />
	<link>http://wolfpaulus.com</link>
	<description>Journal</description>
	<lastBuildDate>Wed, 01 May 2013 23:55:29 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Chatbots 3.3 Conference</title>
		<link>http://wolfpaulus.com/jounal/software/chatbots33?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=chatbots33</link>
		<comments>http://wolfpaulus.com/jounal/software/chatbots33#comments</comments>
		<pubDate>Sat, 30 Mar 2013 04:16:05 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AIML]]></category>
		<category><![CDATA[Chatbot]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[Loebner Prize]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[vui]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3463</guid>
		<description><![CDATA[The Gathering The legends and current elites of AIML an [...]]]></description>
				<content:encoded><![CDATA[<h1>The Gathering</h1>
<p>The legends and current elites of <a href="http://en.wikipedia.org/wiki/AIML">AIML</a> and Turing AI (not necessarily disjoint groups) met for their yearly gathering at Seed Philly, a Philadelphia tech startup incubator, located in the heart of Center City.</p>
<p>The Chatbots 3.3 conference was a fast flowing event with exciting flash-talk style presentations, always followed by Q&amp;A segments. The amazing speaker lineup included several <a href="http://en.wikipedia.org/wiki/Loebner_Prize">Loebner Prize</a> winners, AIML Engine developers, VCs, Psychiatrists, Artificial Intelligence researcher, and best-selling authors.</p>
<div id="attachment_3466" class="wp-caption aligncenter" style="width: 560px"><a href="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0620.jpg"><img class="size-full wp-image-3466 colorbox-3463" title="Dr. Richard Wallace" alt="20130323-IMG_0620" src="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0620.jpg" width="550" height="367" /></a><p class="wp-caption-text">Dr. Richard Wallace</p></div>
<h1>The Highlights</h1>
<p><a href="http://en.wikipedia.org/wiki/Richard_Wallace_(scientist)"><b>Dr. Richard Wallace</b></a><b>, </b>Loebner Prize Winner 2000, 2001, 2004 and father of AIML, talked about the new <a href="https://docs.google.com/document/d/1wNT25hJRyupcG51aO89UcQEiG-HkXRXusukADpFnDs4/pub">AIML 2.0 Specification</a> that focuses much on making AIML more succinct, while maintaining its simplicity. He stated that it currently took about 10,000 AIML categories to create a believable character. <i>ALICE</i> for instance has about 100,000 categories and the <i>PROFESSOR</i>, a bot with one of the largest AIML knowledge bases, has about 580,000 AIML categories. Writing that many categories is not only very time consuming (experienced AIML authors may be able to write one category per minute) but also requires a memory capacity, not  available on many embedded and mobile devices. AIML 2.0 therefore tries to make AIML more efficient, allowing the creation of a believable character with as little as 1/6 of the categories needed before.<br />
<span id="more-3463"></span><br />
<div id="attachment_3467" class="wp-caption aligncenter" style="width: 560px"><a href="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0648.jpg"><img class="size-full wp-image-3467 colorbox-3463" title="Mohan Embar" alt="20130323-IMG_0648" src="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0648.jpg" width="550" height="367" /></a><p class="wp-caption-text">Mohan Embar</p></div></p>
<p><a href="http://www.chipvivant.com/"><b>Mohan Embar</b></a>, 2012 Loebner Prize Winner for his bot entry <a href="http://aidreams.co.uk/forum/index.php?page=Mohan_Embar_Interview_-_2012_Loebner_Prize_Winner_with_Chip_Vivant"><i>Chip Vivant,</i></a> gave an informal talk entitled <i>Moonshot or Low-Hanging Fruit</i>, sharing his motivation for creating his bot (which is not based on AIML) and encouraging other bot authors to question their own motivation and to stay focussed.</p>
<div id="attachment_3468" class="wp-caption alignright" style="width: 343px"><a href="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0677.jpg"><img class="size-full wp-image-3468  colorbox-3463" title="Dave Morton" alt="20130323-IMG_0677" src="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0677.jpg" width="333" height="500" /></a><p class="wp-caption-text">Dave Morton</p></div>
<p>He currently works on creating a more empathetic and engaging bot that is more than simply reacting. He suggested a project that would allow to program a bot with a persons&#8217; personality, core-values, views, achievements, etc. which would be available after the persons&#8217; death, for relatives and friends to still communicate with the deceased.</p>
<p><a href="http://www.cascobaymedical.org/"><b>Jeremy Spiegel</b></a>, MD, Cascon Bay Medical, was making the case for the use of Chatbots in Psychiatry, <a href="http://www.geekcavecreations.com/?personal"><b>Dave Morton</b></a>, Lead developer of the <a href="http://blog.program-o.com/">Program-O</a> AIML-Interpreter, talked about the improvements he is currently making on the PHP/MySQL based engine, and <a href="http://wolfpaulus.com"><b>Wolf Paulus</b></a>, Inuit Inc., talked about <a href="http://wolfpaulus.com/slides">Voice Enabling Chatbots</a>.</p>
<div id="attachment_3469" class="wp-caption alignright" style="width: 343px"><a href="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0695.jpg"><img class="size-full wp-image-3469  colorbox-3463" title="Bill DeSmedt" alt="20130323-IMG_0695" src="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0695.jpg" width="333" height="500" /></a><p class="wp-caption-text">Bill DeSmedt</p></div>
<p><a href="http://en.wikipedia.org/wiki/Bill_DeSmedt"><b>Bill DeSmedt</b></a>, system designer, Artificial Intelligence researcher, and science fiction author (Singularity (2004), Dualism (2010)) talked about his PASCAL based deductive and inductive reasoning system that can solve reasonably sophisticated murder mystery puzzles when fed with all the facts.</p>
<p>Dave Morton</p>
<div id="attachment_3470" class="wp-caption alignright" style="width: 343px"><a href="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0724.jpg"><img class="size-full wp-image-3470  colorbox-3463" title="Chris Shaw" alt="20130323-IMG_0724" src="http://wolfpaulus.com/wp-content/uploads/2013/03/20130323-IMG_0724.jpg" width="333" height="500" /></a><p class="wp-caption-text">Chris Shaw</p></div>
<p>The event ended with an invigorating talk from the entertaining, always challenging, and thought provoking <a href="http://www.haptek.com/"><b>Chris Shaw</b></a>. His focus was more on visual expression rather than artificial intelligence, showing many of the cutting edge visual presentations of avatars, like <a href="http://www.cam.ac.uk/research/news/face-of-the-future-rears-its-head">Zoe</a> . Chris emphasized the importance of tell a compelling story, a bots needs to be able to play a role in an interactive drama and always needs to be able to create that moment of surprise. He concluded with stressing the significance of sound quality of a natural voice over any visual presentation.</p>
<h1>The Conclusion</h1>
<p>Seeing the legends of AIML and Turing AI being all invigorated and out in force, confirmed the intuition that everyone at the conference seemed to have had: all the parts and pieces are finally coming together, to create an believable virtual human.</p>
<p>There was a spirit of optimism that many of the more experienced could only compare with the time shorty before the word-wide-web popularized the Internet.</p>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/software/chatbots33/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing Java 7.x and Tomcat 7.x on Debian Squeeze</title>
		<link>http://wolfpaulus.com/jounal/software/tomcat_squeeze?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tomcat_squeeze</link>
		<comments>http://wolfpaulus.com/jounal/software/tomcat_squeeze#comments</comments>
		<pubDate>Fri, 15 Mar 2013 23:23:11 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Webmin]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3426</guid>
		<description><![CDATA[Tomcat 7 is the first Apache Tomcat release to support  [...]]]></description>
				<content:encoded><![CDATA[<p>Tomcat 7 is the first Apache Tomcat release to support the Servlet 3.0, JSP 2.2, and EL 2.2 specifications. Please note that Tomcat 7 requires Java 1.6 or better so we start with installing a recent version of Oracle&#8217;s JRE.</p>
<h2>Install Oracle JRE 7 on Debian Linux</h2>
<p>To install Oracle&#8217;s Java Runtime with <em>apt-get</em>, we first need to entend the list of apt-get&#8217;s sources. Once that is done, an java-installer will actually install the Java SE Runtime Environment. Here are the steps to follow:<br />
<span id="more-3426"></span></p>
<pre class="brush: bash; title: Installing Java 7; notranslate">
$ su root
# echo &quot;deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main&quot; &gt; /etc/apt/sources.list.d/webupd8team-java.list
# echo &quot;deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu precise main&quot; &gt;&gt; /etc/apt/sources.list.d/webupd8team-java.list
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886
# apt-get update
# apt-get install oracle-java7-installer
# java -version
java version &quot;1.7.0_17&quot;
Java(TM) SE Runtime Environment (build 1.7.0_17-b02)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)
# exit
$
</pre>
<p>With Java now installed we move on, installing Tomcat. However, it may be beneficial to have an dedicated user for Tomcat, in case you &#8230;<br />
BTW, Java got installed into this location: <strong>/usr/lib/jvm/java-7-oracle</strong></p>
<pre class="brush: bash; title: Creating a new user, sans password, no direct logins; notranslate">
sudo adduser \
  --system \
  --shell /bin/bash \
  --gecos 'Tomcat Java Servlet and JSP engine' \
  --group \
  --disabled-password \
  --home /home/tomcat \
  tomcat
</pre>
<h2>Installing Tomcat7</h2>
<pre class="brush: bash; title: Downloading and unarchiving the archive; notranslate">
$ cd /tmp
$ wget http://mirror.cogentco.com/pub/apache/tomcat/tomcat-7/v7.0.37/bin/apache-tomcat-7.0.37.tar.gz
$ tar xvzf ./apache-tomcat-7.0.37.tar.gz
</pre>
<pre class="brush: bash; title: Moving the distribution into /usr/share/tomcat7; notranslate">
$ sudo mkdir /usr/share/tomcat7
$ sudo mv /tmp/apache-tomcat-7.0.37 /usr/share/tomcat7
</pre>
<p>To make it easy to replace this release with future releases, we are going to create a symbolic link that we are going to use when referring to Tomcat (after removing the old link, you might have from installing a previous version):</p>
<pre class="brush: bash; title: Linking tomcat to tomcat7.x.x; notranslate">
$ sudo rm -f /usr/share/tomcat
$ sudo ln -s /usr/share/tomcat7/apache-tomcat-7.0.37 /usr/share/tomcat
</pre>
<p>Since we created a <em>tomcat</em> user, he should also own all these files in</p>
<pre class="brush: bash; title: Changing ownership and make scripts executable; notranslate">
$ sudo chown -R tomcat:tomcat /usr/share/tomcat7
$ sudo chmod +x /usr/share/tomcat/bin/*.sh
</pre>
<p>If Tomcat&#8217;s default HTTP port (8080) is already in use, you need to edit the server.xml configuration file, e.g.<br />
edit /usr/share/tomcat/conf/server.xml and replace 8080 with 8000</p>
<h2>Starting Tomcat</h2>
<pre class="brush: bash; title: Tomcat Startup; notranslate">
$ sudo /bin/su - tomcat -c /usr/share/tomcat/bin/startup.sh

Using CATALINA_BASE:   /usr/share/tomcat
Using CATALINA_HOME:   /usr/share/tomcat
Using CATALINA_TMPDIR: /usr/share/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar
</pre>
<p style="text-align: center;"><a href="http://wolfpaulus.com/wp-content/uploads/2013/03/sc2.png"><img class="aligncenter  wp-image-3442 colorbox-3426" alt="sc2" src="http://wolfpaulus.com/wp-content/uploads/2013/03/sc2.png" width="571" height="559" /></a></p>
<h2>Stopping Tomcat</h2>
<pre class="brush: bash; title: Tomcat Shutdown; notranslate">
$sudo /bin/su - tomcat -c /usr/share/tomcat/bin/shutdown.sh

Using CATALINA_BASE:   /usr/share/tomcat
Using CATALINA_HOME:   /usr/share/tomcat
Using CATALINA_TMPDIR: /usr/share/tomcat/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/share/tomcat/bin/bootstrap.jar:/usr/share/tomcat/bin/tomcat-juli.jar
</pre>
<h2>Tomcat with Webmin</h2>
<p style="text-align: center;">If you were to manage your debian server with WebMin, the configuration of the start/stop behavior would look like this<br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/03/sc1.png"><img class="aligncenter  wp-image-3439 colorbox-3426" alt="sc1" src="http://wolfpaulus.com/wp-content/uploads/2013/03/sc1.png" width="501" height="221" /></a><br />
which created a script just like this one:</p>
<pre class="brush: bash; title: Webmin Tomcat Startup/Shutdown; notranslate">
#!/bin/sh
### BEGIN INIT INFO
# Provides: Tomcat
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 5
# Description: Java Servlet and JSP Engine
### END INIT INFO

case &quot;$1&quot; in
'start')
	/bin/su - tomcat -c /usr/share/tomcat/bin/startup.sh
	;;
'stop')
	/bin/su - tomcat -c /usr/share/tomcat/bin/shutdown.sh
	;;
*)
	echo &quot;Usage: $0 { start | stop }&quot;
	;;
esac
exit 0
</pre>
<p>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/software/tomcat_squeeze/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Speech Synthesis and the Quality of Voice</title>
		<link>http://wolfpaulus.com/jounal/android-journal/speechsynthesis?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=speechsynthesis</link>
		<comments>http://wolfpaulus.com/jounal/android-journal/speechsynthesis#comments</comments>
		<pubDate>Sat, 02 Mar 2013 00:10:39 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[natural user interface]]></category>
		<category><![CDATA[nui]]></category>
		<category><![CDATA[speech synthesis]]></category>
		<category><![CDATA[tts]]></category>
		<category><![CDATA[voice user interface]]></category>
		<category><![CDATA[vui]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3372</guid>
		<description><![CDATA[When listing to the radio or a podcast, while driving t [...]]]></description>
				<content:encoded><![CDATA[<p>When listing to the radio or a podcast, while driving to work, I don&#8217;t think I imagine how the person I&#8217;m listing to, looks like. Still, if later, I happen to see them for the first time, in a picture or video, I often find myself surprised.</p>
<p>A verbally responding mobile application has many obvious advantages. For instance, users don&#8217;t have to decipher tiny fonts on small displays, in fact, they don&#8217;t have to look at the display at all. Just like colors and typography contribute considerably to the look and feel of an application, so does the voice quality for a voice enabled mobile application.</p>
<h3>There are at least three different approaches to synthesize text.</h3>
<p>There might be a Text-To-Speech module built into the OS, or a separately installed Text-o-Speech engines can plug-in to the OS&#8217;s Text-To-Speech module.<br />
Secondly, instead of requiring a separate install, a synthesizer and voices can be packaged and shipped with the application.<br />
Lastly, a web-service can be used, to synthesize text. The advantage of this, would be a more predictable and consistent voice quality, comparatively independent from the hardware and operation system used on the mobile client.</p>
<p><span id="more-3372"></span></p>
<div class='et-box et-shadow'>
					<div class='et-box-content'><strong>Quality of Voice</strong>
Voice quality is that component of speech which gives the primary distinction to a given speaker&#8217;s voice when <em>pitch</em> and <em>loudness</em> are excluded. It involves both <em>phonatory</em> and <em>resonatory</em> characteristics. Some of the descriptions of voice quality are <em>harshness</em>, <em>breathiness</em> and <em>nasality</em>.</div></div>
<h2>Voice Synthesis Demo</h2>
<p><object width="230" height="390" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.neospeech.com/NeoSpeech.swf" /><embed width="230" height="390" type="application/x-shockwave-flash" src="http://www.neospeech.com/NeoSpeech.swf" /> </object></p>
<p>Voiceware Co.,Ltd., located in Seoul, Korea, provides one of the highest speech synthesis quality solutions available. This however is highly subjective, see &#8220;Factors to assess voice quality&#8221; below.</p>
<p>Listener&#8217;s choice of what is a <em>good</em> voice is subjective without measurable units. However, a voice can still be described as:</p>
<ul>
<li><strong>Bright</strong>: Higher loudness without effort (not-shouting)</li>
<li><strong>Confident</strong>: Steady Pitch and Loudness level –opposite of wavering</li>
<li><strong>Melodious</strong>: Good correlation between Pitch and loudness</li>
<li><strong>Resonant</strong>: Articulation tuned to Pitch – Ringing</li>
<li><strong>Hoarse</strong>: Presence of noise component – absence of harmonics</li>
<li><strong>Pressed</strong>: Long closed phase in vibration cycle</li>
<li><strong>Breathy</strong>: Steep spectral slope, strong fundamental</li>
<li><strong>Nasal</strong>: Heavily damped resonances</li>
</ul>
<h2>Factors to assess voice quality</h2>
<p>Voice quality depends not only on the functioning of the voice box or the larynx but also on articulation (enunciation or pronunciation), rate of speech (too rapid or too slow), intonation, pauses etc.</p>
<ul>
<li><strong>Rate</strong> of speaking: Number of words per breath, Number of words per minute</li>
<li><strong>Rhythm</strong> of Speech: Accent and Inflections (Pitch range)</li>
<li><strong>Breathing</strong> Pattern: Speech as during fast walking Vs relaxed</li>
<li><strong>Pitch</strong> Level: Habitual F0 or Pitch</li>
<li><strong>Loudness</strong> level: Deafening (too loud) Vs Whispering (too soft)</li>
<li><strong>Mood</strong> State: Sudden changes in pitch level, loudness and rhythm</li>
<li><strong>Clarity</strong> of Speech: Good articulatory habit</li>
</ul>
<h2>When perceiving a persons credibility, accent is more important than looks</h2>
<p><object width="480" height="288" classid="clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"><param name="src" value="http://www.americanenglish.us/file.php/1/Perceptions.mov" /><param name="controller" value="true" /><param name="autoplay" value="false" /><param name="autostart" value="0" /><param name="pluginspage" value="http://www.apple.com/quicktime/download/" /><embed width="480" height="288" type="video/quicktime" src="http://www.americanenglish.us/file.php/1/Perceptions.mov" controller="true" autoplay="false" autostart="0" pluginspage="http://www.apple.com/quicktime/download/" /><!--[if !IE]> <--> <img src="http://wolfpaulus.com/wp-includes/js/tinymce/themes/advanced/img/trans.gif" class="mceItemMedia mceItemQuickTime colorbox-3372" width="480" height="288" data-mce-json="{'video':{},'params':{'pluginurl':'http://www.apple.com/quicktime/download/','controller':'true','autoplay':'false','autostart':'0','src':'http://www.americanenglish.us/file.php/1/Perceptions.mov'},'name':null,'hspace':null,'vspace':null,'align':null,'bgcolor':null}" alt="" /></object></p>
<h2></h2>
<h3>More TTS &#8211; Web Services</h3>
<ul>
<li>Google http://translate.google.com/translate_tts?tl=en&amp;q=text, e.g.:</li>
<li><a href="http://translate.google.com/translate_tts?tl=en_uk&amp;q=Hello+,+how+are+you+today+?" target="_blank">http://translate.google.com/translate_tts?tl=en_uk&amp;q=Hello+,+how+are+you+today+?</a></li>
<li>Free text-to-speech conversion service: <a href="http://speechutil.com/" target="_blank">http://speechutil.com/</a></li>
<li>Microsoft http://www.microsofttranslator.com/dev/ an example would be http://www.bing.com/translator/</li>
<li>iSpeech Demo: <a href="http://www.ispeech.org/text.to.speech" target="_blank">http://www.ispeech.org/text.to.speech</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/android-journal/speechsynthesis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.americanenglish.us/file.php/1/Perceptions.mov" length="7403288" type="video/quicktime" />
<enclosure url="http://translate.google.com/translate_tts?tl=en&amp;amp" length="0" type="image/gif" />
<enclosure url="http://translate.google.com/translate_tts?tl=en_uk&amp;amp" length="0" type="image/gif" />
		</item>
		<item>
		<title>Artist on Android w/ Voice Recognition</title>
		<link>http://wolfpaulus.com/jounal/android-journal/artist-voice-recognition?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=artist-voice-recognition</link>
		<comments>http://wolfpaulus.com/jounal/android-journal/artist-voice-recognition#comments</comments>
		<pubDate>Fri, 22 Feb 2013 04:37:28 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[print]]></category>
		<category><![CDATA[voice recognition]]></category>
		<category><![CDATA[vui]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3333</guid>
		<description><![CDATA[Artist on Android The display is the canvas and your fi [...]]]></description>
				<content:encoded><![CDATA[<div id="APTFF_by_TAP-by-shortcode-304" class="AlpinePhotoTiles_inpost_container"><!-- Using AlpinePT for Flickr v1.2.5 with Flickr API V2 --><!-- Success using wp_remote_get() and PHP_Serial --><!-- Retrieved from cache --><div id="id304-AlpinePhotoTiles_container" class="AlpinePhotoTiles_container_class"><div id="id304-hidden-parent" class="AlpinePhotoTiles_parent_class" style="width:100%;max-width:100%;padding:0px;margin:0px auto;text-align:center;"><div id="id304-image-list" class="AlpinePhotoTiles_image_list_class" style="display:none;visibility:hidden;"><a href="http://farm8.staticflickr.com/7332/8728364122_0711fca788_c.jpg" class="AlpinePhotoTiles-link AlpinePhotoTiles-lightbox" title='Artist on Android' alt='Artist on Android'><img id="id304-tile-0" class="AlpinePhotoTiles-image AlpinePhotoTiles-img-shadow AlpinePhotoTiles-img-border AlpinePhotoTiles-img-corners AlpinePhotoTiles-img-highlight colorbox-3333" src="http://farm8.staticflickr.com/7332/8728364122_0711fca788_s.jpg" title='Artist on Android' alt='Artist on Android' border="0" hspace="0" vspace="0" style=""  /></a><a href="http://farm8.staticflickr.com/7403/8721648765_9c8005df09_z.jpg" class="AlpinePhotoTiles-link AlpinePhotoTiles-lightbox" title='Artist on Android' alt='Artist on Android'><img id="id304-tile-1" class="AlpinePhotoTiles-image AlpinePhotoTiles-img-shadow AlpinePhotoTiles-img-border AlpinePhotoTiles-img-corners AlpinePhotoTiles-img-highlight colorbox-3333" src="http://farm8.staticflickr.com/7403/8721648765_9c8005df09_s.jpg" title='Artist on Android' alt='Artist on Android' border="0" hspace="0" vspace="0" style=""  /></a><a href="http://farm8.staticflickr.com/7455/8719649040_0132f6402a_c.jpg" class="AlpinePhotoTiles-link AlpinePhotoTiles-lightbox" title='Artist on Android' alt='Artist on Android'><img id="id304-tile-2" class="AlpinePhotoTiles-image AlpinePhotoTiles-img-shadow AlpinePhotoTiles-img-border AlpinePhotoTiles-img-corners AlpinePhotoTiles-img-highlight colorbox-3333" src="http://farm8.staticflickr.com/7455/8719649040_0132f6402a_s.jpg" title='Artist on Android' alt='Artist on Android' border="0" hspace="0" vspace="0" style=""  /></a><a href="http://farm8.staticflickr.com/7426/8714429565_866361153d.jpg" class="AlpinePhotoTiles-link AlpinePhotoTiles-lightbox" title='Khalilha collins' alt='Khalilha collins'><img id="id304-tile-3" class="AlpinePhotoTiles-image AlpinePhotoTiles-img-shadow AlpinePhotoTiles-img-border AlpinePhotoTiles-img-corners AlpinePhotoTiles-img-highlight colorbox-3333" src="http://farm8.staticflickr.com/7426/8714429565_866361153d_s.jpg" title='Khalilha collins' alt='Khalilha collins' border="0" hspace="0" vspace="0" style=""  /></a><a href="http://farm9.staticflickr.com/8263/8665640843_c9bc31bb56_c.jpg" class="AlpinePhotoTiles-link AlpinePhotoTiles-lightbox" title='Sunny Day' alt='Sunny Day'><img id="id304-tile-4" class="AlpinePhotoTiles-image AlpinePhotoTiles-img-shadow AlpinePhotoTiles-img-border AlpinePhotoTiles-img-corners AlpinePhotoTiles-img-highlight colorbox-3333" src="http://farm9.staticflickr.com/8263/8665640843_c9bc31bb56_s.jpg" title='Sunny Day' alt='Sunny Day' border="0" hspace="0" vspace="0" style=""  /></a><a href="http://farm9.staticflickr.com/8264/8611962197_a0439a3679_c.jpg" class="AlpinePhotoTiles-link AlpinePhotoTiles-lightbox" title='long orcha' alt='long orcha'><img id="id304-tile-5" class="AlpinePhotoTiles-image AlpinePhotoTiles-img-shadow AlpinePhotoTiles-img-border AlpinePhotoTiles-img-corners AlpinePhotoTiles-img-highlight colorbox-3333" src="http://farm9.staticflickr.com/8264/8611962197_a0439a3679_s.jpg" title='long orcha' alt='long orcha' border="0" hspace="0" vspace="0" style=""  /></a></div></div></div><script>jQuery(document).ready(function() {
  jQuery('#id304-AlpinePhotoTiles_container').addClass('loading'); 
});
jQuery(window).load(function() {
  jQuery('#id304-AlpinePhotoTiles_container').removeClass('loading');
  if( jQuery().AlpinePhotoTilesPlugin ){
    AlpinePhotoTilesPlugin();
  }else{
    var css = 'http://wolfpaulus.com/wp-content/plugins/alpine-photo-tile-for-flickr/css/AlpinePhotoTiles_style.css';
    var link = jQuery(document.createElement('link')).attr({'rel':'stylesheet','href':css,'type':'text/css','media':'screen'});
    jQuery.getScript('http://wolfpaulus.com/wp-content/plugins/alpine-photo-tile-for-flickr/js/AlpinePhotoTiles_script.js', function(){
      if(document.createStyleSheet){
        document.createStyleSheet(css);
      }else{
        jQuery('head').append(link);
      }
      if( !jQuery().colorbox ){ // Load Lightbox
        jQuery.getScript('http://wolfpaulus.com/wp-content/plugins/alpine-photo-tile-for-flickr/js/colorbox/jquery.colorbox-min.js?ver=1.4.5', function(){
          css = 'http://wolfpaulus.com/wp-content/plugins/alpine-photo-tile-for-flickr/js/colorbox/colorbox.css?ver=1.3.21';
          link = jQuery(document.createElement('link')).attr({'rel':'stylesheet','href':css,'type':'text/css','media':'screen'});
          if(document.createStyleSheet){
            document.createStyleSheet(css);
          }else{
            jQuery('head').append(link);
          }
          AlpinePhotoTilesPlugin();
        });
      }else{
        AlpinePhotoTilesPlugin();
      }
    }); //Close getScript
  }
  function AlpinePhotoTilesPlugin() {
      jQuery('#id304-hidden-parent').AlpinePhotoTilesPlugin({
        id:'id304',
        style:'floor',
        shape:'vertical',
        perRow:3,
        imageBorder:1,
        imageShadow:1,
        imageCurve:1,
        imageHighlight:1,
        lightbox:1,
        galleryHeight:0, // Keep for Compatibility
        galRatioWidth:800,
        galRatioHeight:600,
        highlight:'#64a2d8',
        pinIt:0,
        siteURL:'http://wolfpaulus.com',
        callback: function(){jQuery( '#id304-AlpinePhotoTiles_container a.AlpinePhotoTiles-lightbox' ).attr( 'rel', 'alpine-colorbox[id304]' );if(jQuery().colorbox){jQuery( 'a[rel^=\'alpine-colorbox[id304]\']' ).colorbox( {maxHeight:'85%'} );}}
      });
  }
}); //Close load
</script></div>
<p><span id="more-3333"></span><br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/02/png.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/02/png.png" alt="Artist on Android" width="266" height="462" class="alignright size-full wp-image-3321 colorbox-3333" /></a></p>
<h2>Artist on Android</h2>
<p>The display is the canvas and your finger becomes a paint brush.<br />
Simply use your finger to create beautiful paintings.<br />
Use the Menu to change color or brush styles and also to print or share your artwork via Email etc.<br />
Publish your best work on our <a href="http://www.flickr.com/groups/artistonandroid/pool/" target="_blank">flickr group</a>, straight from the app.<br />
Using Advanced Photo Paper has produced stunning print results, worth framing.<br />
I am totally amazed by what users have drawn with this app.<br />
<br clear="all"/><br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/02/png-1.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/02/png-1.png" alt="png-1" width="266" height="462" class="alignright size-full wp-image-3323 colorbox-3333" /></a></p>
<h2>Voice Recognition</h2>
<p>Mobile applications like <em>Artist on Android</em> are perfectly suited to accept voice input.<br />
Instead of accessing the menu several times, to select a tool (like a pen or a brush), its style (like embossed or blurred), and its color, you now press the microphone button in the Actionbar and say &#8220;Lavender Blur Pen&#8221;.</p>
<p>The application&#8217;s vocabulary include all menu topics like &#8220;Pen, Brush, Roll, Emboss, Blur, Blend, Alpha, Erase, Reset, Save, Print, Share Publish, Explore, and Help&#8221; and also over one hundred color names. To bring up a list of all those color names, simply say &#8220;Colors&#8221;.<br />
Speech recognition, interpretation, and processing is hard and &#8220;Artist on Android&#8221; is far from perfect. So please be gracious and generous if it not always understands. We are just getting started ..</p>
<p/>
<a href="https://play.google.com/store/apps/details?id=com.techcasita.android.artist"><img class="colorbox-3333"  alt="Android app on Google Play" src="https://developer.android.com/images/brand/en_app_rgb_wo_45.png"/></a><br />
<br clear="all"/></p>
<p/>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/android-journal/artist-voice-recognition/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing / Updating Python on OS X</title>
		<link>http://wolfpaulus.com/jounal/mac/installing_python_osx?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=installing_python_osx</link>
		<comments>http://wolfpaulus.com/jounal/mac/installing_python_osx#comments</comments>
		<pubDate>Mon, 28 Jan 2013 17:00:28 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=2071</guid>
		<description><![CDATA[While Python comes pre-installed on OS X, Apple doesn&# [...]]]></description>
				<content:encoded><![CDATA[<p>While Python comes pre-installed on OS X, Apple doesn&#8217;t do a good job on keeping the Python runtime environment up to date. Currently, on Mac OS X 10.7.4 &#8220;Lion&#8221;, entering <code>python -V</code> returns <code>Python 2.7.1</code>. Even worse, Mac OS X 10.6 &#8220;Snow Leopard&#8221; is still on a Python 2.6 release.<br />
While the latest Python releases are always available on <a href="http://www.python.org" target="_blank">http://www.python.org</a>, updating a Mac isn&#8217;t a simple, straight forward process.</p>
<p>Follow along and update your Mac to Python 2.7.3, or 3.3.0 or whatever the newest 2.x and 3.x release might be, when you read this. To update your Mac to something like Python 2.7.3, I assume that</p>
<ul>
<li>your Mac-User account is setup as an &#8220;Administrator&#8221; account.</li>
<li>your Mac already has this folder: /System/Library/Frameworks/Python.framework/Versions/</li>
</ul>
<p>To read about how to upgrade to Python 3.3, jump to the very bottom of this post.<br />
<span id="more-2071"></span></p>
<h3>1. Downloading and Installing the latest Python Release</h3>
<p>Go to <em>python.org</em> and pick the most recent Python 2.x release: <a href="http://python.org/download" target="_blank">http://python.org/download</a>.<br />
I picked <em>Python 2.7.3 Mac OS X 64-bit/32-bit x86-64/i386 Installer (for Mac OS X 10.6 and later)</em>, an about 18 MB download.<br />
Opening the DMG and executing the installer <em>(Python.mpkg)</em> will install the Python release into <strong>/Library/Frameworks/Python.framework</strong>, which is <strong>not</strong> next to the other, already installed Python versions and may lead to some nasty incompatibilities. Moreover, <code>/usr/bin/python</code> still executes python 2.7.1., i.e. some work still needs to be done to really update Python on your Mac.</p>
<h3>2. Moving Python into the right place</h3>
<p>If Python 2.7.x is already available on the Mac (e.g. on OS X Lion), open a terminal and enter:</p>
<pre class="brush: bash; title: ; notranslate">
sudo rm -R /System/Library/Frameworks/Python.framework/Versions/2.7
</pre>
<p>This will delete Python 2.7.<br />
In any case, now enter this into the terminal</p>
<pre class="brush: bash; title: ; notranslate">
sudo mv /Library/Frameworks/Python.framework/Versions/2.7 /System/Library/Frameworks/Python.framework/Versions
</pre>
<p>which moves the just installed python 2.7.3 release next to the other Python releases.</p>
<h3>3. Fixing the Group</h3>
<p>Setting group to <em>wheel</em>, just like it&#8217;s done for the already installed Python Versions:</p>
<pre class="brush: bash; title: ; notranslate">
sudo chown -R root:wheel /System/Library/Frameworks/Python.framework/Versions/2.7
</pre>
<h3>4. Updating the Current Link</h3>
<pre class="brush: bash; title: ; notranslate">
sudo rm /System/Library/Frameworks/Python.framework/Versions/Current
sudo ln -s /System/Library/Frameworks/Python.framework/Versions/2.7 /System/Library/Frameworks/Python.framework/Versions/Current
</pre>
<h3>5. Fixing /usr/bin</h3>
<p>Since python, pythonw, etc. are not linked but actually reside in the <code>/usr/bin</code> directory,<br />
<code>/usr/bin/python</code> still executes python 2.7.1..<br />
Therefore, we are going to remove the old python executable files and replacing them with links into /System/Library/Frameworks/Python.framework/Versions/Current:</p>
<h4>5.1. Removing old copies</h4>
<pre class="brush: bash; title: ; notranslate">
sudo rm /usr/bin/pydoc
sudo rm /usr/bin/python
sudo rm /usr/bin/pythonw
sudo rm /usr/bin/python-config
</pre>
<h4>5.2. Creating links into /System/&#8230;/Python.framework/Versions/Current</h4>
<pre class="brush: bash; title: ; notranslate">
sudo ln -s /System/Library/Frameworks/Python.framework/Versions/2.7/bin/pydoc /usr/bin/pydoc
sudo ln -s /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python /usr/bin/python
sudo ln -s /System/Library/Frameworks/Python.framework/Versions/2.7/bin/pythonw /usr/bin/pythonw
sudo ln -s /System/Library/Frameworks/Python.framework/Versions/2.7/bin/python-config /usr/bin/python-config
</pre>
<h3>6. Updating .bash_profile</h3>
<p>Use TextMate, pico, or your favorite text editor to edit the hidden ~/.bash_profile file. If you want to be able to execute python tools like idle easily, without providing the path, edit the PATH for Python like this:</p>
<pre class="brush: bash; title: ; notranslate">
# Setting PATH for Python 2.7
# The orginal version is saved in .bash_profile.pysave
PATH=&quot;/System/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}&quot;
export PATH
</pre>
<p>However, you can also remove those four lines altogether or fall-back to the .bash_profile.pysave file.<br />
Try it by closing the terminal app, re-opening it, and entering <code>python -V</code> as well as <code>/usr/bin/python -V</code>.</p>
<h3>7. Updating your IDE</h3>
<p>The last remaining step it to tell your IDE about the new Python release that you just installed.<br />
I hope you have discovered <a href="http://www.jetbrains.com/pycharm/" target="_blank">PyCharm</a>, JetBrain&#8217;s IDE for Python and Django.<br />
In PyCharm, you would open its properties and under &#8220;Project Interpreters&#8221; change the Python Interpreter, by pointing it to the <code>/System/Library/Frameworks/Python.framework/Versions/2.7</code> directory.</p>
<p><img class="aligncenter size-full wp-image-2092 colorbox-2071" title="pycharm" src="http://wolfpaulus.com/wp-content/uploads/2012/07/pycharm.png" alt="" width="550" height="374" /></p>
<h1>Updating to Python 3.3</h1>
<p>Following the same procedure, you can also update to Python 3.3. E.g, I downloaded the <i>Python 3.3.0 Mac OS X 64-bit/32-bit x86-64/i386 Installer</i> form here: <a href="http://python.org/download/" target="_blank">http://python.org/download/</a></p>
<p>After running the included installer, a script like this (run with sudo) should put everything into the right place and make python 3.3 the default python version.</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
rm -R /System/Library/Frameworks/Python.framework/Versions/3.3
mv /Library/Frameworks/Python.framework/Versions/3.3 /System/Library/Frameworks/Python.framework/Versions
chown -R root:wheel /System/Library/Frameworks/Python.framework/Versions/3.3

rm /System/Library/Frameworks/Python.framework/Versions/Current
ln -s /System/Library/Frameworks/Python.framework/Versions/3.3 /System/Library/Frameworks/Python.framework/Versions/Current

rm /usr/bin/pydoc
rm /usr/bin/python
rm /usr/bin/pythonw
rm /usr/bin/python-config

rm /System/Library/Frameworks/Python.framework/Versions/3.3/bin/pydoc 
rm /System/Library/Frameworks/Python.framework/Versions/3.3/bin/python 
rm /System/Library/Frameworks/Python.framework/Versions/3.3/bin/pythonw 
rm /System/Library/Frameworks/Python.framework/Versions/3.3/bin/python-config 

ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/pydoc3 /usr/bin/pydoc
ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/python3 /usr/bin/python
ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/pythonw3 /usr/bin/pythonw
ln -s /System/Library/Frameworks/Python.framework/Versions/3.3/bin/python3-config /usr/bin/python-config
</pre>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/mac/installing_python_osx/feed</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>E*Trade Mobile – Voice Commands</title>
		<link>http://wolfpaulus.com/jounal/android-journal/etrade-voice-commands?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=etrade-voice-commands</link>
		<comments>http://wolfpaulus.com/jounal/android-journal/etrade-voice-commands#comments</comments>
		<pubDate>Sun, 27 Jan 2013 22:36:44 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[speech recognition]]></category>
		<category><![CDATA[speech synthesis]]></category>
		<category><![CDATA[voice commands]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3219</guid>
		<description><![CDATA[ETrade provides a great mobile app experience on iPhone [...]]]></description>
				<content:encoded><![CDATA[<p>ETrade provides a great mobile app experience on iPhone, iPad, Android, Windows Phone, and Blackberry. I think it&#8217;s almost expected that the feature-set provided by the dedicated native mobile applications are not quite the same. The Windows version and especially the one for Blackberry fall far behind what <a href="https://play.google.com/store/apps/details?id=com.etrade.mobilepro.activity" target="_blank">ETrade has to offer on Android</a> and iOS.</p>
<p>For instance, in April 2012, Speech Recognition was first added to their iPhone (not iPad) mobile application and later to the Android app as well; allowing the user to request stock quotes, options chains, company information, or to launch the stock order, just by using voice.</p>
<p><em>&#8220;Investors are becoming more accustomed to interacting with voice-enabled technology, and we&#8217;re proud to be one of the first to offer this innovative feature to our mobile users,&#8221;</em> said Michael Curcio, President, ETRADE Securities. <em>&#8220;By integrating voice technology, ETRADE provides a mobile experience unlike any other – creating a state-of-the-art and convenient approach to navigation.&#8221;</em></p>
<p>ETrade uses speech recognition and speech synthesis software provided by <a href="http://www.nuance.com/for-developers/dragon-mobile-sdk/index.htm" target="_blank">Nuance Communications, Inc</a>. The application is feature-packed, comes as an 11 MB download, and is not, what you would call a thin client. Only a very few of those features however, are accessible through Voice Commands.<br />
<span id="more-3219"></span></p>
<h2>Available Voice Commands</h2>
<h3>Stock Quotes</h3>
<p><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/png.png"><img class="alignright  wp-image-3224 colorbox-3219" alt="ETrade Mobile App" src="http://wolfpaulus.com/wp-content/uploads/2013/01/png.png" width="345" height="598" /></a></p>
<ul>
<li>&#8220;Price [symbol or name]&#8220;</li>
<li>&#8220;Can I get a quote on [symbol or name]?&#8221;</li>
<li>&#8220;Please give me the stock price on [symbol or name]&#8220;</li>
</ul>
<h3>Company News</h3>
<ul>
<li>&#8220;I would like news on [symbol or name]&#8220;</li>
<li>&#8220;News [symbol or name]&#8220;</li>
<li>&#8220;Can I get some news on [symbol or name]?&#8221;</li>
</ul>
<h3>Company Options Chains</h3>
<ul>
<li>&#8220;Can I get options chains on [symbol or name]&#8220;</li>
<li>&#8220;Give me options on [symbol or name]&#8220;</li>
</ul>
<h3>Screen Navigation</h3>
<ul>
<li>Take me to the dashboard&#8221;</li>
<li>&#8220;Show me my accounts please&#8221;</li>
<li>&#8220;I would like to see my alerts&#8221;</li>
<li>&#8220;Can I see my watchlists&#8221;</li>
<li>&#8220;Show me my portfolios&#8221;</li>
</ul>
<h3>Stock Order Ticket</h3>
<ul>
<li>&#8220;Buy 50 shares of [symbol or name]&#8220;</li>
<li>&#8220;Buy 75 shares of [symbol or name] at limit price 9 dollars and 50 cents&#8221;</li>
<li>&#8220;Sell my holdings on [symbol or name]&#8220;</li>
<li>&#8220;Sell 200 shares of [symbol or name]&#8220;</li>
<li>&#8220;Sell 50 shares of [symbol or name] at limit price of 10 dollars&#8221;</li>
</ul>
<h2>Chat Bot</h2>
<p>When it comes to interpreting voice inputs, the Etrade app is much more forgiving than Google&#8217;s. For instance, while only <em>&#8220;Take me to the dashboard&#8221;</em> is listed as a voice command,<br />
<em>&#8220;Open the dashboard&#8221;</em> or <em>&#8220;Show me the dashboard&#8221;</em>, or <em>&#8220;Can I see the dashboard&#8221;</em>, is understood and does open the application&#8217;s dashboard view. However, the monotone voice and demeanor of the bot suggests some kind of bitterness, more than even Apple&#8217;s Siri does. This of course is hight subjective.</p>
<p>Besides what is listed as an available voice command, the Etrade app doesn&#8217;t seem to be very communicative. Simple questions like <em>&#8220;How did the market close today?&#8221;</em>,<em>&#8220;How are you?&#8221;</em>, or <em>&#8220;What is your name?&#8221;</em> all trigger the same answer <em>&#8220;<strong>One moment please &#8211; I&#8217;m sorry I could not process that.</strong>&#8220;</em></p>
<h2>Dissecting the mobile application</h2>
<p>Once the microphone button is pressed, a voice prompt is played <em>&#8220;How can I help you?&#8221;</em> and the application goes into listening mode. It will keep listing until a drop in amplitude is recognized. I.e., if I didn&#8217;t say anything, it kept listening, probably until the phone runs out of battery.<br />
When an amplitude drop is recognized, the sound recording is sent for speech recognition and acknowledged with another voice prompt: <em>&#8220;One moment please.&#8221; </em><br />
The recognition of an input like <em>&#8220;Please give me the stock price on Apple&#8221;</em> creates a spoken output like <em>&#8220;Price 439.88 Change Percent Minus 2.36 Percent&#8221;</em>. The time between the end of the request and the beginning of the response is a little over <strong>5 seconds</strong>. However, the voice prompt <em>&#8220;One moment please&#8221;</em> and the fact that the app shows a view with the requested quote, even before it starts playing the synthesized response, are clever tricks to obscure the relative long delay.</p>
<p>Since the application doesn&#8217;t seem to include the standard Nuance Voice Kit, I am assuming the sound file is not streamed during the recording (the forever listing behavior would be another indication), but rather encoded and sent via HTTP POST once the recording has stopped.<br />
The response is synthesized by a Web-service, instead of on the mobile device itself. While this has the advantage that no high quality voice synthesizer needs to be deployed with the app, the pre-recorded and included voice prompts sound differently, in quality and also noticeably in loudness.</p>
<h2>Final Thoughts</h2>
<p>ETrade has done a great first step, voice-enabling their mobile application. It&#8217;s better than Google&#8217;s Voice Commands, since it&#8217;s much less rigid. And while voice and demeanor remind us of Siri, it&#8217;s good to see trailblazers like Etrade pioneering Voice User Interfaces on mobile.</p>
<h2>Demo</h2>
<p>Take a look and a listen how I interacted with ETrade&#8217;s mobile Android app via Voice Commands:</p>
<p><iframe src="http://player.vimeo.com/video/58228333" height="360" width="640" allowfullscreen="" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/android-journal/etrade-voice-commands/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sh!t we dislike &#8211; I&#8217;m Watch</title>
		<link>http://wolfpaulus.com/jounal/hardware/imwatch?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=imwatch</link>
		<comments>http://wolfpaulus.com/jounal/hardware/imwatch#comments</comments>
		<pubDate>Wed, 23 Jan 2013 08:00:28 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[bluetooth]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3080</guid>
		<description><![CDATA[The broad introduction of Voice User Interfaces, which  [...]]]></description>
				<content:encoded><![CDATA[<p>The broad introduction of <em>Voice User Interfaces</em>, which allow humans to interaction with computers through voice/speech, may be the next revolution, when it comes to User Interface Engineering and represent an even bigger change, when compared to the transition from text-based to graphical user interfaces. A Voice User Interfaces seems to be especially attractive on smaller devices, like small phones or watches that don&#8217;t allow for many buttons or have a touch-screen that is just not big enough, to allow for comfortable interactions.<br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/pebbles.jpeg"><img class="aligncenter size-full wp-image-3096 colorbox-3080" alt="pebbles" src="http://wolfpaulus.com/wp-content/uploads/2013/01/pebbles.jpeg" width="560" height="420" /></a><br />
The first generation of watches that connect to smartphone via Bluetooth is now available, most of them are not equipped with a microphone and speaker, i.e. don&#8217;t provide a good platform for a Voice User Interface.</p>
<ul>
<li><a href="http://www.kickstarter.com/projects/597507018/pebble-e-paper-watch-for-iphone-and-android" target="_blank">Pebble</a>, E-Paper Watch for iPhone and Android.</li>
<li><a href="http://www.sonymobile.com/us/products/accessories/smartwatch/" target="_blank">Smartwatch</a>, Sony Android watch.</li>
<li><a href="http://www.motorola.com/us/consumers/8GB-or-16GB-MOTOACTV/79070,en_US,pd.html?cgid=fitness-devices" target="_blank">MOTOACTV</a>, Motorola GPS Fitness Tracker with MP3 Player.</li>
<li><a href="http://blog.tokyoflash.com/2012/10/nexd-the-next-gen-android-watch/" target="_blank">NEXD</a>, The Next-gen Android watch.</li>
<li><a href="http://www.imsmart.com/en" target="_blank">i&#8217;m Watch</a>, i&#8217;m SpA, Smartwatch connects via Bluetooth to a phone.</li>
</ul>
<p><span id="more-3080"></span></p>
<h2>i&#8217;m Watch</h2>
<p>However, there is i&#8217;m SpA, an Italian company, maker of the I&#8217;M WATCH, an Android 1.6 powered watch that works as a Bluetooth extension for iPhone and Android phones and comes with microphone and speaker on board.</p>
<p><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/imwatches.png"><img class="aligncenter size-full wp-image-3097 colorbox-3080" alt="imwatches" src="http://wolfpaulus.com/wp-content/uploads/2013/01/imwatches.png" width="293" height="219" /></a></p>
<h3>Gestures</h3>
<p>I really wanted to like the i&#8217;m Watch, but a couple of significant shortcomings became immediately obvious, during the setup process.<br />
There is a delay with all touch and swipe gestures, which we are just not used to anymore. A response often comes delayed and you end up pressing buttons twice. Mainly due to the small display size, gestures seem too sensitive, i.e. minuscule gestures create unexpected effects.<br />
The notification panel, which is heavily used, is too small and therefore hard to access, when dragging it downwards to open it.</p>
<h3>Audio Quality</h3>
<p><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/hotspot.png"><img class="alignright  wp-image-3101 colorbox-3080" alt="hotspot" src="http://wolfpaulus.com/wp-content/uploads/2013/01/hotspot.png" width="287" height="499" /></a><br />
Using the watch as an Bluetooth extension for a phone, e.g. to make phone calls, is virtually impossible. The audio quality for both playback and recording is terribly bad.</p>
<h3>Internet Access</h3>
<p>Most applications running on the Watch need to access the Internet, which means that the smart phone that connects to the watch via Bluetooth, needs to act as hotspot for Bluetooth devices. Enabling this feature on your smartphone requires to upgrade ($$) your dataplan (at least for Verizon and AT&amp;T customers).</p>
<h2>Software development</h2>
<p>Software development, at least for the purpose I wanted to use the watch for, turned into something close to a nightmare. There are two Android 1.6 images available for the Watch, one has adb enabled, i.e. allows to deploy Android apps, the other one allows to mount the watch as a USB drive &#8211; it&#8217;s either or. I went with the adb enabled image for developers, but the Watch still doesn&#8217;t easily show up with &#8220;adb devices&#8221;. Instead, one needs to setup a RNDIS network device and hardcode 10.0.0.168 as its ANDROID HOST IP. adb needs to be manally killed and restarted every time the watch gets (re-)connected. Which needs to happens very often, since a DRRS-plug is the only way to tether the watch for deployment, but while connected, the DRRS-plug also shuts-off microphone and speaker.</p>
<p><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/20130115-IMG_7626.jpg"><img class="size-full wp-image-3110 aligncenter colorbox-3080" alt="20130115-IMG_7626" src="http://wolfpaulus.com/wp-content/uploads/2013/01/20130115-IMG_7626.jpg" width="500" height="333" /></a></p>
<h3>SpeechSynthesis</h3>
<p>While <em>android.speech.tts.TextToSpeech</em> was introduced with Android 1.6, there was no implementation provided on the i&#8217;m Watch. However, after a little bit of searching around, I came across <em>com.svox.langpack.installer.apk</em> and <em>PicoLangInstaller.apk</em>, which can be installed on the watch (adb install ..). This eventually helped to enable a crummy but still understandable voice output.</p>
<pre class="brush: java; title: ; notranslate">
//
// TextToSpeech.OnInitListener listener
//

   	@Override
   	public void onInit(int i) {
       	tv.setText(&quot;onInit&quot;);
       	tts.setPitch(1.2f);
       	tts.setSpeechRate(1.1f);
       	tv.setText(&quot;Locale:&quot; + tts.getLanguage().toString());
       	tts.speak(&quot;Hello, how are you today?&quot;, TextToSpeech.QUEUE_FLUSH, null);
   	}
</pre>
<p>Since that didn&#8217;t take too long, I was optimistic to get SpreechRecognition working as well. However, huge portions of the Android 1.6 SDK are simply missing. E.g. <em>RecognizerIntent</em> is not implemented and <em>MediaRecorder</em> will always fail when <em>prepare()</em> is called. Meaning, I ended up using <em>AudioRecord</em> for the voice recording. Something like so:</p>
<pre class="brush: java; title: ; notranslate">
private void startRecording() {

        mRecorder = new AudioRecord(
                MediaRecorder.AudioSource.MIC,
                RECORDER_SAMPLERATE,
                RECORDER_CHANNELS,
                RECORDER_AUDIO_ENCODING,
                mBufferSize);

        mRecorder.startRecording();
        isRecording = true;

        mRecordingThread = new Thread(&quot;Recording Thread&quot;) {
            @Override
            public void run() {
                writeAudioDataToFile();
            }
        };
        mRecordingThread.start();
    }

    /**
     * &lt;code&gt;writeAudioDataToFile&lt;/code&gt; writes the raw recording buffer into a temp. file.
     */
    private void writeAudioDataToFile() {
        final byte data[] = new byte[mBufferSize];
        try {
            final OutputStream os = new BufferedOutputStream(new FileOutputStream(getTempFilename()));
            while (isRecording) {
                final int k = mRecorder.read(data, 0, mBufferSize);
                if (k != AudioRecord.ERROR_INVALID_OPERATION) {
                    try {
                        os.write(data, 0, k);
                    } catch (IOException e) {
                        Log.e(LOG_LAG, e.getMessage());
                    }
                }
            }
            try {
                os.flush();
                os.close();
            } catch (IOException e) {
                Log.e(LOG_LAG, e.getMessage());
            }

        } catch (FileNotFoundException e) {
            Log.e(LOG_LAG, e.getMessage());
        }
    }

    private void stopRecording() {
        if (mRecorder != null) {
            isRecording = false;
            mRecorder.stop();
            mRecorder.release();
            mRecorder = null;
            mRecordingThread = null;
        }

        final String wavFile = getFilename();
        copyWaveFile(getTempFilename(), wavFile);
        new File(getTempFilename()).delete();
        // AsyncTask calling SpeechRecognition web service ..
        new NAPI(mHandler).execute(getHttp_Api_Url(), wavFile );
    }
</pre>
<p>Unfortunately, the sound quality was once again very poor and Nuance&#8217;s Web service for Speech Recognition could not render any results. After significantly improving the wav-file using <a href="http://www.ambrosiasw.com/utilities/wiretap/" target="_blank">Wiretap Studio</a> on my Mac, Nuance would finally return a result, which wasn&#8217;t even too far off. However, even if the improvement could be done on the i&#8217;m Watch itself, the total processing time was just way too long that even when considering all optimizations, we would never get into usable range.</p>
<p><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/20130116-IMG_7630.jpg"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/20130116-IMG_7630.jpg" alt="20130116-IMG_7630" width="500" height="333" class="aligncenter size-full wp-image-3115 colorbox-3080" /></a></p>
<h2>List of things that won&#8217;t work</h2>
<ul>
<li>Sensors APIs require special library, which have not been released yet.</li>
<li>The i&#8217;m Watch has a custom audio system. Android Audio recording/routing APIs are not working (Manufacturer has acknowledged the problem, but no ETA)</li>
<li>Speech recognition APIs don&#8217;t work due to the previous point.</li>
<li>NetworkManager.isConnected() always returns true (Manufacturer has acknowledged the problem, but no ETA)</li>
<li>Option menus are not working (UI/UX decision: screen is too small for this) (Manufacturer promised to publish a fix on their GitHub account soon.)</li>
<li>Vibration APIs are not working (no vibration motor in the i&#8217;m Watch)</li>
<li>Input Method Editors are not supported (UI/UX decision: screen is too small for this) (Manufacturer promised to publish a fix for the NumPad at least on their GitHub account soon.)</li>
<li>Links that open the web browser are not supported. The web browser is present, but will be removed in a future release (UI/UX decision: screen is too small for this)</li>
</ul>
<h2>Final Verdict</h2>
<p>Requested RMA. Returned i&#8217;m Watch ..<br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/20130115-IMG_7627.jpg"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/20130115-IMG_7627.jpg" alt="20130115-IMG_7627" width="500" height="333" class="aligncenter size-full wp-image-3116 colorbox-3080" /></a></p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/hardware/imwatch/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Daunting Task &#8211; Tiffany goes to Cupertino</title>
		<link>http://wolfpaulus.com/jounal/java-journal/tiffanyscreensmacappstore?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=tiffanyscreensmacappstore</link>
		<comments>http://wolfpaulus.com/jounal/java-journal/tiffanyscreensmacappstore#comments</comments>
		<pubDate>Mon, 21 Jan 2013 04:12:19 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[TiffanyScreens]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3148</guid>
		<description><![CDATA[TiffanyScreens in the Mac App Store I never really like [...]]]></description>
				<content:encoded><![CDATA[<h1>TiffanyScreens in the Mac App Store</h1>
<p>I never really liked going to &#8220;PowerPoint Meetings&#8221;, sharing the screen content with others during a meeting, usually requires to connect a projector to the presenter&#8217;s laptop. In a lengthy process, the laptop&#8217;s screen resolution and refresh-rate needed to be manually adjusted to synchronize with the projector. What follows is a lecture style presentation, featuring slides being projected, hugely magnified onto one of the meeting room&#8217;s walls; often, lights need to be dimmed, and listeners either doze off or start checking email.</p>
<p>A couple years back, I wrote <a href="http://www.tiffanyscreens.com/" target="_blank">TiffanyScreens</a>, which allows you to share presentations (or any screen content), without requiring a projector.<br />
Imagine a scenario, where every participant brought a laptop computer to a meeting and watched the presentation on that laptop&#8217;s display – participants sit on a table facing each other, instead of the wall. No adjustments are necessary; images are scaled automatically on arrival, to best match the receiver&#8217;s display-capability. To support lively meetings, everyone participating, can with a single button click, turn his computer into the presenting device.</p>
<p><br/><br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/tsp5.jpg"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/tsp5.jpg" alt="tsp5" width="480" height="300" class="aligncenter size-full wp-image-3153 colorbox-3148" /></a><br />
<br/></p>
<p>During the development, I had small engineering groups in mind, but <a href="http://www.tiffanyscreens.com/opinion.html" target="_blank">it became more and more obvious</a> that instructors, educators, and educational institutions would appreciate TiffanyScreens the most. Listening to users&#8217; feedback, TiffanyScreens has been iteratively improved, refined, and optimized.<br />
<span id="more-3148"></span><br />
For instance, to accommodate instructors and teachers, only one peer needs to have a licensed copy of the application installed and since you never know what kind of laptop users bring, TiffanyScreens is of course a multi-platform application, running on Windows, Linux, and the Mac. In fact, most of TiffanyScreens is implemented in Java.</p>
<p>But almost like the boiling frog story, Apple slowly turned up the heat on Java and Java developers. OS X 10.7 Lion introduced the Mac Application Store, in which Java applications were not welcome. OS X 10.8 Mountain Lion makes it extra hard for users to install applications that are not distributed through the Mac App Store.<br />
<br/><br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-6.18.38-PM.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-6.18.38-PM.png" alt="Mac Security Settings" width="515" height="314" class="aligncenter size-full wp-image-3149 colorbox-3148" /></a><br />
<br/><br />
With Apple withdrawing most of its Java support, it&#8217;s now Oracle, providing up to date Java runtime and Java SDK of Mac OS X. However, recent Zero-Day Java security vulnerabilities make it less like that users&#8217; machines have a Java runtime installed.</p>
<p>Considering all these obstacles, I could have let TiffanyScreens run its course, letting it die a slow death, but during a couple of days off work, over the Christmas break, I came up with a decisive rescue plan &#8230; putting TiffanyScreens into the Mac Application Store.</p>
<h1>Putting TiffanyScreens into the Mac Application Store</h1>
<h2> 1. Administrative Tasks </h2>
<p>Trying to put a Java desktop app into Apple&#8217;s Mac App Store is a daunting task, no mean feat, some may even call it a total waste of time. However, TiffanyScreens, the innovative presentation and screen sharing tool, used and loved by many educational institutions worldwide, must not die &#8230; </p>
<h3>1.1. Joining the Mac Developer Program</h3>
<p>It all started with a $99 investment, purchasing a Mac Developer ID and getting into the Mac Developer Program. </p>
<p><a href="https://developer.apple.com/programs/start/standard/" target="_blank">https://developer.apple.com/programs/start/standard/</a></p>
<h3>1.2. Request a OS X Signing Certificate</h3>
<p>The next step was all about preparing my machine to sign and submit a binary to the Mac App Store approval process.<br />
<a href="https://developer.apple.com/certificates/index.action#maccertrequest" target="_blank">https://developer.apple.com/certificates/index.action#maccertrequest</a><br />
<br/><br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-3.31.22-PM.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-3.31.22-PM.png" alt="Screen Shot 2013-01-20 at 3.31.22 PM" width="576" height="533" class="aligncenter size-full wp-image-3157 colorbox-3148" /></a><br />
<br/></p>
<p>Since TiffanyScreens does neither need the iCloud nor Apple Push Notifications, I did forgo the Mac App Development Certificate but requested and installed:</p>
<ul>
<li>Mac App Certificate</li>
<li>Mac Installer Certificate</li>
<li>Developer ID Application Certificate</li>
<li>Developer ID Installer Certificate</li>
</ul>
<p><br/><br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-3.37.49-PM.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-3.37.49-PM.png" alt="Screen Shot 2013-01-20 at 3.37.49 PM" width="570" height="157" class="aligncenter size-full wp-image-3158 colorbox-3148" /></a><br />
<br/></p>
<h3>1.3. Creating an Application Bundle ID</h3>
<p>I created and Application Bundle ID here: <a href="https://developer.apple.com/certificates/index.action#bundle" target="_blank">https://developer.apple.com/certificates/index.action#bundle</a><br />
An App ID is an identifier used by iOS and Mac OS X to recognize your app. This was pretty simple and straight forward. I just needed to enter my applications name and a bundle identifier.</p>
<ul>
<li>TiffanyScreens Pro</li>
<li>com.carlsbadcubes.tiffany.TiffanyScreens.pro</li>
</ul>
<h3>1.4. Creating an Application on the iTunes Store</h3>
<p>I opened <a href="https://itunesconnect.apple.com/" target="_blank">https://itunesconnect.apple.com/</a> and in &#8220;Manage Your Applications&#8221;, selected &#8220;Add New App&#8221; followed by &#8220;Mac OS X App&#8221;<br />
Here, the application got defined in more detail, like it will appear in the iTunes Store. Completing this step also included deciding on a <strong>primary and secondary application category</strong>, as well as uploading a couple of screen shots. I think it&#8217;s important to note that once an application has been approved, those screen shots cannot easily be changed.</p>
<p>This pretty much concluded the administrative tasks and now the much more interesting engineering tasks began.<br />
<br/><br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-3.49.08-PM.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-3.49.08-PM.png" alt="Screen Shot 2013-01-20 at 3.49.08 PM" width="500" height="223" class="aligncenter size-full wp-image-3159 colorbox-3148" /></a><br />
<br/></p>
<h2>2. Engineering Tasks</h2>
<h3>2.1. Java Runtime</h3>
<p>Since I wanted to bundle TiffanyScreens with the latest Java Runtime, I downloaded and deployed JDK 7 on my development and build machine.<br />
<a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html" target="_blank">http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html</a><br />
Installing jdk-7u11-macosx-x64.dmg, the most recent Java release for 64-bit Intel Macs, meant getting something like this when typing <code>java -version</code> into a terminal.<br />
<code><br />
java version "1.7.0_11"<br />
Java(TM) SE Runtime Environment (build 1.7.0_11-b21)<br />
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)<br />
</code><br />
<br/><br />
In ~/.bash_profile I have JAVA_HOME declared like this:<br />
<code>export set JAVA_HOME=`/usr/libexec/java_home`</code><br />
which in fact points here:<br />
<code>/System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java_home</code><br />
which is an executable and returns:<br />
<code>/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home</code><br />
and this location contains the Java Runtime (jre) folder, which will eventually be bundled with TiffanyScreens.</p>
<h3>2.2. A Single JAR</h3>
<p>TiffanyScreens was already packaged to be distributed as a Mac friendly DMG. What I mean with that is that TiffanyScreens was always packaged into a single Jar. 3rd party libraries like Swixml for instance get unpacked<br />
<code>&lt;unzip src="${swixml.jar}" dest="${build.dest}"/&gt;</code><br />
during the build process and re-packaged together with TiffanyScreens&#8217; classes and resources into a single jar file.</p>
<p>The <i>package</i> target for instance in my TiffanyScreeens&#8217; Ant build.xml looks something like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;target name=&quot;package&quot; depends=&quot;compile,unjarparties&quot; description=&quot;Creates the class package&quot;&gt;

       &lt;!-- Filters defined specifically for updating the manifest --&gt;
       &lt;filter token=&quot;version.spec&quot; value=&quot;${version.spec}&quot;/&gt;
       &lt;filter token=&quot;version.impl&quot; value=&quot;${version.impl}&quot;/&gt;
       &lt;copy
           todir=&quot;${build.dest}/META-INF&quot;
           filtering=&quot;yes&quot;&gt;
           &lt;fileset dir=&quot;${package.dir}/META-INF&quot;/&gt;
       &lt;/copy&gt;
       &lt;copy
           todir=&quot;${build.dest}&quot; filtering=&quot;no&quot;&gt;
           &lt;fileset dir=&quot;${build.src}&quot; includes=&quot;**/*.xml&quot;/&gt;
       &lt;/copy&gt;
       &lt;copy
           todir=&quot;${build.dest}&quot; filtering=&quot;no&quot;&gt;
           &lt;fileset dir=&quot;${build.src}&quot; includes=&quot;img/*&quot;/&gt;
       &lt;/copy&gt;
       &lt;jar jarfile=&quot;${build.dir}/${name}.jar&quot;
            basedir=&quot;${build.dest}&quot;
            excludes=&quot;META-INF/MANIFEST.MF&quot;
            manifest=&quot;${build.dest}/META-INF/MANIFEST.MF&quot;
           /&gt;
&lt;/target&gt;		
</pre>
<h3>2.3. AppBundler Ant Target</h3>
<p>Oracle also has a <a href="http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html" target="_blank">document</a> on its site that explains some of the things I wanted to do, Bundling the JRE with Tiffany. Unfortunately, the example they show is somewhat oversimplified to be really helpful. However, it has links to the Java Application Bundler project, which contains a Jar, providing an Ant target, to bundle the JRE with a Java app.</p>
<p>So I download the <a href="http://java.net/projects/appbundler/downloads" target="_blank">appbundler-1.0.jar</a> and read the related <a href="http://java.net/downloads/appbundler/appbundler.html" target="_blank">documentation</a>. </p>
<p>Going back and force between the documentation and my Ant build file, I ended up with an target configured like this:</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;taskdef name=&quot;bundleapp&quot; classpath=&quot;${appbundler.jar}&quot; classname=&quot;com.oracle.appbundler.AppBundlerTask&quot;/&gt;
    &lt;target name=&quot;appbundle&quot; depends=&quot;package&quot; description=&quot;Create Mac OSX Application Bundle&quot;&gt;
        &lt;bundleapp
            outputdirectory=&quot;/Users/wolf/Work/Tiffany/build/dist&quot;
            name=&quot;${Name}&quot;
            displayname=&quot;${Name}&quot;
            identifier=&quot;${mainclass}.${bid}&quot;
            icon=&quot;res/${bid}.icns&quot;
            shortversion=&quot;${version}&quot;
            signature=&quot;CABA&quot;
            copyright=&quot;2006-2013 Techcasita Productions.&quot;
            applicationCategory=&quot;public.app-category.productivity&quot;
            mainclassname=&quot;${mainclass}&quot;
            &gt;
            
            &lt;!-- JDK / JRE --&gt;
            &lt;runtime dir=&quot;/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home&quot;/&gt;

            &lt;!-- The bundleapp task doesn't support classpathref so all
                the run classpath entries must be stated here too.
            --&gt;
            &lt;classpath file=&quot;./build/${name}.jar&quot;/&gt;
            &lt;classpath file=&quot;./libs/libscreen.jnilib&quot;/&gt;

            &lt;option value=&quot;-Xdock:name=${Name}&quot;/&gt;
            &lt;option value=&quot;-Xdock:icon=Contents/Resources/${bid}.icns&quot;/&gt;
            &lt;option value=&quot;-Dapple.laf.useScreenMenuBar=true&quot;/&gt;
            &lt;option value=&quot;-Dcom.apple.macos.use-file-dialog-packages=true&quot;/&gt;
            &lt;option value=&quot;-Dcom.apple.macos.useScreenMenuBar=true&quot;/&gt;
            &lt;option value=&quot;-Dcom.apple.mrj.application.apple.menu.about.name=${Name}&quot;/&gt;
            &lt;option value=&quot;-Dcom.apple.smallTabs=true&quot;/&gt;
            &lt;option value=&quot;-Dcom.apple.textantialiasing=true&quot;/&gt;
            &lt;option value=&quot;-Dcom.apple.antialiasing=true&quot;/&gt;
            &lt;option value=&quot;-Dcom.apple.showGrowBox=false&quot;/&gt;
            &lt;option value=&quot;-Dapple.awt.fullscreencapturealldisplays=false&quot;/&gt;
            &lt;option value=&quot;-Dapple.awt.fullscreenusefade=true&quot;/&gt;
            &lt;option value=&quot;-Djava.library.path=$APP_ROOT/Contents/Java&quot;/&gt;
            &lt;option value=&quot;-Xms32M&quot;/&gt;
            &lt;option value=&quot;-Xmx256M&quot;/&gt;
        &lt;/bundleapp&gt;
        &lt;delete
            file=&quot;/Users/wolf/Work/Tiffany/build/dist/${Name}.app/Contents/PlugIns/jdk1.7.0_11.jdk/Contents/Info.plist&quot;/&gt;
    &lt;/target&gt;
</pre>
<p>Most of <bundleapp/> tag&#8217;s attributes should be obvious, I&#8217;m using this build file for both TiffanyScreens version (Pro and Standard), which is what the bid property is used for. </p>
<pre class="brush: xml; title: ; notranslate">
      &lt;property name=&quot;Name&quot; value=&quot;TiffanyScreens&quot;/&gt;
      &lt;property name=&quot;bid&quot; value=&quot;&quot;/&gt;
      &lt;property name=&quot;name&quot; value=&quot;tiffanyscreens&quot;/&gt;
      &lt;property name=&quot;Short&quot; value=&quot;Tiffany&quot;/&gt;
      &lt;property name=&quot;mainclass&quot; value=&quot;com.carlsbadcubes.tiffany.TiffanyScreens&quot;/&gt;
      &lt;property name=&quot;version&quot; value=&quot;5.0&quot;/&gt;
</pre>
<p>The <i>applicationCategory</i> attribute value should of course match with what was selected as a primary category, when the application entry was created on the iTunes Store. How this value needs to be decoded can be found <a href="https://developer.apple.com/library/mac/#releasenotes/General/SubmittingToMacAppStore/" target="_blank">here</a>. </p>
<p>Since I had selected <em>&#8216;Productivity&#8217;</em> for the primary category, I used this UTI: <i>public.app-category.productivity</i> </p>
<p>The <em>runtime</em> tag points to the Java_Home location, from where it will pick up the jre.<br />
The <em>classpath</em> tags declare additional locations that need to be put into the bundle as well.<br />
Finally, the <em>option</em> tags will create in the Mac applications Contents/info.plist file.<br />
Once the bundling has happen, as a last thing, I deleted the Java runtime&#8217;s <em>info.plist</em>. The submission process seems to be very sensitive about that and only after there was only a single info.plist file left in the bundle was I able to submit the application.</p>
<h3>2.5. Application Icon</h3>
<p>The Ant target shown above contains two references to the application&#8217;s icon, which has to be carefully constructed.<br />
Since the introduction of the <em>&#8220;retina display&#8221;</em>, Mac application that want to pass the rigorous approval process, need to have an icon file containing icons all the way to 1024&#215;1024 pixels.<br />
After I had created the icon artwork in five resolutions, I carefully named them like so:</p>
<ul>
<li>icon_16x16.png</li>
<li>icon_128x128.png</li>
<li>icon_256x256.png</li>
<li>icon_512x512.png</li>
<li>icon512x512@2x.png</li>
</ul>
<p>A tool provided with the latest XCode release allow to combine the icons into a single <em>icns</em> file:<br />
<code>iconutil -c icns /Users/wolf/Work/Tiffany/res/pro.iconset</code>  </p>
<h3>2.6. Signing the application bundle</h3>
<p>Running the <i>appbundle</i> build target <code>./build/dist/TiffanyScreens Pro.app</code>, already created a perfectly executable Mac application.<br />
<code><br />
ant appbundle<br />
..<br />
appbundle:<br />
[bundleapp] Creating app bundle: TiffanyScreens Std<br />
   [delete] Deleting: /Users/wolf/Work/Tiffany/build/dist/TiffanyScreens Std.app/Contents/PlugIns/jdk1.7.0_11.jdk/Contents/Info.plist</p>
<p>BUILD SUCCESSFUL<br />
Total time: 4 seconds<br />
</code></p>
<p>Before uploading the application for approval, the application and all packaged libraries needed to be signed. Since TiffanyScreens has all its classes and resources in a single jar, this meant that I only needed to sign the TiffanyScreens.jar file and the one jnilib that I included, .. plus all the libraries in the Java runtime of course.</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
echo &quot;Using ant build-target 'appbundle' to create the app file&quot;
ant appbundle

echo &quot;Sign everything inside the app file&quot;
codesign --entitlements ./tiffany.plist -s &quot;3rd Party Mac Developer Application: Wolf Paulus&quot; -v &quot;./build/dist/TiffanyScreens Pro.app&quot;
find &quot;./build/dist/TiffanyScreens Pro.app/Contents&quot; -type f \( -name &quot;*.jar&quot; -or -name &quot;*.dylib&quot; \) -exec codesign --verbose -f -s &quot;3rd Party Mac Developer Application: Wolf Paulus&quot; --entitlements tiffany.plist {} \;
find &quot;./build/dist/TiffanyScreens Pro.app/Contents&quot; -type f \( -name &quot;*.exe&quot; -or -name &quot;*.jnilib&quot; \) -exec codesign --verbose -f -s &quot;3rd Party Mac Developer Application: Wolf Paulus&quot; --entitlements tiffany.plist {} \;

echo &quot;Verify all libraries have been signed...&quot;
find &quot;./build/dist/TiffanyScreens Pro.app/Contents&quot; -type f \( -name &quot;*.jar&quot; -or -name &quot;*.dylib&quot; \) -exec codesign --verbose --verify {} \;
find &quot;./build/dist/TiffanyScreens Pro.app/Contents&quot; -type f \( -name &quot;*.exe&quot; -or -name &quot;*.jnilib&quot; \) -exec codesign --verbose --verify {} \;

echo &quot;Create signed package&quot;
productbuild --component &quot;./build/dist/TiffanyScreens Pro.app&quot; /Applications --sign &quot;3rd Party Mac Developer Installer: Wolf Paulus&quot; --product tiffany.plist TiffanyScreensPro.pkg

echo &quot;Test pkg before uploading it to Apple&quot;
sudo installer -store -pkg ./TiffanyScreensPro.pkg -target /

echo &quot;more tests&quot;
spctl --assess --verbose=4 --type execute TiffanyScreensPro.pkg
spctl --assess --verbose=4 --type install TiffanyScreensPro.pkg
codesign -v ./build/dist/TiffanyScreens\ Pro.app/
</pre>
<p>This bash script runs the Ant script, before doing the code signing (using both certificates: &#8220;3rd Party Mac Developer Application: Wolf Paulus&#8221; and &#8220;3rd Party Mac Developer Installer: Wolf Paulus&#8221;) and running two sanity checks, recommended before trying to submit the app.</p>
<p>The outcome of this is a <strong>*.pkg</strong> file, which is made for submission to the app-store approval process but not for installing on your own Mac.</p>
<h3>2.7. Submitting for Approval</h3>
<p>With the latest version of XCode installed, the Application Loader can be found by, control-clicking XCode and selecting &#8220;Show Package Contents&#8221;. The Application Loader in the Contents/Applications folder. Selecting &#8220;Deliver Your App&#8221; automatically picked up all the information I had provided, when creating the application entry in the iTunes Store. Application Loader runs a lot of tests, before finally accepting and uploading the pkg file.<br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-5.53.40-PM.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-5.53.40-PM.png" alt="Apploader" width="548" height="367" class="aligncenter size-full wp-image-3166 colorbox-3148" /></a></p>
<h3>Waiting</h3>
<p>Now the waiting began. While iTunes Connect (<a href="https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa" target="_blank">https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa</a>) showed the current status of the approval process, the information provided here <a href="http://reviewtimes.shinydevelopment.com/" target="_blank">http://reviewtimes.shinydevelopment.com/</a> gave a pretty good indication of the average App Store review time.</p>
<p>A day after submitting Tiffany Screens Pro, I submitted TiffanyScreens Std, which obviously only took a fraction of the time. The only work that I really had to do, was to create that insanely great 1024&#215;1024 icon.   </p>
<h2>Approved</h2>
<p>Each application got approved after 8 days and is now available in the Mac application store. Take a look here:<br />
<a href="http://itunes.com/mac/wolfpaulus" target="_blank">http://itunes.com/mac/wolfpaulus</a></p>
<p><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-6.05.19-PM.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-6.05.19-PM.png" alt="mac store wolfpaulus" width="557" height="295" class="aligncenter size-full wp-image-3164 colorbox-3148" /></a></p>
<p><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-6.05.38-PM.png"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/Screen-Shot-2013-01-20-at-6.05.38-PM.png" alt="Tiffanyinstore" width="557" height="540" class="aligncenter size-full wp-image-3165 colorbox-3148" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/java-journal/tiffanyscreensmacappstore/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sh!it We Dislike &#8211; Sigma 30mm f/1.4</title>
		<link>http://wolfpaulus.com/jounal/hardware/sigma30mm?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sigma30mm</link>
		<comments>http://wolfpaulus.com/jounal/hardware/sigma30mm#comments</comments>
		<pubDate>Sat, 19 Jan 2013 19:00:58 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[canon]]></category>
		<category><![CDATA[lens]]></category>
		<category><![CDATA[photography]]></category>
		<category><![CDATA[sigma]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3131</guid>
		<description><![CDATA[Sigma 30mm f/1.4 EX DC HSM Lens I really wanted to like [...]]]></description>
				<content:encoded><![CDATA[<h2>Sigma 30mm f/1.4 EX DC HSM Lens</h2>
<p>I really wanted to like this lens. It has a nice build quality and has a really good feel and helf. I also liked the larger 62 mm Filter-Thread, compared to comparable lenses. However, mounting the lens already felt somewhat odd. It did not want to go on a Canon 7D body, as easily and smooth as my Canon and Tamron lenses.</p>
<p>Taking the 1st shots and looking at them at the camera&#8217;s LCD already was disappointing &#8211; the pictures has an odd pale almost green look. After importing the photos into Lightroom we saw the stunningly poor quality. Not even close to an inexpensive 1.8 nifty fifty and worse than any of my zoom lenses in that rage; unbelievably soft and out of focus.<br />
<span id="more-3131"></span><br />
<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/sigma30mm.jpeg"><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/sigma30mm.jpeg" alt="sigma30mm" width="500" height="500" class="aligncenter size-full wp-image-3135 colorbox-3131" /></a></p>
<p>Next we did the common focus test (described in much detail here: <a href="http://focustestchart.com/focus21.pdf" target="_blank">http://focustestchart.com/focus21.pdf</a>) and the results showed that the focus was off by 15mm with a 500mm focus distance. But even the areas that looked like were in focus, were totally soft, all the way to f/5.6. Don&#8217;t know how Sigma can stay in business when delivering products like this 30mm.</p>
<h3>Focus Test</h3>
<p>Here is a photos we took during the focus test. To be fair to Sigma, this was the VERY best we could find.</p>
<ul>
<li>Focal Length: 30mm</li>
<li>Apature: f/1.4</li>
<li>Exposure Time: 1/640 sec</li>
<li>ISO: 400</li>
</ul>
<p><img src="http://wolfpaulus.com/wp-content/uploads/2013/01/20130107-IMG_7583.jpg" alt="20130107-IMG_7583" width="503" height="755" class="aligncenter size-full wp-image-3133 colorbox-3131" /><br />
[<a href="http://wolfpaulus.com/wp-content/uploads/2013/01/20130107-IMG_7583-2.jpg" target="_blank">Download original image</a> (not cropped) 5184x3456, 13.7 MB]</p>
<h2>Specification</h2>
<ul>
<li>Filter Thread: 62mm</li>
<li>Dimensions (DiameterxLength): 3.2 x 2.3&#8243; (8.13 x 5.84 cm)</li>
<li>Weight: 15.1 oz (430 g)</li>
<li>Camera Mount Type: Canon EF-S</li>
<li>Format Compatibility: Canon (APS-C)</li>
<li>Focal Length: 30 mm</li>
<li>Minimum Focus Distance:  15.7&#8243; (40 cm)</li>
<li>Aperture: f/1.4 to f/16</li>
<li>Magnification 0.09x</li>
<li>Angle of View 46 Degrees</li>
<li>Groups/Elements 7/7</li>
<li>Diaphragm Blades 8</li>
</ul>
<h2>Final Verdict</h2>
<p>This was my 1st Sigma experience and I&#8217;m really glad that Amazon has such a great return policy. This lens stayed for not even 12 hours at my house. Sorry Sigma, but it will probably take a really long time, until I consider one of your products again.<br /></p>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/hardware/sigma30mm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sh!t We Like &#8211; TP-Link Nano Router TL-WR702N</title>
		<link>http://wolfpaulus.com/jounal/hardware/wr702n?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=wr702n</link>
		<comments>http://wolfpaulus.com/jounal/hardware/wr702n#comments</comments>
		<pubDate>Sat, 12 Jan 2013 19:36:23 +0000</pubDate>
		<dc:creator>Wolf Paulus</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[OpenWRT]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[wifi]]></category>

		<guid isPermaLink="false">http://wolfpaulus.com/?p=3005</guid>
		<description><![CDATA[Pack your own parachute and bring your own wireless rou [...]]]></description>
				<content:encoded><![CDATA[<h2>Pack your own parachute and bring your own wireless router</h2>
<p>If you ever gave a talk or presentation that involved demonstrating software running on a wireless device, you probably remember some restlessness, approaching the venue.</p>
<p><em>What would the Wifi conditions be? Would you be able to connect your device(s) to the Wifi network? Would the bandwidth be sufficient, to support a smooth demo? etc. etc.</em></p>
<p>There is no such thing as <em>perfect</em> and you can never be over-prepared. The same it probably true when it come to display-adapters, especially if a MacBook is your presentation tool of choice. Pack all the Thunderbolt/MiniDisplayPort to DVI/HDMI/VGA adapters you can find. And just in case, I usually export my slides to PDF and put that file on a FAT-formatted USB-Thumb-drive. Moreover, I used to schlep a standard home-office router, together with its bulky power-supply of course. But not anymore &#8230;</p>
<p>I recently came across a nifty and tiny Wifi Router that is not only fast enough, but can be powered with a standard 5V phone charger, using a standard Micro-USB Cable &#8211; or even better, leeching power off a standard USB-Port (e.g., one of the MacBook&#8217;s USB-Ports).<br />
<span id="more-3005"></span></p>
<p style="text-align: center;"><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/nano2.jpg"><img class="aligncenter  wp-image-3036 colorbox-3005" alt="nano2" src="http://wolfpaulus.com/wp-content/uploads/2013/01/nano2.jpg" width="600" height="400" /></a></p>
<h3>Speedtest (ISP-Cox)</h3>
<p>I certainly had my doubts when it came to data transfer rates, but this little guy is seriously fast. Here is a real world test, comparing the TP-Link TL-WR702N to a Cisco <a href="http://homestore.cisco.com/en-us/Routers/Linksys-E4200-MaximumPerformance-Wirelessn-router_stcVVproductId122703236VVcatId551966VVviewprod.htm" target="_blank">Linksys E4200</a> Wireless-N Dual-Band Wi-Fi Router, on my home network:</p>
<div id="attachment_3011" class="wp-caption alignleft" style="width: 310px"><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/TLWR702.png"><img class="size-full wp-image-3011 colorbox-3005" alt="Speed Test w/ TL-WR702N" src="http://wolfpaulus.com/wp-content/uploads/2013/01/TLWR702.png" width="300" height="135" /></a><p class="wp-caption-text">Speed Test w/ TL-WR702N</p></div>
<div id="attachment_3012" class="wp-caption alignright" style="width: 310px"><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/Linksys-E4200.png"><img class="size-full wp-image-3012 colorbox-3005" alt="Speed Test w/ LinkSys E4200" src="http://wolfpaulus.com/wp-content/uploads/2013/01/Linksys-E4200.png" width="300" height="135" /></a><p class="wp-caption-text">Speed Test w/ LinkSys E4200</p></div>
<p>The TP-Link TL-WR702N uses the Atheros AR9331 chipset and is equipped with 2MB Flash memory and 16MB RAM, which unfortunately is not quite enough to replace the stock OS with an open-source Linux distribution for embedded devices, like <a href="https://openwrt.org/" target="_blank">OpenWrt</a> or <a href="http://www.dd-wrt.com/" target="_blank">DD-WRT</a>.</p>
<p>However, the stock software already provides some capabilities, often missing in many full-size home-network routers.<br />
For instance, the TL-WR702N can be operated in five different modes:</p>
<h3>AP Mode</h3>
<p>This is the WR702N&#8217;s default mode. The nano router supplements a wired LAN (to which it connects, using an Ethernet cable) and enables its wireless clients, to connect to that LAN wirelessly.</p>
<h3>Wireless Router Mode</h3>
<p>The one and only wired port works as WAN Port, e.g. gets connected to a DSL/Cable Modem. The routers works as an DHCP server and wireless clients can obtain IP addresses and DNS automatically.</p>
<h3>Repeater Mode</h3>
<p>The TL-WR702N is used to extend the range of an existing AP or wireless router.<br />
In this mode, the one and only wired port gets connected to a client laptop or PC via Ethernet cable. However, clients can also connect to the nano router wirelessly. The SSID of TL-WR702N should exactly match the SSID of the device you want to repeat. In Repeater Mode, the DHCP server defaults to off.</p>
<h3>Bridge Mode</h3>
<p>Pretty much the same as the Repeater Mode, but the the nano router&#8217;s SSID does not match any other Wifi-Router&#8217;s SSID on your network.</p>
<h3>Client Mode</h3>
<p>The TL-WR702N is basically used as a wireless network card. I.e. a computer connects via Ethernet cable to the nano router and the TL-WR702N is used to access a wireless network.</p>
<p style="text-align: center;"><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/nano1.jpg"><img class="aligncenter  wp-image-3037 colorbox-3005" alt="nano1" src="http://wolfpaulus.com/wp-content/uploads/2013/01/nano1.jpg" width="600" height="379" /></a></p>
<p><br/><br />
At the relatively low price (US$19 to US$29 <a href="http://www.bhphotovideo.com/c/search?Ntt=TL-WR702N&amp;N=0&amp;InitialSearch=yes&amp;sts=ma&amp;Top+Nav-Search=" target="_blank">B&amp;H</a>, <a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16833704134&amp;Tpk=TL-WR702N" target="_blank">Newegg</a>, <a href="http://www.amazon.com/s/ref=nb_sb_noss_1?url=search-alias%3Daps&amp;field-keywords=TL-WR702N" target="_blank">Amazon</a>, ..) the size, data transfer rate, and feature-set, this is an impressive device. After running it for one week without the need for a reset, it&#8217;s now part of my travel backpack ..</p>
<h3>TL-WR702N internal Web Server</h3>
<p style="text-align: center;"><a href="http://wolfpaulus.com/wp-content/uploads/2013/01/web.png"><img class="aligncenter  wp-image-3066 colorbox-3005" alt="web" src="http://wolfpaulus.com/wp-content/uploads/2013/01/web.png" width="404" height="263" /></a></p>
<h2>Specifications:</h2>
<ul>
<li><strong>Wireless Standards</strong><em> 802.11b, 802.11g, 802.11n</em></li>
<li><strong>Interfaces </strong><em>10/100Mbps WAN/LAN</em></li>
<li><strong>Dimensions (WxDxH) </strong><span style="color: #ff0000;"><em>3.2 x 2.8 x 1.1 in (81 x 71 x 28mm)</em></span></li>
<li><strong>Frequency </strong><em>2.4-2.4835 GHz</em></li>
<li><strong>Signal Rate 11n  </strong><em>Up to 150Mbps</em></li>
<li><strong>Signal Rate 11g </strong><em> Up to 54Mbps</em></li>
<li><strong>Signal Rate 11b  </strong><em>Up to 11Mbps</em></li>
<li><strong>Security </strong><em>64/128/152-bit WEP / WPA / WPA2,WPA-PSK / WPA2-PSK</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wolfpaulus.com/jounal/hardware/wr702n/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
