Saturday, December 18, 2010

[Gd] GWT 2.1.1 is now available

| More

Google Web Toolkit Blog: GWT 2.1.1 is now available


Back in October of this year we released GWT 2.1, with a framework and set of tools that made it easy to build business web apps. Since then we've had some great feedback from the GWT community, and today we're happy to announce that we've incorporated that feedback into our latest release, GWT 2.1.1. The specifics of this release are detailed below, but if you're interested in getting started you can do so here.




For Eclipse users, simply click on the “Google updates available” icon in the lower left hand corner of your screen, or select the “Help->Check for Updates” menu item.




Alongside this release, we’ve also updated the Google Plugin for Eclipse and GWT Designer. Both can be installed via the links below.





The main release updates for each product include:




GWT SDK


GWT’s RequestFactory component, introduced in GWT 2.1, received a lot of attention, both from the GWT team at Google and from the GWT open source community at large. Based on this feedback, we’ve added the following:



  • A service layer, which includes support for non-static service objects

  • Value object support

  • Multiple methods calls on a single request



Google Plugin for Eclipse

  • Improved UiBinder error reporting within SpringSource Tool Suite (STS)

  • Optimized the IDE experience by removing unused Java builders and leveraging the AspectJ fixes in the latest STS release

  • Updated Speed Tracer to perform a full J2EE publish before launching




GWT Designer




If you have questions or want to provide some feedback, we’d love to hear it, and the best place to do so is in the Google Web Toolkit Group.

URL: http://googlewebtoolkit.blogspot.com/2010/12/gwt-211-is-now-available.html

[Gd] Check out the Humble Indie Bundle #2

| More

Google App Engine Blog: Check out the Humble Indie Bundle #2

Last year, we featured a guest post by Jeffery Rosen, of Wolfire Games about the Humble Indie Bundle, an awesome promotion for a good cause: spreading awareness of indie games, and supporting charity. For 12 days, you could name your own price for a bundle of awesome independent games, with proceeds split as you wish between the game developers and two deserving charities, Child's Play and the Electronic Frontier Foundation. They hosted the Bundle on App Engine, to great effect - read the original blog post to learn more.


The good news is, they're doing it again, with the same App Engine infrastructure, and a new set of games! There's only 4 days left, so be sure to check them out if you're interested.



Posted by Nick Johnson, Google App Engine Team
URL: http://googleappengine.blogspot.com/2010/12/last-year-we-featured-guest-post-by.html

Friday, December 17, 2010

[Gd] New Shopping APIs and Deprecation of the Base API

| More

Google Code Blog: New Shopping APIs and Deprecation of the Base API

We are pleased to announce our newest addition to the shopping family -- a simple yet powerful programmatic interface that enables retailers to upload their content to Google and query data from Google. The new Shopping APIs have two components: Content and Search. As part of this launch, we’re are also deprecating the Base API and replacing it with today’s new Shopping APIs.

The Content API for Shopping allows retailers to upload product data to Google for use in multiple places online like Google Product Search, Product Ads, Google Affiliate Network, Google Commerce Search, and Shopping Rich Snippets.

The Search API for Shopping makes it easy for our Google Commerce Search customers, Google Affiliate Network publishers, and developers to build innovative applications using product data.

The Shopping APIs replace the Base API
These new Shopping APIs replace the existing Google Base Data API for our content providers and search applications. We are deprecating the Base API and will fully retire it on June 1, 2011. For existing developers making the switch, we’ve provided a Migration Guide to help.

You can read more details about these announcements on the Google Merchant Center blog and our FAQ on Google Base Data API Deprecation.

By Alex Dovlecel and Andrew Eames, Google Shopping Team
URL: http://googlecode.blogspot.com/2010/12/new-shopping-apis-and-deprecation-of.html

[Gd] Android stretches its legs... errr wheels... with help from 20% time at Google

| More

Google Code Blog: Android stretches its legs... errr wheels... with help from 20% time at Google

Today we announced a fun 20% robotics project that resulted in three ways you can play with your iRobot Create®, LEGO® MINDSTORMS®, or VEX Pro® through the cloud. We did this by enhancing App Inventor for Android, contributing to the open source Cellbots Java app, and beefing up the Cellbots Python libraries. Together these apps provide new connectivity between robots, Android, the cloud, and your browser.

You can start empowering your Android phone with robot mobility by picking the solution below that matches your skill level and programming style:

  • App Inventor for Android
    This is an entirely cloud based programming environment where you drag and drop elements into a project right within your browser. The latest features for robots include a low level Bluetooth client for connecting with many serial-enabled robots, and tight integration with LEGO MINDSTORMS. There are seven LEGO components in all, with NxtDrive and NxtDirectCommands used for driving and basic control while NxtColorSensor, NxtLightSensor, NxtSoundSensor, NxtTouchSensor, and NxtUltrasonicSensor are used for sensors.

    Also be sure to try out the social components to connect with Twitter, and TinyWebDB for hooking up to AppEngine. All of these can be used together to make your phone a powerful robot brain.


  • Cellbots for Android

    We wanted to offer a flexible application that could drive multiple platforms and support different control modes. To do this we created the Cellbots Java application which currently supports four robot platforms and allows additional robot types and UI control schemes to be added using the standard Android SDK. It is entirely open source and available for free in the Android Market so you can try it out right away.

    With it you can use the phone as a remote control with D-Pad, joystick, accelerometer, or voice control inputs. Then try mounting your phone to the robot in brain mode where you can stream video back to a web browser and make the robot speak using Android’s native text-to-speech. For those of you with two Android phones, we support remote-to-brain mode where you can ask the robot for its compass heading or change the persona on screen.

    &nbsp

  • Cellbots Python library

    The 20% team got together to create a more modularized version of the popular Cellbots project, which is all open source code. The goal for the Python library is to allow developers an easy way to demonstrate the features on Android phones suitable for robots. There are commands to make it speak, listen, record audio, take pictures, get a geolocation, and of course provide the I/O to the bot.

    The Python code is the most flexible in terms of connectivity with support for Google Talk chat over XMPP, HTTP through a relay or direct connection, telnet, and voice input. To use it you just need to install the Scripting Layer 4 Android and enable the Python interpreter. Then copy over the Python and config files to the SD card and script away.


