Thứ Ba, 28 tháng 7, 2015

Google Photos Search Filters

Google+ Photos has a few search filters that are pretty useful. You can find them if you click the small arrow from the search box: Auto Backup, Hangouts, Google Drive, Posts, Auto Awesome, Videos and more. The nice thing is that most of them are also available in Google Photos.


Google Photos has a search page that shows a few filters: Creations (replaces Auto Awesome), Google Drive, Video, Recently Added. Here are some searches you can use to bring back the filters from Google+ Photos:

#AutoBackup - shows all the photos automatically backed up from your mobile devices and desktop computers

#Desktop - shows the photos automatically backed up from your desktop computers

#Posts - shows the photos added to your Google+ posts

#All - shows all your photos

#PhotosOfYou - photos you've been tagged in

#CAMERANAME - replace CAMERANAME with the your camera's model or brand to see all the photos taken with that camera. Some examples: #Nexus5, #Canon, #iPhone.

Thứ Hai, 27 tháng 7, 2015

Google+ Profiles, No Longer Required

After so many years of promoting Google+ and integrating it with other services, Google realized that Google+ doesn't mean a lot for many Google users and it started dismantling Google+. Google Photos is now a standalone service and other Google+ features will follow suit.

In a blog post, Google announced that Google+ profiles will no longer be required and YouTube will be the first service that will make this change in the coming weeks. "A Google Account will be all you'll need to share content, communicate with contacts, create a YouTube channel and more, all across Google. Your underlying Google Account won't be searchable or followable, unlike public Google+ profiles. And for people who already created Google+ profiles but don't plan to use Google+ itself, we'll offer better options for managing and removing those public profiles."

A lot of YouTube users complained when YouTube switched to a new commenting system which required Google+ profiles, but YouTube comments are much better today. Now YouTube comments will no longer appear on Google+ and Google+ posts that share a YouTube video will no longer be added as YouTube comments. "In the coming weeks, YouTube will no longer require a Google+ profile when you want to upload, comment, or create a channel," mentions the YouTube Blog.

Google reassures users that Google+ will continue to exist and will become "a place where people engage around their shared interests". It's a much smaller goal for a service that used to tie all the other Google services, add unified sharing and identity information. Google+ used to be more than a service, it was a layer that was supposed to make Google products work together.

Here's what Bradley Horowitz said back in 2011:

"Until now, every single Google property acted like a separate company. Due to the way we grew, through various acquisitions and the fierce independence of each division within Google, each product sort of veered off in its own direction. That was dizzying. But Google+ is Google itself. We're extending it across all that we do — search, ads, Chrome, Android, Maps, YouTube — so that each of those services contributes to our understanding of who you are."


Bradley Horowitz is now the Google VP of Streams, Photos, and Sharing. That's "Streams, Photos, and Sharing" and not Google+. Ever since it was launched back in 2011, Google+ meant 2 things: the stream and the sharing platform. It looks like Google+ now focuses on the stream, which was less successful than the sharing platform.

It's not clear how Google+ will continue to exist if Google removes important features like photo sharing and starts to remove the integration with YouTube and other Google services. It just makes it easier for Google to discontinue Google+, now that fewer people will use it.

Gmail's Mobile Site Promotes Inbox App

I'm not sure if this is new, but I've noticed that Google now promotes the Inbox app when opening Gmail in the mobile browser. "Get Inbox by Gmail, a new email app from the Gmail team," suggests the interstitial page, which still lets you "go to the mobile Gmail site".

Here's a screenshot from an iPad:


And another screenshot from a Nexus 5:


Google used to promote the Gmail app.

YouTube's Updated Notifications

YouTube has recently changed the settings for notifications. When you subscribe to a channel, there's a box that says "Send me all notifications for this channel". The settings page has a new label for the email digest checkbox: "Occasionally notify me of new videos and activity from my subscriptions" and you can choose if you want email notifications, mobile notifications or both email and mobile notifications.


Mobile apps for Android and iOS have a notification section in the settings, which lets you disable or enable notifications, customize notification types (subscription activity, recommended videos, comments and replies) and also see all your notifications.

Named Places in Google Maps

