Jul 11

FriendFeed vibe compared to Twitter

Tech with tags: , 5 Comments »

First, I apologize for writing a post with a title that has both FriendFeed and Twitter in it. I understand that most people will hit delete as soon as they can as they are sick of hearing about them.

However, I feel like writing this so I will.

I have dabbled in FriendFeed, but although I thought I should really like it, I never got into it and stayed in Twitter land. It took me awhile to really get the right feel for Twitter though, so I decided to really try to spend time with FriendFeed this week and see how I feel at the end of it.

I think I found the zen a little, but there are good and bad things:

Participation

Once you participate in conversations on the items you see how much nicer it is compared to @replies thrown this way and that in your stream. This is a little like going to conversations in Gmail giving you real threading in email instead of random replies.

One side effect is that you don’t do as many posts yourself, and do more comments on other peoples.

The down side though, is the way the river flows through. With Twitter it is easy, it flows on up. Here though, again a little like email, threads jump around as people comment. I find this pretty weird, as suddenly an item from 4 months ago shows up just because some random bloke “liked” it.

I do find that I actually click on “like” here though, whereas I never “favourite” on Twitter. I don’t know why. I think it is because you actually SEE when people like something so you are motivated to play the game.

Go Away A-List!

One nice viral (organic @kmarks?) feature is that they show you items one friend away (friend of a friend). This seems great, and can make a nice way to find people that you would like to follow. Seeing their stuff allows you to judge that, whereas “find friends” doesn’t.

The downside here though is that I can’t get away from Robert Scoble. No offense to Robert. The problem is that even after I unsubscribed to Robert because most of the posts had something to do about him…. I still get his posts because of this:

FriendFeed Scoble

Since so many people connect to him and other A-lists, chances are that some of my friends are in that chain too. Argh! There doesn’t seem to be a way to explicitly mute these, and using ‘hide’ a lot doesn’t seem to tell the engine to do it itself. “Oh, wait, Dion has hidden this guys stuff a lot so lets lay off.” The net effect is that the A-list folk have way too much of the feed.

Another couple of random things. For some reason I couldn’t get Flickr to work as a service. The interface asks for your nickname or email, so I tried both: my Flickr username (dalmaer), and my email, both personal and the Yahoo! one. No cigar. Finally, I went over to Flickr and duh, the email was [email protected] in my settings. I plug that in, and FriendFeed found it.

Finally, I am still looking for a bit more. I still want The River to be a tool that I live in, instead of something that sits over there. I hope the good folk at FF push ahead :) I do find that I am very rarely in Facebook now. My social group isn’t really there anymore, and my Dad is on there a lot more than I. The new iPhone app is awesome though, and could become your contact list.

Thanks for putting up with me for this post. I keep thinking that I sound like Steve Gilmor going on about @replies and the power of track.

Jul 10

Expectations, Higher Standards, Behavioral Economics, and Politics

Google, Politics, Tech 4 Comments »

I have seen a few people a little saddened by some of Obama’s recent moves, especially geeks on the FISA vote, which upset me too. It is wrong. We need new privacy policy.

As I thought about this, I started to think about expectations. By taking the higher ground, and telling us that he will do so, Obama has set himself a higher standard. This relates to me, as I have talked in the past about the higher standard that Google has to live up to thanks to “Don’t be evil” and other such things. As an employee, and a person, I actually like the somewhat constraining higher standards. It means that colleagues can’t take shortcuts, and things can’t sneak by… and if they do? Then we pay for it as a company. Our trust is tied to our business, which is tied to who we say we are.

The same is true for Obama. If McCain does something, sure we can use it as a talking point, but there is more leeway. Ah, he is an old school politician, that stuff just happens. Not with Obama. If he does anything that we don’t agree with, he can get jumped on by many sides. This can be hard as what one person thinks is moral, isn’t the same for another. He has a tough road ahead, but the benefits are that people believe in him and we will come to a new presidency with that Hope that we have been hearing about. With the entire RNC coming after him, the battle is just about to start.

What if he does get in? Those expectations get in too. The tone gets into the office. He could go to Iran and say “let’s put some history behind us and make a change that benefits all of us.” People will be more receptive to change, and boy do we need it. So, even if he isn’t as perfect as some make him out to be, he will have to live up to the image to survive, which means a better, stronger, president of the USA.


I also got to see a fantastic and entertaining talk at Google that is now on YouTube. The talk was by Dan Ariely, an MIT professor working on Behavioural Economics. Really though, it was one of those talks that reminds you that us humans…. we are animals man.

Professor Dan Ariely visits Google’s Mountain View, CA headquarters to discuss his book “Predictably Irrational: The Hidden Forces That Shape Our Decisions.” This event took place on July 1, 2008, as part of the Authors@Google series.