We hope this gives developers, hobbyists, and students a head start in connecting the next generation of cloud apps to the world of robotics. Be sure to push your mobile phone’s processor to its limits and share the results with the Cellbots Google Group. Try using Willow Garage’s OpenCV for Android or the new Gingerbread APIs for gyroscopes, enhanced OpenGL graphics, and multiple cameras!

By Ryan Hickman, 20% Robotics Task Force
URL: http://googlecode.blogspot.com/2010/12/android-stretches-its-legs-errr-wheels.html

[Gd] WebGL now in Beta: here comes the 3D web!

| More

Google Code Blog: WebGL now in Beta: here comes the 3D web!

(Cross-posted from the Chromium Blog)

We’re happy to announce that WebGL is now on by default in Google Chrome’s beta channel, with some shiny new demos to show off what the technology can do.

WebGL is a 3D graphics API for JavaScript that developers can use to create fully 3D web apps. It is based on the OpenGL ES 2.0 API, which should be familiar to many 3D graphics developers. Google, Mozilla, Apple, Opera and graphics hardware vendors have been working together to standardize WebGL for over a year now, and since the spec is just about final at this point, we wanted to get our implementation out there for feedback.

While you may not find much WebGL content on the web, we expect developers to quickly create a lot of content given the power and familiarity of the API. To inspire developers and give users a taste of the kind of apps they can expect in the near future, we’ve worked with a few talented teams to build a few more 3D web apps:

Body Browser, a human anatomy explorer built by a team at Google as a 20% project

Nine Point Five, a 3D earthquake map by Dean McNamee

Music Visualizer, a jukebox that synchronizes 3D graphics to the beat of the music by Jacob Seidelin

You can find these and other demos in the new Chrome Experiments Gallery for WebGL demos. Now that WebGL is enabled in the beta channel, the Chrome Experiments team is looking for your cool WebGL app submissions to show off this slick technology, so don’t forget to submit your cool 3D apps!

By Kenneth Russell, Chromium Team
URL: http://googlecode.blogspot.com/2010/12/webgl-now-in-beta-here-comes-3d-web.html

[Gd] New hacked site notifications in search results

| More

Official Google Webmaster Central Blog: New hacked site notifications in search results

Webmaster level: All

Today we’ve added a new notification to our search results that helps people know when a site may have been hacked. We’ve provided notices for malware for years, which also involve a separate warning page. Now we’re expanding the search results notifications to help people avoid sites that may have been compromised and altered by a third party, typically for spam. When a user visits a site, we want her to be confident the information on that site comes from the original publisher.

Here’s what the notification looks like:


Clicking the “This site may be compromised” link brings you to an article in our Help Center which explains more about the notice. Meanwhile, clicking the result itself brings you to the target website, as expected.

We use a variety of automated tools to detect common signs of a hacked site as quickly as possible. When we detect something suspicious, we’ll add the notification to our search results. We’ll also do our best to contact the site’s webmaster via their Webmaster Tools account and any contact email addresses we can find on the webpage. We hope webmasters will also appreciate these notices, because it will help you more quickly discover when someone may be abusing your site so you can correct the problem.

Of course, we also understand that webmasters may be concerned that these notices are impacting their traffic from search. Rest assured, once the problem has been fixed, the warning label will be automatically removed from our search results, usually in a matter of days. You can also request a review of your site to accelerate removal of the notice.

If you see this notification appearing on your site’s listing, please take a look at the instructions in our Help Center to learn how you can begin to address the problem. Together, we can make the web a safer place.

Posted by Gideon Wald, Associate Product Manager
URL: http://googlewebmastercentral.blogspot.com/2010/12/new-hacked-site-notifications-in-search.html

[Gd] Android Browser User-Agent Issues

| More

Android Developers Blog: Android Browser User-Agent Issues

[This post is by Bart Sears, who manages the Android Browser team. —Tim Bray]

This posting describes some issues when browsing websites with mobile variants using large-form-factor Android devices. This posting will be of interest both to OEMs (with recommendations on how to set the User Agent string for the device) and to web site designers/administrators (with recommendations on how to decide to provide either a mobile version, a desktop version, or a large-form-factor touch device version of the site).

Details

With the advent of Android devices with larger form factors, we’ve been evaluating the best way for web sites to provide a UI appropriate for the various Android devices that are now available to consumers. We have received feedback that consumers using larger-form-factor devices often prefer the “full” or “desktop” version of the site over the “mobile” version. Most websites providing “mobile” versions key off of the HTTP User-Agent header field to determine whether to provide the full site or a mobile version.

While large-form-factor Android devices could use “User Agent Spoofing” to provide a desktop User Agent in the HTTP header, we recommend against this. There may be site customizations needed for Android devices (for example changes in the way that mouseover is used) and the site would be unable to provide these customizations if it receives a spoofed User Agent that did not indicate that this was an Android device.

Currently, Android devices provide the following (in addition to standard info) in the User-Agent: "Android", a version number, a device name, a specific build, Webkit version info, and "Mobile". For example, Froyo on a Nexus One has the following User Agent:

Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

