Wednesday, 25 May 2011

BMTC & Android

Recently, I noticed interactive display panels on BMTC - Vayu Vajra (BIA) Volvo bus, while commuting to office (Hebbal to Marathhalli). I’m really excited to say that these are powered by Google’s Android Operating System.

1

Good part is, it includes a "Webkit" browser for free internet browsing while you travel. What else you want when you are stuck in traffic? :)

I could confirm that its using Android OS and Webkit browser by examining the UserAgent:

Mozilla/5.0(Linux; U; Android 2.1-update1; en-us; Generic Build/ECLAIR) AppleWebkit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17

See below snapshot.

2

Along with the in-built browser, it also lists few useful apps - Youtube, facebook, Sudoku, Weather, Stocks, News etc.

For me, these apps looks to be web-apps which are non-native and not even Java based.

Advertising is another interesting aspect.
The lower part of the display has local retailer advertisements. BMTC may be earning a good revenue out of it. :)

Overall experience of using internet on BMTC Vayu Vajra was awesome! I'm really amazed by abilities of Android as a platform. Its not just phone anymore.

You may not be surprised to see these devices one day in your car. :)
I'll wait for that day!

Sunday, 31 October 2010

The Age of ‘WebApps’

Looks like there is a big paradigm shift from ‘native’ apps to so-called ‘WebApps’ nowadays!

Listing the WebApps which I personally use in daily life and like the most.

Do you come across any? Let me know!

dropbox_logo_home Store, Sync, Share files online.
password_manager_clipperz_logo Password Manager.
rtm_logo2 To-Do list manager.
evernote_logo Remember everything on any device.
meebo-logo Instant messaging program which supports multiple IM services.
tunewiki Creates social media players for cellphones and handheld devices with huge library of lyrics.
ril Save Pages to Read Later. Offline reading!
youtube Web videos!
google_reader Great feeds reader from Google.
twitter-logo(1) Twitter!
wikipedia Wiki.
floor_planner Bookmark manager.
foursquare_logo Geo-tagging.
floor_planner

Create floor plans, house plans and home plans ‘online’.

facebook facebook!

Sunday, 24 October 2010

no service found for - "com.nokia.qt.mediaplayer"

Of late, I was trying to build QtMobility on Ubuntu, specifically experimenting with QtMultimedia feature set.

In the process, I stumbled on this (not so) strange issue which frustrated me for a log time. I was using Qt4.7 + QtMobility v1.1.0 Beta.

Building QtMobility was not an issue. However, when I tried to play a multimedia content in demo/player app , it just couldn't play it complaining :

no service found for - "com.nokia.qt.mediaplayer"
It was clearly a mistake of mine not having a look at the 'configure' warning messages :
Reading /home/pranaray/qt-mobility-opensource-src-1.1.0-beta2/plugins/multimedia/multimedia.pro
Project MESSAGE: QtMultiMedia checking for gstreamer...
Package gstreamer-0.10 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gstreamer-0.10.pc' to the PKG_CONFIG_PATH environment variable
No package 'gstreamer-0.10' found
Package gstreamer-base-0.10 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gstreamer-base-0.10.pc' to the PKG_CONFIG_PATH environment variable
No package 'gstreamer-base-0.10' found
Package gstreamer-interfaces-0.10 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gstreamer-interfaces-0.10.pc' to the PKG_CONFIG_PATH environment variable
No package 'gstreamer-interfaces-0.10' found
Package gstreamer-audio-0.10 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gstreamer-audio-0.10.pc' to the PKG_CONFIG_PATH environment variable
No package 'gstreamer-audio-0.10' found
Package gstreamer-video-0.10 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gstreamer-video-0.10.pc' to the PKG_CONFIG_PATH environment variable
No package 'gstreamer-video-0.10' found
The message was clearly warning about the missing gstreamer library packages.
I had to install libgstreamer0.10-dev & libgstreamer-plugins-base0.10-dev packages to resolve the issue.
sudo apt-get install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
I also installed few additional gstreamer plugins along with the above said packages to be able to play mp3 and other media content formats.

