<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="https://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:georss='http://www.georss.org/georss' xmlns:thr='http://purl.org/syndication/thread/1.0' xmlns:blogger='http://schemas.google.com/blogger/2008'><id>tag:blogger.com,1999:blog-699154927936492178</id><updated>2023-03-16T02:42:35.238-07:00</updated><title type='text'>Googland [dev]</title><subtitle type='html'>&lt;!-- google_ad_section_start --&gt;News from Google for developers&lt;!-- google_ad_section_end --&gt;
&lt;br /&gt;Syndicated posts from all official Google development blogs</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default'/><link rel='alternate' type='text/html' href='http://googland-dev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default?start-index=26&amp;max-results=25'/><author><name>Onestone</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><generator version='7.00' uri='https://www.blogger.com'>Blogger</generator><openSearch:totalResults>5429</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-1371503151629485052</id><published>2013-07-01T19:04:00.001-07:00</published><updated>2013-07-01T19:04:33.604-07:00</updated><title type='text'>[Gd] Easier navigation without GPS</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlewebmastercentral.blogspot.com/"&gt;Official Google Webmaster Central Blog&lt;/a&gt;: &lt;a href="http://googlewebmastercentral.blogspot.com/2013/07/easier-navigation-without-gps.html"&gt;Easier navigation without GPS&lt;/a&gt;&lt;/h4&gt; &lt;div dir="ltr" style="text-align:left"&gt;Webmaster level: All&lt;br&gt;&lt;br&gt;Today we’re unveiling a shiny new navigation in Webmaster Tools. The update will make the features you already use easier to find, as well as unveil some exciting additions.&lt;br&gt;&lt;h4&gt;Navigation reflects how search works&lt;/h4&gt;We’ve organized the Webmaster Tools features in groups that match the &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=70897"&gt;stages of search&lt;/a&gt;: &lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Crawl&lt;/strong&gt;: see information about how we discover and crawl your content. Here you will find &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=35253"&gt;crawl stats&lt;/a&gt;, &lt;a href="http://support.google.com/webmasters/bin/topic.py?topic=2446029"&gt;crawl errors&lt;/a&gt;, any URLs you’ve blocked from crawling, &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=183669"&gt;Sitemaps&lt;/a&gt;, &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=1235687"&gt;URL parameters&lt;/a&gt;, and the &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=158587"&gt;Fetch as Google&lt;/a&gt; feature.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Google Index&lt;/strong&gt;: keep track of how many of your pages are in Google’s index and how we understand their content: you can monitor the overall indexed counts for your site (&lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=2642366"&gt;Index Status&lt;/a&gt;), see what keywords we’ve found on your pages (&lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=35255"&gt;Content Keywords&lt;/a&gt;), or request to &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=1663416"&gt;remove URLs&lt;/a&gt; from the search results.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Search Traffic&lt;/strong&gt;: check how your pages are doing in the search results — how people find your site (&lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=35252"&gt;Search Queries&lt;/a&gt;), who’s recommended your site (&lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=55281"&gt;Links to Your Site&lt;/a&gt;), and see a sample of pages from your site that have incoming links from other internal pages.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Search Appearance&lt;/strong&gt;: mark up your pages to help Google understand your content better during indexing and potentially influence how your pages appear in our search results. This includes the &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=2650907"&gt;Structured Data dashboard&lt;/a&gt;, &lt;a href="https://support.google.com/webmasters/bin/answer.py?answer=2692911"&gt;Data Highlighter&lt;/a&gt;, &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=47334"&gt;Sitelinks&lt;/a&gt;, and &lt;a href="http://support.google.com/webmasters/bin/answer.py?answer=80407"&gt;HTML Improvements&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/-HhqDEUs-z2k/Ub7q0_6GiSI/AAAAAAAAALA/NNYfdULLQF8/s1600/WMT-updated-nav.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-HhqDEUs-z2k/Ub7q0_6GiSI/AAAAAAAAALA/NNYfdULLQF8/s480/WMT-updated-nav.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;h4&gt;Account-level administrative tasks now accessible from the Settings menu&lt;/h4&gt;Account-level admin tasks such as setting User permissions, Site Settings, and Change of Address are now grouped under the gear icon in the top right corner so they’re always accessible to you:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/-yMRF6cETHVE/Ub83W_Y7FlI/AAAAAAAAALo/g8XqgiYFKVA/s1600/Settings-menu.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-yMRF6cETHVE/Ub83W_Y7FlI/AAAAAAAAALo/g8XqgiYFKVA/s480/Settings-menu.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;This is the list of items as visible to site owners, “full” or “restricted” users will see a subset of these options. For example, if you&amp;#39;re a “restricted” user for a site, the &amp;quot;Users &amp;amp; Site Owners&amp;quot; menu item will not appear.&lt;br&gt;&lt;h4&gt;New Search Appearance pop-up&lt;/h4&gt;Beginner webmasters will appreciate the new &lt;a href="https://support.google.com/webmasters/answer/3187759"&gt;Search Appearance pop-up&lt;/a&gt;, which can be used to visualize how your site may appear in search and learn more about the content or structure changes that may help to influence each element:&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://2.bp.blogspot.com/-WB3Kr60bthU/Ub859zh9b5I/AAAAAAAAAL4/Nr05c2ySDPE/s1600/Search-appearance-popup.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-WB3Kr60bthU/Ub859zh9b5I/AAAAAAAAAL4/Nr05c2ySDPE/s480/Search-appearance-popup.png"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;p&gt;To access the pop-up window, click on the question mark  icon next to the Search Appearance menu in the side navigation. &lt;br&gt;&lt;/p&gt;&lt;p&gt;It includes the essential search result elements like title, snippet and URL, as well as optional elements such as sitelinks, breadcrumbs, search within a site, event and product rich snippets, and authorship information.&lt;br&gt;&lt;/p&gt;&lt;p&gt;We hope the new navigation makes it easier for you to make the most of Webmaster Tools. As always, if you have additional questions, feel free to post in the &lt;a href="https://productforums.google.com/forum/#!forum/webmasters"&gt;Webmaster Help Forum&lt;/a&gt;.&lt;/p&gt;&lt;br&gt;&lt;br&gt;&lt;span&gt;Posted by &lt;a href="https://plus.google.com/+MariyaMoeva/posts/" rel="author"&gt;Mariya Moeva&lt;/a&gt;, Webmaster Trends Analyst&lt;/span&gt;&lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://googlewebmastercentral.blogspot.com/2013/07/easier-navigation-without-gps.html"&gt;http://googlewebmastercentral.blogspot.com/2013/07/easier-navigation-without-gps.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/1371503151629485052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=1371503151629485052' title='106 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/1371503151629485052'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/1371503151629485052'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/07/gd-easier-navigation-without-gps.html' title='[Gd] Easier navigation without GPS'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-HhqDEUs-z2k/Ub7q0_6GiSI/AAAAAAAAALA/NNYfdULLQF8/s72-c/WMT-updated-nav.png' height='72' width='72'/><thr:total>106</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-8045202408133553673</id><published>2013-07-01T07:02:00.001-07:00</published><updated>2013-07-01T07:02:53.150-07:00</updated><title type='text'>[Gd] Google App Engine takes the pain out of sending iOS push
notifications</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlecloudplatform.blogspot.com/"&gt;Cloud Platform Blog&lt;/a&gt;: &lt;a href="http://googlecloudplatform.blogspot.com/2013/07/google-app-engine-takes-pain-out-of-sending-ios-push-notifications.html"&gt;Google App Engine takes the pain out of sending iOS push notifications&lt;/a&gt;&lt;/h4&gt; &lt;i&gt;Delivering scalable, reliable mobile push notifications when hundreds of thousands of users have installed your app on their phones can be a major headache. Fortunately, Google App Engine’s support for sockets and accessible but powerful queues makes it easy to quickly build a mobile backend that can reliably scale to huge numbers of devices.&lt;/i&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;table style="border-collapse:collapse;border:none;width:624px"&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt; &lt;td&gt;&lt;b&gt;Get the code!&lt;/b&gt;&lt;br&gt;&lt;br /&gt;We’ve created a simple push notification application to help you get started in our Github repository that uses all of the techniques described below. &lt;a href="https://github.com/GoogleCloudPlatform/solutions-ios-push-notification-sample-backend-java" style="text-decoration:none"&gt;Download or fork the source&lt;/a&gt; code to get started.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br&gt;&lt;br /&gt;Push notifications are the little pings your phone gives you to let you know that you’ve got a new message, your friend is waiting for you to take your turn on the latest game or that band you like has just announced a concert in your town. As a developer, push notifications give you a new dimension to engage with your users in real time, any time, regardless as whether they have your app open or even if they have their phone in their hand.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;On iOS devices, like iPhones and iPads, push notifications are handled by Apple’s Push Notification Service (APNS). APNS is hosted by Apple, and acts as a bridge between your server and your mobile clients. In brief, here’s how it works:&lt;br&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Your mobile application securely registers itself with Apple to be able to receive push notifications, usually when the app is being launched the first time. It receives a device token, which the mobile application passes to your mobile backend.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Your server opens a secure connection to APNS, and when an event occurs that requires a push notification - your server sends a short message including the device token of the device that should receive the message to APNS. APNS will then handle the ‘last-mile delivery’ of the notification to the device.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;Although this seems relatively trivial, there are a few important things to consider when implementing push notifications in your application.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;Connection pooling with backend instances and pull queues&lt;/b&gt;&lt;br&gt;&lt;br /&gt;If you have a popular application you can quickly end up generating a large number of push notifications - even after a single event. &lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;For both performance reasons, and  should avoid opening a large number of secure connections to APNS, but rather simply hold a few connections open and funnel any push notifications your applications generate through those. This approach is commonly called Connection Pooling.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Fortunately, App Engine provides the building blocks for scalable connection pooling. Resident &lt;a href="https://developers.google.com/appengine/docs/java/backends/overview"&gt;backend instances&lt;/a&gt; are long running App Engine containers that can be used to as workers to hold open APNS notifications for sending notifications. These workers can then &lt;a href="https://developers.google.com/appengine/docs/java/taskqueue/overview-pull"&gt;monitor a pull queue&lt;/a&gt; that can signal to the workers when a notification should be sent. When an event occurs in another component of your application that should trigger a push notification (say an action triggered by your mobile API in a frontend instance), other components of your application can simply enqueue a task on the pull queue.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Each worker can then periodically read from a pull queue to see if any notifications need to be sent by the application, and if there are, lease a block of them, send them via the previously established APNS connection, and delete them.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://4.bp.blogspot.com/-FjJR1w05Xu4/UdDlvKVao5I/AAAAAAAAAEY/t9tY9ZI7C_A/s900/cloud+blog+1.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" height="312" src="http://4.bp.blogspot.com/-FjJR1w05Xu4/UdDlvKVao5I/AAAAAAAAAEY/t9tY9ZI7C_A/s400/cloud+blog+1.png" width="400"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;As well as saving on opening many connections to APNS, this approach also improves the reliability of the app. If a worker is unable to deliver a message to APNS for some reason (e.g., because the TCP connection was severed), App Engine’s pull queues will release the lease on the task and allow another worker to retry it. You can also scale the solution simply by adding additional workers that read off the same pull queue.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;Sending bulk notifications with push queues and cursors&lt;/b&gt;&lt;br&gt;&lt;br /&gt;You may find a need to send a push notification to a large number of devices at once. This requires a query to your database/datastore to find the list of relevant device tokens and then enqueuing a request onto the pull queue described above that includes the message you want to send along with the relevant device token.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;If you were to attempt this in a single request, you could quickly run into problems as your list of device IDs becomes large. A simple but elegant solution is to use push queues and (if you’re storing device IDs in the App Engine datastore) query cursors.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;A &lt;a href="https://developers.google.com/appengine/docs/java/datastore/queries#Query_Cursors"&gt;query cursor &lt;/a&gt;is a token that can be used to iterate over a given a given query result set in small batches. A query cursor is an opaque string marking the index position of the last result retrieved. The application can then use the cursor as the starting point for a subsequent retrieval operation, to obtain the next batch of results from the point where the previous retrieval ended&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Query cursors can be combined with App Engine push queues. A &lt;a href="https://developers.google.com/appengine/docs/java/taskqueue/overview-push"&gt;push queue&lt;/a&gt; handler is written to take a query and an optional cursor. The push queue handler then executes the query with a small result limit (say 100 entities), and for each result adds a task to the pull queue described above. If the result of the query also includes a cursor then this indicates there are still unretrieved entities in the query. Once the task handler has cycled through the results it has retrieved, if it has a new cursor, then it can initiate a new push task with that cursor’s value.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;Connecting to APNS&lt;/b&gt;&lt;br&gt;&lt;br /&gt;While you can use App Engine’s outbound sockets support to talk to APNS from &lt;a href="https://developers.google.com/appengine/docs/java/sockets/overview"&gt;Java&lt;/a&gt; or &lt;a href="https://developers.google.com/appengine/docs/python/sockets/overview"&gt;Python&lt;/a&gt; directly, popular 3rd party libraries such as &lt;a href="https://code.google.com/p/javapns/"&gt;JavaPNS&lt;/a&gt; also work well, and often provide a cleaner higher level interface for sending notifications.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;Putting it all together&lt;/b&gt;&lt;br&gt;&lt;br /&gt;Although this sounds like a lot, putting all of this together on App Engine is remarkably straightforward, requiring only a simple batch query queue handler and notification worker. Everything else is taken care of by App Engine’s robust queueing and datatore APIs.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img src="https://lh3.googleusercontent.com/lhR4FGOW0OHI9qanjZ1w8FKj9RvcVYGOFQ0sb8aW7_w_w79Ej0IsoJvQPIQToraUIut-a8jWxTy1sqYZIpVYZmA6tUNRburUQRLyRV_4XKas_7fZy6aT1bcv"&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;If you’re feeling ready to add Push Notifications to your app, we’ve got some great resources to help you get started.&lt;br&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/GoogleCloudPlatform/solutions-ios-push-notification-sample-backend-java"&gt;Download the source&lt;/a&gt; to our (Java) iOS push notification example on Github&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="https://cloud-google.googlegoro.com/en/resources/articles/ios-push-notifications.html"&gt;Read our in depth Cloud solutions paper&lt;/a&gt; on Orchestrating iOS Push Notifications, which covers this architecture (and more) in greater detail&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Read more about push queues (&lt;a href="https://developers.google.com/appengine/docs/python/taskqueue/overview-push"&gt;Python&lt;/a&gt;, &lt;a href="https://developers.google.com/appengine/docs/java/taskqueue/overview-push"&gt;Java&lt;/a&gt;), pull queues (&lt;a href="https://developers.google.com/appengine/docs/python/taskqueue/overview-pull"&gt;Python&lt;/a&gt;, &lt;a href="https://developers.google.com/appengine/docs/java/taskqueue/overview-pull"&gt;Java&lt;/a&gt;) and outbound sockets (&lt;a href="https://developers.google.com/appengine/docs/python/sockets/overview"&gt;Python&lt;/a&gt;, &lt;a href="https://developers.google.com/appengine/docs/java/sockets/overview"&gt;Java&lt;/a&gt;)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br&gt;&lt;br /&gt;- Posted by Grzegorz Gogolowicz, Solutions Architect&lt;br&gt; &lt;h6&gt;URL: &lt;a href="http://googlecloudplatform.blogspot.com/2013/07/google-app-engine-takes-pain-out-of-sending-ios-push-notifications.html"&gt;http://googlecloudplatform.blogspot.com/2013/07/google-app-engine-takes-pain-out-of-sending-ios-push-notifications.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/8045202408133553673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=8045202408133553673' title='66 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8045202408133553673'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8045202408133553673'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/07/gd-google-app-engine-takes-pain-out-of.html' title='[Gd] Google App Engine takes the pain out of sending iOS push&#xA;notifications'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-FjJR1w05Xu4/UdDlvKVao5I/AAAAAAAAAEY/t9tY9ZI7C_A/s72-c/cloud+blog+1.png' height='72' width='72'/><thr:total>66</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-2776300699280964877</id><published>2013-06-30T12:47:00.003-07:00</published><updated>2013-06-30T12:47:33.781-07:00</updated><title type='text'>[Gd] Fridaygram: Street View in the sky, robot carp, restored
shuttlecraft</title><content type='html'>&lt;h4&gt;&lt;a href="http://googledevelopers.blogspot.com/"&gt;Google Developers Blog&lt;/a&gt;: &lt;a href="http://googledevelopers.blogspot.com/2013/06/fridaygram-street-view-in-sky-robot.html"&gt;Fridaygram: Street View in the sky, robot carp, restored shuttlecraft&lt;/a&gt;&lt;/h4&gt; &lt;a href="https://google.com/+ScottKnaster"&gt;&lt;img alt="Author Photo" height="80" src="http://3.bp.blogspot.com/-zuKki-wX6-w/Tuuip-vap8I/AAAAAAAAA78/BqFcmzSEsDA/s1600/scottk-1.png" style="float:right;margin-left:1em;text-align:right"&gt;&lt;/a&gt;&lt;br&gt;&lt;em&gt;By &lt;a href="http://plus.google.com/105627346610764729807"&gt;+Scott Knaster&lt;/a&gt;, &lt;a href="http://googledevelopers.blogspot.com/"&gt;Google Developers Blog&lt;/a&gt; Editor&lt;/em&gt;&lt;br&gt;&lt;br&gt;This week we launched &lt;a href="http://maps.google.com/intl/en/help/maps/streetview/#utm_campaign=en&amp;amp;utm_medium=van&amp;amp;utm_source=en-van-na-us-gns-svn"&gt;Street View&lt;/a&gt; images showing what it’s like inside (and outside) the &lt;a href="http://en.wikipedia.org/wiki/Burj_Khalifa"&gt;Burj Khalifa&lt;/a&gt; in Dubai. We love taking Street View places it’s never been, and now we’ve added two firsts: the first collection in the Arab World, and the first one to &lt;a href="http://www.google.ae/intl/en/help/maps/streetview/gallery/burj-khalifa/"&gt;feature a skyscraper&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;As if it’s not enough to visit the 163rd floor of the world’s tallest building, or ride an elevator traveling at 22 mph, we thought it would be fun to send our Street View camera &lt;a href="http://www.google.ae/intl/en_ae/help/maps/streetview/gallery/burj-khalifa/burj-khalifa-view-from-building-maintenance-unit-73rd-floor.html"&gt;outside the 73rd floor&lt;/a&gt; in a maintenance unit for a breathtaking view of the surrounding cityscape. So don’t miss that view, as long as you’re OK with heights.&lt;br&gt;&lt;br&gt;We go from high above the Earth to under the sea for news of the world’s first robot carp. A team of scientists in Singapore studied these freshwater fish and designed an &lt;a href="http://www.sciencedaily.com/releases/2013/06/130626113027.htm"&gt;autonomous underwater exploration vehicle&lt;/a&gt;. They plan to use this robofish to study tight spaces in underwater places, such as pipelines or the lost city of Atlantis. The researchers used cameras to record carp doing their thing, then created a mathematical model of carp movements to trigger actuators in their robot.&lt;br&gt;&lt;br&gt;Finally, let’s journey beyond even the Burj Khalifa, out into (pretend) space, where the &lt;a href="http://en.wikipedia.org/wiki/Shuttlecraft_(Star_Trek)"&gt;Galileo Shuttlecraft&lt;/a&gt; served Captain Kirk and the crew of the U. S. S. Enterprise in the original Star Trek universe. This prop was originally considered too expensive for the production company to build, so Federation personnel had to make their way to and from planets by transporter instead. But the craft was eventually built and appeared midway through the first season, in 1967 (or &lt;a href="http://en.wikipedia.org/wiki/The_Galileo_Seven"&gt;stardate 2821.5&lt;/a&gt;, if you prefer). In the years since then, the ship has deteriorated. But now &lt;a href="http://galileorestoration.com/"&gt;Star Trek fans and a shipwright&lt;/a&gt; are restoring the Galileo to its original glory, to be enjoyed by fans everywhere. Magnifico!&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;Whether on the surface of the Earth, &lt;a href="http://goo.gl/UNBrX"&gt;way down below the ocean&lt;/a&gt;, or in space, &lt;a href="http://googledevelopers.blogspot.com/search/label/Fridaygram"&gt;Fridaygram&lt;/a&gt; is always your ticket to fun nerdy stuff. Speaking of space (and Star Trek), it looks like &lt;a href="http://en.wikipedia.org/wiki/Voyager_1"&gt;Voyager 1&lt;/a&gt; has &lt;a href="http://www.nytimes.com/2013/06/28/science/space/going-going-still-going-voyager-1-at-solar-systems-edge.html?ref=science"&gt;still not left the solar system&lt;/a&gt;, although it has entered a previously unknown area, far out there. This weekend, go and explore something new on your own!&lt;/em&gt;&lt;br&gt;&lt;blockquote&gt;&lt;/blockquote&gt; &lt;h6&gt;URL: &lt;a href="http://googledevelopers.blogspot.com/2013/06/fridaygram-street-view-in-sky-robot.html"&gt;http://googledevelopers.blogspot.com/2013/06/fridaygram-street-view-in-sky-robot.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/2776300699280964877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=2776300699280964877' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2776300699280964877'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2776300699280964877'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-fridaygram-street-view-in-sky-robot.html' title='[Gd] Fridaygram: Street View in the sky, robot carp, restored&#xA;shuttlecraft'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-zuKki-wX6-w/Tuuip-vap8I/AAAAAAAAA78/BqFcmzSEsDA/s72-c/scottk-1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-4615992471445527577</id><published>2013-06-30T12:47:00.001-07:00</published><updated>2013-06-30T12:47:32.755-07:00</updated><title type='text'>[Gd] More innovation from African developers</title><content type='html'>&lt;h4&gt;&lt;a href="http://googledevelopers.blogspot.com/"&gt;Google Developers Blog&lt;/a&gt;: &lt;a href="http://googledevelopers.blogspot.com/2013/06/more-innovation-from-african-developers.html"&gt;More innovation from African developers&lt;/a&gt;&lt;/h4&gt; &lt;img alt="Author Photo" height="80" src="http://2.bp.blogspot.com/-cG-gYKfduyE/Uc3hId0sZ1I/AAAAAAAAAOE/Okd3C0h235s/s80/emeka_afigbo.jpg" style="float:right;margin-left:1em;text-align:right"&gt;&lt;em&gt;By Chukwuemeka Afigbo, Outreach Program Manager, Sub-Saharan Africa&lt;/em&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;Cross-posted from the &lt;a href="http://google-africa.blogspot.de/2013/06/more-innovation-from-african-developers.html"&gt;Google Africa Blog&lt;/a&gt;&lt;/em&gt;&lt;br&gt;&lt;br&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif"&gt;Developers play a crucial role in making the Internet relevant for Africans. This is why fostering a vibrant African developer ecosystem is very important to Google. Developers and tech entrepreneurs from across the continent joined thousands of their peers from all over the world to explore the latest tech innovations at &lt;a href="https://developers.google.com/events/io/"&gt;Google I/O 2013&lt;/a&gt; in San Francisco. Several of them were members of the Google Developer Groups in countries such as Algeria, Burkina Faso, Egypt, Kenya, Republic of Congo, Togo and Uganda.&lt;/span&gt;&lt;b&gt;&lt;span style="font-family:Arial"&gt;&lt;br&gt;&lt;/span&gt;&lt;/b&gt; &lt;br&gt;&lt;div style="text-align:center"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-uWyfBbkBBlE/Ucq9XxA698I/AAAAAAAAATg/5DiE95k-Ujg/s320/IMG_20130515_075003.jpg"&gt;&lt;/div&gt;&lt;div style="text-align:center"&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif;font-size:xx-small"&gt;&lt;a href="https://plus.google.com/u/0/103735976334615631393/posts"&gt;Hassan Nsubuga&lt;/a&gt;, Lead for &lt;a href="https://plus.google.com/u/0/110714037127010734147/posts"&gt;GDG Mbale,Uganda&lt;/a&gt; with Google SVP &lt;a href="https://plus.google.com/+VicGundotra/posts"&gt;Vic Gundotra&lt;/a&gt; at Google I/O&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif"&gt;Luckily, participation was not limited to those who could make it to San Francisco’s Moscone Center. Developers back home were also able to get in on the action with more than 67 I/O Extended parties hosted by Google Developer Groups and Google Student Ambassadors across the continent where talks were streamed live to an excited audience.&lt;br&gt;&lt;br&gt;Away from the excitement of I/O ‘13, it has been a busy year for many African developers and tech startups. We added six new apps to our &lt;a href="http://www.google.com/africa/gafrica/success.html"&gt;African case studies page&lt;/a&gt;:&lt;/span&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.google.com/africa/gafrica/maji.html"&gt;Maji Dashboards&lt;/a&gt; and &lt;a href="http://www.google.com/africa/gafrica/virtualkenya.html"&gt;Virtual Kenya&lt;/a&gt; from Upande: websites that utilize the power of Google’s Geo tools to make information about Kenya readily accessible for better decision making, development planning, and education.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/africa/gafrica/readycash.html"&gt;ReadyCash&lt;/a&gt; from Parkway Projects: a home grown mobile money service from Nigeria with an app that leverages the power of the Android platform to integrate a unique QR code based payment system.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/africa/gafrica/matatu.html"&gt;Matatu&lt;/a&gt; is an Android version of a local card game from Uganda.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/africa/gafrica/asim.html"&gt;ASiM&lt;/a&gt;, developed by Olivine Technology, is a real time inventory management solution with an Android client and App Engine backend.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/africa/gafrica/africanfolktales.html"&gt;Asa&lt;/a&gt;: an Android tablet app by Nigeria’s Genii Games that brings the magic of African folktales to children of all ages.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align:center"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-6dE9KtxPeic/Ucq9uyUZp0I/AAAAAAAAATo/b3_O3q8IO2U/s320/Asa_Shot.JPG"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align:center"&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif;font-size:xx-small"&gt;Asa (African Folktales)&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;span style="font-family:Arial,Helvetica,sans-serif"&gt;Flashback!&lt;br&gt;&lt;br&gt;&lt;a href="https://developers.google.com/android/adcafrica/gallery_winners"&gt;Remember AfriNolly&lt;/a&gt; – winner of 2011 Android developer competition? The app by &lt;a href="http://fcolimited.com/"&gt;Fans Connect Online&lt;/a&gt; now has over 2 million downloads across several platforms, with a &lt;a href="https://play.google.com/store/apps/details?id=com.fcolimited.Afrinolly&amp;amp;hl=en&amp;amp;idred=true&amp;amp;idred=true"&gt;new Android version&lt;/a&gt; support for 11 languages launched in May 2013. The Fans Connect Online team also ran a &lt;a href="http://afrinollyshortfilmcompetition.com/"&gt;contest for African short films&lt;/a&gt; and created a &lt;a href="http://afrinolly.com/?page=radioshow"&gt;radio show&lt;/a&gt; focused on the African film industry.  &lt;br&gt;&lt;br&gt;Keep an eye on our&lt;a href="http://www.google.com/africa/gafrica/success.html"&gt; case studies page&lt;/a&gt; to follow the exploits of these and many more developers in Africa, as they continue to innovate with Google APIs and platforms.&lt;br&gt;&lt;br&gt;Do you feel your app should be featured here? &lt;a href="https://services.google.com/fb/forms/gafricashare/"&gt;Let us know!&lt;/a&gt;&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;&lt;a href="http://plus.google.com/103703210853891175248"&gt;+Chukwuemeka Afigbo&lt;/a&gt; is a Program Manager in the Sub-Saharan Africa Outreach Team. He is passionate about making the internet more relevant to Africans. He is also an avid football (soccer) fan.&lt;/em&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;Posted by &lt;a href="http://plus.google.com/105627346610764729807"&gt;+Scott Knaster&lt;/a&gt;, Editor&lt;/em&gt;&lt;br&gt;&lt;blockquote&gt;&lt;/blockquote&gt; &lt;h6&gt;URL: &lt;a href="http://googledevelopers.blogspot.com/2013/06/more-innovation-from-african-developers.html"&gt;http://googledevelopers.blogspot.com/2013/06/more-innovation-from-african-developers.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/4615992471445527577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=4615992471445527577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/4615992471445527577'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/4615992471445527577'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-more-innovation-from-african.html' title='[Gd] More innovation from African developers'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-cG-gYKfduyE/Uc3hId0sZ1I/AAAAAAAAAOE/Okd3C0h235s/s72-c/emeka_afigbo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-5807592045588792124</id><published>2013-06-28T19:04:00.005-07:00</published><updated>2013-06-28T19:04:14.594-07:00</updated><title type='text'>[Gd] Chrome Beta for Android Update</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/chrome-beta-for-android-update_28.html"&gt;Chrome Beta for Android Update&lt;/a&gt;&lt;/h4&gt; The Chrome for Android Beta channel has been updated to 28.0.1500.64  This release has a number of crash fixes as well as the following fixes:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://crbug.com/248090"&gt;248090&lt;/a&gt;:  Gmail - on-screen keyboard is automatically dismissed when replying to an email&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/chromium/issues/detail?id=251809"&gt;251809&lt;/a&gt;:  Dangerous Downloads - 'Starting download...' toast displayed when user taps Cancel&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/chromium/issues/detail?id=251818"&gt;251818&lt;/a&gt;:  Synced favicons don't show up in Other Devices on Clank&lt;/li&gt;&lt;li&gt;&lt;a href="https://code.google.com/p/chromium/issues/detail?id=239685"&gt;239685&lt;/a&gt;:  White flash when creating new tab page.&lt;/li&gt;&lt;/ul&gt;Known issues:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/chromium/issues/detail?id=243602"&gt;243602&lt;/a&gt;:  Page jumps up and down when loaded in landscape mode&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/chromium/issues/detail?id=238881"&gt;238881&lt;/a&gt;:  Cursor should be placed at the end of the string after inserting text via autofill suggestion&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/chromium/issues/detail?id=237920"&gt;237920&lt;/a&gt;:  Sometimes a thin line of background page is seen when a video goes fullscreen through FS API&lt;/li&gt;&lt;/ul&gt;A partial list of changes in this build is available in the &lt;a href="http://build.chromium.org/buildbot/perf/dashboard/ui/changelog.html?url=/branches/1500/src&amp;amp;range=208781:207262&amp;amp;mode=html"&gt;SVN revision log&lt;/a&gt;. If you find a new issue, please let us know by &lt;a href="http://code.google.com/p/chromium/issues/entry?template=Android%20Issue"&gt;filing a bug&lt;/a&gt;. More information about Chrome for Android is available on the &lt;a href="http://www.google.com/chrome/android/"&gt;Chrome site&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Jason Kersey&lt;br&gt;Google Chrome &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/chrome-beta-for-android-update_28.html"&gt;http://googlechromereleases.blogspot.com/2013/06/chrome-beta-for-android-update_28.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/5807592045588792124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=5807592045588792124' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/5807592045588792124'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/5807592045588792124'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-chrome-beta-for-android-update_28.html' title='[Gd] Chrome Beta for Android Update'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-7918020535866439728</id><published>2013-06-28T19:04:00.003-07:00</published><updated>2013-06-28T19:04:13.849-07:00</updated><title type='text'>[Gd] Beta Channel Update for Chrome OS</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/beta-channel-update-for-chrome-os_28.html"&gt;Beta Channel Update for Chrome OS&lt;/a&gt;&lt;/h4&gt; &lt;div dir="ltr" style="background-color:white;color:#666666;font-family:&amp;#39;Open Sans&amp;#39;;font-size:13px;line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="vertical-align:baseline;white-space:pre-wrap"&gt;The Beta channel has been updated to 28.0.1500.66 (Platform version: 4100.53.1 for &lt;/span&gt;&lt;span style="line-height:1.15;white-space:pre-wrap"&gt;all Chrome OS devices except Cr-48 which as 4100.53.2)&lt;/span&gt;&lt;span style="line-height:1.15;white-space:pre-wrap"&gt;. This build contains a crash fix: &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:x-small;white-space:pre-wrap"&gt;Fixes crash in UI (&lt;/span&gt;&lt;a href="http://crbug.com/254340" style="font-size:small;white-space:pre-wrap"&gt;254340&lt;/a&gt;&lt;span style="font-size:x-small;white-space:pre-wrap"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;div dir="ltr" style="background-color:white;margin-bottom:0pt;margin-top:0pt"&gt;&lt;div style="color:#666666;font-family:&amp;#39;Open Sans&amp;#39;;font-size:13px;line-height:20px"&gt;&lt;div&gt;&lt;span style="font-family:inherit"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color:white;color:#666666;font-family:&amp;#39;Open Sans&amp;#39;;font-size:13px;line-height:20px"&gt;&lt;div&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="line-height:1.15;vertical-align:baseline;white-space:pre-wrap"&gt;If you find new issues, please let us know by visiting our &lt;/span&gt;&lt;a href="http://support.google.com/chromeos" style="color:black;font-weight:bold;line-height:1.15;text-decoration:none"&gt;&lt;span style="text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;help site&lt;/span&gt;&lt;/a&gt;&lt;span style="line-height:1.15;vertical-align:baseline;white-space:pre-wrap"&gt; or &lt;/span&gt;&lt;a href="http://code.google.com/p/chromium-os/issues/entry" style="color:black;font-weight:bold;line-height:1.15;text-decoration:none"&gt;&lt;span style="text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;filing a bug&lt;/span&gt;&lt;/a&gt;&lt;span style="line-height:1.15;vertical-align:baseline;white-space:pre-wrap"&gt;. Interested in switching channels? &lt;/span&gt;&lt;a href="http://www.google.com/support/chromeos/bin/answer.py?answer=1086915" style="color:black;font-weight:bold;line-height:1.15;text-decoration:none"&gt;&lt;span style="text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;Find out how.&lt;/span&gt;&lt;/a&gt;&lt;span style="line-height:1.15;vertical-align:baseline;white-space:pre-wrap"&gt; You can submit feedback using ‘Report an issue...’ in the Chrome menu (3 horizontal bars in the upper right corner of the browser).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="background-color:white;color:#666666;font-family:inherit;font-size:13px;line-height:20px"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="background-color:white;color:#666666;font-family:&amp;#39;Open Sans&amp;#39;;font-size:13px;line-height:20px"&gt;&lt;/span&gt;&lt;div dir="ltr" style="background-color:white;color:#666666;font-family:&amp;#39;Open Sans&amp;#39;;font-size:13px;line-height:20px;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="line-height:18px;white-space:pre-wrap"&gt;Danielle Drew&lt;/span&gt;&lt;br&gt;&lt;span style="white-space:pre-wrap"&gt;Google Chrome&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/beta-channel-update-for-chrome-os_28.html"&gt;http://googlechromereleases.blogspot.com/2013/06/beta-channel-update-for-chrome-os_28.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/7918020535866439728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=7918020535866439728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/7918020535866439728'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/7918020535866439728'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-beta-channel-update-for-chrome-os_6820.html' title='[Gd] Beta Channel Update for Chrome OS'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-7400049440729087868</id><published>2013-06-28T19:04:00.001-07:00</published><updated>2013-06-28T19:04:13.029-07:00</updated><title type='text'>[Gd] Dev Channel Update for Chrome OS</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os_28.html"&gt;Dev Channel Update for Chrome OS&lt;/a&gt;&lt;/h4&gt; The Dev channel has been updated to 29.0.1547.2 (platform version: 4319.3.0) for all platforms except the new Samsung Chromebook, the HP Chromebook and Samsung Chromebox.  This release contains a few important updates and bug fixes.&lt;br&gt;&lt;br&gt;If you find new issues, please let us know by visiting our &lt;a href="http://support.google.com/chromeos"&gt;help site&lt;/a&gt; or &lt;a href="http://code.google.com/p/chromium-os/issues/entry"&gt;filing a bug&lt;/a&gt;. Interested in switching channels? &lt;a href="http://www.google.com/support/chromeos/bin/answer.py?answer=1086915"&gt;Find out how.&lt;/a&gt; You can submit feedback using ‘Report an issue...’ in the Chrome menu (3 horizontal bars in the upper right corner of the browser).&lt;br&gt;&lt;br&gt;Ben Henry&lt;br&gt;Google Chrome &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os_28.html"&gt;http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os_28.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/7400049440729087868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=7400049440729087868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/7400049440729087868'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/7400049440729087868'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-dev-channel-update-for-chrome-os_28.html' title='[Gd] Dev Channel Update for Chrome OS'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-6717456218705783422</id><published>2013-06-28T16:05:00.001-07:00</published><updated>2013-06-28T16:05:03.219-07:00</updated><title type='text'>[Gd] Testing on the Toilet: Fake Your Way to Better Tests</title><content type='html'>&lt;h4&gt;&lt;a href="http://googletesting.blogspot.com/"&gt;Google Testing Blog&lt;/a&gt;: &lt;a href="http://googletesting.blogspot.com/2013/06/testing-on-toilet-fake-your-way-to.html"&gt;Testing on the Toilet: Fake Your Way to Better Tests&lt;/a&gt;&lt;/h4&gt; &lt;i&gt;By Jonathan Rockway and Andrew Trenk &lt;/i&gt;&lt;br&gt;&lt;br&gt;&lt;i&gt;This article was adapted from a &lt;a href="http://googletesting.blogspot.com/2007/01/introducing-testing-on-toilet.html"&gt;Google Testing on the Toilet&lt;/a&gt; (TotT) episode. You can download a &lt;a href="https://docs.google.com/file/d/0B_EQS8-2f7m5MFdIN1NmOFFHZTg/edit?usp=sharing"&gt;printer-friendly version&lt;/a&gt; of this TotT episode and post it in your office. &lt;/i&gt;&lt;br&gt;&lt;br&gt;After many years of blogging, you decide to try out your blog platform's API. You start playing around with it, but then you realize: how can you tell that your code works without having your test talk to a remote blog server? &lt;br&gt;&lt;br&gt;&lt;pre style="background:#f9f9f9;border-color:#7b7b7b;border-style:solid;border-width:1px;color:black;overflow:auto;padding:10px"&gt;&lt;span style="color:#0433ff"&gt;public&lt;/span&gt; &lt;span style="color:#0433ff"&gt;void&lt;/span&gt; deletePostsWithTag(Tag &lt;b&gt;tag&lt;/b&gt;) {&lt;br&gt;  &lt;span style="color:#0433ff"&gt;for&lt;/span&gt; (Post &lt;b&gt;post&lt;/b&gt; : &lt;b&gt;blogService&lt;/b&gt;.getAllPosts()) {&lt;br&gt;    &lt;span style="color:#0433ff"&gt;if&lt;/span&gt; (&lt;b&gt;post&lt;/b&gt;.getTags().contains(&lt;b&gt;tag&lt;/b&gt;)) { &lt;b&gt;blogService&lt;/b&gt;.deletePost(&lt;b&gt;post&lt;/b&gt;.getId()); }&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;br&gt;Fakes to the rescue! &lt;b&gt;A fake is a lightweight implementation of an API that behaves like the real implementation, but isn't suitable for production&lt;/b&gt;. In the case of the blog service, all you care about is the ability to retrieve and delete posts. While a real blog service would need a database and support multiple frontend servers, you don’t need any of that to test your code, all you need is any implementation of the blog service API. You can achieve this with a simple in-memory implementation: &lt;br&gt;&lt;br&gt;&lt;pre style="background:#f9f9f9;border-color:#7b7b7b;border-style:solid;border-width:1px;color:black;overflow:auto;padding:10px"&gt;&lt;span style="color:#0433ff"&gt;public&lt;/span&gt; &lt;span style="color:#0433ff"&gt;class&lt;/span&gt; &lt;b&gt;FakeBlogService&lt;/b&gt; &lt;span style="color:#0433ff"&gt;implements&lt;/span&gt; &lt;b&gt;BlogService&lt;/b&gt; {  &lt;br&gt;  &lt;span style="color:#0433ff"&gt;private&lt;/span&gt; &lt;span style="color:#0433ff"&gt;final&lt;/span&gt; Set&amp;lt;Post&amp;gt; &lt;b&gt;posts&lt;/b&gt; = &lt;span style="color:#0433ff"&gt;new&lt;/span&gt; HashSet&amp;lt;Post&amp;gt;(); &lt;span style="color:#4f8f00"&gt;// Store posts in memory&lt;/span&gt;&lt;br&gt;  &lt;span style="color:#0433ff"&gt;public&lt;/span&gt; &lt;span style="color:#0433ff"&gt;void&lt;/span&gt; addPost(Post &lt;b&gt;post&lt;/b&gt;) { &lt;b&gt;posts&lt;/b&gt;.add(&lt;b&gt;post&lt;/b&gt;); }&lt;br&gt;  &lt;span style="color:#0433ff"&gt;public&lt;/span&gt; &lt;span style="color:#0433ff"&gt;void&lt;/span&gt; deletePost(&lt;span style="color:#0433ff"&gt;int&lt;/span&gt; &lt;b&gt;id&lt;/b&gt;) {&lt;br&gt;    &lt;span style="color:#0433ff"&gt;for&lt;/span&gt; (Post &lt;b&gt;post&lt;/b&gt; : &lt;b&gt;posts&lt;/b&gt;) {&lt;br&gt;      &lt;span style="color:#0433ff"&gt;if&lt;/span&gt; (&lt;b&gt;post&lt;/b&gt;.getId() == &lt;b&gt;id&lt;/b&gt;) { &lt;b&gt;posts&lt;/b&gt;.remove(&lt;b&gt;post&lt;/b&gt;); &lt;span style="color:#0433ff"&gt;return&lt;/span&gt;; }&lt;br&gt;    }&lt;br&gt;    &lt;span style="color:#0433ff"&gt;throw&lt;/span&gt; &lt;span style="color:#0433ff"&gt;new&lt;/span&gt; PostNotFoundException(&lt;span style="color:#ff2600"&gt;"No post with ID "&lt;/span&gt; + &lt;b&gt;id&lt;/b&gt;);&lt;br&gt;  }&lt;br&gt;  &lt;span style="color:#0433ff"&gt;public&lt;/span&gt; Set&amp;lt;Post&amp;gt; getAllPosts() { &lt;span style="color:#0433ff"&gt;return&lt;/span&gt; &lt;b&gt;posts&lt;/b&gt;; }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt;&lt;br&gt;Now your tests can swap out the real blog service with the fake and the code under test won't even know the difference. &lt;br&gt;&lt;br&gt;&lt;b&gt;Fakes are useful for when you can't use the real implementation in a test&lt;/b&gt;, such as if the real implementation is too slow (e.g. it takes several minutes to start up) or if it's non-deterministic (e.g. it talks to an external machine that may not be available when your test runs). &lt;br&gt;&lt;br&gt;You shouldn't need to write your own fakes often since &lt;b&gt;each fake should be created and maintained by the person or team that owns the real implementation&lt;/b&gt;. If you’re using an API that doesn't provide a fake, it’s often easy to create one yourself: write a wrapper around the part of the code that you can't use in your tests, and create a fake for that wrapper. &lt;b&gt;Remember to create the fake at the lowest level possible&lt;/b&gt; (e.g. if you can't use a database in your tests, fake out the database instead of faking out all of your classes that talk to the database), that way you'll have fewer fakes to maintain, and your tests will be executing more real code for important parts of your system. &lt;br&gt;&lt;br&gt;&lt;b&gt;Fakes should have their own tests&lt;/b&gt; to ensure that they behave like the real implementation (e.g. if the real implementation throws an exception when given certain input, the fake implementation should also throw an exception when given the same input). One way to do this is to write tests against the API's public interface, and run those tests against both the real and fake implementations. &lt;br&gt;&lt;br&gt;If you still don't fully trust that your code will work in production if all your tests use a fake, you can write a small number of integration tests to ensure that your code will work with the real implementation. &lt;h6&gt;URL: &lt;a href="http://googletesting.blogspot.com/2013/06/testing-on-toilet-fake-your-way-to.html"&gt;http://googletesting.blogspot.com/2013/06/testing-on-toilet-fake-your-way-to.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/6717456218705783422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=6717456218705783422' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/6717456218705783422'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/6717456218705783422'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-testing-on-toilet-fake-your-way-to.html' title='[Gd] Testing on the Toilet: Fake Your Way to Better Tests'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-8309151089104649322</id><published>2013-06-28T07:07:00.005-07:00</published><updated>2013-06-28T07:07:54.736-07:00</updated><title type='text'>[Gd] Admin Console Update</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/admin-console-update.html"&gt;Admin Console Update&lt;/a&gt;&lt;/h4&gt; &lt;br&gt;The Admin console has been updated. This update adds a new &lt;a href="https://support.google.com/chrome/a/answer/1375678"&gt;device setting&lt;/a&gt; for automatically enrolled devices to be placed in the enrolling user's organizational unit&lt;br&gt;&lt;br&gt;Known issues are available &lt;a href="http://support.google.com/chrome/a/bin/static.py?hl=en&amp;amp;page=known_issues.cs"&gt;here&lt;/a&gt;. Enterprise customers can report an issue by &lt;a href="http://support.google.com/chrome/a/bin/answer.py?hl=en&amp;amp;answer=1347782"&gt;contacting support&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Lawrence Lui&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;/div&gt;&lt;br&gt;&lt;div style="color:black;font-family:Times;font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;margin:0px;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"&gt;Google Chrome&lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/admin-console-update.html"&gt;http://googlechromereleases.blogspot.com/2013/06/admin-console-update.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/8309151089104649322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=8309151089104649322' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8309151089104649322'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8309151089104649322'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-admin-console-update.html' title='[Gd] Admin Console Update'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-2751637065393799783</id><published>2013-06-28T07:07:00.003-07:00</published><updated>2013-06-28T07:07:54.085-07:00</updated><title type='text'>[Gd] Beta Channel Update</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/beta-channel-update_27.html"&gt;Beta Channel Update&lt;/a&gt;&lt;/h4&gt; The Beta channel has been updated to 28.0.1500.63 for Windows, Mac, and Chrome Frame, and Linux.  Full details about what changes are in this build are available in the &lt;a href="http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=/branches/1500/src&amp;amp;range=208724:207119&amp;amp;mode=html" rel="nofollow"&gt;SVN revision log&lt;/a&gt;.&lt;br&gt;&lt;br&gt;For more information about features coming to Chrome, check out the &lt;a href="http://chrome.blogspot.com/" rel="nofollow"&gt;Chrome Blog&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Interested in switching release channels? &lt;a href="http://dev.chromium.org/getting-involved/dev-channel"&gt;Find out how&lt;/a&gt;. If you find a new issue, please let us know by &lt;a href="http://new.crbug.com/"&gt;filing a bug&lt;/a&gt;.&lt;br&gt;&lt;br&gt;Anthony Laforge&lt;br&gt;Google Chrome &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/beta-channel-update_27.html"&gt;http://googlechromereleases.blogspot.com/2013/06/beta-channel-update_27.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/2751637065393799783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=2751637065393799783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2751637065393799783'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2751637065393799783'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-beta-channel-update_28.html' title='[Gd] Beta Channel Update'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-8618027183694849966</id><published>2013-06-28T07:07:00.001-07:00</published><updated>2013-06-28T07:07:53.094-07:00</updated><title type='text'>[Gd] Beta Channel Update for Chrome OS</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/beta-channel-update-for-chrome-os_27.html"&gt;Beta Channel Update for Chrome OS&lt;/a&gt;&lt;/h4&gt; &lt;div dir="ltr" style="background-color:white;color:#666666;line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="vertical-align:baseline;white-space:pre-wrap"&gt;The Beta channel has been updated to 28.0.1500.61 (Platform version: 4100.53.0) for &lt;/span&gt;&lt;span style="line-height:1.15;white-space:pre-wrap"&gt;all Chrome OS devices&lt;/span&gt;&lt;span style="line-height:1.15;white-space:pre-wrap"&gt;. This build contains a number of bug fixes and security enhancements.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="background-color:white;color:#666666;line-height:20px"&gt;&lt;span&gt;&lt;span style="font-style:italic;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="background-color:white;color:#666666;line-height:20px"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div dir="ltr" style="background-color:white;color:#666666;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="line-height:1.15"&gt;&lt;span style="vertical-align:baseline;white-space:pre-wrap"&gt;Some highlights of these changes are:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;ul style="line-height:1.4;margin:0.5em 0px;padding:0px 2.5em"&gt;&lt;li style="margin:0px 0px 0.25em;padding:0px"&gt;&lt;span style="font-family:inherit"&gt;Pepper Flash updated to 11.8.800.68-r8, which improves playback quality and reduces crashes on numerous video sites.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin:0px 0px 0.25em;padding:0px"&gt;&lt;span style="font-family:inherit"&gt;Numerous video and other crash fixes.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style="font-family:inherit"&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="background-color:white;color:#666666;line-height:20px"&gt;&lt;div&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="line-height:1.15;vertical-align:baseline;white-space:pre-wrap"&gt;If you find new issues, please let us know by visiting our &lt;/span&gt;&lt;a href="http://support.google.com/chromeos" style="color:black;font-weight:bold;line-height:1.15;text-decoration:none"&gt;&lt;span style="text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;help site&lt;/span&gt;&lt;/a&gt;&lt;span style="line-height:1.15;vertical-align:baseline;white-space:pre-wrap"&gt; or &lt;/span&gt;&lt;a href="http://code.google.com/p/chromium-os/issues/entry" style="color:black;font-weight:bold;line-height:1.15;text-decoration:none"&gt;&lt;span style="text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;filing a bug&lt;/span&gt;&lt;/a&gt;&lt;span style="line-height:1.15;vertical-align:baseline;white-space:pre-wrap"&gt;. Interested in switching channels? &lt;/span&gt;&lt;a href="http://www.google.com/support/chromeos/bin/answer.py?answer=1086915" style="color:black;font-weight:bold;line-height:1.15;text-decoration:none"&gt;&lt;span style="text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;Find out how.&lt;/span&gt;&lt;/a&gt;&lt;span style="line-height:1.15;vertical-align:baseline;white-space:pre-wrap"&gt; You can submit feedback using ‘Report an issue...’ in the Chrome menu (3 horizontal bars in the upper right corner of the browser).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="background-color:white;color:#666666;line-height:20px"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="background-color:white;color:#666666;line-height:20px"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div dir="ltr" style="background-color:white;color:#666666;line-height:20px;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="font-family:inherit"&gt;&lt;span style="line-height:18px;white-space:pre-wrap"&gt;Danielle Drew&lt;/span&gt;&lt;br&gt;&lt;span style="white-space:pre-wrap"&gt;Google Chrome&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/beta-channel-update-for-chrome-os_27.html"&gt;http://googlechromereleases.blogspot.com/2013/06/beta-channel-update-for-chrome-os_27.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/8618027183694849966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=8618027183694849966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8618027183694849966'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8618027183694849966'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-beta-channel-update-for-chrome-os_28.html' title='[Gd] Beta Channel Update for Chrome OS'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-2850789000657024605</id><published>2013-06-28T03:58:00.001-07:00</published><updated>2013-06-28T03:58:13.841-07:00</updated><title type='text'>[Gd] Introducing Google Docs Cursor/Selection APIs in Apps Script</title><content type='html'>&lt;h4&gt;&lt;a href="http://googleappsdeveloper.blogspot.com/"&gt;Google Apps Developer Blog&lt;/a&gt;: &lt;a href="http://googleappsdeveloper.blogspot.com/2013/06/introducing-google-docs-cursorselection.html"&gt;Introducing Google Docs Cursor/Selection APIs in Apps Script&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;Ever wanted to programmatically insert something at the cursor in Google Docs (say, a “Sign Here” image) or read the user’s selection (maybe for an on-the-spot translation)? Starting today, you can.&lt;/p&gt; &lt;p&gt;Apps Scripts bound to Google Docs can now access the active user's &lt;a href="https://developers.google.com/apps-script/reference/document/cursor"&gt;Cursor&lt;/a&gt; and &lt;a href="https://developers.google.com/apps-script/reference/document/selection"&gt;Selection&lt;/a&gt; by calling &lt;code&gt;Document.getCursor()&lt;/code&gt; and &lt;code&gt;Document.getSelection()&lt;/code&gt;, respectively. The returned objects provide useful information like the element the cursor is positioned in and an array of all of the elements contained in the selection.&lt;/p&gt; &lt;br&gt; &lt;h3&gt;Example #1: Selection Translator&lt;/h3&gt; &lt;p&gt;&lt;a href="https://docs.google.com/document/d/1LI5Jpf6OYDUkgy7StF9_oM_NTcsuLtiy7x-8Xhq5sZ4/edit?usp=sharing"&gt;This Google Doc&lt;/a&gt; contains a simple script that uses Apps Script’s &lt;a href="https://developers.google.com/apps-script/reference/language/"&gt;Language Service&lt;/a&gt; to translate selected text from English to Spanish through a custom menu item.&lt;/p&gt; &lt;br&gt; &lt;a href="http://1.bp.blogspot.com/-Rk6xtSm__PE/Uc0OZNSllCI/AAAAAAAABCs/ULDb5FW7odc/s699/1m24pyCSRHRGdxpndz11E3cKxWdrIVi1eYIE_Qw.png"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-Rk6xtSm__PE/Uc0OZNSllCI/AAAAAAAABCs/ULDb5FW7odc/s520/1m24pyCSRHRGdxpndz11E3cKxWdrIVi1eYIE_Qw.png"&gt;&lt;/a&gt; &lt;p&gt;Here, it uses the &lt;a href="https://developers.google.com/apps-script/reference/document/selection#getSelectedElements()"&gt;&lt;code&gt;getSelectedElements()&lt;/code&gt;&lt;/a&gt; method of the &lt;code&gt;Selection&lt;/code&gt; class to get an array of selected elements:&lt;/p&gt; &lt;pre&gt;&lt;br&gt;var selection = DocumentApp.getActiveDocument().getSelection();&lt;br&gt;  if (selection) {&lt;br&gt;    var elements = selection.getSelectedElements();&lt;br&gt;&lt;/pre&gt; &lt;p&gt;Next, it loops through each element, performs the translation, and replaces the original text:&lt;/p&gt; &lt;pre&gt;&lt;br&gt;var translatedText = LanguageApp.translate(&lt;br&gt;    element.asText().getText(), 'EN', 'ES'); &lt;br&gt;element.asText().setText(translatedText);&lt;br&gt;&lt;/pre&gt; &lt;h3&gt;Example #2: Bibliography App&lt;/h3&gt; &lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=KIiCSdRCqXc"&gt;At Google I/O this year&lt;/a&gt;, Apps Script engineer Jonathan Rascher demonstrated Bibstro, a bibliography sample app for Google Docs that inserts inline citations at the cursor. Today, we’re releasing the &lt;a href="https://github.com/google/google-apps-script-samples/tree/master/bibstro"&gt;source code for Bibstro&lt;/a&gt;; you can also try it out by making of copy of &lt;a href="https://docs.google.com/document/d/1H46MqH7MX2BDOj2l-sV0wQuYXoHrSEepoSgVvHtZfbM/view"&gt;this Google Doc&lt;/a&gt;.&lt;/p&gt; &lt;br&gt; &lt;a href="http://1.bp.blogspot.com/-b3X4UmAMeQk/Uc0OZc_0cgI/AAAAAAAABCw/DbWLITurUX8/s1038/1q9P0_iG1xKNBxSXSvmzyv5NlVwCQmW_fe3IdPw.png"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-b3X4UmAMeQk/Uc0OZc_0cgI/AAAAAAAABCw/DbWLITurUX8/s520/1q9P0_iG1xKNBxSXSvmzyv5NlVwCQmW_fe3IdPw.png"&gt;&lt;/a&gt; &lt;p&gt;To insert text, the script calls the aptly named &lt;a href="https://developers.google.com/apps-script/reference/document/cursor#insertText(String)"&gt;&lt;code&gt;insertText()&lt;/code&gt;&lt;/a&gt; method of the &lt;code&gt;Cursor&lt;/code&gt; object:&lt;/p&gt; &lt;pre&gt;&lt;br&gt;var cursor = DocumentApp.getActiveDocument().getCursor();&lt;br&gt;if (cursor) {&lt;br&gt;  // Determine the text of the new inline citation to insert.&lt;br&gt;  var citation = bibStrategy.getInlineCitationText(...);&lt;br&gt;&lt;br&gt;  var surroundingText = cursor.getSurroundingText().getText();&lt;br&gt;  var surroundingTextOffset = cursor.getSurroundingTextOffset();&lt;br&gt;&lt;br&gt;  if (surroundingTextOffset &amp;gt; 0 &amp;amp;&amp;amp;&lt;br&gt;      surroundingText.charAt(surroundingTextOffset - 1) != ' ') {&lt;br&gt;    // If the cursor follows a non-space character, insert a space&lt;br&gt;    // and then the citation.&lt;br&gt;    cursor.insertText(' ' + citation);&lt;br&gt;  } else {&lt;br&gt;    // Otherwise, just insert the citation.&lt;br&gt;    cursor.insertText(citation);&lt;br&gt;  }&lt;br&gt;}&lt;br&gt;&lt;/pre&gt; &lt;p&gt;You’ll also notice that the script uses the &lt;code&gt;Cursor&lt;/code&gt; class’s &lt;a href="https://developers.google.com/apps-script/reference/document/cursor#getSurroundingText()"&gt;&lt;code&gt;getSurroundingText()&lt;/code&gt;&lt;/a&gt; method to determine whether to insert a space before the new inline citation.&lt;/p&gt; &lt;br&gt; &lt;h3&gt;Example #3: Cursor Inspector&lt;/h3&gt; &lt;p&gt;To help you become familiar with how cursor and selection work, we've also created a &lt;a href="https://docs.google.com/document/d/1v6S7IkDL_YIaVn1rBcVbqFr3rbNUX9_kLfFc00WTtx8/view"&gt;Cursor Inspector&lt;/a&gt; sample script. As you navigate through a document, the script displays up-to-date information about your cursor or selection in a custom sidebar. We’re also releasing the &lt;a href="https://github.com/google/google-apps-script-samples/tree/master/cursor_inspector"&gt;source code for Cursor Inspector&lt;/a&gt; on GitHub.&lt;/p&gt; &lt;br&gt; &lt;a href="http://2.bp.blogspot.com/-ppR6O-tOMw0/Uc0OZZpOIPI/AAAAAAAABC0/RWYz9KEw9RI/s1014/1Q1qtCNCtXW_Tw5lsRYzM8gLKvvaciGvwnXR85Q.png"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-ppR6O-tOMw0/Uc0OZZpOIPI/AAAAAAAABC0/RWYz9KEw9RI/s520/1Q1qtCNCtXW_Tw5lsRYzM8gLKvvaciGvwnXR85Q.png"&gt;&lt;/a&gt; &lt;p&gt;These new APIs are available immediately. We’re excited to see what kind of scripts you come up with!&lt;/p&gt; &lt;br&gt; &lt;table cellpadding="5" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr style="background-color:#f2f2f2"&gt;&lt;td&gt;&lt;img src="https://sites.google.com/site/developeradvocates/image/kalyan_reddy.png"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;span&gt;Kalyan Reddy&lt;/span&gt;   &lt;a href="https://plus.google.com/u/0/104332150690924044386/posts" rel="me"&gt;profile&lt;/a&gt; | &lt;a href="http://stackoverflow.com/users/1666956/kalyan-reddy"&gt;Stack Overflow&lt;/a&gt;&lt;br&gt;&lt;div&gt;&lt;br&gt;Kalyan is a Developer Programs Engineer on the Google Apps Script team in New York City. He is committed to increasing developers’ productivity by helping them fully utilize the power of Apps Script. In his free time, he enjoys participating in the maker community and hacking together robots.&lt;/div&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h6&gt;URL: &lt;a href="http://googleappsdeveloper.blogspot.com/2013/06/introducing-google-docs-cursorselection.html"&gt;http://googleappsdeveloper.blogspot.com/2013/06/introducing-google-docs-cursorselection.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/2850789000657024605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=2850789000657024605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2850789000657024605'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2850789000657024605'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-introducing-google-docs.html' title='[Gd] Introducing Google Docs Cursor/Selection APIs in Apps Script'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Rk6xtSm__PE/Uc0OZNSllCI/AAAAAAAABCs/ULDb5FW7odc/s72-c/1m24pyCSRHRGdxpndz11E3cKxWdrIVi1eYIE_Qw.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-1956190885850877298</id><published>2013-06-27T12:53:00.001-07:00</published><updated>2013-06-27T12:53:32.592-07:00</updated><title type='text'>[Gd] Experimenting with QUIC</title><content type='html'>&lt;h4&gt;&lt;a href="http://blog.chromium.org/"&gt;Chromium Blog&lt;/a&gt;: &lt;a href="http://blog.chromium.org/2013/06/experimenting-with-quic.html"&gt;Experimenting with QUIC&lt;/a&gt;&lt;/h4&gt; At Google, we're always working to make the web faster. The &lt;a href="http://www.chromium.org/spdy/spdy-whitepaper"&gt;SPDY protocol&lt;/a&gt;, which is now the foundation of the upcoming HTTP 2.0 protocol, is a significant step forward. However, despite increasing bandwidth, round trip time (RTT)--which is ultimately bounded by the speed of light--is not decreasing, and will remain high on mobile networks for the foreseeable future. To continue improving network performance we need to decrease the number of round trips, something that is difficult with protocols that currently rely on the Transmission Control Protocol (TCP).&lt;br&gt;&lt;br&gt;QUIC (Quick UDP Internet Connections) is an early-stage network protocol we are experimenting with that runs a stream multiplexing protocol over a new flavor of Transport Layer Security (TLS) on top of UDP instead of TCP. QUIC combines a &lt;a href="https://docs.google.com/a/chromium.org/document/d/1RNHkx_VvKWyWg6Lr8SZ-saqsQx7rFV-ev2jRFUoVD34/edit#"&gt;carefully selected&lt;/a&gt; collection of techniques to reduce the number of round trips we need as we surf the Internet. You can learn more in the &lt;a href="https://docs.google.com/a/chromium.org/document/d/1RNHkx_VvKWyWg6Lr8SZ-saqsQx7rFV-ev2jRFUoVD34"&gt;design document&lt;/a&gt;, but here are some of the highlights: &lt;ul&gt;&lt;li&gt;&lt;a href="https://docs.google.com/a/google.com/document/d/1g5nIXAIkN_Y-7XJW5K45IblHd_L2f5LTaDUDwvZ5L6g/edit"&gt;High security&lt;/a&gt; similar to &lt;a href="https://en.wikipedia.org/wiki/Transport_Layer_Security"&gt;TLS&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Fast (often 0-RTT) connectivity similar to &lt;a href="http://tools.ietf.org/html/draft-agl-tls-snapstart-00"&gt;TLS Snapstart&lt;/a&gt; combined with &lt;a href="http://en.wikipedia.org/wiki/TCP_Fast_Open"&gt;TCP Fast Open&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Packet pacing to reduce packet loss&lt;/li&gt;&lt;li&gt;Packet error correction to reduce retransmission latency&lt;/li&gt;&lt;li&gt;UDP transport to avoid TCP head-of-line blocking&lt;/li&gt;&lt;li&gt;A connection identifier to reduce reconnections for mobile clients&lt;/li&gt;&lt;li&gt;A pluggable congestion control mechanism&lt;/li&gt;&lt;/ul&gt;We've been working on both a QUIC &lt;a href="https://code.google.com/p/chromium/codesearch#chromium/src/net/quic/&amp;amp;ct=rc&amp;amp;cd=1&amp;amp;q=quic&amp;amp;sq=package:chromium"&gt;client implementation&lt;/a&gt; and &lt;a href="https://code.google.com/p/chromium/codesearch#chromium/src/net/tools/quic/&amp;amp;ct=rc&amp;amp;cd=2&amp;amp;q=quic&amp;amp;sq=package:chromium"&gt;prototype server implementation&lt;/a&gt; in the open source Chromium repository for the past few months. Early tests of UDP connectivity have been promising, but we have learned from past experience that real-world network conditions often differ considerably. Our next step is to test the pros and cons of the QUIC design in the real world by experimenting with using QUIC for a small percentage of Chrome dev and canary channel traffic to some Google servers, just as we did with SPDY. Users shouldn&amp;#39;t notice any difference--except hopefully a faster load time. If we&amp;#39;re able to identify clear performance wins, our hope is to collaborate with the rest of the community to develop the features and techniques of QUIC into network standards.   &lt;br&gt;&lt;br&gt;You can learn more about QUIC in our &lt;a href="https://docs.google.com/a/chromium.org/document/d/1lmL9EF6qKrk7gbazY8bIdvq3Pno2Xj_l_YShP40GLQE/edit#heading=h.h3jsxme7rovm"&gt;FAQ&lt;/a&gt;. Our hope is that what we learn from QUIC will ultimately help us to deliver a much faster... er... QUICker Internet!&lt;br&gt;&lt;br&gt;Posted by Jim Roskind, RTT Reduction Ranger, Google &lt;h6&gt;URL: &lt;a href="http://blog.chromium.org/2013/06/experimenting-with-quic.html"&gt;http://blog.chromium.org/2013/06/experimenting-with-quic.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/1956190885850877298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=1956190885850877298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/1956190885850877298'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/1956190885850877298'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-experimenting-with-quic.html' title='[Gd] Experimenting with QUIC'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-6089560399766977033</id><published>2013-06-27T09:51:00.005-07:00</published><updated>2013-06-27T09:51:14.601-07:00</updated><title type='text'>[Gd] Introducing website satisfaction by Google Consumer Surveys</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlewebmastercentral.blogspot.com/"&gt;Official Google Webmaster Central Blog&lt;/a&gt;: &lt;a href="http://googlewebmastercentral.blogspot.com/2013/06/introducing-website-satisfaction-by_27.html"&gt;Introducing website satisfaction by Google Consumer Surveys&lt;/a&gt;&lt;/h4&gt; &lt;div dir="ltr" style="text-align:left"&gt;&lt;br&gt;Webmaster level: all &lt;br&gt;&lt;br&gt;We're now offering webmasters an easy and free way to collect feedback from your website visitors with &lt;a href="http://www.google.com/insights/consumersurveys/publishers"&gt;website satisfaction surveys&lt;/a&gt;. All you have to do is paste a small snippet of code in the HTML for your website and this will load a discreet satisfaction survey in the lower right hand corner of your website. Google automatically aggregates and analyzes responses, providing the data back to you through a simple online interface.&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;a href="http://3.bp.blogspot.com/-EgscH-SDEmE/UcwfF9fK1vI/AAAAAAAAAMo/91MmJbOsjV0/s1600/newroom_websat+_new.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" height="228" src="http://3.bp.blogspot.com/-EgscH-SDEmE/UcwfF9fK1vI/AAAAAAAAAMo/91MmJbOsjV0/s400/newroom_websat+_new.png" width="400"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;Users will be asked to complete a four-question satisfaction survey. Surveys will run until they have received 500 responses and will start again after 30 days so you can track responses over time. This is currently limited to US English visitors on non-mobile devices. The default questions are free and you can customize questions for just $0.01 per response or $5.00 for 500 responses.&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;br&gt;&lt;a href="http://3.bp.blogspot.com/-jxDartyId5c/UcwfDhmUsHI/AAAAAAAAAMg/Kd-Kv1E2rhE/s1600/websat_email.png" style="margin-left:1em;margin-right:1em"&gt;&lt;img border="0" height="313" src="http://3.bp.blogspot.com/-jxDartyId5c/UcwfDhmUsHI/AAAAAAAAAMg/Kd-Kv1E2rhE/s400/websat_email.png" width="400"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;br&gt;&lt;/div&gt;&lt;h4 style="text-align:left"&gt;Survey Setup and Code Placement Tips&lt;/h4&gt;To set up the survey code, you'll need to have access to the source code for your website.&lt;br&gt;&lt;ol&gt;&lt;li&gt;Sign into &lt;a href="http://www.google.com/insights/consumersurveys/websat"&gt;Google Consumer Surveys for website satisfaction&lt;/a&gt; to find the code snippet.&lt;/li&gt;&lt;li&gt;You have the option to enter the website name and URL, survey timing, and survey frequency.&lt;/li&gt;&lt;li&gt;Click on the “Activate survey” button when ready.&lt;/li&gt;&lt;li&gt;Once you find the code snippet on top of the setup page, copy and paste it into your web page, just before the closing &amp;lt;/head&amp;gt; tag. If your website uses templates to generate pages, enter it just before the closing &amp;lt;/head&amp;gt; tag in the file that contains the &amp;lt;head&amp;gt; section.&lt;/li&gt;&lt;/ol&gt;If  you have any questions, please read our &lt;a href="https://support.google.com/consumersurveys/answer/3184807?hl=en&amp;amp;ref_topic=3134469"&gt;Help Center article&lt;/a&gt; to learn more.&lt;br&gt;&lt;br&gt;Posted by Marisa Currie-Rose  &lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://googlewebmastercentral.blogspot.com/2013/06/introducing-website-satisfaction-by_27.html"&gt;http://googlewebmastercentral.blogspot.com/2013/06/introducing-website-satisfaction-by_27.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/6089560399766977033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=6089560399766977033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/6089560399766977033'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/6089560399766977033'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-introducing-website-satisfaction-by.html' title='[Gd] Introducing website satisfaction by Google Consumer Surveys'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-EgscH-SDEmE/UcwfF9fK1vI/AAAAAAAAAMo/91MmJbOsjV0/s72-c/newroom_websat+_new.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-306630963666295453</id><published>2013-06-27T09:51:00.003-07:00</published><updated>2013-06-27T09:51:13.967-07:00</updated><title type='text'>[Gd] Flubaroo 3.0 Released</title><content type='html'>&lt;h4&gt;&lt;a href="http://googleappsdeveloper.blogspot.com/"&gt;Google Apps Developer Blog&lt;/a&gt;: &lt;a href="http://googleappsdeveloper.blogspot.com/2013/06/flubaroo-30-released.html"&gt;Flubaroo 3.0 Released&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;&lt;a href="http://www.flubaroo.com/"&gt;Flubaroo&lt;/a&gt;, a popular Apps Script application that helps teachers with grading, has just reached &lt;a href="http://www.flubaroo.com/blog/introducingflubaroo30"&gt;version 3.0&lt;/a&gt;. The new features and improvements include:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Smarter emailing of grades. &lt;li&gt;Option to email "Help Tips" for each question. &lt;li&gt;Option to send students individualized feedback. &lt;li&gt;Multi-language support, with first language of Spanish. &lt;li&gt;Easier to read grade emails. &lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;If you know any teachers who aren’t using Flubaroo yet, why not encourage them to &lt;a href="http://www.flubaroo.com/try-flubaroo-now"&gt;try it out&lt;/a&gt;? It doesn’t cost a thing, and has helped thousands of teachers save time and gain insight into student performance — all through the power of Apps Script.&lt;/p&gt; &lt;br&gt; &lt;table cellpadding="5" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr style="background-color:#f2f2f2"&gt;&lt;td&gt;&lt;img height="90/" src="http://2.bp.blogspot.com/-L_leAZcTMCM/UcoJhpns2ZI/AAAAAAAAAgo/ALBGSVl5-KE/s1600/dave_abouav.png" width="64"&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;span&gt;Dave Abouav&lt;/span&gt;     &lt;a href="https://plus.google.com/108469486385993036198" rel="me"&gt;profile&lt;/a&gt;&lt;br&gt;&lt;div&gt;&lt;br&gt;Dave is a Googler who also teaches physics at community college at nights. He developed Flubaroo as his 20%-time project, and runs &lt;a href="http://www.edcode.org"&gt;edCode.org&lt;/a&gt;, a community of teachers and developers creating free, open-source tools for education.&lt;/div&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;h6&gt;URL: &lt;a href="http://googleappsdeveloper.blogspot.com/2013/06/flubaroo-30-released.html"&gt;http://googleappsdeveloper.blogspot.com/2013/06/flubaroo-30-released.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/306630963666295453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=306630963666295453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/306630963666295453'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/306630963666295453'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-flubaroo-30-released.html' title='[Gd] Flubaroo 3.0 Released'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-L_leAZcTMCM/UcoJhpns2ZI/AAAAAAAAAgo/ALBGSVl5-KE/s72-c/dave_abouav.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-6167545491687920721</id><published>2013-06-27T09:51:00.001-07:00</published><updated>2013-06-27T09:51:13.151-07:00</updated><title type='text'>[Gd] Google Cloud Platform Powers Minyanville’s Buzz and Banter</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlecloudplatform.blogspot.com/"&gt;Cloud Platform Blog&lt;/a&gt;: &lt;a href="http://googlecloudplatform.blogspot.com/2013/06/google-cloud-platform-powers-minyanville-buzz-and-banter.html"&gt;Google Cloud Platform Powers Minyanville’s Buzz and Banter&lt;/a&gt;&lt;/h4&gt; &lt;i&gt;Today’s post is from Philip Talamas, COO &lt;a href="http://www.minyanville.com/"&gt;Minyanville Media&lt;/a&gt;, Inc., a New York based financial media company. In this post, Philip looks at the benefits his company received from switching from a major public cloud provider to Google Cloud Platform.&lt;/i&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;At Minyanville Media, our goal is to create branded business content that informs, entertains, and educates all generations about the worlds of business and finance. We designed our premium &lt;a href="http://www.minyanville.com/buzzandbanter"&gt;Buzz &amp;amp; Banter app&lt;/a&gt; to serve this need. The Buzz ran on a competing cloud platform that presented increasing technical challenges as we expanded our customer base and feature set. We wanted a higher performing platform offering a more flexible and deeper feature set; we wanted to be certain we were serving our longtime clients as best as we could.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;We consulted our strategic technology partner &lt;a href="http://www.mediaagility.com/"&gt;MediaAgility&lt;/a&gt;, and the company advised us to move to Google Cloud Platform. There were two obvious benefits to switching to &lt;a href="http://cloud.google.com/"&gt;Google Cloud Platform&lt;/a&gt; from our old provider: better reliability and automatic demand-based scaling of the application.&lt;br&gt;&lt;br /&gt;&lt;a href="https://lh3.googleusercontent.com/gRpL9C4oh-O-zHHemzgHq05u5dWbFK043S-gd4iueb-XhR61CDLF_ZOvZU2JH16L7I1nhbHPwOVrUexYC_3Xw_uFgmstYArxmRJNzHVkRVofj-M0next3Y8d" style="clear:left;float:left;margin-bottom:1em;margin-right:1em"&gt;&lt;img border="0" height="400" src="https://lh3.googleusercontent.com/gRpL9C4oh-O-zHHemzgHq05u5dWbFK043S-gd4iueb-XhR61CDLF_ZOvZU2JH16L7I1nhbHPwOVrUexYC_3Xw_uFgmstYArxmRJNzHVkRVofj-M0next3Y8d" width="260"&gt;&lt;/a&gt; &lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Every day, thousands of investors access our system globally, everywhere from Syracuse to Switzerland. They turn to us for reliable market intelligence and investing ideas. Today's economic uncertainty, coupled with high frequency trading, keeps us on our toes. When a central bank unexpectedly cuts interest rates or a hacked tweet sends markets into a tailspin, seconds matter. We are timely, or we are out of business. It’s as simple as that. Additionally, we serve two major online brokerage firms, which have very high standards for performance and reliability.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;Hence, we decided to move Buzz and Banter to the Google Cloud Platform. The improvement and increase in operational speed was drastic. New Buzz, running on &lt;a href="http://cloud.google.com/appengine"&gt;Google App Engine&lt;/a&gt;, updates content instantaneously -- even before our content management system refreshes to confirm publication. The icing on the cake is that our operating costs are significantly lower than what they were under our old provider.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;It’s rare that everyone wins in a technology transition, but that’s exactly what’s been accomplished in our move to Google App Engine. With a better customer experience, lower operating costs, and fewer technological headaches, we only wish that we’d made the switch sooner. &lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;- Contributed by Philip Talamas, COO, Minyanville Media, Inc. &lt;h6&gt;URL: &lt;a href="http://googlecloudplatform.blogspot.com/2013/06/google-cloud-platform-powers-minyanville-buzz-and-banter.html"&gt;http://googlecloudplatform.blogspot.com/2013/06/google-cloud-platform-powers-minyanville-buzz-and-banter.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/6167545491687920721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=6167545491687920721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/6167545491687920721'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/6167545491687920721'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-google-cloud-platform-powers.html' title='[Gd] Google Cloud Platform Powers Minyanville’s Buzz and Banter'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/gRpL9C4oh-O-zHHemzgHq05u5dWbFK043S-gd4iueb-XhR61CDLF_ZOvZU2JH16L7I1nhbHPwOVrUexYC_3Xw_uFgmstYArxmRJNzHVkRVofj-M0next3Y8d=s72-c' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-8926071183896218238</id><published>2013-06-26T21:56:00.001-07:00</published><updated>2013-06-26T21:56:04.064-07:00</updated><title type='text'>[Gd] Dev Channel Update for Chrome OS</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os_26.html"&gt;Dev Channel Update for Chrome OS&lt;/a&gt;&lt;/h4&gt; The Dev channel has been updated to 29.0.1547.1 (platform version: 4319.0.0) for all platforms except the HP Chromebook and Samsung Chromebox.  This release fixes some major causes of crashes as well as other bugs.&lt;br&gt;&lt;br&gt;Notable Updates:&lt;br&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://crbug.com/225429"&gt;225429&lt;/a&gt; - Fix to Segmentation Fault in Window Manager causing many crashes.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;If you find new issues, please let us know by visiting our &lt;a href="http://support.google.com/chromeos"&gt;help site&lt;/a&gt; or &lt;a href="http://code.google.com/p/chromium-os/issues/entry"&gt;filing a bug&lt;/a&gt;. Interested in switching channels? &lt;a href="http://www.google.com/support/chromeos/bin/answer.py?answer=1086915"&gt;Find out how.&lt;/a&gt; You can submit feedback using ‘Report an issue...’ in the Chrome menu (3 horizontal bars in the upper right corner of the browser).&lt;br&gt;&lt;br&gt;Ben Henry&lt;br&gt;Google Chrome&lt;/div&gt;&lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os_26.html"&gt;http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os_26.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/8926071183896218238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=8926071183896218238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8926071183896218238'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8926071183896218238'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-dev-channel-update-for-chrome-os_26.html' title='[Gd] Dev Channel Update for Chrome OS'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-5124852693750420462</id><published>2013-06-26T19:03:00.001-07:00</published><updated>2013-06-26T19:03:44.239-07:00</updated><title type='text'>[Gd] Tutorial: Adding a cloud backend to your application with Android
Studio</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlecloudplatform.blogspot.com/"&gt;Cloud Platform Blog&lt;/a&gt;: &lt;a href="http://googlecloudplatform.blogspot.com/2013/06/tutorial-adding-cloud-backend-to-your-application-with-android-studio_26.html"&gt;Tutorial: Adding a cloud backend to your application with Android Studio&lt;/a&gt;&lt;/h4&gt; Android Studio lets you easily add a cloud backend to your application, right from your IDE. A backend allows you to implement functionality such as backing up user data to the cloud, serving content to client apps, real-time interactions, sending push notifications through&lt;a href="http://developer.android.com/google/gcm/index.html"&gt;Google Cloud Messaging for Android&lt;/a&gt;, and more. Additionally, having your application’s backend hosted on &lt;a href="https://cloud.google.com/products/"&gt;Google App Engine&lt;/a&gt; means that you can focus on what the cloud application does, without having to worry about administration, reliability or scalability.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;When you create a backend using Android Studio, it generates a new App Engine application under the same project, and gives your Android application the necessary libraries and a sample activity to interact with that backend. Support for GCM is built-in, making it easy to sync data across multiple devices. Once you've generated the project, you can &lt;br&gt;&lt;br /&gt;build and run your client and server code together, in a single environment, and even deploy your backend code right from Android Studio. &lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;In this post we’ll focus on how to get started with the basic setup. From there it's easy to extend the basic setup to meet your needs.&lt;br&gt;&lt;br /&gt;&lt;div style="float:right;margin:1.5em 0 1.5em 2.5em;width:250px"&gt;&lt;img src="https://lh6.googleusercontent.com/M1pVDF40QCcNGS1gWO1olG1uBQf0Gy_Jga_3huH38xqVapmNKXVdqhQH6usfudLF7_eAuSSAI-k53X8QPZ_wtj5Kyyv9JJoUqitSVTVKdl3S-RZPMxKfJRI2ZQ" style="border:2px solid #ddd" width="250px;"&gt;    &lt;br&gt;&lt;br /&gt;&lt;img src="https://lh3.googleusercontent.com/gzT_0mus2MrCONtgLyaunjanNrr50RaU5hsVsJKheRUa20X4fUZT2pm9PsGRAeRYdS4BnjKvrHYH1sQoyyn_iXzxZ1zhAzAJybqS6UyVJhNJut3VRb1gA30PvA" style="border:2px solid #ddd;margin-top:.5em" width="250px;"&gt;&lt;/div&gt;&lt;h3&gt;Preliminary setup&lt;/h3&gt;Before you get started, make sure you take care of these tasks first: &lt;br&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://developer.android.com/sdk/installing/studio.html"&gt;Download Android Studio&lt;/a&gt; if you haven’t done so already and set it up. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make sure you have an application project set up in Android Studio. You can use any working app that you want to integrate with your backend, even a sample app.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you'll be running the app on an emulator, download the &lt;strong&gt;Google APIs Addon&lt;/strong&gt; from the SDK Manager and run your app on that image. &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;li&gt;Create a Google Cloud Platform project: In the &lt;a href="http://cloud.google.com/console"&gt;Cloud Console&lt;/a&gt;, create a new project (or reuse an old one) and make note of the Project ID. Click on the words “Project ID” on the top left to toggle to the Project Number. Copy this as well.&lt;/li&gt;&lt;br&gt;&lt;br /&gt;&lt;li&gt;Enable GCM and obtain API Key: In the &lt;a href="http://cloud.google.com/console"&gt;Cloud Console&lt;/a&gt;, click on APIs and turn on the Google Cloud Messaging for Android API. Then, click on the “Register App” button on the top left, enter a name for the app, then select “Android” and “Accessing APIs via a web server”. In the resulting screen, expand the “Server Key” box and copy the API key.&lt;/li&gt;&lt;br&gt;&lt;br /&gt;&lt;h3 style="margin-top:1.5em"&gt;1. Generate an App Engine project&lt;/h3&gt;In Android Studio, open an existing Android application that you want to modify, or create a new one. Select the &lt;strong&gt;Android app module&lt;/strong&gt; under the Project node. Then click &lt;b&gt;Tools&lt;/b&gt; &amp;gt; &lt;b&gt;Google Cloud Endpoints&lt;/b&gt; &amp;gt; &lt;b&gt;Create App Engine Backend&lt;/b&gt;. &lt;br&gt;&lt;br /&gt;In the wizard, enter the Project ID, Project Number, and API Key of your Cloud project.&lt;br&gt;&lt;br /&gt;&lt;img src="https://lh3.googleusercontent.com/lSZMDVQbHabBV_4ZDdywWGHH7BR19DzceRzk8mYaomJR1ANiHWPU-h_GzGH3m0fxIVUoGTXlJc_kh9dBK8M2EqXtiMkdtQW80kypCaHWB4sP1fyvNUR3KR5vhw" style="border:2px solid #ddd;margin:1em 0em" width="500px;"&gt;&lt;br&gt;&lt;br /&gt;This will create:&lt;br&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An &lt;strong&gt;App Engine project&lt;/strong&gt; which contains the backend application source&lt;/li&gt;&lt;br /&gt;&lt;li&gt;An &lt;strong&gt;endpoints module&lt;/strong&gt; with a &lt;code&gt;RegisterActivity&lt;/code&gt; class, related resources, and client libraries for the Android app to communicate with the backend&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;The generated App Engine application (&amp;lt;app_name&amp;gt;-AppEngine) is an Apache Maven-based project. The Maven pom.xml file takes care of downloading all the dependencies, including the App Engine SDK. This module also contains the following: &lt;br&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A Google Cloud Endpoint (&lt;code&gt;DeviceInfoEndpoint.java&lt;/code&gt;, auto-generated from &lt;code&gt;DeviceInfo.java&lt;/code&gt;) that your Android app will “register” itself through. Your backend will use that registration info to send a push notification to the device.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A sample endpoint, &lt;code&gt;MessageEndpoint.java&lt;/code&gt;, to list previously sent GCM messages and send new ones.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A starter web frontend application (index.html in webapp directory) that will show all the devices that have registered with your service, and a form to send them a GCM notification.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br&gt;&lt;br /&gt;The &lt;strong&gt;endpoints module&lt;/strong&gt; (&amp;lt;app_name&amp;gt;-endpoints) generated for you contains the classes and libraries needed by the Android application to interact with the backend: &lt;br&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A &lt;code&gt;RegisterActivity.java&lt;/code&gt; class that, when invoked, will go through the GCM registration flow and also register itself with the recently created backend through &lt;code&gt;DeviceInfoEndpoint&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Client libraries, so that the application can talk to the backend using an object rather than directly using raw REST calls.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;XML files related to the newly created activity.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;h3 style="margin-top:1.5em"&gt;2. Add GCM registration to your app&lt;/h3&gt;In your Android application, you can call &lt;code&gt;RegisterActivity&lt;/code&gt; whenever you want the registration to take place (for example, from within the &lt;code&gt;onCreate()&lt;/code&gt; method of your main activity.&lt;br&gt;&lt;br /&gt;&lt;pre&gt;...&lt;br /&gt;import android.content.Intent;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        ...&lt;br /&gt;        Intent intent = new Intent(this, RegisterActivity.class);&lt;br /&gt;        startActivity(intent);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;h3 style="margin-top:1.75em"&gt;3. Deploy the sample backend server&lt;/h3&gt;When you're ready to deploy an update to your ( the sample ) production backend in the cloud, you can do that easily from the IDE. Click on the “Maven Projects” button on the right edge of the IDE, under &lt;strong&gt;Plugins&lt;/strong&gt; &amp;gt; &lt;strong&gt;App Engine&lt;/strong&gt;, right-click and run the &lt;i&gt;appengine:update&lt;/i&gt; goal.&lt;br&gt;&lt;br /&gt;&lt;img src="https://lh4.googleusercontent.com/m6CnW9Oj1ByDQO8f8S8c52-ZPkTfjkQuHQzbvpTxs4wQ6LXRux8lt69gH003RNTE7Lsrsx7C7XkZFKXslDWJUqP0QUUjGz6r6ZDgkjZU4OxLwR3wsYCIsXycxw" style="margin:1.25em" width="577px;"&gt;&lt;br&gt;&lt;br /&gt;As soon as the update is deployed, you can also access your endpoints through the APIs Explorer at &lt;code&gt;http://&amp;lt;project-id&amp;gt;.appspot.com/_ah/api/explorer&lt;/code&gt;.&lt;br&gt;&lt;br /&gt;&lt;div style="float:right;margin:1.5em 0 1.5em 1.5em"&gt;&lt;img src="https://lh3.googleusercontent.com/qdpwzabZrQ2i2LV6uItiPRZenBkjl4QNXYk_BrIofOlKCaBoyZxXbyL-GGyHXK51Jb4rBGmr8yxAsRcdjztB0ExSxp8ZtNuVFdOcxSGqGT4aQlcFScOK5cU1cA" style="border:2px solid #ddd;padding:0;width:230px"&gt;&lt;/div&gt;For testing and debugging, you can also run your backend server locally without having to deploy your changes to the production backend. To run the backend locally, just set the value of &lt;code&gt;LOCAL_ANDROID_RUN&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; in &lt;code&gt;CloudEndpointUtils.java&lt;/code&gt; in the App Engine module.&lt;br&gt;&lt;br /&gt;&lt;h3 style="margin-top:1.5em"&gt;4. Build and run the Android app&lt;/h3&gt;Now build and run your Android app. If you called &lt;code&gt;RegisterActivity&lt;/code&gt; from within your main activity, the device will register itself with the GCM service and the App Engine app you just deployed. If you are running the app on an emulator, note that GCM functionality requires the &lt;strong&gt;Google APIs Addon&lt;/strong&gt; image, which you can download from the SDK Manager. &lt;br&gt;&lt;br /&gt;You can access your sample web console on any browser at &lt;code&gt;http://&amp;lt;project-id&amp;gt;.appspot.com&lt;/code&gt;. There, you will see that the app you just started has registered with the backend. Fill out the form and send a message to see GCM in action! &lt;br&gt;&lt;br /&gt;&lt;h3&gt;Extending the basic setup&lt;/h3&gt;It's easy to expand your cloud services right in Android Studio. You can add new server-side code and through Android Studio instantly generate your own &lt;a href="https://developers.google.com/appengine/docs/java/endpoints/"&gt;custom endpoints&lt;/a&gt; to access those services from your Android app. &lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;- Posted by &lt;a href="https://plus.google.com/u/0/110864045657370868418/posts"&gt;Sachin Kotwani&lt;/a&gt;, Product Manager &lt;h6&gt;URL: &lt;a href="http://googlecloudplatform.blogspot.com/2013/06/tutorial-adding-cloud-backend-to-your-application-with-android-studio_26.html"&gt;http://googlecloudplatform.blogspot.com/2013/06/tutorial-adding-cloud-backend-to-your-application-with-android-studio_26.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/5124852693750420462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=5124852693750420462' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/5124852693750420462'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/5124852693750420462'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-tutorial-adding-cloud-backend-to.html' title='[Gd] Tutorial: Adding a cloud backend to your application with Android&#xA;Studio'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/M1pVDF40QCcNGS1gWO1olG1uBQf0Gy_Jga_3huH38xqVapmNKXVdqhQH6usfudLF7_eAuSSAI-k53X8QPZ_wtj5Kyyv9JJoUqitSVTVKdl3S-RZPMxKfJRI2ZQ=s72-c' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-8256953500248090139</id><published>2013-06-26T12:53:00.001-07:00</published><updated>2013-06-26T12:53:03.008-07:00</updated><title type='text'>[Gd] Adding a Backend to Your App In Android Studio</title><content type='html'>&lt;h4&gt;&lt;a href="http://android-developers.blogspot.com/"&gt;Android Developers Blog&lt;/a&gt;: &lt;a href="http://android-developers.blogspot.com/2013/06/adding-backend-to-your-app-in-android.html"&gt;Adding a Backend to Your App In Android Studio&lt;/a&gt;&lt;/h4&gt; &lt;em&gt;Posted by &lt;a href="https://plus.google.com/u/0/110864045657370868418/posts"&gt;Sachin Kotwani&lt;/a&gt;, Google Cloud Platform team&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Android Studio lets you easily add a cloud backend to your application, right from your IDE. A backend allows you to implement functionality such as backing up user data to the cloud, serving content to client apps, real-time interactions, sending push notifications through &lt;a href="http://developer.android.com/google/gcm/index.html"&gt;Google Cloud Messaging for Android&lt;/a&gt; (GCM), and more. Additionally, having your application’s backend hosted on &lt;a href="https://cloud.google.com/products/"&gt;Google App Engine&lt;/a&gt; means that you can focus on what the cloud application does, without having to worry about administration, reliability or scalability.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When you create a backend using Android Studio, it generates a new App Engine application under the same project, and gives your Android application the necessary libraries and a sample activity to interact with that backend. Support for GCM is built-in, making it easy to sync data across multiple devices. Once you've generated the project, you can build and run your client and server code together, in a single environment, and even deploy your backend code right from Android Studio. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In this post we’ll focus on how to get started with the basic setup. From there it's easy to extend the basic setup to meet your needs.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="float:right;width:300px;margin:1.5em 0 1.5em 2.5em"&gt;&lt;br /&gt;&lt;img width="340px;" src="https://lh6.googleusercontent.com/M1pVDF40QCcNGS1gWO1olG1uBQf0Gy_Jga_3huH38xqVapmNKXVdqhQH6usfudLF7_eAuSSAI-k53X8QPZ_wtj5Kyyv9JJoUqitSVTVKdl3S-RZPMxKfJRI2ZQ" style="border:2px solid #ddd"&gt;    &lt;br /&gt;&lt;br /&gt;&lt;img width="340px;" src="https://lh3.googleusercontent.com/gzT_0mus2MrCONtgLyaunjanNrr50RaU5hsVsJKheRUa20X4fUZT2pm9PsGRAeRYdS4BnjKvrHYH1sQoyyn_iXzxZ1zhAzAJybqS6UyVJhNJut3VRb1gA30PvA" style="border:2px solid #ddd;margin-top:.5em"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Preliminary setup&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Before you get started, make sure you take care of these tasks first: &lt;/p&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://developer.android.com/sdk/installing/studio.html"&gt;Download Android Studio&lt;/a&gt; if you haven’t done so already and set it up. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make sure you have an application project set up in Android Studio. You can use any working app that you want to integrate with your backend, even a sample app.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;If you'll be running the app on an emulator, download the Google APIs Addon from the SDK Manager and run your app on that image. &lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Create a Google Cloud Platform project: In the &lt;a href="http://cloud.google.com/console"&gt;Cloud Console&lt;/a&gt;, create a new project (or reuse an old one) and make note of the Project ID. Click on the words “Project ID” on the top left to toggle to the Project Number. Copy this as well.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Enable GCM and obtain API Key: In the &lt;a href="http://cloud.google.com/console"&gt;Cloud Console&lt;/a&gt;, click on APIs and turn on the Google Cloud Messaging for Android API. Then, click on the “Register App” button on the top left, enter a name for the app, then select “Android” and “Accessing APIs via a web server”. In the resulting screen, expand the “Server Key” box and copy the API key.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="margin-top:1.5em"&gt;1. Generate an App Engine project&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In Android Studio, open an existing Android application that you want to modify, or create a new one. Select the &lt;strong&gt;Android app module&lt;/strong&gt; under the Project node. Then click &lt;b&gt;Tools&lt;/b&gt; &amp;gt; &lt;b&gt;Google Cloud Endpoints&lt;/b&gt; &amp;gt; &lt;b&gt;Create App Engine Backend&lt;/b&gt;. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In the wizard, enter the Project ID, Project Number, and API Key of your Cloud project.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://lh3.googleusercontent.com/lSZMDVQbHabBV_4ZDdywWGHH7BR19DzceRzk8mYaomJR1ANiHWPU-h_GzGH3m0fxIVUoGTXlJc_kh9dBK8M2EqXtiMkdtQW80kypCaHWB4sP1fyvNUR3KR5vhw" width="500px;" style="border:2px solid #ddd;margin:1em 0em"&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This will create:&lt;/p&gt;&lt;br /&gt;    &lt;ul&gt;&lt;br /&gt;        &lt;li&gt;An &lt;strong&gt;App Engine project&lt;/strong&gt; which contains the backend application source&lt;/li&gt;&lt;br /&gt;        &lt;li&gt;An &lt;strong&gt;endpoints module&lt;/strong&gt; with a &lt;code&gt;RegisterActivity&lt;/code&gt; class, related resources, and client libraries for the Android app to communicate with the backend&lt;/li&gt;&lt;br /&gt;    &lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The generated &lt;strong&gt;App Engine application&lt;/strong&gt; (&amp;lt;app_name&amp;gt;-AppEngine) is an Apache Maven-based project. The Maven pom.xml file takes care of downloading all the dependencies, including the App Engine SDK. This module also contains the following: &lt;/p&gt;&lt;br /&gt;            &lt;ul&gt;&lt;br /&gt;                &lt;li&gt;A Google Cloud Endpoint (&lt;code&gt;DeviceInfoEndpoint.java&lt;/code&gt;, auto-generated from &lt;code&gt;DeviceInfo.java&lt;/code&gt;) that your Android app will “register” itself through. Your backend will use that registration info to send a push notification to the device.&lt;/li&gt; &lt;br /&gt;                &lt;li&gt;A sample endpoint, &lt;code&gt;MessageEndpoint.java&lt;/code&gt;, to list previously sent GCM messages and send new ones.&lt;/li&gt; &lt;br /&gt;                &lt;li&gt;A starter web frontend application (index.html in webapp directory) that will show all the devices that have registered with your service, and a form to send them a GCM notification.&lt;/li&gt;  &lt;br /&gt;            &lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;            &lt;p&gt;The &lt;strong&gt;endpoints module&lt;/strong&gt; (&amp;lt;app_name&amp;gt;-endpoints) generated for you contains the classes and libraries needed by the Android application to interact with the backend: &lt;/p&gt;&lt;br /&gt;            &lt;ul&gt;&lt;br /&gt;                &lt;li&gt;A &lt;code&gt;RegisterActivity.java&lt;/code&gt; class that, when invoked, will go through the GCM registration flow and also register itself with the recently created backend through &lt;code&gt;DeviceInfoEndpoint&lt;/code&gt;.&lt;/li&gt;&lt;br /&gt;                &lt;li&gt;Client libraries, so that the application can talk to the backend using an object rather than directly using raw REST calls.&lt;/li&gt;&lt;br /&gt;                &lt;li&gt;XML files related to the newly created activity.&lt;/li&gt;   &lt;br /&gt;            &lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="margin-top:1.5em"&gt;2. Add GCM registration to your app&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;In your Android application, you can call &lt;code&gt;RegisterActivity&lt;/code&gt; whenever you want the registration to take place (for example, from within the &lt;code&gt;onCreate()&lt;/code&gt; method of your main activity.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;...&lt;br /&gt;import android.content.Intent;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;    protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        ...&lt;br /&gt;        Intent intent = new Intent(this, RegisterActivity.class);&lt;br /&gt;        startActivity(intent);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="margin-top:1.75em"&gt;3. Deploy the sample backend server&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When you're ready to deploy an update to your ( the sample ) production backend in the cloud, you can do that easily from the IDE. Click on the “Maven Projects” button on the right edge of the IDE, under &lt;strong&gt;Plugins&lt;/strong&gt; &amp;gt; &lt;strong&gt;App Engine&lt;/strong&gt;, right-click and run the &lt;i&gt;appengine:update&lt;/i&gt; goal.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://lh4.googleusercontent.com/m6CnW9Oj1ByDQO8f8S8c52-ZPkTfjkQuHQzbvpTxs4wQ6LXRux8lt69gH003RNTE7Lsrsx7C7XkZFKXslDWJUqP0QUUjGz6r6ZDgkjZU4OxLwR3wsYCIsXycxw" width="577px;" style="margin:1.25em"&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;As soon as the update is deployed, you can also access your endpoints through the APIs Explorer at &lt;code&gt;http://&amp;lt;project-id&amp;gt;.appspot.com/_ah/api/explorer&lt;/code&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="float:right;margin:1.5em 0 1.5em 1.5em"&gt;&lt;br /&gt;&lt;img src="https://lh3.googleusercontent.com/qdpwzabZrQ2i2LV6uItiPRZenBkjl4QNXYk_BrIofOlKCaBoyZxXbyL-GGyHXK51Jb4rBGmr8yxAsRcdjztB0ExSxp8ZtNuVFdOcxSGqGT4aQlcFScOK5cU1cA" style="border:2px solid #ddd;width:230px;padding:0"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For testing and debugging, you can also run your backend server locally without having to deploy your changes to the production backend. To run the backend locally, just set the value of &lt;code&gt;LOCAL_ANDROID_RUN&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt; in &lt;code&gt;CloudEndpointUtils.java&lt;/code&gt; in the App Engine module.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3 style="margin-top:1.5em"&gt;4. Build and run the Android app&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now build and run your Android app. If you called &lt;code&gt;RegisterActivity&lt;/code&gt; from within your main activity, the device will register itself with the GCM service and the App Engine app you just deployed. If you are running the app on an emulator, note that GCM functionality requires the &lt;strong&gt;Google APIs Addon&lt;/strong&gt; image, which you can download from the SDK Manager. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You can access your sample web console on any browser at &lt;code&gt;http://&amp;lt;project-id&amp;gt;.appspot.com&lt;/code&gt;. There, you will see that the app you just started has registered with the backend. Fill out the form and send a message to see GCM in action! &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Extending the basic setup&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;It's easy to expand your cloud services right in Android Studio. You can add new server-side code and through Android Studio instantly generate your own &lt;a href="https://developers.google.com/appengine/docs/java/endpoints/"&gt;custom endpoints&lt;/a&gt; to access those services from your Android app. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="display:inline-block;float:right;line-height:0;clear:both"&gt;&lt;div style="float:left"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/G6YXn3t9Lqz" style="color:#333333;text-decoration:none"&gt;&lt;span style="font:13px/16px arial,sans-serif;margin-right:4px;margin-top:0px"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/G6YXn3t9Lqz" style="color:#333333;text-decoration:none"&gt;&lt;span style="font:bold 13px/16px arial,sans-serif;margin-right:4px;margin-top:7px"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float:right"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/G6YXn3t9Lqz" style="color:#333333;text-decoration:none"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border:0" width="32"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://android-developers.blogspot.com/2013/06/adding-backend-to-your-app-in-android.html"&gt;http://android-developers.blogspot.com/2013/06/adding-backend-to-your-app-in-android.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/8256953500248090139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=8256953500248090139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8256953500248090139'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8256953500248090139'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-adding-backend-to-your-app-in.html' title='[Gd] Adding a Backend to Your App In Android Studio'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/M1pVDF40QCcNGS1gWO1olG1uBQf0Gy_Jga_3huH38xqVapmNKXVdqhQH6usfudLF7_eAuSSAI-k53X8QPZ_wtj5Kyyv9JJoUqitSVTVKdl3S-RZPMxKfJRI2ZQ=s72-c' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-2682187006941113362</id><published>2013-06-26T01:04:00.001-07:00</published><updated>2013-06-26T01:04:03.840-07:00</updated><title type='text'>[Gd] Dev Channel Update</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/dev-channel-update_25.html"&gt;Dev Channel Update&lt;/a&gt;&lt;/h4&gt; The Dev Channel has been updated to 29.0.1547.0 for Windows, Linux and Chrome Frame; 29.0.1547.3 for Mac. This release fixes a number of crashes, as well as other bugs. There is one known issue:&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://code.google.com/p/chromium/issues/detail?id=253808"&gt;[253808]&lt;/a&gt; - Chrome hangs when disconnecting sync account&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;A full list of changes is available in the &lt;a href="http://build.chromium.org/buildbot/perf/dashboard/ui/changelog.html?url=/trunk/src&amp;amp;range=206856:208345&amp;amp;mode=html"&gt;SVN log&lt;/a&gt;. Interested in switching release channels? &lt;a href="http://dev.chromium.org/getting-involved/dev-channel"&gt;Find out how&lt;/a&gt;. If you find a new issue, please let us know by &lt;a href="http://crbug.com/"&gt;filing a bug&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br&gt;Jason Kersey&lt;br&gt;Google Chrome&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/dev-channel-update_25.html"&gt;http://googlechromereleases.blogspot.com/2013/06/dev-channel-update_25.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/2682187006941113362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=2682187006941113362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2682187006941113362'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2682187006941113362'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-dev-channel-update_26.html' title='[Gd] Dev Channel Update'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-2123917239603501521</id><published>2013-06-25T00:16:00.003-07:00</published><updated>2013-06-25T00:16:50.934-07:00</updated><title type='text'>[Gd] Google+ page identities and the YouTube API</title><content type='html'>&lt;h4&gt;&lt;a href="http://apiblog.youtube.com/"&gt;YouTube API Blog&lt;/a&gt;: &lt;a href="http://apiblog.youtube.com/2013/06/google-page-identities-and-youtube-api.html"&gt;Google+ page identities and the YouTube API&lt;/a&gt;&lt;/h4&gt; &lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;As more YouTube channels start using &lt;/span&gt;&lt;a href="http://youtubecreator.blogspot.com/2013/04/using-google-page-identity-on-youtube.html" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;Google+ page identities&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;, here are some best practices to ensure that your code can make authorized API calls to access the channel.&lt;/span&gt;&lt;/div&gt;&lt;b style="font-weight:normal"&gt;&lt;br&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;/b&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;With Google+ page identities, there can be many channels associated with a single Google Account. For example, when a user Alice Smith signs into her Google Account, she may have her “Alice Smith” (personal) channel on that account, and potentially additional channels, linked to Google+ pages, on associated accounts. These associated accounts do not have a password by default; she gets access to them by signing into her personal account, and then using a switcher to go back and forth between them.&lt;/span&gt;&lt;/div&gt;&lt;b style="font-weight:normal"&gt;&lt;br&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;/b&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;How does this channel selection work with APIs? With API access through web-based OAuth 2, the switcher comes automatically. The web flow will ask Alice which account she wants to use, after she signs into her “Alice Smith” account. The OAuth 2 tokens your application gets back work just as they do today.&lt;/span&gt;&lt;/div&gt;&lt;b style="font-weight:normal"&gt;&lt;br&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;img height="245px;" src="https://lh4.googleusercontent.com/DVj66wlZVZ1mT06ppzuLnZdF4aYJ5FW25xEpAybLxo1w7Dixpfm73ccFurm8YefQ5vnxps2k_ZsxEXjBSIGgenDwJBK1vWUnpMKCYszqvBQnsug1Rq2uxH31ww" width="564px;"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt;text-align:center"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:italic;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;The OAuth 2 web-based “Select an account” interface, allowing a user to grant access to their personal channel or any channels linked to Google+ pages that they manage.&lt;/span&gt;&lt;/div&gt;&lt;b style="font-weight:normal"&gt;&lt;br&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;/b&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;If you’re not using web-based OAuth 2 (you are still relying on one of our &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/2.0/developers_guide_protocol_deprecated" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;deprecated authorization methods&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;), or if you are an Android developer who is &lt;/span&gt;&lt;a href="http://developer.android.com/training/id-auth/authenticate.html" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;using OAuth 2&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; (there is currently no native Android account switcher), then the API will choose the “wrong” channel in some cases, or even no channel (e.g., if the personal account doesn’t have a channel). When this happens, the user has two options to specify the correct channel:&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-bottom:0pt;margin-top:0pt"&gt;&lt;li dir="ltr" style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;list-style-type:disc;text-decoration:none;vertical-align:baseline"&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;Use the &lt;/span&gt;&lt;a href="http://www.youtube.com/account_advanced" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;Advanced Account Settings&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; tool to select which channel should be used. This is recommended when a user has one channel they want to use for all applications.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li dir="ltr" style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;list-style-type:disc;text-decoration:none;vertical-align:baseline"&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;a href="https://support.google.com/plus/answer/2882201" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;Set up login credentials for each of their Google+ pages&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;, and specify those credentials, not their normal Google Account credentials, for each application that needs access.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b style="font-weight:normal"&gt;&lt;br&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;/b&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;As a best practice, we recommend that you ensure users know of these options, so your application will access the correct channel. Even more importantly, we recommend that all applications provide visual feedback letting users know which channel is currently authorized. If you’re still using version 2 of the YouTube Data API, you can &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/2.0/developers_guide_protocol_profiles" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;retrieve the profile&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; of the special identifier &lt;/span&gt;&lt;span style="background-color:transparent;color:black;font-family:&amp;#39;Courier New&amp;#39;;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;default&lt;/span&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;; this corresponds to the currently authorized channel’s profile. In the version 2 response, the channel’s display name is returned as an attribute of &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_yt:username" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:&amp;#39;Courier New&amp;#39;;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;yt:username&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;, and the profile image can be found by looking at &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/2.0/reference#youtube_data_api_tag_media:thumbnail" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:&amp;#39;Courier New&amp;#39;;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;media:thumbnail&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;. If you’ve started using &lt;/span&gt;&lt;a href="http://apiblog.youtube.com/2012/12/the-simpler-yet-more-powerful-new.html" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;version 3&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;, then the method to use is &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/v3/docs/channels/list" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:&amp;#39;Courier New&amp;#39;;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;channels.list()&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; with the &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/v3/docs/channels/list#part" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:&amp;#39;Courier New&amp;#39;;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;part=snippet&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; and &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/v3/docs/channels/list#mine" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:&amp;#39;Courier New&amp;#39;;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;mine=true&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; parameters set. The version 3 response contains a channel’s display name in &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/v3/docs/channels#snippet.title" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:&amp;#39;Courier New&amp;#39;;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;channel.snippet.title&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; and profile image in &lt;/span&gt;&lt;a href="https://developers.google.com/youtube/v3/docs/channels#snippet.thumbnails.(key).url" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:&amp;#39;Courier New&amp;#39;;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;channel.snippet.thumbnails.default.url&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;.&lt;/span&gt;&lt;/div&gt;&lt;b style="font-weight:normal"&gt;&lt;br&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;/b&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;To summarize, here are the high-level points to keep in mind:&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-bottom:0pt;margin-top:0pt"&gt;&lt;li dir="ltr" style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;list-style-type:disc;text-decoration:none;vertical-align:baseline"&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;OAuth 2 will automatically display a “Select an account” web interface, allowing users with multiple channels associated with their account to choose which one they’re authorizing access to.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;ul style="margin-bottom:0pt;margin-top:0pt"&gt;&lt;li dir="ltr" style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;list-style-type:circle;text-decoration:none;vertical-align:baseline"&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;...this doesn’t apply to Android OAuth 2, yet.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li dir="ltr" style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;list-style-type:disc;text-decoration:none;vertical-align:baseline"&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;Use of other authorization methods will mean some users need to specify which channel to use, either in their &lt;/span&gt;&lt;a href="http://www.youtube.com/account_advanced" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;Advanced Account Settings&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; (if they consistently use one channel), or by &lt;/span&gt;&lt;a href="https://support.google.com/plus/answer/2882201" style="text-decoration:none"&gt;&lt;span style="background-color:transparent;color:#1155cc;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;setting up login credentials&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt; for each channel, and using them as needed.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li dir="ltr" style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;list-style-type:disc;text-decoration:none;vertical-align:baseline"&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;All developers are strongly encouraged to display visual feedback letting their users know which channel is currently authorized.&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b style="font-weight:normal"&gt;&lt;br&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;&lt;/span&gt;&lt;/b&gt;&lt;div dir="ltr" style="line-height:1.15;margin-bottom:0pt;margin-top:0pt"&gt;&lt;span style="background-color:transparent;color:black;font-family:Arial;font-size:15px;font-style:normal;font-variant:normal;font-weight:normal;text-decoration:none;vertical-align:baseline;white-space:pre-wrap"&gt;Cheers,&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family:Arial;font-size:15px;vertical-align:baseline;white-space:pre-wrap"&gt;—&lt;/span&gt;&lt;a href="https://plus.google.com/+jeffposnick" style="text-decoration:none"&gt;&lt;span style="color:#1155cc;font-family:Arial;font-size:15px;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;Jeff Posnick&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family:Arial;font-size:15px;vertical-align:baseline;white-space:pre-wrap"&gt;, &lt;/span&gt;&lt;a href="http://plus.google.com/+youtubedev" style="text-decoration:none"&gt;&lt;span style="color:#1155cc;font-family:Arial;font-size:15px;text-decoration:underline;vertical-align:baseline;white-space:pre-wrap"&gt;YouTube API Team&lt;/span&gt;&lt;/a&gt; &lt;h6&gt;URL: &lt;a href="http://apiblog.youtube.com/2013/06/google-page-identities-and-youtube-api.html"&gt;http://apiblog.youtube.com/2013/06/google-page-identities-and-youtube-api.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/2123917239603501521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=2123917239603501521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2123917239603501521'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/2123917239603501521'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-google-page-identities-and-youtube.html' title='[Gd] Google+ page identities and the YouTube API'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh4.googleusercontent.com/DVj66wlZVZ1mT06ppzuLnZdF4aYJ5FW25xEpAybLxo1w7Dixpfm73ccFurm8YefQ5vnxps2k_ZsxEXjBSIGgenDwJBK1vWUnpMKCYszqvBQnsug1Rq2uxH31ww=s72-c' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-8988075262133485825</id><published>2013-06-25T00:16:00.001-07:00</published><updated>2013-06-25T00:16:50.224-07:00</updated><title type='text'>[Gd] Offer Your Educational Apps On Google Play for Education</title><content type='html'>&lt;h4&gt;&lt;a href="http://android-developers.blogspot.com/"&gt;Android Developers Blog&lt;/a&gt;: &lt;a href="http://android-developers.blogspot.com/2013/06/offer-your-educational-apps-on-google.html"&gt;Offer Your Educational Apps On Google Play for Education&lt;/a&gt;&lt;/h4&gt; &lt;em&gt;Posted by Pratip Banerji, Google Play for Education team&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin:2em 0em 2em 3em;float:right"&gt;&lt;br /&gt;&lt;img style="border:2px solid #ddd;width:400px;padding:0" src="http://4.bp.blogspot.com/-alMLQmzxIv8/UcemhspEC4I/AAAAAAAACaA/LxO7vr9t4dk/s1600/gpe-schools.JPG"&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Last month, we announced &lt;a href="http://developer.android.com/edu"&gt;Google Play for Education&lt;/a&gt; — a platform enabling developers and content providers to &lt;b&gt;reach K-12 educators and students&lt;/b&gt; in the United States through a new Android based initiative. Google Play for Education is an &lt;b&gt;extension of the Google Play Store&lt;/b&gt; for schools, adding curation, bulk purchasing, and instant distribution to students’ Android tablets for educational apps, books and videos. As we said &lt;a href="http://youtu.be/9pmPa_KxsAM?t=1h16m9s"&gt;at the time&lt;/a&gt;, we are excited to be doing our part to make technology and innovation in the classroom more accessible.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Starting today, you can use the &lt;a href="https://play.google.com/apps/publish/"&gt;Google Play Developer Console&lt;/a&gt;  to &lt;b&gt;mark your apps for inclusion&lt;/b&gt; in Google Play for Education, which is actively being piloted in schools across the country. Marking your app identifies it as targeted for the US K-12 educational market and queues it for evaluation by a third-party network of educators. These educators perform a first-pass qualification of apps, assigning the appropriate subject, grade, and common core standards metadata, while evaluating whether they meet the &lt;a href="http://developer.android.com/distribute/googleplay/edu/guidelines.html"&gt;Google Play for Education criteria for classroom use&lt;/a&gt;. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Leading up to the fall launch, the Google Play for Education team is conducting an &lt;b&gt;extensive series of pilots&lt;/b&gt; that include schools and students across the U.S. By marking your app for inclusion &lt;b&gt;now&lt;/b&gt;, you will be getting your app into the hands of these schools and key influencers in the education technology community.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Whether you already have an existing educational app or are looking to build one, take a look at our &lt;a href="http://developer.android.com/distribute/googleplay/edu/guidelines.html"&gt;Guidelines for Apps&lt;/a&gt; to make sure your app is appropriate for the K-12 environment. Follow our detailed requirements and test your app to ensure it is &lt;b&gt;optimized for Android tablets&lt;/b&gt;.  Then, upload your new or updated app, mark it for inclusion in Google Play for Education, and publish. We will email you when your app has been evaluated. Depending on app submission volume, this process can take 3-4 weeks. For more information, see &lt;a href="http://developer.android.com/distribute/googleplay/edu/start.html"&gt;Get Started&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Also please tune in to our panel for education developers on &lt;b&gt;Tuesday June 25th at 10:30 AM EDT&lt;/b&gt;. Live from the ISTE (the International Society for Technology in Education) Conference, we’ll tell you more about developing for Google in Education and we’ll host some educators who explain what they are looking for in educational apps. The panel will be streamed on &lt;a href="https://developers.google.com/live"&gt;Google Developers Live&lt;/a&gt; and we'll make the video available to you as well.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;For more information on Google Play for Education, please visit &lt;a href="http://developer.android.com/edu"&gt;developer.android.com/edu&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div style="display:inline-block;float:right;line-height:0"&gt;&lt;div style="float:left"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/" style="color:#333333;text-decoration:none"&gt;&lt;span style="font:13px/16px arial,sans-serif;margin-right:4px;margin-top:0px"&gt;Join the discussion on&lt;/span&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/" style="color:#333333;text-decoration:none"&gt;&lt;span style="font:bold 13px/16px arial,sans-serif;margin-right:4px;margin-top:7px"&gt;+Android Developers&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="float:right"&gt;&lt;a href="https://plus.google.com/108967384991768947849/posts/" style="color:#333333;text-decoration:none"&gt;&lt;img height="32" src="https://ssl.gstatic.com/images/icons/gplus-32.png" style="border:0" width="32"&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt; &lt;h6&gt;URL: &lt;a href="http://android-developers.blogspot.com/2013/06/offer-your-educational-apps-on-google.html"&gt;http://android-developers.blogspot.com/2013/06/offer-your-educational-apps-on-google.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/8988075262133485825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=8988075262133485825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8988075262133485825'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/8988075262133485825'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-offer-your-educational-apps-on.html' title='[Gd] Offer Your Educational Apps On Google Play for Education'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-alMLQmzxIv8/UcemhspEC4I/AAAAAAAACaA/LxO7vr9t4dk/s72-c/gpe-schools.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-9154928623973670298</id><published>2013-06-24T12:22:00.003-07:00</published><updated>2013-06-24T12:22:50.011-07:00</updated><title type='text'>[Gd] Get Coding Faster Thanks to Little Green Buttons</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlecloudplatform.blogspot.com/"&gt;Cloud Platform Blog&lt;/a&gt;: &lt;a href="http://googlecloudplatform.blogspot.com/2013/06/et-coding-faster-thanks-to-little-green-buttons.html"&gt;Get Coding Faster Thanks to Little Green Buttons&lt;/a&gt;&lt;/h4&gt; On the &lt;a href="http://cloud.google.com/"&gt;Google Cloud Platform&lt;/a&gt; team we're always looking for ways to make developers' lives easier, so you can focus on building interesting applications instead of worrying about managing infrastructure.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;We also want you to be as productive as possible when you're busy writing code. We provide an SDK which offers access to production APIs, in a way that's compatible with a local development environment.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="https://cloud-playground.appspot.com/playground"&gt;&lt;img height="481" src="https://lh3.googleusercontent.com/e9sLo-HK6reaHkQRSaw03qTj7mP58TA_XTICFr3pyEuBJrfYKwSrXEqt8jpsC7G6vEn2ozL1i8Og9o7faZszSomwYvHsE76vHb5IOkElAb0dY7SRpKSOXM8L" width="640"&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;But sometimes you just want to dip your toes in the water, and the prospect of setting up a local development environment seems daunting. What if you just want to try out some &lt;a href="https://github.com/GoogleCloudPlatform/"&gt;sample code&lt;/a&gt;? What if you want to see how the actual production APIs will behave? What if you could share a code snippet with a colleague and your entire environment came along for the ride? What if there was a playground where you could try out APIs, all from within your web browser?&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;We asked ourselves these same questions and decided to try an experiment: we created a &lt;a href="https://cloud-playground.appspot.com/"&gt;Cloud Playground&lt;/a&gt;, a place for you to quickly test production APIs you're interested in using. Note: the Cloud Playground is currently limited to Python 2.7 App Engine apps.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;To get you started, we added little green &lt;img src="https://lh6.googleusercontent.com/mslJJi-ZTCM9Gx90ioMO6cqf4sG_gOFMH_ArK_vTvYuaZrPZDapamLqxxpsMraLXIluGH8AOiwDoBXG1BwzYCqYje-4u-jLHAokolJURNkPxuFeZiG-nknS_"&gt;buttons to our &lt;a href="https://developers.google.com/appengine/docs/python/gettingstartedpython27/helloworld"&gt;getting started documentation&lt;/a&gt;, which take you straight to the Cloud Playground where you can edit and run the guestbook sample code as it appears in the documentation.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;span style="margin-left:1em;margin-right:1em"&gt;&lt;a href="https://developers.google.com/appengine/docs/python/gettingstartedpython27/"&gt;&lt;img height="410px;" src="https://lh6.googleusercontent.com/1BPSOxrBLuQ7C-X1fOV5Ey5s15r6lsFhhvXpAYbslivXTgroNc0F-JtwJb_99qwBHe40l44NiaOQl2KjeKCxgOaTS0on4o7kh4z_eY2S4mADIcbNStuCtz-C" width="547px;"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;br /&gt;In addition, the main Cloud Playground page offers easy access to many more samples. There's even an option to clone other open source App Engine Python 2.7 template projects from Github.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;span style="margin-left:1em;margin-right:1em"&gt;&lt;img height="630px;" src="https://lh6.googleusercontent.com/gvoJNiNawDdjw_KKcpFkv-oCS2G4TdsdjT9Ym1SyHVd0qw8TKFSKTun7IpFgzaB1V3UXwIefQ_GlLlwgCk6gOgETmeIoQHsMpf_NnMjFlWUG_yD-ufCbae9K" width="581px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;&lt;br /&gt;How does it work? The Cloud Playground is itself an &lt;a href="https://code.google.com/p/cloud-playground/"&gt;open source project&lt;/a&gt; and consists of two modules:&lt;br&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/cloud-playground/source/checkout?repo=mimic"&gt;mimic&lt;/a&gt; is a regular Python App Engine app, which serves as a development server (similar to the App Engine SDK "dev_appserver"), but which runs in the production App Engine environment, providing you access to the production APIs and environment while still offering a quick and easy way to test out bits of code.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/cloud-playground/source/checkout?repo=bliss"&gt;bliss&lt;/a&gt; is a trivial browser-based code editor which lets you edit code in the mimic virtual file system (backed by the App Engine datastore), providing you with a user interface so you can see what the mimic app can do for you.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;We previously &lt;a href="http://googlecloudplatform.blogspot.com/2013/02/deploying-app-engine-apps-with-devtable.html"&gt;blogged about DevTable&lt;/a&gt; which also uses mimic to speed up refresh cycles for their App Engine developers.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;We look forward to seeing what you're able to build.&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;- Posted by &lt;a href="http://plus.google.com/+fredsa"&gt;Fred Sauer&lt;/a&gt;, Developer Advocate &lt;h6&gt;URL: &lt;a href="http://googlecloudplatform.blogspot.com/2013/06/et-coding-faster-thanks-to-little-green-buttons.html"&gt;http://googlecloudplatform.blogspot.com/2013/06/et-coding-faster-thanks-to-little-green-buttons.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/9154928623973670298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=9154928623973670298' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/9154928623973670298'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/9154928623973670298'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-get-coding-faster-thanks-to-little_24.html' title='[Gd] Get Coding Faster Thanks to Little Green Buttons'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/e9sLo-HK6reaHkQRSaw03qTj7mP58TA_XTICFr3pyEuBJrfYKwSrXEqt8jpsC7G6vEn2ozL1i8Og9o7faZszSomwYvHsE76vHb5IOkElAb0dY7SRpKSOXM8L=s72-c' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-5471640175197361557</id><published>2013-06-24T12:22:00.001-07:00</published><updated>2013-06-24T12:22:49.051-07:00</updated><title type='text'>[Gd] Get coding faster thanks to little green buttons</title><content type='html'>&lt;h4&gt;&lt;a href="http://googledevelopers.blogspot.com/"&gt;Google Developers Blog&lt;/a&gt;: &lt;a href="http://googledevelopers.blogspot.com/2013/06/get-coding-faster-thanks-to-little.html"&gt;Get coding faster thanks to little green buttons&lt;/a&gt;&lt;/h4&gt; &lt;img alt="Author Photo" height="80" src="http://2.bp.blogspot.com/-4jGRde_IoKo/Tygwuyms93I/AAAAAAAABAQ/tWfbkEcs8pw/s1600/fredsauer.jpg" style="float:right;margin-left:1em;text-align:right"&gt;&lt;br&gt;&lt;em&gt;By Fred Sauer, Developer Advocate&lt;/em&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;Cross-posted from the &lt;a href="http://googlecloudplatform.blogspot.com/2013/06/et-coding-faster-thanks-to-little-green-buttons.html"&gt;Google Cloud Platform Blog&lt;/a&gt;&lt;/em&gt;&lt;br&gt;&lt;br&gt;On the &lt;a href="http://cloud.google.com/"&gt;Google Cloud Platform&lt;/a&gt; team we're always looking for ways to make developers' lives easier, so you can focus on building interesting applications instead of worrying about managing infrastructure.&lt;br&gt;&lt;br&gt;We also want you to be as productive as possible when you're busy writing code. We provide an SDK which offers access to production APIs, in a way that's compatible with a local development environment.&lt;br&gt;&lt;br&gt;&lt;div style="text-align:center"&gt;&lt;a href="https://cloud-playground.appspot.com/playground" style="margin-left:1em;margin-right:1em"&gt;&lt;img src="http://4.bp.blogspot.com/-7TqcfuCLNiw/UcTjH2PCBcI/AAAAAAAAANg/tB2qRHBbq54/s1600/cloud-playground-editor.png" width="500"&gt;&lt;/a&gt;&lt;/div&gt;&lt;br&gt;But sometimes you just want to dip your toes in the water, and the prospect of setting up a local development environment seems daunting. What if you just want to try out some &lt;a href="https://github.com/GoogleCloudPlatform/"&gt;sample code&lt;/a&gt;? What if you want to see how the actual production APIs will behave? What if you could share a code snippet with a colleague and your entire environment came along for the ride? What if there was a playground where you could try out APIs, all from within your web browser?&lt;br&gt;&lt;br&gt;We asked ourselves these same questions and decided to try an experiment: we created a &lt;a href="https://cloud-playground.appspot.com/"&gt;Cloud Playground&lt;/a&gt;, a place for you to quickly test production APIs you're interested in using. Note: the Cloud Playground is currently limited to Python 2.7 App Engine apps.&lt;br&gt;&lt;br&gt;To get you started, we added little green &lt;img src="https://lh6.googleusercontent.com/mslJJi-ZTCM9Gx90ioMO6cqf4sG_gOFMH_ArK_vTvYuaZrPZDapamLqxxpsMraLXIluGH8AOiwDoBXG1BwzYCqYje-4u-jLHAokolJURNkPxuFeZiG-nknS_"&gt;buttons to our &lt;a href="https://developers.google.com/appengine/docs/python/gettingstartedpython27/helloworld"&gt;getting started documentation&lt;/a&gt;, which take you straight to the Cloud Playground where you can edit and run the guestbook sample code as it appears in the documentation.&lt;br&gt;&lt;br&gt;&lt;div style="text-align:center"&gt;&lt;span style="margin-left:1em;margin-right:1em"&gt;&lt;a href="https://developers.google.com/appengine/docs/python/gettingstartedpython27/"&gt;&lt;img height="410px;" src="https://lh6.googleusercontent.com/1BPSOxrBLuQ7C-X1fOV5Ey5s15r6lsFhhvXpAYbslivXTgroNc0F-JtwJb_99qwBHe40l44NiaOQl2KjeKCxgOaTS0on4o7kh4z_eY2S4mADIcbNStuCtz-C" width="547px;"&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;In addition, the main Cloud Playground page offers easy access to many more samples. There's even an option to clone other open source App Engine Python 2.7 template projects from Github.&lt;br&gt;&lt;br&gt;&lt;div style="clear:both;text-align:center"&gt;&lt;span style="margin-left:1em;margin-right:1em"&gt;&lt;img height="630px;" src="https://lh6.googleusercontent.com/gvoJNiNawDdjw_KKcpFkv-oCS2G4TdsdjT9Ym1SyHVd0qw8TKFSKTun7IpFgzaB1V3UXwIefQ_GlLlwgCk6gOgETmeIoQHsMpf_NnMjFlWUG_yD-ufCbae9K" width="581px;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br&gt;How does it work? The Cloud Playground is itself an &lt;a href="https://code.google.com/p/cloud-playground/"&gt;open source project&lt;/a&gt; and consists of two modules:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/cloud-playground/source/checkout?repo=mimic"&gt;mimic&lt;/a&gt; is a regular Python App Engine app, which serves as a development server (similar to the App Engine SDK "dev_appserver"), but which runs in the production App Engine environment, providing you access to the production APIs and environment while still offering a quick and easy way to test out bits of code.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/cloud-playground/source/checkout?repo=bliss"&gt;bliss&lt;/a&gt; is a trivial browser-based code editor which lets you edit code in the mimic virtual file system (backed by the App Engine datastore), providing you with a user interface so you can see what the mimic app can do for you.&lt;/li&gt;&lt;/ul&gt;We previously &lt;a href="http://googlecloudplatform.blogspot.com/2013/02/deploying-app-engine-apps-with-devtable.html"&gt;blogged about DevTable&lt;/a&gt; which also uses mimic to speed up refresh cycles for their App Engine developers.&lt;br&gt;&lt;br&gt;We look forward to seeing what you're able to build.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;&lt;a href="http://google.com/+fredsa"&gt;Fred Sauer&lt;/a&gt; is a Developer Advocate for the Google Cloud Platform and long-standing member of the Google App Engine team. Fred hacks in a number of open source projects for fun and maintains a particular interest in game and web development.&lt;/em&gt;&lt;br&gt;&lt;br&gt;&lt;em&gt;Posted by &lt;a href="https://google.com/+ScottKnaster"&gt;Scott Knaster&lt;/a&gt;, Editor&lt;/em&gt;&lt;br&gt;&lt;blockquote&gt;&lt;/blockquote&gt; &lt;h6&gt;URL: &lt;a href="http://googledevelopers.blogspot.com/2013/06/get-coding-faster-thanks-to-little.html"&gt;http://googledevelopers.blogspot.com/2013/06/get-coding-faster-thanks-to-little.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/5471640175197361557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=5471640175197361557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/5471640175197361557'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/5471640175197361557'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-get-coding-faster-thanks-to-little.html' title='[Gd] Get coding faster thanks to little green buttons'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-4jGRde_IoKo/Tygwuyms93I/AAAAAAAABAQ/tWfbkEcs8pw/s72-c/fredsauer.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-699154927936492178.post-4885746478776462363</id><published>2013-06-21T18:23:00.003-07:00</published><updated>2013-06-21T18:23:01.244-07:00</updated><title type='text'>[Gd] Dev Channel Update for Chrome OS</title><content type='html'>&lt;h4&gt;&lt;a href="http://googlechromereleases.blogspot.com/"&gt;Chrome Releases&lt;/a&gt;: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os.html"&gt;Dev Channel Update for Chrome OS&lt;/a&gt;&lt;/h4&gt; The Dev channel has been updated to 29.0.1541.3.&lt;br&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Platform version: 4287.1.0 for all platforms except the Google Pixel, the HP Chromebook and the Samsung Chromebox&lt;/li&gt;&lt;li&gt;Platform version: 4287.2.0 for cr-48.&lt;/li&gt;&lt;/ul&gt;This build contains a number of added features and stability improvements.&lt;br&gt;&lt;br&gt;Notable Updates:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;A fix to hangout windows now loading&lt;/li&gt;&lt;li&gt;A &lt;a href="https://code.google.com/p/chromium/issues/detail?id=216936"&gt;fix&lt;/a&gt; to the clock being out of sync&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;If you find new issues, please let us know by visiting our &lt;a href="http://support.google.com/chromeos"&gt;help site&lt;/a&gt; or &lt;a href="http://code.google.com/p/chromium-os/issues/entry"&gt;filing a bug&lt;/a&gt;. Interested in switching channels? &lt;a href="http://www.google.com/support/chromeos/bin/answer.py?answer=1086915"&gt;Find out how.&lt;/a&gt; You can submit feedback using ‘Report an issue...’ in the Chrome menu (3 horizontal bars in the upper right corner of the browser).&lt;br&gt;&lt;br&gt;Ben Henry&lt;br&gt;Google Chrome&lt;/div&gt; &lt;h6&gt;URL: &lt;a href="http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os.html"&gt;http://googlechromereleases.blogspot.com/2013/06/dev-channel-update-for-chrome-os.html&lt;/a&gt;&lt;/h6&gt;&lt;div class="blogger-post-footer"&gt;&lt;a href="http://secure.bidvertiser.com/performance/bdv_rss_rd.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;click=1&amp;rsrc=3" target="_blank"&gt;&lt;img src="http://bdv.bidvertiser.com/BidVertiser.dbm?pid=304724&amp;bid=749373&amp;PHS=304724749373&amp;rssimage=1&amp;rsrc=3" border="0"//&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='https://googland-dev.blogspot.com/feeds/4885746478776462363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=699154927936492178&amp;postID=4885746478776462363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/4885746478776462363'/><link rel='self' type='application/atom+xml' href='https://www.blogger.com/feeds/699154927936492178/posts/default/4885746478776462363'/><link rel='alternate' type='text/html' href='https://googland-dev.blogspot.com/2013/06/gd-dev-channel-update-for-chrome-os.html' title='[Gd] Dev Channel Update for Chrome OS'/><author><name>X</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='35' height='35' src='//www.blogger.com/img/blogger_logo_round_35.png'/></author><thr:total>0</thr:total></entry></feed>