CINXE.COM

Official Gmail Blog: November 2014

<!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> Official Gmail Blog: November 2014 </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='Official Gmail Blog' property='og:title'/> <meta content='en_US' property='og:locale'/> <meta content='https://gmail.googleblog.com/2014/11/' property='og:url'/> <meta content='Official Gmail Blog' property='og:site_name'/> <!-- Twitter Card properties --> <meta content='Official Gmail Blog' property='og:title'/> <meta content='summary' name='twitter:card'/> <meta content='@gmail' 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: 54px; 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://gmail.googleblog.com/favicon.ico' rel='icon' type='image/x-icon'/> <link href='https://gmail.googleblog.com/2014/11/' rel='canonical'/> <link rel="alternate" type="application/atom+xml" title="Official Gmail Blog - Atom" href="https://gmail.googleblog.com/feeds/posts/default" /> <link rel="alternate" type="application/rss+xml" title="Official Gmail Blog - RSS" href="https://gmail.googleblog.com/feeds/posts/default?alt=rss" /> <link rel="service.post" type="application/atom+xml" title="Official Gmail Blog - Atom" href="https://www.blogger.com/feeds/6781693/posts/default" /> <!--Can't find substitution for tag [blog.ieCssRetrofitLinks]--> <meta content='https://gmail.googleblog.com/2014/11/' property='og:url'/> <meta content='Official Gmail Blog' property='og:title'/> <meta content='News, tips and tricks from Google&#39;s Gmail team and friends.' 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: 53px; overflow: hidden; 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 { text-align: center !important; } .post-content .separator > a, .post-content .separator > span { margin-left: 0 !important; } .post-content img { max-width: 100%; /*height: auto; width: auto; */ height: auto !important; } .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-inner { height: 150px; } .header-left { height: 60%; top: inherit; margin-top: 0; -webkit-transform: initial; transform: initial; } .header-title { margin-top: 18px; } .header-inner .google-logo { height: 40px; margin-top: 3px; } .header-inner .google-logo img { height: 42px; } .header-title h2 { font-size: 32px; line-height: 40px; } .header-desc { top: 75px; position: absolute; } .post-content img { height: auto !important; } } /** 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); height: auto !important; } .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-1880198-1', 'auto', 'blogger'); ga('blogger.send', 'pageview'); </script> <link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=6781693&amp;zx=1adf3ea7-8354-4ab0-aca8-1a143c9fd3af' media='none' onload='if(media!=&#39;all&#39;)media=&#39;all&#39;' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=6781693&amp;zx=1adf3ea7-8354-4ab0-aca8-1a143c9fd3af' 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://gmail.googleblog.com/'> <img height="50" src="//3.bp.blogspot.com/-O231QKWcdH0/VGIFcFuWo5I/AAAAAAAAPnE/S3a8H6twUoE/s1600/logo_gmail_color_112in128dp.png"> </a> <a href='/.'> <h2> Official Gmail Blog </h2> </a> </div> <div class='header-desc'> News, tips and tricks from Google's Gmail team and friends. </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='7172357776550642241' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://gmail.googleblog.com/2014/11/highlights-in-inbox-help-during-holidays.html' itemprop='url' title='Highlights in Inbox: Help during the holidays'> Highlights in Inbox: Help during the holidays </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> November 25, 2014 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by Clarence Yung, Designer</span><br /> <br /> The holiday season is a busy time and your email is no different, with photos from friends and family, gift purchases and travel plans completely taking over. You find yourself with less time for email but lots more of it, and this is exactly where Highlights in Inbox can help. Highlights work together with <a href="http://gmailblog.blogspot.com/2014/11/a-bit-about-bundles-in-inbox.html">Bundles</a> to show you key information and actions at a glance &#8212; saving you time, and keeping you (mostly) sane this time of year :). For example:<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhENYG6VdfvTw88qdaHaYdcM6B2Ga_zQphIdn0N017IJR5sDC_ZvoYRRjHn5Uya_lvGerGtkHhmaVoB5E1BtorgEs5eSRNzMJ-TUYKla5afqdmOqQcE3bieUxhxiuFidwXlgDyH/s1600/highlights1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhENYG6VdfvTw88qdaHaYdcM6B2Ga_zQphIdn0N017IJR5sDC_ZvoYRRjHn5Uya_lvGerGtkHhmaVoB5E1BtorgEs5eSRNzMJ-TUYKla5afqdmOqQcE3bieUxhxiuFidwXlgDyH/s1600/highlights1.png" width="400" /></a></div>Highlights surface quick actions like &#8220;Track package&#8221; and &#8220;RSVP&#8221; before you even open a message. This way you can actually do stuff, and not just view stuff with Inbox.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqkIKRmx0FBpq0v2Vs3dG5pEcjejmPuuLeYbGHQwYlI-CLaBke-VnKC56zDj7cVGSL1F9aEUTHwhhYUk9Qo8W3S1M_KCDvticgulPJbbUXOCqyhugace8T3UXEXT-d0Su5E7V/s1600/highlights2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqkIKRmx0FBpq0v2Vs3dG5pEcjejmPuuLeYbGHQwYlI-CLaBke-VnKC56zDj7cVGSL1F9aEUTHwhhYUk9Qo8W3S1M_KCDvticgulPJbbUXOCqyhugace8T3UXEXT-d0Su5E7V/s1600/highlights2.gif" width="500" /></a></div>Thanks to <a href="//www.google.com/landing/now/">Google Now</a>, Highlights also include useful info from the web &#8212; like real-time flight status and package deliveries &#8212; even if it&#8217;s not in the original email.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbcwJwEEcfr7Li-dyXaZiC1Es0_g6iyYndpEPBuKs6AzKGP4Yk3v0TzJb0eJTQAnU_sFY6a-bq-sSZ5kLyaAkmIahCZPc3w3mww7HYm9tkQcLVsFEa97Tmrh5p9NOCtvqg7REV/s1600/highlights4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbcwJwEEcfr7Li-dyXaZiC1Es0_g6iyYndpEPBuKs6AzKGP4Yk3v0TzJb0eJTQAnU_sFY6a-bq-sSZ5kLyaAkmIahCZPc3w3mww7HYm9tkQcLVsFEa97Tmrh5p9NOCtvqg7REV/s1600/highlights4.png" width="500" /></a></div>And if you&#8217;re using the new <a href="http://gmailblog.blogspot.com/2014/11/a-new-day-for-google-calendar.html">Google Calendar</a> app, your holiday travel will be highlighted by Inbox, as well as get added to your calendar automatically.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOb3cSVbc4Vhhe9IBnLPCbdaM-EZp2rhchdIigbgi4qeKROXvA3VdNiIAcEJdAKHzFHeJ09GSxGDcutW5FDLRhKv8bqsJQapCjCSwCnYcNJR3JJFxjnE5v0eQ_UltgOVJSiGOj/s1600/calendar.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOb3cSVbc4Vhhe9IBnLPCbdaM-EZp2rhchdIigbgi4qeKROXvA3VdNiIAcEJdAKHzFHeJ09GSxGDcutW5FDLRhKv8bqsJQapCjCSwCnYcNJR3JJFxjnE5v0eQ_UltgOVJSiGOj/s1600/calendar.gif" width="500" /></a></div>We hope Highlights help you stay on top of your email during the holidays and beyond. If you're a developer interested in Highlights, learn how to create emails with structured data on the <a href="http://googledevelopers.blogspot.com/2014/10/make-your-emails-stand-out-in-inbox.html">Developer Blog</a>. If you aren't using Inbox by Gmail yet, look for an invite from a friend or email us at <a href="mailto:inbox@google.com">inbox@google.com</a> to get an invitation as soon as more become available.<br /> <br /> <br /> <br /> <br /> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by Clarence Yung, Designer</span><br /> <br /> The holiday season is a busy time and your email is no different, with photos from friends and family, gift purchases and travel plans completely taking over. You find yourself with less time for email but lots more of it, and this is exactly where Highlights in Inbox can help. Highlights work together with <a href="http://gmailblog.blogspot.com/2014/11/a-bit-about-bundles-in-inbox.html">Bundles</a> to show you key information and actions at a glance &#8212; saving you time, and keeping you (mostly) sane this time of year :). For example:<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhENYG6VdfvTw88qdaHaYdcM6B2Ga_zQphIdn0N017IJR5sDC_ZvoYRRjHn5Uya_lvGerGtkHhmaVoB5E1BtorgEs5eSRNzMJ-TUYKla5afqdmOqQcE3bieUxhxiuFidwXlgDyH/s1600/highlights1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhENYG6VdfvTw88qdaHaYdcM6B2Ga_zQphIdn0N017IJR5sDC_ZvoYRRjHn5Uya_lvGerGtkHhmaVoB5E1BtorgEs5eSRNzMJ-TUYKla5afqdmOqQcE3bieUxhxiuFidwXlgDyH/s1600/highlights1.png" width="400" /></a></div>Highlights surface quick actions like &#8220;Track package&#8221; and &#8220;RSVP&#8221; before you even open a message. This way you can actually do stuff, and not just view stuff with Inbox.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqkIKRmx0FBpq0v2Vs3dG5pEcjejmPuuLeYbGHQwYlI-CLaBke-VnKC56zDj7cVGSL1F9aEUTHwhhYUk9Qo8W3S1M_KCDvticgulPJbbUXOCqyhugace8T3UXEXT-d0Su5E7V/s1600/highlights2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqkIKRmx0FBpq0v2Vs3dG5pEcjejmPuuLeYbGHQwYlI-CLaBke-VnKC56zDj7cVGSL1F9aEUTHwhhYUk9Qo8W3S1M_KCDvticgulPJbbUXOCqyhugace8T3UXEXT-d0Su5E7V/s1600/highlights2.gif" width="500" /></a></div>Thanks to <a href="//www.google.com/landing/now/">Google Now</a>, Highlights also include useful info from the web &#8212; like real-time flight status and package deliveries &#8212; even if it&#8217;s not in the original email.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbcwJwEEcfr7Li-dyXaZiC1Es0_g6iyYndpEPBuKs6AzKGP4Yk3v0TzJb0eJTQAnU_sFY6a-bq-sSZ5kLyaAkmIahCZPc3w3mww7HYm9tkQcLVsFEa97Tmrh5p9NOCtvqg7REV/s1600/highlights4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbcwJwEEcfr7Li-dyXaZiC1Es0_g6iyYndpEPBuKs6AzKGP4Yk3v0TzJb0eJTQAnU_sFY6a-bq-sSZ5kLyaAkmIahCZPc3w3mww7HYm9tkQcLVsFEa97Tmrh5p9NOCtvqg7REV/s1600/highlights4.png" width="500" /></a></div>And if you&#8217;re using the new <a href="http://gmailblog.blogspot.com/2014/11/a-new-day-for-google-calendar.html">Google Calendar</a> app, your holiday travel will be highlighted by Inbox, as well as get added to your calendar automatically.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOb3cSVbc4Vhhe9IBnLPCbdaM-EZp2rhchdIigbgi4qeKROXvA3VdNiIAcEJdAKHzFHeJ09GSxGDcutW5FDLRhKv8bqsJQapCjCSwCnYcNJR3JJFxjnE5v0eQ_UltgOVJSiGOj/s1600/calendar.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjOb3cSVbc4Vhhe9IBnLPCbdaM-EZp2rhchdIigbgi4qeKROXvA3VdNiIAcEJdAKHzFHeJ09GSxGDcutW5FDLRhKv8bqsJQapCjCSwCnYcNJR3JJFxjnE5v0eQ_UltgOVJSiGOj/s1600/calendar.gif" width="500" /></a></div>We hope Highlights help you stay on top of your email during the holidays and beyond. If you're a developer interested in Highlights, learn how to create emails with structured data on the <a href="http://googledevelopers.blogspot.com/2014/10/make-your-emails-stand-out-in-inbox.html">Developer Blog</a>. If you aren't using Inbox by Gmail yet, look for an invite from a friend or email us at <a href="mailto:inbox@google.com">inbox@google.com</a> to get an invitation as soon as more become available.<br /> <br /> <br /> <br /> <br /> <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://gmail.googleblog.com/2014/11/highlights-in-inbox-help-during-holidays.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=Official Gmail Blog:Highlights in Inbox: Help during the holidays&url=https://gmail.googleblog.com/2014/11/highlights-in-inbox-help-during-holidays.html&via=gmail'> <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://gmail.googleblog.com/2014/11/highlights-in-inbox-help-during-holidays.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://gmail.googleblog.com/2014/11/highlights-in-inbox-help-during-holidays.html' data-url='https://gmail.googleblog.com/2014/11/highlights-in-inbox-help-during-holidays.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://gmail.googleblog.com/2014/11/highlights-in-inbox-help-during-holidays.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://gmail.googleblog.com/search/label/Gmail%20Blog' rel='tag'> Gmail Blog </a> , <a class='label' href='https://gmail.googleblog.com/search/label/Inbox' rel='tag'> Inbox </a> </span> </div> </div> </div> <div class='post' data-id='4733754601497867092' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://gmail.googleblog.com/2014/11/going-under-hood-of-inbox.html' itemprop='url' title='Going under the hood of Inbox'> Going under the hood of Inbox </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> November 20, 2014 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by Garrick Toubassi, Engineering Director</span><br /> <br /> Editor&#8217;s note: <i>Be forewarned that the following post has much more technical mumbo-jumbo than our normal fare, taking you behind-the-scenes of the development of <a href="//www.google.com/inbox/">Inbox</a>. So if you&#8217;re a practicing engineer, an aspiring hacker, or just plain interested in knowing how the sausage is made (mmmm sausage), read on!</i><br /> <br /> Gmail was <a href="http://googlepress.blogspot.com/2004/04/google-gets-message-launches-gmail.html">born</a> over 10 years ago, entering a world dominated by flip phones, trucker hats, and based on today&#8217;s standards, sluggish web applications. Every click on a webpage meant a multi-second wait and a full page refresh. So when we developed Gmail, we took a different approach&#8212;building a new genre of web app that ran in the web browser and relied on rich javascript logic and a local data model. This allowed many of those clicks to be handled right within the browser without waiting for the server at all. Fast forward 10 years and this architecture is the norm, having been adopted by most websites and supported by a plethora of frameworks and tools (e.g. AngularJS, Meteor, Backbone, Ember, NodeJs).<br /> <br /> But in those same 10 years, a lot has changed. The capabilities and diversity of devices has exploded. Users expect to be able to move from a laptop to a phone and have their apps work flawlessly. As a result, developers are facing a new challenge: how to build a high-quality app across platforms, such as Android, the web, and iOS, without sacrificing quality or execution velocity. As a developer, maybe you&#8217;ve asked yourself, do you rewrite your app three times to optimize it for each platform, wringing out every last bit of performance and polish? Or do you aim to get the app to market sooner by building a web-based &#8220;hybrid&#8221; app that leverages the same technologies across platforms (but potentially sacrifices integration and user experience)?<br /> <br /> <b>Facing the challenge</b><br /> Those were the questions that weighed heavily on us when we first started building Inbox. We&#8217;d been working on Gmail for years and knew our users would expect whatever we built to be as fast and polished as Gmail is today right out of the gate. And that led us to the decision to build three separate native apps to fit seamlessly into each of our respective target platforms: Android (via Java+Android SDK), web (via JavaScript+DOM/CSS), and iOS (via Objective-C+UIKit).<br /> <br /> Of course, there are a number of elements of Inbox that are shared across the three platforms: code for managing network communication, caching objects, local persistent storage, managing user edits both locally and remotely, and supporting it all while offline. This logic must be faithfully and correctly implemented and kept up to date on all three clients. Rewriting it three times in three different languages would soak up substantial engineering resources and slow down how quickly we make improvements to Inbox.<br /> <br /> <b>Cutting the Gordian Knot</b><br /> In order to address this challenge we took a novel approach in which data model and application logic (conceptually the &#8220;Model&#8221; in &#8220;Model-View-Controller&#8221;) is written once in Java. This data model abstracts concepts unique to Inbox like Conversations, Reminders, Contacts, and Labels, and provides a fully observable data model for convenient binding to the user interface (UI) layer. We built the Inbox app for Android directly on top of this Java data model.<br /> <br /> <b>The plot thickens</b><br /> On the web, the story gets more interesting. We use the open sourced <a href="http://gwtproject.org">GWT</a> cross compiler to translate the Java data model into JavaScript, which we build on for Inbox for the web. In recent years, GWT has made great strides in being able to output translated code which is conveniently and performantly accessed from native Javascript. For example the Reminder.snooze() method provided by the Java data model is exposed in exactly the same way in JavaScript.<br /> <br /> For iOS we developed the now open source <a href="http://j2objc.org/">J2ObjC</a> cross compiler to translate our Java data model to Objective-C, and again we get a natural API on which to build our native iOS Inbox app (complete with -[Reminder snooze]). The astute reader may wonder how we deal with the impedance mismatch when translating from a garbage collected language (Java) to a reference counted one (Objective-C). Generally, J2ObjC relies on Objective-C autorelease pools, so objects normally garbage-collected are instead freed when a pool drains. One problem with this approach is reference cycles; in places that cycles exist in our Java data model, we use a Java annotation to identify the @WeakReference. When transpiled, the corresponding property in Objective-C will have the __weak modifier, thus breaking the retain cycle. In practice we&#8217;ve found this to be a relatively minor problem and we have automation tests that flag the rare cases of new cycles creeping into the object model.<br /> <br /> <b>Conclusion</b><br /> If you&#8217;re building an application that (a) has significant UI independent client logic, (b) is targeting multiple platforms, (c) must not compromise on user experience and polish, you now have a new option to consider: a shared, cross compiled data model powering fully native application UIs. This has worked well for Inbox, where we are sharing roughly two-thirds of our client code, and have delivered a product with the same functionality and ship date, without having to rewrite the entire thing three times. Want to learn more about the technologies that power Inbox? Check out <a href="http://gwtproject.org">http://gwtproject.org</a> and <a href="http://j2objc.org">http://j2objc.org</a>.<br /> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by Garrick Toubassi, Engineering Director</span><br /> <br /> Editor&#8217;s note: <i>Be forewarned that the following post has much more technical mumbo-jumbo than our normal fare, taking you behind-the-scenes of the development of <a href="//www.google.com/inbox/">Inbox</a>. So if you&#8217;re a practicing engineer, an aspiring hacker, or just plain interested in knowing how the sausage is made (mmmm sausage), read on!</i><br /> <br /> Gmail was <a href="http://googlepress.blogspot.com/2004/04/google-gets-message-launches-gmail.html">born</a> over 10 years ago, entering a world dominated by flip phones, trucker hats, and based on today&#8217;s standards, sluggish web applications. Every click on a webpage meant a multi-second wait and a full page refresh. So when we developed Gmail, we took a different approach&#8212;building a new genre of web app that ran in the web browser and relied on rich javascript logic and a local data model. This allowed many of those clicks to be handled right within the browser without waiting for the server at all. Fast forward 10 years and this architecture is the norm, having been adopted by most websites and supported by a plethora of frameworks and tools (e.g. AngularJS, Meteor, Backbone, Ember, NodeJs).<br /> <br /> But in those same 10 years, a lot has changed. The capabilities and diversity of devices has exploded. Users expect to be able to move from a laptop to a phone and have their apps work flawlessly. As a result, developers are facing a new challenge: how to build a high-quality app across platforms, such as Android, the web, and iOS, without sacrificing quality or execution velocity. As a developer, maybe you&#8217;ve asked yourself, do you rewrite your app three times to optimize it for each platform, wringing out every last bit of performance and polish? Or do you aim to get the app to market sooner by building a web-based &#8220;hybrid&#8221; app that leverages the same technologies across platforms (but potentially sacrifices integration and user experience)?<br /> <br /> <b>Facing the challenge</b><br /> Those were the questions that weighed heavily on us when we first started building Inbox. We&#8217;d been working on Gmail for years and knew our users would expect whatever we built to be as fast and polished as Gmail is today right out of the gate. And that led us to the decision to build three separate native apps to fit seamlessly into each of our respective target platforms: Android (via Java+Android SDK), web (via JavaScript+DOM/CSS), and iOS (via Objective-C+UIKit).<br /> <br /> Of course, there are a number of elements of Inbox that are shared across the three platforms: code for managing network communication, caching objects, local persistent storage, managing user edits both locally and remotely, and supporting it all while offline. This logic must be faithfully and correctly implemented and kept up to date on all three clients. Rewriting it three times in three different languages would soak up substantial engineering resources and slow down how quickly we make improvements to Inbox.<br /> <br /> <b>Cutting the Gordian Knot</b><br /> In order to address this challenge we took a novel approach in which data model and application logic (conceptually the &#8220;Model&#8221; in &#8220;Model-View-Controller&#8221;) is written once in Java. This data model abstracts concepts unique to Inbox like Conversations, Reminders, Contacts, and Labels, and provides a fully observable data model for convenient binding to the user interface (UI) layer. We built the Inbox app for Android directly on top of this Java data model.<br /> <br /> <b>The plot thickens</b><br /> On the web, the story gets more interesting. We use the open sourced <a href="http://gwtproject.org">GWT</a> cross compiler to translate the Java data model into JavaScript, which we build on for Inbox for the web. In recent years, GWT has made great strides in being able to output translated code which is conveniently and performantly accessed from native Javascript. For example the Reminder.snooze() method provided by the Java data model is exposed in exactly the same way in JavaScript.<br /> <br /> For iOS we developed the now open source <a href="http://j2objc.org/">J2ObjC</a> cross compiler to translate our Java data model to Objective-C, and again we get a natural API on which to build our native iOS Inbox app (complete with -[Reminder snooze]). The astute reader may wonder how we deal with the impedance mismatch when translating from a garbage collected language (Java) to a reference counted one (Objective-C). Generally, J2ObjC relies on Objective-C autorelease pools, so objects normally garbage-collected are instead freed when a pool drains. One problem with this approach is reference cycles; in places that cycles exist in our Java data model, we use a Java annotation to identify the @WeakReference. When transpiled, the corresponding property in Objective-C will have the __weak modifier, thus breaking the retain cycle. In practice we&#8217;ve found this to be a relatively minor problem and we have automation tests that flag the rare cases of new cycles creeping into the object model.<br /> <br /> <b>Conclusion</b><br /> If you&#8217;re building an application that (a) has significant UI independent client logic, (b) is targeting multiple platforms, (c) must not compromise on user experience and polish, you now have a new option to consider: a shared, cross compiled data model powering fully native application UIs. This has worked well for Inbox, where we are sharing roughly two-thirds of our client code, and have delivered a product with the same functionality and ship date, without having to rewrite the entire thing three times. Want to learn more about the technologies that power Inbox? Check out <a href="http://gwtproject.org">http://gwtproject.org</a> and <a href="http://j2objc.org">http://j2objc.org</a>.<br /> <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://gmail.googleblog.com/2014/11/going-under-hood-of-inbox.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=Official Gmail Blog:Going under the hood of Inbox&url=https://gmail.googleblog.com/2014/11/going-under-hood-of-inbox.html&via=gmail'> <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://gmail.googleblog.com/2014/11/going-under-hood-of-inbox.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://gmail.googleblog.com/2014/11/going-under-hood-of-inbox.html' data-url='https://gmail.googleblog.com/2014/11/going-under-hood-of-inbox.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://gmail.googleblog.com/2014/11/going-under-hood-of-inbox.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://gmail.googleblog.com/search/label/Gmail%20Blog' rel='tag'> Gmail Blog </a> , <a class='label' href='https://gmail.googleblog.com/search/label/Inbox' rel='tag'> Inbox </a> </span> </div> </div> </div> <div class='post' data-id='1746052346381733162' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://gmail.googleblog.com/2014/11/a-bit-about-bundles-in-inbox.html' itemprop='url' title='A bit about Bundles in Inbox '> A bit about Bundles in Inbox </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> November 19, 2014 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by Shalini Agarwal, Product Manager</span><br /> <br /> One of the first things you'll notice using <a href="http://googleblog.blogspot.com/2014/10/an-inbox-that-works-for-you.html">Inbox</a> is that it feels less cluttered and overwhelming with messages grouped into Bundles.<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj26G9z7Ttz2c1jY7yB_HpLtuVik69odyW7C0-J5KuWibXRTVvyqBIYzMj0UWC5njn71P5Fm2m982x-tNLWPvtL_5gU9s-kF_TYQlm6WwUxNR2wkmYRzKe6iOhEOtJjAoUN883C/s1600/bundles_manu.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj26G9z7Ttz2c1jY7yB_HpLtuVik69odyW7C0-J5KuWibXRTVvyqBIYzMj0UWC5njn71P5Fm2m982x-tNLWPvtL_5gU9s-kF_TYQlm6WwUxNR2wkmYRzKe6iOhEOtJjAoUN883C/s1600/bundles_manu.png" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><i>Bundles, illustrated by Manu Cornet, Software Engineer on Inbox</i></td></tr> </tbody></table>Bundles expand on Gmail's categories so you can stay organized with less effort and read the most important messages&#8212;like those from friends and family&#8212;first. You'll also experience less interruptions since bundled messages don't create a notification on your phone by default.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfrt_tkcViA1Vojh324Qqbb4ShyphenhyphenBo2gxalxqiaax3Bta0pk3HXQP0-HLa_SZAIo7upSuUNi4bIfxHBwVu3wZzwkW3Z6i6Wz8z_R87VQtWQjgv_9u-AtAGWkEyAcGQLjrBo9afO/s1600/bundles.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfrt_tkcViA1Vojh324Qqbb4ShyphenhyphenBo2gxalxqiaax3Bta0pk3HXQP0-HLa_SZAIo7upSuUNi4bIfxHBwVu3wZzwkW3Z6i6Wz8z_R87VQtWQjgv_9u-AtAGWkEyAcGQLjrBo9afO/s1600/bundles.jpg" width="300" /></a></div>With Bundles, promotions are neatly organized, purchases are in one place, and all your trip information is together all so you can deal with related messages all at once. For example, you can open up a bundle, quickly pin the messages you want to keep in your inbox and sweep away the rest.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu8-pp81vQsP-gkIYtwaNPGYmqTJd9mQ17zkz4FoBoTZ2-iMdWx2sCe8WdE3rA2u-Ay7dGhXmDweFQyb8gi0c-MYGzTXEj0feHVu3_8ZGUA-L8Wr0ryoIzBxBkvX5ThXA_8LXb/s1600/bundles.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu8-pp81vQsP-gkIYtwaNPGYmqTJd9mQ17zkz4FoBoTZ2-iMdWx2sCe8WdE3rA2u-Ay7dGhXmDweFQyb8gi0c-MYGzTXEj0feHVu3_8ZGUA-L8Wr0ryoIzBxBkvX5ThXA_8LXb/s1600/bundles.gif" /></a></div>Of course that's not the only way you're in control. You can also teach Bundles to adapt to the way you work by choosing which messages you&#8217;d like to see grouped together and when they appear in your inbox: as they arrive, once a day, once a week or even skip the inbox entirely.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDNg3tddJjgNKBmjzbmxFIifDbjqkdKBqtgO_nU70FfF4oJ57EUaAx1U_xsRJAKrvs9wxJJj7SsSsr1azwSe4BMTK_xO0__8aPmKQ0s6Sn0-nsQXxkAk7MZCtNHoFMlgg4pYd/s1600/bundles2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDNg3tddJjgNKBmjzbmxFIifDbjqkdKBqtgO_nU70FfF4oJ57EUaAx1U_xsRJAKrvs9wxJJj7SsSsr1azwSe4BMTK_xO0__8aPmKQ0s6Sn0-nsQXxkAk7MZCtNHoFMlgg4pYd/s1600/bundles2.png" width="400" /></a></div>Try setting your Promos and Social bundles to once a day and see if that helps you focus on other messages first.<br /> <br /> Bundles work together with <a href="//www.google.com/inbox/#/highlights">Highlights</a> to give you just the information you need at a glance so stay tuned for a closer look at Highlights next week. If you aren't using Inbox by Gmail yet, look for an invite from a friend or email us at <a href="mailto:inbox@google.com">inbox@google.com</a> to get an invitation as soon as more become available. <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by Shalini Agarwal, Product Manager</span><br /> <br /> One of the first things you'll notice using <a href="http://googleblog.blogspot.com/2014/10/an-inbox-that-works-for-you.html">Inbox</a> is that it feels less cluttered and overwhelming with messages grouped into Bundles.<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody> <tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj26G9z7Ttz2c1jY7yB_HpLtuVik69odyW7C0-J5KuWibXRTVvyqBIYzMj0UWC5njn71P5Fm2m982x-tNLWPvtL_5gU9s-kF_TYQlm6WwUxNR2wkmYRzKe6iOhEOtJjAoUN883C/s1600/bundles_manu.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj26G9z7Ttz2c1jY7yB_HpLtuVik69odyW7C0-J5KuWibXRTVvyqBIYzMj0UWC5njn71P5Fm2m982x-tNLWPvtL_5gU9s-kF_TYQlm6WwUxNR2wkmYRzKe6iOhEOtJjAoUN883C/s1600/bundles_manu.png" width="400" /></a></td></tr> <tr><td class="tr-caption" style="text-align: center;"><i>Bundles, illustrated by Manu Cornet, Software Engineer on Inbox</i></td></tr> </tbody></table>Bundles expand on Gmail's categories so you can stay organized with less effort and read the most important messages&#8212;like those from friends and family&#8212;first. You'll also experience less interruptions since bundled messages don't create a notification on your phone by default.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfrt_tkcViA1Vojh324Qqbb4ShyphenhyphenBo2gxalxqiaax3Bta0pk3HXQP0-HLa_SZAIo7upSuUNi4bIfxHBwVu3wZzwkW3Z6i6Wz8z_R87VQtWQjgv_9u-AtAGWkEyAcGQLjrBo9afO/s1600/bundles.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfrt_tkcViA1Vojh324Qqbb4ShyphenhyphenBo2gxalxqiaax3Bta0pk3HXQP0-HLa_SZAIo7upSuUNi4bIfxHBwVu3wZzwkW3Z6i6Wz8z_R87VQtWQjgv_9u-AtAGWkEyAcGQLjrBo9afO/s1600/bundles.jpg" width="300" /></a></div>With Bundles, promotions are neatly organized, purchases are in one place, and all your trip information is together all so you can deal with related messages all at once. For example, you can open up a bundle, quickly pin the messages you want to keep in your inbox and sweep away the rest.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu8-pp81vQsP-gkIYtwaNPGYmqTJd9mQ17zkz4FoBoTZ2-iMdWx2sCe8WdE3rA2u-Ay7dGhXmDweFQyb8gi0c-MYGzTXEj0feHVu3_8ZGUA-L8Wr0ryoIzBxBkvX5ThXA_8LXb/s1600/bundles.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhu8-pp81vQsP-gkIYtwaNPGYmqTJd9mQ17zkz4FoBoTZ2-iMdWx2sCe8WdE3rA2u-Ay7dGhXmDweFQyb8gi0c-MYGzTXEj0feHVu3_8ZGUA-L8Wr0ryoIzBxBkvX5ThXA_8LXb/s1600/bundles.gif" /></a></div>Of course that's not the only way you're in control. You can also teach Bundles to adapt to the way you work by choosing which messages you&#8217;d like to see grouped together and when they appear in your inbox: as they arrive, once a day, once a week or even skip the inbox entirely.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDNg3tddJjgNKBmjzbmxFIifDbjqkdKBqtgO_nU70FfF4oJ57EUaAx1U_xsRJAKrvs9wxJJj7SsSsr1azwSe4BMTK_xO0__8aPmKQ0s6Sn0-nsQXxkAk7MZCtNHoFMlgg4pYd/s1600/bundles2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSDNg3tddJjgNKBmjzbmxFIifDbjqkdKBqtgO_nU70FfF4oJ57EUaAx1U_xsRJAKrvs9wxJJj7SsSsr1azwSe4BMTK_xO0__8aPmKQ0s6Sn0-nsQXxkAk7MZCtNHoFMlgg4pYd/s1600/bundles2.png" width="400" /></a></div>Try setting your Promos and Social bundles to once a day and see if that helps you focus on other messages first.<br /> <br /> Bundles work together with <a href="//www.google.com/inbox/#/highlights">Highlights</a> to give you just the information you need at a glance so stay tuned for a closer look at Highlights next week. If you aren't using Inbox by Gmail yet, look for an invite from a friend or email us at <a href="mailto:inbox@google.com">inbox@google.com</a> to get an invitation as soon as more become available. <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://gmail.googleblog.com/2014/11/a-bit-about-bundles-in-inbox.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=Official Gmail Blog:A bit about Bundles in Inbox &url=https://gmail.googleblog.com/2014/11/a-bit-about-bundles-in-inbox.html&via=gmail'> <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://gmail.googleblog.com/2014/11/a-bit-about-bundles-in-inbox.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://gmail.googleblog.com/2014/11/a-bit-about-bundles-in-inbox.html' data-url='https://gmail.googleblog.com/2014/11/a-bit-about-bundles-in-inbox.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://gmail.googleblog.com/2014/11/a-bit-about-bundles-in-inbox.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://gmail.googleblog.com/search/label/Gmail%20Blog' rel='tag'> Gmail Blog </a> , <a class='label' href='https://gmail.googleblog.com/search/label/Inbox' rel='tag'> Inbox </a> </span> </div> </div> </div> <div class='post' data-id='2841169875449012076' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://gmail.googleblog.com/2014/11/a-more-modern-gmail-app-for-android.html' itemprop='url' title='A more modern Gmail app for Android '> A more modern Gmail app for Android </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> November 3, 2014 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by Matthew Izatt, Product Manager</span><br /> <br /> Today, the Gmail app for Android is getting updated with a more modern style, sleeker transitions, and a few other handy improvements.<br /> <div style="text-align: center;"><iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/egjApkX8sIk" width="560"></iframe><br /> </div>As part of the new design, there&#8217;s now a convenient reply button at the bottom of every message, making it quick and easy to continue a conversation when you&#8217;re on the go. And if you access the app on your Android tablet, you&#8217;ll notice it&#8217;s easier to switch between accounts and the different inbox categories.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi98erozxRClCrQn1AHEfiInDHdgaJ6XRGHihOVDb-FwqGu4u0dFHCqftYXvWAdcmaix-zXLWW59rt-AxSChA-BLWGborj9SXAPl8-S5AhWhnlz7nlUW_t2T1KPWCpOgsMqGgDB/s1600/Gmail+Blog+Tablet+image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi98erozxRClCrQn1AHEfiInDHdgaJ6XRGHihOVDb-FwqGu4u0dFHCqftYXvWAdcmaix-zXLWW59rt-AxSChA-BLWGborj9SXAPl8-S5AhWhnlz7nlUW_t2T1KPWCpOgsMqGgDB/s3200/Gmail+Blog+Tablet+image.png" width="600" /></a></div>Lastly, we know some of you have email addresses that aren&#8217;t Gmail (it&#8217;s okay to admit it). The updated Gmail app now supports all email providers, which means you can now set up a separate inbox for, say, your Yahoo Mail or Outlook.com addresses using POP/IMAP.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjkwa3NNxhzZNo2xg1VQg33n2uQg5UKQ4oSsyaHpoBr4b1SH2wBxIPj32wIYTeFQeDcgifis68JwuRsX7DhaXQVbCGEaIgd5A-0ZUzRS5AnNpaev_VMiVG1o7MrgSSO56h8chc/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjkwa3NNxhzZNo2xg1VQg33n2uQg5UKQ4oSsyaHpoBr4b1SH2wBxIPj32wIYTeFQeDcgifis68JwuRsX7DhaXQVbCGEaIgd5A-0ZUzRS5AnNpaev_VMiVG1o7MrgSSO56h8chc/s3200/Gmail+Blog+Mobile+Image.png" width="300" /></a></div>The updated Gmail app will support all Android 4.0+ devices, so look for it in Google Play over the next few days and let us know what you think! <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by Matthew Izatt, Product Manager</span><br /> <br /> Today, the Gmail app for Android is getting updated with a more modern style, sleeker transitions, and a few other handy improvements.<br /> <div style="text-align: center;"><iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/egjApkX8sIk" width="560"></iframe><br /> </div>As part of the new design, there&#8217;s now a convenient reply button at the bottom of every message, making it quick and easy to continue a conversation when you&#8217;re on the go. And if you access the app on your Android tablet, you&#8217;ll notice it&#8217;s easier to switch between accounts and the different inbox categories.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi98erozxRClCrQn1AHEfiInDHdgaJ6XRGHihOVDb-FwqGu4u0dFHCqftYXvWAdcmaix-zXLWW59rt-AxSChA-BLWGborj9SXAPl8-S5AhWhnlz7nlUW_t2T1KPWCpOgsMqGgDB/s1600/Gmail+Blog+Tablet+image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi98erozxRClCrQn1AHEfiInDHdgaJ6XRGHihOVDb-FwqGu4u0dFHCqftYXvWAdcmaix-zXLWW59rt-AxSChA-BLWGborj9SXAPl8-S5AhWhnlz7nlUW_t2T1KPWCpOgsMqGgDB/s3200/Gmail+Blog+Tablet+image.png" width="600" /></a></div>Lastly, we know some of you have email addresses that aren&#8217;t Gmail (it&#8217;s okay to admit it). The updated Gmail app now supports all email providers, which means you can now set up a separate inbox for, say, your Yahoo Mail or Outlook.com addresses using POP/IMAP.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjkwa3NNxhzZNo2xg1VQg33n2uQg5UKQ4oSsyaHpoBr4b1SH2wBxIPj32wIYTeFQeDcgifis68JwuRsX7DhaXQVbCGEaIgd5A-0ZUzRS5AnNpaev_VMiVG1o7MrgSSO56h8chc/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjkwa3NNxhzZNo2xg1VQg33n2uQg5UKQ4oSsyaHpoBr4b1SH2wBxIPj32wIYTeFQeDcgifis68JwuRsX7DhaXQVbCGEaIgd5A-0ZUzRS5AnNpaev_VMiVG1o7MrgSSO56h8chc/s3200/Gmail+Blog+Mobile+Image.png" width="300" /></a></div>The updated Gmail app will support all Android 4.0+ devices, so look for it in Google Play over the next few days and let us know what you think! <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://gmail.googleblog.com/2014/11/a-more-modern-gmail-app-for-android.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=Official Gmail Blog:A more modern Gmail app for Android &url=https://gmail.googleblog.com/2014/11/a-more-modern-gmail-app-for-android.html&via=gmail'> <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://gmail.googleblog.com/2014/11/a-more-modern-gmail-app-for-android.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://gmail.googleblog.com/2014/11/a-more-modern-gmail-app-for-android.html' data-url='https://gmail.googleblog.com/2014/11/a-more-modern-gmail-app-for-android.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://gmail.googleblog.com/2014/11/a-more-modern-gmail-app-for-android.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://gmail.googleblog.com/search/label/Gmail%20Blog' rel='tag'> Gmail Blog </a> </span> </div> </div> </div> <div class='post' data-id='5664234090664967604' itemscope='' itemtype='http://schema.org/BlogPosting'> <h2 class='title' itemprop='name'> <a href='https://gmail.googleblog.com/2014/11/a-new-day-for-google-calendar.html' itemprop='url' title='A new day for Google Calendar'> A new day for Google Calendar </a> </h2> <div class='post-header'> <div class='published'> <span class='publishdate' itemprop='datePublished'> November 3, 2014 </span> </div> </div> <div class='post-body'> <div class='post-content' itemprop='articleBody'> <script type='text/template'> <span class="byline-author">Posted by Ian Leader, Product Manager</span><br /> <br /> Today we&#8217;re introducing a brand new Google Calendar app. It&#8217;s designed to be a helpful assistant, so you can spend less time managing your day, and more time enjoying it.<br /> <br /> It takes a lot of work to stay on top of your schedule, after all. You have to manually enter that hotel or dinner reservation, then update it if your plans change. You have to hunt around for addresses and phone numbers, then add them to your events. And if you&#8217;re on a mobile device, you might just give up on these kinds of tasks entirely.<br /> <br /> Calendars (like <a href="http://gmailblog.blogspot.com/2014/10/an-inbox-that-works-for-you.html">email</a>) should do better&#8212;especially on phones and tablets&#8212;so we set out to build one that&#8217;s always at your service. Here are just some of the ways the new Calendar app can help.<br /> <br /> <center><iframe width="560" height="315" src="//www.youtube.com/embed/MSTmkvn060E" frameborder="0" allowfullscreen></iframe></center><br /> <b>Events from Gmail: now emails can turn into Calendar events automatically</b><br /> Every time you book a flight, buy concert tickets, or make a hotel reservation, odds are you get an email with dates, times and other important details. But who has the time (or patience) to copy and paste all this into their calendar? In the new Calendar app these kinds of emails become events automatically, complete with things like flight numbers and check-in times. They&#8217;ll even stay updated in real time if your flight's delayed, or you receive another email update.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNi_TuMb182H52MG5fL2WrPqXBGWifZsD1SkTPWiwEn5ioZyVxGcZav_O7C6IRCoyE0CaVVnJSO1rZ2djkbYjBPZYeF6Oe8SBB1UUfw1pKGaYSJqq54il8II-AMhUX_ffNePH4/s1600/01_Comp+(2).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNi_TuMb182H52MG5fL2WrPqXBGWifZsD1SkTPWiwEn5ioZyVxGcZav_O7C6IRCoyE0CaVVnJSO1rZ2djkbYjBPZYeF6Oe8SBB1UUfw1pKGaYSJqq54il8II-AMhUX_ffNePH4/s1600/01_Comp+(2).png" width="600" /></a></div><b>Assists: suggestions that save you time</b><br /> Of course, not all event info arrives in your inbox. You often have to piece together phone numbers, addresses and attendees from lots of different sources, then add them to your calendar manually. With Assists, Calendar can suggest titles, people and places as you type, as well as adapt to your preferences over time. For example, if you often go running with Peter in Central Park, Calendar can quickly suggest that entire event when you type &#8216;r-u-n.&#8217;<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAoQvlydC0bAnJ0dGWdTw8zZJEjcR3UFBoTIkPCAqrOOfbMYZOCpD-bQpIZLUNVxRSkpu9kelH8mOOT8JQTtaP9nyL2henhPUTnprgTyY1ajK4QKJ-1Kupir3HSWzZGxfrTt00/s1600/assists.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAoQvlydC0bAnJ0dGWdTw8zZJEjcR3UFBoTIkPCAqrOOfbMYZOCpD-bQpIZLUNVxRSkpu9kelH8mOOT8JQTtaP9nyL2henhPUTnprgTyY1ajK4QKJ-1Kupir3HSWzZGxfrTt00/s1600/assists.gif" /></a></div><b>Schedule View: easy to scan and lovely to look at</b><br /> Your calendar is more than just a list of dates and times&#8212;it&#8217;s your life! So Calendar&#8217;s new Schedule view includes photos and maps of the places you&#8217;re going, cityscapes of travel destinations, and illustrations of everyday events like dinner, drinks and yoga. These images will bring a little extra beauty to your day, and make it easy to see what&#8217;s going on at a glance&#8212;perfect for when you&#8217;re checking in from your phone or tablet.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghSPOKNmJmXtVbhsu_QenegHlZOCLo4Ze1Qdz4gNGOefSH3yGJ2EBJ0xxIJMXQg1tRTjOyHB1sVrrunRXe4Rt9sNFO9lld6dC0v-TR55tlewrtC9Nm5THH28j_u_FurCZfDtUO/s1600/04_tablet+(1).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghSPOKNmJmXtVbhsu_QenegHlZOCLo4Ze1Qdz4gNGOefSH3yGJ2EBJ0xxIJMXQg1tRTjOyHB1sVrrunRXe4Rt9sNFO9lld6dC0v-TR55tlewrtC9Nm5THH28j_u_FurCZfDtUO/s1600/04_tablet+(1).png" width="650" /></a></div>The new Google Calendar will work on all Android 4.1+ devices. It&#8217;s available today on all devices running Android 5.0 Lollipop, and you&#8217;ll be able to download the update from Google Play in the coming weeks. (And yes, we&#8217;re also working on a version for iPhone!) Learn more on <a href="//www.google.com/landing/calendar/">our website</a>.<br /> <br /> <span itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'> <meta content='https://plus.google.com/116899029375914044550' itemprop='url'/> </span> </script> <noscript> <span class="byline-author">Posted by Ian Leader, Product Manager</span><br /> <br /> Today we&#8217;re introducing a brand new Google Calendar app. It&#8217;s designed to be a helpful assistant, so you can spend less time managing your day, and more time enjoying it.<br /> <br /> It takes a lot of work to stay on top of your schedule, after all. You have to manually enter that hotel or dinner reservation, then update it if your plans change. You have to hunt around for addresses and phone numbers, then add them to your events. And if you&#8217;re on a mobile device, you might just give up on these kinds of tasks entirely.<br /> <br /> Calendars (like <a href="http://gmailblog.blogspot.com/2014/10/an-inbox-that-works-for-you.html">email</a>) should do better&#8212;especially on phones and tablets&#8212;so we set out to build one that&#8217;s always at your service. Here are just some of the ways the new Calendar app can help.<br /> <br /> <center><iframe width="560" height="315" src="//www.youtube.com/embed/MSTmkvn060E" frameborder="0" allowfullscreen></iframe></center><br /> <b>Events from Gmail: now emails can turn into Calendar events automatically</b><br /> Every time you book a flight, buy concert tickets, or make a hotel reservation, odds are you get an email with dates, times and other important details. But who has the time (or patience) to copy and paste all this into their calendar? In the new Calendar app these kinds of emails become events automatically, complete with things like flight numbers and check-in times. They&#8217;ll even stay updated in real time if your flight's delayed, or you receive another email update.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNi_TuMb182H52MG5fL2WrPqXBGWifZsD1SkTPWiwEn5ioZyVxGcZav_O7C6IRCoyE0CaVVnJSO1rZ2djkbYjBPZYeF6Oe8SBB1UUfw1pKGaYSJqq54il8II-AMhUX_ffNePH4/s1600/01_Comp+(2).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNi_TuMb182H52MG5fL2WrPqXBGWifZsD1SkTPWiwEn5ioZyVxGcZav_O7C6IRCoyE0CaVVnJSO1rZ2djkbYjBPZYeF6Oe8SBB1UUfw1pKGaYSJqq54il8II-AMhUX_ffNePH4/s1600/01_Comp+(2).png" width="600" /></a></div><b>Assists: suggestions that save you time</b><br /> Of course, not all event info arrives in your inbox. You often have to piece together phone numbers, addresses and attendees from lots of different sources, then add them to your calendar manually. With Assists, Calendar can suggest titles, people and places as you type, as well as adapt to your preferences over time. For example, if you often go running with Peter in Central Park, Calendar can quickly suggest that entire event when you type &#8216;r-u-n.&#8217;<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAoQvlydC0bAnJ0dGWdTw8zZJEjcR3UFBoTIkPCAqrOOfbMYZOCpD-bQpIZLUNVxRSkpu9kelH8mOOT8JQTtaP9nyL2henhPUTnprgTyY1ajK4QKJ-1Kupir3HSWzZGxfrTt00/s1600/assists.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAoQvlydC0bAnJ0dGWdTw8zZJEjcR3UFBoTIkPCAqrOOfbMYZOCpD-bQpIZLUNVxRSkpu9kelH8mOOT8JQTtaP9nyL2henhPUTnprgTyY1ajK4QKJ-1Kupir3HSWzZGxfrTt00/s1600/assists.gif" /></a></div><b>Schedule View: easy to scan and lovely to look at</b><br /> Your calendar is more than just a list of dates and times&#8212;it&#8217;s your life! So Calendar&#8217;s new Schedule view includes photos and maps of the places you&#8217;re going, cityscapes of travel destinations, and illustrations of everyday events like dinner, drinks and yoga. These images will bring a little extra beauty to your day, and make it easy to see what&#8217;s going on at a glance&#8212;perfect for when you&#8217;re checking in from your phone or tablet.<br /> <div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghSPOKNmJmXtVbhsu_QenegHlZOCLo4Ze1Qdz4gNGOefSH3yGJ2EBJ0xxIJMXQg1tRTjOyHB1sVrrunRXe4Rt9sNFO9lld6dC0v-TR55tlewrtC9Nm5THH28j_u_FurCZfDtUO/s1600/04_tablet+(1).png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghSPOKNmJmXtVbhsu_QenegHlZOCLo4Ze1Qdz4gNGOefSH3yGJ2EBJ0xxIJMXQg1tRTjOyHB1sVrrunRXe4Rt9sNFO9lld6dC0v-TR55tlewrtC9Nm5THH28j_u_FurCZfDtUO/s1600/04_tablet+(1).png" width="650" /></a></div>The new Google Calendar will work on all Android 4.1+ devices. It&#8217;s available today on all devices running Android 5.0 Lollipop, and you&#8217;ll be able to download the update from Google Play in the coming weeks. (And yes, we&#8217;re also working on a version for iPhone!) Learn more on <a href="//www.google.com/landing/calendar/">our website</a>.<br /> <br /> <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://gmail.googleblog.com/2014/11/a-new-day-for-google-calendar.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=Official Gmail Blog:A new day for Google Calendar&url=https://gmail.googleblog.com/2014/11/a-new-day-for-google-calendar.html&via=gmail'> <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://gmail.googleblog.com/2014/11/a-new-day-for-google-calendar.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'> &#57529; </i> <span class='cmt_count_iframe_holder' data-count='0' data-onclick='' data-post-url='https://gmail.googleblog.com/2014/11/a-new-day-for-google-calendar.html' data-url='https://gmail.googleblog.com/2014/11/a-new-day-for-google-calendar.html' style='color: #4184F3;'></span> </div> <div class='post-footer'> <div class='cmt_iframe_holder' data-href='https://gmail.googleblog.com/2014/11/a-new-day-for-google-calendar.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://gmail.googleblog.com/search/label/calendar' rel='tag'> calendar </a> , <a class='label' href='https://gmail.googleblog.com/search/label/Gmail%20Blog' rel='tag'> Gmail Blog </a> , <a class='label' href='https://gmail.googleblog.com/search/label/googlenew' rel='tag'> googlenew </a> </span> </div> </div> </div> <div class='blog-pager' id='blog-pager'> <a class='home-link' href='https://gmail.googleblog.com/'> <i class='material-icons'> &#59530; </i> </a> <span id='blog-pager-newer-link'> <a class='blog-pager-newer-link' href='https://gmail.googleblog.com/search?updated-max=2015-03-30T11:25:00-07:00&max-results=10&reverse-paginate=true' id='Blog1_blog-pager-newer-link' title='Newer Posts'> <i class='material-icons'> &#58820; </i> </a> </span> <span id='blog-pager-older-link'> <a class='blog-pager-older-link' href='https://gmail.googleblog.com/search?updated-max=2014-11-03T10:00:00-08:00&max-results=10' id='Blog1_blog-pager-older-link' title='Older Posts'> <i class='material-icons'> &#58824; </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='HTML11'> <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'> &#58821; </i> </div> <div class='widget-content list-label-widget-content'> <ul> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/buzz'> buzz </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/calendar'> calendar </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/Gmail%20Blog'> Gmail Blog </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/Google%20Apps%20Blog'> Google Apps Blog </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/Google%20Calendar'> Google Calendar </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/googlenew'> googlenew </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/Inbox'> Inbox </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/Inbox%20by%20Gmail'> Inbox by Gmail </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/labs'> labs </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/mobile'> mobile </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/Offline'> Offline </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/reader'> reader </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/tasks'> tasks </a> </li> <li> <a dir='ltr' href='https://gmail.googleblog.com/search/label/tip'> tip </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'> &#58055; </i> <h2> Archive </h2> <i class='material-icons arrow'> &#58821; </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.googleblog.com/2016/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://gmail.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://gmail.googleblog.com/2016/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://gmail.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://gmail.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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.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://gmail.googleblog.com/2015/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://gmail.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://gmail.googleblog.com/2015/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://gmail.googleblog.com/2015/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://gmail.googleblog.com/2015/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://gmail.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://gmail.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://gmail.googleblog.com/2015/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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy toggle-open'> <i class='material-icons'> &#58823; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.googleblog.com/2014/12/'> Dec </a> </div> <div class='items'> </div> </li> </ul> <ul class='hierarchy'> <li class='archivedate expanded'> <div class=''> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.googleblog.com/2014/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://gmail.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://gmail.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://gmail.googleblog.com/2014/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://gmail.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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.googleblog.com/2013/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://gmail.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://gmail.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://gmail.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://gmail.googleblog.com/2013/03/'> Mar </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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.googleblog.com/2012/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://gmail.googleblog.com/2012/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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.googleblog.com/2011/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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.googleblog.com/2010/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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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'> &#58821; </i> </span> <a class='toggle' href='javascript:void(0)' style='display: none'> <span class='zippy'> <i class='material-icons'> &#58821; </i> &#160; </span> </a> <a class='post-count-link' href='https://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.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://gmail.googleblog.com/2007/07/'> Jul </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://gmailblog.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> <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/+gmail" 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="share followgooglewrapper"> <button data-href="https://twitter.com/intent/follow?original_referer=http://gmailblog.blogspot.in/&amp;screen_name=gmail" onclick='sharingPopup(this);' id='twitter-share'><span class="twitter-follow">Follow @gmail</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 class="fb-follow-button"> <a href="https://www.facebook.com/Gmail" target="_blank"><img class="fb-follow" src="//3.bp.blogspot.com/-HoA5kIzCDV0/VVNMgZYYShI/AAAAAAAAHh0/7t0oglZ-RVU/s1600/fb.png">Follow</a> </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/gmail">Product Forum</a>. </div> <div class='clear'></div> </div><div class='widget HTML' data-version='1' id='HTML7'> <div class='widget-content'> <div style="border:1px solid #ccc; padding:5px; margin:15px 0 10 0;"> <div style="font-size:1.1em; font-weight:bold; color:#666; margin-top:2px; margin-bottom:8px;">Get posts via email</div> <form action="https://groups.google.com/group/gmail-blog-posts/boxsubscribe"> Email: <input type="text" name="email" size="19" /><br /><br/> <input type="submit" name="sub" value="Subscribe" /><br /><br /> <span style="font-size:.9em;">Powered by <a href="https://groups.google.com/group/gmail-blog-posts">Google Groups</a><span> </span></span></form></div> </div> <div class='clear'></div> </div><div class='widget HTML' data-version='1' id='HTML8'> <h2 class='title'> Useful Links </h2> <div class='widget-content'> <a onclick="_gaq.push(['_trackEvent','Gmail Blog','Useful Links','About Gmail']);" href="https://mail.google.com/mail/help/intl/en/about.html">About Gmail</a><br /><a onclick="_gaq.push([&#39;_trackEvent&#39;,&#39;Gmail Blog&#39;,&#39;Useful Links&#39;,&#39;Gmail for Mobile&#39;]);" href="//www.google.com/mobile/gmail/">Gmail for Mobile</a><br /><a onclick="_gaq.push([&#39;_trackEvent&#39;,&#39;Gmail Blog&#39;,&#39;Useful Links&#39;,&#39;Gmail for Work&#39;]);" href="//www.google.com/enterprise/apps/business/?utm_medium=et&amp;utm_source=consgmailblog&amp;utm_campaign=en%0A/">Gmail for Work</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="//googleblog.blogspot.com/" title="Google">Official Google Blog</a> </li> <li> <a href="//googlepublicpolicy.blogspot.com/" title="Public Policy">Public Policy 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="//googleforwork.blogspot.com/" title="Google for Work">Google for Work Blog</a> </li> <li> <a href="//chrome.blogspot.com/" title="Chrome">Chrome Blog</a> </li> <li> <a href="//officialandroid.blogspot.com/" title="Android">Official Android 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'] = 'AOuZoY46oHVRi7BxAwWyUl8StAvJcEQOAQ:1732376457412';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d6781693','//gmail.googleblog.com/2014/11/','6781693'); _WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '6781693', 'title': 'Official Gmail Blog', 'url': 'https://gmail.googleblog.com/2014/11/', 'canonicalUrl': 'https://gmail.googleblog.com/2014/11/', 'homepageUrl': 'https://gmail.googleblog.com/', 'searchUrl': 'https://gmail.googleblog.com/search', 'canonicalHomepageUrl': 'https://gmail.googleblog.com/', 'blogspotFaviconUrl': 'https://gmail.googleblog.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': true, 'httpsEnabled': true, 'enabledCommentProfileImages': false, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': 'UA-1880198-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\x22Official Gmail Blog - Atom\x22 href\x3d\x22https://gmail.googleblog.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Official Gmail Blog - RSS\x22 href\x3d\x22https://gmail.googleblog.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Official Gmail Blog - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/6781693/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': 'November 2014', 'pageTitle': 'Official Gmail Blog: November 2014'}}, {'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': 'Official Gmail Blog', 'description': 'News, tips and tricks from Google\x27s Gmail team and friends.', 'url': 'https://gmail.googleblog.com/2014/11/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': false, 'isArchive': true, 'isLabelSearch': false, 'archive': {'year': 2014, 'month': 11, 'rangeMessage': 'Showing posts from November, 2014'}}}]); _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('HTML11', 'sidebar-top', document.getElementById('HTML11'), {}, '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('HTML5', 'sidebar-bottom', document.getElementById('HTML5'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'sidebar-bottom', document.getElementById('HTML1'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML7', 'sidebar-bottom', document.getElementById('HTML7'), {}, 'displayModeFull')); _WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML8', 'sidebar-bottom', document.getElementById('HTML8'), {}, '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>

Pages: 1 2 3 4 5 6 7 8 9 10