Tuesday, 24 August 2010

Bypassing Same-Origin policy on Firefox.

Same-origin policy is an essential feature implemented in most of the modern browsers to shield against malicious scripts execution. It simply blocks javascripts belong to domains other than the one which is currently being executed.

However, for development and testing of mash-ups, web apps or widgets, its sometimes required to disable this, so that a local javascript of my widget could reach Twitter or Foursquare webserver to pull the data via AJAX.

Firefox as a leader desktop browser simply block such attempts denying the cross origin AJAX requests.

Fortunately, Firefox’s settings are configurable and it allows us to disable such restrictions so that it can bypass the Same-origin policy.

Here is a brief summary of what I discovered for achieving this. Special thanks to Raghava for helping me out to reach to it.

Step-1

  • Launch Firefox browser, navigate to "about:config".
  • Set the property "security.fileuri.strict_origin_policy" to “false

Step-2

  • Update the javascript by add this line before creating any XHR request:

netscape.security.PrivilegeManager.enablePrivilege(”UniversalBrowserRead”);

Example :

// Enable Universal Browser Read
try{

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

}
catch(e){

alert(e);

}

// create XmlHttpRequest Object
var xmlhttp = new XMLHttpRequest();

That's it! You are now all set to access any cross origin resource from a local web app running on Firefox.

Please remember to revert this setting back so that your web is back to safe mode :)

Sunday, 11 July 2010

Building QtWebKit on Windows – Few common issues

In continuation to my last blog entry, here I’m trying to capture few common problems that I encountered along with possible solutions for them, in the process of building QtWebKit for windows.

Listing out issues and followed by possible solution for them:

1. ERROR: qmake missing but required to build WebKit.

Make sure QTDIR env variable is set and PATH variable includes path to Qt bin folder.

set QTDIR=C:\Qt\4.6.3

set PATH=%PATH%;%QTDIR%\bin;

2. ERROR: flex, bison, gperf missing but required to build WebKit.

Have you installed GNUWin32 tools? Also, include GNUWin32 bin path under PATH env variable.

set PATH=%PATH%;C:\GnuWin32\bin;

3. 'nmake' is not recognized as an internal or external command

Make sure you have installed MS Visual Studio. Also try running the webkit build script from within Visual Studio 2008 Command Prompt.

4. Failed to generate WebCore's derived sources!Can't locate Switch.pm in @INC

Is Active Perl installed? Active Perl v5.10 or higher is required. Update PATH env variable with perl bin folder paths.

set PATH=C:\Perl\site\bin;C:\Perl\bin;%PATH%

5. Cannot open include file: 'windows.h': No such file or directory

Microsoft Platform SDK need to be installed. INCLUDE and LIB env variables need to be updated.

set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft SDKs\Windows\v6.0\Include

set LIB=%LIB%;C:\Program Files\Microsoft SDKs\Windows\v6.0\Lib

6. JavaScriptCore\DerivedSources\chartables.c (13) : error C2466: cannot allocate an array of constant size 0

This issue arises because of usage of wrong version of perl to generate derived sources.

To solve this issue, we need to install Active Perl v5.10 and regenerate derived sources. For regenerating the derived sources, delete the ‘WebKitBuild’ folder and restart the build by launching the ‘build-webkit’ script again.

7. LINK : fatal error LNK1210: exceeded internal ILK size limit; link with /INCREMENTAL:NO

Not sure why visual studio crib with such a linker error. As a quick solution, we need to disable incremental linking.

Update webkit.pri by adding linker flag to disable incremental linking:

QMAKE_LFLAGS += /INCREMENTAL:NO

Restart the build by launching the ‘build-webkit’ script again.

Building QtWebKit on Windows

