Google Voice Search and Privacy

Tired of typing?

android-voice-search

Google Maps voice search on Android 4.4 KitKat

It sure sounds convenient to simply speak a search term and have Google send back or even read you your search results.

Yet have you ever noticed how Google is pushing voice search on recent versions of Android such as KitKat? Every time you open up Google Maps and tap on the search field, it reminds you that voice search is available.

Besides the aforementioned convenience, there is a whole other aspect of why Google would be interested in you using your voice to search: to find out your gender and agemood and probably a lot more information that can be derived from the sound of your voice. Such information is extremely valuable when deciding which ads are relevant to you. In turn, the more relevant an ad is, the higher the chance of you reacting to it which in turn lets Google charge advertisers higher rates and therefore make more money.

In other words, Google stores millions of voice recordings [...] Google creates an electronic key that links your speech samples with your Google Account. [...] people within Google can access these keys [...]

Excerpt from Google’s support page about Personalized Voice Recognition on Dec 30, 2013.

What this means for your privacy is that by using any form of voice search on Google services, the company will be able to silently deduct information about you from the sound of your voice that you might not be willing to disclose to them. For example, you might have entered an incorrect year of birth or gender on purpose when signing up for your Google account. By using voice search, Google will be able to determine that the information you entered does not match the voice pattern of the person actually using the account and make an internal database entry with your real profile data. In a post-Snowden world it is also very plausible that this information is then accessible by government spy agencies, even without the knowledge of Google.

Android Voice Search Settings in Android 4.4. KitKat

Android Voice Search Settings in Android 4.4. KitKat

In this context, you might be inclined to turn personalized search off. Unfortunately, even though previous versions of Android apparently let you disable personalization, the information on Google’s help pages appears outdated, as I could not find this setting anywhere in Android 4.4 KitKat. Therefore, with Google’s stance of trying to collect as much information about people as possible, I think it is safe to assume that personalized voice search is now always on and can no longer be turned off.

Thus, if you’re not happy to disclose your gender, age, mood and other personal information to Google on a regular basis, you should stay away from voice search.

Note: While I talk about Google specifically, any other voice recognition service such as Apple’s Siri can equally be suspected of gathering personal information about you from your voice patterns.

Functional testing with authentication and Symfony 2.3, FOSUserBundle

Running functional tests of Symfony 2.3 PHP applications where FOSUserBundle handles users is unfortunately easier said than done as far as user authentication is concerned. As I couldn’t find a working code example anywhere that showed how to authenticate a user before executing a functional test, I am publishing the code that I got to work in the end.

Simply put this function into your test class and call it to obtain a fully authenticated test client object.

protected function createAuthorizedClient()
{
 $client = static::createClient();
 $container = $client->getContainer();

 $session = $container->get('session');
 /** @var $userManager \FOS\UserBundle\Doctrine\UserManager */
 $userManager = $container->get('fos_user.user_manager');
 /** @var $loginManager \FOS\UserBundle\Security\LoginManager */
 $loginManager = $container->get('fos_user.security.login_manager');
 $firewallName = $container->getParameter('fos_user.firewall_name');

 $user = $userManager->findUserBy(array('username' => 'myusername'));
 $loginManager->loginUser($firewallName, $user);

 // save the login token into the session and put it in a cookie
 $container->get('session')->set('_security_' . $firewallName, 
 serialize($container->get('security.context')->getToken()));
 $container->get('session')->save();
 $client->getCookieJar()->set(new Cookie($session->getName(), $session->getId()));

 return $client;
}

Feel free to leave feedback.

QmlOgre is now a library

After some extensive refactoring, QmlOgre is now a library, making the integration of Ogre into Qt QML scenes even easier. The library comes with the original QmlOgre sample application, adapted to work with the new library code.

Let me know in the comments what you think. More updates to the code are on the way as time permits.

QmlOgre Screenshot

How to integrate Ogre3D into a Qt5 QML scene

Recently I’ve been checking out again how to integrate Ogre3D into a Qt application. My previous effort Cutexture can be found here, here and the code here. This was nice as a simple integration but didn’t use modern graphics systems as efficiently as it could.

