All posts by silvia

Google Developer Day in Sydney

Today’s Google Developer day in Sydney was quite impressive. There were about 500 developers (and other random folks) there, curious to learn more about the services Google offers. With three parallel breakout rooms for the talks / code labs, there was plenty to choose from.

The introduction was well done, providing a quick overview of all the services and APIs that were the topic of the day – enough to understand what they are and tempt you to attend the in-depth talks.

I attended the Google App Engine talk first – not because I am a fan of python, but because I have an AppEngine account and my son Ben codes in python. I’d really like to play with AppEngine and get Ben to develop something useful (and me to learn some more python on the side). The talk gave a great introduction, which really enthused me. They build this little shout-out app on the fly and published it within the first 10 min. Now, I am collecting ideas for Ben to code up – if you have a neat little one, leave me a note.

I then went on to attend the YouTube talk. It was touted as a 201 presentation, but in the end just provided a cursory overview of the YouTube API. It was a good overview, but since we’ve been working with the API for a long time at Vquence, there was nothing new for me.

At the end of the talk, a developer requested YouTube to provide an API to access the new annotation feature. Since that is still in beta, they will be waiting to harden the technology for a bit before introducing the API. I suggested to them to look at CMML as the XML API. I explained that it would hold any annotation at any time point in any language. The on-screen placement is not currently covered by a tag in CMML, but could be added to the meta tags of the clips. I also suggested that if they found anything to improve on CMML, it would be possible since it’s not a finalized standard. I really hope they will check it out.

After lunch, I attended the two sessions about OpenSocial. I was considering using it for the new Vquence metrics site to do the widget layout. I quickly understood that this is not about layouts, but really about social applications. It would be cool if Ben would think up a social application that he could implement in python and OpenSocial and host in AppEngine. Something that him and his friends could share, maybe? Any ideas for an 11-year-old who learnt python on the OLPC?

At the end of the day, I was curious to learn a bit about Android before having to head home. But I only had a few minutes and the speaker had a slow start (repeating his slides from the introduction session) such that I quickly decided to leave and rather make sure I was at after school care on time!

Overall a worthwhile day – I met some friends, made some contacts, got to ask some questions, and had an awesome lunch with fresh sushi, hmmm. Google really knows how to spoil their developers!

FOMS Workshop – Call for Participation is OPEN

The Foundations for Open Media Software workshop will take place in January 2009 for the third time before LCA. Yay!! This year in beautiful Tasmania!

At 17:33pm on Wed 11th June on irc #foms, the Call for Participation was declared open.

If you have any engagement with the development of open standards and open source software in the digital media space, consider attending. To attend, all we ask for is an email to the committee. Really simple!

We will have travel sponsorship for some key people and if the last two years are anything to go by, we will see some serious improvements to open media technology coming out of FOMS – an event that always stretches over the whole duration of LCA.

I can’t wait till Christmas is over…

Talk at SLUG on Vquence’s use of open source software

Yesterday, I gave a talk at SLUG (the Sydney Linux Users Group) about the open source software that we’re using in Vquence. The talk was basically structured into three areas: open source software in business operations, in software development, and in system operations. John joined in for the harder questions on the systems operations. We also explained how we’ve set our systems up so we are scalable on data (in particular on video slices, images and video use statistics) at a minimum cost – which includes the use of Amazon’s EC2 and S3 services. We also use reverse proxies to be scalable with bandwidth cost. Here are the talk slides.

Rails Authorization Plugin

The Rails authorization plugin is a really nice way of providing role management and restrict access to specific features. It also works nicely with the RESTful authentication plugin which manages user login and authentication.

However, there is a serious lack of documentation of how to use this plugin – the README.txt inside the plugin and the source code is the best I have found. I also learnt some from the slides for the Railsconf 2006 on “Metaprogramming Writertopia”. This blog entry is collecting what I have learnt and also freely copies some text from the different sources.

Assuming you have installed the authorization plugin, you need to extend your models with the plugin. In particular the User model and the model(s) that you would like to use multiple user roles for.


class User < ActiveRecord::Base
# Authorization plugin
acts_as_authorized_user
...
end


class Account < ActiveRecord::Base
# Authorization plugin
acts_as_authorizable
...
end

