Páginas

2011-09-20

[drops.log]: Google+ API roadmap (and shortcuts...)


Well, my foreplay with Google+ API, launched past week, was too rush and to practical. Let’s make some notes useful for the next time.

First observations:
  • To work with Google+ API we need the Google Client API to get access to user google account and the Google Plus Service API. Make sure to download both
  • We need to get permission from our apps access Google services and data. SO you need to sign in Google API Console
  • Create the app by creating a Client ID, providing type of app, hostname address
  • Switch to ON the status of the services you will need to access from our app
One note for JAVA users, when I was writing this post the documentation was a bit misleading. The feature version of the JAVA wrapper for the Client API was 1.4.3 but version of the google plus API in the Developer’s Guide page was 1.2.1 which is incompatible with the 1.4.3 version, so download the 1.5.0 version
There are start sample code provided for some languages wrappers, the one for JAVA is quite good. It shows for instance how get the access token. Let’s make a Servlet Filter (analogous to drps.log about authentication of FB apps that I showed) to do the job of checking or authorising, retrieving access token... It is very simple, but a bit verbose:

public class GoogleAuthFilter implements Filter {
	
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		AccessTokenResponse accessToken = (AccessTokenResponse)req.getSession().getAttribute(MyConstants.ACCESS_TOKEN_RESPONCE_KEY);
		//test to check access credential 
		if(accessToken == null) {
			String code = req.getParameter(MyConstants.CODE_KEY);
			if(code == null) {
				//no code means the user must allow the app access their data
				AuthorizationRequestUrl authUrl = new GoogleAuthorizationRequestUrl(
														MyConstants.CLIENT_ID, 
														MyConstants.REDIRECT_URI, 
														MyConstants.GOOGLE_PLUS_SCOPE_URL);
				resp.sendRedirect(authUrl.build());
			} else {
				//use the code to generate access token
				accessToken = new GoogleAccessTokenRequest.
										GoogleAuthorizationCodeGrant(
												new NetHttpTransport(), 
												new GsonFactory(), 
												MyConstants.CLIENT_ID, 
												MyConstants.CLIENT_SECRET, 
												code, 
												MyConstants.REDIRECT_URI
										).execute();
				req.getSession().setAttribute(MyConstants.ACCESS_TOKEN_RESPONCE_KEY, accessToken);
				resp.sendRedirect(MyConstants.SERVLET_PATH);
			}
		}
		chain.doFilter(req, resp);
	}
}
To get the Plus service client object is also simple and verbose, just snip of a servlet to exemplify:
AccessTokenResponse accessToken = (AccessTokenResponse)req.getSession().getAttribute(MyConstants.ACCESS_TOKEN_RESPONCE_KEY);
GoogleAccessProtectedResource requestInitializer = new GoogleAccessProtectedResource(
					accessToken.accessToken, 
					new NetHttpTransport(), 
					new GsonFactory(), 
					MyConstants.CLIENT_ID, 
					MyConstants.CLIENT_SECRET, 
					accessToken.refreshToken);
Plus plus = new Plus(new NetHttpTransport(), requestInitializer, new GsonFactory());
With the Plus object you can make requests to access people data
String who = req.getParameter(MyConstants.WHO_KEY);
who = who == null ? "me" : who; 
Person me = plus.people.get(who).execute();
You could access the activities too, but just the public.
We are almost finishing. Let’s list (or relist) useful links too:
That is it. Enjoy the Google+ small set of accessible data. And let’s hope we get more soon.

[+/-] show/hide

[drops.log]:More, more, more, plus... Google+

Not long ago I dropped something about the Google+ API release. Well, they do not let any grumpy comments (like mine) get cold. They just released the Google+ Hangout API. Well, of course I need to take a look, make some tests, but I have to much to do right now (Anyone could help with Facebook Real-time Updates on app hosted in Google Appengine?).