In a series of illuminating, often surprising experiments, MIT behavioral economist Dan Ariely refutes the common assumption that we behave in fundamentally rational ways. Blending everyday experience with groundbreaking research, Ariely explains how expectations, emotions, social norms, and other invisible, seemingly illogical forces skew our reasoning abilities. Not only do we make astonishingly simple mistakes every day, but we make the same types of mistakes, Ariely discovers. We consistently overpay, underestimate, and procrastinate. We fail to understand the profound effects of our emotions on what we want, and we overvalue what we already own. Yet these misguided behaviors are neither random nor senseless. They’re systematic and predictable—making us predictably irrational.

In the talk Dan shows so many cases of how we trick ourselves such as:

  • Spouse: A group was given a questionnaire. Half of the group was asked to write down 10 things you love about your spouse. The other were asked to note just 3. When complete, the next question was about how long you think you will stay married. What is interesting is that the people who were asked to jot 10 things thought they would last a lot shorter than the group who only had to think of 3 because….. thinking of 10 things is hard!
  • Signing: Asking someone to sign “what I am about to do is true” versus “What you just signed is true?” made a huge difference. Dan worked with an insurance, who did A/B testing on a form asking how many miles you drive and there was a drastic difference. It turns out that the majority of people lie, but just a little.
  • Comparisons: Dan saw that The Economist had a purchase page that allowed you to choose between a Web version, print version, or both. The strange thing was that the both and print version were the same 129 pound price. With that comparison people were much more likely to choose ‘both’ than the cheaper Web only version. Take away the choice, and the game changes.

And this leads us to the tie in to politics. He showed that comparisons happen with people too. Showing three photos of “similarly attractive people”, where one of the photos was a slightly uglier version (via Photoshop) meant that people selected the good looking double way more frequently.

With this election we have a young up and coming chap, and an old geezer. If a third candidate came around who was a slightly worse old geezer it would help McCain…. maybe if Nader does well? Or what about running mates, how much of the look will matter there as well as policy?

Watch Dan’s talk. Great stuff.

Jul 07

Flash indexing and SEO; Remember testing?

Adobe, Google, Tech with tags: , , 2 Comments »

Whenever you work on SEO for your Web site or application, what do you have to do? You have to test it. You have to make changes and watch what ends up in the index of search engines. Then you iterate on your task to get the correct and most relevant information in there.

Google announced that we now index SWF with a new algorithm, as does Yahoo!, in cooperation with Adobe.

The new SWF runner can “act like a human” and access elements and see what happens (e.g. click on a button). Immediately people worried that the tester could act like the Google Web Accelerator, and if you have a poorly designed application that had a [DELETE EVERYTHING] button it would get clicked and boom.

Aral Balkan asked if we are indexing too much and others went even further and randomly said don’t build your site in Flash.

The folks who came out saying that “now my internal files aren’t hidden!” are fooling themselves, as you can’t hide things via obscurity. To the real point though, if you are conservative you can use good ole robots.txt to disallow the search engine access to your SWF files.

Then, you can run some tests and see what happens. Just as everything else with SEO, you will need to play the game of seeing what happens as you make changes.

In the end, I want search engines to get a lot smarter at indexing this kind of content (ditto for rich Ajax applications) and we all need to work together to make that happen.

Jul 06

Passpack: Gears? AIR? Why choose!

Adobe, Gears, Tech 1 Comment »

Passpack is an online password organizer that provided offline access early in its life via Gears.

Last week they announced an Adobe AIR version, and Ryan quickly commented saying:

For a while they were using Gears as a way to store those passwords on the client but they’ve just recently switched over to using Adobe AIR.

One of the reasons given was Safari support for Gears. You have to do a build for Safari which is not what we want, and we are working with the Apple team to clean things up and have a really nice Safari plugin. Unfortunately, Safari doesn’t have a plugin model, so you always feel like you are doing some hack using unsupported mechanisms like Input Managers. Grr, come on Apple, play nice with others! :)

At the same time, Air support for the Encrypted File store (a very nice feature!) doesn’t work on Linux yet (I am sure that will be fixed soon too).

Of course, the solution isn’t Gears vs. AIR. They aren’t really competing here! The Gears users of the product started to get vocal and we quickly saw Gears support added again.

There are two very different use cases:

  • Users who want to be using Passpack in the browser, who happen to want to use functionality such as offline, or any other Gears component
  • Users who want a desktop-like application, outside of the browser. This is where the AIR application fits in.

So, both can make sense for Passpack. In other cases, one of the choices could make sense.

I also expect to see more joint applications. Gears functionality is working into HTML5 the standard, which will end up in WebKit (as Apple is great in that regard), and AIR uses…. WebKit as its renderer!

I really hope that AIR will be able to bridge to those APIs, and you get the best of all worlds. I would love to use the Workerpool API from within an AIR application that is doing a lot of JavaScript work for example.

Jul 04