The acts_as_authorized_user part of the plugin creates the following methods for the User model:

  • has_role? role_name [, authorizable_obj]: finds out if a user has a certain role (for a certain object)
  • has_role role_name [, authorizable_obj]: creates the role if non-existant, and assigns the role to the user (for a certain object)
  • has_no_role role_name [, authorizable_obj]: remove role from user (for a certain object), and the role if not in use any longer

As some background information, the plugin creates 2 tables – one for the roles (name, authorizable_type, authorizable_id, timestamps), and one that maps roles to users roles_users (user_id, role_id, timestamps). The authorizable_type and authorizable_id map the role to the authorizable_obj.

The acts_as_authorizable part of the plugin creates the following methods for the Account model:

  • accepts_role? role_name, user: finds out if the user has the role on the model
  • accepts_role role_name, user: sets the user to have the role on the model
  • accepts_no_role role_name, user: removes the user from having the role on the model

In the code, you can now use the following methods to create roles for users and accounts. Assuming we have a user ‘u’ and an account ‘a’, we can do one of the following to create the role ‘admin’:

  • u.has_role ‘admin’, a
  • a.accepts_role ‘admin’, u
  • u.is_admin_for a
  • u.is_admin (gives user the role ‘admin’, not tied to a class or object)

To check on roles, you can use the following:

  • u.has_role ‘admin’, a: return true/false if the user has the role ‘admin’ on the account
  • u.is_admin? a: return true/false if the user has the role ‘admin’ on the account
  • u.is_admin_of? a: return true/false if the user has the role ‘admin’ on the account
  • u.has_role ‘admin’: return true/false if the user has the role ‘admin’ on anything
  • u.is_admin?: return true/false if the user has the role ‘admin’ on anything
  • u.is_admin_of_what Account: returns array of objects for which this user is a ‘admin’ (only ‘Account’ type)
  • u.is_admin_of_what: returns array of objects for which this user is a ‘admin’ (any type)
  • a.accepts_role? ‘admin’, u: return true/false if the account has the user with the role ‘admin’
  • a.has_admin(s)?: return true/false if the account has users with the role ‘admin’
  • a.has_admin(s): returns array of users which have role ‘admin’ on the account

There are more dynamically generated methods and they are created through the method_missing hook. There is a whole domain-specific language behind this creation of methods. Just about everything that sounds like proper English will work.

An interesting twist is that roles can also be set on model classes: u.has_role 'admin', Account. So, roles can be set on one of the following three scopes:

  • entire application (no class or object specified)
  • model class
  • an instance of a model (i.e., a model object)

In your controller, you can now use two methods to check authorization at the class, instance, or instance method level: permit and permit?. permit and permit? take an authorization expression and a hash of options that typically includes any objects that need to be queried:


def index
if current_user.permit? 'site_admin'
# show all accounts
@account = Account.find(:all)
else
@account = current_user.is_admin_for_what(Account)
end
end


class AccountController public_page
...
def secret_info
permit "site_admin" do
render :text => "The Answer = 42"
end
end
end

The difference between permit and permit? is redirection.

permit is a declarative statement and redirects by default. It can also be used as a class or an instance method, gating the access to an entire controller in a before_filter fashion. permit? is only an instance method, that can be used within expressions. It does not redirect by default. You will find more information on the boolean expression of the permit or permit? methods here.

What is a proper “viral video”?

Many companies are intending to undertake viral video marketing campaigns.

This should come as no surprise, since video is undoubtedly the most effective content on the Web: “People are about twice as likely to play a video, or replay one that started automatically, than they are to click through standard JPG or GIF image ads.”

Even Techcrunch has a thing for dodgy viral video advertising approaches.

The definition of a “viral video” is however not quite clear.

Wikipedia defines “viral video” as “video clip content which gains widespread popularity through the process of Internet sharing, typically through email or IM messages, blogs and other media sharing websites.” This describes more the process through which viral videos are created rather then what a viral video actually is.

I tried to analyze the types of viral videos around to understand what a viral video really is. I found that there are three different types and would like to provide a list of descriptive features of each (leave a comment if you disagree with the types or want to suggest more).

The reason for this separation of types is that if you are a company and want to create a viral video advertising campaign, you need to decide what type of viral video you want to create and choose the appropriate approach and infrastructure to allow for that type of viral video to be successful.

Here are the three types of viral videos that I could distinguish:

popular video

A video that has a high view count (in the millions) – possibly emerged over a longer time frame – is viral because in order to get such a high view count, many people must have been told about it and been directed to go to it and watch it.