The "Mobile" string in the User Agent indicates that this device would prefer a version of the website optimized for Mobile (small form factor devices), if available.

We recommend that manufactures of large-form-factor devices (where the user may prefer the standard web site over a mobile optimized version) remove "Mobile" from the User Agent (and keep the rest of the User Agent as currently implemented). Web sites can then key off "Mobile" in the User Agent to decide on which UI version to present to the device. So a large screen device running Froyo would have a User Agent similar to:

Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; device Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1

Where "device" would be replaced with the actual name of the new device. Sites can continue to use “Android” in the User Agent to optimize for Android specific features and can also key off of “Mobile” to determine which UI to present.

URL: http://android-developers.blogspot.com/2010/12/android-browser-user-agent-issues.html

[Gd] Preview the New Marketplace Billing APIs

| More

Google Apps Developer Blog: Preview the New Marketplace Billing APIs

We’re pleased to announce that yesterday we’ve released a preview of the billing APIs for the Google Apps Marketplace. These APIs are designed to make it easy for web apps to collect subscription payments and manage user licenses and give customers a simple and consistent way to purchase and manage applications for their domains.

Thanks to a group of Marketplace vendors who have made their applications live with the API. As a result, apps like SlideRocket, GQueues, Cohuman, and WikiFYD are now accepting customer transactions using Google Checkout.

Stay tuned for more more news and details about the billing API. In the mean time, we encourage you to read the API documentation and payment policy and consult our FAQ for more information. We’d appreciate your feedback, and you can discuss this and other topics in our Google Apps Marketplace Developer Community group.

Posted by Rui Jiang, Google Apps Marketplace Team

Want to weigh in on this topic? Discuss on Buzz

URL: http://googleappsdeveloper.blogspot.com/2010/12/preview-new-marketplace-billing-apis.html

Thursday, December 16, 2010

[Gd] WebGL now in Beta: here comes the 3D web!

| More

Chromium Blog: WebGL now in Beta: here comes the 3D web!

We’re happy to announce that WebGL is now on by default in Google Chrome’s beta channel, with some shiny new demos to show off what the technology can do.

WebGL is a 3D graphics API for JavaScript that developers can use to create fully 3D web apps. It is based on the OpenGL ES 2.0 API, which should be familiar to many 3D graphics developers. Google, Mozilla, Apple, Opera and graphics hardware vendors have been working together to standardize WebGL for over a year now, and since the spec is just about final at this point, we wanted to get our implementation out there for feedback.

While you may not find much WebGL content on the web, we expect developers to quickly create a lot of content given the power and familiarity of the API. To inspire developers and give users a taste of the kind of apps they can expect in the near future, we’ve worked with a few talented teams to build a few more 3D web apps:

Body Browser, a human anatomy explorer built by a team at Google as a 20% project



Nine Point Five, a 3D earthquake map by Dean McNamee



Music Visualizer, a jukebox that synchronizes 3D graphics to the beat of the music by Jacob Seidelin



You can find these and other demos in the new Chrome Experiments Gallery for WebGL demos. Now that WebGL is enabled in the beta channel, the Chrome Experiments team is looking for your cool WebGL app submissions to show off this slick technology, so don’t forget to submit your cool 3D apps!

Posted by Kenneth Russell, Software Engineer
URL: http://blog.chromium.org/2010/12/webgl-now-in-beta-here-comes-3d-web.html

[Gd] Chrome is Ready for Business

| More

Chromium Blog: Chrome is Ready for Business

Since we launched the Chromium project over two years ago, we’ve been hearing a lot of feedback from IT administrators who want to manage and configure Google Chrome. Of course, we were eager to do what we could to help them get Chrome deployed inside their organizations.

Today, after talking directly to administrators and testing the features extensively with other organizations, we believe the first set of features is ready for prime-time. Both Chrome and Chromium are now manageable through Group Policy objects on Windows, plist/MCX configuration on Mac, and special JSON configuration files on Linux. We polished up the NTLM and Kerberos protocol support, and created a list of supported policies and administrative templates to help administrators deploy. For users needing access to older web applications not yet qualified for Chrome, we also developed Chrome Frame, an Internet Explorer (TM) plug-in that provides Chrome-quality rendering for the broader Web, while defaulting to host rendering for any web applications that still require IE.

No feature is really useful to an administrator without great documentation, so we wrote articles to help admins in the configuration and deployment of both Google Chrome and Chromium. We also documented answers to the top questions testers encountered when deploying.

Even though the first set of features is done, we still have a lot more we’d like to do. We have some interesting ideas that we’re working on, including more policies to manage everything in the content settings and authentication protocols, and interesting new ways to deploy policy cross-platform. But we could use your help: please try out the new features by checking out the documentation, downloading the MSI installer, and filing bugs. And let your administrator know to give it a try and let us know what they think.

Posted by Glenn Wilson, Product Manager and Daniel Clifford, Software Engineer
URL: http://blog.chromium.org/2010/12/chrome-is-ready-for-business.html

[Gd] Break on UI and network events in Chrome Developer Tools

| More

Chromium Blog: Break on UI and network events in Chrome Developer Tools

Chrome Developer Tools' Scripts panel provides a graphical JavaScript debugger and allows you to set breakpoints in the JavaScript source code. However, setting breakpoints in the source code does not always work well, especially when the application is large and you are not familiar with the entire code base. To better support this use case, we are introducing a new set of breakpoints that allow you to break on UI and network events.

Suppose you need to find the piece of code that modifies a specific node in a document. Right-click on that node in the Elements panel and select the appropriate “Break on...” context menu option and you are all set. The debugger will pause JavaScript execution right before the node gets modified next time.



