<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>TECH-fidel</title>
      <link>http://erichizdepski.com/blog/</link>
      <description>Welcome, tech faithful. This site covers my interests in technology and how my work and hobbies revolve around it. The Internet, computers, and electronic music will be featured. </description>
      <language>en</language>
      <copyright>Copyright 2009</copyright>
      <lastBuildDate>Mon, 16 Mar 2009 14:23:01 -0500</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.2ysb5-20051201</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>4G Devices and 4G Services needed for 4G Networks</title>
         <description>I reach out to developers and ISV&apos;s and device makers with a common plea these days: 

Make 4G devices! Make your 3G services into 4G services! I have a 4G network- let&apos;s use it right!

You must think I&apos;m crazy. Companies are spending billions on 4G networks, why am I concerned about services and devices for them? It&apos;s simple, you have to differentiate. It is pointless to take a 3G application and put it on a smartphone with Wimax in it. The application will perform the same as on a 3G network and that is not a selling point (and if multimedia is involved, it won&apos;t perform well).

I look at the mobile IDE&apos;s today- Flash CS3, Android SDK- and see they let you do things like simulate a network and its latency. Only problem is they stop at 3G. Where&apos;s 4G? How much extra work must a developer do to modify a toolset for 4G development? The fact that these tools don&apos;t let you just plug in 4G as your network is a barrier to 4G application development.

Another barrier is that the tools let you provide a fixed throughput only, which is completely unrealistic. Mobile network characteristics are always changing. How about a tool that provides variable bandwidth, even connection loss, so that better testing can be done?

Here are some examples of problems I have seen in the past couple of weeks:

mobile youtube- all the goodness of 3gp streaming video at 80 kbps. Awful quality.
mobile slingbox player- client prevents entering a value above 600 kbps. Also, the audio settings cannot be changed at all. On today&apos;s 800 x 480 screens running Windows Mobile 6.1, you really want a higher data rate than 600 kbps, whether over wifi or wimax.
Speaking of wifi, the CPU is used in some chipsets so that you can&apos;t play good video while downloading the video. (Newer chipsets have an embedded processor for doing the wifi MAC work.)
Chipsets that support video decode only. Hardware encoding is required for cool things like high quality video chat on a mobile device.
Video cameras that only record in 3GP format.
Media players that can&apos;t play h.264 (licensing cost, issue, I guess)

General embarrassing software quality problems:
Various video apps not taking advantage of devices with a front and rear camera
Video images shown upside down with no option to flip the video
Apps that rely on GPS only for location (most people are indoors most of the time, where GPS is useless)- ever hear of Google Gears?
A map application that lets you scroll up and down but not side to side. Who really wants to travel east or west, anyway?

I could go on, but it is too painful.


