Steve Trefethen
Contact me Send mail to the author(s)
About Me View my LinkedIn profile

Powered by discountASP.NET
referal ID: sdtref
Why recommend discountASP.NET?

Archives
Statistics
Total Posts: 524
This Year: 26
This Month: 0
This Week: 1
Comments: 1835
Disclaimer
The posts on this weblog are provided �AS IS� with no warranties, and confer no rights. The opinions expressed herein are my own personal opinions and do not represent my employer�s view in any way.
# Sunday, June 28, 2009

Google Voice your personal PBX if you can get by the Privacy Policy

Tagged: Opinion | Technology

Tags:  | 

Last Thursday, I received an invite to Google Voice (a.k.a. GrandCentral) after signing up for the beta months ago, a detail I’d practically forgotten. Google Voice is:

…a service that gives you one number for all your phones, voicemail that is easy as email, and many enhanced calling features like call blocking and screening, voicemail transcripts, call conferencing, international calls, and more.

imageIn other words it’s sort of like having a personal PBX. The feature set (see below) is rich not to mention free, at least for now:

I could easily see Google extending this for small businesses much like Google Apps for Domains which could be an interesting play in that space particularly given my company’s need for a phone system.

When you sign up for Google Voice you get to select your phone number with an option to choose from within a specific area or zip code. My area code (831) was available and within that area code I could choose a Santa Cruz prefix (among other surrounding cities/towns) and I paired that with a memorable last 4 digits.

Another feature of Google Voice optional transcription of calls though in a few test calls I’ve found it might convey the “gist” of the call but can get quite mangled. For example, you can see above a test call where I said “This is a test call using Google Voice trying to call my cell phone from my home phone in Scotts Valley California.” and you can see the result. Nonetheless, it’s a cool feature I’m sure will improve over time.

Here’s the GMail-like web UI (running in Prism):

Google Voice web UI

One minor detail: The Privacy Policy

This is all very cool although the biggest hurdle for me is the Privacy Policy which details the kind of information Google collects through this service. While it’s not really unusual nor unexpected it details how your information will be collected and used including:

When you use Google Voice, Google’s servers automatically record certain information about your use of Google Voice. Similar to other web services, Google Voice records information such as account activity (including storage usage, number of log-ins), data displayed or clicked on (including UI elements, links); and other log information (including browser type, IP-address, date and time of access, cookie ID, and referrer URL). Google’s servers also automatically collect telephony log information (including calling-party number, forwarding numbers, time and date of calls, duration of calls, SMS routing information, and types of calls).

There’s also a bit about transcription:

Voicemail Transcription - if you use Google Voice’s voicemail transcription service, Google may transcribe voicemail messages into text and email and/or SMS the resulting text to the email account or phone number(s) designated in your user settings. Google’s computers process the information in your messages for various purposes, including formatting and displaying the information to you, delivering related links, backing up your messages, and other purposes relating to offering you Google Voice.

Clearly, Google mines your data like it does for everything it offers though this service IMO goes further in that you’re more or less accepting the Privacy Policy on behalf of anyone calling you especially considering there’s no way for a caller to know you’re using Google Voice as it’s transparent.

I’ll experiment Google Voice for awhile but I’m not sure I’m ready to turn this amount of information over to Google regardless of Don’t be Evil.

Are you using Google Voice?

Comments [0] # permalink Posted @ 11:22AM
# Wednesday, June 17, 2009

An HttpHandler for use with Facebook

Tagged: .NET | Development | Facebook

Tags:  |  | 

imageIn my SocialMine Facebook application, which uses MIT’s Simile Exhibit, I needed to fetch Facebook FQL query results from the Exhibit client-side JavaScript. While it may not sound that complicated it’s not something directly supported by the Facebook Developer Toolkit (FDT). I created an HttpHandler to respond to the Exhibit requests for the JSON data which populates the Exhibit. The HTTP request includes a Referrer header that contains the necessary data, fb_sig_user and fb_sig_session_key to construct an instance of facebook.Components.FacebookService. For completeness here is a list of the queryparams contained in the Referrer URL:

auth_token=1379094a2a42e1c0037a33048912a875
fb_sig_in_iframe=1
fb_sig_locale=en_US
fb_sig_in_new_facebook=1
fb_sig_time=1245301045.1412
fb_sig_added=1
fb_sig_profile_update_time=1241328269
fb_sig_expires=0
fb_sig_user=719571200
fb_sig_session_key=c93185e145713ce98d72dfc2-719571700
fb_sig_ss=57abbef0284354d029fe8a19fa00dfce
fb_sig_ext_perms=offline_access,email,auto_publish_recent_activity
fb_sig_api_key=33c52d0a0c9867f677a1f05154c28478
fb_sig_app_id=5012360767
fb_sig=9ad664af23910ca18aeb203203c366cd

The HttpHandler is an abstract class with a single abstract method called FacebookRequest descendents override to handle the request. As you can see below the handler is quite simple, parsing the queryparams into a Dictionary, creates an instance of the FacebookService and calls FacebookRequest passing the service instance and the HttpContext passed to the handler.

public abstract class FacebookHandler : IHttpHandler
{
    private const string REQUEST_SESSION_KEY = "fb_sig_session_key";
    private const string REQUEST_USER_ID = "fb_sig_user";

    #region IHttpHandler Members

    public bool IsReusable
    {
        get { return false; }
    }

    void IHttpHandler.ProcessRequest(HttpContext ctxt)
    {
        facebook.Components.FacebookService f = new facebook.Components.FacebookService();
        f.ApplicationKey = WebConfigurationManager.AppSettings["APIKey"];
        f.Secret = WebConfigurationManager.AppSettings["Secret"];

        Dictionary<string, string> dic = new Dictionary<string, string>();

        string[] split = ctxt.Request.UrlReferrer.Query.Split(new char[] { '?', '&', '=' });
        // Skip the first item since it’s the "?"
        for (int i = 1; i < split.Length - 1; i += 2)
        {
            if(i < split.Length)
                dic.Add(split[i], split[i + 1]);
        }

        f.SessionKey = dic[REQUEST_SESSION_KEY];
        f.uid = Convert.ToInt64(dic[REQUEST_USER_ID]);
        FacebookRequest(f, ctxt);
    }
    #endregion

    protected abstract void FacebookRequest(facebook.Components.FacebookService fbservice, HttpContext ctxt);
}

The JavaScript of Simile Exhibit requests the JSON data using the following LINK tag:

<link href="friendsjson.aspx" type="application/json" rel="exhibit/data" />    

The reference to friendsjson.aspx isn’t actually an ASPX as it’s handled by a descendent of this HttpHandler which is registered in the httpHandlers section of the web.config as follows:

<add verb="*" path="friendsjson.aspx" type="FBFQL.JSONHandler" />
In my application the FacebookRequest method queries using FQL for profile data and returns a JSON result that populates the Exhibit.

Btw, if you're looking for help on Facebook development be sure to read my wiki article.
Comments [2] # permalink Posted @ 10:40PM
# Wednesday, June 10, 2009

EDI Purchase Order system goes live

Tagged: For fun

Tags:

If you’ve been reading my blog for long you probably have read a few previous posts where I blogged about EDI processing using CCNET. Well, yesterday the Purchase Order portion of the system went live so I sent a screenshot of the CCNET web dashboard to the Team at Falafel and our CTO, John Water’s replied with his modified version (right). I figure for those of you programming types you’d enjoy this…

image  image

At least, I got a good laugh from it.

For those familiar with EDI this custom system handles 810, 850, 855, 856 and 997 documents. Also, based on my FTP Provider for CCNET there should be a new source provider showing up on that project in the near future as one of the leads approached me about adding it.