The latest version of the Google Maps app for Android lets you add private names for places. Search for an address or drop a pin on the map, tap the 3-dot menu icon and pick "Edit name". You can add a name that lets you quickly find the place on the map, just like you can find "home" or "work". The private name is saved to your Google account and you're the only one who can see it.

Here's an example for a local business (this feature is even more useful for places that don't have a name in Google Maps):





To edit a name or delete it, open the side menu and tap "Your places". At the top of the section, you can find the named places, including "home" and "work".

Google Maps also has a new interface for location history: it's called "your timeline" and it's available on the web and in the Android app. "Your Timeline allows you to visualize your real-world routines, easily see the trips you've taken and get a glimpse of the places where you spend your time. And if you use Google Photos, we'll show the photos you took when viewing a specific day, to help resurface your memories," informs Google. You can customize the timeline by removing places or adding private names. This feature still requires Location History, which can be enabled or disabled from Google Maps, Google Settings or My Account.

Thứ Năm, 23 tháng 7, 2015

Mega Menu with Images or Thumbnails for Blogger

Visual content holds a certain appeal that websites integrate images to every page, or even operate solely through photos. Now, with the new AJAX navigation menu widget, images can be added to the drop-down menu as well.

The AJAX navigation menu for blogger is a widget designed specifically for the Blogger platform. It is inspired from the Mashable website long before it was given a makeover. Despite the plain and simple inspiration, the drop down menu with images is a huge hit.

It works based on the jQuery library and Blogger JSON Feed API. Function-wise, it works just like a normal drop-down menu when JavaScript is disabled. For it to work online, a blog must be for public visitors, so the Blogger JSON Feed API will function as designed.

Features

Multi-Level Menu Support

The AJAX menu is a multi-level drop-down menu that is based on the standard unordered list of HTML. When a menu contains a sub-menu, it loads on the fly when a user rolls over the main menu. What is great about this is that it saves outgoing traffic, especially on a website that uses a large navigation.

Cross-browser Compatibility

Most AJAX applications will work across different browsers even with other plugins or proprietary technology already installed.  The menu with images works in the same premise, instead of being designed for a specific browser. Because there is no telling which browser you or your blog readers would use, the new AJAX drop-down mega menu with images is the ideal option.

Some of the Windows browser supported includes IE5+, Firefox, Google Chrome, Safari Netscape 7+ and Opera 8+. When you're using a Mac, the AJAX menu is supported on Firefox, IE and Safari. If JavaScript is disabled, however, the menu is still accessible, but only as pure CSS menu.

Automatic Sub-Menu Display

With the new AJAX menu, you only need to roll over a menu item and sub-menus will automatically load. No need to click on a menu to get the sub-menu to drop down. This not only saves users' valuable navigation time, but also outgoing traffic.

Menu Styling

AJAX menus can be styled by simply changing the megamenu.js and the CSS style. The former is used when javaScript is turned on, while the latter is when it is turned off. You can adjust the menu parameters manually or you can use ready-to-use templates.

There are plenty of other features, but you would not be able to use or experience them if you do not install the new mega menu with images. What do you need to do then to implement it in your blog or website?


Adding Mega Menu with Images/Thumbnails in Blogger

Step 1. Log in to your Blogger account, then go to the Dashboard. Select the blog where you want to install the new mega menu.

CSS

