<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Ak4ARH4_cCp7ImA9WhdUFUg.&quot;"><id>tag:blogger.com,1999:blog-4536570343139390436</id><updated>2011-10-02T14:35:45.048+02:00</updated><category term="SOAP" /><category term="Squid" /><category term="http_proxy" /><category term="test" /><category term="setup" /><category term="meta" /><category term="proxy" /><category term="integration" /><category term="python" /><category term="debugging" /><category term="AppEngine" /><category term="email" /><category term="SugarCRM" /><category term="Google" /><category term="gmail" /><category term="update" /><category term="patch" /><category term="paas" /><title>Andrey Andreev's views on everything</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://gwanagwana.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://gwanagwana.blogspot.com/" /><author><name>Andrey Andreev</name><uri>http://www.blogger.com/profile/10536992897184792846</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://bp1.blogger.com/_fBrgmz3_SY0/SDwfsMYLxPI/AAAAAAAAACw/8wPXFeg2kbk/S220/Andreev+01+sw.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/gwanagwana" /><feedburner:info uri="gwanagwana" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;AkEBQnczeip7ImA9Wx9XEUk.&quot;"><id>tag:blogger.com,1999:blog-4536570343139390436.post-8270456698768793707</id><published>2011-01-04T14:14:00.000+01:00</published><updated>2011-01-04T14:44:13.982+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-04T14:44:13.982+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="integration" /><category scheme="http://www.blogger.com/atom/ns#" term="SOAP" /><category scheme="http://www.blogger.com/atom/ns#" term="email" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="gmail" /><category scheme="http://www.blogger.com/atom/ns#" term="SugarCRM" /><title>Automatically importing emails to SugarCRM using custom logic</title><content type="html">&lt;div&gt;&lt;br /&gt;&lt;br /&gt;Some six months ago I accepted a new position with SugarCRM, which I am enjoying enormously. Here's a bit of code that I've sent out as an example a couple of times when advising developers, so I thought I would share it.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;Suppose you want to integrate a legacy email interface into SugarCRM, or that you are using some custom header to identify a customer, or something along those lines. As far as you have a very specific idea of what you want to be doing, you can implement that easily in, for example, Python, as shown below.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;&lt;pre class="brush: python"&gt;&lt;br /&gt;import poplib&lt;br /&gt;from email.Parser import Parser&lt;br /&gt;import email as emaillib&lt;br /&gt;import re&lt;br /&gt;from suds.client import Client&lt;br /&gt;import logging&lt;br /&gt;&lt;br /&gt;#configure logging&lt;br /&gt;logging.basicConfig(level=logging.INFO)&lt;br /&gt;logging.getLogger('suds.client').setLevel(logging.INFO)&lt;br /&gt;&lt;br /&gt;#get email from gmail&lt;br /&gt;host = "pop.gmail.com"&lt;br /&gt;mail = poplib.POP3_SSL(host)&lt;br /&gt;print mail.getwelcome()&lt;br /&gt;print mail.user("SOMETESTEMAILADDR")&lt;br /&gt;print mail.pass_("THEPASSWORD")&lt;br /&gt;print mail.stat()&lt;br /&gt;print mail.list()&lt;br /&gt;print ""&lt;br /&gt;&lt;br /&gt;if mail.stat()[1] &gt; 0:&lt;br /&gt; print "You have new mail."&lt;br /&gt;else:&lt;br /&gt; print "No new mail."&lt;br /&gt;&lt;br /&gt;print ""&lt;br /&gt;&lt;br /&gt;#initialize generic email parser&lt;br /&gt;parser = Parser()&lt;br /&gt;&lt;br /&gt;#process message list&lt;br /&gt;numMessages = len(mail.list()[1])&lt;br /&gt;if numMessages &gt; 0:&lt;br /&gt;&lt;br /&gt;  #initialize SugarCRM Session (login, etc)&lt;br /&gt;  USERNAME= "someusername"&lt;br /&gt;  PASSWORD= "somepassword"&lt;br /&gt;&lt;br /&gt;  SUGAR_SOAP_URL = "http://MYSUGARCRMHOST.URL/soap.php"&lt;br /&gt;  SUGAR_WSDL_URL = SUGAR_SOAP_URL + '?wsdl'&lt;br /&gt;&lt;br /&gt;  #create proxy for the SOAP calls&lt;br /&gt;  sugar = Client(SUGAR_WSDL_URL)&lt;br /&gt;&lt;br /&gt;  #build an authentication object for login&lt;br /&gt;  auth = sugar.factory.create("user_auth")&lt;br /&gt;  auth.user_name = USERNAME&lt;br /&gt;  auth.password = PASSWORD&lt;br /&gt;  auth.version = "1.1"&lt;br /&gt;&lt;br /&gt;  #perform login and keep sessionid for later calls&lt;br /&gt;  session = sugar.service.login(auth, "mailarchiver")&lt;br /&gt;  sessionid = session.id&lt;br /&gt;&lt;br /&gt;  #iterate through the messages and import them in Sugar, associated to a contact with the email&lt;br /&gt;  #address specified in the "EmailToRelate" field in the body. The association can also function trhough&lt;br /&gt;  #email headers, any type of body data that can be looked up, etc.&lt;br /&gt;  for i in range(numMessages):&lt;br /&gt;&lt;br /&gt;    #parse the message&lt;br /&gt;    msg = mail.retr(i+1)[1]&lt;br /&gt;    email = parser.parsestr('\n'.join(msg))&lt;br /&gt;&lt;br /&gt;    #find the email address in the body field with a regexp and store it&lt;br /&gt;    bodyText = email.get_payload()&lt;br /&gt;    m = re.search('^EmailToRelate\: (.*)$', bodyText, re.MULTILINE)&lt;br /&gt;&lt;br /&gt;    searchemail =  m.group(1)&lt;br /&gt;&lt;br /&gt;    #lookup the contact with the email. Normally lookup works easier, but for email addresses of&lt;br /&gt;    #users/leads/contacts use this example&lt;br /&gt;    query = "contacts.id in (SELECT eabr.bean_id FROM email_addr_bean_rel eabr JOIN email_addresses ea ON (ea.id = eabr.email_address_id) WHERE eabr.deleted=0 and ea.email_address = '" + searchemail + "')" &lt;br /&gt;    response = sugar.service.get_entry_list(sessionid,'Contacts',query, '', 0, ['id'],1,0)&lt;br /&gt;    contactid = response.entry_list[0].id&lt;br /&gt;&lt;br /&gt;    #collect the data we will archive in Sugar from the parsed email&lt;br /&gt;    emaildata = [&lt;br /&gt;      {'name' : 'from_addr', 'value' : email.get("From") },&lt;br /&gt;      {'name' : 'to_addrs', 'value' : email.get("To").replace('\n','') },&lt;br /&gt;      {'name' : 'name', 'value' : email.get("Subject") },&lt;br /&gt;      {'name' : 'description', 'value' : email.get_payload() }&lt;br /&gt;    ]&lt;br /&gt;&lt;br /&gt;    #store the email in Sugar, and keep its newly generated id in res&lt;br /&gt;    res = sugar.service.set_entry(sessionid, 'Emails', emaildata)&lt;br /&gt;&lt;br /&gt;    #associate the newly created email with the contact we looked up&lt;br /&gt;    relval = sugar.factory.create("set_relationship_value")&lt;br /&gt;    relval.module1='Contacts'&lt;br /&gt;    relval.module1_id = contactid&lt;br /&gt;    relval.module2='Emails'&lt;br /&gt;    relval.module2_id=res.id&lt;br /&gt;    sugar.service.set_relationship(sessionid, relval)&lt;br /&gt;&lt;br /&gt;#flush and quit&lt;br /&gt;mail.quit()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;The code above fetches an email from gmail, parses its body to find a specific "field", &lt;i&gt;EmailToRelate&lt;/i&gt; in this case, identifies a record within SugarCRM related to the field, stores the email in SugarCRM, and associates it with the record found. The example illustrates using Python and suds for call the SugarCRM SOAP interface, which is really quite easy. I suspect my Python leaves things to be desired, and I will appreciate corrections.&lt;br /&gt;&lt;br/&gt;&lt;br /&gt;On a more general note, I recently had a discussion with a partner regarding the most elegant way to archive emails, independent of the email client the end user is using. At the moment, the best way to archive emails is using our interactive Outlook plugin, available for Outlook 2003, 2007 and 2010. Forwarding the emails to a machine readable mailbox, and having them automatically harvested and imported into Sugar is generic enough, but the lack of interactivity might prevent the system from recognising the user's intent, and lead to archiving the email at the wrong level (e.g. at the Contact level, instead of the Opportunity level, etc). My current thinking is that it would be cool to do forwarding and automatic harvesting, but follow it with an interactive popup within SugarCRM, where the proper association can be defined. This would achieve both platform independence and flexibility. In order to achieve this in a scalable manner, however, one needs a real-time notification mechanism for SugarCRM. I my next post, I will demonstrate a way to build such a mechanism using a simple evented node.js notification server.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4536570343139390436-8270456698768793707?l=gwanagwana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/8270456698768793707?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/8270456698768793707?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gwanagwana/~3/NSvVExOpZwU/automatically-importing-emails-to.html" title="Automatically importing emails to SugarCRM using custom logic" /><author><name>Andrey Andreev</name><uri>http://www.blogger.com/profile/10536992897184792846</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://bp1.blogger.com/_fBrgmz3_SY0/SDwfsMYLxPI/AAAAAAAAACw/8wPXFeg2kbk/S220/Andreev+01+sw.jpg" /></author><feedburner:origLink>http://gwanagwana.blogspot.com/2011/01/automatically-importing-emails-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAEQ3k6fCp7ImA9WxJTFE0.&quot;"><id>tag:blogger.com,1999:blog-4536570343139390436.post-7691387812663568535</id><published>2009-04-21T21:25:00.000+02:00</published><updated>2009-04-22T14:51:42.714+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-22T14:51:42.714+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="debugging" /><category scheme="http://www.blogger.com/atom/ns#" term="meta" /><title>On the meaning of gwana, a simple trick, and social tools for developers</title><content type="html">&lt;p&gt;So, &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman&lt;/a&gt; gave a &lt;a href="http://neuronspark.com/videos/social-networking-for-developers/"&gt;talk&lt;/a&gt; on the usefulness of blogs and social tools to the community of developers, which prompted me to come back here and give you this post.&lt;/p&gt;  &lt;p&gt;On the question of what gwana is – I picked up the word in an article on &lt;a href="http://www.theregister.co.uk/2002/02/08/suns_gwanagwana_mystery/"&gt;The Register&lt;/a&gt; a few years ago. What I liked about it was that it did not seem to mean anything at all, and was however somehow stuck in my head. Soon after that I was debugging an old CGI webapp written in C. It was a time before I had learned to properly use a debugger, so figuring out which code path was taken took me writing some tracing printfs. Finding my tracing output required putting some marker string in the string I was printing, so I ended up using “gwana” for that. After all, it did not seem likely that it would pop up accidentally somewhere in normal output.&lt;/p&gt;  &lt;p&gt;In the tradition of &lt;a href="http://en.wikipedia.org/wiki/Metasyntactic_variables" target="_blank"&gt;metasyntactic variables&lt;/a&gt;, I kept using gwana as my universal marker with no specific meaning. Searching for gwana would take me directly to my tracing outputs, finding it where it didn’t belong meant that I haven’t properly deactivated my tracing statements. Nowadays I catch myself routinely adding it to debug logging statements in order to more easily match a place in code with a line of a log. When having to edit a file without a proper text editor I type in a “gwana” to put a placemark to which I can easily navigate back to.&lt;/p&gt;  &lt;p&gt;And so, a nonsensical word became my personal mark in code and text. This kind of made it suitable for the address of this blog.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4536570343139390436-7691387812663568535?l=gwanagwana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://gwanagwana.blogspot.com/feeds/7691387812663568535/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4536570343139390436&amp;postID=7691387812663568535" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/7691387812663568535?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/7691387812663568535?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gwanagwana/~3/g61mbBY4-QA/on-meaning-of-gwana-simple-trick-and.html" title="On the meaning of gwana, a simple trick, and social tools for developers" /><author><name>Andrey Andreev</name><uri>http://www.blogger.com/profile/10536992897184792846</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://bp1.blogger.com/_fBrgmz3_SY0/SDwfsMYLxPI/AAAAAAAAACw/8wPXFeg2kbk/S220/Andreev+01+sw.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://gwanagwana.blogspot.com/2009/04/on-meaning-of-gwana-simple-trick-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUGRnY6fCp7ImA9WxdRFEw.&quot;"><id>tag:blogger.com,1999:blog-4536570343139390436.post-1731682235059275683</id><published>2008-06-02T16:11:00.000+02:00</published><updated>2008-06-02T16:33:47.814+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-02T16:33:47.814+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="paas" /><category scheme="http://www.blogger.com/atom/ns#" term="AppEngine" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="update" /><category scheme="http://www.blogger.com/atom/ns#" term="http_proxy" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="setup" /><category scheme="http://www.blogger.com/atom/ns#" term="patch" /><category scheme="http://www.blogger.com/atom/ns#" term="Squid" /><category scheme="http://www.blogger.com/atom/ns#" term="proxy" /><title>Getting Google AppEngine update script to work behind a HTTP proxy</title><content type="html">Google announced that AppEngine is now &lt;a href="http://googleappengine.blogspot.com/2008/05/announcing-open-signups-expected.html"&gt;open to the public&lt;/a&gt;! They also announced the pricing for usage beyond the free 5'000'000 pageviews etc, and it seems, hmmm, competitive :). Either way, I had to try it out.&lt;br /&gt;&lt;br /&gt;I had a simple app which I had developed locally in the dev environment Google provides, so I decided to upload this to the cloud. A simple&lt;span style=";font-family:courier new;font-size:85%;"  &gt; ./appcfg.py update MyApp/&lt;/span&gt; should have been all I need to do. However, I am sitting behind a Squid proxy here, so, Google &lt;a href="http://code.google.com/appengine/docs/appcfgpy.html"&gt;instructs&lt;/a&gt; me to set http_proxy in my environment and fire away. I do as Google tells me to do and fail.&lt;br /&gt;&lt;br /&gt;Apparently there is a bug in Python's urllib2, when dealing with HTTPS over Squid. Luckily, patch is available &lt;a href="http://bugs.python.org/issue1424152"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What really got me, and is somewhat puzzling to me still, is that I did not manage to get this running even after this step and doing an:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;export http_proxy="http://my.proxyserver.com:3128/"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I had to do also:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;&lt;br /&gt;export https_proxy="http://my.proxyserver.com:3128/"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And only then it worked. However, now that I got the cookie after the initial login, having only &lt;span style=";font-family:courier new;font-size:85%;"  &gt;http_proxy&lt;/span&gt; set seems to be enough.&lt;br /&gt;&lt;br /&gt;Hope this helps! Let me know if you needed the extra environment variable on the first run. I wonder if it was some glitch with my setup, or if there is something more sinister and worthy of some digging in the Python libs.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;&lt;br /&gt;Andro&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4536570343139390436-1731682235059275683?l=gwanagwana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://gwanagwana.blogspot.com/feeds/1731682235059275683/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4536570343139390436&amp;postID=1731682235059275683" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/1731682235059275683?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/1731682235059275683?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gwanagwana/~3/usjxhyXs3n4/getting-google-appengine-update-script.html" title="Getting Google AppEngine update script to work behind a HTTP proxy" /><author><name>Andrey Andreev</name><uri>http://www.blogger.com/profile/10536992897184792846</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://bp1.blogger.com/_fBrgmz3_SY0/SDwfsMYLxPI/AAAAAAAAACw/8wPXFeg2kbk/S220/Andreev+01+sw.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://gwanagwana.blogspot.com/2008/06/getting-google-appengine-update-script.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4GQXg4fSp7ImA9WxdSFEo.&quot;"><id>tag:blogger.com,1999:blog-4536570343139390436.post-8456435559715504594</id><published>2008-05-22T17:42:00.001+02:00</published><updated>2008-05-22T17:42:00.635+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-22T17:42:00.635+02:00</app:edited><title>Sharenata sianka</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;&lt;object height='350' width='425'&gt;&lt;param value='http://youtube.com/v/4b2WjRjOpQI' name='movie'/&gt;&lt;embed height='350' width='425' type='application/x-shockwave-flash' src='http://youtube.com/v/4b2WjRjOpQI'/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Wonderful Bulgarian [post-punk]/[new wave]/[whatever you wanna call it I love it] from the end of the 80s. &lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4536570343139390436-8456435559715504594?l=gwanagwana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://gwanagwana.blogspot.com/feeds/8456435559715504594/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4536570343139390436&amp;postID=8456435559715504594" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/8456435559715504594?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/8456435559715504594?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gwanagwana/~3/EctmJdRL3pQ/sharenata-sianka.html" title="Sharenata sianka" /><author><name>Andrey Andreev</name><uri>http://www.blogger.com/profile/10536992897184792846</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://bp1.blogger.com/_fBrgmz3_SY0/SDwfsMYLxPI/AAAAAAAAACw/8wPXFeg2kbk/S220/Andreev+01+sw.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://gwanagwana.blogspot.com/2008/05/sharenata-sianka.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ACSXozfSp7ImA9WxdSE0o.&quot;"><id>tag:blogger.com,1999:blog-4536570343139390436.post-1346655311385683856</id><published>2008-05-21T14:08:00.000+02:00</published><updated>2008-05-21T14:09:28.485+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-21T14:09:28.485+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="test" /><title>Technical test</title><content type="html">Here I am, testing Blogger, integration with Disqus, etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4536570343139390436-1346655311385683856?l=gwanagwana.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://gwanagwana.blogspot.com/feeds/1346655311385683856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4536570343139390436&amp;postID=1346655311385683856" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/1346655311385683856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4536570343139390436/posts/default/1346655311385683856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/gwanagwana/~3/7hiAiTJpS6Y/technical-test.html" title="Technical test" /><author><name>Andrey Andreev</name><uri>http://www.blogger.com/profile/10536992897184792846</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="21" height="32" src="http://bp1.blogger.com/_fBrgmz3_SY0/SDwfsMYLxPI/AAAAAAAAACw/8wPXFeg2kbk/S220/Andreev+01+sw.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://gwanagwana.blogspot.com/2008/05/technical-test.html</feedburner:origLink></entry></feed>