</description>
         <link>http://erichizdepski.com/blog/2009/03/4g_devices_and_4g_services_nee.html</link>
         <guid>http://erichizdepski.com/blog/2009/03/4g_devices_and_4g_services_nee.html</guid>
         <category></category>
         <pubDate>Mon, 16 Mar 2009 14:23:01 -0500</pubDate>
      </item>
            <item>
         <title>Mobile Youtube Problems</title>
         <description><![CDATA[<p>Have you tried mobile youtube on a handset? It's pretty bad, unless you know a trick or two (and having to know tricks to using software is also pretty bad). </p><p>First, http://m.youtube.com is worth staying away from if you have a smartphone on a 3G network, Wifi, or even better, Wimax.&nbsp;It works, but only delivers QCIF (176 x 144) video at ridiculous low data rates (tops out around 80 kbps). What's worse, is&nbsp;someone has been writing custom youtube apps to play this bad video at double the size. This makes blocky video look even worse. Nice move. Maybe the newly announce youtube premium music video site will get it right (but only if they read on...)</p><p>Now some youtube apps on smartphones have a 'high quality' mode. I tried that over Wifi on an HTC device and found the quality was worse than the dumbed-down mode described above. How can that be? Someone seems to have forgot that downloading video uses the CPU. In short, trying to playback video while downloading it (which is exactly how youtube and any progressive video site work) causes such trauma to the CPU that the video is jerky, drops lots of frames, and the audio completely loses sync. Any basic testing should have caught this, so shame on you for failing to test properly.</p><p><strong>I&nbsp;had a hunch about the cause of the problem, so I started a video in high quality mode, hit pause, and waited for it to complete downloading to the phone.</strong> Then I played it back and it was beautiful. Perfect, smooth, full-screen video with audio in-sync. So why doesn't the app warn people about this problem and suggest downloading the video first for optimal playback? How hard is it to read the CPU usage? Why don't these players cache the video?</p><p>This is just another example&nbsp;that many developers are just plain bad at developing for mobile devices and definitely not ready&nbsp;to handle&nbsp;4G devices.&nbsp;People seem to have forgotten about device constraints. Or worse, they fully embrace them and put out video chat clients that use 70kbps up and down for video for that rich, 3 frame per second experience with bad audio&nbsp;you are dying for. Yes, these nightmare products exist and are completely unusable.</p><p>The moral of the story is that 4G is coming and you better be prepared to handle a new breed of device if you want to suceed. Location based services, context aware applications, apps that know your wireless radio conditions&nbsp;and how to adjust themselves properly (all topics I write about)- these are the new tools required in&nbsp;the holistic programmers toolkit.</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p><br />&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>]]></description>
         <link>http://erichizdepski.com/blog/2009/03/mobile_youtube_problems.html</link>
         <guid>http://erichizdepski.com/blog/2009/03/mobile_youtube_problems.html</guid>
         <category></category>
         <pubDate>Thu, 05 Mar 2009 13:56:19 -0500</pubDate>
      </item>
            <item>
         <title>Video Playback in the Android SDK</title>
         <description><![CDATA[<p>Lots of developers want to know how to do this. Here's how. Note that this assumes you are using the Android plug-in for eclipse.<br /><br />First, you need to create your own sdcard image file for use by the emulator. The tool to do this is called mksdcard and is located in \android-sdk-windows-1.0_r2\tools. Open a command window and go to this the tools directory.<br /><br />The command is very simple:<br /><strong>mksdcard 100M mycard.iso</strong><br /><br />100M signifies a 100 MB card (and capital M is required). 'mycard.iso' is the file name for the card image. To load files on your new image, you can use the adb tool. It has many uses (displaying debugging output and access to the android emulator linux command line, to name a couple).<br /><br />Here's how to copy files:<br />First, the emulator must be running. You can start from eclipse or from the command line.<br />Second, run something like this:<br /><br /><strong>adb push myvideo.mp4 /sdcard</strong><br /><br />'myvideo.mp4' is the file you want to send to the card. In this example, the file is already in the tools directory, but you could specify a path to a file located elsewhere (I presume). The card image keeps the files you 'push' to it. That is, they are persistent.<br /><br />To launch the emulator and have it use your new image, do this:<br /><strong>emulator -sdcard C:\android-sdk-windows-1.0_r2\android-sdk-windows-1.0_r2\tools\mycard.iso</strong> <br /><br />You should put this in the eclipse run configuration for android- but you must use an absolute file path to the sdcard image file.<br /><br />A note on video. So far, I have played 3gp files, mp4 files, and mp4 files with h.264 content using this technique. I use AAC audio in the video files. You can also play video files hosted on an http server, as long as they are of the types mentioned above. It is also important to note that you need to use the domain name or IP address of the web server- using 'localhost' or '127.0.0.1' with your apache server on your dev box won't work. By the way, this is not true streaming but simply progressive download. The files download over http and the player starts playing the bits as they&nbsp; come in. If you set the emulator to use a slow network, the video can start/stop while buffering frames for playback. I also found that video files at higher than 1 mbps (1.3 or so) failed to play. The only friendly error message I have seen regarding video happens during high data-rate playback:<br /><br />D/dalvikvm(&nbsp; 106): GC freed 2362 objects / 130584 bytes in 154ms<br />W/PlayerDriver(&nbsp;&nbsp; 24): Video cannot catch up. Are you playing a high quality content?<br />E/MediaPlayer(&nbsp; 194): Error (44,0)<br />D/VideoView(&nbsp; 194): Error: 44,0</p><p>You will also find that video, even when downloaded, is not cached. That is up to you. <br /></p><p>I have played mp3 music files by including them as a 'raw' resource as part of my android test application. I have not been able to play video this way, though.</p><p>Here's the basic java code to run (just change the url to your video):</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setContentView(R.layout.videoview);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; controller = new MediaController(this);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewer = (VideoView)findViewById(R.id.layout_viewer);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewer.setMediaController(controller);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewer.requestFocus();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p>Call this code from a separate method activated by a button or menu (why? It won't play when all in the same method). &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewer.setVideoURI(Uri.parse(&quot;http://172.20.18.78:8080/venus-h264.mp4&quot;));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewer.start();</p><p>Here's a layout element:</p><p>&lt;VideoView android:id=&quot;@+id/layout_viewer&quot;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; android:layout_width=&quot;fill_parent&quot; <br />&nbsp;&nbsp;&nbsp; android:layout_height=&quot;fill_parent&quot;&nbsp;&nbsp;&nbsp; /&gt;</p><p>&nbsp;</p><p>&nbsp;</p>]]></description>
         <link>http://erichizdepski.com/blog/2009/02/video_playback_in_the_android.html</link>
         <guid>http://erichizdepski.com/blog/2009/02/video_playback_in_the_android.html</guid>
         <category></category>
         <pubDate>Tue, 17 Feb 2009 17:00:58 -0500</pubDate>
      </item>
            <item>
         <title>Clip-on ties and clip-on webcams</title>
         <description><![CDATA[<p>Clip-on ties are lame, except for a 6 year old. Clip-on webcams are no better. Eye-to-eye contact is required for good video communications, but the design of about every webcam actually makes eye contact worse. This is because the camera acts to increase the distance between the eyes of the person you are talking to, and the camera eye. This is exactly the wrong thing to do. You need a design that minimizes this distance so when you look at the camera it looks more like you are looking at the actual person. It amazes me how something so obvious is missed. This picture exaggerates the problem to make it clear.</p><p>&nbsp;<img width="650" height="280" border="0" src="http://erichizdepski.com/blog/badangle.JPG" /></p><p>Now how do you fix this problem? Simple. The camera eye should hang down on to the front of your laptop screen. It's OK to cover part of the screen, since you are only looking at a relatively small video chat window. The goal is to get the camera eye as close as possible to the eyes of who you are talking to and this design achieves that. This way you can make eye contact properly and not look as if your eyes are half-closed or you are just looking down all the time. Trust me, eye contact is much better. Anyone see a camera that works this way? let me know.</p><p>&nbsp;</p><p><img border="0" src="http://erichizdepski.com/blog/mewithcam.jpg" />&nbsp;</p><p>&nbsp;</p><p><br />&nbsp;</p>]]></description>
         <link>http://erichizdepski.com/blog/2009/02/clipon_ties_and_clipon_webcams.html</link>
         <guid>http://erichizdepski.com/blog/2009/02/clipon_ties_and_clipon_webcams.html</guid>
         <category></category>
         <pubDate>Mon, 02 Feb 2009 15:45:04 -0500</pubDate>
      </item>
            <item>
         <title>The Mashup UI</title>
         <description><![CDATA[ <div class="jive-blog-post"><div class="jive-blog-post-body"> <div class="jive-blog-post-message"> <p> </p><div class="jive-rendered-content"> <p>Our product guys gave us some very beautiful drawings of user interfaces for  the connection manager and wanted to know if these were feasible. The problem  was that the designs broke Rule #1 of UI's:</p>  <h2><span>User Interfaces must be square.</span></h2>  <p>So I did my homework and came back with the right answer: &quot;Yes, of course we  can make round, cloud-shape, and psychedelic hippy flower petal UI's. Whatever  you like.&quot; Thus began an interesting exercise.</p> <p style="padding: 0px; min-height: 8pt; height: 8pt">&nbsp;</p> <p>The connection manager (cm) was a Java application with a Swing UI. I had  already had the team create a web interface to the cm so that I could get some  information out of the Wimax radio for use in location based services. Having  already taken this baby step, it was not much more of a stretch to create an  HTTP interface for everything that the UI had to handle. There were a couple of  security considerations like don't let someone else use my computer over the  internet but that was easy to solve by restricting access to localhost. Rules  also had to be setup to allow different apps to potentially use the radio at the  same time. that was accomplished by making some functions critical and requiring  'ownership' of the app as expressed by a control token. If you don't have the  token, you can't call the function. This prevents one app from killing the cm  while another may still want to be connected.</p> <p style="padding: 0px; min-height: 8pt; height: 8pt">&nbsp;</p> <p>Since we were using JDK 1.5, we didn't have access to the web server built  into 1.6. We were stuck on 1.5 since Apple has failed to update to 1.6. Shame on  you! Instead, we rolled our own multi-threaded http listener and gave it the  knowledge to understand some specific XML commands POSTed to it. Next came  client development (the actual UI), testing, and more iterations to get it  fine-tuned.</p> <p style="padding: 0px; min-height: 8pt; height: 8pt">&nbsp;</p> <p>Adobe AIR can make a UI look and behave anyway you want and was the chosen  technology for this new UI to our java open source connection manager. AIR is  cross-platform (like the cm) and extremely productive. I wrote a skeleton  communication protocol handler to test the new cm HTTP interface. It work pretty  well and the rest of the team took it from their and built the desired UI, shown  below.</p> <p style="padding: 0px; min-height: 8pt; height: 8pt">&nbsp;</p> <p><a href="http://developer.xohm.com/community/servlet/JiveServlet/showImage/38-1062-1015/cmbadge.jpg"><img border="0" alt="cmbadge.jpg" src="http://developer.xohm.com/community/servlet/JiveServlet/downloadImage/38-1062-1015/cmbadge.jpg" /></a> </p> <p style="padding: 0px; min-height: 8pt; height: 8pt">&nbsp;</p>  <p>I believe that this concept of using client and server all on the client for  producing such things as this application is extremely powerful and will become  more prevalent as people need ways to work around the limitations of one  application environment or another. (You ask why not use AIR for the whole cm?  It can't can arbitrary dll's.) It makes writing installers a hassle, but that's  a small price to pay for progress. Welcome to the Mashup UI.</p></div> </div><!-- BEGIN attachments --><!-- END attachments --><!--                     <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"                              xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"                              xmlns:dc="http://purl.org/dc/elements/1.1/">                     <rdf:Description                         rdf:about="http://developer.xohm.com/community/blogs/os_cm/2008/12/10/the-mashup-ui"                         trackback:ping="http://developer.xohm.com/community/blogs/os_cm/trackback/1062"                         dc:title="The Mashup UI"                         dc:identifier="http://developer.xohm.com/community/blogs/os_cm/2008/12/10/the-mashup-ui"                         dc:subject=""                         dc:description="Our product guys gave us some very beautiful drawings of user interfaces for..."                         dc:creator="erich"                         dc:date="2008-12-10T13:26:00-05:00" ></a>                     </rdf:RDF>                     --></div></div><br />]]></description>
         <link>http://erichizdepski.com/blog/2008/12/the_mashup_ui.html</link>
         <guid>http://erichizdepski.com/blog/2008/12/the_mashup_ui.html</guid>
         <category></category>
         <pubDate>Wed, 10 Dec 2008 13:27:26 -0500</pubDate>
      </item>
            <item>
         <title>Javascript-based location for browsers using Google Gears</title>
         <description><![CDATA[<p>This article will give an introduction to the Google Gears Geolocation API. This API is a Javascript interface for geolocation, and uses Gears to intermediate with location providers (google is the default one). HTTP and JSON are used for communication.<br />
 <br />
I believe that if you want to location enable the web, you have to location enable Javascript. This is happening through Google Gears, Geode (for Firefox), and ultimately a W3C spec on how to do this for the web browser. I like Gears since it works with the browser, but also any other application that knows the basic protocol Gears uses.<br />
 <br />
You specify in Javascript the provider(s) to use other that the default on. You form a JSON request and include what you know about how your are connected to the internet. Cell tower info, nearby wifi hotspots, the country you are in (and maybe cool things like Wimax info in the future). This helps the provider get a fix on your position. The request is sent via HTTP POST to all providers. The responses are examined by Gears, and the one with the best reported accuracy is returned as a Position object. All Position objects report latitude and longitude at a minimum. As you may have already guess, they also report accuracy.<br />
 <br />
Here is some sample information.<br />
 <br />
provider (default)<br />
http://www.google.com/loc/json</p>

<p>valid POST request to the above provider URL (these are the mandatory request parameters)<br />
{"version": "1.0.1","host": "maps.google.com"}</p>

<p>valid response from provider<br />
{"location":{"latitude":38.95937,"longitude":-77.35455,"horizontal_accuracy":43 000.0}}<br />
 <br />
News Flash-<br />
Since I posted this, Google changed the API (but didn't update their documents- shame on you!). 'accuracy' is now a required field, although it doesn't appear to be used at all based on my testing. horizontal_accuracy and vertical_accuracy fields no longer exist. How do you know what Gears is doing and what it really expects? The best test is to use Wireshark (formerly Ethereal- http://www.wireshark.org/ ) and look at the actual JSON response from the google default provider. You can also see what Gears is sending to the google default provider. Stick with what they are doing, if not what the docs always say and you will save yourself some frustration.<br />
 <br />
 <br />
For more details on the API, see http://code.google.com/apis/gears/api_geolocation.html<br />
 <br />
 <br />
What I find most interesting is that you can create your own location provider. Your provider could use GPS, Wimax location services, or a combination of providers. You just have to follow the API for providers located at http://code.google.com/p/gears/wiki/GeolocationAPI<br />
 <br />
Here's the full example code for how to use your own provider, except for the provider itself. You can just dummy that up with a web page, though. This is taken from http://code.google.com/apis/gears/api_geolocation.html and modified to show how to use a different provider(s). And yes, you really can create a provider that runs at localhost and Gears can talk to it and hand off the location information to the web browser. Try that with AJAX (don't bother- it won't work)!</p>

<p>enclose this code in script tags and call the init() function when the page loads. You must also have a tag to load the gears_init.js file from google.</p>

<p>var geo = google.gears.factory.create('beta.geolocation');</p>

<p>function updatePosition(p) {<br />
alert('Current lat/lon is: ' + p.latitude + ',' + p.longitude );<br />
}</p>

<p>function handleError(positionError) {<br />
alert('Attempt to get location failed: ' + positionError.message);<br />
}</p>

<p>function init()<br />
{<br />
//since this is an array, multiple providers can be used. Gears returns the most accurate location results.<br />
//for example, you could have: var providers = ["http://localhost:8080/json.jsp", "http://www.google.com/loc/json", "http://localhost/mygpsinterface"];<br />
 <br />
var providers = ["http://localhost:8080/json.jsp"];<br />
var options = ;<br />
geo.getCurrentPosition(updatePosition, handleError, options);<br />
}</p>]]></description>
         <link>http://erichizdepski.com/blog/2008/11/javascriptbased_location_for_b_1.html</link>
         <guid>http://erichizdepski.com/blog/2008/11/javascriptbased_location_for_b_1.html</guid>
         <category></category>
         <pubDate>Wed, 05 Nov 2008 12:10:35 -0500</pubDate>
      </item>
            <item>
         <title>To The Editors of WIRED- Where&apos;s the Love?</title>
         <description><![CDATA[<p>I read Wired cover to cover. I even scored perfect on a quiz they ran about articles covered in Wired through the years. I am their perfect subscriber. They even sent me a letter saying I am &quot;preferrered&quot; and offered me a $12/year subscription. Oh joy!</p><p>That's only $2/year more than any schmuck pays who just gets the blow in from the current issue.&nbsp; Are your marketeers that stupid? No, they just don't care, they know you will keep reading,&nbsp;and they are clever enough to know the value of&nbsp;lies and flattery (sounds like any sales person). They know most people won't pay any attention so they are fair game to be screwed out of a few bucks. That adds up over the whole subscriber base. Bravo!</p><p>&nbsp;</p><p>&nbsp;</p><div style="text-align: center"><img title="screwed by wired" height="480" alt="screwed by wired" src="http://erichizdepski.com/blog/images/192024.jpg" width="320" border="0" /></div><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>]]></description>
         <link>http://erichizdepski.com/blog/2008/09/to_the_editors_of_wired_wtf.html</link>
         <guid>http://erichizdepski.com/blog/2008/09/to_the_editors_of_wired_wtf.html</guid>
         <category></category>
         <pubDate>Wed, 24 Sep 2008 18:29:44 -0500</pubDate>
      </item>
            <item>
         <title>Sirius XM- new name and services</title>
         <description><![CDATA[<p>Unless Mel has a brand new name (which he doesn't)&nbsp;let's just go simple, cheap,&nbsp;and not confuse people. Sirius XM sounds the best so stick with it.</p><p>Now on to some services ideas.</p><p>You know those emergency radios with the hand crank for power, the light, siren, AM/FM/TV tuner? The TV tuner is analog&nbsp;so you can kiss that goodbye in Feb 2009 when TV goes digital. Every TV tuning radio for the US market must be redesigned with a digital TV tuner- so don't buy the wrong model at a cheap sale this year! During Hurricane Katrina, local radio was shutdown since people evacuated and had no power anyway. Wouldn't a satellite radio with emergency power be great? The radio stays on, the big TV news stations&nbsp;stay on. People could get news and comforting&nbsp;distraction. The satellite providers have already proved that they can turn on a dime and change programming (they created Client 9 Radio in a day). This should be something the FCC wants as a merger pre-condition. A platform for a useful public service, not just more lobbying dollars spent on the FCC&nbsp;as they drag it out.&nbsp;Just take an XM boom box and add a power crank to it- voila!</p><p>More video services. Sirius has 3 channels (cartoons, since low data rate works well with them- QVGA, 250kbps, 15fps is all you need to keep kids happy. QVGA looks fine blown up on a high pixel-density 7&quot; screen). With the merger, the extra bandwidth from elimination of redundant channels will enable many more video channels. More than they need, frankly. Hopefully they built the video player to be able to handle more than 3 channels out of the box (I'm sure they did) when more become available.</p><p>Data file broadcast service. This is where it gets interesting. Satellite broadcast can deliver music, video, or any type of data, in either real or non-real time. Imagine a satellite radio that not only could store music (like the Pioneer Inno), but that could download a city guide and have it all cached. Maps, events schedules, digital coupons, city business phone book, etc. The major metros could each have a channel on the merged entity, and the file broadcast would keep it up to date through differential data downloads. Public service plus web-like&nbsp;information. I don't think you can program the Inno like a VCR, but that would be a nice add, too. There are many great shows on XM that my commute schedule just does not mesh with.</p><p>The data broadcast service could also broadcast audio/music and video non-real time (such as overnight) so that you have it available for playback the next day. Like PODCasts, but&nbsp;only mass-market since you are broadcast to many. This would take a fraction of the bandwidth of a regular channel, allowing for multiple low-bit rate services. How about an audio book channel?</p><p>Would it be possible for&nbsp;Sirius XM&nbsp;to provide some special data services for the government? The answer is yes. Amber alerts for satellite radio plus other formats, like the CAP alert (see <a href="http://www.incident.com/cookbook/index.php/CAP_Fact_Sheet">http://www.incident.com/cookbook/index.php/CAP_Fact_Sheet</a>&nbsp;). I'm familiar with these since I wrote the software to parse the CAP alerts coming over UHF into text messages that I relayed over SMS to Nextel cell phones. Converting it to a feed for satellite that is 'read' using text-to-speech is simple.</p><p>I see great things for satellite radio. Even slumping cars sales could be spun right (listen up, Sirius XM marketing department). If you can't buy a new car, just upgrade your old one- Duh! For less than the monthly payment on&nbsp;the average&nbsp;new car, you could have a satellite receiver, new speakers, and about a year's worth of service. That's a bargain.</p>]]></description>
         <link>http://erichizdepski.com/blog/2008/07/sirius_xm_new_name_and_service.html</link>
         <guid>http://erichizdepski.com/blog/2008/07/sirius_xm_new_name_and_service.html</guid>
         <category></category>
         <pubDate>Sun, 13 Jul 2008 08:13:38 -0500</pubDate>
      </item>
            <item>
         <title>California Wildfire Yahoo Pipe</title>
         <description><![CDATA[<p>The title says it all. Over 1,000 fires going on. I've updated and fixed&nbsp;a bug or two as well. Pretty popular pipe- over 3,000 runs to date and a few clones. It uses news feeds, flickr photos, videos, and puts them on a map.&nbsp;</p><p><span><a href="http://pipes.yahoo.com/erich/wildfires">http://pipes.yahoo.com/erich/wildfires</a> </span></p><p><span>If you have a good RSS news source, let me know.&nbsp;</span></p><p><span /></p>]]></description>
         <link>http://erichizdepski.com/blog/2008/07/california_wildfire_yahoo_pipe.html</link>
         <guid>http://erichizdepski.com/blog/2008/07/california_wildfire_yahoo_pipe.html</guid>
         <category></category>
         <pubDate>Tue, 08 Jul 2008 17:36:51 -0500</pubDate>
      </item>
            <item>
         <title></title>
         <description><![CDATA[<p>Facebook Desktop Application Development</p><p>I love Adobe AIR and am writing a desktop application using AIR that works with Facebook. One of the challenges of working with Facebook is authenticating your requests to their REST server. Below is some actionscript code that produces an MD5 hash of a Facebook API request.&nbsp;</p><p>Here is the algorithm to be implemented:<br />&nbsp;args = array of args to the request, not counting sig, formatted in non-urlencoded arg=val pairs (these are CGI parameters)<br />&nbsp;sorted_array = alphabetically_sort_array_by_keys(args);<br />&nbsp;request_str = concatenate_in_order(sorted_array);<br />&nbsp;signature = md5(concatenate(request_str, secret)) </p><p>Note that secret is not the Facebook application secret, but the session secret Facebook returns after proper authentication of the user!! There is an actionscript MD5 library (com.gsolo.encryption.MD5) from <a href="http://gsolofp.blogspot.com/2006/01/actionscript-3-md5-and-sha1.html">http://gsolofp.blogspot.com/2006/01/actionscript-3-md5-and-sha1.html</a> that I use. Works great.</p><p>&nbsp;</p><blockquote><p>public static function signRequest(params:Object, secret:String):String<br />{<br />&nbsp;&nbsp;&nbsp;<br />var hashInput:String = &quot;&quot;;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />//get the keys from the params associative array and add them to a new array<br />var keys:Array = new Array();<br />var index:int;</p><p>for (var item:String in params)<br />{<br />keys[index++] = item;<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />//sort the keys<br />var sorter:Sort = new Sort();<br />sorter.sort(keys);<br />&nbsp;<br />for (var i:int; i &lt; keys.length; i++)<br />{<br />//iterate the sorted keys and concatenate into one big string<br />trace(keys[i] + &quot;=&quot; + params[keys[i]]);<br />hashInput += keys[i] + &quot;=&quot; + params[keys[i]];<br />}</p><p>hashInput += secret;</p><p>return MD5.encrypt(hashInput);<br />}</p></blockquote><p><br />This is not the hard part of signing a request. The bigger challenge is knowing exactly what parameters need to be sent, and that if you are using some special class or library, knowing what it might be sendiing, as well. The Facebook error messages help, but they are undocumented. That's where this blog comes in.</p><p>Below is an error response to trying to do a photo upload to Facebook using the built-in upload() method of the File class in AIR. (I did change a few values in it so the signature won't compute.)</p><p>Details:<br />&lt;error_response xsi:schemaLocation=&quot;<a href="http://api.facebook.com/1.0/">http://api.facebook.com/1.0/</a> <a href="http://api.facebook.com/1.0/facebook.xsd">http://api.facebook.com/1.0/facebook.xsd</a>&quot; xmlns=&quot;<a href="http://api.facebook.com/1.0/">http://api.facebook.com/1.0/</a>&quot; xmlns:xsi=&quot;<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>&quot;&gt;<br />&nbsp; &lt;error_code&gt;104&lt;/error_code&gt;<br />&nbsp; &lt;error_msg&gt;Incorrect signature&lt;/error_msg&gt;<br />&nbsp; &lt;request_args list=&quot;true&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &lt;arg&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;Filename&lt;/key&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;kids.jpg&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/arg&gt;<br />&nbsp;&nbsp;&nbsp; &lt;arg&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;call_id&lt;/key&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;1215090174125&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/arg&gt;<br />&nbsp;&nbsp;&nbsp; &lt;arg&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;method&lt;/key&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;facebook.photos.upload&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/arg&gt;<br />&nbsp;&nbsp;&nbsp; &lt;arg&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;api_key&lt;/key&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;281b9cd2f09c077b2bb100707de&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/arg&gt;<br />&nbsp;&nbsp;&nbsp; &lt;arg&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;session_key&lt;/key&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;f6bec46c8aa0647b3f377b4440679&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/arg&gt;<br />&nbsp;&nbsp;&nbsp; &lt;arg&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;v&lt;/key&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;1.0&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/arg&gt;<br />&nbsp;&nbsp;&nbsp; &lt;arg&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;sig&lt;/key&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;6949810fb9aff86b103520760ff8&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/arg&gt;<br />&nbsp;&nbsp;&nbsp; &lt;arg&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;key&gt;Upload&lt;/key&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;value&gt;Submit Query&lt;/value&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/arg&gt;<br />&nbsp; &lt;/request_args&gt;<br />&lt;/error_response&gt;</p><p>What's significant about this message is that it actually is telling you everything that Facebook is using to compute the signature for the request it received. The keys and values are what it recevied from your computer. Put them into the method above (except for sig, of course), and you get the signature that Facebook computed when it attempted to authenticate your request. This looks straight forward, except that the Filename and Upload arguments are not provided directly by you- they are actually being put into the request by File.upload(). Nor are they mentioned as being required parts of the request in the Facebook API, and in fact, neither Filename nor Upload are used by Facebook. But since they are sent, they are part of the request that Facebook uses to compute the signature and if the signature you send does not match theirs, your request fails.</p><p>The moral of the story is you need to know what you are really sending when doing any type of hash of CGI parameters. this affects Facebook, Amazon, and others.</p>]]></description>
         <link>http://erichizdepski.com/blog/2008/07/post_1.html</link>
         <guid>http://erichizdepski.com/blog/2008/07/post_1.html</guid>
         <category></category>
         <pubDate>Thu, 03 Jul 2008 08:35:11 -0500</pubDate>
      </item>
            <item>
         <title>Marine data and RSS = Safer Boating</title>
         <description><![CDATA[<div>As a former naval officer, I really understand the value of marine-related data provided by the Coast Guard, NOAA, the National Weather Service, and even the boating community. As an innovator for Sprint, I see even more how that data could be better and more easily used by anyone using the US waterways- if it was available in an additional format key to information distribution on the Internet- RSS.</div><div>Any radiofax, navtex, even parts of the weekly notice to mariners could be delivered with RSS and also filtered by geographic region so the user only gets what they need. Something like the marine text forecasts is also perfect (<a href="http://www.nws.noaa.gov/om/marine/marinewxi.htm">http://www.nws.noaa.gov/om/marine/marinewxi.htm</a>). RSS plus geo-tagging makes for a very powerful combination.</div><div>I've already prepared a simple demo of how the RSS data feed from the National Data Buoy Center can be used. A much more powerful tool could be created by aggregating more data sources, if a standard format (RSS)&nbsp;was chosen for delivery to augment the current methods. RSS does not preclude what&nbsp;is done&nbsp;today, it just makes it better.</div><div>Please try out <span><a href="http://pipes.yahoo.com/erich/ndbc">http://pipes.yahoo.com/erich/ndbc</a> to see&nbsp;what the buoy data looks like overlaid on a map and imagine how adding the local marine weather reports, any nearby webcams, navtex, notice to mariners, etc. Just enter your starting and ending points and what a nautical trip planning aid you would have!</span></div><div><span /></div><div><span><div><span>Boating safety would be improved, too, which might just save a life.</span></div></span></div>]]></description>
         <link>http://erichizdepski.com/blog/2008/06/marine_data_and_rss_safer_boat.html</link>
         <guid>http://erichizdepski.com/blog/2008/06/marine_data_and_rss_safer_boat.html</guid>
         <category></category>
         <pubDate>Thu, 05 Jun 2008 16:51:23 -0500</pubDate>
      </item>
            <item>
         <title>The Widget Manifesto</title>
         <description><![CDATA[&nbsp; <div><span>I want to use my desktop for more than browsing. I want to work on it. I want it to inform me. And not </span><span>just when I happen to open a browser window to my home page of widgets. </span></div><h3><span>Information should be pushed to me&hellip;automatically </span></h3><h3><span>The widget should let me get more&hellip;and help me discover </span></h3><h3><span>The same widget must run on many devices&hellip;so I always have it </span></h3><h3><span>My widgets need to share&hellip;with each other </span></h3><h3><span>Widgets should enable custom devices&hellip;and will as technology advances </span></h3><h3><span>Widgets should enlighten, assist, entertain&hellip;and be a joy to use </span></h3>]]></description>
         <link>http://erichizdepski.com/blog/2008/06/the_widget_manifesto.html</link>
         <guid>http://erichizdepski.com/blog/2008/06/the_widget_manifesto.html</guid>
         <category></category>
         <pubDate>Wed, 04 Jun 2008 09:03:10 -0500</pubDate>
      </item>
            <item>
         <title>Myanmar Cyclone Nargis Deaths</title>
         <description><![CDATA[<p>If you have been following the news you have seen wildly varying estimates of death and destruction in Myanmar. The numbers have been growing exponentially. This won't stop. When such devastation happens, deaths continue on for sometime following the event and will kill more- a magnitude more, perhaps- than were killed initially. Tens of thousands are already dead, with tens of thousands missing and most likely dead. 1 million homeless- many of these are dead men walking. How long do you live with no shelter, little food, bad water, and the deadliest water-borne diseases brought on by dead bodies? This ain't survivor.&nbsp;These people are at risk and&nbsp;tens of thousands more are likely to die, especially when you see a headline like this: <a name="_icyxXJjMRoJmC7crFWD1IA--"></a><a title="AID blocked" href="http://news.yahoo.com/s/csm/20080507/wl_csm/oaidburma">U.S. still waiting for Myanmar aid flight approval </a></p><p>We can't send aid and people will die every day.&nbsp;The military government does not care. Why? Probably some dissidents are dying, certainly poor peasants. These are pople worth nothing to the junta and losing them might even make their job easier. Aid will flow in, eventually, and lots of it will not go where it is supposed to. The junta will rejoice, make some extra cash selling aid products on the black market,&nbsp;and the next cyclone will be no different.</p><p>How does the junta survive since 1962? Selling natural resources to China, getting military aid from China allowing their army to grow, and selling heroin. They also get weapons&nbsp;from North&nbsp;Korea and India.&nbsp;China's actions are disgusting and their support of the 'governments' of&nbsp;Myanmar and Sudan (aloing with the suppression of Tibet) are criminal.&nbsp;Imagine how things would be different without Chinese intervention. But the peasants know nothing of this. I wonder, is it easier to die hoping for help but knowing none will come, or hoping for help knowing it might come?</p><p>More information on just how sad Myanmar is: <a href="http://fas.org/sgp/crs/row/RL33479.pdf">http://fas.org/sgp/crs/row/RL33479.pdf</a></p><p>By the way, the official name of the junta is the &quot;State Peace and Development Council.&quot; This situation&nbsp;is just another example of evil being called good and good being called evil.</p>]]></description>
         <link>http://erichizdepski.com/blog/2008/05/myanmar_cyclone_nargis_deaths.html</link>
         <guid>http://erichizdepski.com/blog/2008/05/myanmar_cyclone_nargis_deaths.html</guid>
         <category></category>
         <pubDate>Thu, 08 May 2008 05:08:27 -0500</pubDate>
      </item>
            <item>
         <title>The coming of Context, part 1- Location</title>
         <description><![CDATA[<p>I think the programmers have gotten lazy. Fast CPU's, virtually unlimited RAM and bandwidth, and reliable connections have made them complacent. The &quot;least common denominator&quot; bar is actually set pretty high these days. Just try surfing the web with a modem.</p><p>Here's a challenge for you: apply context to your applications. What's that, you say? I'll tell you.</p><p>Let's start with something hot: Location. It is a lot more complicated than you might think. The parameters of interest that I see are:</p><p>Latitude and longitude<br />Speed<br />Heading<br />Route<br />Zip code<br />Metro Area<br />Country</p><p>Here are some examples to help you see why these&nbsp;are useful. First of all, not everyone using your service is sitting at a desk. Think wimax. Think more users in more places means more money.</p><p>Lat and long are the low hanging fruit, but the user really does not want to see them, they just want them used behind the scenes. You can plug them into google maps through the javascript API and make mapping apps know where you are when they first start up. That's handy.</p><p>Speed- hmm. I could use this to infer if you are in a car or on a train or walking or sitting still. These differences could be important to your service. For example, if you are driving, maybe you want to find gas or a place with a drive-through.<br /></p><p>Heading. Which way are you going? Are you driving home or going to the office? Perhaps you have a to-do (or ta-da!) list that changes based on where you are driving to. I doubt you are going to go by groceries on the way to the office.</p><p>Route. What I mean by this is where have you been lately? Are you out of town- let's get you some traveler's info. Are you driving in circles- maybe you are lost. What road are you following and what is on that road that could be of interest.</p><p>Zip code is the old standby and I hope to never enter it again. Due to current limitations of how location is usually determined, zip code is the dominant player and is used in nearly ever location-related service on the web, so no example is needed.</p><p>Metro Area is a good one. Craigslist makes you pick this. Other metro area services are TV and radio stations/programming, weather, airport info, etc.</p><p>Country is used by many international sites and also has other uses (then getting the language right). It can matter because some activities may be legal in one country (or state, for that matter) and not in another. Your service may simply not be allowed to work in some places. I recall Pandora could not be used in Britain, though this was unenforceable. Now we will see.</p><p>So there you have it. Context matters. If you want your apps used from other than behind a desk you should start using it. Otherwise, your apps may just not fit with what the user is doing and also will fail to get as much use as possible.</p><p>I will be covering several more areas of context and how to use it over the coming weeks.</p>]]></description>
         <link>http://erichizdepski.com/blog/2008/05/the_coming_of_context_part_1_l.html</link>
         <guid>http://erichizdepski.com/blog/2008/05/the_coming_of_context_part_1_l.html</guid>
         <category></category>
         <pubDate>Wed, 07 May 2008 16:23:06 -0500</pubDate>
      </item>
            <item>
         <title>The future of widgets is the past</title>
         <description><![CDATA[<p>'Widget' is a funny word. Historically, this is what it meant (according to <a href="http://www.dictionary.com/">www.dictionary.com</a>)</p><p><table class="luna-Ent" border="0"><tbody><tr><td class="dn" valign="top">1.</td><td valign="top">a small mechanical device, as a knob or switch, esp. one whose name is not known or cannot be recalled; gadget: <span class="ital-inline"><em>a row of widgets on the instrument panel. </em></span></td></tr></tbody></table><table class="luna-Ent" border="0"><tbody><tr><td class="dn" valign="top">2.</td><td valign="top">something considered typical or representative, as of a manufacturer's products: <span class="ital-inline"><em>the widgets coming off the assembly line. </em></span></td></tr></tbody></table></p><p>Then in the 80's &nbsp;is about when you had widget kits for software development. they were screen elements, but still like definition 1 above- part of the instrument panel. Today, we still have widgets in that sense, but now a new concept: the&nbsp;little software utility application.</p><p>I love them and the tools (Adobe AIR and Flex) for building them. This is like java in 1996. but enough history. On with the real topic.</p><p>I believe widgets are going to move off your computer screen and back into being a small mechanical (or rather electro-mechanical) device. Some already have. I count bluetooth earpieces in this category of widget. Those little widgets in Nike shoes. Dive computers. I think we will have many more, without gong to sci-fi, and they will be cheap and connected to the internet (IP V6 no doubt) or at least your wireless internet relay widget (from XOHM)&nbsp;that all your devices share.</p><p>Email direct from your brain. A weather widget&nbsp;on your wrist watch. William Gibson's microsoft. A flickr slide show on your sunglasses. Flexible, electronic ink screen on your forearm (or sub-cutaneous- even better!). A zippo-lighter sized movie projector. </p><p>Who needs a desktop. I want widgets the way the used to be.</p>]]></description>
         <link>http://erichizdepski.com/blog/2008/05/post.html</link>
         <guid>http://erichizdepski.com/blog/2008/05/post.html</guid>
         <category></category>
         <pubDate>Fri, 02 May 2008 10:45:07 -0500</pubDate>
      </item>
      
   </channel>
</rss>