To learn more about DOM breakpoints and other new kinds of breakpoints, visit our Breakpoints Tutorial page.

Posted by Pavel Podivilov, Software Engineer
URL: http://blog.chromium.org/2010/12/break-on-ui-and-network-events-in.html

[Gd] A Year of Extensions

| More

Chromium Blog: A Year of Extensions

It’s hard to believe, but it’s already been a full year since we launched the Google Chrome extensions gallery.

It’s been a busy twelve months:
  • The gallery has grown to over 8,500 extensions and 1,500 themes.
  • A third of Chrome users have at least one extension installed.
  • Over 70 million extensions and themes have been installed.
On the client side, we added features like:
Looking forward, we’re very excited about the Chrome Web Store, where developers will be able to easily sell their apps, extensions, and themes.

And we’re not going to slow down on the features, either. The next Chrome release will add API support for the omnibox and pinned tabs. Beyond that, we’re hard at work on popular requests like network interception and download management APIs, as well as new experimental APIs for sidebars and development tools.

Thanks for all your support over the last year, from bug reports to testing new APIs. It’s been a bit frantic at times, but mostly it’s been fun.

Posted by Aaron Boodman, Software Engineer
URL: http://blog.chromium.org/2010/12/year-of-extensions.html

[Gd] Dev Channel Update

| More

Google Chrome Releases: Dev Channel Update

The Dev channel has been updated to 10.0.612.1 for Mac, Windows and Linux

This release fixes several crashes as well as:

All
  • Updated V8 - 3.0.2.1
  • Updated WebKit - 534.15
Windows
  • Google Cloud Print sign-in interface is now out from behind a flag and can be found in Under the Hood (Issue 60092)
Mac
  • Various minor tweaks to tab overview mode (Issue 50307)
  • 25% less logspew when loading the PDF plugin
  • Sandbox the GPU process (Issue 48607)
  • Experimental popup blocker animation
  • Fix stuck hover state in bookmark button (Issue 27073)
Known Issues
  • There is no space between the Apps- and the Most Visited-Sector (Issue 67073)
  • The expanded Apps-Sector becomes unvisible after clicking on it (Issue 67075)

More details about additional changes are available in the log of all revisions.

You can find out about getting on the Dev channel here: http://dev.chromium.org/getting-involved/dev-channel.



If you find new issues, please let us know by filing a bug at http://code.google.com/p/chromium/issues/entry

Karen Grunberg
Google Chrome
URL: http://googlechromereleases.blogspot.com/2010/12/dev-channel-update_16.html

[Gd] Beta Channel Update

| More

Google Chrome Releases: Beta Channel Update


The Beta channel has been updated to 9.0.597.19 for Windows, Mac, Linux and Chrome Frame.

You can find more details about this release on the Google Chrome Blog.

If you find new issues, please let us know by filing a bug at http://code.google.com/p/chromium/issues/entry

Anthony Laforge
Google Chrome

URL: http://googlechromereleases.blogspot.com/2010/12/beta-channel-update.html

[Gd] Stable Channel Update

| More

Google Chrome Releases: Stable Channel Update


The Chrome Stable channel has been updated to 8.0.552.231 for Mac.  This release contains a stability fix for web forms.

If you find new issues, please let us know by filing a bug. Want to change to another Chrome release channel? Find out how.

Jason Kersey
Google Chrome
URL: http://googlechromereleases.blogspot.com/2010/12/stable-channel-update.html

[Gd] Dev Channel Update

| More

Google Chrome Releases: Dev Channel Update

The Dev channel has been updated to 9.0.597.19 for all platforms.

All
  • This was primarily a crash fix release, in particular resolving a sync related crash issue (Issue: 57898).
More details about additional changes are available in the svn log of all revision.

You can find out about getting on the Dev channel here: http://dev.chromium.org/getting-involved/dev-channel.

If you find new issues, please let us know by filing a bug at http://code.google.com/p/chromium/issues/entry

Anthony Laforge
Google Chrome
URL: http://googlechromereleases.blogspot.com/2010/12/dev-channel-update_13.html

[Gd] Stable, Beta Channel Updates

| More

Google Chrome Releases: Stable, Beta Channel Updates

The Chrome Stable and Beta channels have been updated to 8.0.552.224 for all platforms.  Chrome OS has also been updated to 8.0.552.343. These releases contain the security fixes listed below, along with stability and other improvements.

Security fixes and rewards:
Please see the Chromium security page for more detail. Note that the referenced bugs may be kept private until a majority of our users are up to date with the fix.
  • [64-bit Linux only] [56449] High Bad validation for message deserialization on 64-bit builds. Credit to Lei Zhang of the Chromium development community.
  • [60761] Medium Bad extension can cause browser crash in tab handling. Credit to kuzzcc.
  • [63529] Low Browser crash with NULL pointer in web worker handling. Credit to Nathan Weizenbaum of Google.
  • [$1000] [63866] Medium Out-of-bounds read in CSS parsing. Credit to Chris Rohlf.
  • [$1000] [64959] High Stale pointers in cursor handling. Credit to Sławomir Błażek and Sergey Glazunov.
Full details about the Chrome changes are available in the SVN revision log. If you find new issues, please let us know by filing a bug. Want to change to another Chrome release channel? Find out how.

Jason Kersey
Google Chrome
URL: http://googlechromereleases.blogspot.com/2010/12/stable-beta-channel-updates_13.html

Wednesday, December 15, 2010

[Gd] WindowBuilder becomes new open source project with major code contribution to Eclipse Foundation

| More

Google Code Blog: WindowBuilder becomes new open source project with major code contribution to Eclipse Foundation