Intention of this and the following blog entries is to record my experiences while building QtWebKit on Windows with MS Visual Studio 2008. I’ve tried to gather few common issues and solutions for them which I came across in the process of compilation.

Which compiler?

I opted for Microsoft Visual Studio 2008 as I had it already installed on my laptop.

However, QtWebKit building instructions indicate that we can use either MSVS or MinGW.

Note that, rest of this article only talks about using MS Visual Studio (nmake) as the compiler. If you are willing to choose MinGW, please follow instructions here.

Windows Platform SDK

Download and install Windows Platform SDK. Make sure INCLUDE env variable has the SDK include path:

ex : C:\Program Files\Microsoft SDKs\Windows\v6.0\Include

and LIB env variable includes SDK lib path.

ex : C:\Program Files\Microsoft SDKs\Windows\v6.0\Lib

Active Perl v5.10

Install Active Perl later than v5.10 from here. Ensure PATH variable includes:

C:\Perl\bin;C:\Perl\site\bin

Qt for Windows SDK

Download and install latest available Qt for windows from http://qt.nokia.com/downloads. Qt can either be downloaded as an SDK or as precompiled binary set.

When I downloaded SDK, I noticed that the SDK binaries were compiled with MinGW. This means, its incompatible with my MSVC compiler. So, I had to rebuild Qt source from scratch after installing Qt SDK.

As an alternative to this approach, we can download and install Qt binaries which are precompiled with MSVC.

Luckily Qt provides prebuilt binaries compiled with both MinGW and MSVC-2008. You can choose either of that, based on the compiler you are using.

Ensure QTDIR env variable is created and pointing to Qt install folder.

ex : QTDIR=C:\Qt\4.6.3

Also, PATH variable need to include the Qt binary path:

C:\Qt\4.6.3\bin

GNUWin32 tools

Download and install following GNUWin32 tools :

Include install path under PATH env variable (ex: C:\GnuWin32\bin)

Checking out WebKit source

Check out source from WebKit SVN trunk http://svn.webkit.org/repository/webkit/trunk

I experienced a glitch while checking out webkit repository. Have a look at my previous blog entry for more info on that.

Building QtWebkit

Now, we are ready with all the pre-requisites. To build QtWebKit, we need to run build-webkit script passing –-qt and -–debug or --release parameters.

Following script execution builds the release version of QtWebKit binaries:

perl WebKitTools\Scripts\build-webkit --qt --release

for debug version of binaries :

perl WebKitTools\Scripts\build-webkit --qt --debug

References

http://trac.webkit.org/wiki/BuildingOnWindows
http://trac.webkit.org/wiki/BuildingQtOnWindows
http://webkit.sed.hu/blog/20091027/building-qtwebkit-windows
http://webkit.org/building/build.html
http://webkit.org/building/tools.html

Sunday, 4 July 2010

Excluding folders while checking out an SVN repository

Blogging this entry out of frustration of not finding an easier way to exclude selected folders while ‘svn checkout’ing a huge svn repository.

I had to checkout all folders from webkit trunk repository except this folder – LayoutTests, which was not really necessary for my work. I was not interested in downloading it, as it was really huge and could consume lots of time and bandwidth in downloading it.

Unfortunately ‘svn:ignore’ couldn’t helped me in achieving this as I was thinking earlier :(. ‘svn:ignore’ is meant only for ignoring files/folders while committing/adding them to repository, but not for checking out or updating a repository.

After googling for a while came to know that only way of achieving this is to use Sparse Checkouts feature which was introduced since SVN v1.5.

However, solution is not straight forward. we have to checkout with an option of --depth=immediates which would checkout all files and folders (excluding everything from sub-folders). Then ‘svn up’ individual folder which we are interested in.

I was really not satisfied by this solution. This doesn’t help much in addressing the problem if we do have large number of folders and are in different levels in folder hierarchy.

Can this be a new feature for svn toolset? or do any one have a better approach for this problem? Let me know.