Fortunately the people at Nokia (when they were still interested in Qt) did publish a demo application qmlogre here that integrates Ogre3D into a Qt Quick QML scene by having Ogre render into an OpenGL Frame Buffer Object (FBO) which is in turn added to the QML scene as a textured item. However, this demo was relying on internal Qt headers that are not supposed to be used in production projects.

With a helpful comment I found here, I was able to update the qmlogre example to no longer rely on those internal Qt headers and to build fine with the latest stable Qt 5.0.1. In the hope that others may find it useful, I’ve made the revised code available on my Github account at https://github.com/advancingu/QmlOgre

Let me know in the comments what you think.

Edit: Here is a video of the original qmlogre application.

How to use the new OpenGL features of Qt5

Qt5 hosts a couple of new features to simplify working with OpenGL, with a helpful introduction given by Dr. Sean Harmer at Qt Developer Days 2012:

Unfortunately the source code to the presentations was not made available. To remedy, I’ve created a GitHub repository of the “Hello World” triangle example that is shown at the beginning of the presentation and adapted it to work with GLSL 1.30 and vanilla Qt5.

Find the code at https://github.com/advancingu/Qt5OpenGL

Taking Android screenshots under Ubuntu 12.04

Before being able to take screenshots of an Android device connected via USB cable to a machine running Ubuntu 12.04, it is necessary to instruct Ubuntu to give the user full permissions over the device. Unfortunately the tutorials that I found on the web didn’t work, so here is what has worked for me.

  1. Connect the device and get the vendor and product ID by running
    lsusb

    in a console.
    The output should contain one line listing your Android device, similar to the following:

    Bus 002 Device 004: ID 18d1:4e22 Google Inc. Nexus S (debug)

    Note the two 4 character hex values separated by a colon behind ID, these the vendor ID and product ID for your device.

  2. With a text editor, create/edit the file
    /etc/udev/rules.d/51-android.rules

    and place the following text in it:

    SUBSYSTEM=="usb", ATTRS{idVendor}=="VENDORID", ATTR{idProduct}=="PRODUCTID", MODE="0666"

    Replace VENDORID and PRODUCTID with the values retrieved in step 1. Save the file and close the editor.

  3. Disconnect your device.
  4. Kill your Android debug server if it was running by executing
    ./platform-tools/adb kill-server

    from console in the Android SDK directory.

  5. Restart the udev subsystem to let it detect the rule created in step 2 with
    sudo service udev restart
  6. Reconnect your device.
  7. Run
    ./tools/ddms

    from console in your Android SDK directory to bring up the Dalvik Debug Monitor (DDM).

  8. In DDM, select your device in the top-left device list, wait a few seconds, then select “Device -> Screen Capture” from the application menu.

Nokia N9 User Experience Guidelines

Locked Nokia N9 home screen with incoming call

It’s been quite some time since Nokia last released a handset which innovated in the User Experience and User Interface domain. This changed with the recently announced N9 handset, where they have hit the ball out of the park in my opinion. Except for some of the iconography, they abandoned all their legacy User Interface design and came up with a fresh new concept that really stands its ground.

Nokia has now made available an animated demonstration of the software User Interface design and User Experience Guidelines for the N9 on their developer website. It is definitely worth checking out their innovative approach to mobile handset User Interfaces.

What do you think of the N9′s User Interface?

Facebook, the Skinner Box

Found a great talk by Cory Doctorow today via Netzpolitik, where he discusses a psychological mechanism Facebook uses to get users to frequently return to the site and to disclose more and more personal information.

The psychological reward or kick apparently created when receiving attention from peers as a result of posting something personal ties right in with observations made by game design expert Jesse Schell, who researched the game mechanics of popular games that use psychological tricks to keep players to return again and again as well as to spend money. If you have a few more minutes to spare, you should definitely watch his very insightful talk about what makes the success of some these games as well as how game mechanics could be used to make people exhibit certain behavior in non-gaming contexts: Continue reading