Comments [0] # permalink Posted @ 4:36PM
# Friday, May 29, 2009

iPod Touch well worth it

Tagged: Electronics | Hardware

Tags:  | 

It’s been about a year since I posted my thoughts on the iPod Touch and my answer has since changed from a “maybe” to absolutely, even my v1.0 edition. I use it for everything from:image

  • emailed versions of my travel itinerary
  • podcasts
  • multi-day alarm clock, a wake-up call replacement
  • ebook reader
  • restaurant/coffee shop locator
  • status updates to Facebook, Yammer and Twitter
  • newspapers
  • weather
  • maps and even a poor man’s GPS
  • flashlight/nightlight
  • File sharing device (AirSharing)
  • Banking
  • And yes, even music though mostly streamed via Pandora

These days I’m traveling a heck-of-a lot more and I’ve found it to be an invaluable travel tool. In fact, the Touch can even function as a poor man’s GPS. To see this working you’ll need to cache some map content while connected to wifi:

  1. Before embarking on your trip connect to a wifi network
  2. Using the Google Map browse around the area you’ll be driving so the map will be cached. You may want to zoom in so as to capture more detailed content.
  3. Start driving to the location where you’re headed while viewing the Google Maps application. If there are sufficient wifi access points in the area the little blue target locator (pictured) will occasionally update and follow you along the map.

To be sure we’re not talking real time but it does actually work. Notice in the picture that the Touch isn’t connected to wifi when it was captured as I sat at a stop light. I stumbled into this feature while on a business trip to Austin TX and while driving around looking for a Starbuck’s I noticed my location on the map changing. The screenshot here displays it working near Wilkes-Barre PA.

My current favorite application is RSS Player which makes listening to podcasts easy and enjoyable, it still needs a few features but it’s seriously a must have if you’re a podcast listener.

Comments [2] # permalink Posted @ 10:26AM
# Tuesday, May 26, 2009

Experienced San Francisco Bay Area ASP.NET Developer’s needed - May 2009

Tagged:

Tags:

My employer, Falafel Software, is looking for Senior/Architect level C# .NET developers located in the San Francisco Bay area (U.S. residents or individuals with a work permit only, no visas). We’re looking for developer’s with deep experience developing C# ASP.NET applications. If you are an individual contributor (read not recruiter etc.) and meet the qualifications outlined below contact me or email jobs@falafel.com. I’ll add that both verbal and written communication and presentation skills are extremely important in our line of work.

Senior Software Engineer / Architect

Suitable candidates will possess a software engineering background combined with professional services, consulting or pre/post-sales experience. Engineer/Architect must be comfortable with client presentations, demos and working with client teams to meet development, integration and/or training goals.

Required

  • 5+ years hand-on production experience with Microsoft .NET Framework development (WinForms and/or ASP.Net)
  • Proficiency in C#
  • Working knowledge of SQL Server 2000 or later (not DBA, but be able to use the database in projects)
  • Excellent communication skills, team member, self-motivated and driven (lots of remote work, work from home etc)
  • Be a consultant: comfortable meeting clients, discussing their problems, listening, finding pragmatic solutions, and billing time
  • Some travel required 15% or less (conferences, client site visits)

Ideal candidates should also possess one or more of the following proficiencies:

  • SQL Server 2000 (or later) and Transact SQL (5+ yrs)
  • Web 2.0 technology (AJAX, dynamic HTML, JavaScript)
  • Microsoft or other applicable Certifications
  • Bachelor’s degree or higher in Computer Science or equivalent (i.e. Electrical Engineering) – or natural talent and experience that blows us away!
  • Knowledge of modeling (ER diagrams, UML etc), processes (agile, RUP, etc), Version Control Systems and Practices (TFS, SVN etc), QA processes and practices (unit testing, continuous integration, automated QA, etc)
Comments [0] # permalink Posted @ 10:46PM