CINXE.COM
Google Drive Blog: September 2010
<!DOCTYPE html> <html class='v2 list-page' dir='ltr' itemscope='' itemtype='http://schema.org/Blog' lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'> <head> <link href='https://www.blogger.com/static/v1/widgets/3566091532-css_bundle_v2.css' rel='stylesheet' type='text/css'/> <title> Google Drive Blog: September 2010 </title> <meta content='width=device-width, height=device-height, minimum-scale=1.0, initial-scale=1.0, user-scalable=0' name='viewport'/> <meta content='IE=Edge' http-equiv='X-UA-Compatible'/> <meta content='Google Drive Blog' property='og:title'/> <meta content='News and notes from the Google Drive team' property='og:description'/> <meta content='en_US' property='og:locale'/> <meta content='https://drive.googleblog.com/2010/09/' property='og:url'/> <meta content='Google Drive Blog' property='og:site_name'/> <!-- Twitter Card properties --> <meta content='Google Drive Blog' property='og:title'/> <meta content='News and notes from the Google Drive team' property='twitter:description'/> <meta content='summary' name='twitter:card'/> <meta content='@googledrive' name='twitter:creator'/> <link href='https://fonts.googleapis.com/css?family=Roboto:400italic,400,500,500italic,700,700italic' rel='stylesheet' type='text/css'/> <link href='https://fonts.googleapis.com/icon?family=Material+Icons' rel='stylesheet'/> <script src='https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js' type='text/javascript'></script> <!-- End --> <style id='page-skin-1' type='text/css'><!-- /* <Group description="Header Color" selector="header"> <Variable name="header.background.color" description="Header Background" type="color" default="#ffffff"/> </Group> */ .header-outer { border-bottom: 1px solid #e0e0e0; background: #ffffff; } html, .Label h2, #sidebar .rss a, .BlogArchive h2, .FollowByEmail h2.title, .widget .post h2 { font-family: Roboto, sans-serif; } .plusfollowers h2.title, .post h2.title, .widget h2.title { font-family: Roboto, sans-serif; } .widget-item-control { height: 100%; } .widget.Header, #header { position: relative; height: 100%; width: 100%; } } .widget.Header .header-logo1 { float: left; margin-right: 15px; padding-right: 15px; border-right: 1px solid #ddd; } .header-title h2 { color: rgba(0,0,0,.54); display: inline-block; font-size: 40px; font-family: Roboto, sans-serif; font-weight: normal; line-height: 79px; vertical-align: top; } .header-inner { background-repeat: no-repeat; background-position: right 0px; } .post-author, .byline-author { font-size: 14px; font-weight: normal; color: #757575; color: rgba(0,0,0,.54); } .post-content .img-border { border: 1px solid rgb(235, 235, 235); padding: 4px; } .header-title a { text-decoration: none !important; } pre { border: 1px solid #bbbbbb; margin-top: 1em 0 0 0; padding: 0.99em; overflow-x: auto; overflow-y: auto; } pre, code { font-size: 9pt; background-color: #fafafa; line-height: 125%; font-family: monospace; } pre, code { color: #060; font: 13px/1.54 "courier new",courier,monospace; } .header-left .header-logo1 { width: 128px !important; } .header-desc { line-height: 20px; margin-top: 8px; } .fb-custom img, .twitter-custom img, .gplus-share img { cursor: pointer; opacity: 0.54; } .fb-custom img:hover, .twitter-custom img:hover, .gplus-share img:hover { opacity: 0.87; } .fb-like { width: 80px; } .post .share { float: right; } #twitter-share{ border: #CCC solid 1px; border-radius: 3px; background-image: -webkit-linear-gradient(top,#ffffff,#dedede); } .twitter-follow { background: url(//4.bp.blogspot.com/-8O7VcmcY32o/VSYkC2vUj7I/AAAAAAAAHeU/7mzo-JFgTgk/s1600/twitter-bird.png) no-repeat left center; padding-left: 18px; font: normal normal normal 11px/18px 'Helvetica Neue',Arial,sans-serif; font-weight: bold; text-shadow: 0 1px 0 rgba(255,255,255,.5); cursor: pointer; margin-bottom: 10px; } .twitter-fb { padding-top: 2px; } .fb-follow-button { background: -webkit-linear-gradient(#4c69ba, #3b55a0); background: -moz-linear-gradient(#4c69ba, #3b55a0); background: linear-gradient(#4c69ba, #3b55a0); border-radius: 2px; height: 18px; padding: 4px 0 0 3px; width: 57px; border: #4c69ba solid 1px; } .fb-follow-button a { text-decoration: none !important; text-shadow: 0 -1px 0 #354c8c; text-align: center; white-space: nowrap; font-size: 11px; color: white; vertical-align: top; } .fb-follow-button a:visited { color: white; } .fb-follow { padding: 0px 5px 3px 0px; width: 14px; vertical-align: bottom; } .gplus-wrapper { margin-top: 3px; display: inline-block; vertical-align: top; } .twitter-custom, .gplus-share { margin-right: 12px; } .fb-follow-button{ margin: 10px auto; } /** CUSTOM CODE **/ --></style> <style id='template-skin-1' type='text/css'><!-- .header-outer { clear: both; } .header-inner { margin: auto; padding: 0px; } .footer-outer { background: #f5f5f5; clear: both; margin: 0; } .footer-inner { margin: auto; padding: 0px; } .footer-inner-2 { /* Account for right hand column elasticity. */ max-width: calc(100% - 248px); } .google-footer-outer { clear: both; } .cols-wrapper, .google-footer-outer, .footer-inner, .header-inner { max-width: 978px; margin-left: auto; margin-right: auto; } .cols-wrapper { margin: auto; clear: both; margin-top: 60px; margin-bottom: 60px; overflow: hidden; } .col-main-wrapper { float: left; width: 100%; } .col-main { margin-right: 278px; max-width: 660px; } .col-right { float: right; width: 248px; margin-left: -278px; } /* Tweaks for layout mode. */ body#layout .google-footer-outer { display: none; } body#layout .header-outer, body#layout .footer-outer { background: none; } body#layout .header-inner { height: initial; } body#layout .cols-wrapper { margin-top: initial; margin-bottom: initial; } --></style> <!-- start all head --> <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/> <meta content='blogger' name='generator'/> <link href='https://drive.googleblog.com/favicon.ico' rel='icon' type='image/x-icon'/> <link href='https://drive.googleblog.com/2010/09/' rel='canonical'/> <link rel="alternate" type="application/atom+xml" title="Google Drive Blog - Atom" href="https://drive.googleblog.com/feeds/posts/default" /> <link rel="alternate" type="application/rss+xml" title="Google Drive Blog - RSS" href="https://drive.googleblog.com/feeds/posts/default?alt=rss" /> <link rel="service.post" type="application/atom+xml" title="Google Drive Blog - Atom" href="https://www.blogger.com/feeds/5320550312748173929/posts/default" /> <!--Can't find substitution for tag [blog.ieCssRetrofitLinks]--> <meta content='News and notes from the Google Drive team' name='description'/> <meta content='https://drive.googleblog.com/2010/09/' property='og:url'/> <meta content='Google Drive Blog' property='og:title'/> <meta content='News and notes from the Google Drive team' property='og:description'/> <!-- end all head --> <base target='_self'/> <style> html { font-family: Roboto, sans-serif; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; } body { padding: 0; /* This ensures that the scroll bar is always present, which is needed */ /* because content render happens after page load; otherwise the header */ /* would "bounce" in-between states. */ min-height: 150%; } h2 { font-size: 16px; } h1, h2, h3, h4, h5 { line-height: 2em; } html, h4, h5, h6 { font-size: 14px; } a, a:visited { color: #4184F3; text-decoration: none; } a:focus, a:hover, a:active { text-decoration: none; } .Header { margin-top: 15px; } .Header h1 { font-size: 32px; font-weight: 300; line-height: 32px; height: 42px; } .header-inner .Header .titlewrapper { padding: 0; margin-top: 30px; } .header-inner .Header .descriptionwrapper { padding: 0; margin: 0; } .cols-wrapper { margin-top: 56px; } .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 60px; } .header-inner { height: 256px; position: relative; } html, .header-inner a { color: #212121; color: rgba(0,0,0,.87); } .header-inner .google-logo { display: inline-block; background-size: contain; z-index: 1; height: 70px; overflow: hidden; margin-top: 4px; margin-right: 8px; } .header-left { position: absolute; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); margin-top: 12px; width: 100%; } .google-logo { margin-left: -4px; } #google-footer { position: relative; font-size: 13px; list-style: none; text-align: right; } #google-footer a { color: #444; } #google-footer ul { margin: 0; padding: 0; height: 144px; line-height: 144px; } #google-footer ul li { display: inline; } #google-footer ul li:before { color: #999; content: "\00b7"; font-weight: bold; margin: 5px; } #google-footer ul li:first-child:before { content: ''; } #google-footer .google-logo-dark { left: 0; margin-top: -16px; position: absolute; top: 50%; } /** Sitemap links. **/ .footer-inner-2 { font-size: 14px; padding-top: 42px; padding-bottom: 74px; } .footer-inner-2 .HTML h2 { color: #212121; color: rgba(0,0,0,.87); font-size: 14px; font-weight: 500; padding-left: 0; margin: 10px 0; } .footer-inner-2 .HTML ul { font-weight: normal; list-style: none; padding-left: 0; } .footer-inner-2 .HTML li { line-height: 24px; padding: 0; } .footer-inner-2 li a { color: rgba(65,132,243,.87); } /** Archive widget. **/ .BlogArchive { font-size: 13px; font-weight: normal; } .BlogArchive .widget-content { display: none; } .BlogArchive h2, .Label h2 { color: #4184F3; text-decoration: none; } .BlogArchive .hierarchy li { display: inline-block; } /* Specificity needed here to override widget CSS defaults. */ .BlogArchive #ArchiveList ul li, .BlogArchive #ArchiveList ul ul li { margin: 0; padding-left: 0; text-indent: 0; } .BlogArchive .intervalToggle { cursor: pointer; } .BlogArchive .expanded .intervalToggle .new-toggle { -ms-transform: rotate(180deg); transform: rotate(180deg); } .BlogArchive .new-toggle { float: right; padding-top: 3px; opacity: 0.87; } #ArchiveList { text-transform: uppercase; } #ArchiveList .expanded > ul:last-child { margin-bottom: 16px; } #ArchiveList .archivedate { width: 100%; } /* Months */ .BlogArchive .items { max-width: 150px; margin-left: -4px; } .BlogArchive .expanded .items { margin-bottom: 10px; overflow: hidden; } .BlogArchive .items > ul { float: left; height: 32px; } .BlogArchive .items a { padding: 0 4px; } .Label { font-size: 13px; font-weight: normal; } .sidebar-icon { display: inline-block; width: 24px; height: 24px; vertical-align: middle; margin-right: 12px; margin-top: -1px } .Label a { margin-right: 4px; } .Label .widget-content { display: none; } .FollowByEmail { font-size: 13px; font-weight: normal; } .FollowByEmail h2 { background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAALCAYAAACZIGYHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUBJREFUeNrMkSGLAlEUhb+ZB4JFi8mx2cz+ApvhRUGTcUCrNqNJDYIi+DO0GUwmQXDK2DSIoGgZcSaIjDrzwrK4ssvChj1w0733O+fdp+m6PozH4yQSCfb7Pa7r8pOi0SjJZBLP8zgej4gAIMvlMuPxmADIYrHger1+C6lUKmo+NJ/NZojb7SZDWiwWo1qtks1msW2bw+HwZdkwDHq9HvV6nel0SqvVYrvdIh6Ph3Qch+VyqRYLhQJSSjRNw7IsfN9XgGKxSLfbJZfL0e/3aTabrFYr7vc7IujLcOh8PqunrNdr0uk0pVKJVCpFJBJRgEajweVyod1uMxgM2O12BAGUgRbU8DV2JpOhVquRz+cRQii3+XxOp9NRN3jVR5LPOp1OjEYjlSL8hclkgmmabDabt4d+m+S30vkD/R/IU4ABAPTZgnZdmG/PAAAAAElFTkSuQmCC"); background-repeat: no-repeat; background-position: 0 50%; text-indent: 30px; } .FollowByEmail .widget-content { display: none; } .searchBox input { border: 1px solid #eee; color: #212121; color: rgba(0,0,0,.87); font-size: 14px; padding: 8px 8px 8px 40px; width: 164px; font-family: Roboto, sans-serif; background: url("https://www.gstatic.com/images/icons/material/system/1x/search_grey600_24dp.png") 8px center no-repeat; } .searchBox ::-webkit-input-placeholder { /* WebKit, Blink, Edge */ color: rgba(0,0,0,.54); } .searchBox :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #000; opacity: 0.54; } .searchBox ::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #000; opacity: 0.54; } .searchBox :-ms-input-placeholder { /* Internet Explorer 10-11 */ color: #757575; } .widget-item-control { margin-top: 0px; } .section { margin: 0; padding: 0; } #sidebar-top { border: 1px solid #eee; } #sidebar-top > div { margin: 16px 0; } .widget ul { line-height: 1.6; } /*main post*/ .post { margin-bottom:30px; } #main .post .title { margin: 0; } #main .post .title a { color: #212121; color: rgba(0,0,0,.87); font-weight: normal; font-size: 24px; } #main .post .title a:hover { text-decoration:none; color:#4184F3; } .message, #main .post .post-header { margin: 0; padding: 0; } #main .post .post-header .caption, #main .post .post-header .labels-caption, #main .post .post-footer .caption, #main .post .post-footer .labels-caption { color: #444; font-weight: 500; } #main .tr-caption-container td { text-align: left; } #main .post .tr-caption { color: #757575; color: rgba(0,0,0,.54); display: block; max-width: 560px; padding-bottom: 20px; } #main .post .tr-caption-container { line-height: 24px; margin: -1px 0 0 0 !important; padding: 4px 0; text-align: left; } #main .post .post-header .published{ font-size:11px; font-weight:bold; } .post-header .publishdate { font-size: 17px; font-weight:normal; color: #757575; color: rgba(0,0,0,.54); } #main .post .post-footer{ font-size:12px; padding-bottom: 21px; } .label-footer { margin-bottom: 12px; margin-top: 12px; } .comment-img { margin-right: 16px; opacity: 0.54; vertical-align: middle; } #main .post .post-header .published { margin-bottom: 40px; margin-top: -2px; } .post .post-content { color: #212121; color: rgba(0,0,0,.87); font-size: 17px; margin: 25px 0 36px 0; line-height: 32px; } .post-body .post-content ul, .post-body .post-content ol { margin: 16px 0; padding: 0 48px; } .post-summary { display: none; } /* Another old-style caption. */ .post-content div i, .post-content div + i { font-size: 14px; font-style: normal; color: #757575; color: rgba(0,0,0,.54); display: block; line-height: 24px; margin-bottom: 16px; text-align: left; } /* Another old-style caption (with link) */ .post-content a > i { color: #4184F3 !important; } /* Old-style captions for images. */ .post-content .separator + div:not(.separator) { margin-top: -16px; } /* Capture section headers. */ .post-content br + br + b, .post-content .space + .space + b, .post-content .separator + b { display: inline-block; margin-bottom: 8px; margin-top: 24px; } .post-content li { line-height: 32px; } /* Override all post images/videos to left align. */ .post-content .separator, .post-content > div { text-align: left; } .post-content .separator > a, .post-content .separator > span { margin-left: 0 !important; } .post-content img { max-width: 100%; height: auto; width: auto; } .post-content .tr-caption-container img { margin-bottom: 12px; } .post-content iframe, .post-content embed { max-width: 100%; } .post-content .carousel-container { margin-bottom: 48px; } #main .post-content b { font-weight: 500; } /* These are the main paragraph spacing tweaks. */ #main .post-content br { content: ' '; display: block; padding: 4px; } .post-content .space { display: block; height: 8px; } .post-content iframe + .space, .post-content iframe + br { padding: 0 !important; } #main .post .jump-link { margin-bottom:10px; } .post-content img, .post-content iframe { margin: 30px 0 20px 0; } .post-content > img:first-child, .post-content > iframe:first-child { margin-top: 0; } .col-right .section { padding: 0 16px; } #aside { background:#fff; border:1px solid #eee; border-top: 0; } #aside .widget { margin:0; } #aside .widget h2, #ArchiveList .toggle + a.post-count-link { color: #212121; color: rgba(0,0,0,.87); font-weight: 400 !important; margin: 0; } #ArchiveList .toggle { float: right; } #ArchiveList .toggle .material-icons { padding-top: 4px; } #sidebar .tab { cursor: pointer; } #sidebar .tab .arrow { display: inline-block; float: right; } #sidebar .tab .icon { display: inline-block; vertical-align: top; height: 24px; width: 24px; margin-right: 13px; margin-left: -1px; margin-top: 1px; color: #757575; color: rgba(0,0,0,.54); } #sidebar .widget-content > :first-child { padding-top: 8px; } #sidebar .active .tab .arrow { -ms-transform: rotate(180deg); transform: rotate(180deg); } #sidebar .arrow { color: #757575; color: rgba(0,0,0,.54); } #sidebar .widget h2 { font-size: 14px; line-height: 24px; display: inline-block; } #sidebar .widget .BlogArchive { padding-bottom: 8px; } #sidebar .widget { border-bottom: 1px solid #eee; box-shadow: 0px 1px 0 white; margin-bottom: 0; padding: 14px 0; min-height: 20px; } #sidebar .widget:last-child { border-bottom: none; box-shadow: none; margin-bottom: 0; } #sidebar ul { margin: 0; padding: 0; } #sidebar ul li { list-style:none; padding:0; } #sidebar ul li a { line-height: 32px; } #sidebar .archive { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAYCAYAAADzoH0MAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE1JREFUeNpiNDY23s9AAWBioBCwYBM8c+YMVsUmJibEGYBNMS5DaeMFfDYSZQA2v9I3FrB5AZeriI4FmnrBccCT8mhmGs1MwyAzAQQYAKEWG9zm9QFEAAAAAElFTkSuQmCC"); height: 24px; line-height: 24px; padding-left: 30px; } #sidebar .labels { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUxJREFUeNpiNDY23s9AAMycOfM7UF05kHkZmzwTMkdSUhKrIcXFxZy3bt3qBjIN8RrS09PDsHnzZjCNDr58+cKQlpbGDjSoHcg1w2oIyAUODg5gARCNzUVIBrUCuVYYhjx//pzhwIEDYAEQDeJjA1CDWIAGNQK59jBxRuSABbkAlwHIgIeHh2HWrFn/1NTU2oDcvSgBS4wBSC5iArqoCsj1YGIgEyAZVMoEchqlBjEB/cZAiUHg2AEGznpKDAImxOeM////B4VLKtBvEUCngZ1ILKivr3/u6+ubBzJAGZQ9gC5aQoqLgAY8BhkAZL4BuQQkxgXE34A4BuiiZEIuAhrwEGhAEZD5DpzYoIaA2UAM4kQADUrHZRDUgAIg8wO2XAwzbQXQa5OweQ1owB10AyA6gS7BgX1u3ry5397eHow3bdo0EyjGi00tQIABANPgyAH1q1eaAAAAAElFTkSuQmCC"); height: 20px; line-height: 20px; padding-left: 30px; } #sidebar .rss a { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAX5JREFUeNqsVDGSgkAQHL2rIiIikohIc/EBRkbwAIwuwgfwAXiAD9AHSI7kEkECRCb6AIyINDLx7K0aa6kT7uq0q7YYtnZ7umdnt7darXbr9Zpegeu61DNNc0dvwCcH4/GYJpMJnc9nOhwOVJbl/4hAAokMECZJQtvt9k+kH7qufyEYDAakqqqYxFdRFBqNRmTbNg2HQ0rTlK7XayvR0xqBdDqdkuM4dE/0ULhYLOh4PHYrknG5XGi/31MYhuL/nkwonM1mlGUZ1XXdrsiyLGEDhY7juJEZ1u5tIixDGdYhmYw+B7CAzPP5nDabjdgIAgCksMX1832/3drtdqPT6SQWapomiGEFNkDEdpDMMAzK81ys/7XYy+XyoQgq2WoURSIJ2iIIgp/WZCCTvFm2wgeAU31aI3Q2GhIDMeB53qPYPIcm5VrxXIOIOxsDMStjVawAc1VViRgN22lNBiuQN3GR+SY07hpOoStmFQAKXRRFY93bnpG+fONfedi+BRgAbkS8Fxp7QQIAAAAASUVORK5CYII="); } #sidebar .subscription a { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAALCAYAAACZIGYHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUBJREFUeNrMkSGLAlEUhb+ZB4JFi8mx2cz+ApvhRUGTcUCrNqNJDYIi+DO0GUwmQXDK2DSIoGgZcSaIjDrzwrK4ssvChj1w0733O+fdp+m6PozH4yQSCfb7Pa7r8pOi0SjJZBLP8zgej4gAIMvlMuPxmADIYrHger1+C6lUKmo+NJ/NZojb7SZDWiwWo1qtks1msW2bw+HwZdkwDHq9HvV6nel0SqvVYrvdIh6Ph3Qch+VyqRYLhQJSSjRNw7IsfN9XgGKxSLfbJZfL0e/3aTabrFYr7vc7IujLcOh8PqunrNdr0uk0pVKJVCpFJBJRgEajweVyod1uMxgM2O12BAGUgRbU8DV2JpOhVquRz+cRQii3+XxOp9NRN3jVR5LPOp1OjEYjlSL8hclkgmmabDabt4d+m+S30vkD/R/IU4ABAPTZgnZdmG/PAAAAAElFTkSuQmCC"); } #sidebar-bottom { background: #f5f5f5; border-top:1px solid #eee; } #sidebar-bottom .widget { border-bottom: 1px solid #e0e0e0; padding: 15px 0; text-align: center; } #sidebar-bottom > div:last-child { border-bottom: 0; } #sidebar-bottom .text { line-height: 20px; } /* Home, forward, and backward pagination. */ .blog-pager { border-top : 1px #e0e0e0 solid; padding-top: 10px; margin-top: 15px; text-align: right !important; } #blog-pager { margin-botom: 0; margin-top: -14px; padding: 16px 0 0 0; } #blog-pager a { display: inline-block; } .blog-pager i.disabled { opacity: 0.2 !important; } .blog-pager i { color: black; margin-left: 16px; opacity: 0.54; } .blog-pager i:hover, .blog-pager i:active { opacity: 0.87; } #blog-pager-older-link, #blog-pager-newer-link { float: none; } .gplus-profile { background-color: #fafafa; border: 1px solid #eee; overflow: hidden; width: 212px; } .gplus-profile-inner { margin-left: -1px; margin-top: -1px; } /* Sidebar follow buttons. */ .followgooglewrapper { padding: 12px 0 0 0; } .loading { visibility: hidden; } .detail-page .post-footer .cmt_iframe_holder { padding-top: 40px !important; } /** Desktop **/ @media (max-width: 900px) { .col-right { display: none; } .col-main { margin-right: 0; min-width: initial; } .footer-outer { display: none; } .cols-wrapper { min-width: initial; } .google-footer-outer { background-color: #f5f5f5; } } /** Tablet **/ @media (max-width: 712px) { .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 40px; } } /* An extra breakpoint accommodating for long blog titles. */ @media (max-width: 600px) { .header-left { height: 100%; top: inherit; margin-top: 0; -webkit-transform: initial; transform: initial; } .header-title { margin-top: 18px; } .header-inner .google-logo { height: 56px; margin-top: 3px; } .header-inner .google-logo img { height: 56px; } .header-title h2 { font-size: 32px; line-height: 60px; } .header-desc { bottom: 24px; position: absolute; } } /** Mobile/small desktop window; also landscape. **/ @media (max-width: 480px), (max-height: 480px) { .header-outer, .cols-wrapper, .footer-outer, .google-footer-outer { padding: 0 16px; } .cols-wrapper { margin-top: 0; } .post-header .publishdate, .post .post-content { font-size: 16px; } .post .post-content { line-height: 28px; margin-bottom: 30px; } .post { margin-top: 30px; } .byline-author { display: block; font-size: 12px; line-height: 24px; margin-top: 6px; } #main .post .title a { font-weight: 500; color: #4c4c4c; color: rgba(0,0,0,.70); } #main .post .post-header { padding-bottom: 12px; } #main .post .post-header .published { margin-bottom: -8px; margin-top: 3px; } .post .read-more { display: block; margin-top: 14px; } .post .tr-caption { font-size: 12px; } #main .post .title a { font-size: 20px; line-height: 30px; } .post-content iframe { /* iframe won't keep aspect ratio when scaled down. */ max-height: 240px; } .post-content .separator img, .post-content .tr-caption-container img, .post-content iframe { margin-left: -16px; max-width: inherit; width: calc(100% + 32px); } .post-content table, .post-content td { width: 100%; } #blog-pager { margin: 0; padding: 16px 0; } /** List page tweaks. **/ .list-page .post-original { display: none; } .list-page .post-summary { display: block; } .list-page .comment-container { display: none; } .list-page #blog-pager { padding-top: 0; border: 0; margin-top: -8px; } .list-page .label-footer { display: none; } .list-page #main .post .post-footer { border-bottom: 1px solid #eee; margin: -16px 0 0 0; padding: 0 0 20px 0; } .list-page .post .share { display: none; } /** Detail page tweaks. **/ .detail-page .post-footer .cmt_iframe_holder { padding-top: 32px !important; } .detail-page .label-footer { margin-bottom: 0; } .detail-page #main .post .post-footer { padding-bottom: 0; } .detail-page #comments { display: none; } } [data-about-pullquote], [data-is-preview], [data-about-syndication] { display: none; } </style> <noscript> <style> .loading { visibility: visible }</style> </noscript> <script type='text/javascript'> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-34322147-1', 'auto', 'blogger'); ga('blogger.send', 'pageview'); </script> <link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=5320550312748173929&zx=5ce98044-c15c-4b1f-949d-5f19deeaa2d6' media='none' onload='if(media!='all')media='all'' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=5320550312748173929&zx=5ce98044-c15c-4b1f-949d-5f19deeaa2d6' rel='stylesheet'/></noscript> <meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/> <meta name='google-adsense-platform-domain' content='blogspot.com'/> </head> <body> <script type='text/javascript'> //<![CDATA[ var axel = Math.random() + ""; var a = axel * 10000000000000; document.write('<iframe src="https://2542116.fls.doubleclick.net/activityi;src=2542116;type=gblog;cat=googl0;ord=ord=' + a + '?" width="1" height="1" frameborder="0" style="display:none"></iframe>'); //]]> </script> <noscript> <img alt='' height='1' src='https://ad.doubleclick.net/ddm/activity/src=2542116;type=gblog;cat=googl0;ord=1?' width='1'/> </noscript> <!-- Header --> <div class='header-outer'> <div class='header-inner'> <div class='section' id='header'><div class='widget Header' data-version='1' id='Header1'> <div class='header-left'> <div class='header-title'> <a class='google-logo' href='https://drive.googleblog.com/'> <img height="70" src="//3.bp.blogspot.com/-IklRdTiTjzQ/Velxzvfh-QI/AAAAAAAARFg/f69gC_4abN8/s1600-r/drive.png"> </a> <a href='/.'> <h2> Google Drive Blog </h2> </a> </div> <div class='header-desc'> The latest news and updates from the Google Drive team. </div> </div> </div></div> </div> </div> <!-- all content wrapper start --> <div class='cols-wrapper loading'> <div class='col-main-wrapper'> <div class='col-main'> <div class='section' id='main'><div class='widget Blog' data-version='1' id='Blog1'> <div class='post' data-id='2282621853225541573' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/keyboard-shortcuts-in-google-sites.html' itemprop='url' title='Keyboard shortcuts in Google Sites'> Keyboard shortcuts in Google Sites </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, September 30, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> We’re big believers in speed and saving time, which is why we’re happy to announce that we’ve added keyboard shortcuts to common actions like create page and edit page for site collaborators using Google Sites. You can see a full list of keyboard shortcuts <a href="http://sites.google.com/support/bin/answer.py?hl=en&answer=189191">here</a>, or simply type <span style="font-weight:bold;">Ctrl /</span> (<span style="font-weight:bold;">⌘ /</span> on a Mac) to open the shortcut help.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiqWMC9vd_7ZRAubdDcKDz2TFMd2M3eE1vXMkibV7etEf6PJItwzeFDboPB7BXcDBxXlNR4yOZCk9Mzl8eekj8UUWoUmHynuBYLkSMT_eE0A-Kz3uzuKh9AvPGj0eafR4mmd3yUZiLcbs/s1600/keyboardshortcuts.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5522812336243947922" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiqWMC9vd_7ZRAubdDcKDz2TFMd2M3eE1vXMkibV7etEf6PJItwzeFDboPB7BXcDBxXlNR4yOZCk9Mzl8eekj8UUWoUmHynuBYLkSMT_eE0A-Kz3uzuKh9AvPGj0eafR4mmd3yUZiLcbs/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a>You can disable keyboard shortcuts on the Sites user setting page. Are there other common actions that you’d like to see added to keyboard shortcuts? Let us know in the comments.<br /><br /><span class="byline-author">Posted by: Michael Verrilli, Software Engineer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> We’re big believers in speed and saving time, which is why we’re happy to announce that we’ve added keyboard shortcuts to common actions like create page and edit page for site collaborators using Google Sites. You can see a full list of keyboard shortcuts <a href="http://sites.google.com/support/bin/answer.py?hl=en&answer=189191">here</a>, or simply type <span style="font-weight:bold;">Ctrl /</span> (<span style="font-weight:bold;">⌘ /</span> on a Mac) to open the shortcut help.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiqWMC9vd_7ZRAubdDcKDz2TFMd2M3eE1vXMkibV7etEf6PJItwzeFDboPB7BXcDBxXlNR4yOZCk9Mzl8eekj8UUWoUmHynuBYLkSMT_eE0A-Kz3uzuKh9AvPGj0eafR4mmd3yUZiLcbs/s1600/keyboardshortcuts.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5522812336243947922" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiqWMC9vd_7ZRAubdDcKDz2TFMd2M3eE1vXMkibV7etEf6PJItwzeFDboPB7BXcDBxXlNR4yOZCk9Mzl8eekj8UUWoUmHynuBYLkSMT_eE0A-Kz3uzuKh9AvPGj0eafR4mmd3yUZiLcbs/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a>You can disable keyboard shortcuts on the Sites user setting page. Are there other common actions that you’d like to see added to keyboard shortcuts? Let us know in the comments.<br /><br /><span class="byline-author">Posted by: Michael Verrilli, Software Engineer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/keyboard-shortcuts-in-google-sites.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:Keyboard shortcuts in Google Sites&url=https://drive.googleblog.com/2010/09/keyboard-shortcuts-in-google-sites.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/keyboard-shortcuts-in-google-sites.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='16' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/keyboard-shortcuts-in-google-sites.html' data-url='https://drive.googleblog.com/2010/09/keyboard-shortcuts-in-google-sites.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/keyboard-shortcuts-in-google-sites.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Sites' rel='tag'> Google Sites </a> </span> </div> </div> </div> <div class='post' data-id='5241704415371256295' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/more-tools-for-viewing-document.html' itemprop='url' title='More tools for viewing document revisions'> More tools for viewing document revisions </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, September 28, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> We’re happy to announce that a new revision history interface is now available in Google documents. To see it, go to <span style="font-weight:bold;">File</span> > <span style="font-weight:bold;">See revision history</span>.<br /><br />In the new revision history interface, you can see what changes were made at a glance.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnY550ic4iNw_Dm_cQrL0G-e1mHm9vyDX3bRC2yvDVjt6fRS8xb5gHgwkcqtyegivL8sM75_ABsyyXpGqF9fcnxb4Ekava1kz13RcYYofyYmcySvY-TCPNBnVgNK_wwZ7pk_uM4qeGeIY/s1600/revisionui.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5521730868605854194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnY550ic4iNw_Dm_cQrL0G-e1mHm9vyDX3bRC2yvDVjt6fRS8xb5gHgwkcqtyegivL8sM75_ABsyyXpGqF9fcnxb4Ekava1kz13RcYYofyYmcySvY-TCPNBnVgNK_wwZ7pk_uM4qeGeIY/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a><br />Click on a time stamp in the right column to see what changes were made at a given time or use the arrow keys to quickly scan through many revisions. <div> <br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmIH5S7nOtIkeLmr0slxh5o2zE0kY9DKycKnokHuqTGkueIa8xQE4wrxVzTbzWAQM8UVFlaGTzbl6MIjV0W4uZSJku1hpMqRkS9m1N9cw64Ens0vrlTSBlA1aiEyTuYSpNNK6ZMW68K4k/s1600/revisionsui2.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5521732305322248178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmIH5S7nOtIkeLmr0slxh5o2zE0kY9DKycKnokHuqTGkueIa8xQE4wrxVzTbzWAQM8UVFlaGTzbl6MIjV0W4uZSJku1hpMqRkS9m1N9cw64Ens0vrlTSBlA1aiEyTuYSpNNK6ZMW68K4k/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 269px; height: 214px;" /></a><br />Changes are color-coded based on each collaborator, making it easy to tell what has been added or deleted. For example, in the screenshot below, James (whose edits are highlighted in orange) deleted and added text while bmichael61 (whose edits are highlighted in green) removed a paragraph and added a comment. </div><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfWncWlizz9elEtD3r21CkovEQk1tk_VmDO185MKEyMZ_1aok8i42oEPkOyZOcBhKaci1qLLzTGJuzYBUSWruFNwx2t8ioygUeaMH5wb4fZ_ohny_9MK3tUTluPbPy6JZM1XWX15u2hNw/s1600/revisionsui3.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5521732307550383986" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfWncWlizz9elEtD3r21CkovEQk1tk_VmDO185MKEyMZ_1aok8i42oEPkOyZOcBhKaci1qLLzTGJuzYBUSWruFNwx2t8ioygUeaMH5wb4fZ_ohny_9MK3tUTluPbPy6JZM1XWX15u2hNw/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a><br />Time stamps are also improved in the new interface. We’ve heard requests for time to always be listed, even for very old revisions and we’re listening: you can now tell afternoon edits apart from all-nighters.<br /><br />The interface also batches revisions into groups of changes to make it easier to understand how a document has changed over time. To see a finer-grained list of revisions, click <span style="font-weight:bold;">Show more detailed revisions</span>.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj83AN2McIzxfGdWFI-kQWS1X6a-g3A6e1FCintTX3PDi3LDsQwrUwUznwgDcW6CALD5eLPAJIg3VLDVoe1elewHyt5-PnMhYYG28oVrGKJ6717qTxRm4UelKDxo778HPeF01lPiPJMpSM/s1600/revisionsui4.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5521732313673486290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj83AN2McIzxfGdWFI-kQWS1X6a-g3A6e1FCintTX3PDi3LDsQwrUwUznwgDcW6CALD5eLPAJIg3VLDVoe1elewHyt5-PnMhYYG28oVrGKJ6717qTxRm4UelKDxo778HPeF01lPiPJMpSM/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 242px; height: 68px;" /></a><br />This is just a first step for the new revision interface for Google Docs. We’re looking forward to more revision improvements in the future. Let us know what you think in the comments.<br /><br /><span class="byline-author">Posted by: Vance Vagell, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> We’re happy to announce that a new revision history interface is now available in Google documents. To see it, go to <span style="font-weight:bold;">File</span> > <span style="font-weight:bold;">See revision history</span>.<br /><br />In the new revision history interface, you can see what changes were made at a glance.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnY550ic4iNw_Dm_cQrL0G-e1mHm9vyDX3bRC2yvDVjt6fRS8xb5gHgwkcqtyegivL8sM75_ABsyyXpGqF9fcnxb4Ekava1kz13RcYYofyYmcySvY-TCPNBnVgNK_wwZ7pk_uM4qeGeIY/s1600/revisionui.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5521730868605854194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnY550ic4iNw_Dm_cQrL0G-e1mHm9vyDX3bRC2yvDVjt6fRS8xb5gHgwkcqtyegivL8sM75_ABsyyXpGqF9fcnxb4Ekava1kz13RcYYofyYmcySvY-TCPNBnVgNK_wwZ7pk_uM4qeGeIY/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a><br />Click on a time stamp in the right column to see what changes were made at a given time or use the arrow keys to quickly scan through many revisions. <div> <br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmIH5S7nOtIkeLmr0slxh5o2zE0kY9DKycKnokHuqTGkueIa8xQE4wrxVzTbzWAQM8UVFlaGTzbl6MIjV0W4uZSJku1hpMqRkS9m1N9cw64Ens0vrlTSBlA1aiEyTuYSpNNK6ZMW68K4k/s1600/revisionsui2.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5521732305322248178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmIH5S7nOtIkeLmr0slxh5o2zE0kY9DKycKnokHuqTGkueIa8xQE4wrxVzTbzWAQM8UVFlaGTzbl6MIjV0W4uZSJku1hpMqRkS9m1N9cw64Ens0vrlTSBlA1aiEyTuYSpNNK6ZMW68K4k/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 269px; height: 214px;" /></a><br />Changes are color-coded based on each collaborator, making it easy to tell what has been added or deleted. For example, in the screenshot below, James (whose edits are highlighted in orange) deleted and added text while bmichael61 (whose edits are highlighted in green) removed a paragraph and added a comment. </div><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfWncWlizz9elEtD3r21CkovEQk1tk_VmDO185MKEyMZ_1aok8i42oEPkOyZOcBhKaci1qLLzTGJuzYBUSWruFNwx2t8ioygUeaMH5wb4fZ_ohny_9MK3tUTluPbPy6JZM1XWX15u2hNw/s1600/revisionsui3.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5521732307550383986" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfWncWlizz9elEtD3r21CkovEQk1tk_VmDO185MKEyMZ_1aok8i42oEPkOyZOcBhKaci1qLLzTGJuzYBUSWruFNwx2t8ioygUeaMH5wb4fZ_ohny_9MK3tUTluPbPy6JZM1XWX15u2hNw/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a><br />Time stamps are also improved in the new interface. We’ve heard requests for time to always be listed, even for very old revisions and we’re listening: you can now tell afternoon edits apart from all-nighters.<br /><br />The interface also batches revisions into groups of changes to make it easier to understand how a document has changed over time. To see a finer-grained list of revisions, click <span style="font-weight:bold;">Show more detailed revisions</span>.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj83AN2McIzxfGdWFI-kQWS1X6a-g3A6e1FCintTX3PDi3LDsQwrUwUznwgDcW6CALD5eLPAJIg3VLDVoe1elewHyt5-PnMhYYG28oVrGKJ6717qTxRm4UelKDxo778HPeF01lPiPJMpSM/s1600/revisionsui4.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5521732313673486290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj83AN2McIzxfGdWFI-kQWS1X6a-g3A6e1FCintTX3PDi3LDsQwrUwUznwgDcW6CALD5eLPAJIg3VLDVoe1elewHyt5-PnMhYYG28oVrGKJ6717qTxRm4UelKDxo778HPeF01lPiPJMpSM/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 242px; height: 68px;" /></a><br />This is just a first step for the new revision interface for Google Docs. We’re looking forward to more revision improvements in the future. Let us know what you think in the comments.<br /><br /><span class="byline-author">Posted by: Vance Vagell, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/more-tools-for-viewing-document.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:More tools for viewing document revisions&url=https://drive.googleblog.com/2010/09/more-tools-for-viewing-document.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/more-tools-for-viewing-document.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='77' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/more-tools-for-viewing-document.html' data-url='https://drive.googleblog.com/2010/09/more-tools-for-viewing-document.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/more-tools-for-viewing-document.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/documents' rel='tag'> documents </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='post' data-id='933812582649317108' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/import-your-files-many-different-ways.html' itemprop='url' title='Import your files many different ways'> Import your files many different ways </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, September 23, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> A spreadsheet without data and numbers in it can get pretty lonely, which is why it’s important to be able to easily import files full of data. Today we’ve improved the import dialogue to give you a full range of options of where to put that data. You can get to the new <span style="font-weight:bold;">Import</span> dialog from the <span style="font-weight:bold;">File</span> menu.<br /><br />For example, when importing a .csv file, you can create a whole new spreadsheet, append to the current sheet, add a new sheet to your existing spreadsheet or even replace your entire spreadsheet with this new version.<br /><br />Now with the new custom <a href="http://en.wikipedia.org/wiki/Delimiter">delimiters</a> option, you can also specify what character to parse your data file with, giving you maximum flexibility when dealing with your data files.<br /><br />And finally we spruced up the dialog with a preview pane giving you a first glimpse to see how your imported data will look in your spreadsheet so you can make any changes if necessary.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMDZ5SSFIOzsXfQ2DJCadxi0j0sNhKz62PAwTumodctwN4H7PaZrcX-UvWS3FRrEGXJqTC8QUt-_zlC3kmCvrdV1nFIEffAKc7N2_QlxhveMMUMabx7swh6ECsyOEtNP9gaHohkkCazwo/s1600/import.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519749240423452290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMDZ5SSFIOzsXfQ2DJCadxi0j0sNhKz62PAwTumodctwN4H7PaZrcX-UvWS3FRrEGXJqTC8QUt-_zlC3kmCvrdV1nFIEffAKc7N2_QlxhveMMUMabx7swh6ECsyOEtNP9gaHohkkCazwo/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a><br />Happy importing!<br /><br />PS: If you're using Google Apps for your school or business, join us for a <a href="https://google.webex.com/google/onstage/g.php?t=a&d=965738222&SourceID=320">live webinar</a> on Monday September 27th for a review of all the new Google Docs features we launched this quarter.<br /><br /><span class="byline-author">Posted by: Ben Mann, Software Engineering Intern</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> A spreadsheet without data and numbers in it can get pretty lonely, which is why it’s important to be able to easily import files full of data. Today we’ve improved the import dialogue to give you a full range of options of where to put that data. You can get to the new <span style="font-weight:bold;">Import</span> dialog from the <span style="font-weight:bold;">File</span> menu.<br /><br />For example, when importing a .csv file, you can create a whole new spreadsheet, append to the current sheet, add a new sheet to your existing spreadsheet or even replace your entire spreadsheet with this new version.<br /><br />Now with the new custom <a href="http://en.wikipedia.org/wiki/Delimiter">delimiters</a> option, you can also specify what character to parse your data file with, giving you maximum flexibility when dealing with your data files.<br /><br />And finally we spruced up the dialog with a preview pane giving you a first glimpse to see how your imported data will look in your spreadsheet so you can make any changes if necessary.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMDZ5SSFIOzsXfQ2DJCadxi0j0sNhKz62PAwTumodctwN4H7PaZrcX-UvWS3FRrEGXJqTC8QUt-_zlC3kmCvrdV1nFIEffAKc7N2_QlxhveMMUMabx7swh6ECsyOEtNP9gaHohkkCazwo/s1600/import.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519749240423452290" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMDZ5SSFIOzsXfQ2DJCadxi0j0sNhKz62PAwTumodctwN4H7PaZrcX-UvWS3FRrEGXJqTC8QUt-_zlC3kmCvrdV1nFIEffAKc7N2_QlxhveMMUMabx7swh6ECsyOEtNP9gaHohkkCazwo/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a><br />Happy importing!<br /><br />PS: If you're using Google Apps for your school or business, join us for a <a href="https://google.webex.com/google/onstage/g.php?t=a&d=965738222&SourceID=320">live webinar</a> on Monday September 27th for a review of all the new Google Docs features we launched this quarter.<br /><br /><span class="byline-author">Posted by: Ben Mann, Software Engineering Intern</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/import-your-files-many-different-ways.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:Import your files many different ways&url=https://drive.googleblog.com/2010/09/import-your-files-many-different-ways.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/import-your-files-many-different-ways.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='18' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/import-your-files-many-different-ways.html' data-url='https://drive.googleblog.com/2010/09/import-your-files-many-different-ways.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/import-your-files-many-different-ways.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/spreadsheets' rel='tag'> spreadsheets </a> </span> </div> </div> </div> <div class='post' data-id='5330630221418609615' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html' itemprop='url' title='What’s different about the new Google Docs: Making collaboration fast'> What’s different about the new Google Docs: Making collaboration fast </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, September 23, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span style="font-style: italic;">This is the final post in a three part series about the collaboration technology in Google Docs. On <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs.html">Tuesday</a>, we explained some of the technical challenges behind real time collaboration. <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs_22.html">Yesterday</a>, we showed how operational transformation can be used merge editors’ changes.</span><br /><br />Imagine that you’re doing a jigsaw puzzle with a bunch of friends and that everyone is working in the same corner of the puzzle. It’s possible to solve a puzzle like this, but it’s hard to keep out of each other’s way and to make sure that when multiple pieces are added at once, that they all fit together perfectly. Making a document collaborative is a little like that: one challenge is coming up with a method to let multiple people edit in the same area without conflicting edits. A second problem is to ensure that when many changes happen at the same time, each change is merged properly with each other changes. In Google Docs, the first problem is handled by operational transformation and the second problem is handled by the collaboration protocol, which is the subject of this post.<br /><br />To open a Google document, you need code running in two places: your browser and our servers. We call the code that’s running in your browser a client. In the document editor, the client processes all your edits, sends them to the server, and processes other editors’ changes when it receives them from the server.<br /><br />To collaborate in Google Docs, each client keeps track of four pieces of information:<br /><ol><li>The number of the most recent revision sent from the server to the client.</li><li>Any changes that have been made locally and not yet sent to the server.</li><li>Any changes that have been made locally, sent to the server, but not yet acknowledged by the server.</li><li>The current state of the document as seen by that particular editor.</li></ol>The server remembers three things:<br /><ol><li>The list of all changes that it has received but not yet processed.</li><li>The complete history of all processed changes (called the revision log)./li></li><li>The current state of the document as of the last processed change./li></li></ol>By carefully making use of this information, it’s possible to design the client-server communication such that all editors are capable of rapidly processing each other’s changes in real time. Let’s walk through a straightforward example of how client-server communication is handled in a document.<br /><br />In the diagrams below, the two outer columns represent the editors: Luiz and John. The middle column is the server. The oval shapes represent changes inputted by the editors and sent between the clients and the server. The diamonds represent transformations.<br /><br />Let’s say Luiz starts by typing the word <span class="Apple-style-span" style="color: blue;">Hello</span> at the beginning of the document.<br /><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiRHyO8r24mY4VRMC1oqTBnkBxxZmNEHLtktCNuckEX02w04wFdBYtcccYIXy9jM7M07kg599gigstwA9BMrIbzutXigxJt-n0vdBYaWRUC8AUABgLa8wxkRCZg7AkJJ6_KC2pKbgZRas/s1600/ProtocolDrawing1.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5520152540312997762" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiRHyO8r24mY4VRMC1oqTBnkBxxZmNEHLtktCNuckEX02w04wFdBYtcccYIXy9jM7M07kg599gigstwA9BMrIbzutXigxJt-n0vdBYaWRUC8AUABgLa8wxkRCZg7AkJJ6_KC2pKbgZRas/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Luiz’s client added the edit to his list of pending changes. He then sent the change to the server and moved the change into his list of sent changes.<br /><br />Luiz continues to type, adding the word <span class="Apple-style-span" style="color: blue;">world</span> to his document. At the same time, John types an <span class="Apple-style-span" style="color: blue;">!</span> in his empty version of the document (remember he has not yet received Luiz’s first change).</div><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE-hUH4XiufvJuMAOWJnRfDe6hWjL8iy-29Z6ocpQbyQBQ_a0Kwdk2Dknsb1VVj0tQWugpPdS2SP4W4yDrx7l0UkvN2_cw7oBfaBBIsUzsL2JHZAeR2SZoYcP1Dy0yFk52sNIYZv0_fAY/s1600/ProtocolDrawing2.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5520152548714483986" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE-hUH4XiufvJuMAOWJnRfDe6hWjL8iy-29Z6ocpQbyQBQ_a0Kwdk2Dknsb1VVj0tQWugpPdS2SP4W4yDrx7l0UkvN2_cw7oBfaBBIsUzsL2JHZAeR2SZoYcP1Dy0yFk52sNIYZv0_fAY/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Luiz’s <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText ' world' @6}</span> change was placed in the pending list and wasn’t sent to the server because we never send more than one pending change at a time. Until Luiz recieves an acknowledgement of his first change, his client will keep all new changes in the pending list. Also notice that the server stored Luiz’s first change in its revision log. Next, the server will send John a message containing Luiz’s first change and it will send Luiz a message acknowledging that it has processed that first change.</div><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP6hL4ihV2DKfdgsOA66fft0TOtHk3BUYFoFsN9uNi8cCCIvxAmGH1cs8OzWhtAcDNWjgFWFHiiR5NJoE0n_3WpCzSwdSNnFE7zqlp-GXL9CvWrtg0qaNd64gY4v3OAyFZ7YSAm4Y3lsI/s1600/ProtocolDrawing3.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5520152549177263698" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP6hL4ihV2DKfdgsOA66fft0TOtHk3BUYFoFsN9uNi8cCCIvxAmGH1cs8OzWhtAcDNWjgFWFHiiR5NJoE0n_3WpCzSwdSNnFE7zqlp-GXL9CvWrtg0qaNd64gY4v3OAyFZ7YSAm4Y3lsI/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />John received Luiz’s edit from the server and used <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs_22.html">operational transformation</a> (OT) to transform it against his pending <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText '!' @1}</span> change. The result of the transformation was to shift the location of John’s pending change by 5 to make room at the beginning of the document for Luiz’s <span class="Apple-style-span" style="color: blue;">Hello</span>. Notice that both Luiz and John updated their last synced revision numbers to 1 when they received the messages from the server. Lastly, when Luiz received the acknowledgement of his first change, he removed that first change from the list of sent changes.<br /><br />Next, both Luiz and John are going to send their unsent changes to the server.</div><div><br /><a href="//3.bp.blogspot.com/_Dxpdr9VymoY/TK-HzMQhIEI/AAAAAAAAAIs/V2_OMVtOZqg/s1600/ProtocolDrawing4.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5525784581340471362" src="//3.bp.blogspot.com/_Dxpdr9VymoY/TK-HzMQhIEI/AAAAAAAAAIs/V2_OMVtOZqg/ProtocolDrawing4.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;"></a><br />The server got Luiz’s change before John’s so it processed that change first. An acknowledgement of the change was sent to Luiz. The change itself was sent to John, where his client transformed it against his still pending <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText '!' @1}</span> change.<br /><br />What comes next is important. The server received John’s pending change, a change that John believes should be Revision 2. But the server has already committed a Revision 2 to the revision log. The server will use OT to transform John’s change so that it can be stored as Revision 3.</div><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3e9qK5BcG7NkeJdI5lSTWCgDYhoc3lsDzLyiz0Kv1PyaFFhHDKC4P6xo3QBJhE0Tgo-TJZcDZ88e74Bfjdpo2E7KsJ-C282sT-YE6INIOtj8HPEXyWAoftbCSY7Bfn_TCWvA2YDqIgh8/s1600/ProtocolDrawing5.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5520152563704187746" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3e9qK5BcG7NkeJdI5lSTWCgDYhoc3lsDzLyiz0Kv1PyaFFhHDKC4P6xo3QBJhE0Tgo-TJZcDZ88e74Bfjdpo2E7KsJ-C282sT-YE6INIOtj8HPEXyWAoftbCSY7Bfn_TCWvA2YDqIgh8/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />The first thing the server did, was to transform John’s sent change against all the changes that have been committed since the last time John synced with the server. In this case, it transformed John’s change against Luiz’s <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText ' world' @6}</span>. The result shifted the index of John’s change over by 6. This shift is identical to the transformation John’s client made when it first received Luiz’s <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText 'Hello' @1}</span>.<br /><br />The example above ends with Luiz and John receiving John’s change and the acknowledgement of that change respectively. At this point the server and both editors are looking at the same document — <span class="Apple-style-span" style="color: blue;">Hello world!</span>.<br /><br />The main advantages of this collaboration protocol are:<br /><ol><li>Collaboration is fast. At all times, every editor can optimistically apply their own changes locally without waiting for the server to acknowledge those changes. This means that the speed or reliability of your network connection doesn’t influence how fast you can type.</li><br /><li>Collaboration is accurate. There is always enough information for each client to merge collaborators’ changes in the same deterministic way.</li><br /><li>Collaboration is efficient. The information that is sent over the network is always the bare minimum needed to describe what changed.</li><br /><li>Collaboration complexity is constant. The server does not need to know anything about the state of each client. Therefore, the complexity of processing changes does not increase as you add more editors.</li><br /><li>Collaboration is distributed. Only the server needs to be aware of the document’s history and only the clients need to be aware of uncommitted changes. This division spreads the workload required to support real time collaboration between all the parties involved.</li></ol>When we switched to the new document editor, we moved from a very simple collaboration algorithm based on comparing versions to a much more sophisticated algorithm powered by operational transformation and the protocol described above. The results are dramatic: there are no more collaboration conflicts and editors can see each other’s changes as they happen, character-by-character.<br /><br />Well that’s all folks: we hope by reading this series you learned a bit more about what’s under the hood in Google Docs, and the kinds of things you need to think about to make a fast collaboration experience. You can try collaboration yourself, without signing in, by visiting the <a href="http://docs.google.com/demo">Google Docs demo.</a></div><div><a href="http://docs.google.com/demo"></a><br /><span class="byline-author">Posted by: John Day-Richter, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span style="font-style: italic;">This is the final post in a three part series about the collaboration technology in Google Docs. On <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs.html">Tuesday</a>, we explained some of the technical challenges behind real time collaboration. <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs_22.html">Yesterday</a>, we showed how operational transformation can be used merge editors’ changes.</span><br /><br />Imagine that you’re doing a jigsaw puzzle with a bunch of friends and that everyone is working in the same corner of the puzzle. It’s possible to solve a puzzle like this, but it’s hard to keep out of each other’s way and to make sure that when multiple pieces are added at once, that they all fit together perfectly. Making a document collaborative is a little like that: one challenge is coming up with a method to let multiple people edit in the same area without conflicting edits. A second problem is to ensure that when many changes happen at the same time, each change is merged properly with each other changes. In Google Docs, the first problem is handled by operational transformation and the second problem is handled by the collaboration protocol, which is the subject of this post.<br /><br />To open a Google document, you need code running in two places: your browser and our servers. We call the code that’s running in your browser a client. In the document editor, the client processes all your edits, sends them to the server, and processes other editors’ changes when it receives them from the server.<br /><br />To collaborate in Google Docs, each client keeps track of four pieces of information:<br /><ol><li>The number of the most recent revision sent from the server to the client.</li><li>Any changes that have been made locally and not yet sent to the server.</li><li>Any changes that have been made locally, sent to the server, but not yet acknowledged by the server.</li><li>The current state of the document as seen by that particular editor.</li></ol>The server remembers three things:<br /><ol><li>The list of all changes that it has received but not yet processed.</li><li>The complete history of all processed changes (called the revision log)./li></li><li>The current state of the document as of the last processed change./li></li></ol>By carefully making use of this information, it’s possible to design the client-server communication such that all editors are capable of rapidly processing each other’s changes in real time. Let’s walk through a straightforward example of how client-server communication is handled in a document.<br /><br />In the diagrams below, the two outer columns represent the editors: Luiz and John. The middle column is the server. The oval shapes represent changes inputted by the editors and sent between the clients and the server. The diamonds represent transformations.<br /><br />Let’s say Luiz starts by typing the word <span class="Apple-style-span" style="color: blue;">Hello</span> at the beginning of the document.<br /><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiRHyO8r24mY4VRMC1oqTBnkBxxZmNEHLtktCNuckEX02w04wFdBYtcccYIXy9jM7M07kg599gigstwA9BMrIbzutXigxJt-n0vdBYaWRUC8AUABgLa8wxkRCZg7AkJJ6_KC2pKbgZRas/s1600/ProtocolDrawing1.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5520152540312997762" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiRHyO8r24mY4VRMC1oqTBnkBxxZmNEHLtktCNuckEX02w04wFdBYtcccYIXy9jM7M07kg599gigstwA9BMrIbzutXigxJt-n0vdBYaWRUC8AUABgLa8wxkRCZg7AkJJ6_KC2pKbgZRas/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Luiz’s client added the edit to his list of pending changes. He then sent the change to the server and moved the change into his list of sent changes.<br /><br />Luiz continues to type, adding the word <span class="Apple-style-span" style="color: blue;">world</span> to his document. At the same time, John types an <span class="Apple-style-span" style="color: blue;">!</span> in his empty version of the document (remember he has not yet received Luiz’s first change).</div><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE-hUH4XiufvJuMAOWJnRfDe6hWjL8iy-29Z6ocpQbyQBQ_a0Kwdk2Dknsb1VVj0tQWugpPdS2SP4W4yDrx7l0UkvN2_cw7oBfaBBIsUzsL2JHZAeR2SZoYcP1Dy0yFk52sNIYZv0_fAY/s1600/ProtocolDrawing2.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5520152548714483986" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE-hUH4XiufvJuMAOWJnRfDe6hWjL8iy-29Z6ocpQbyQBQ_a0Kwdk2Dknsb1VVj0tQWugpPdS2SP4W4yDrx7l0UkvN2_cw7oBfaBBIsUzsL2JHZAeR2SZoYcP1Dy0yFk52sNIYZv0_fAY/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Luiz’s <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText ' world' @6}</span> change was placed in the pending list and wasn’t sent to the server because we never send more than one pending change at a time. Until Luiz recieves an acknowledgement of his first change, his client will keep all new changes in the pending list. Also notice that the server stored Luiz’s first change in its revision log. Next, the server will send John a message containing Luiz’s first change and it will send Luiz a message acknowledging that it has processed that first change.</div><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP6hL4ihV2DKfdgsOA66fft0TOtHk3BUYFoFsN9uNi8cCCIvxAmGH1cs8OzWhtAcDNWjgFWFHiiR5NJoE0n_3WpCzSwdSNnFE7zqlp-GXL9CvWrtg0qaNd64gY4v3OAyFZ7YSAm4Y3lsI/s1600/ProtocolDrawing3.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5520152549177263698" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP6hL4ihV2DKfdgsOA66fft0TOtHk3BUYFoFsN9uNi8cCCIvxAmGH1cs8OzWhtAcDNWjgFWFHiiR5NJoE0n_3WpCzSwdSNnFE7zqlp-GXL9CvWrtg0qaNd64gY4v3OAyFZ7YSAm4Y3lsI/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />John received Luiz’s edit from the server and used <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs_22.html">operational transformation</a> (OT) to transform it against his pending <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText '!' @1}</span> change. The result of the transformation was to shift the location of John’s pending change by 5 to make room at the beginning of the document for Luiz’s <span class="Apple-style-span" style="color: blue;">Hello</span>. Notice that both Luiz and John updated their last synced revision numbers to 1 when they received the messages from the server. Lastly, when Luiz received the acknowledgement of his first change, he removed that first change from the list of sent changes.<br /><br />Next, both Luiz and John are going to send their unsent changes to the server.</div><div><br /><a href="//3.bp.blogspot.com/_Dxpdr9VymoY/TK-HzMQhIEI/AAAAAAAAAIs/V2_OMVtOZqg/s1600/ProtocolDrawing4.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5525784581340471362" src="//3.bp.blogspot.com/_Dxpdr9VymoY/TK-HzMQhIEI/AAAAAAAAAIs/V2_OMVtOZqg/ProtocolDrawing4.jpg" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;"></a><br />The server got Luiz’s change before John’s so it processed that change first. An acknowledgement of the change was sent to Luiz. The change itself was sent to John, where his client transformed it against his still pending <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText '!' @1}</span> change.<br /><br />What comes next is important. The server received John’s pending change, a change that John believes should be Revision 2. But the server has already committed a Revision 2 to the revision log. The server will use OT to transform John’s change so that it can be stored as Revision 3.</div><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3e9qK5BcG7NkeJdI5lSTWCgDYhoc3lsDzLyiz0Kv1PyaFFhHDKC4P6xo3QBJhE0Tgo-TJZcDZ88e74Bfjdpo2E7KsJ-C282sT-YE6INIOtj8HPEXyWAoftbCSY7Bfn_TCWvA2YDqIgh8/s1600/ProtocolDrawing5.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5520152563704187746" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3e9qK5BcG7NkeJdI5lSTWCgDYhoc3lsDzLyiz0Kv1PyaFFhHDKC4P6xo3QBJhE0Tgo-TJZcDZ88e74Bfjdpo2E7KsJ-C282sT-YE6INIOtj8HPEXyWAoftbCSY7Bfn_TCWvA2YDqIgh8/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />The first thing the server did, was to transform John’s sent change against all the changes that have been committed since the last time John synced with the server. In this case, it transformed John’s change against Luiz’s <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText ' world' @6}</span>. The result shifted the index of John’s change over by 6. This shift is identical to the transformation John’s client made when it first received Luiz’s <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText 'Hello' @1}</span>.<br /><br />The example above ends with Luiz and John receiving John’s change and the acknowledgement of that change respectively. At this point the server and both editors are looking at the same document — <span class="Apple-style-span" style="color: blue;">Hello world!</span>.<br /><br />The main advantages of this collaboration protocol are:<br /><ol><li>Collaboration is fast. At all times, every editor can optimistically apply their own changes locally without waiting for the server to acknowledge those changes. This means that the speed or reliability of your network connection doesn’t influence how fast you can type.</li><br /><li>Collaboration is accurate. There is always enough information for each client to merge collaborators’ changes in the same deterministic way.</li><br /><li>Collaboration is efficient. The information that is sent over the network is always the bare minimum needed to describe what changed.</li><br /><li>Collaboration complexity is constant. The server does not need to know anything about the state of each client. Therefore, the complexity of processing changes does not increase as you add more editors.</li><br /><li>Collaboration is distributed. Only the server needs to be aware of the document’s history and only the clients need to be aware of uncommitted changes. This division spreads the workload required to support real time collaboration between all the parties involved.</li></ol>When we switched to the new document editor, we moved from a very simple collaboration algorithm based on comparing versions to a much more sophisticated algorithm powered by operational transformation and the protocol described above. The results are dramatic: there are no more collaboration conflicts and editors can see each other’s changes as they happen, character-by-character.<br /><br />Well that’s all folks: we hope by reading this series you learned a bit more about what’s under the hood in Google Docs, and the kinds of things you need to think about to make a fast collaboration experience. You can try collaboration yourself, without signing in, by visiting the <a href="http://docs.google.com/demo">Google Docs demo.</a></div><div><a href="http://docs.google.com/demo"></a><br /><span class="byline-author">Posted by: John Day-Richter, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:What’s different about the new Google Docs: Making collaboration fast&url=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='29' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html' data-url='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/documents' rel='tag'> documents </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='post' data-id='1580545015531974642' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html' itemprop='url' title='What’s different about the new Google Docs: Conflict resolution'> What’s different about the new Google Docs: Conflict resolution </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, September 22, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span style="font-style: italic;">Editor’s note: This is the second in a series of three posts about the collaboration technology in Google Docs. <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs.html">Yesterday</a>, we explained some of the technical challenges behind real time collaboration.<br /></span><br />Think of the history of a document as a series of changes. In Google documents, all edits boil down to three basic types of changes: inserting text, deleting text, and applying styles to a range of text. We save your document as a revision log consisting of a list of these changes. When someone edits a document, they’re not modifying the underlying characters that represents the document. Instead they are appending their change to the end of the revision log. To display a document, we replay the revision log from the beginning.<br /><br />To see what these changes look like, suppose that a document edited by John and Luiz initially reads; <span class="Apple-style-span" style="color: blue;">EASY AS 123</span>. If John (represented by green) changes the document to <span class="Apple-style-span" style="color: blue;">EASY AS ABC</span>, then he is making four changes:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirw6pLeWQjcAz5r2TbEignU3rOCA_zBM1inIznC_4NJz_iLRkyfxYEyJZ1XF4GSjRQ38HWde_i4gF_1TIE0BpApQ2MilSxFWyGsC4NQV5uckuAp7WCmN6nMRQvZqt7ePaYLzNU-5bDD1A/s1600/ot1.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519750515415522738" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirw6pLeWQjcAz5r2TbEignU3rOCA_zBM1inIznC_4NJz_iLRkyfxYEyJZ1XF4GSjRQ38HWde_i4gF_1TIE0BpApQ2MilSxFWyGsC4NQV5uckuAp7WCmN6nMRQvZqt7ePaYLzNU-5bDD1A/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Collaboration is not quite as simple as sending these changes to the other editors because people get out of sync. Suppose as John is typing, Luiz (represented by yellow) begins to change his document to <span class="Apple-style-span" style="color: blue;">IT'S EASY AS 123</span>. He first inserts the <span class="Apple-style-span" style="color: blue;">I</span> and the <span class="Apple-style-span" style="color: blue;">T</span> at the beginning of the document:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB2VhFoc5liANzG5abNFCxtCS4oWrCFSsxM570f-9XyoXjCuSc63w8nFGKaxFISKHXqsrf4HMD4JFg5qEQy4qBZjKI9tyRcci3AspmiAFlVz68_lvx2abqIoLdvGkKpZirpktOFXopCO4/s1600/ot2.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519750573355492914" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB2VhFoc5liANzG5abNFCxtCS4oWrCFSsxM570f-9XyoXjCuSc63w8nFGKaxFISKHXqsrf4HMD4JFg5qEQy4qBZjKI9tyRcci3AspmiAFlVz68_lvx2abqIoLdvGkKpZirpktOFXopCO4/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Suppose Luiz naively applies John’s first change <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{DeleteText @9-11}</span>:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKiMKgrhV8GOO6mv8bp9xKQTqrBhoQ_HMUSD6W3HkHJg0vPw2wt2tRlZ29-QWHxek9j_4wJgvyl1lQZATXIsWL1GqZwZ82k5Z_yI2SLJlO5Ewf7fh_ouRpzL5ZXz9pgEjmKLcUx1WQCA/s1600/ot3.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519750609665472242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKiMKgrhV8GOO6mv8bp9xKQTqrBhoQ_HMUSD6W3HkHJg0vPw2wt2tRlZ29-QWHxek9j_4wJgvyl1lQZATXIsWL1GqZwZ82k5Z_yI2SLJlO5Ewf7fh_ouRpzL5ZXz9pgEjmKLcUx1WQCA/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />He deleted the wrong characters! Luiz had two characters at the beginning of the doc that John was never aware of. So the location of John’s change was wrong relative to Luiz’s version of the document. To avoid this problem, Luiz must <i>transform</i> John’s changes and make them relative to his local document. In this case, when Luiz receives changes from John he needs to know to shift the changes over by two characters to adjust for the <span class="Apple-style-span" style="color: blue;">IT</span> that Luiz added. Once he does this transformation and applies John’s first change, he gets:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI4jQsfvxzT4NfRFbtHWli_V8YwEHCkpuLRXXz6MDea2WrFFtDPshvDjoS-6fIPYhtc0YG3KG1W5baagU41xucvkWlneZROhlpyGDw1YVdo-FKA7mxM_FOJicrj6caURfwUOn4DjHKYgg/s1600/ot4.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519750656426709970" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI4jQsfvxzT4NfRFbtHWli_V8YwEHCkpuLRXXz6MDea2WrFFtDPshvDjoS-6fIPYhtc0YG3KG1W5baagU41xucvkWlneZROhlpyGDw1YVdo-FKA7mxM_FOJicrj6caURfwUOn4DjHKYgg/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Much better. The algorithm that we use to handle these shifts is called operational transformation (OT). If OT is implemented correctly, it guarantees that once all editors have received all changes, everyone will be looking at the same version of the document.<br /><br />The OT logic in documents must handle all of the different ways that InsertText, DeleteText, and ApplyStyle changes can be paired and transformed against each other. The example above showed DeleteText being transformed against InsertText. To get a feel for how this works, here are a couple more examples of simple transformations:<br /><ul><li>Style ranges expand when they are transformed against text insertions: <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle bold @10-20}</span> transformed against <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText 'ABC' @15}</span> results in <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle Bold @10-23}</span>. </li><li>Sometimes changes don’t conflict and there’s no need to transform anything. For example when a style change is transformed against a different type of style change, there is no conflict: <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle italic @10-20}</span> transformed against <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle font-color=red @0-30}</span> results in the same <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle italic @10-20}</span> because the range of text can be both red and italic simultaneously.</li></ul>Collaboration in Google Docs consists of sending changes from one editor to the server, and then to the other editors. Each editor transforms incoming changes so that they make sense relative to the local version of the document. Tomorrow’s post will outline the protocol for deciding when each editor uses operational transformation.<br /><br /><span class="byline-author">Posted by: John Day-Richter, Software Engineer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span style="font-style: italic;">Editor’s note: This is the second in a series of three posts about the collaboration technology in Google Docs. <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs.html">Yesterday</a>, we explained some of the technical challenges behind real time collaboration.<br /></span><br />Think of the history of a document as a series of changes. In Google documents, all edits boil down to three basic types of changes: inserting text, deleting text, and applying styles to a range of text. We save your document as a revision log consisting of a list of these changes. When someone edits a document, they’re not modifying the underlying characters that represents the document. Instead they are appending their change to the end of the revision log. To display a document, we replay the revision log from the beginning.<br /><br />To see what these changes look like, suppose that a document edited by John and Luiz initially reads; <span class="Apple-style-span" style="color: blue;">EASY AS 123</span>. If John (represented by green) changes the document to <span class="Apple-style-span" style="color: blue;">EASY AS ABC</span>, then he is making four changes:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirw6pLeWQjcAz5r2TbEignU3rOCA_zBM1inIznC_4NJz_iLRkyfxYEyJZ1XF4GSjRQ38HWde_i4gF_1TIE0BpApQ2MilSxFWyGsC4NQV5uckuAp7WCmN6nMRQvZqt7ePaYLzNU-5bDD1A/s1600/ot1.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519750515415522738" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirw6pLeWQjcAz5r2TbEignU3rOCA_zBM1inIznC_4NJz_iLRkyfxYEyJZ1XF4GSjRQ38HWde_i4gF_1TIE0BpApQ2MilSxFWyGsC4NQV5uckuAp7WCmN6nMRQvZqt7ePaYLzNU-5bDD1A/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Collaboration is not quite as simple as sending these changes to the other editors because people get out of sync. Suppose as John is typing, Luiz (represented by yellow) begins to change his document to <span class="Apple-style-span" style="color: blue;">IT'S EASY AS 123</span>. He first inserts the <span class="Apple-style-span" style="color: blue;">I</span> and the <span class="Apple-style-span" style="color: blue;">T</span> at the beginning of the document:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB2VhFoc5liANzG5abNFCxtCS4oWrCFSsxM570f-9XyoXjCuSc63w8nFGKaxFISKHXqsrf4HMD4JFg5qEQy4qBZjKI9tyRcci3AspmiAFlVz68_lvx2abqIoLdvGkKpZirpktOFXopCO4/s1600/ot2.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519750573355492914" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgB2VhFoc5liANzG5abNFCxtCS4oWrCFSsxM570f-9XyoXjCuSc63w8nFGKaxFISKHXqsrf4HMD4JFg5qEQy4qBZjKI9tyRcci3AspmiAFlVz68_lvx2abqIoLdvGkKpZirpktOFXopCO4/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Suppose Luiz naively applies John’s first change <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{DeleteText @9-11}</span>:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKiMKgrhV8GOO6mv8bp9xKQTqrBhoQ_HMUSD6W3HkHJg0vPw2wt2tRlZ29-QWHxek9j_4wJgvyl1lQZATXIsWL1GqZwZ82k5Z_yI2SLJlO5Ewf7fh_ouRpzL5ZXz9pgEjmKLcUx1WQCA/s1600/ot3.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519750609665472242" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggKiMKgrhV8GOO6mv8bp9xKQTqrBhoQ_HMUSD6W3HkHJg0vPw2wt2tRlZ29-QWHxek9j_4wJgvyl1lQZATXIsWL1GqZwZ82k5Z_yI2SLJlO5Ewf7fh_ouRpzL5ZXz9pgEjmKLcUx1WQCA/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />He deleted the wrong characters! Luiz had two characters at the beginning of the doc that John was never aware of. So the location of John’s change was wrong relative to Luiz’s version of the document. To avoid this problem, Luiz must <i>transform</i> John’s changes and make them relative to his local document. In this case, when Luiz receives changes from John he needs to know to shift the changes over by two characters to adjust for the <span class="Apple-style-span" style="color: blue;">IT</span> that Luiz added. Once he does this transformation and applies John’s first change, he gets:<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI4jQsfvxzT4NfRFbtHWli_V8YwEHCkpuLRXXz6MDea2WrFFtDPshvDjoS-6fIPYhtc0YG3KG1W5baagU41xucvkWlneZROhlpyGDw1YVdo-FKA7mxM_FOJicrj6caURfwUOn4DjHKYgg/s1600/ot4.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519750656426709970" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI4jQsfvxzT4NfRFbtHWli_V8YwEHCkpuLRXXz6MDea2WrFFtDPshvDjoS-6fIPYhtc0YG3KG1W5baagU41xucvkWlneZROhlpyGDw1YVdo-FKA7mxM_FOJicrj6caURfwUOn4DjHKYgg/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />Much better. The algorithm that we use to handle these shifts is called operational transformation (OT). If OT is implemented correctly, it guarantees that once all editors have received all changes, everyone will be looking at the same version of the document.<br /><br />The OT logic in documents must handle all of the different ways that InsertText, DeleteText, and ApplyStyle changes can be paired and transformed against each other. The example above showed DeleteText being transformed against InsertText. To get a feel for how this works, here are a couple more examples of simple transformations:<br /><ul><li>Style ranges expand when they are transformed against text insertions: <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle bold @10-20}</span> transformed against <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText 'ABC' @15}</span> results in <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle Bold @10-23}</span>. </li><li>Sometimes changes don’t conflict and there’s no need to transform anything. For example when a style change is transformed against a different type of style change, there is no conflict: <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle italic @10-20}</span> transformed against <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle font-color=red @0-30}</span> results in the same <span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{ApplyStyle italic @10-20}</span> because the range of text can be both red and italic simultaneously.</li></ul>Collaboration in Google Docs consists of sending changes from one editor to the server, and then to the other editors. Each editor transforms incoming changes so that they make sense relative to the local version of the document. Tomorrow’s post will outline the protocol for deciding when each editor uses operational transformation.<br /><br /><span class="byline-author">Posted by: John Day-Richter, Software Engineer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:What’s different about the new Google Docs: Conflict resolution&url=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='2' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html' data-url='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/documents' rel='tag'> documents </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='post' data-id='3340904718938069968' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/a-more-fontastic-google-docs.html' itemprop='url' title='A more fontastic Google Docs'> A more fontastic Google Docs </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, September 21, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <i>Cross posted on the <a href="http://googleblog.blogspot.com/2010/09/more-fontastic-google-docs.html/">Official Google Blog</a><br /></i><br />Documents without font choices are like photographs without colors. Just as shades of color can add depth to a picture, smart font choices give your text another dimension.<br /><br />For a long time, the set of fonts that you’ve seen when you browsed the web has been quite limited. That’s because you could only use a font that’s already been installed on your computer. So if a website designer wanted all her visitors to see the same thing, she could only use fonts that are so ubiquitous that the chances are very high that every computer will have them. And there are only a handful of fonts that fit that bill.<br /><br />Thankfully, that situation is changing. All modern browsers now support the ability to download web fonts. A web font doesn’t need to be installed on your local computer—it can be read directly from a web server and used immediately on the webpage that you’re loading. In May, we launched the <a href="http://googlecode.blogspot.com/2010/05/introducing-google-font-api-google-font.html">Google Font API</a>, which makes it easy for website developers to include any one of an <a href="http://code.google.com/webfonts">ever-growing list of web fonts</a> on their pages. We’re already using the new API for the <a href="http://googledocs.blogspot.com/2010/05/new-themes-in-google-forms.html">latest themes in Google forms</a>.<br /><br />As of today, Google documents supports web fonts (using the Google Font API) and we’re excited to announce six new fonts.<br /><br /><b>Droid Serif and Droid Sans</b><br />Android fans will already be familiar with the Droid family of fonts. Droid Serif and Droid Sans both feature strong vertical lines and a neutral, yet friendly appearance. They’re designed specifically for reading on small screens.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3ptGkXoyUiDCPeXexF0T2uVSgn2S6hrZ4JQk4yVVJTBPwG6amamHRtJHbJGNwID6qjZyVDtAQek6Of0p8WhwFMzaEQS-xWdqZRNvNbt8JuY5OIMme-YN3PXXJRvm5gRMRMTxDPIOOFf8/s1600/font1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3ptGkXoyUiDCPeXexF0T2uVSgn2S6hrZ4JQk4yVVJTBPwG6amamHRtJHbJGNwID6qjZyVDtAQek6Of0p8WhwFMzaEQS-xWdqZRNvNbt8JuY5OIMme-YN3PXXJRvm5gRMRMTxDPIOOFf8/" width="500" /></a><br /><b>Calibri and Cambria</b><br />Every day we have many people import documents from Microsoft Word into Google Docs. Today we’re making import fidelity better by adding two of the most popular Microsoft Word fonts. Calibri is a beautiful sans serif font characterized by curves and soft edges. It’s designed to be high impact. Cambria is built with strong vertical <a href="http://en.wikipedia.org/wiki/Serif">serifs</a> and subtle horizontal ones. It’s very legible when printed at small sizes.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg09wycXVHe_CrKBLZbSgO1glwtGWQVRYCLtWi8q0eXlHAzVuNp9jqohuww-Rk0dbhRd2IiFBGju1_HMX-aG378M5OpkksTZuHZnrIFXKpm_QBQHDfdCxIae2rbpPSrQdES7gnnAbLkzb0/s1600/font2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg09wycXVHe_CrKBLZbSgO1glwtGWQVRYCLtWi8q0eXlHAzVuNp9jqohuww-Rk0dbhRd2IiFBGju1_HMX-aG378M5OpkksTZuHZnrIFXKpm_QBQHDfdCxIae2rbpPSrQdES7gnnAbLkzb0/" width="500" /></a><br /><b>Consolas and Corsiva</b><br />Consolas joins Courier New as the second <a href="http://en.wikipedia.org/wiki/Monospaced_font">monospaced</a> font in Google Docs. It’s a modern monospaced font with character proportions that are similar to normal text. Finally, Corsiva is our first italic font with embellished characters and an elegant style.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjyRKnDyohenP2LdPeIEmEmbTugC542NqU-m6Iyk1_FpDJOl_LwOkydprKN1SSBEeQLyROHaei8vaDmcgbkhSXfs-b_Sr5CmupFyn1n5y3yY6svPOQi-dVbmGLv5DHUscwg2KshQK_kGI/s1600/font3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjyRKnDyohenP2LdPeIEmEmbTugC542NqU-m6Iyk1_FpDJOl_LwOkydprKN1SSBEeQLyROHaei8vaDmcgbkhSXfs-b_Sr5CmupFyn1n5y3yY6svPOQi-dVbmGLv5DHUscwg2KshQK_kGI/" width="500" /></a><br />Right now our font support covers most Latin and Western European character sets. However, we’ll be adding web fonts for other languages (like Hebrew and Greek) soon. If you don’t see the new fonts in your documents, check that web fonts are <a href="http://docs.google.com/support/bin/answer.py?answer=189190">supported in your language</a> and that the document language is set correctly from the File -> Language menu.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVUFBStcvDM2LMg_I-IxfLKdxzoOcAzovmDMqUvFKMlr7zYKlmFztI5wfH5CFD839QavxqkbKsDFyC70KO_XQcq8GbvQPxmemuLnC6ZubpbbxAnJ80K5JmXpqOQqmCy79rWe9CknuwVU/s1600/Language+Setting.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVUFBStcvDM2LMg_I-IxfLKdxzoOcAzovmDMqUvFKMlr7zYKlmFztI5wfH5CFD839QavxqkbKsDFyC70KO_XQcq8GbvQPxmemuLnC6ZubpbbxAnJ80K5JmXpqOQqmCy79rWe9CknuwVU/+Setting.png" width="285" /></a><br />This is just the beginning of fonts in Google Docs. We added six new fonts today and we’re already testing our next batch. You’ll see many more new fonts over the next few months. And because Google Docs uses web fonts, you’ll never need to install a new font: when you load your document, the latest set of fonts will always be there, ready to use. <br /><br />Finally, adding web fonts is just one of the challenges that we have been working on. If you’re interested in learning more about the challenges of building a collaborative application, check out the <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs.html">first post of a three-part series on collaboration </a>posted earlier today.<br /><br /><span class="byline-author">Posted by: Jeremie Lenfant-Engelmann, Software Engineer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <i>Cross posted on the <a href="http://googleblog.blogspot.com/2010/09/more-fontastic-google-docs.html/">Official Google Blog</a><br /></i><br />Documents without font choices are like photographs without colors. Just as shades of color can add depth to a picture, smart font choices give your text another dimension.<br /><br />For a long time, the set of fonts that you’ve seen when you browsed the web has been quite limited. That’s because you could only use a font that’s already been installed on your computer. So if a website designer wanted all her visitors to see the same thing, she could only use fonts that are so ubiquitous that the chances are very high that every computer will have them. And there are only a handful of fonts that fit that bill.<br /><br />Thankfully, that situation is changing. All modern browsers now support the ability to download web fonts. A web font doesn’t need to be installed on your local computer—it can be read directly from a web server and used immediately on the webpage that you’re loading. In May, we launched the <a href="http://googlecode.blogspot.com/2010/05/introducing-google-font-api-google-font.html">Google Font API</a>, which makes it easy for website developers to include any one of an <a href="http://code.google.com/webfonts">ever-growing list of web fonts</a> on their pages. We’re already using the new API for the <a href="http://googledocs.blogspot.com/2010/05/new-themes-in-google-forms.html">latest themes in Google forms</a>.<br /><br />As of today, Google documents supports web fonts (using the Google Font API) and we’re excited to announce six new fonts.<br /><br /><b>Droid Serif and Droid Sans</b><br />Android fans will already be familiar with the Droid family of fonts. Droid Serif and Droid Sans both feature strong vertical lines and a neutral, yet friendly appearance. They’re designed specifically for reading on small screens.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3ptGkXoyUiDCPeXexF0T2uVSgn2S6hrZ4JQk4yVVJTBPwG6amamHRtJHbJGNwID6qjZyVDtAQek6Of0p8WhwFMzaEQS-xWdqZRNvNbt8JuY5OIMme-YN3PXXJRvm5gRMRMTxDPIOOFf8/s1600/font1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3ptGkXoyUiDCPeXexF0T2uVSgn2S6hrZ4JQk4yVVJTBPwG6amamHRtJHbJGNwID6qjZyVDtAQek6Of0p8WhwFMzaEQS-xWdqZRNvNbt8JuY5OIMme-YN3PXXJRvm5gRMRMTxDPIOOFf8/" width="500" /></a><br /><b>Calibri and Cambria</b><br />Every day we have many people import documents from Microsoft Word into Google Docs. Today we’re making import fidelity better by adding two of the most popular Microsoft Word fonts. Calibri is a beautiful sans serif font characterized by curves and soft edges. It’s designed to be high impact. Cambria is built with strong vertical <a href="http://en.wikipedia.org/wiki/Serif">serifs</a> and subtle horizontal ones. It’s very legible when printed at small sizes.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg09wycXVHe_CrKBLZbSgO1glwtGWQVRYCLtWi8q0eXlHAzVuNp9jqohuww-Rk0dbhRd2IiFBGju1_HMX-aG378M5OpkksTZuHZnrIFXKpm_QBQHDfdCxIae2rbpPSrQdES7gnnAbLkzb0/s1600/font2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg09wycXVHe_CrKBLZbSgO1glwtGWQVRYCLtWi8q0eXlHAzVuNp9jqohuww-Rk0dbhRd2IiFBGju1_HMX-aG378M5OpkksTZuHZnrIFXKpm_QBQHDfdCxIae2rbpPSrQdES7gnnAbLkzb0/" width="500" /></a><br /><b>Consolas and Corsiva</b><br />Consolas joins Courier New as the second <a href="http://en.wikipedia.org/wiki/Monospaced_font">monospaced</a> font in Google Docs. It’s a modern monospaced font with character proportions that are similar to normal text. Finally, Corsiva is our first italic font with embellished characters and an elegant style.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjyRKnDyohenP2LdPeIEmEmbTugC542NqU-m6Iyk1_FpDJOl_LwOkydprKN1SSBEeQLyROHaei8vaDmcgbkhSXfs-b_Sr5CmupFyn1n5y3yY6svPOQi-dVbmGLv5DHUscwg2KshQK_kGI/s1600/font3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjyRKnDyohenP2LdPeIEmEmbTugC542NqU-m6Iyk1_FpDJOl_LwOkydprKN1SSBEeQLyROHaei8vaDmcgbkhSXfs-b_Sr5CmupFyn1n5y3yY6svPOQi-dVbmGLv5DHUscwg2KshQK_kGI/" width="500" /></a><br />Right now our font support covers most Latin and Western European character sets. However, we’ll be adding web fonts for other languages (like Hebrew and Greek) soon. If you don’t see the new fonts in your documents, check that web fonts are <a href="http://docs.google.com/support/bin/answer.py?answer=189190">supported in your language</a> and that the document language is set correctly from the File -> Language menu.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVUFBStcvDM2LMg_I-IxfLKdxzoOcAzovmDMqUvFKMlr7zYKlmFztI5wfH5CFD839QavxqkbKsDFyC70KO_XQcq8GbvQPxmemuLnC6ZubpbbxAnJ80K5JmXpqOQqmCy79rWe9CknuwVU/s1600/Language+Setting.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHVUFBStcvDM2LMg_I-IxfLKdxzoOcAzovmDMqUvFKMlr7zYKlmFztI5wfH5CFD839QavxqkbKsDFyC70KO_XQcq8GbvQPxmemuLnC6ZubpbbxAnJ80K5JmXpqOQqmCy79rWe9CknuwVU/+Setting.png" width="285" /></a><br />This is just the beginning of fonts in Google Docs. We added six new fonts today and we’re already testing our next batch. You’ll see many more new fonts over the next few months. And because Google Docs uses web fonts, you’ll never need to install a new font: when you load your document, the latest set of fonts will always be there, ready to use. <br /><br />Finally, adding web fonts is just one of the challenges that we have been working on. If you’re interested in learning more about the challenges of building a collaborative application, check out the <a href="http://googledocs.blogspot.com/2010/09/whats-different-about-new-google-docs.html">first post of a three-part series on collaboration </a>posted earlier today.<br /><br /><span class="byline-author">Posted by: Jeremie Lenfant-Engelmann, Software Engineer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/a-more-fontastic-google-docs.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:A more fontastic Google Docs&url=https://drive.googleblog.com/2010/09/a-more-fontastic-google-docs.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/a-more-fontastic-google-docs.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='60' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/a-more-fontastic-google-docs.html' data-url='https://drive.googleblog.com/2010/09/a-more-fontastic-google-docs.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/a-more-fontastic-google-docs.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/documents' rel='tag'> documents </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='post' data-id='4405051726042696364' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html' itemprop='url' title='What’s different about the new Google Docs: Working together, even apart'> What’s different about the new Google Docs: Working together, even apart </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, September 21, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span style="font-style: italic;">Editor’s Note: In May, we <a href="http://googledocs.blogspot.com/2010/05/whats-different-about-new-google-docs.html">walked through</a> some technical details about what’s different in the new Google Docs. Beginning today, we’ll dive into the collaboration technology behind Google Docs in three parts, starting with a look at the challenges encountered when building a collaborative application. Tomorrow’s post will describe how Google Docs uses an algorithm called operational transformation to merge edits in real time. Finally, on Thursday, we’ll dive into the collaboration protocol for sending changes between the editors.<br /></span><br />The way people work is changing. Ten years ago, it was too hard to co-author a document, so things took longer, or people just put up with less collaboration. But as our communication tools have become better, it’s become more common to have a group of people writing a doc collaboratively.<br /><br />Collaboration is technically difficult because many people can be making changes to the same content at almost the same time. Since connection speeds aren’t instantaneous, when you make a change, you’re temporarily creating a local version of the document that is different from the versions other collaborators see. The core implementation challenge is to make sure that all the editing sessions eventually converge on the same, correct, version of the document.<br /><br />One approach taken by the <a href="http://googledocs.blogspot.com/2010/04/rebuilt-more-real-time-google-documents.html">old Google documents</a> and by many other collaborative word processors is to compare document versions. Suppose there are two editors: John and Luiz. In the old Google Docs, the server begins with one version of a document and receives an updated version from John. The server finds the differences between its version and John’s version and decides out how to merge those two versions as best it can. Then the server sends this merged version to Luiz. If Luiz has changes that have not yet been sent to the server, then he needs to compare the server version with his local version and merge the two versions together. Then Luiz sends this merged local version to the server and the process continues.<br /><br />But often, this approach doesn’t work well. Take the example below. John, Luiz and the server start with the text <span class="Apple-style-span" style="color: blue;">The quick brown fox</span>. John bolds the words <b><span class="Apple-style-span" style="color: blue;">brown fox</span></b>. As he’s doing this, Luiz highlights the word <span class="Apple-style-span" style="color: blue;">fox</span> and replaces it with the word <span class="Apple-style-span" style="color: blue;">dog</span>. Suppose John’s changes arrive at the server first, and then the server sends those changes to Luiz.<br /><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNeIgzctn5IoFambfZY3a7gYsi93L2kE9sNpYxoEh8J_d2I2442ERvpZsiofxlNOQi_0uChfK_rhZ3CpAMrPrtMCnsY0fPrIaSgjamO0tEeA8Rted9s_zRpj89thEYRPL5hVik0ND5ssM/s1600/collaboration1.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519247984786557314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNeIgzctn5IoFambfZY3a7gYsi93L2kE9sNpYxoEh8J_d2I2442ERvpZsiofxlNOQi_0uChfK_rhZ3CpAMrPrtMCnsY0fPrIaSgjamO0tEeA8Rted9s_zRpj89thEYRPL5hVik0ND5ssM/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br /><br />The correct way to merge John’s style change and Luiz’s text substitution is as <span class="Apple-style-span" style="color: blue;">The quick </span><b><span class="Apple-style-span" style="color: blue;">brown dog</span></b>. But Luiz doesn’t have enough information to know what the correct merge is. From his perspective, <span class="Apple-style-span" style="color: blue;">The quick </span><b><span class="Apple-style-span" style="color: blue;">brown fox</span></b><span class="Apple-style-span"><span class="Apple-style-span" style="color: blue;"> dog</span><span class="Apple-style-span">,</span> <span class="Apple-style-span" style="color: blue;">The quick <b>brown</b> dog</span><span class="Apple-style-span">,</span> </span><span class="Apple-style-span" style="color: blue;">The quick </span><b><span class="Apple-style-span" style="color: blue;">brown</span></b><span class="Apple-style-span" style="color: blue;"> dog </span><b><span class="Apple-style-span" style="color: blue;">fox</span></b><span class="Apple-style-span"> </span>are all perfectly valid ways of merging the two versions. And that’s the problem: if you just compare versions, you can’t make sure that changes are merged in the way that an editor would expect.<br /><br />You can avoid the merging problem by introducing more restrictions on the editors. For example, you could lock paragraphs so that only one editor was ever allowed to type in a single paragraph at a given time. But locking paragraphs isn’t a great solution: you’re sidestepping the technical challenges by hampering the collaborative editing experience. Plus, it’s always possible for two editors to begin editing a paragraph at the same time. In that case, one of the editors will find out that he didn’t actually acquire the paragraph lock and any changes that he made while he thought he had the lock will need to be merged (which has all of the above problems) or discarded.<br /><br />The new version of Google documents does things differently. In the new editor, a document is stored as a series of chronological changes. A change might be something like<span class="Apple-style-span"> </span><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText 'T' @10}</span>. That particular change was to insert the letter <span class="Apple-style-span" style="color: blue;">T</span> at the 10th position in the document. A fundamental difference between the new editor and the old one is that instead of computing the changes by comparing document versions, we now compute the <i>versions</i> by playing forward the history of changes.<br /><br />This approach creates a better collaboration experience, because the editors’ intentions are never ambiguous. Since we know the revision of each change, we can check what the editor saw when he made that change and we can figure out how to correctly merge that change with any changes that were made since then.<br /><br />That’s it for today. Tomorrow’s post will give an overview of the algorithm for merging changes — <span style="font-weight: bold;">operational transformation</span>. Even if we know <span style="font-style: italic;">how</span> to properly merge changes, we still need to make sure that each editor knows <span style="font-style: italic;">when</span> there are changes that need to be merged. This challenge is handled by the <span style="font-weight: bold;">collaboration protocol</span> which will be the subject of Thursday’s post. Together, these technologies create the character-by-character collaboration in Google Docs.<br /><br /><span class="byline-author">Posted by: John Day-Richter, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span style="font-style: italic;">Editor’s Note: In May, we <a href="http://googledocs.blogspot.com/2010/05/whats-different-about-new-google-docs.html">walked through</a> some technical details about what’s different in the new Google Docs. Beginning today, we’ll dive into the collaboration technology behind Google Docs in three parts, starting with a look at the challenges encountered when building a collaborative application. Tomorrow’s post will describe how Google Docs uses an algorithm called operational transformation to merge edits in real time. Finally, on Thursday, we’ll dive into the collaboration protocol for sending changes between the editors.<br /></span><br />The way people work is changing. Ten years ago, it was too hard to co-author a document, so things took longer, or people just put up with less collaboration. But as our communication tools have become better, it’s become more common to have a group of people writing a doc collaboratively.<br /><br />Collaboration is technically difficult because many people can be making changes to the same content at almost the same time. Since connection speeds aren’t instantaneous, when you make a change, you’re temporarily creating a local version of the document that is different from the versions other collaborators see. The core implementation challenge is to make sure that all the editing sessions eventually converge on the same, correct, version of the document.<br /><br />One approach taken by the <a href="http://googledocs.blogspot.com/2010/04/rebuilt-more-real-time-google-documents.html">old Google documents</a> and by many other collaborative word processors is to compare document versions. Suppose there are two editors: John and Luiz. In the old Google Docs, the server begins with one version of a document and receives an updated version from John. The server finds the differences between its version and John’s version and decides out how to merge those two versions as best it can. Then the server sends this merged version to Luiz. If Luiz has changes that have not yet been sent to the server, then he needs to compare the server version with his local version and merge the two versions together. Then Luiz sends this merged local version to the server and the process continues.<br /><br />But often, this approach doesn’t work well. Take the example below. John, Luiz and the server start with the text <span class="Apple-style-span" style="color: blue;">The quick brown fox</span>. John bolds the words <b><span class="Apple-style-span" style="color: blue;">brown fox</span></b>. As he’s doing this, Luiz highlights the word <span class="Apple-style-span" style="color: blue;">fox</span> and replaces it with the word <span class="Apple-style-span" style="color: blue;">dog</span>. Suppose John’s changes arrive at the server first, and then the server sends those changes to Luiz.<br /><div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNeIgzctn5IoFambfZY3a7gYsi93L2kE9sNpYxoEh8J_d2I2442ERvpZsiofxlNOQi_0uChfK_rhZ3CpAMrPrtMCnsY0fPrIaSgjamO0tEeA8Rted9s_zRpj89thEYRPL5hVik0ND5ssM/s1600/collaboration1.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5519247984786557314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNeIgzctn5IoFambfZY3a7gYsi93L2kE9sNpYxoEh8J_d2I2442ERvpZsiofxlNOQi_0uChfK_rhZ3CpAMrPrtMCnsY0fPrIaSgjamO0tEeA8Rted9s_zRpj89thEYRPL5hVik0ND5ssM/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br /><br />The correct way to merge John’s style change and Luiz’s text substitution is as <span class="Apple-style-span" style="color: blue;">The quick </span><b><span class="Apple-style-span" style="color: blue;">brown dog</span></b>. But Luiz doesn’t have enough information to know what the correct merge is. From his perspective, <span class="Apple-style-span" style="color: blue;">The quick </span><b><span class="Apple-style-span" style="color: blue;">brown fox</span></b><span class="Apple-style-span"><span class="Apple-style-span" style="color: blue;"> dog</span><span class="Apple-style-span">,</span> <span class="Apple-style-span" style="color: blue;">The quick <b>brown</b> dog</span><span class="Apple-style-span">,</span> </span><span class="Apple-style-span" style="color: blue;">The quick </span><b><span class="Apple-style-span" style="color: blue;">brown</span></b><span class="Apple-style-span" style="color: blue;"> dog </span><b><span class="Apple-style-span" style="color: blue;">fox</span></b><span class="Apple-style-span"> </span>are all perfectly valid ways of merging the two versions. And that’s the problem: if you just compare versions, you can’t make sure that changes are merged in the way that an editor would expect.<br /><br />You can avoid the merging problem by introducing more restrictions on the editors. For example, you could lock paragraphs so that only one editor was ever allowed to type in a single paragraph at a given time. But locking paragraphs isn’t a great solution: you’re sidestepping the technical challenges by hampering the collaborative editing experience. Plus, it’s always possible for two editors to begin editing a paragraph at the same time. In that case, one of the editors will find out that he didn’t actually acquire the paragraph lock and any changes that he made while he thought he had the lock will need to be merged (which has all of the above problems) or discarded.<br /><br />The new version of Google documents does things differently. In the new editor, a document is stored as a series of chronological changes. A change might be something like<span class="Apple-style-span"> </span><span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">{InsertText 'T' @10}</span>. That particular change was to insert the letter <span class="Apple-style-span" style="color: blue;">T</span> at the 10th position in the document. A fundamental difference between the new editor and the old one is that instead of computing the changes by comparing document versions, we now compute the <i>versions</i> by playing forward the history of changes.<br /><br />This approach creates a better collaboration experience, because the editors’ intentions are never ambiguous. Since we know the revision of each change, we can check what the editor saw when he made that change and we can figure out how to correctly merge that change with any changes that were made since then.<br /><br />That’s it for today. Tomorrow’s post will give an overview of the algorithm for merging changes — <span style="font-weight: bold;">operational transformation</span>. Even if we know <span style="font-style: italic;">how</span> to properly merge changes, we still need to make sure that each editor knows <span style="font-style: italic;">when</span> there are changes that need to be merged. This challenge is handled by the <span style="font-weight: bold;">collaboration protocol</span> which will be the subject of Thursday’s post. Together, these technologies create the character-by-character collaboration in Google Docs.<br /><br /><span class="byline-author">Posted by: John Day-Richter, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:What’s different about the new Google Docs: Working together, even apart&url=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='13' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html' data-url='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/documents' rel='tag'> documents </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='post' data-id='5995351825207194813' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/print-your-spreadsheets-and-save-ink.html' itemprop='url' title='Print your spreadsheets (and save ink) with more printing options'> Print your spreadsheets (and save ink) with more printing options </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, September 16, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> With the power of the cloud, you have access to and can share your files from basically any device without needing to print out anything. We understand that there are occasions when you still need to print, however, and that’s why today we’re happy to announce two new features for printing: selection printing and gridless printing. These two new options allow you to not only customize your printouts, but also save ink in the process. <br /><br />With selection printing you can print a highlighted section from your spreadsheet. The new option to not print the default gridlines is valuable if you’re trying to print a handout or trying to save ink. You can access these settings via <span style="font-weight: bold;">File</span> > <span style="font-weight: bold;">Print</span>.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcH3zl5tPcwm-Bbw8sJmzcihMgiGdMaLKOLoZcMPgn4Tjd6Cv3R7PtCS8Sc1DiMXrMU4CRxsWLZuB2Cwwsy01cip9ZcwWtGX4FV0XqNdpB8HjCisyDKLJ0anPolDbVcH8TIMoLyEZ9POU/s1600/printspreadsheet.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5516795934602823714" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcH3zl5tPcwm-Bbw8sJmzcihMgiGdMaLKOLoZcMPgn4Tjd6Cv3R7PtCS8Sc1DiMXrMU4CRxsWLZuB2Cwwsy01cip9ZcwWtGX4FV0XqNdpB8HjCisyDKLJ0anPolDbVcH8TIMoLyEZ9POU/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />These printing improvements are a direct result of feedback from many of you. If you have more ideas, let us know in the <a href="//www.google.com/support/forum/p/Google+Docs/label?lid=4c7c98a970adf580&hl=en">forums</a>.<br /><br /><span class="byline-author">Posted by: Julian Mcauley, Software Engineering Intern</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> With the power of the cloud, you have access to and can share your files from basically any device without needing to print out anything. We understand that there are occasions when you still need to print, however, and that’s why today we’re happy to announce two new features for printing: selection printing and gridless printing. These two new options allow you to not only customize your printouts, but also save ink in the process. <br /><br />With selection printing you can print a highlighted section from your spreadsheet. The new option to not print the default gridlines is valuable if you’re trying to print a handout or trying to save ink. You can access these settings via <span style="font-weight: bold;">File</span> > <span style="font-weight: bold;">Print</span>.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcH3zl5tPcwm-Bbw8sJmzcihMgiGdMaLKOLoZcMPgn4Tjd6Cv3R7PtCS8Sc1DiMXrMU4CRxsWLZuB2Cwwsy01cip9ZcwWtGX4FV0XqNdpB8HjCisyDKLJ0anPolDbVcH8TIMoLyEZ9POU/s1600/printspreadsheet.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5516795934602823714" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcH3zl5tPcwm-Bbw8sJmzcihMgiGdMaLKOLoZcMPgn4Tjd6Cv3R7PtCS8Sc1DiMXrMU4CRxsWLZuB2Cwwsy01cip9ZcwWtGX4FV0XqNdpB8HjCisyDKLJ0anPolDbVcH8TIMoLyEZ9POU/" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;" /></a><br />These printing improvements are a direct result of feedback from many of you. If you have more ideas, let us know in the <a href="//www.google.com/support/forum/p/Google+Docs/label?lid=4c7c98a970adf580&hl=en">forums</a>.<br /><br /><span class="byline-author">Posted by: Julian Mcauley, Software Engineering Intern</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/print-your-spreadsheets-and-save-ink.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:Print your spreadsheets (and save ink) with more printing options&url=https://drive.googleblog.com/2010/09/print-your-spreadsheets-and-save-ink.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/print-your-spreadsheets-and-save-ink.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='30' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/print-your-spreadsheets-and-save-ink.html' data-url='https://drive.googleblog.com/2010/09/print-your-spreadsheets-and-save-ink.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/print-your-spreadsheets-and-save-ink.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/spreadsheets' rel='tag'> spreadsheets </a> </span> </div> </div> </div> <div class='post' data-id='3715065871513909145' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/back-to-school-with-google-forms.html' itemprop='url' title='Back to School with Google forms'> Back to School with Google forms </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Friday, September 10, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span style="font-style:italic;"><span class="Apple-style-span" style="font-size: small;">Cross posted on the </span><a href="http://googleforstudents.blogspot.com/2010/09/student-tip-google-forms-for-student.html"><span class="Apple-style-span" style="font-size: small;">Google Student Blog</span></a><span class="Apple-style-span" style="font-size: small;"><br /></span><br /></span><span style="font-style:italic;">Guest Post: Emily is a senior at Emory University, majoring in Business and Biology. This summer, she worked as an intern on the Google Apps for Education team and here she shares her thoughts on using Google forms on campus.<br /></span><br />During the hectic first few weeks back at school – which can be the busiest time of year for a college student – one of the things that helps me get things done and stay organized is Google forms. I started using this functionality a lot during my summer internship to survey the intern community and other groups across the company. It’s an easy and efficient way to obtain and interpret information from many people and that’s why I’m excited to use it now that I’m back at school.<br /><br />Google forms allows me to quickly create a survey with various information gathering formats (multiple choice, free answer, check box, and more). Then I can simply send a link for the published form to the desired respondents and their answers automatically feed into a spreadsheet in Google Docs.<br /><br />For example, I recently used Google forms for a club I’m involved in called Goizueta International Network, an organization that helps incoming and outgoing exchange students make the most of their abroad experiences. Google forms allowed me to survey the international exchange students about what activities they would be interested in for the upcoming year.<br /><br />All the international students are from different countries and live all across campus, so creating a survey using Forms was a convenient and universally understandable way to get information. Plus I was able to spice up the appearance of the survey with a <a href="http://googledocs.blogspot.com/2010/05/new-themes-in-google-forms.html">new Google form theme</a>.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDr6QgBjY2Ex3G39QuTfOcLLfxxb68NDESUbOS4IFkoAGIL3p82k9TUHE85xBuQGMeEIzpdRI8t1dHssRsq0SfxkFPuWrIMVuk2JdvuaQmwpO-gdpI1nJusR0Z2QBOyAuTS-glMtf-7Xg/s1600/screenshot.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5514965310494520834" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDr6QgBjY2Ex3G39QuTfOcLLfxxb68NDESUbOS4IFkoAGIL3p82k9TUHE85xBuQGMeEIzpdRI8t1dHssRsq0SfxkFPuWrIMVuk2JdvuaQmwpO-gdpI1nJusR0Z2QBOyAuTS-glMtf-7Xg/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a><br />After collecting all of the responses, I could easily view the results of my data. All I had to do was go to the “Form” tab in the spreadsheet housing all of the survey information and select “Show summary of responses.” This produced the data in a simple, clear graphical format making the data easy to use.<br /><br />Check out the responses to the question “I am interested in the Goizueta International Network organizing the following...”<div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinp9SnoMCDDMFG6DCfRH-0lbXRMiqSXRZ0oT3N6hPqr5fpVWQ7CLVji5gGkCS5ZqXrnVMjZDDzc_NkjTJ0aItCSj_HflqqfeCGphHFj_0NPNKZdJS2MCdqYEL6JyT8p1vuFNhSjQAJcDc/s1600/graph.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5514965298443214658" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinp9SnoMCDDMFG6DCfRH-0lbXRMiqSXRZ0oT3N6hPqr5fpVWQ7CLVji5gGkCS5ZqXrnVMjZDDzc_NkjTJ0aItCSj_HflqqfeCGphHFj_0NPNKZdJS2MCdqYEL6JyT8p1vuFNhSjQAJcDc/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 345px; height: 300px;" /></a><br />We’ve decided to focus on the ideas that had the most support. We know they will benefit and excite both local and foreign students because they all participated in the decision process.<br /><br />Google forms can be useful in any area of a college student’s life. It can classify and coordinate information for classes, clubs, athletic teams, fraternities or sororities, friends, family, or any group or organization. As a <a href="//www.google.com/jobs/students/us/ambassador/">Google Student Ambassador</a> I plan to educate more people on my campus about how Google forms (along with the rest of the Docs and Apps suite) can make all their activities run more quickly and easily.<br /><br />Without putting in too much effort, we got a solid response rate and now have some great ideas for next year.<br /><br /><span class="byline-author">Posted by: Emily Rubin, Emory University</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span style="font-style:italic;"><span class="Apple-style-span" style="font-size: small;">Cross posted on the </span><a href="http://googleforstudents.blogspot.com/2010/09/student-tip-google-forms-for-student.html"><span class="Apple-style-span" style="font-size: small;">Google Student Blog</span></a><span class="Apple-style-span" style="font-size: small;"><br /></span><br /></span><span style="font-style:italic;">Guest Post: Emily is a senior at Emory University, majoring in Business and Biology. This summer, she worked as an intern on the Google Apps for Education team and here she shares her thoughts on using Google forms on campus.<br /></span><br />During the hectic first few weeks back at school – which can be the busiest time of year for a college student – one of the things that helps me get things done and stay organized is Google forms. I started using this functionality a lot during my summer internship to survey the intern community and other groups across the company. It’s an easy and efficient way to obtain and interpret information from many people and that’s why I’m excited to use it now that I’m back at school.<br /><br />Google forms allows me to quickly create a survey with various information gathering formats (multiple choice, free answer, check box, and more). Then I can simply send a link for the published form to the desired respondents and their answers automatically feed into a spreadsheet in Google Docs.<br /><br />For example, I recently used Google forms for a club I’m involved in called Goizueta International Network, an organization that helps incoming and outgoing exchange students make the most of their abroad experiences. Google forms allowed me to survey the international exchange students about what activities they would be interested in for the upcoming year.<br /><br />All the international students are from different countries and live all across campus, so creating a survey using Forms was a convenient and universally understandable way to get information. Plus I was able to spice up the appearance of the survey with a <a href="http://googledocs.blogspot.com/2010/05/new-themes-in-google-forms.html">new Google form theme</a>.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDr6QgBjY2Ex3G39QuTfOcLLfxxb68NDESUbOS4IFkoAGIL3p82k9TUHE85xBuQGMeEIzpdRI8t1dHssRsq0SfxkFPuWrIMVuk2JdvuaQmwpO-gdpI1nJusR0Z2QBOyAuTS-glMtf-7Xg/s1600/screenshot.jpg"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5514965310494520834" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDr6QgBjY2Ex3G39QuTfOcLLfxxb68NDESUbOS4IFkoAGIL3p82k9TUHE85xBuQGMeEIzpdRI8t1dHssRsq0SfxkFPuWrIMVuk2JdvuaQmwpO-gdpI1nJusR0Z2QBOyAuTS-glMtf-7Xg/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a><br />After collecting all of the responses, I could easily view the results of my data. All I had to do was go to the “Form” tab in the spreadsheet housing all of the survey information and select “Show summary of responses.” This produced the data in a simple, clear graphical format making the data easy to use.<br /><br />Check out the responses to the question “I am interested in the Goizueta International Network organizing the following...”<div><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinp9SnoMCDDMFG6DCfRH-0lbXRMiqSXRZ0oT3N6hPqr5fpVWQ7CLVji5gGkCS5ZqXrnVMjZDDzc_NkjTJ0aItCSj_HflqqfeCGphHFj_0NPNKZdJS2MCdqYEL6JyT8p1vuFNhSjQAJcDc/s1600/graph.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5514965298443214658" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinp9SnoMCDDMFG6DCfRH-0lbXRMiqSXRZ0oT3N6hPqr5fpVWQ7CLVji5gGkCS5ZqXrnVMjZDDzc_NkjTJ0aItCSj_HflqqfeCGphHFj_0NPNKZdJS2MCdqYEL6JyT8p1vuFNhSjQAJcDc/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 345px; height: 300px;" /></a><br />We’ve decided to focus on the ideas that had the most support. We know they will benefit and excite both local and foreign students because they all participated in the decision process.<br /><br />Google forms can be useful in any area of a college student’s life. It can classify and coordinate information for classes, clubs, athletic teams, fraternities or sororities, friends, family, or any group or organization. As a <a href="//www.google.com/jobs/students/us/ambassador/">Google Student Ambassador</a> I plan to educate more people on my campus about how Google forms (along with the rest of the Docs and Apps suite) can make all their activities run more quickly and easily.<br /><br />Without putting in too much effort, we got a solid response rate and now have some great ideas for next year.<br /><br /><span class="byline-author">Posted by: Emily Rubin, Emory University</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/back-to-school-with-google-forms.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:Back to School with Google forms&url=https://drive.googleblog.com/2010/09/back-to-school-with-google-forms.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/back-to-school-with-google-forms.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='7' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/back-to-school-with-google-forms.html' data-url='https://drive.googleblog.com/2010/09/back-to-school-with-google-forms.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/back-to-school-with-google-forms.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='post' data-id='61761039378710071' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/learn-about-google-docs.html' itemprop='url' title='Learn about Google Docs'> Learn about Google Docs </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Wednesday, September 8, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Google Docs is more than just creating online documents, spreadsheets and presentations. With Google Docs, you can access your files from anywhere, share them with the people you choose, and work together in real time.<br /><br />To help those of you just getting started with Google Docs we have created a new series of videos. These videos give a high level overview and steps to get started. And since each video is focused on one feature, its easy to only learn about the ones that matter most to you:<br /><br /><a href="//www.youtube.com/watch?v=epYTQ4lHdnQ">Document list</a><br /><a href="//www.youtube.com/watch?v=YB5f1ZtG28k&feature=channel">Sharing</a><br /><a href="//www.youtube.com/watch?v=MNVAHoDcww4">Collaboration</a><br /><a href="//www.youtube.com/watch?v=sPymmJpTHJo&feature=channel">Documents</a><br /><a href="//www.youtube.com/watch?v=7bqLDGldllQ&feature=channel">Spreadsheets</a><br /><a href="//www.youtube.com/watch?v=x_vMdWzHSq8&feature=channel">Presentations</a><br /><a href="//www.youtube.com/watch?v=csoftt-PNy8&feature=channel">Forms</a><br /><a href="//www.youtube.com/watch?v=zApehuekC-M&feature=channel">Drawings</a><br /><br />In addition, we just launched our own YouTube channel at <a href="//www.youtube.com/docs">youtube.com/docs</a>. You can view all of the videos above in the custom video gadget at the top of the channel, which will help you keep track of which videos you've already watched.<br /><br /><a href="//www.youtube.com/docs"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5514586650183153650" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4K6xiUNrDYpWcoTVycmMZvmKIAU5WP2hcLYhQ8lxsjX8t2H3jUd0tSc4ZofY2UX7Rmt-XbkM-R8IfwbWifVulOtndJXBvCRVVz2e2argQmdNEI85MZ1KC8ws0MhdlcviVuZpY7xzWpCU/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a>If you’re just getting started, we hope these videos help you discover more about Google Docs. And if you’re a Google Docs expert, you might enjoy sharing some of these videos with a friend.<br /><br /><span class="byline-author">Posted by: Peter Harbison, Product Marketing Manager</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Google Docs is more than just creating online documents, spreadsheets and presentations. With Google Docs, you can access your files from anywhere, share them with the people you choose, and work together in real time.<br /><br />To help those of you just getting started with Google Docs we have created a new series of videos. These videos give a high level overview and steps to get started. And since each video is focused on one feature, its easy to only learn about the ones that matter most to you:<br /><br /><a href="//www.youtube.com/watch?v=epYTQ4lHdnQ">Document list</a><br /><a href="//www.youtube.com/watch?v=YB5f1ZtG28k&feature=channel">Sharing</a><br /><a href="//www.youtube.com/watch?v=MNVAHoDcww4">Collaboration</a><br /><a href="//www.youtube.com/watch?v=sPymmJpTHJo&feature=channel">Documents</a><br /><a href="//www.youtube.com/watch?v=7bqLDGldllQ&feature=channel">Spreadsheets</a><br /><a href="//www.youtube.com/watch?v=x_vMdWzHSq8&feature=channel">Presentations</a><br /><a href="//www.youtube.com/watch?v=csoftt-PNy8&feature=channel">Forms</a><br /><a href="//www.youtube.com/watch?v=zApehuekC-M&feature=channel">Drawings</a><br /><br />In addition, we just launched our own YouTube channel at <a href="//www.youtube.com/docs">youtube.com/docs</a>. You can view all of the videos above in the custom video gadget at the top of the channel, which will help you keep track of which videos you've already watched.<br /><br /><a href="//www.youtube.com/docs"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5514586650183153650" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4K6xiUNrDYpWcoTVycmMZvmKIAU5WP2hcLYhQ8lxsjX8t2H3jUd0tSc4ZofY2UX7Rmt-XbkM-R8IfwbWifVulOtndJXBvCRVVz2e2argQmdNEI85MZ1KC8ws0MhdlcviVuZpY7xzWpCU/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a>If you’re just getting started, we hope these videos help you discover more about Google Docs. And if you’re a Google Docs expert, you might enjoy sharing some of these videos with a friend.<br /><br /><span class="byline-author">Posted by: Peter Harbison, Product Marketing Manager</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/learn-about-google-docs.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:Learn about Google Docs&url=https://drive.googleblog.com/2010/09/learn-about-google-docs.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/learn-about-google-docs.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='2' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/learn-about-google-docs.html' data-url='https://drive.googleblog.com/2010/09/learn-about-google-docs.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/learn-about-google-docs.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='post' data-id='7655179704189828878' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/easier-site-organization-with-drag-and.html' itemprop='url' title='Easier site organization with drag and drop'> Easier site organization with drag and drop </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Tuesday, September 7, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Page organization is an important part of using Google Sites, especially when you want to make a lot of changes to your Site’s structure. To make it easier and save you time, we just enabled drag and drop functionality in the <span style="font-weight:bold;">Pages</span> area of site management. Site owners and collaborators can try it out on via <span style="font-weight:bold;">Manage site</span> > <span style="font-weight:bold;">Pages</span> in the tree view.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGO2Wr9sbbXyDxuWDkr5SYti9z6eVCsb0BAQnxPoxmxbm8pr55jv_nLQbLSjh5Cfft0bZ5XxKARR4KCJX36Ky2ShPNuCTNgnhreBavaSLO1TLK_QC7Qi0o4Du7PuzoezJbpUZ3LOcsfo/s1600/sitesdragdrop.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5514208541967428034" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGO2Wr9sbbXyDxuWDkr5SYti9z6eVCsb0BAQnxPoxmxbm8pr55jv_nLQbLSjh5Cfft0bZ5XxKARR4KCJX36Ky2ShPNuCTNgnhreBavaSLO1TLK_QC7Qi0o4Du7PuzoezJbpUZ3LOcsfo/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a>We hope you like this little time-saver.<br /><br /><span class="byline-author">Posted by: Santos Cordon, Software Engineer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Page organization is an important part of using Google Sites, especially when you want to make a lot of changes to your Site’s structure. To make it easier and save you time, we just enabled drag and drop functionality in the <span style="font-weight:bold;">Pages</span> area of site management. Site owners and collaborators can try it out on via <span style="font-weight:bold;">Manage site</span> > <span style="font-weight:bold;">Pages</span> in the tree view.<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGO2Wr9sbbXyDxuWDkr5SYti9z6eVCsb0BAQnxPoxmxbm8pr55jv_nLQbLSjh5Cfft0bZ5XxKARR4KCJX36Ky2ShPNuCTNgnhreBavaSLO1TLK_QC7Qi0o4Du7PuzoezJbpUZ3LOcsfo/s1600/sitesdragdrop.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5514208541967428034" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlGO2Wr9sbbXyDxuWDkr5SYti9z6eVCsb0BAQnxPoxmxbm8pr55jv_nLQbLSjh5Cfft0bZ5XxKARR4KCJX36Ky2ShPNuCTNgnhreBavaSLO1TLK_QC7Qi0o4Du7PuzoezJbpUZ3LOcsfo/" style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 500px;" /></a>We hope you like this little time-saver.<br /><br /><span class="byline-author">Posted by: Santos Cordon, Software Engineer</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/easier-site-organization-with-drag-and.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:Easier site organization with drag and drop&url=https://drive.googleblog.com/2010/09/easier-site-organization-with-drag-and.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/easier-site-organization-with-drag-and.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='16' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/easier-site-organization-with-drag-and.html' data-url='https://drive.googleblog.com/2010/09/easier-site-organization-with-drag-and.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/easier-site-organization-with-drag-and.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Sites' rel='tag'> Google Sites </a> </span> </div> </div> </div> <div class='post' data-id='8873844318718258715' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/trimming-our-privacy-policies.html' itemprop='url' title='Trimming our privacy policies'> Trimming our privacy policies </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Friday, September 3, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span style="font-style: italic;">Cross posted on the <a href="http://gmailblog.blogspot.com/">Gmail Blog</a> and the <a href="http://googleblog.blogspot.com/">Official Google Blog</a><br /></span><br />Long, complicated and lawyerly—that's what most people think about privacy policies, and for good reason. Even taking into account that they’re legal documents, most privacy policies are still too hard to understand.<br /><br />So we’re simplifying and updating Google’s privacy policies. To be clear, we aren’t changing any of our privacy practices; we want to make our policies more transparent and understandable. As a first step, we’re making two types of improvements:<br /><ol><li>Most of our products and services are covered by our main <a href="//www.google.com/intl/en/privacypolicy.html">Google Privacy Policy</a>. Some, however, also have their own supplementary individual policies. Since there is a lot of repetition, we are deleting 12 of these product-specific policies. These changes are also in line with the way information is used between certain products—for example, since contacts are shared between services like Gmail, Talk, Calendar and Docs, it makes sense for those services to be governed by one privacy policy as well. </li><li>We’re also simplifying our main Google Privacy Policy to make it more user-friendly by cutting down the parts that are redundant and rewriting the more legalistic bits so people can understand them more easily. For example, we’re deleting a sentence that reads, “The affiliated sites through which our services are offered may have different privacy practices and we encourage you to read their privacy policies,” since it seems obvious that sites not owned by Google might have their own privacy policies.</li></ol>In addition, we’re adding:<br /><ul><li>More content to some of our product Help Centers so people will be able to find information about protecting their privacy more easily; and</li><li>A <a href="//www.google.com/intl/en/privacy_tools.html">new privacy tools page</a> to the <a href="//www.google.com/privacy">Google Privacy Center</a>. This will mean that our most popular privacy tools are now all in one place.</li></ul>These privacy policy updates will take effect in a month, on October 3. You can see the <a href="//www.google.com/intl/en/privacypolicy_2010.html">new main Google Privacy Policy here</a>, and if you have questions <a href="//www.google.com/intl/en/privacy_faq_2010.html">this FAQ</a> should be helpful.<br /><br />Our updated privacy policies still might not be your top choice for beach reading (I am, after all, still a lawyer), but hopefully you’ll find the improvements to be a step in the right direction.<br /><br /><span class="byline-author">Posted by Mike Yang, Associate General Counsel</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span style="font-style: italic;">Cross posted on the <a href="http://gmailblog.blogspot.com/">Gmail Blog</a> and the <a href="http://googleblog.blogspot.com/">Official Google Blog</a><br /></span><br />Long, complicated and lawyerly—that's what most people think about privacy policies, and for good reason. Even taking into account that they’re legal documents, most privacy policies are still too hard to understand.<br /><br />So we’re simplifying and updating Google’s privacy policies. To be clear, we aren’t changing any of our privacy practices; we want to make our policies more transparent and understandable. As a first step, we’re making two types of improvements:<br /><ol><li>Most of our products and services are covered by our main <a href="//www.google.com/intl/en/privacypolicy.html">Google Privacy Policy</a>. Some, however, also have their own supplementary individual policies. Since there is a lot of repetition, we are deleting 12 of these product-specific policies. These changes are also in line with the way information is used between certain products—for example, since contacts are shared between services like Gmail, Talk, Calendar and Docs, it makes sense for those services to be governed by one privacy policy as well. </li><li>We’re also simplifying our main Google Privacy Policy to make it more user-friendly by cutting down the parts that are redundant and rewriting the more legalistic bits so people can understand them more easily. For example, we’re deleting a sentence that reads, “The affiliated sites through which our services are offered may have different privacy practices and we encourage you to read their privacy policies,” since it seems obvious that sites not owned by Google might have their own privacy policies.</li></ol>In addition, we’re adding:<br /><ul><li>More content to some of our product Help Centers so people will be able to find information about protecting their privacy more easily; and</li><li>A <a href="//www.google.com/intl/en/privacy_tools.html">new privacy tools page</a> to the <a href="//www.google.com/privacy">Google Privacy Center</a>. This will mean that our most popular privacy tools are now all in one place.</li></ul>These privacy policy updates will take effect in a month, on October 3. You can see the <a href="//www.google.com/intl/en/privacypolicy_2010.html">new main Google Privacy Policy here</a>, and if you have questions <a href="//www.google.com/intl/en/privacy_faq_2010.html">this FAQ</a> should be helpful.<br /><br />Our updated privacy policies still might not be your top choice for beach reading (I am, after all, still a lawyer), but hopefully you’ll find the improvements to be a step in the right direction.<br /><br /><span class="byline-author">Posted by Mike Yang, Associate General Counsel</span> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/trimming-our-privacy-policies.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:Trimming our privacy policies&url=https://drive.googleblog.com/2010/09/trimming-our-privacy-policies.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/trimming-our-privacy-policies.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='2' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/trimming-our-privacy-policies.html' data-url='https://drive.googleblog.com/2010/09/trimming-our-privacy-policies.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/trimming-our-privacy-policies.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='post' data-id='326678134942160' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://drive.googleblog.com/2010/09/drawing-out-ideas-in-documents.html' itemprop='url' title='Drawing out ideas in documents'> Drawing out ideas in documents </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> Thursday, September 2, 2010 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> Have you recently toiled over instructions to assemble furniture? Now imagine the agony if you had no illustrations to fall back on. What’s the best way to teach kids about nutrition without a food pyramid?<br /><br />Sometimes when working with text you realize that words can only articulate so much. And that’s why we have drawings in Google documents. Drawings can be useful for things like diagramming processes in a flowchart or clearly articulating the relationship between a groups of ideas.<br /><div><br /><a href="//1.bp.blogspot.com/_Dxpdr9VymoY/TH-61h_1oPI/AAAAAAAAAEQ/Ll5z2fDXQ-I/s1600/drawing1.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329897746735346" src="//1.bp.blogspot.com/_Dxpdr9VymoY/TH-61h_1oPI/AAAAAAAAAEQ/Ll5z2fDXQ-I/drawing1.png" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;"></a><br />To get started, select the <span style="font-weight: bold;">Drawing</span> option from the <span style="font-weight: bold;">Insert</span> menu:</div><div><br /><a href="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-619v-maI/AAAAAAAAAEY/Gs-OJtbO6kI/s1600/drawing2.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329905196407202" src="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-619v-maI/AAAAAAAAAEY/Gs-OJtbO6kI/drawing2.png" style="cursor: hand; cursor: pointer; display: block; height: 186px; margin: 0px auto 10px; text-align: center; width: 264px;"></a><br />Now, you’ll see the drawing editor.<br /><br /><a href="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-62d3LD8I/AAAAAAAAAEg/sVRIGi3HV9w/s1600/drawing3.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329913816518594" src="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-62d3LD8I/AAAAAAAAAEg/sVRIGi3HV9w/drawing3.png" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;"></a><br />When creating a drawing for a document, the shapes menu can be particularly helpful. From thought bubbles to arrows to a smiley-face, this menu can help you whip up something playful or professional in no time.<br /><br /><a href="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-62tR3hNI/AAAAAAAAAEo/AqN-yFZBhRk/s1600/drawing4.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329917955015890" src="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-62tR3hNI/AAAAAAAAAEo/AqN-yFZBhRk/drawing4.png" style="cursor: hand; cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 250px;"></a><br />As with <a href="http://googledocs.blogspot.com/2010/07/tips-tricks-using-images-in-google.html">images</a>, you can resize a drawing and even mark it as <span style="font-weight: bold;">inline</span> or <span style="font-weight: bold;">fixed</span> within your document.<br /><a href="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-6256BnCI/AAAAAAAAAEw/k2bl1dpvANI/s1600/drawing5.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329921344674850" src="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-6256BnCI/AAAAAAAAAEw/k2bl1dpvANI/drawing5.png" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;"></a>You can also copy an existing Google drawing into a document. To do that, first select the relevant shapes in your original drawing, and then copy them using the Web clipboard.</div><div><br /><a href="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-67tq-D2I/AAAAAAAAAFA/GB3-RYGS1Go/s1600/drawing6.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512330003959648098" src="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-67tq-D2I/AAAAAAAAAFA/GB3-RYGS1Go/drawing6.png" style="cursor: hand; cursor: pointer; display: block; height: 95px; margin: 0px auto 10px; text-align: center; width: 226px;"></a><br />In your document, open the Web clipboard and paste the drawing into your document.</div><div><br /><a href="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-67WGwuMI/AAAAAAAAAE4/9I2qwL-kD68/s1600/drawing7.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329997633763522" src="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-67WGwuMI/AAAAAAAAAE4/9I2qwL-kD68/drawing7.png" style="cursor: hand; cursor: pointer; display: block; height: 156px; margin: 0px auto 10px; text-align: center; width: 167px;"></a><br />Give it a test drive and let us know what you think in the comments.<br /><br /><span class="byline-author">Posted by: Henry Lau, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> Have you recently toiled over instructions to assemble furniture? Now imagine the agony if you had no illustrations to fall back on. What’s the best way to teach kids about nutrition without a food pyramid?<br /><br />Sometimes when working with text you realize that words can only articulate so much. And that’s why we have drawings in Google documents. Drawings can be useful for things like diagramming processes in a flowchart or clearly articulating the relationship between a groups of ideas.<br /><div><br /><a href="//1.bp.blogspot.com/_Dxpdr9VymoY/TH-61h_1oPI/AAAAAAAAAEQ/Ll5z2fDXQ-I/s1600/drawing1.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329897746735346" src="//1.bp.blogspot.com/_Dxpdr9VymoY/TH-61h_1oPI/AAAAAAAAAEQ/Ll5z2fDXQ-I/drawing1.png" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;"></a><br />To get started, select the <span style="font-weight: bold;">Drawing</span> option from the <span style="font-weight: bold;">Insert</span> menu:</div><div><br /><a href="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-619v-maI/AAAAAAAAAEY/Gs-OJtbO6kI/s1600/drawing2.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329905196407202" src="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-619v-maI/AAAAAAAAAEY/Gs-OJtbO6kI/drawing2.png" style="cursor: hand; cursor: pointer; display: block; height: 186px; margin: 0px auto 10px; text-align: center; width: 264px;"></a><br />Now, you’ll see the drawing editor.<br /><br /><a href="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-62d3LD8I/AAAAAAAAAEg/sVRIGi3HV9w/s1600/drawing3.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329913816518594" src="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-62d3LD8I/AAAAAAAAAEg/sVRIGi3HV9w/drawing3.png" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;"></a><br />When creating a drawing for a document, the shapes menu can be particularly helpful. From thought bubbles to arrows to a smiley-face, this menu can help you whip up something playful or professional in no time.<br /><br /><a href="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-62tR3hNI/AAAAAAAAAEo/AqN-yFZBhRk/s1600/drawing4.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329917955015890" src="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-62tR3hNI/AAAAAAAAAEo/AqN-yFZBhRk/drawing4.png" style="cursor: hand; cursor: pointer; display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 250px;"></a><br />As with <a href="http://googledocs.blogspot.com/2010/07/tips-tricks-using-images-in-google.html">images</a>, you can resize a drawing and even mark it as <span style="font-weight: bold;">inline</span> or <span style="font-weight: bold;">fixed</span> within your document.<br /><a href="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-6256BnCI/AAAAAAAAAEw/k2bl1dpvANI/s1600/drawing5.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329921344674850" src="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-6256BnCI/AAAAAAAAAEw/k2bl1dpvANI/drawing5.png" style="cursor: hand; cursor: pointer; display: block; margin: 0px auto 10px; text-align: center; width: 500px;"></a>You can also copy an existing Google drawing into a document. To do that, first select the relevant shapes in your original drawing, and then copy them using the Web clipboard.</div><div><br /><a href="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-67tq-D2I/AAAAAAAAAFA/GB3-RYGS1Go/s1600/drawing6.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512330003959648098" src="//2.bp.blogspot.com/_Dxpdr9VymoY/TH-67tq-D2I/AAAAAAAAAFA/GB3-RYGS1Go/drawing6.png" style="cursor: hand; cursor: pointer; display: block; height: 95px; margin: 0px auto 10px; text-align: center; width: 226px;"></a><br />In your document, open the Web clipboard and paste the drawing into your document.</div><div><br /><a href="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-67WGwuMI/AAAAAAAAAE4/9I2qwL-kD68/s1600/drawing7.png"><img alt="" border="0" id="BLOGGER_PHOTO_ID_5512329997633763522" src="//3.bp.blogspot.com/_Dxpdr9VymoY/TH-67WGwuMI/AAAAAAAAAE4/9I2qwL-kD68/drawing7.png" style="cursor: hand; cursor: pointer; display: block; height: 156px; margin: 0px auto 10px; text-align: center; width: 167px;"></a><br />Give it a test drive and let us know what you think in the comments.<br /><br /><span class="byline-author">Posted by: Henry Lau, Software Engineer</span></div> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </noscript> </div> </div> <div class='share'> <span class='gplus-share social-wrapper' data-href='https://plus.google.com/share?url=https://drive.googleblog.com/2010/09/drawing-out-ideas-in-documents.html'> <img alt='Share on Google+' height='24' src='https://www.gstatic.com/images/branding/google_plus/2x/ic_w_post_gplus_black_24dp.png' width='24'/> </span> <span class='twitter-custom social-wrapper' data-href='http://twitter.com/share?text=Google Drive Blog:Drawing out ideas in documents&url=https://drive.googleblog.com/2010/09/drawing-out-ideas-in-documents.html&via=googledrive'> <img alt='Share on Twitter' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_twitter_black_24dp.png' width='24'/> </span> <span class='fb-custom social-wrapper' data-href='https://www.facebook.com/sharer.php?u=https://drive.googleblog.com/2010/09/drawing-out-ideas-in-documents.html'> <img alt='Share on Facebook' height='24' src='https://www.gstatic.com/images/icons/material/system/2x/post_facebook_black_24dp.png' width='24'/> </span> </div> <div class='comment-container'> <i class='comment-img material-icons'>  </i> <span class='cmt_count_iframe_holder' data-count='10' data-onclick='' data-post-url='https://drive.googleblog.com/2010/09/drawing-out-ideas-in-documents.html' data-url='https://drive.googleblog.com/2010/09/drawing-out-ideas-in-documents.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://drive.googleblog.com/2010/09/drawing-out-ideas-in-documents.html' data-viewtype='FILTERED_POSTMOD'></div> <a href='https://plus.google.com/112374322230920073195' rel='author' style='display:none;'> Google </a> <div class='label-footer'> <span class='labels-caption'> Labels: </span> <span class='labels'> <a class='label' href='https://drive.googleblog.com/search/label/documents' rel='tag'> documents </a> , <a class='label' href='https://drive.googleblog.com/search/label/drawings' rel='tag'> drawings </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog' rel='tag'> Google Apps Blog </a> , <a class='label' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog' rel='tag'> Google Drive Blog </a> </span> </div> </div> </div> <div class='blog-pager' id='blog-pager'> <a class='home-link' href='https://drive.googleblog.com/'> <i class='material-icons'>  </i> </a> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' href='https://drive.googleblog.com/search?updated-max=2010-11-02T09:41:00-07:00&max-results=7&reverse-paginate=true' id='Blog1_blog-pager-newer-link' title='Newer Posts'> <i class='material-icons'>  </i> </a> </span> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='https://drive.googleblog.com/search?updated-max=2010-09-02T09:07:00-07:00&max-results=7' id='Blog1_blog-pager-older-link' title='Older Posts'> <i class='material-icons'>  </i> </a> </span> </div> <div class='clear'></div> </div></div> </div> </div> <div class='col-right'> <div class='section' id='sidebar-top'><div class='widget HTML' data-version='1' id='HTML9'> <div class='widget-content'> <div class='searchBox'> <input type='text' title='Search This Blog' placeholder='Search blog ...' /> </div> </div> <div class='clear'></div> </div></div> <div id='aside'> <div class='section' id='sidebar'><div class='widget Label' data-version='1' id='Label1'> <div class='tab'> <img class='sidebar-icon' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYpJREFUeNrs2aFuwzAQBmAvKRkMKRjZA4QMDJaWFgyMjuzFRg37DIUlA3uFkoGQSaWzJU+tpri5O9+l/zSfdFJlpe59yTmyVedq1PjfcZMZ70NuQnaF8w8htyE/rABtpviXkLcK88c5HhLkMBfgVan43zfFBNGMjHVGT/s55KP2pAvidbGHd+nzKt1RKSLG3rKF1iPFv6UWiPke8i7kEqGdGsI1O+LYVdqJAjgirwkKYD0ytkJBUNbAMvX8V3q9PhUsYvU1sWD8SO/sQvx2ahxOiNoJCSBCoAHYCEQAC4EKICOQASQEOmAS8RcAFxFN5hiIiugpgC3wk9hQAHH/70EBHXUN7IER5EWMiBgo2+nzOKQv9SCAeEM/OQAkhE/ncccFICB87qzQMia5FsJfOui0zMnmRvipU1ormHQuxGTxUsAcCFLxJQBLBLn4UoAFglW8BkATwS5eC6CBEBWvCShBiIvXBkgQRcVbADiI4uKtABSESvGWgB9EzHt3+tNwyO0qa9SoIYtvAQYAqDJhaWWeMecAAAAASUVORK5CYII='/> <h2> Labels </h2> <i class='material-icons arrow'>  </i> </div> <div class='widget-content list-label-widget-content'> <ul> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/%23SafeOnline'> #SafeOnline </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/accessibility'> accessibility </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/add-ons'> add-ons </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Android'> Android </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/app%20scripts'> app scripts </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/apps'> apps </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/attachments'> attachments </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/avery'> avery </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/back%20to%20school'> back to school </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/blind'> blind </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/braille'> braille </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/charts'> charts </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/chat'> chat </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Chrome'> Chrome </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Chrome%20extensions'> Chrome extensions </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/chrome%20web%20apps'> chrome web apps </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Cloud%20Connect'> Cloud Connect </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/collaboration'> collaboration </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/comments'> comments </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/community'> community </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/discussions'> discussions </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/docs'> docs </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/docs%20editors'> docs editors </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/document%20list'> document list </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/documents'> documents </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/documents%20list'> documents list </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/drawings'> drawings </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Drive'> Drive </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/drivebacktoschool'> drivebacktoschool </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/easybib'> easybib </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/education'> education </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/enterprise'> enterprise </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Faces%20of%20Docs'> Faces of Docs </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/folders'> folders </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/forms'> forms </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/gmail'> gmail </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/gone%20google'> gone google </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Google%20Apps%20Blog'> Google Apps Blog </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Google%20Apps%20Script'> Google Apps Script </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Google%20Cloud%20Connect'> Google Cloud Connect </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/google%20docs'> google docs </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Google%20Docs%20Viewer'> Google Docs Viewer </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/google%20documents'> google documents </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/google%20drive'> google drive </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Google%20Drive%20Blog'> Google Drive Blog </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Google%20Pack'> Google Pack </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Google%20Sites'> Google Sites </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Google%2B'> Google+ </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/googlenew'> googlenew </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Guest%20Post'> Guest Post </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/hangout%20on%20air'> hangout on air </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/help'> help </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/holiday'> holiday </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/images'> images </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/iOS'> iOS </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Keep'> Keep </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/letterfeed'> letterfeed </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/low-vision'> low-vision </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/mailchimp'> mailchimp </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/mobile'> mobile </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/nanowrimo'> nanowrimo </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/OCR'> OCR </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/office%20compatibility%20mode'> office compatibility mode </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/offline'> offline </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/paperless'> paperless </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/pdfs'> pdfs </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/photo'> photo </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/photos'> photos </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/presentations'> presentations </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/product%20ideas'> product ideas </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/profiles'> profiles </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/quickoffice'> quickoffice </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Reddit'> Reddit </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/research'> research </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/save%20to%20drive'> save to drive </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/screen%20reader'> screen reader </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/scripts'> scripts </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/security'> security </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/sharing'> sharing </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/sheet'> sheet </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/sheets'> sheets </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/shortcut'> shortcut </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/slides'> slides </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/spell%20check'> spell check </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/spreadsheets'> spreadsheets </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/stock%20photos'> stock photos </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/storage'> storage </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/students'> students </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/suggested%20edits'> suggested edits </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/tables'> tables </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/teachers'> teachers </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/team'> team </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/templates'> templates </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/videos'> videos </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/Viewer'> Viewer </a> </li> <li> <a dir='ltr' href='https://drive.googleblog.com/search/label/work'> work </a> </li> </ul> <div class='clear'></div> </div> </div><div class='widget BlogArchive' data-version='1' id='BlogArchive1'> <div class='tab'> <i class='material-icons icon'>  </i> <h2> Archive </h2> <i class='material-icons arrow'>  </i> </div> <div class='widget-content'> <div id='ArchiveList'> <div id='BlogArchive1_ArchiveList'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2016/'> 2016 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2016/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2016/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2016/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2016/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2016/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2015/'> 2015 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2015/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2015/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2015/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2015/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2015/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2015/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2015/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2014/'> 2014 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2014/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2013/'> 2013 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2013/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2012/'> 2012 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2012/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2011/'> 2011 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2011/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy toggle-open'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2010/'> 2010 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2010/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2009/'> 2009 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2009/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2008/'> 2008 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2008/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2007/'> 2007 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/09/'> Sep </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/08/'> Aug </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/07/'> Jul </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/06/'> Jun </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/05/'> May </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/04/'> Apr </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/03/'> Mar </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/02/'> Feb </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2007/01/'> Jan </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class='intervalToggle'> <span class='new-toggle' href='javascript:void(0)'> <i class='material-icons arrow'>  </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'>  </i>   </span> </a> <a class='post-count-link' href='https://drive.googleblog.com/2006/'> 2006 </a> </div> <div class='items'> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2006/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2006/11/'> Nov </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate collapsed'> <div class=''> <a class='post-count-link' href='https://drive.googleblog.com/2006/10/'> Oct </a> </div> <div class='items'> </div> </li> </ul> </div> </li> </ul> </div> </div> <div class='clear'></div> </div> </div><div class='widget HTML' data-version='1' id='HTML6'> <div class='widget-content'> <a href="http://googledrive.blogspot.com/atom.xml"> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAihJREFUeNrsWa9Pw0AU7viRMDFRBAkzJDMIBIhJJhCzk7NILIqMv4AEhdz+BCY3OYssAlGBoAJREpZwAlHEBO8lr8nSvNeVbu1dyX3JlzTrXfa+u/e9d7c5joWFhYVO1Fa8PwH2gK6m+BRwAvSlAdsrgr8E1jUuMH73GTAEzrkBWymTewZlihhLmgDXIAFuHgGVQOUF7OSYM1p6PgTuA1vAZlUEvAnPdapcMY0VICECekQ0XRfYrqoHsAGNgXfAoMomRiFDEhOZkkL3S88hMaB2LwXp0bj+ps2edpToZpjfoIDQtBeU+xjoDzP2G/gCPKZ5f8WsCAFJoJgOCcFdWSTeL9YQMSvTA1h9BkI5jaiXhLpSCL/8mVZY0UpyJ9ZdOkniu1dmJ96BpzQu9w6s28gcOq9j6pwLdR8/36NK5CQKwJSMrb2MhhSglBpt4UjsrdsnNu0B3J0HCozbCc4TjyY2srEgos/4RQljCzNxl4ireQD8FOq+T+W0mTB2g7njhlR+Sy2jsXFvU658U8YTbeaGpdIu7mWkEAq5ZtIjIhFZdtfX7QHckSvB2B6zC3VdAkZk0kAQwaXTk/CzTXK3wjIExCs6ZJpTnE4uY1KV+KzFzA3KTiFPENHJkOPcsfpLhwe4btoSuvUqAR+6TOxlCE6ZfKUsJLgsqGW8OpqAGx2X+sLxrwUog+JUeQRMDBIwyXOcnlPtPnL0/UsT/8LnOxYWFhZG4leAAQAAQHEaYuzHbAAAAABJRU5ErkJggg==" class="sidebar-icon" /> <h2>Feed</h2> </a> </div> <div class='clear'></div> </div><div class='widget HTML' data-version='1' id='HTML7'> <h2 class='title'> Visit our site </h2> <div class='widget-content'> <a href="//www.google.com/drive/about.html?utm_source=en-blog&utm_medium=link&utm_campaign=driveblog">Google Drive</a><br/> <a href="//www.google.com/docs/about?utm_source=en-blog&utm_medium=link&utm_campaign=driveblog">Google Docs, Sheets, Slides</a> </div> <div class='clear'></div> </div></div> <div class='section' id='sidebar-bottom'><div class='widget HTML' data-version='1' id='HTML5'> <div class='widget-content'> <div class="followgooglewrapper"> <a href="https://plus.google.com/+GoogleDrive" rel="publisher" style="text-decoration:none;display:inline-block;color:#333;text-align:center; font:13px/16px arial,sans-serif;white-space:nowrap;"> <span style="display:inline-block;font-weight:bold;vertical-align:top;margin-right:5px; margin-top:0px;">Google</span><span style="display:inline-block;vertical-align:top;margin-right:13px; margin-top:0px;">on</span> <img src="//ssl.gstatic.com/images/icons/gplus-16.png" alt="Google+" style="border:0;width:16px;height:16px;"/></a> </div> <div class="youtubewrapper"><a href="//www.youtube.com/google?add_user_id=tYNXje7xqyk07cNbpgqTiA&feature=creators_cornier-//s.ytimg.com/yt/img/creators_corner/Subscribe_to_my_videos/YT_Subscribe_130x36_red.png" style="font-size: 100%;"></a></div> <div class="share followgooglewrapper"> <button data-href="https://twitter.com/intent/follow?original_referer=http://googledrive.blogspot.in/&screen_name=googledrive" onclick='sharingPopup(this);' id='twitter-share'><span class="twitter-follow">Follow @googledrive</span></button> <script> function sharingPopup (button) { var url = button.getAttribute("data-href"); window.open( url,'popUpWindow','height=500,width=500,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes'); } </script> </div> </div> <div class='clear'></div> </div><div class='widget HTML' data-version='1' id='HTML1'> <div class='widget-content'> Give us feedback in our <a href="http://productforums.google.com/forum/#!forum/drive">Product Forum</a>. </div> <div class='clear'></div> </div></div> </div> </div> <div style='clear:both;'></div> </div> <!-- Footer --> <div class='footer-outer loading'> <div class='footer-inner'> <div class='footer-inner-2'> <div style='width:33%;float:left;'> <div class='section' id='footer-1'><div class='widget HTML' data-version='1' id='HTML2'> <h2 class='title'> Company-wide </h2> <div class='widget-content'> <ul> <li> <a href="//googlepublicpolicy.blogspot.com/" title="Public Policy">Public Policy Blog</a> </li> <li> <a href="//googleresearch.blogspot.com/" title="Research">Research Blog</a> </li> <li> <a href="//googleforstudents.blogspot.com/" title="Student">Student Blog</a> </li> </ul> </div> <div class='clear'></div> </div></div> </div> <div style='width:33%;float:left;'> <div class='section' id='footer-2'><div class='widget HTML' data-version='1' id='HTML3'> <h2 class='title'> Products </h2> <div class='widget-content'> <ul> <li> <a href="//officialandroid.blogspot.com/" title="Android">Official Android Blog</a> </li> <li> <a href="//chrome.blogspot.com/" title="Chrome">Chrome Blog</a> </li> <li> <a href="//google-latlong.blogspot.com/" title="Lat Long">Lat Long Blog</a> </li> </ul> </div> <div class='clear'></div> </div></div> </div> <div style='width:33%;float:left;'> <div class='section' id='footer-3'><div class='widget HTML' data-version='1' id='HTML4'> <h2 class='title'> Developers </h2> <div class='widget-content'> <ul> <li> <a href="//googleadsdeveloper.blogspot.com/" title="Ads Developer">Ads Developer Blog</a> </li> <li> <a href="//android-developers.blogspot.com/" title="Android">Android Developers Blog</a> </li> <li> <a href="//googledevelopers.blogspot.com/" title="Developers">Developers Blog</a> </li> </ul> </div> <div class='clear'></div> </div></div> </div> <div style='clear:both;'></div> </div> </div> </div> <div class='google-footer-outer loading'> <div id='google-footer'> <a href='//www.google.com/'> <img class='google-logo-dark' height='36' src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALgAAABICAYAAABFoT/eAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAACLVJREFUeNrsXd+L20YQ3vOprdLqiMXFXE2qB7dcwEcTSB7ykIc+9A/PQx/yEMq1TWhNuYIpJriNr7XpmZ5IxFEvmW2EKs3Ornb1w50PxIFP0kiz387OzM6uhGAwGAxGP3Ho+f7x7ri1O7LdccPqZjSNA4dEHsLfaHcEFedJom93x9Xu2OyOFTcBo6sED3fHZHeMEELrkAHJF0B8Rr+gDFsZ5n0luLTQ95AXs4W06D/tjpR50xtM4CjD0y48YGB4rnyZxNOzyA7zBHr+nLnDaJLg0mo/ALekCasg3Z4XbM0ZdTEgnDPeHY8bIne+Qz2GvwyGNwsuyT218KWvIIBMcwGpLiipcolecjMxfBDchNyS1EvxLiOSIecp31q6IJ/C3yrIrMqMm4jhg+AxkdwbIO3aUO4KjqqMjCT3uaazMBhWBJfuxH3CtRfiXf66DhSRZWbmlMnNaILgZxrXJQO/eO3wORZwvwm4JUxuhheCjzVBYAbW1ces45YDSoZrFNOEE835M8FT6oyeEnws8Fz3QnBxFKPHBMem4GU+m6fPGb0leCTwWcM5B36MPgeZI01gudyDdw3hPeXfo8L/rmCUWnuMMdqUL2WqWeRbhf+twfVsO7YagZGNC79fw7OthEVtkiJ4jJzTd3KPwf3CRqhhiTu23AP5sl0/0xiwISQXpNwLIJK87mHF+U8ddzzdmgKlGzlPYjyxGJQouIhNT4k9AqWEFkqfguIvagTWbcq3KW1WE3xS3m8NtA9WS451xofwjKT5kkDoK/b6mDk5FfXr1lWDL4BofZEv2/SRsK/EHGlGdBdu8QNRb8HMCFwt7Yy3DDI/QP7fx5z3VLhdlJEIs4rKNuXXJXdxZPdB7kfCzWqwCO4V1LHgLjInX3tQ1KzCR52Cz+vDj1dydeRuS74rcvs2Pi6fT5H8OaaUQPQPYcWwRSGXyhhscn5dpAnEFMkuEZetbfkTAnlSuH4DxisE+aMGeJAQ3lFl7C4LJE6QWCaCd583ORQ1jYAwjFctal7nOs2ZZvicwvlZx+RHGrcoAwKUVX8uwcc/9TT65INeDOr5shL9LDRB6QTeIy3zwfdh3WOi6axLCEhSjXU7F3h6LqggUtvyJxpynwu8tDkD98fXApOxRj8zoZ9MnGveYVIVZKaGrkBXCY65BCYNN9NkjpKOyQ81Q79JgdxS+Jn3SDTEXRI7SWzaiSTB32oI3nU3BvMfM0urhOVYgwKhuiAfc4tM07wXwm1ZRoQYSl2NUwiu01fEAHVcpixd745FvVz4dzUUc0o8rwoLy8ZSwU6CyFx1RP5II9+1bFPEFs9HWbNLiimDXE+vCm7u1CS47cofzD3aEhVY57mxRo5zlqdt+RFC1JUH2S7bcVXg4liTMakaBZZVxiTICRoivcn1sEUBlk24JmaC6kxUbYmWoqvyfck2xZGGnDFYa9MMzkYQ1ijkCX6qidybrgePiQ0QIQqoi6qRLeqQfIoRsEHaQJLBdHOnLGetSdm/IPcymJuS1PAnbQPH0MOw/39C1vL11DiLOqIsbDI8QcHvGiLnySi2qUXBicaqUSxN5LEB0g7Jt3ENXJLPJ5S1tnaZBoWbpRqrmjRE7qHmpSmNHdQcYrEUadoh+TbBnc9ri7iycI1kzPeNcLDIvbiqXpez9Tmdq6zGREPuzECBoxrPMiI2WtvyNwhJba2wy3JZ6ky5dD1lSvmZS3e4SPA1wcf1VTFHKX+cGwZzdUYcqpvUtvwrD/InDttVlyZeAKlNN5MKbAiurHhKIPlUuJvlTCCiDjSKSCsUmCFWbGLZwCESfK07JB8LvMYWVtw0D00JEHV8Mq2HkqPbE0oHLvvK2g0o8ETg+4cfwTlZDT9JDoWygu4uQQE/ivIvtcnfPkaCqhiupz7jWOAzqL/vjtcdkv9G4MVMt+EaylfuImiPAXEUjRF3pjjaHiPPZ6If9TGGAO4ZY0am6jOCb+DQ+ZCqLkIpOIPrdNfIjnFPY6nyFut7TS/fanrziOBOKMupKw94WaLMtuVnSFt9CPrWWdJE6PeltCX432DEBoh+5Dv8RRhdis8YAv9uyq4/JAwtlEApgBe9Cw9xDD3tdk4Jn0MDfiHwPHcRPxBePCMER3GuIx7kGlv9fkZ4V9lolx2Uv4X7hEj7qJ3LDoAMGbTRMRibu4L2xQ8bgt8AyU+Q+x7nYrvDnH4iuO5LxKsYwPVbkPMvKF9Zky9wXzRfVWizi62r9X5VHf55h+WHhDjGBZ4WRhyTr6z5SlCoLMxLSpBZFsQ9F80uQFbF/6aFWi+Ev51vzzsuX+msyzuQXXjUz8zEBy+zpq9yweXAoxJW4JbYrDS6gYDqGHxPl+TKeiBfxj9/EBIElPYeOA4y8/qRQfknjvSzgRgtq0Pw/M1eQeMdOSb2Bnrhr6Led+1vcp2x7oTFHMnedFW+Ivlty062BUt74oHgSj+vHepnhunn0JJAMtBZgDI/qmGtMujRv8DDpo47zBJ8UtPOuAR/7rKn8t9AJ0tBdmBAmJ/Fu71yxp4I3qh+DhyRqbi5Y1ShVPlSb8X7bRNcfgZFl+WRGYo7uecrWq1r8X5bhmzP5OdlDwsGRm1suSxkg5rYm7ConyGQ3Zl+DgSD8V/kPwrWBMG9YcBtyShBnTLdTiHgttw7qAW7cqh/ZnmPKr/6ignOaKsdyxbsToT5UkPsW00bJjijDXficcX/JsLs6w2BwGtherdckH3w/kNXRPVI0OqJQoHX42/66IMfMj/2huRjxIidgKV/W0JS+bsstDoTeAHcrI8E5zTh/sDkqxL5rZup55/3USlswfcHf4IrQplVDgW9XFlOqnwr6pVPMMEZTuC60EttvdzbLbaZ4PsFVa3nohhO+vW+yn/ZB2fUhpysmQrzBcTSai9EszuZMcEZ1lCFVrp9zGXhm69iLyY4oxFIa178lPe12I/P2DAYDAaDwWAwGAwGg8FgMBgMBoPBYDD2Cf8IMADDRGoQTe+E9AAAAABJRU5ErkJggg==' style='margin-top: -16px;' width='92'/> </a> <ul> <li> <a href='//www.google.com/'> Google </a> </li> <li> <a href='//www.google.com/policies/privacy/'> Privacy </a> </li> <li> <a href='//www.google.com/policies/terms/'> Terms </a> </li> </ul> </div> </div> <script type='text/javascript'> //<![CDATA[ // Social sharing popups. var postEl = document.getElementsByClassName('social-wrapper'); var postCount = postEl.length; for(i=0; i<postCount;i++){ postEl[i].addEventListener("click", function(event){ var postUrl = this.getAttribute("data-href"); window.open( postUrl,'popUpWindow','height=500,width=500,left=10,top=10,resizable=yes,scrollbars=yes,toolbar=yes,menubar=no,location=no,directories=no,status=yes'); });} //]]> </script> <script type='text/javascript'> //<![CDATA[ var BreakpointHandler = function() { this.initted = false; this.isHomePage = false; this.isMobile = false; }; BreakpointHandler.prototype.finalizeSummary = function(summaryHtml, lastNode) { // Use $.trim for IE8 compatibility summaryHtml = $.trim(summaryHtml).replace(/(<br>|\s)+$/,''); if (lastNode.nodeType == 3) { var lastChar = summaryHtml.slice(-1); if (!lastChar.match(/[.”"?]/)) { if (!lastChar.match(/[A-Za-z]/)) { summaryHtml = summaryHtml.slice(0, -1); } summaryHtml += ' ...'; } } else if (lastNode.nodeType == 1 && (lastNode.nodeName == 'I' || lastNode.nodeName == 'A')) { summaryHtml += ' ...'; } return summaryHtml; }; BreakpointHandler.prototype.generateSummaryFromContent = function(content, numWords) { var seenWords = 0; var summaryHtml = ''; for (var i=0; i < content.childNodes.length; i++) { var node = content.childNodes[i]; var nodeText; if (node.nodeType == 1) { if (node.hasAttribute('data-about-pullquote')) { continue; } nodeText = node.textContent; if (nodeText === undefined) { // innerText for IE8 nodeText = node.innerText; } if (node.nodeName == 'DIV' || node.nodeName == 'B') { // Don't end early if we haven't seen enough words. if (seenWords < 10) { continue; } if (i > 0) { summaryHtml = this.finalizeSummary(summaryHtml, content.childNodes[i-1]); } break; } summaryHtml += node.outerHTML; } else if (node.nodeType == 3) { nodeText = node.nodeValue; summaryHtml += nodeText + ' '; } var words = nodeText.match(/\S+\s*/g); if (!words) { continue; } var remain = numWords - seenWords; if (words.length >= remain) { summaryHtml = this.finalizeSummary(summaryHtml, node); break; } seenWords += words.length; } return summaryHtml; }; BreakpointHandler.prototype.detect = function() { var match, pl = /\+/g, search = /([^&=]+)=?([^&]*)/g, decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }, query = window.location.search.substring(1); var urlParams = {}; while (match = search.exec(query)) urlParams[decode(match[1])] = decode(match[2]); this.isListPage = $('html').hasClass('list-page'); this.isMobile = urlParams['m'] === '1'; this.isHomePage = window.location.pathname == '/'; }; BreakpointHandler.prototype.initContent = function() { var self = this; $('.post').each(function(index) { var body = $(this).children('.post-body')[0]; var content = $(body).children('.post-content')[0]; $(content).addClass('post-original'); var data = $(content).children('script').html(); data = self.rewriteForSSL(data); // If exists, extract specified editor's preview. var match = data.match(/([\s\S]+?)<div data-is-preview.+?>([\s\S]+)<\/div>/m); if (match) { data = match[1]; } // Prevent big images from loading when they aren't needed. // This must be done as a pre-injection step, since image loading can't be // canceled once embedded into the DOM. if (self.isListPage && self.isMobile) { data = data.replace(/<(img|iframe) .+?>/g, ''); } // Insert template to be rendered as nodes. content.innerHTML = data; if (self.isListPage) { var summary = document.createElement('div'); $(summary).addClass('post-content'); $(summary).addClass('post-summary'); body.insertBefore(summary, content); if (match) { // Use provided summary. summary.innerHTML = match[2]; } else { // Generate a summary. // Summary generation relies on DOM, so it must occur after content is // inserted into the page. summary.innerHTML = self.generateSummaryFromContent(content, 30); } // Add read more link to summary. var titleAnchor = $(this).find('.title a')[0]; var link = titleAnchor.cloneNode(true); link.innerHTML = 'Read More'; $(link).addClass('read-more'); summary.appendChild(link); } }); // Firefox does not allow for proper styling of BR. if (navigator.userAgent.indexOf('Firefox') > -1) { $('.post-content br').replaceWith('<span class="space"></span>'); } $('.loading').removeClass('loading'); }; BreakpointHandler.prototype.process = function() { if (!this.initted) { var makeInsecureImageRegex = function(hosts) { var whitelist = hosts.join('|').replace(/\./g,'\\.'); // Normal image tags, plus input images (yes, this is possible!) return new RegExp('(<(img|input)[^>]+?src=("|\'))http:\/\/(' + whitelist +')', 'g'); }; this.sslImageRegex = makeInsecureImageRegex(BreakpointHandler.KNOWN_HTTPS_HOSTS); this.sslImageCurrentDomainRegex = makeInsecureImageRegex([window.location.hostname]); this.detect(); this.initContent(); this.initted = true; } }; BreakpointHandler.KNOWN_HTTPS_HOSTS = [ "www.google.org", "www.google.com", "services.google.com", "blogger.com", "draft.blogger.com", "www.blogger.com", "photos1.blogger.com", "photos2.blogger.com", "photos3.blogger.com", "blogblog.com", "img1.blogblog.com", "img2.blogblog.com", "www.blogblog.com", "www1.blogblog.com", "www2.blogblog.com", "0.bp.blogspot.com", "1.bp.blogspot.com", "2.bp.blogspot.com", "3.bp.blogspot.com", "4.bp.blogspot.com", "lh3.googleusercontent.com", "lh4.googleusercontent.com", "lh5.googleusercontent.com", "lh6.googleusercontent.com", "themes.googleusercontent.com", ]; BreakpointHandler.prototype.rewriteForSSL = function(html) { // Handle HTTP -> HTTPS source replacement of images, movies, and other embedded content. return html.replace(this.sslImageRegex, '$1https://$4') .replace(this.sslImageCurrentDomainRegex, '$1//$4') .replace(/(<(embed|iframe)[^>]+?src=("|'))http:\/\/([^"']*?(youtube|picasaweb\.google)\.com)/g, '$1https://$4') // Slideshow SWF takes a image host, so we need to rewrite that parameter. .replace(/(<embed[^>]+?feed=http(?=[^s]))/g, '$1s'); }; $(document).ready(function() { var handler = new BreakpointHandler(); handler.process(); // Top-level navigation. $(".BlogArchive .tab").click(function(ev) { ev.preventDefault(); $(this).parent().toggleClass('active'); $(this).siblings().slideToggle(300); }); $(".Label .tab").click(function(ev) { ev.preventDefault(); $(this).parent().toggleClass('active'); $(this).siblings().slideToggle(300); }); // Blog archive year expansion. $('.BlogArchive .intervalToggle').click(function(ev) { ev.preventDefault(); if ($(this).parent().hasClass('collapsed')) { $(this).parent().removeClass('collapsed'); $(this).parent().addClass('expanded'); } else { $(this).parent().removeClass('expanded'); $(this).parent().addClass('collapsed'); } }); // Reverse order of months. $('.BlogArchive .intervalToggle + div').each(function(_, items) { var year = $(this); year.children().each(function(_, month) { year.prepend(month); }); }); // Set anchors to open in new tab. $('.post-content img').parent().each(function(_, node) { if (node.nodeName == 'A') { $(this).attr('target', '_blank'); } }); // Process search requests. $('.searchBox input').on("keypress", function(ev) { if (ev.which == 13) { window.location.href = 'https://www.google.com/search?q=site%3A' + window.location.hostname + '%20' + encodeURIComponent ($(this).val()); } }); }); //]]> </script> <script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/984859869-widgets.js"></script> <script type='text/javascript'> window['__wavt'] = 'AOuZoY7Ik_Qix36fwyzcE_8nrYQNXN1Pmw:1732395383405';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d5320550312748173929','//drive.googleblog.com/2010/09/','5320550312748173929'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '5320550312748173929', 'title': 'Google Drive Blog', 'url': 'https://drive.googleblog.com/2010/09/', 'canonicalUrl': 'https://drive.googleblog.com/2010/09/', 'homepageUrl': 'https://drive.googleblog.com/', 'searchUrl': 'https://drive.googleblog.com/search', 'canonicalHomepageUrl': 'https://drive.googleblog.com/', 'blogspotFaviconUrl': 'https://drive.googleblog.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': true, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': 'UA-34322147-1', 'encoding': 'UTF-8', 'locale': 'en', 'localeUnderscoreDelimited': 'en', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Google Drive Blog - Atom\x22 href\x3d\x22https://drive.googleblog.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Google Drive Blog - RSS\x22 href\x3d\x22https://drive.googleblog.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Google Drive Blog - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/5320550312748173929/posts/default\x22 /\x3e\n', 'meTag': '', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/d78375fb222d99b3', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'archive', 'pageName': 'September 2010', 'pageTitle': 'Google Drive Blog: September 2010', 'metaDescription': 'News and notes from the Google Drive team'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard!', 'ok': 'Ok', 'postLink': 'Post Link'}}, {'name': 'template', 'data': {'name': 'custom', 'localizedName': 'Custom', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': true}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'Google Drive Blog', 'description': 'News and notes from the Google Drive team', 'url': 'https://drive.googleblog.com/2010/09/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': false, 'isArchive': true, 'isLabelSearch': false, 'archive': {'year': 2010, 'month': 9, 'rangeMessage': 'Showing posts from September, 2010'}}}]); _WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML9', 'sidebar-top', document.getElementById('HTML9'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_LabelView', new _WidgetInfo('Label1', 'sidebar', document.getElementById('Label1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar', document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading\x26hellip;'}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML6', 'sidebar', document.getElementById('HTML6'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML7', 'sidebar', document.getElementById('HTML7'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML5', 'sidebar-bottom', document.getElementById('HTML5'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'sidebar-bottom', document.getElementById('HTML1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML2', 'footer-1', document.getElementById('HTML2'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML3', 'footer-2', document.getElementById('HTML3'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML4', 'footer-3', document.getElementById('HTML4'), {}, 'displayModeFull')); </script> </body> </html>