When Google acquired Instantiations in August 2010, everyone knew about our Java Eclipse products. Shortly after we joined, we talked about how best to help developers now that we are part of Google. We have always wanted to get these tools in more developers’ hands. So, back in September we decided to give them away for free! The community response has been fantastic. With that done, we asked ourselves, how could we make a good thing even better? How about by open sourcing the code and creating two new Eclipse projects!

Today we are announcing Google’s donation of the source code and IP for two of these products to the open source community through the Eclipse Foundation. This donation includes WindowBuilder, the leading Eclipse Java GUI Designer, and CodePro Profiler, which identifies Java code performance issues. Specifically, the WindowBuilder Engine and designers for SWT and Swing. All in all, this is a value of more than $5 million dollars worth of code and IP.

The Eclipse Foundation’s Executive Director, Mike Milinkovich, states that, “this is clearly a significant new project announcement, and very good news for Java developers using Eclipse. It has been impressive to see the continued growth and popularity of WindowBuilder, as this product has always filled a much needed gap in the Eclipse offerings. We look forward to it appearing in an Eclipse release soon. We’re very pleased with Google’s generous support of Eclipse, and the Java developer community around the world.”

One of the exciting aspects of innovating in the open source arena is that customers benefit from a full community. We are very excited to see the diverse collection of companies and individuals that have already expressed an interest in contributing to these projects. Commercial level support is important to many customers. Genuitec, makers of MyEclipse, intends to offer commercial support for the various WindowBuilder based products including the SWT, Swing Designer and even the GWT Designer from Google. Please sign up on the Genuitec site for more information. Similarly, OnPositive intends to offer commercial support for CodePro Profiler, as well as lead as the committers on the Eclipse Community Project. Sign up on the OnPositive site for more information.

"Genuitec is pleased to offer commercial support for WindowBuilder-based products - Swing, SWT and GWT - in early 2011 for companies who wish to continue a paid support contract once their Google support expires. We've been involved with the Eclipse Foundation since the beginning, so we are very familiar with these products. Thus, providing commercial support for this product line is a natural fit for us," said Maher Masri, President of Genuitec.

“Over the years OnPositive has built up unique experience with the CodePro Profiler and we are excited to offer commercial support for it. Google’s donation ensures that Java developers can build faster applications,” said Pavel Petrochenko, President of OnPositive.

WindowBuilder
WindowBuilder is regarded as the leading GUI builder in the Java community (winning the award for Best Commercial Eclipse Tool in 2009). It includes powerful functionality for creating user interfaces based on the popular Swing, SWT (Standard Widget Toolkit), GWT (Google Web Toolkit), RCP and XWT UI frameworks.

CodePro Profiler
CodePro Profiler is an Eclipse-based Java application profiling tool that helps developers identify performance issues early in the development cycle and find CPU and algorithmic bottlenecks, memory leaks, threading issues, and other concurrency-related problems that can slow down an application or cause it to hang.

Both WindowBuilder and CodePro Profiler will become Eclipse projects in the first half of 2011. Once each one is set up as a project and available for download from the Eclipse site, the products will be accessible to use as open source code under the the standard Eclipse license. I am looking forward to leading the WindowBuilder project.

If you have any questions, you can learn more at this FAQ or we look forward to hearing from you on the forums.

By Eric Clayberg and the Google Developer Tools Team
URL: http://googlecode.blogspot.com/2010/12/windowbuilder-becomes-new-open-source.html

[Gd] Announcing apache-extras.org

| More

Google Code Blog: Announcing apache-extras.org

The Apache Software Foundation (ASF) has had a profound influence on everything I’ve worked on over the last decade, and a new partnership with them is a great opportunity for saying “thanks” and giving back. Today we’re announcing the launch of apache-extras.org. Much like our launch of eclipselabs.org earlier this year, we’re creating a separate instance of Project Hosting specifically for ASF-related projects to congregate around.



Back in 2000, when the Subversion project was in its nascent stages, we first few committers were all made members of the APR (Apache Portable Runtime) project; Subversion and Apache HTTPD shared this common portability layer. Over the following years, I was pulled ever closer to the workings of the ASF -- attending Apachecon conventions and meeting members from other ASF projects. And because the Subversion project started out with a significant number of developers from the Apache community, its own processes came to mimic the same classic consensus-driven culture that the ASF champions.

Years after that, Google Code’s Project Hosting service was also started by ASF members working at Google. So it’s not surprise that those of us who still work on the product share the ASF’s core philosophy: that open source projects aren’t just buckets of code, but are all about people. A codebase without a living, breathing community is a dead project.

So what can we do, as a company, to support open source communities? Providing hosting infrastructure certainly helps, but we can even go a step further. Successful open source software projects are rarely islands of development; larger projects tend to develop ecosystems of related but “unofficial” projects around them. It’s sometimes hard to identify these sub-communities, and so we can help by bolstering their presence: give them a clearer sense of identity and location by inviting them to live under a common banner.

This is why we’re excited to launch apache-extras.org today. By working under a common logo and domain name, we hope these projects can gain more visibility and grow into their own thriving community.

And to the ASF: a great big “thanks” for doing what you do.

[If you already have a project on Google Code and would like to migrate it to the apache-extras instance, you can fill out this request form.]

By Ben Collins-Sussman, Engineering Manager (and ASF Member!)
URL: http://googlecode.blogspot.com/2010/12/announcing-apache-extrasorg.html

[Gd] More power to metadata

| More

Google Custom Search: More power to metadata

Last year, we introduced structured custom search. If you mark up your pages with custom metadata attributes, you can render them with your search results, and also restrict results based on specific attribute values.