A prime example of such a video is the “Hahaha” video of a baby laughing, which is currently at position 10 of YouTube’s Most Viewed of All Time page. I would also put the “Evolution of Dance” video into this category, which alone on YouTube has seen over 81M page view and has therefore the top rank on the Most Viewed of All Time videos on YouTube. This video has some aspects that make it a cult, but I don’t think they are strong enough.

The features of videos in this category are as follows:

  • high page view count
  • not subject to fashion or short-term fads
  • interest for many audiences
  • hasn’t spawned an active community

The reason for the last feature is that a popular video is simply a video that is a “must see” for everybody, but it doesn’t instill in people an urge to “become involved”. This is a bit of black-and-white painting of course – see also how many people created copies of the “Evolution of Dance” – but it is a general feature that applies to most of the audience.

cult video

Videos that become “cult” are not necessarily videos that achieve the highest view counts. They will however achieve a high visibility and almost 100% coverage in a certain sub-community. Such videos are regarded as viral since they virally spread within their target community. Sometimes they even create a community – their fan club.

The main aim of these videos is not a high view count on a single video, but an active community that is highly motivated to have the video be part of their culture.

A typical example is the “Diet Coke and Mentos” phenomenon. I would not be able to point to a single video on this phenomenon but there is a whole cult that has emerged around it with people doing their own experiments, posting videos, discussing it on forums, helping each other on IM etc. There are even fan clubs on Facebook.

The features of videos in this category are as follows:

  • many videos have been created on the same topic, in particular UCG
  • often, it is not clear which was the originating video that started the phenomenon
  • there is a substantial view count on the individual videos
  • not subject to fashion or short-term fads
  • interest for a sub-community mostly
  • has spawned an active community, possibly with their own website

I would use the “Ask a Ninja” series of vodcasts as another example of a cult video. It has a central website and a very active community of fans around it.

trendy video

The term “Internet meme” has been coined for the videos in this category. They are essentially videos that create a high amount of activity around the Internet for a short time, but then people lose interest and move on. They are trendy for a limited amount of time.

A typical example in this category is the “Dramatic Chipmunk” with more than 7M views on YouTube on this one video, and further millions of views on the diverse mash-ups that were created. At one point, it was a “must see” and you had to have mashed it up to be “in”. Now it has been replaced by Rick Rolling – the activity of pointing people to a URL of something but then falsely directing them to Rick Astley’s video of “Never Gonna Give You Up” on YouTube with more than 9M page views.

The features of videos in this category are as follows:

  • videos achieve high page view in a short amount of time
  • audience interest vanishes after a limited time
  • often consists of funny, shocking, embarrassing, bizarre, or slanderous content
  • there is a substantial view count on the video(s) related to the phenomenon
  • creates high user activity for a short time e.g. through mash-ups, remixes, or parodies

Now that we have defined the different types of viral videos there are the lessons for viral video marketing campaigns.

If you want to create a popular video, create a beautiful, time-less video like the Sony Bravia Bunnies ad that everybody just has to have seen. Then make sure to release it on the Internet before you release it on TV by uploading to YouTube and a set of other social video hosting sites. Feel free to complement that with your own Website for the video. Start the viral spread through emailing your employees, friends, social networks, etc and rely on the cool-ness of the video to spread.

Typical Australian ads that have achieved popular video status are Carlton Draught’sBig Ad” and the more recent VBStubby Symphony” ad.

If you want to create a cult video, you should create something that will excite a sub-community and provide the opportunities for the community to emerge. Blendtec did this very well with their “Will it Blend?” videos and website. I actually believe, they should open that Website even further an allow discussion forums to emerge. They could pull all those blender communities at Facebook into their site. OTOH they could just be involved in the social networks that build elsewhere around their brand to make the most from their fan base.

If your video ad is however just meant to create a high audience activity for a short time, you might consider doing a shocking video like the one Unicef created with the Smurfs. Or something a little less extreme like the funny German Coastguard video created by the Berlitz Language Institute.

Ogg DirectShow Filters are searching for a new maintainer

This is not my typical blog post, but if it helps achieve the goal, so be it.

Zen Kavanaugh, who used to develop the Ogg DirectShow filters is not able to continue maintaining these. Therefore, the DirectShow filters are now searching for a new maintainer.