Step 2. Click on Template, then press the Edit HTML button. Press anywhere inside the code area and use the CTRL + F function to make your search quicker and easier. Type the following tag and hit Enter to find it:
]]></b:skin>
Once you find the tag, add the code below just above/before it:
.megamenu *{margin:0;padding:0;font-family:'PT Sans Narrow'}ul.megamenu{list-style:none;line-height:1;overflow:visible !important}ul.megamenu:after{margin:0;padding:0;content:' ';display:block;height:0px;clear:both}ul.megamenu li{float:left;display:inline;position:relative;text-transform:uppercase}ul.megamenu li a.menu-target:after{content:"";width:0;height:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #fff;font-size:0;line-height:0;bottom:22px;right:5px;position:absolute}ul.megamenu li a{display:block;line-height:50px;padding:0px 20px;text-decoration:none;border-left:1px solid #000;box-shadow:1px 0 0 0 rgba(255, 255, 255, 0.1) inset;color:#d9d9d9;font-size:14px;transition:all 0.3s ease-in-out}ul.megamenu li a:hover{background:#111111;color:#fff}ul.megamenu ul{position:absolute;display:none;top:100%}ul.megamenu li:hover > ul{display:block}ul.megamenu ul li{z-index:72;min-width:149px;float:none;background:#000;text-shadow:none}ul.megamenu ul li a{text-transform:none;font-weight:normal}ul.megamenu ul li a:hover,ul.megamenuid ul li a.hover{background:#E0E0E0;color:#444}ul.megamenu ul ul{display:none;left:100%;top:0}ul.megamenuid li div.megasubmenu{background:#F9F9F9;position:absolute;width:830px;z-index:90;left:0;top:100%;overflow:hidden;min-height:150px;-moz-transform:translate(0,30px);-webkit-transform:translate(0,30px);-o-transform:translate(0,30px);transform:translate(0,30px);transform-origin:50% 0;visibility:hidden;opacity:0;color:#888;box-shadow:0 10px 7px -7px rgba(0,0,0,0.1);transition:all 0.3s ease-in-out}ul.megamenuid li:hover div.megasubmenu{visibility:visible;opacity:1;-moz-transform:translate(0,0);-webkit-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}ul.megamenuid ul,ul.megamenuid ul li{display:block !important;border:0 none !important;margin:0 !important;padding:0 !important}ul.megamenuid ul li{background:none !important;float:left !important}ul.megamenuid ul.leftmenulist{position:absolute;width:18%;left:0;top:0;bottom:0;background:#EEEEEE;border-right:1px dashed #e5e5e5 !important}ul.megamenuid ul.leftmenulist a{border-left:none !important;color:#555}ul.megamenuid ul.rightmenulist{position:relative;display:block;width:81%;float:right;margin:0px 0px 0px !important;background:none}ul.megamenuid ul.rightmenulist li{display:block;overflow:hidden;position:relative;min-height:210px;padding:5px 17px 5px 0px !important}ul.megamenuid ul.rightmenulist li .thumb-container{left:0;width:100%;height:100%;position:absolute;overflow:hidden;font-size:0;line-height:0}ul.megamenuid ul.rightmenulist li .thumb-container img{position:relative;top:10px;padding:0;width:100%;height:100%;display:block}ul.megamenuid ul.rightmenulist li a{display:block;border-left:none !important;padding:0px 5px !important;line-height:1.4;color:#777;font-weight:bold;font-size:14px}ul.megamenuid ul.rightmenulist li a:hover{color:#000;background:transparent}ul.megamenuid .loading-icon{background:url('https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPFzLMzyd4dtsA27rZ0jeGXWtdBK4GnxHJQoQHBLlnDRNxtVAqb99aB9Rll80Oo-oY4n9rXaK-JItRiNBlgxDsSyJ6-vQE4vWU9SCtMk4K4jzLZt9TCL88SHpX6ZrTqL4veOc8qCTFi_o/s1600/wait.gif') no-repeat scroll 0 0 transparent;width:22px;height:22px;position:absolute;top:50%;margin-top:-11px;right:5px}ul.megamenuid .menu-icon{border-bottom:4px solid transparent;border-top:4px solid transparent;border-left:4px solid #777;display:block;height:0;margin-top:-4px;position:absolute;right:11px;top:50%;width:0}#megamenuid{background:rgba(0, 0, 0, 0) -moz-linear-gradient(center top , #3d3d3d, #212121) repeat scroll 0 0;background:-webkit-linear-gradient(top,#3d3d3d,#212121);background-color:#3d3d3d;box-shadow:1px 1px 0 0 rgba(255, 255, 255, 0.1) inset;height:50px;width:100%;position:relative;max-width:1000px;margin:0 auto;padding:0px}#megamenuid h5{font-size:16px;margin-top:70px;text-align:center}#megamenuid h5:before{content:"";position:absolute;top:50px;left:50%;width:5px;height:2px;margin-left:-4px;border-left:2px solid black;border-right:2px solid black}#megamenuid h5:after{content:"";position:absolute;top:55px;left:50%;width:10px;height:5px;margin-left:-7px;border-top:2px solid black;border-left:2px solid black;border-right:2px solid black;border-radius:8px 8px 0px 0px}li.search-box{float:right !important;line-height:35px;margin:7px 10px 0 0}li.search-box .search-field{border:none;padding:3px;background:#3F3F3F;color:#fff;width:135px;font-size:13px}li.search-box .search-field:focus{border:none;outline:none;background:#4C4C4C;color:#fff}li.search-box .search-button{background:url('https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT3ll-g2eGDIF8dx2nmAy5DX-xA90PdnAnZMXI7QUjed2F3rX75RaeeJ4JA3ufO_usBrrATSrqPlDmkxAZYynuNrFKn0M97KBeWvkxFT19xiy03fpv-QgRhmNUMhVEp2sYVAvuOl8BDW4/s1600/search.png') no-repeat;border:none;cursor:pointer;padding:5px 10px;transition:all 0.3s ease-in-out}li.search-box .search-button:hover{opacity:0.9}.search-alert{background:#E84C3D url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvF0WCarlrpk6epiPFq-uynPSEaruxlrRnlIWTg5iAQulTDOdhEAWD8M58OXQF4OgZHf_T-L9E5AzvGmMdoEYp5VAyyzqbnC7erpTOWEHWTlbdIEvYhnuZ9IwMb89yFbYYzv7bWPPNj-M/s1600/search-info.png) no-repeat;background-position:5px;text-transform:capitalize;color:#fff;margin:-5px;padding:0px 15px 0px 40px;display:none;border-radius:5px}

JavaScript

Step 3. Check if your blog has the jQuery plugin already installed. If not, you need to add a few lines of code before the </head> tag (CTRL + F to find it). See the code below:
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js' type='text/javascript'/>
<script type='text/javascript'>
//<![CDATA[
(function(e){var t=function(e,t){this.elem=e;this.settings=t;this.megaMenuHtml();this.ajaxcall=null;this.menulist=this.elem.find(".leftmenulist li a");this.menuHelper(this.elem);this.addEvents()};t.prototype={regex:{islabel:new RegExp("/search/label/","g"),issearch:new RegExp("[?&]q=","g"),labelsearch:new RegExp("(http://[^/]+)/search/label/([^/?&]+).*[?&]q=([^$&]+)(?:[^$]+)?","g"),label:new RegExp("(http://[^/]+)/search/label/([^/?&$]+)","g"),search:new RegExp("(http://[^/]+)/search/?[?&]q=(.*)","g")},addEvents:function(){var t=this;this.menulist.hover(function(){if(e(this).data("menuloaded")!=="true"){t.li=e(this);t.url=t.li.attr("href");t.container=t.li.closest("ul").siblings("ul");t.hoverOver()}},function(){t.hoverOut()})},hoverOver:function(){var t=this;this.getAJAXUrl();if(!this.ajaxUrl)return;this.ajaxcall=e.ajax({type:"GET",url:t.ajaxUrl,dataType:"jsonp",data:t.ajaxData,beforeSend:function(){t.showLoader()},success:function(e){t.hideLoader();t.addArrow();t.showPosts(e)},error:function(e){t.showError(e)}})},hoverOut:function(){this.ajaxcall.abort();this.hideLoader()},getAJAXUrl:function(){if(this.url){var e=this;this.ajaxData={alt:"json","max-results":this.settings.postsNumber};this.url.search(this.regex.islabel)!==-1&&this.url.search(this.regex.issearch)!==-1?this.ajaxUrl=this.url.replace(this.regex.labelsearch,function(t,n,r,i){e.ajaxData.q=i;return[n,"/feeds/posts/default/-/",r,"/"].join("")}):this.url.search(this.regex.islabel)!==-1&&this.url.search(this.regex.issearch)===-1?this.ajaxUrl=this.url.replace(this.regex.label,function(t,n,r){delete e.ajaxData.q;return[n,"/feeds/posts/default/-/",r,"/"].join("")}):this.url.search(this.regex.islabel)===-1&&this.url.search(this.regex.issearch)!==-1?this.ajaxUrl=this.url.replace(this.regex.search,function(t,n,r){e.ajaxData.q=r;return[n,"/feeds/posts/default"].join("")}):this.ajaxUrl=!1}else this.ajaxUrl=!1},showLoader:function(){e("<span></span>",{"class":"loading-icon"}).appendTo(this.li.closest("li"))},hideLoader:function(){this.li.closest("li").find("span.loading-icon").remove()},showPosts:function(t){var n=this,r=[],i,s,o;t.feed.openSearch$totalResults.$t>0?e.each(t.feed.entry,function(t,u){i=u.title.$t;e.each(u.link,function(e,t){t.rel==="alternate"?s=t.href:s="#"});o=u.media$thumbnail?u.media$thumbnail.url.replace(/\/s72\-c\//,"/s200-c/"):n.settings.noThumbnail;r.push('<li><span class="thumb-container"><a title="',i,'" href="',s,'"><img alt="',i,'" src="',o,'"/><br />',i,"</a></span></li>")}):r.push("<h5>","No posts available.","</h5>");this.container.html(r.join(""));this.menulist.removeData("menuloaded");this.li.data("menuloaded","true")},showError:function(e){if(e.statusText==="error"){this.hideLoader();this.addArrow();this.container.html("<h5>Oops... Could not fetch the blog posts.</h5>")}},addArrow:function(){this.menulist.closest("li").find("span").remove();this.menulist.removeClass("hover-menu");this.li.addClass("hover-menu");e("<span></span>",{"class":"menu-icon"}).appendTo(this.li.closest("li"))},menuHelper:function(t){var n=this;t.find(">li").hover(function(){var t=e(this);t.find("a:first").addClass("hover-menu");var r=e(this).find("ul.leftmenulist li").height()*e(this).find("ul.leftmenulist li").length;t.find("ul.rightmenulist").css({"min-height":r+"px"});n.requestFirstAjax(t)},function(){e(this).find("a:first").removeClass("hover-menu")})},megaMenuHtml:function(){this.elem.find("ul ul").remove();this.elem.addClass("megamenuid").find(">li").find("ul:first").addClass("leftmenulist").wrap(e("<div></div>",{"class":this.settings.divClass}));e("ul.leftmenulist").after(e("<ul></ul>",{"class":"rightmenulist"}))},requestFirstAjax:function(e){e=e.find(".leftmenulist li:first-child a");this.url=e.attr("href");this.container=e.closest("ul").siblings("ul");this.li=e;this.hoverOver()}};e.fn.megaBloggerMenu=function(n){var r={postsNumber:4,divClass:"megasubmenu",postsClass:"rightmenulist",noThumbnail:"/default.png"},i=e.extend({},r,n);return this.each(function(){var n=new t(e(this),i)})}})(jQuery);
//]]>
</script>
<script type='text/javascript'>
jQuery(document).ready(function($) {
 $(&#39;#megamenuid&#39;).megaBloggerMenu({
  postsNumber : 4,
  noThumbnail : &#39;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzsEcp5kaCdDT9KPjsCpCBrjTegkVkp2_L4QMqN8U6GdYG77nTREMsin14ozCQE4sRqesm_aCtToWiJaOHIoHQnOGkbKoNSuJyEZuli8iUD4IwrZb7pOF3NbeImVitfpTyccd1OuEDfjA/s1600/no_image_available.png&#39;
 });
});

$(function(){
  $(&#39;.search-here&#39;).submit(function(e){
    if($(&#39;.search-box .search-field&#39;).val().length==0){
       $(&#39;.search-box .search-alert&#39;).fadeIn().css(&#39;display&#39;,&#39;inline-block&#39;);
      e.preventDefault();
    }
  });
});
</script>

Note

- If jQuery plugin already exist, remove the line in red.
- To change the number of posts, change the 4 value from:
postsNumber : 4
- To add a different thumbnail when a post has no image, replace the url in blue from:
noThumbnail : &#39;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzsEcp5kaCdDT9KPjsCpCBrjTegkVkp2_L4QMqN8U6GdYG77nTREMsin14ozCQE4sRqesm_aCtToWiJaOHIoHQnOGkbKoNSuJyEZuli8iUD4IwrZb7pOF3NbeImVitfpTyccd1OuEDfjA/s1600/no_image_available.png&#39;

HTML

Step 4. Carefully add the HTML code to ensure that the drop down menu with images will work as designed. There are only three types of URLs that the AJAX Menu accepts and they must be used accordingly.

Label URL: http://yourblogurlblogspot.com/search/label/LABELNAME
Search Query: http://yourblogurl.blogspot.com/search?q=SEARCHQUERY
Label w/ Search Query: http://yourblogurl.blogspot.com/search/label/LABELNAME?q=SEARCHQUERY

Among the three URLs, the Search Query has to be URL encoded using a specific tool.

Step 5. Search the following line using CTRL + F:
<div class='main-outer'>
Just above this line, add the following HTML code:
<ul class='megamenu' id='megamenuid'>
<li><a href='/'>Home</a></li>
<li><a class='menu-target' href='#'>MENU TITLE</a>
<ul>
<li><a href='http://ADDURLHERE.com'>LABEL NAME</a></li>
<li><a href='http://ADDURLHERE.com'>LABEL NAME</a></li>
<li><a href='http://ADDURLHERE.com'>LABEL NAME</a></li>
</ul>
</li>
<li><a class='menu-target' href='#'>MENU TITLE</a>
<ul>
<li><a href='http://ADDURLHERE.com'>LABEL NAME</a></li>
<li><a href='http://ADDURLHERE.com'>LABEL NAME</a></li>
<li><a href='http://ADDURLHERE.com'>LABEL NAME</a></li>
</ul></li>
<li><a href='http://ADDURLHERE.com'>Normal Link</a></li>
<li class='search-box'>
<form action='/search' class='search-here' method='get'>
<input class='search-field' name='q' placeholder='Search Here' size='30' type='text'/>
<input class='search-button' type='submit' value=' '/>
</form>
<p class='search-alert'>Search form is empty!</p>
</li>
</ul>
<div class='clear'/>
<div class='clear'/>
Note: replace the text in blue with the label url and the text in red with the name of the label. This is the label that you have added to the Labels settings of your post editor:


Step 6. Click on Save template for all the changes to take effect.

If you can't find the line from step 5, access the Layout tab, click on Add Gadget, and then choose HTML/JavaScript Gadget. Copy the HTML code and paste it inside the box... then press the Save button.

That's it!

Once that is done, your AJAX menu with images will be implemented and ready for you to use. Make sure to choose photos that are relevant to the menu and sub-menus so your website will have cohesive look and appeal. Research shows, however, that text accompanied by any image, even if completely irrelevant, can grab attention. 

Thứ Ba, 21 tháng 7, 2015

Google Hangouts Photo Sharing, Powered by Picasa Web

Now that Google+ Photos is discontinued, Google Apps admins received a message which informs them that Google Hangouts will only use Picasa Web Albums for photo sharing.

"The photo-sharing functionality in Hangouts is changing. Going forward, the ability to share photos and other multimedia in Hangouts Chat will be set by the Picasa Web Albums service rather than by the Google+ service. If Google+ is enabled in your domain, no further action is necessary. Google+ requires Picasa Web Albums so you can continue to share photos using Hangouts Chat just like you always have. If Google+ is not enabled for your domain and you want to use the photo-sharing functionality in Hangouts Chat, you must turn on the Picasa Web Albums service in your Admin console."


This change also affects regular Google users, since photos shared using Hangouts aren't added to Google Photos and you'll only find them in Picasa Web Albums when Google+ Photos will shut down. The same thing will happen with Blogger photos.

Picasa Web Albums and Google+ Photos served as a central hub for almost all the photos uploaded using Google services. This was great, since you could find all your photos in one place, but it also cluttered Picasa Web and Google+ Photos with albums automatically generated by Blogger, Google Hangouts and other services.

It looks like Picasa Web Albums is here to stay, at least for now.

{ Thanks, Petr Man. }