Today, we’re happy to be releasing 2 additional metadata features:
  • Sort by Attribute: order search results based on values of specific attributes
  • Restrict to Range: only return search results with attributes within a defined range
For example, if you mark up your pages with custom metadata attributes, like dates, ratings and prices, you can order your search results by these attributes, such as sort by date, bias towards highly rated items, or restrict to a specific price range.

SignonSanDiego.com, a California news portal, uses the new Sort by Attribute feature in conjunction with the Google Custom Search Element to render recent stories with photos in the results:


SignOnSanDiego uses the new sort operator. The sort operator comes in several flavors, from a mild bias to strict sort ordering; SignonSanDiego.com uses a strong bias towards the publication date to ensure readers see not only the most relevant, but also timely news.

To implement the new features, you must mark up the pages you are searching with the attributes you want to use. You can do this via PageMaps; the PageMap used by SignOnSanDiego looks like this:

<PageMap>
<DataObject type="date">
<Attribute name="displaydate" value="Wednesday, August 25, 2010"/>
<Attribute name="sdate" value="20100825"/>
</DataObject>

<DataObject type="thumbnail">
<Attribute name="src" value="http://media.signonsandiego.com/img/photos/2010/08/25/635a63e9-f4a1-45aa-835a-ebee666b82e0news.ap.org_t100.jpg"/>
<Attribute name="width" value="100"/>
</DataObject>
</PageMap>

SignOnSanDiego’s publication date is stored in the DataObject of type ‘date’ as the Attribute named ‘sdate’; to specify this field you combine the type and name into a single field ‘date-sdate’. To apply Sort by Attribute over date-sdate, you set the sort option in the search code for the Element as shown below:

...
var options = {};
options[google.search.Search.RESTRICT_EXTENDED_ARGS] = {'sort': 'date-sdate:d:s'};
customSearchControl = new google.search.CustomSearchControl('000525776413497593842:aooj-2z_jjm', options);
...
The sort option {'sort': 'date-sdate:d:s'} takes a combined attribute name, like ‘date-sdate’, and several optional parameters separated by colons. In this case, SignOnSanDiego has specified sorting in descending order (d) using the strong bias (s) flavor of the operator. Without qualifiers, the default is to use a descending order with a hard sort. You can also choose to sort in ascending order (a), or use a weak sort flavor (w) or explicitly specify a strict hard sort (h).

The sort option also enables the Restrict to Range feature. For example a site like SignOnSanDiego might enable users to search for articles published in the last week. To implement this, you can set the sort options to “date-sdate:r:20101206:20101213”. This again uses the combined attribute name (date-sdate), but instead restricts to the range (r) of specified values (20101206:20101213). Multiple operators can be combined in the sort option using a comma. For example, to combine SignOnSanDiego’s strong bias with the above date restriction, you would specify “date-sdate:d:s,date-sdate:r:20101206:20101213”.

The Sort by Attribute and Restrict to Range features are a powerful new set of options that gives you a great deal of control over your search application, allowing you to use custom attributes to order and restrict your search results in very powerful ways for your users. For example, a movie review site can display the most highly rated movies released within the last week by combining distinct attributes in the sort operator, e.g., “review-rating,release-date:r:20101206:20101213”.

A few more tips:
1. With custom data rendering, you can customize your results even further.
2. You can always validate your metadata markup with the use of the rich snippet preview tool.
3. If you are not using the Element, you can always use the same sort options in the sort URL parameter, e.g., “&sort=date-sdate”.

For more details on these new features, please refer to our documentation. As always, we’re looking to you for feedback.

Posted by: Anthony Francis and Roger Wang, Software Engineers
URL: http://googlecustomsearch.blogspot.com/2010/12/more-power-to-metadata.html

Tuesday, December 14, 2010

[Gd] Analytics for Android Apps

| More

Android Developers Blog: Analytics for Android Apps

[This post is by Alexander Lucas, an Android Developer Advocate bent on saving the world 5 minutes. —Tim Bray]

With the addition of custom variables to the Mobile Analytics SDK for Android, it strikes me as a good time to cover something many of you might not have known was possible — using Google Analytics to easily track app usage. Using the mobile SDK is a handy way to get real data on how users interact with your Android apps. So today I'm going to explain how to track usage of your application with Google Analytics.

Prereqs Ahoy!

Before you take off running with this shiny new toy, there’s a few things you’ll need to set up first:

  • Download the mobile SDK. Download and installation instructions are available in the getting started section of the Mobile SDK docs, but the summarized version is:

    • Download the zip file from the download page

    • Put the libGoogleAnalytics.jar file in your project’s /libs directory

    • Be sure the following lines are in your AndroidManifest.XML file:
      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  • You’re going to need a Google Analytics account. Go to google.com/analytics and set up an account if you don’t already have one. Then set up a profile for your Android application. When you’re done you’ll see a javascript snippet to insert into your “site”. Copy the part that looks like UA-XXXXXXX-X. You’ll use this in the Android application to tell Analytics which profile the data is being sent for.

Get Tracking

Previous Google Analytics users are going to find a lot of this familiar. In fact, we’ve made a point of keeping the interface as familiar as possible.

First, get your tracker object, and initialize it using the UA code for the Analytics profile you want to track. It makes the most sense to do this in the onCreate() method for your activity main, so it only fires when your application starts up.

GoogleAnalyticsTracker tracker;
protected void onCreate(Bundle savedInstanceState) {
...
tracker = GoogleAnalyticsTracker.getInstance();
tracker.start(“UA-1234-1”, this);

}

The mobile SDK provides support for the 3 main types of data sent to the Google Analytics servers: Pageviews, events, and custom variables.