If you develop in Windows and are able to compile, test and package the DirectShow filters that are available from http://www.illiminable.com/ogg/, please consider becoming the maintainer.

At this point in time, there is not much actual development required – just the occasional application of a patch, compilation, packaging and then publication.

This is really important, so if you can help you should really consider stepping forward.

Adding RSS icons to a joomla template

We’re using Joomla on Vquence’s corporate site and wanted to display RSS icons and provide proper feeds for the blogs and news posted there.

The new Joomla 1.5 provides the ability to add to every Menu item that is a Blog List an RSS feed by introducing an rss and atom link tag in the html head tag. However, we wanted to have the RSS icon for subscriptions displayed on the page, too, and that turned out to be not so simple.

Here is the piece of code that we eventually added to our body tag:

<div id="rss" style="float: right;" >
<?php $headData = $this->getHeadData() ?>
<?php if(count($headData['links']) != 0) : ?>
<a href="<?php echo JRoute::_('index.php?format=feed&type=atom', false) ?>"><img src="/images/rss.gif" alt="rss icon"/></a>
<?php endif; ?>
</div>

Fortunately, this also worked for the aggregated planet blog feed we are displaying in Joomla as an article under Team Blog and for which we had to install the CustomHeadTag plugin to add the link tags to the html page head.

Counting the number of links in the Joomla HeadData seemed to be the best way to find out whether or not to add the RSS feed icon. This is in no way or shape optimal or the best solution, but we were unable to find a way to get directly to the parameters of the menu items and query that show_feed_link parameter of the menu item. Online documentation for this type of template work is non-existent as yet.

If anyone has a better solution, leave a comment!

Standardisation in video advertising

It’s great to read at ClickZ that the Interactive Advertising Bureau (IAB) is preparing new format guidelines for video advertising. This includes pre-, mid- and post-roll, overlays, product placement, and companion ads (display ads placed alongside video).

The standard is currently in public comment phase, which closes on 2nd May 2008.

It is good to see that the standard also contains recommendations on the ratio of ad-to-content and on capping the frequency of ads to save the consumer from overly getting swamped with advertising.

The effect this standard will have on the video advertising industry will be enormous. Content publishers will build their websites with these standards in mind and provide generic advertising spaces into which they can then include advertising as required from the appropriate advertisers. Advertisers can create ads that will be re-usable across websites. And video advertising agencies can finally start to emerge that provide the market place for video ads to find their locations.

This is a sign that online video advertising is maturing and more generally that free online video distribution will become more viable for content owners.

For Vquence this is great news since all this new advertising will need to be measured for impact – I expect the need for video analytics will grow enormously. 🙂

Larry Lessig’s last lecture on Free Culture

This lecture is impressive. Larry talks about the war that we (well: the US congress) are inadvertently raging against “our kids”. How we are criminalising a whole generation that express their creativity through mash-up as they use copyrighted content. How these crimes are based on congress decisions that make no logical sense and are only influenced by money. And how this corruption is not just reflected in the problems we have with copyright, but also in e.g. our late reactions to global warming, or in the way in which academia, the medical profession, medical research, and other areas work.

I know it’s a long lecture, so if you just want to watch the main message, download the file and just watch the last quarter. A highly intellectual voice for humanity.

Video Metrics: an emerging industry category

Yesterday, YouTube gave video metrics to their users. If you have uploaded videos to YouTube, you can go to your video list and click “About this video” to see a history of view counts. Very simple, but a good move.

It is great to see YouTube provide this service, even if just for your own, personally uploaded videos. It validates the newly emerging industry category of “online video metrics“, that Vquence is also a part of.

Our colleagues from VisibleMeasures expressed a similar feeling in their blog entry saying: “we view anything that companies can do to help showcase the need and improve the landscape for video measurement as a plus for the entire ecosystem”. I couldn’t express it any better.

Following the blogging community, there is a large need for online video metrics, both for tracking your own published videos – as YouTube has started providing since yesterday – as well as tracking videos published by the market generally for market analysis and intelligence reasons.

The number of players in the field is still small and FAIK we are the only Australians to offer these services.

U.S. spending on internet video advertising alone is expected to grow to US$4.3 billion by 2011. The need for online video publications is predicted to grow even stronger in the near future when each and every Website will be expected to use video to communicate their message. The need for video metrics will increase enormously.

Check out our new Website if you want to learn more about how Vquence measures video.