<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>gdata &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/gdata/</link>
	<description>Feed of posts on WordPress.com tagged "gdata"</description>
	<pubDate>Thu, 24 Dec 2009 13:51:11 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[SData in Sage ERP Accpac 6]]></title>
<link>http://smist08.wordpress.com/2009/11/24/sdata-in-sage-erp-accpac-6/</link>
<pubDate>Tue, 24 Nov 2009 15:29:43 +0000</pubDate>
<dc:creator>smist08</dc:creator>
<guid>http://smist08.wordpress.com/2009/11/24/sdata-in-sage-erp-accpac-6/</guid>
<description><![CDATA[One of the big features in Accpac 6 is SData support. What is SData? SData is a web services protoco]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>One of the big features in Accpac 6 is SData support. What is SData? SData is a web services protocol based on REST. What is REST? REST is a web services protocol that is very popular among Internet companies. There are basically two main competing standards for web services. One is SOAP which is promoted by Microsoft, Oracle and IBM; this is a fairly heavy duty protocol which requires a fair bit of infrastructure (which is provided by the companies promoting this protocol). The other is REST which was invented as a University Research project and basically uses existing Web Technologies such as HTTP and RSS to implement a web services protocol. The nice thing about REST is that it doesn’t require any extra middleware. You are basically doing everything via standard web URLs. The infrastructure that supports this is basically just the standard Internet. SData is just an extension to REST, similar to Google’s GData which is also based on REST. REST protocols are used by Google, Amazon, eBay, Yahoo and all the main Internet companies. Gartner estimates that 75% of web services in use on the Internet are REST based. REST/SData also provides a standard mechanism for performing CRUD (create, read, update, delete) on all records.</p>
<p>From Accpac, every Accpac View (or Business Logic Object) will be exposed via SData. This provides third party ISVs a complete, efficient Web Services interface to communicate to Accpac with. Also all Sage applications are being made SData aware, meaning that all Sage applications can manipulate SData Web Services (or feeds). For instance here is some Accpac A/R Customer and G/L Account data displayed within a Sage CRM Dashboard using SData.</p>
<p><a href="http://smist08.wordpress.com/files/2009/11/crmacc.png"><img class="alignnone size-medium wp-image-92" title="crmacc" src="http://smist08.wordpress.com/files/2009/11/crmacc.png?w=300" alt="" width="300" height="235" /></a></p>
<p>From a simple wizard you can select any Accpac SData feed and once you’ve chosen a feed, you can select which columns you wish to display. Additionally Sage CRM and Accpac will be converting to use SData for our integration needs, this transition will occur over several versions of both products. In the same way you will be able to access CRM data from Accpac using SData.</p>
<p>All the new Sage ERP Accpac 6 screens are written entirely using SData. This means the screen can access any Accpac Views via SData, but additionally they can access any SData feeds from any product. In Accpac 5.x, the screen controls were mapped via datasource controls to views and view fields. This was great, but it limited you to only connecting our standard controls to fields in Views developed in our SDK. Now that the controls are mapped to a standards based SData fields, it means they will be able to be connected easily to much more data than just Accapc data. Look for other Sage products to start providing SData interfaces in their coming versions.</p>
<p>Sage is publishing SData as a publicly available standard. You can read all about it at: <a href="http://sdata.sage.com/">http://sdata.sage.com/</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Uncaught exception 'Zend_Gdata_App_HttpException' with message 'Expected response code 200, got 400]]></title>
<link>http://mooncakephp.wordpress.com/2009/11/17/uncaught-exception-zend_gdata_app_httpexception-with-message-expected-response-code-200-got-400/</link>
<pubDate>Tue, 17 Nov 2009 12:18:05 +0000</pubDate>
<dc:creator>joetsuihk</dc:creator>
<guid>http://mooncakephp.wordpress.com/2009/11/17/uncaught-exception-zend_gdata_app_httpexception-with-message-expected-response-code-200-got-400/</guid>
<description><![CDATA[今天我在使用 gdata(來自 PHP Zend framework) 嘗試存取一段youtube video的影片的時候遇到了標題的error. 我使用了半個小時設定一個正確的 Installtio]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>今天我在使用 <a href="http://code.google.com/intl/zh-TW/apis/gdata/articles/php_client_lib.html#gdata-installation">gdata</a>(來自 PHP Zend framework) 嘗試存取一段youtube video的影片的時候遇到了標題的error. 我使用了半個小時設定一個正確的 InstalltionChecker.php, 先排除我的伺服器已經裝有 php-xml libraries, ssl libraries, 但仍然無解. Google 沒有提供一個合用的答案.</p>
<p>最後我發現, 是youtube 判定該 video 違反了某些版權協定, 所以返回了 400錯誤碼, 正解是:</p>
<pre class="brush: php;">
&#60;?php
try {
  $yt = new Zend_Gdata_YouTube();
  $videoEntry = $yt-&#62;getVideoEntry($key);
} catch(Zend_Gdata_App_HttpException e) {
  //handle error
}
?&#62;
</pre>
<p>Today i encountered the above error when i am trying to fetch youtube data given the video id using PHP Zend framework suggested by <a href="http://code.google.com/intl/zh-TW/apis/gdata/articles/php_client_lib.html#gdata-installation">google</a>. I had made half an hour top setup the InstallationChecker.php, which shows the installation had no errors. I further debug using xdebug, cross check php-xml libraries, ssl libraries on the server, but no clue. Google do not provide a solution.</p>
<p>In the end, youtube banned the video because of copyrights, but just throw a response code 400&#8230; to solve it:</p>
<pre class="brush: php;">
&#60;?php
try {
  $yt = new Zend_Gdata_YouTube();
  $videoEntry = $yt-&#62;getVideoEntry($key);
} catch(Zend_Gdata_App_HttpException e) {
  //handle error
}
?&#62;
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Windows 7 - Schneller, aber nicht sicherer]]></title>
<link>http://blog.ebertlang.com/2009/11/13/windows-7-schneller-aber-nicht-sicherer/</link>
<pubDate>Fri, 13 Nov 2009 13:18:18 +0000</pubDate>
<dc:creator>markusknauf</dc:creator>
<guid>http://blog.ebertlang.com/2009/11/13/windows-7-schneller-aber-nicht-sicherer/</guid>
<description><![CDATA[Unser Partner G Data unterzog jüngst Windows 7, das neue Betriebssystem aus dem Hause Microsoft, ein]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Unser Partner <a href="http://www.gdata.de" target="_blank">G Data</a> unterzog jüngst Windows 7, das neue Betriebssystem aus dem Hause Microsoft, einem ausführlichen Sicherheitscheck.</p>
<p>Das Ergebnis: Windows 7 bietet in puncto Sicherheit kaum Neuheiten. Teilweise wurden Sicherheitsfunktionen zugunsten der Bedienbarkeit zurückgefahren. Mit dem Whitepaper <a href="http://www.gdata.de/uploads/media/G_Data_Windows_Seven_Security_10_2009_DE.pdf" target="_blank">Systemsicherheit von Windows 7</a> gibt G Data einen Überblick über die Veränderungen und die weiterhin bestehenden Schwachstellen.</p>
<p>Lesen Sie <a href="http://www.gdata.de/ueber-g-data/pressecenter/pressemeldungen/news-details/article/1393-windows-7-schneller-aber-nich.html" target="_blank">hier</a> den gesamten Artikel.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Spitzenplätze für BitDefender und G Data]]></title>
<link>http://blog.ebertlang.com/2009/10/09/spitzenplatze-fur-bitdefender-und-g-data/</link>
<pubDate>Fri, 09 Oct 2009 04:30:01 +0000</pubDate>
<dc:creator>steffenebert</dc:creator>
<guid>http://blog.ebertlang.com/2009/10/09/spitzenplatze-fur-bitdefender-und-g-data/</guid>
<description><![CDATA[Im jüngsten Test von av-comparatives.org eroberten die von uns vertriebenen Antivirus-Lösungen von B]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Im jüngsten Test von av-comparatives.org eroberten die von uns vertriebenen Antivirus-Lösungen von BitDefender und G Data mit Erkennungsraten von 97,8% bzw. 99,8% wieder Spitzenplätze und wurden jeweils mit dem Zertifikat &#8220;Advanced+&#8221; ausgezeichnet.</p>
<p>Weiterführende Informationen und Details zum Test finden Sie hier:<br />
<a href="http://www.av-comparatives.org/images/stories/test/ondret/avc_report23.pdf" target="_blank">http://www.av-comparatives.org/images/stories/test/ondret/avc_report23.pdf </a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[getAuthUrl Error]]></title>
<link>http://research2009.wordpress.com/2009/10/08/getauthurl-error/</link>
<pubDate>Thu, 08 Oct 2009 18:07:53 +0000</pubDate>
<dc:creator>Dan</dc:creator>
<guid>http://research2009.wordpress.com/2009/10/08/getauthurl-error/</guid>
<description><![CDATA[We&#8217;re getting an error refactoring the whole app so multiple users can log in and get tokens a]]></description>
<content:encoded><![CDATA[We&#8217;re getting an error refactoring the whole app so multiple users can log in and get tokens a]]></content:encoded>
</item>
<item>
<title><![CDATA[Inconsistencies with GData API documentation]]></title>
<link>http://jeungun.wordpress.com/2009/10/08/inconsistencies-with-gdata-api-documentation/</link>
<pubDate>Thu, 08 Oct 2009 16:14:32 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://jeungun.wordpress.com/2009/10/08/inconsistencies-with-gdata-api-documentation/</guid>
<description><![CDATA[I went into a lot of trouble wading through the my code to find out where it broke when I wanted to ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I went into a lot of trouble wading through the my code to find out where it broke when I wanted to get a list of documents stored at GoogleDocs. At this point in using the GData API, I felt confident with my code since I was able to get a lot of other things to work: getting an unauthorized request token, creating an authorization url and upgrading to an access token. There was no reason why my reasoning should break with this feature. It had worked before and thrice. </p>
<p>Soon enough I found out that the culprit was the feed urls I was using. In <a href="http://code.google.com/apis/gdata/oauth.html">one tutorial</a>, they were using this url: </p>
<blockquote>
<p>http://docs.google.com/feeds/documents/private/full</p>
</blockquote>
<p>In another, it was using this one: </p>
<blockquote>
<p>http://docs.google.com/feeds/default/private/full</p>
</blockquote>
<p>I looked back when Dan and I were able to get a list of documents by programming in the main method. </p>
<p>The latter feed url worked but not after a lot of very creative guess work. There&#8217;s a documentation about feeds in the GData APIs. Will read that soon. I am not discounting the possibility that there must be something I&#8217;ve missed. </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Blogger and AuthSub]]></title>
<link>http://neilobremski.wordpress.com/2009/10/08/blogger-and-authsub/</link>
<pubDate>Thu, 08 Oct 2009 05:13:45 +0000</pubDate>
<dc:creator>Neil Obremski</dc:creator>
<guid>http://neilobremski.wordpress.com/2009/10/08/blogger-and-authsub/</guid>
<description><![CDATA[After burning out trying to grok the classes of Zend for working with Blogger and AuthSub, I decided]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>After burning out trying to grok the classes of <a href="http://framework.zend.com/manual/en/zend.gdata.authsub.html">Zend</a> for working with <a href="http://code.google.com/apis/blogger/docs/2.0/developers_guide_protocol.html">Blogger</a> and <a href="http://code.google.com/apis/accounts/docs/AuthForWebApps.html">AuthSub</a>, I decided to <em>roll my own</em>.  Famous last words, especially on my part, but I really decided I could make it simpler for me and other PHP coders.  You decide, here&#8217;s a snippet which authenticates the blog owner, enumerates the 10 most recent posts, and then adds a new one.</p>
<blockquote><pre>&#60;?php
require('../../php/http.php');
require('../../php/blog.php');

// require authentication
$blog = Blog::AuthSub('8273580045515437098');

?&#62;&#60;html&#62;&#60;head&#62;&#60;title&#62;Blog class Test&#60;/title&#62;&#60;/head&#62;&#60;body&#62;
&#60;?php

foreach ($blog-&#62;posts() as $post) {
  echo('&#60;h2&#62;&#60;a href="' . $post['href'] . '"&#62;' .
    htmlspecialchars($post['name']) . '&#60;/a&#62;&#60;/h2&#62;');
  echo($post['body']);
  echo('&#60;p&#62;&#60;em&#62;Posted on ' . date(DATE_RSS, $post['date']) . ' in ' .
    implode(", ", $post['tags']) . '&#60;/em&#62;&#60;/p&#62;');
}

$blog-&#62;post('Breaking News',
  '&#60;p&#62;Dis here is da body&#60;/p&#38;gt',
  array('news'), '10/07/2009');
?&#62;
&#60;/body&#62;&#60;/html&#62;&#60;?php $blog-&#62;close();</pre>
</blockquote>
<p>The <b>AuthSub</b> static function starts up the session, if it wasn&#8217;t already, and redirects to Google if the proper authentication is not found.  Alternatively, if you prefer to have complete control, you can instantiate the Blog class through its constructor and pass it a configured CurlHttpRequest (that&#8217;s my new HTTP class <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ).  It must be called before there is any output since it attempts to redirect.</p>
<p>Next, <b>posts()</b> returns the latest entries.  The two optional parameters are an array of tags and a maximum count (defaults to 10).  Each post is represented by an associative array containing the following:</p>
<ul>
<li><b>name</b>: Title of the post.</li>
<li><b>body</b>: XHTML contents.</li>
<li><b>tags</b>: Array of tags.</li>
<li><b>date</b>: Published date in the form of a timestamp number (can be passed to date() function).</li>
<li><b>href</b>: Permanent URL.</li>
<li><b>uuid</b>: Unique identifier.</li>
</ul>
<p>Finally, there is <b>post()</b> which obviously creates a new blog post.  The parameters are name, body, tags, and date; only the first two are required.  It returns true/false and, like all the other methods here, will use trigger_error() to indicate issues.  That&#8217;s very low-tech, I know, and the cool thing is exceptions.  However, PHP exceptions still feel unnatural given its massive &#8220;legacy&#8221; function set, and I prefer to see the problems right away in the output.  Along the same lines, array() is much easier than XML/DOM, so the result is this <a href="http://code.google.com/p/obremsdk/source/browse/trunk/php/http.php">quick</a> and <a href="http://code.google.com/p/obremsdk/source/browse/trunk/php/blog.php">crude</a> code.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Resolving multiple user conflict]]></title>
<link>http://research2009.wordpress.com/2009/10/05/resolving-multiple-user-conflicts/</link>
<pubDate>Mon, 05 Oct 2009 17:46:04 +0000</pubDate>
<dc:creator>Dan</dc:creator>
<guid>http://research2009.wordpress.com/2009/10/05/resolving-multiple-user-conflicts/</guid>
<description><![CDATA[I am currently modifying code so that multiple users can login, be authorized and ba able to add rub]]></description>
<content:encoded><![CDATA[I am currently modifying code so that multiple users can login, be authorized and ba able to add rub]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Calender. Multiple calendars with Zend]]></title>
<link>http://farbfinal.wordpress.com/2009/10/05/google-calender-multiple-calendars-with-zend/</link>
<pubDate>Mon, 05 Oct 2009 15:55:24 +0000</pubDate>
<dc:creator>ffstefan</dc:creator>
<guid>http://farbfinal.wordpress.com/2009/10/05/google-calender-multiple-calendars-with-zend/</guid>
<description><![CDATA[problem: accessing multiple google calenders owned by one user with Zend Framework (GData). solution]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>problem: </strong>accessing multiple google calenders owned by one user with Zend Framework (GData).</p>
<p><strong>solution:</strong> Using proper calendar IDs as user. see <a href="http://www.mail-archive.com/google-calendar-help-dataapi@googlegroups.com/msg03173.html">this post for details and read it carefully!</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[OAuth with Client Libraries (GData, Twitter4J) and Spring MVC]]></title>
<link>http://jeungun.wordpress.com/2009/10/03/oauth-with-client-libraries-gdata-twitter4j-and-spring-mvc/</link>
<pubDate>Sat, 03 Oct 2009 16:30:52 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://jeungun.wordpress.com/2009/10/03/oauth-with-client-libraries-gdata-twitter4j-and-spring-mvc/</guid>
<description><![CDATA[This is a refactored version of my post, Quick and Dirty Oauth for Twitter4J OAuth for Web Apps This]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>This is a refactored version of my post, <a href="http://jeungun.wordpress.com/2009/09/03/quick-and-dirty-twitter4j-oauth-for-web-apps/">Quick and Dirty Oauth for Twitter4J OAuth for Web Apps</a></p>
<p>This is also  the result of my work on a <a href="http://jeungun.wordpress.com/2009/10/02/problem-with-getting-a-gdata-unauthorized-request-token/">a problem I had with getting a unauthorized request tokens using GData</a>.</p>
<p>Basically I found that</p>
<p>1. Whatever you do (regardless if you&#8217;re using Servlets or Spring MVC), never maintain state in a servlet or a Spring MVC controller because GData and Twitter4J client libraries maintain state.</p>
<p>2. It&#8217;s impossible to wire them in Spring because they maintain state.</p>
<p>I think the best way to use Spring for OAuth is by using a MultiActionController with two methods:</p>
<blockquote><p><strong>authorization()</strong><br />
to print the authorization url</p>
<p><strong>callback() </strong><br />
where the provider will go after the user has authorized it to allow the consumer to access the user&#8217;s account in the provider</p></blockquote>
<p>Here&#8217;s what it looks like:</p>
<pre class="brush: java;">
public class OAuthAuthorizeController extends MultiActionController {
public ModelAndView authorize(HttpServletRequest request,
			HttpServletResponse response){

       //authorization code here

}

public ModelAndView callback(HttpServletRequest request,
			HttpServletResponse response){
       //callback code here

}
}
</pre>
<p>With OAuth client libraries there is less need for url rewriting and doing manual get requests.</p>
<p>But the best way to implement the libraries in your code is to program them to an interface, encapsulating what varies because each client library is used differently.</p>
<pre class="brush: java;">
public interface Provider {
public String getAuthUrl() throws OAuthProviderException;
public UserOAuthAccessToken getAccessToken(String token,String tokenSecret)
}
</pre>
<p>The rationale behind this is that the Spring controller we have shouldn&#8217;t have to know what provider he is dealing with. This makes code loosely coupled.</p>
<p>So if you want your controller to deal with GData or Twitter using the Twitter4J and GData libraries, implement the Provider interface and code in the implementation:</p>
<pre class="brush: java;">
public class GoogleDocs/Twitter4JClient implements Provider {
     public String getAuthUrl(){
        //GData or Twitter4J specific code here
     }
    public UserOAuthAccessToken getAccessToken(){
       //GData or Twitter4J specific code here
    }
}
</pre>
<p><a href="http://code.google.com/apis/documents/docs/3.0/developers_guide_java.html#AuthOAuth">GData specific code</a> can be found here<br />
Twitter4J well <a href="http://jeungun.wordpress.com/2009/09/03/quick-and-dirty-twitter4j-oauth-for-web-apps/">here</a>. Haha.</p>
<p>Use an abstract factory method to return the specific implementation to the controllers:</p>
<pre class="brush: java;">
private Provider getProvider(String providerRequested){
	Provider provider = null;
	if (providerRequested is googledocs){
		provider = new GoogleDocs();
	}
        if (providerRequested is Twitter) {
               provider = new Twitter4JClient();
        }
	return provider;
}
</pre>
<p>This is what the Spring MVC controller will look like when it&#8217;s done:</p>
<pre class="brush: java;">
public class OAuthAuthorizeController extends MultiActionController {
public ModelAndView authorize(HttpServletRequest request,
			HttpServletResponse response){

         Provider provider = getProvider(&#34;Twitter&#34;/&#34;GoogleDocs&#34;);
         String authUrl = provider.getAuthUrl();
         return new ModelAndView(&#34;view&#34;,&#34;authUrl&#34;,authUrl);

}

public ModelAndView callback(HttpServletRequest request,
			HttpServletResponse response){
       Provider provider = getProvider(&#34;GoogleDocs&#34;/&#34;Twitter&#34;);
       UserOAuthAccessToken accessToken = provider.getOAuthAccessToken();
       //some other logic you have to do
}
private Provider getProvider(String providerRequested){
	Provider provider = null;
	if (providerRequested is googledocs){
		provider = new GoogleDocs();
	}
        if (providerRequested is Twitter) {
               provider = new Twitter4JClient();
        }
	return provider;
}
}
</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Problem with getting a GData Unauthorized Request Token]]></title>
<link>http://jeungun.wordpress.com/2009/10/02/problem-with-getting-a-gdata-unauthorized-request-token/</link>
<pubDate>Fri, 02 Oct 2009 04:14:48 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://jeungun.wordpress.com/2009/10/02/problem-with-getting-a-gdata-unauthorized-request-token/</guid>
<description><![CDATA[Last Friday Dan and I worked on accessing a user&#8217;s Google Docs via OAuth. We were able to make]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Last Friday Dan and I worked on accessing a user&#8217;s Google Docs via OAuth. We were able to make it work except that I found out that our solution doesn&#8217;t scale!</p>
<p><strong>Our observations are</strong></p>
<p>1. Two or more users getting an unauthorized request token returns an invalid token to one of the users.</p>
<p>2. Two or more users getting an unauthorized request token in succession returns an invalid token to the last person who requests. The latter can try again after a certain time after the last person has finished accessing his/her google docs. </p></blockquote>
<p>We followed are the tutorials for accessing Gdata using Oauth at the Gdata website and used the Gdata Java libraries.  </p>
<p><strong>I think the problems are</strong></p>
<p><!--more--><br />
1. <strong>that the helper classes that come in with the libraries are instantiated only once for the whole app (a singleton).</strong> Meaning any client who visits the app and uses the same instance to connect to google via oauth uses the same instance every time. </p>
<p>2. <strong>the helper classes are maintaining state</strong>, hence the invalid token received by another user while someone is still &#8220;using&#8221; our app to access his/her google docs. This is the same problem that I have with using Twitter4j, you can&#8217;t wire them as a singleton because they&#8217;re maintaining state. </p>
<p>If that&#8217;s the case, then I should probably remove this line of code in our controllers: </p>
<pre class="brush: java;">
public class GoogleOauthController extends MultiActionController {
	...
	private GoogleOAuthParameters oAuthParameters;
	private GoogleOAuthHelper oAuthHelper;
        ...
</pre>
<p>and refactor this by instantiating one instance of GoogleOAuthParameters and GoogleOAuthHelper per invokation of any of the methods in the controllers that make use of them. I&#8217;ll be able to do this using the abstract factory method or an abstract factory class which I&#8217;ve just finished reading about this week! That came at just the right time, thank God for my book Head First Design patterns. </p>
<p><strong>But which refactoring to do?</strong></p>
<p>I think the<strong> abstract factory method</strong> is more appropriate although it shouldn&#8217;t be called abstract because I don&#8217;t expect any controller to extend the controller I am going to build for Oauth. I&#8217;ll call my solution the oauth-factory-method.</p>
<p>But on the other hand, I might need the same functionality of the oauth-factory-method so that oauth controllers that have provider specific logic can use the  oauth-factory-method to get the helper classes that they need and more importantly that are otherwise needed in a lot of other controllers. </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Problem with getting a GData Unauthorized Request Token]]></title>
<link>http://research2009.wordpress.com/2009/10/02/problem-with-getting-a-gdata-unauthorized-request-token/</link>
<pubDate>Fri, 02 Oct 2009 04:06:45 +0000</pubDate>
<dc:creator>Jose  Asuncion</dc:creator>
<guid>http://research2009.wordpress.com/2009/10/02/problem-with-getting-a-gdata-unauthorized-request-token/</guid>
<description><![CDATA[Last Friday Dan and I worked on accessing a user&#8217;s Google Docs via OAuth. We were able to make]]></description>
<content:encoded><![CDATA[Last Friday Dan and I worked on accessing a user&#8217;s Google Docs via OAuth. We were able to make]]></content:encoded>
</item>
<item>
<title><![CDATA[Problems with GData Request Token]]></title>
<link>http://research2009.wordpress.com/2009/10/01/gdata-exceptions-and-tokens/</link>
<pubDate>Thu, 01 Oct 2009 07:29:52 +0000</pubDate>
<dc:creator>Dan</dc:creator>
<guid>http://research2009.wordpress.com/2009/10/01/gdata-exceptions-and-tokens/</guid>
<description><![CDATA[We have successfully used GData libraries to access a user&#8217;s Google Docs. But we encountered p]]></description>
<content:encoded><![CDATA[We have successfully used GData libraries to access a user&#8217;s Google Docs. But we encountered p]]></content:encoded>
</item>
<item>
<title><![CDATA[Picasa GData on AppEngine]]></title>
<link>http://javafarts.wordpress.com/2009/09/29/picasa-gdata-on-appengine/</link>
<pubDate>Tue, 29 Sep 2009 20:31:18 +0000</pubDate>
<dc:creator>Yang</dc:creator>
<guid>http://javafarts.wordpress.com/2009/09/29/picasa-gdata-on-appengine/</guid>
<description><![CDATA[Had lot of trouble figuring this one out. Created a Google Web Application on Eclipse Downloaded GDa]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Had lot of trouble figuring this one out.</p>
<ul>
<li>Created a Google Web Application on Eclipse</li>
<li>Downloaded GData Java Client jars from <a href="http://code.google.com/p/gdata-java-client/downloads/list">here</a></li>
<li>Extracted the latest src zip 1.38 and added all the jars to a User Library(GData)</li>
<li>Added the GData to the project libraries</li>
<li>Copied all the jars from above into the project WEB-INF/lib folder</li>
<li>Put the following code in the servlet</li>
</ul>
<p style="padding-left:30px;"><code>OutputStream out = resp.getOutputStream();</code><br />
<code>PicasawebService myService = new PicasawebService("exampleCo-exampleApp-1");</code><br />
<code>try {</code><br />
<code>myService.setUserCredentials("<em>user@gmail.com</em>", "<em>password</em>");</code><br />
<code>} catch (AuthenticationException e) {</code><br />
<code>e.printStackTrace();</code><br />
<code>}</code><br />
<code>URL feedUrl = new URL("http://picasaweb.google.com/data/feed/api/user/<em>username</em>?kind=album&#38;access=all");</code><br />
<code>try {</code><br />
<code>UserFeed myUserFeed = myService.getFeed(feedUrl, UserFeed.class);</code><br />
<code>for (AlbumEntry myAlbum : myUserFeed.getAlbumEntries()) {</code><br />
<code>out.write(myAlbum.getTitle().getPlainText().getBytes());</code><br />
<code>}</code><br />
<code>} catch (ServiceException e) {</code><br />
<code>e.printStackTrace();</code><br />
<code>}</code></p>
<p>And saw it all blow up on my face once it was deployed to app engine. Googling around found the fix.</p>
<p>Add the following to the appengine-web.xml.</p>
<p style="padding-left:30px;"><code>&#60;system-properties&#62;</code><br />
<code>&#60;property name="com.google.gdata.DisableCookieHandler" value="true"/&#62;</code><br />
<code>&#60;/system-properties&#62;</code></p>
<p>Deploy and Run it again. Works like a charm.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Supportnet News: Virenschutz "Made in Germany" erhält Bestnoten]]></title>
<link>http://blog.ebertlang.com/2009/09/22/supportnet-news-virenschutz-made-in-germany-erhalt-bestnoten/</link>
<pubDate>Tue, 22 Sep 2009 14:40:31 +0000</pubDate>
<dc:creator>markusknauf</dc:creator>
<guid>http://blog.ebertlang.com/2009/09/22/supportnet-news-virenschutz-made-in-germany-erhalt-bestnoten/</guid>
<description><![CDATA[In einem aufwändigen Einzeltest nahm die Redaktion G Data TotalCare 2010 genauestens unter die Lupe.]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>In einem aufwändigen Einzeltest nahm die Redaktion G Data TotalCare 2010 genauestens unter die Lupe.</p>
<p>Das Ergebnis: In allen relevanten Punkten überzeugte das Produkt des deutschen Herstellers die Tester von Virus Bulletin:</p>
<p>&#8220;In vielen Tests hat G Data bereits seine konstant hervorragende Schadcode-Erkennung unter Beweis gestellt. […] Überwältigt vom Funktionsumfang dieser Suite, kommen wir zum Ende dieses Berichts und bleiben gänzlich beeindruckt. G Data punktet besonders bei der Oberfläche, hier wartet es mit vielen kleinen Wundern auf, die sicherlich auch technisch weniger versierte Anwender ansprechen. G Data hat die Geschwindigkeit seines Produkts erheblich verbessert, ohne dabei Abstriche bei der Sicherheit einzugehen. Das Problem der starken Systembelastung, die viele Hersteller davon abhält zwei Virenengines einzusetzen, hat G Data als echter Major Player der Sicherheitsszene hervorragend gelöst.&#8221;</p>
<p>Den Artikel finden Sie hier:<strong> </strong><a href="http://www.supportnet.de/newsthread/2263461" target="_blank">http://www.supportnet.de/newsthread/2263461</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[G Data: la line up 2010 dei suoi software per la sicurezza informatica]]></title>
<link>http://pcsicuro.wordpress.com/2009/09/21/g-data-la-line-up-2010-dei-suoi-software-per-la-sicurezza-informatica/</link>
<pubDate>Mon, 21 Sep 2009 14:34:01 +0000</pubDate>
<dc:creator>pcsicuro</dc:creator>
<guid>http://pcsicuro.wordpress.com/2009/09/21/g-data-la-line-up-2010-dei-suoi-software-per-la-sicurezza-informatica/</guid>
<description><![CDATA[G Data ha reso disponibili i nuovi software per la sicurezza informatica 2010 che comprende: Antivir]]></description>
<content:encoded><![CDATA[G Data ha reso disponibili i nuovi software per la sicurezza informatica 2010 che comprende: Antivir]]></content:encoded>
</item>
<item>
<title><![CDATA[Hintergrundpapier: Wie kommt Schad-Code auf den Firmenrechner?]]></title>
<link>http://blog.ebertlang.com/2009/09/03/hintergrundpapier-wie-kommt-schad-code-auf-den-firmenrechner/</link>
<pubDate>Thu, 03 Sep 2009 16:47:33 +0000</pubDate>
<dc:creator>markusknauf</dc:creator>
<guid>http://blog.ebertlang.com/2009/09/03/hintergrundpapier-wie-kommt-schad-code-auf-den-firmenrechner/</guid>
<description><![CDATA[Die Spezialisten Ralf Benzmüller und Werner Klier unseres Sicherheitspartners G DATA analysieren und]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Die Spezialisten Ralf Benzmüller und Werner Klier unseres Sicherheitspartners <a href="http://www.gdata.de" target="_blank">G DATA</a> analysieren und erklären in einem aktuellen Hintergrundpapier sehr übersichtlich und ausführlich, wie Schad-Software auf Firmenrechner kommt.</p>
<p>Von Informationen darüber, wie Cyber-Kriminelle Geld verdienen, bis hin zum Ablauf einer typischen Infektionswelle, bieten die Mitarbeiter des G DATA Security Labs einen umfassenden Überblick über das leider immer noch top-aktuelle Thema Malware im Unternehmen.</p>
<p>Das Whitepaper im PDF-Format kann <a href="http://www.gdata.de/uploads/media/Whitepaper_Malware_auf_Firmenrechnern_7_2009_DE.pdf" target="_self">hier</a> kostenlos geladen werden.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[gdata copier and docs.google.com backup]]></title>
<link>http://gnuyoga.wordpress.com/2009/08/15/gdata-copier-and-scrum-sheet-backup/</link>
<pubDate>Sat, 15 Aug 2009 16:43:00 +0000</pubDate>
<dc:creator>gnuyoga</dc:creator>
<guid>http://gnuyoga.wordpress.com/2009/08/15/gdata-copier-and-scrum-sheet-backup/</guid>
<description><![CDATA[I had some time to explore gdatacopier. My idea was to figure out a way to backup docs.google.com. W]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://gnuyoga.wordpress.com/files/2009/08/fullscreencapture15-08-20091034081.jpg"><img class="alignright" style="border:0 initial initial;" src="http://gnuyoga.wordpress.com/files/2009/08/fullscreencapture15-08-20091034081.jpg?w=300" border="0" alt="" width="180" height="101" /></a><br />
I had some time to explore gdatacopier. My idea was to figure out a way to backup docs.google.com. We in Openbravo use a lot of docs.google.com and we wanted to make sure its backed up just in case google is not reachable or if it crashes <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>gdatacopier is a wrapper around google api to export/import documents from doc.google.com at the moment its installed in our irc.openbravo and i used the following script to further simplify the usage.</p>
<pre><span style="font-family:Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;line-height:19px;white-space:normal;font-size:13px;">So here we are with a way of automated backup of docs.google.com</span></pre>
<p>My machine:<br />
- Amazon EC2 Instance (type: small)<br />
- OS &#8211; gentoo with python 2.6</p>
<p>steps i followed:</p>
<ul>
<li>emerge -av setuptools</li>
<li>easy_install gdata</li>
<li>download and unzip http://code.google.com/p/gdatacopier/ (i unzipped in /usr/local/src/)</li>
<li>save the following in a file (say gdoc_backup.sh)</li>
<pre class="brush: bash;">

#!/bin/bash
#
DATE=`date +%d`
DEST_DIR=&#34;/tmp/$DATE&#34;
USERNAME=&#34;USER@gmail.com&#34;
PASSWORD=&#34;PASSWORD&#34;
mkdir -p $DEST_DIR
/usr/local/src/gdatacopier-1.0.2/gdoc-cp.py -u $USERNAME -p $PASSWORD --google-id all --local $DEST_DIR --export default
</pre>
<li>run the above script after updating USER and PASSWORD</li>
</ul>
<p>if you wish you can add it to a cronjob. This will make full automated backup of docs.google.com</p>
<p>WARNING: time it takes depends on number of documents in docs.google.com</p>
<p>reference:</p>
<p>http://code.google.com/p/gdatacopier/</p>
<p><a href="http://picasa.google.com/blogger/" target="ext"><img src="http://photos1.blogger.com/pbp.gif" border="0" alt="Posted by Picasa" align="middle" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Windows 7]]></title>
<link>http://obigc.wordpress.com/2009/08/08/windows-7/</link>
<pubDate>Sat, 08 Aug 2009 20:15:40 +0000</pubDate>
<dc:creator>obigc</dc:creator>
<guid>http://obigc.wordpress.com/2009/08/08/windows-7/</guid>
<description><![CDATA[So ich hatte die tausenden Abstürze in den letzten Wochen von Vista so satt, dass ich jetzt Windows ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>So ich hatte die tausenden Abstürze in den letzten Wochen von Vista so satt, dass ich jetzt Windows 7 installiert habe.</p>
<p>Es ist jetzt 22:13 und ich habe es geschafft alle Treiber die eigentlich für Vista sind zu installieren und GDATA 2010 aufzuspielen.</p>
<p>Das Vista davor hab ich mit &#8220;format c:&#8221; leider nicht löschen können.<br />
Ich habe jedoch System32 gelöscht &#8211; das bekam Windows nicht so gut.</p>
<p>Mein jetziges System läuft (noch) recht stabil und ich hoffe dass es so bleibt <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GData Unable to read response, or response is empty]]></title>
<link>http://dashasalo.wordpress.com/2009/07/27/gdata-unable-to-readresponse-or-response-is-empty/</link>
<pubDate>Mon, 27 Jul 2009 17:57:52 +0000</pubDate>
<dc:creator>Dasha</dc:creator>
<guid>http://dashasalo.wordpress.com/2009/07/27/gdata-unable-to-readresponse-or-response-is-empty/</guid>
<description><![CDATA[Weird thing happened to my GData application &#8211; it started throwing &#8220;Unable to readrespon]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Weird thing happened to my GData application &#8211; it started throwing &#8220;Unable to readresponse, or response is empty&#8221; error on upload. The only thing to matter seemed to be a file size.</p>
<p>After some time of serching the Internet found the solution &#8211; try to increase timeout limit in Zend/Htt/client.php script. It set to 10 seconds by default. I changed to 20 and it solved the problem.</p>
<p>Hope it will help someone too!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[GData Api and JSON feed generation from java]]></title>
<link>http://achorniy.wordpress.com/2009/07/10/gdata-api-and-json-feed-generation-from-java/</link>
<pubDate>Fri, 10 Jul 2009 19:20:00 +0000</pubDate>
<dc:creator>Andrey Chorniy</dc:creator>
<guid>http://achorniy.wordpress.com/2009/07/10/gdata-api-and-json-feed-generation-from-java/</guid>
<description><![CDATA[I found that google GData API allow you to access and manage almost all google-services (like Calend]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I found that <a href="http://code.google.com/apis/gdata">google GData API</a> allow you to access and manage almost all google-services (like Calendar, Picassa, Blogger). It give you numerous ways to do that &#8211; via java, PHP, javascript or pure HTTP/XML feeds. very powerful. great work!<br />
And on the moment there are a lot of components exists which use that API.</p>
<p>But components I need require JSON feed which could be generated by HTTP request to google Calendar-Service, but the problem is I don&#8217;t want to put my data here to access it, I just need to generate JSON from my events.<br />
Unfortunately I don&#8217;t find the solution in java-gdata API for that, what I find was only the small notice in documentation</p>
<blockquote><p>The XmlWriter class exposes a number of protected methods that enable it to be subclassed for the purposes of customizing its output.  See {@link com.google.javascript.util.JsonWriter} for an example.</p></blockquote>
<p>Hey, they have the solution for my problem! But in reality there is no such class (I will be very helpful for somebody who can point me to the source/jar with that file) But it seems it only the notice in documentaiton which express one of the the design point for that class.</p>
<p>Ok, it&#8217;s not great, but I want that JSON to be generated and I wrote my own implementation of JsonWriter which use <a href="http://www.json.org/java/index.html">org.json</a> implementation. It was not easy since I don&#8217;t find anything except that <a href="http://code.google.com/apis/gdata/json.html#Background">draft comparison of XML and JSON</a> formats.<br />
So actually I based on the generateAtom() method of BaseFeed and write JsonWriter implementation which was tested by using it with google gdata javascript api, which successfully transform it to the CalendarEventFeed/CalendarEvent objects.</p>
<p>I will update it later with sources and comments. Implementation is in really draft (but working) state.<br />
The open question for me is how that changes could be promoted to a google-community/google data-api research group.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[gdata.finance]]></title>
<link>http://thesweeheng.wordpress.com/2009/06/07/gdata-finance/</link>
<pubDate>Sat, 06 Jun 2009 20:45:17 +0000</pubDate>
<dc:creator>thesweeheng</dc:creator>
<guid>http://thesweeheng.wordpress.com/2009/06/07/gdata-finance/</guid>
<description><![CDATA[My contributions (gdata.finance module) to the Google Data APIs Python Client Library has been accep]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>My contributions (gdata.finance module) to the <a href="http://code.google.com/p/gdata-python-client/" target="_blank">Google Data APIs Python Client Library</a> has been accepted into version 1.3.3 of the library.</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