Pageviews

A pageview is a standard means to measure traffic volume to a traditional website. Given that this is going into an Android app and not a website, it’s going to be up to you to decide what a “pageview” means. Depending on the type of app, each Activity or different views within the same activity (for instance, different tabs within a TabActivity) could count as a pageview.

Whenever you want to trigger a pageview, call the trackPageView() method. It only takes one parameter, the URL you want a pageview counted towards.

tracker.trackPageView("/HomeScreen");

Pageviews make the most sense as full screen transitions, which in most cases will mean “one pageview per Activity.” Therefor it makes the most sense to put the call to trackPageView in the onCreate() method for each activity in your application. An exception would be if you were using a TabActivity, or other scenario where there were multiple full-screen transitions which all occurred within the same Activity, and conceptually mapped to seperate full-screen “pages” being viewed.

Events

In Analytics, events are designed to track user interaction to that doesn’t map to pageviews, like hitting play/pause/stop in a multimedia app. This maps very well to Android usage — Any form of interaction, from hitting certain buttons to adding/removing data from the datastore, can be tracked using Events.

Events are a little more complicated than pageviews, but just slightly. Instead of 1 parameter, you have 4: Category, Action, Label (optional), Value (optional).

To see how to make use of these, let’s imagine you had a media player application, and wanted to track how many times play, pause, and stop were clicked. The code would look like this:

   playButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
...
tracker.trackEvent(
"Media Player", // Category
"Click", // Action
"Play", // Label
0); // Value
}
});

pauseButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
...
tracker.trackEvent(
"Media Player", // Category
"Click", // Action
"Pause", // Label
0); // Value
});

stopEventButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
...
tracker.trackEvent(
"Media Player", // Category
"Click", // Action
"Stop", // Label
currentVideo.getPositionInSeconds()); // Value
});

myMediaPlayer.setFinishedListener(new FinishedListener() {
@Override
public void onFinished(View v) {
...
tracker.trackEvent(
"Media Player", // Category
"Video Finished", // Action
"Stop", // Label
currentVideo.getLengthInSeconds()); // Value
});

Remember that in the Google Analytics web interface, this data is displayed hierarchically — For instance, if you click on Categories in the left nav, and then on “Media Player”, you’ll see a list of all the different possible values of “Action” which have happened in the “media Player” category. Clicking on “Click” will show all the labels which were sent in the Media Player category with an action of “Click”.

The 4th parameter, “value”, is optional, and behaves differently from the others. It’s meant to be cumulative; In this example, I’m sending the amount of video watched when a video is either stopped or allowed to finish. This is aggregated server-side, and when I go to look at my data I’ll be able to see the total time people have spent watching videos using my application.

Custom Variables

The new hotness! Custom variables are name-value pair tags that you can insert in your tracking code in order to refine Google Analytics tracking. The easiest way to think of this is as meta-data accompanying your pageviews and events. Using this metadata, it becomes easy to split off and look at segments of your data, much the same way you use labels in Gmail. One Android-specific example would be to have a “AppType” status with “Full” or “Lite” depending on whether the user has the full version of the app or not. You could then use the Analytics web interface to look at only the “Lite” users, and see how their usage / userbase differs from the “Full” segment. Custom variables are a ridiculously powerful analytical tool, but they’re also a deep topic. I heartily recommend giving the docs a once-through before implementing them in your Android application. Especially make sure to read the section on scoping. Twice. I’m mean it... I’ll wait.

There are 4 parameters in a custom variable: Index (1 to 5 inclusive), Name, Value, and Scope (Optional, defaults to Page Scope).

The place in your code where setCustomVar() will be called depends largely on what scope that variable will be:

  • Visitor scope: Call once the first time your application is run on a device. Don’t create any custom variables at the same index, or they will overwrite the first one. Useful for sending data about which version of the app is being used, what kind of phone, lite vs full version of the app, or anything that won’t change during the lifetime of the installation of that application.

  • Session scope: Call once at the beginning of every Activity startup. Will apply to all pageviews and events for the lifecycle of the activity, unless a different custom variable is created at the same index.

  • Page scope: Call right before trackEvent or trackPageView that the custom variable should apply to, every time that method is called. If no scope is specified, this is the default.

The call to set a custom variable will look like the following:

// Scopes are encoded to integers:  Visitor=1, Session=2, Page=3
tracker.setCustomVar(1, "Navigation type", "Button click", 3);

Choose a Dispatch Mode

In order to optimize for battery life, a request isn’t actually sent out to the server every time you fire a pageview or custom variable. Instead, all the pageviews, events, and their associated custom variables are stored in a local SQLITE database until they’re dispatched as a group to the server. You can set this up to happen one of two ways: Either have the dispatch occur automatically every n seconds, or manually when you call “dispatch” in code. The mode is chosen when you call the start method on your tracker.

Manual dispatch looks like this:

// No time increment sent as a parameter
tracker.start(“UA-1234-1”, this);

// Call this when you want to send the entire event queue to the server
tracker.dispatch();

The timed automatic dispatch looks similar, but sends an extra parameter (the number of seconds between dispatches). In timed dispatch, you never have to manually call dispatch.

// Dispatch all queued pagevies/events every 300 seconds (5 minutes)
tracker.start("UA-YOUR-ACCOUNT-HERE", 300, this);

It’s important to remember that Google Analytics uses the timestamp for when it receives your data, not when the actual pageview/event occurred. This can potentially lead to inaccurate Analytics data, since events can be sent on different days than when they occurred, so take care to dispatch regularly.

The end result

Let’s go back to that onCreate() method we used to instantiate the tracker earlier, and see what it looks like with all the pieces in place:

GoogleAnalyticsTracker tracker;

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

tracker = GoogleAnalyticsTracker.getInstance();
tracker.start(“UA-1234-1”, this);

if(isFirstTimeRunningApplication()) {
tracker.setCustomVar(1, “App Type”, “Demo”, 1);
}
tracker.trackPageView("/HomeScreen");


}