Dealing with W3C Events; A story of running around in circles

Ajax, Tech with tags: , , 3 Comments »

I am working on an interesting pet project that has a fairly rich UI. A rich UI means dealing with events, and I had a wake up call on what a pain it can be to deal with in the browser world.

I ended up on a wild goose chase that ended up having a simple solution.

Imagine one section of an application that is a canvas element, and another piece that is a input type="text". I wanted a way to jump between the two with a keystroke, e.g. Ctrl-J for jump.

Jumping from the canvas element to textbox was fine, but it wouldn’t work on the way back. I was trying to $('canvas').focus() but it wouldn’t work.

initMouseEvent

I stupidly thought that I should just simulate the click on the canvas element, since that was working just fine for me.

We are pretty fortunate that the ability to kick off true events programatically is bound into the event model itself.

This means that I could:

if (document.createEvent) {
   var evt = document.createEvent('MouseEvents');
   evt.initMouseEvent('click',
            true,     // Click events bubble
            true,     // and they can be cancelled
            document.defaultView,  // Use the default view
            1,        // Just a single click
            0,        // Don't bother with coordinates
            0,
            0,
            0,
            false,    // Don't apply any key modifiers
            false,
            false,
            false,
            0,        // 0 - left, 1 - middle, 2 - right
            null);    // Click events don't have any targets other than
                      // the recipient of the click
 $('canvas').dispatchEvent(evt);
}

This only slightly worked. I could test that the click was going through. I would add an onclick handler to canvas and it would fire just fine. However, something weird was happening. The focus was still in the textbox even with this click happening (which didn’t happen when I actually clicked on the darn thing).

Events from within events

Since the click was working, why not just force the blur on the textbox?

var events = document.createEvent('HTMLEvents');
var blur = events.initEvent('blur', false, false);
his.dispatchEvent(blur);

But that got me:

Component returned failure code: 0×80070057 (NS_ERROR_ILLEGAL_VALUE) [nsIDOMEventTarget.dispatchEvent.....]

Hmm, on wait. This was happening from within an onkeypress handler and it appears that you can’t do this in a nested way. A setTimeout(..) to push it off until later didn’t make it any happier either.

tabindex=0

As I looked at this mess, I quickly realised that I had been unravelling a string, and I should take a step back.

I talked to Alex Russell, and he immediately said “erm, and you made sure that tabindex was set on the canvas element?”

Doh, it wasn’t. This is why the focus method (which did exist) didn’t do anything. I quickly added tabindex=-1 and now I could simply $('canvas').focus() and lo-and-behold it would focus!

Event.stop(e)

Great, the home stretch. I took the test and put it on the live code and it… still didn’t quite work. God damn it.

I took another step back.

A global key handler was set via document.onkeydown that was handling the world. When it saw a Ctrl-J it would short circuit and give focus to the textbox. The textbox has its own onkeydown that would do the opposite. A global flag held the state of global/textbox.

This is the problem. I had mucked up the event propogation, so in the case of jumping from textbox to canvas it would first go through the textbox handler, but after it was done it would STILL run the global handler which would kick it right back!

I just needed to e.stopProgagation(), or even better Event.stop(e) to stop any default action too.

Phew, all that running around to get back to square one. Now it works, and it reminded me of how the simplest things can be tricky.

Jul 03

Developer Advocate versus Technical Evangelist; When names change the tone

Google, Tech with tags: , 12 Comments »

St. John the Evangelist

There is a role in the developer team at Google called Developer Advocate, and I consider myself an honorary one of those.

What is interesting, is how the name has had an effect. When the group kicked off, we really didn’t like the term ‘evangelist’. The religious connotation is so strong isn’t it? It also feels like an evangelist is going to run around with his particular religion, and will be trying to persuade you to join, without really listening.

An advocate on the other hand sounds just a touch different. I can advocate something, and part of that will hopefully be heavily listening, and participating in the open community. Of course, these are just words, and you have to make this happen. We could call ourselves evangelists and do a lot of listening, or become advocates and do none. The word choice though does make you think about what you should be doing.

More importantly, in my opinion, is the word developer. Rather than talking just about technology, we are talking about humans who use it. This again makes you feel like you need to be more part of the community, working with developers on their level.

Then you put it together: Developer Advocate and a funny thing happens. What does that mean? At first people think that you are advocating to developers, but it is also very important to think about the other connotation. You think about being an advocate of the developer.

What does this mean? It means that when you are in a meeting with your product group, you are their mouth piece. What do they think of the products? the APIs? What are they asking for? You get to almost be an outsider on the inside.

That is the power of the developer advocate role, and why it can be such a fun one at companies.

Of course, I don’t even need to tell you that we are hiring for this position in the US and elsewhere in the world :)

NOTE: Right after I posted this I saw that Jeremy Z had a post titled Two Tech Jobs: Technology Evangelist and Network Operations