They announced a lot of Google+ new features today 1, 2. What do I comment about all that? Google+ really wants to get in your pants pocket (Yeah, lame joke, I know, but I don’t speak English natively), purse, bag, anywhere you keep your smart device. I guess since Facebook is getting closer of Google+ best features it seems Google wants to attract the users by that thing they are always toughing, playing, even doing nasty things: their mobiles (What? Have you known about any nude pictures taken by mobile devices and spread over the internet? Ever heard of sexting? Other bad joke... I know, but sexting is nasty, isn't it? :$).
Jokes apart I guess Google is showing their intelligence and fighting in a place they can do great: smart phones. After all they have the droids in their side... (Enough of silly jokes, bye.)

[+/-] show/hide

2011-09-19

[drops.log]: FHS, where to install stuff?

I have been reading the the Filesystem Hiearchy Standart (FHS) documentation. As I was reading I was checking the contents o different Linux boxes I have access to (debian, ubuntu and CentOS). What got me confused was about the /opt. Since google chrome is installed in the /opt/google/chrome as recommended but besides that /opt directories were empty.

But, wait. Shouldn’t be firefox, libreoffice, pidgin, etc. in /opt, making it full of directories? I lost my reading track and started to search why, in the document and the net. A linux magazine article was helpful. Even if I am not totally sure that is why I guess firefox is in /usr and google chrome is in /opt:
Firefox is shipped with the distribution. Even if optional package say for instance Inkscape is avaliable in the distro repositories the distro guys install it in the /usr. Google chrome in other hand is not provided with the distribution. Since google chrome is not part of the distribution it should be installed in the proper place, in that case /opt.
The point could be incompatibility of Licenses but since Gnome is GPL, Firefox is Mozilla Public License ("MPL"), and LibreOffice LGPL and they are shipped together in one basic, initial instalation of a distro like ubuntu. So I guess I am going to stick with my former explanation.
One could say the point of /usr is to be shareable. Agreed. It is one of the characteristics expressed in the FSH documentation. But, if can firefox installation shareable, why couldn’t chrome?
Anyway, what that conclusion got me was: So if I develop a piece of software I should make it be instalable in the /opt correctly, but if one distro decides to put my software in their product they should move the instalation to /usr. That could get even with different version. Let’s say: the most recent release I program to /opt, and if the distro has frozen that package their instalation is in /usr and if a user download my package and installs it he should get two different ersions, one in the /opt alien to the distro and other in /usr distro official.
I hope I have gotten that right. We must keep FHS on mind when developing.

[+/-] show/hide

2011-09-17

[drops.log]: Google+ API... First Impressions

I tried three times write this drop, but they just become too long. I guess after I am going to write a roadmap + shortcuts to make the first app accessing Google+.

* You will need the new Google Client API big time. That is nor bad neither good.
I tested the JAVA flavour wrapper for the API
- JAVA is naturally verbose, but the Google Client API wrapper to JAVA is too much for my taste... I guess the objective is to make it the most detached possible, even so...
- Documentation is kinda misleading. For instance:
- They divulged the Google Client API, but what I was expecting was the Google+ API, it is not so straightforward to get you need the client API to authenticate and one API for each service to get the wrappers for that service
- The featured version of the Google Client API for JAVA is the 1.4.3, but the Google+ service API JAVA wrapper version 1.2.1 is incompatible with it. So, if you get some error like: java.lang.NoSuchMethodError: com.google.api.client.http.json.JsonHttpParser. download the version 1.5.0 of the client API 1
- I have no idea why my calls for Person.getName() and Person.getNickName() are returning null
* There are a lot of runtime errors out there, if your user has a google account, but no account in the specific service, Google+ in our case, I got 404 error. We should keep this in mind. There are tons of things that could get wrong during the communication and Google recommends that kind error don’t blow in the user face. Let’s pay attention.
+ Google Client/Services API are opensource (they are under the Apache License 2.0)
- The main missing feature is public information is too little. Google justifies that saying is only the first step of a long journey . They should rush, facebook is quickly copying the great features of Google+
+ Google is providing a great set of language wrappers (even if they are in beta, or even alpha). That is a ball facebook drop long ago, and twitter never bothered about
* This API use OAuth 2.0 draft 10, but the wrappers make things simple enough to don’t need to dive in the subject
* You should read the whole documentation of client API in your favourite language before to jump in coding (don’t repeat my mistakes).
* I wonder how we will set the data access. I haven’t read about the access limitations, but I wonder if a app could get in all my post, or photos, or videos sometime. That goes in the opposite direction of specific and limited shares. I guess app could be like elements I put in circles and share with them some amount of data, granular and event specific. I don’t want apps out there accessing all my data similar to facebook.
NOTES:

[+/-] show/hide

2011-09-16

[drops.log]:A definitive future to AI

I am going to start the Stanford AI course in October. I like AI concepts. People think about Terminator when they think about AI and that is plain dummy, I guess. But after this study hint, let’s go to what was in my mind.

Sometimes I wonder what is the computing future. I am sure AI and “smart computing” have a great deal in that future. When I talk about “smart computing” i am not talking about the magazine, I am talking about computers to guess nicely. When a system suggest me similar products based on my or friends’ statical behavior it is a good guess, smart enough. What could AI and smart computational guesses can do for us? Well, predict the future in computing is really messy.
What I know they wont do it, or at least shouldn’t do it is: think for the you. Ultimately, you should make the choices. They could suggest, but you should accept after reasonable thinking. Don’t think because Facebook suggest your friends classification that should be your classification. Amazon says your friends would like some gift, check out their actual wishlist, the one they choose the products, not one made up by their shopping behavior.
So, programmers out there, don’t try to make programs that think instead their users.

[+/-] show/hide

2011-09-14

[drops.log]:Why innovate when you can copy?

What has Facebook done to fight its direct competitors, Twitter and Google+ ? They definitely aren’t standing still. For instance, they enhanced their share feature. It is not as easy and practical as Google+ however. They have launched a Subscribe option. Basically you can provide a Subscribe button on your profile and let people follow you. That is the Twitter main behavior, for sure. So, instead of making innovations are they replicating their competitors’ best features and concepts? That is at least fair keeping in mind how much Google+ copied from them.

Maybe you haven’t seen the presentation that based Google+. It talks a lot about how we keep subjective groups while we establish relationships. Twitter and Google+ acknowledge a simple and obvious behavior: many relationships are asymmetric. They do acknowledge it since who you follow and who follows you, or who is in your or has you in circles are independent sets. My point is: Google+ still is better. Basically everybody is up to be followed, similar to Twitter, but the “sharers” decide who their shares are going to reach. I guess this is the perfect concept. And 140 characters limit and Twitter lists really suck.
Since Facebook is going to just copy their competitors ideas they could just make their share tool equal to Google+, rip off the “add as friend” and just make everybody follow who they want and let to the user choose what to share with who. In short: Since they are coping Google+ anyway, they could just become it and kill this Google attempt. They have best ecosystem, a good API, pages from organizations, a much larger users base and so on. I hope in the process of becoming Google++ they kill the stupid groups. That features is really lame.

[+/-] show/hide