How to look at all this data

There are two ways you can approach this. First, Google Analytics has a pretty snazzy web interface, which does a very good job of surfacing useful information for you. If you’re new to Analytics and don’t really know what you’re looking for yet, the web interface is a great way to explore your data and understand your users.

If you already have a strong idea of the questions you want to ask (app usage across versions of the Android platform, growth rates, time-in-app per demo user vs full user, how many people beat level 3 on their first try, etc), and just want to automate the asking, Google Analytics also has a swanky data export API, with client libraries to facilitate the querying of your data in Java, Python, JavaScript, and C#.

Abiding by the TOS

Google Analytics comes with its own TOS, and it’s important to read and abide by it. The important bit, especially since this will be used inside Android applications, is that you cannot send personally identifying information to Analytics servers. This is a big deal. It means, for instance, that a visitor-level custom variable cannot contain a phone number, first name, or email address. Less intuitively, but still important, it means that if this application is a client to a web application (say, CRM software or a shopping site), you also cannot store information in Analytics which can be combined with your own backend software to identify the user, such as user ID or a transaction ID identical to the one stored on your web backend.

URL: http://android-developers.blogspot.com/2010/12/analytics-for-android-apps.html

[Gd] Even more dynamic ads: Announcing Ad parameters enhancements

| More

AdWords API Blog: Even more dynamic ads: Announcing Ad parameters enhancements

After we launched version v2009 of the AdWords API we announced the addition of a new feature called Ad parameters. Since then, many of you have used Ad parameters to insert dynamic numeric values into your text ads while retaining the ads’ historical performance information. We’ve heard feedback from you about functionality you’d like to see included in Ad parameters so we've released some enhancements to the feature.

Here’s what’s new:
  • You can now dynamically insert the percent sign (%) for values that include percentage discounts such as “Mobile Phone Accessories Now 20% Off”
  • We’ve added support for additional currency symbols and codes so you can include the currency symbol in the dynamic parameter to create ad text like “Flights to London Starting at €250”
  • You’re now able to use the forward slash character (/) for dynamic replacements with fraction discounts like “1/2 Off Our Entire Inventory Only This Weekend”
  • The plus (+) and minus (-) signs are now supported so you can advertise “NASDAQ +20 Points Today, Speak With a Broker Now.”
We hope these enhancements enable you to create even more dynamic ads with Ad parameters. Please continue to share your feedback and questions with us on the developer forum.

--Jason Shafton, Product Marketing Manager
URL: http://adwordsapi.blogspot.com/2010/12/even-more-dynamic-ads-announcing-ad.html

[Gd] Test Sizes

| More

Google Testing Blog: Test Sizes

by Simon Stewart

What do you call a test that tests your application through its UI? An end-to-end test? A functional test? A system test? A selenium test? I’ve heard all them, and more. I reckon you have too. Tests running against less of the stack? The same equally frustrating inconsistency. Just what, exactly, is an integration test? A unit test? How do we name these things?

Gah!

It can be hard to persuade your own team to settle on a shared understanding of what each name actually means. The challenge increases when you encounter people from another team or project who are using different terms than you. More (less?) amusingly, you and that other team may be using the same term for different test types. “Oh! That kind of integration test?” Two teams separated by a common jargon.

Double gah!

The problem with naming test types is that the names tend to rely on a shared understanding of what a particular phrase means. That leaves plenty of room for fuzzy definitions and confusion. There has to be a better way. Personally, I like what we do here at Google and I thought I’d share that with you.

Googlers like to make decisions based on data, rather than just relying on gut instinct or something that can’t be measured and assessed. Over time we’ve come to agree on a set of data-driven naming conventions for our tests. We call them “Small”, “Medium” and “Large” tests. They differ like so:
FeatureSmallMediumLarge
Network accessNolocalhost onlyYes
DatabaseNoYesYes
File system accessNoYesYes
Use external systemsNoDiscouragedYes
Multiple threadsNoYesYes
Sleep statementsNoYesYes
System propertiesNoYesYes
Time limit (seconds)60300900+

Going into the pros and cons of each type of test is a whole other blog entry, but it should be obvious that each type of test fulfills a specific role. It should also be obvious that this doesn’t cover every possible type of test that might be run, but it certainly covers most of the major types that a project will run.

A Small test equates neatly to a unit test, a Large test to an end-to-end or system test and a Medium test to tests that ensure that two tiers in an application can communicate properly (often called an integration test).

The major advantage that these test definitions have is that it’s possible to get the tests to police these limits. For example, in Java it’s easy to install a security manager for use with a test suite (perhaps using @BeforeClass) that is configured for a particular test size and disallows certain activities. Because we use a simple Java annotation to indicate the size of the test (with no annotation meaning it’s a Small test as that’s the common case), it’s a breeze to collect all the tests of a particular size into a test suite.

We place other constraints, which are harder to define, around the tests. These include a requirement that tests can be run in any order (they frequently are!) which in turn means that tests need high isolation --- you can’t rely on some other test leaving data behind. That’s sometimes inconvenient, but it makes it significantly easier to run our tests in parallel. The end result: we can build test suites easily, and run them consistently and as as fast as possible.

Not “gah!” at all.
URL: http://googletesting.blogspot.com/2010/12/test-sizes.html