<?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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D04ER3kyfyp7ImA9WxJVFEg.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656</id><updated>2009-07-01T06:45:06.797-07:00</updated><title>Dy-Verse</title><subtitle type="html">Code a piece of my life.....</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://dy-verse.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>186</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/2.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><link rel="self" href="http://feeds.feedburner.com/Dy-verse" type="application/atom+xml" /><feedburner:emailServiceId>Dy-verse</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;D04ER3c9fCp7ImA9WxJVFEg.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-9202162805417148144</id><published>2009-07-01T06:39:00.001-07:00</published><updated>2009-07-01T06:45:06.964-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T06:45:06.964-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reddit" /><category scheme="http://www.blogger.com/atom/ns#" term="reddit bar" /><title>Update to Reddit Bar</title><content type="html">Here is a quick update to the &lt;a href="http://blog.reddit.com/2008/09/crowbar-headcrab-and-half-life-strategy.html"&gt;reddit bar&lt;/a&gt; greasemonkey script that I had written. Looks like the id of the title is now removed and this led the greasemonkey script to stop functioning. A quick fix and it is back to normal.&lt;br /&gt;Instead of relying on the id now, we iterate through all the tags that have the "title" class. This also selects the hyperlink to the article. To find this from the array of "title" class tags, we do a simple match to check if the tag has the document's title as the innerHTML. The title of the window has the "name of the story : Reddit". If the node is a link and the innerHTML does have the appropriate part of the document title, it is returned as the targetURL which should be used for the iFrame. Back to normal, I can not upmod stories right from the comments page. You can check out the script &lt;a href="http://userscripts.org/scripts/show/45848"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-9202162805417148144?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/yuizvp-CEa8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/9202162805417148144/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=9202162805417148144" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/9202162805417148144?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/9202162805417148144?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/yuizvp-CEa8/update-to-reddit-bar.html" title="Update to Reddit Bar" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/07/update-to-reddit-bar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMMQH8yfip7ImA9WxJVEkU.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-1013347053622900313</id><published>2009-06-25T05:55:00.000-07:00</published><updated>2009-06-29T06:34:41.196-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-29T06:34:41.196-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitteybot" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>TwitteyBot updates</title><content type="html">I had written a &lt;a href="http://code.google.com/appengine"&gt;Google app engine&lt;/a&gt; based application to create and manage bots that feed data into twitter. The application is similar to what &lt;a href="http://twitterfeed.com/"&gt;twitterfeed&lt;/a&gt; does, with some additions. The applications is now up and running at &lt;a href="http://dy-verse.blogspot.com/"&gt;http://twitteybot.appspot.com&lt;/a&gt; where you can register to activate feeds.&lt;br /&gt;The data structure used is simple, but I am afraid it may not stand up to the scalability requirements. The code is hosted at &lt;a href="http://code.google.com/p/twitteybot/"&gt;http://code.google.com/p/twitteybot&lt;/a&gt;.&lt;br /&gt;The persistence object is structured as User &gt;  List of Twitter Accounts &gt; List of Feeds &gt; List of Status Updates. Being a unidirectional owned relationship, when the status messages are fetched from the feed, they cannot be directly inserted into the Status Updates object without a reference to the user. Another problem with the status fetch cron job is that currently it requires a user name. This also has to be changed before the bot is fully functional. The twitter accounts also require username/passwords. These can be changed to support OAuth, but thats something for the future. The user interface is also plain HTML based, it has to be changed to make AJAX changes to the database. That should make the product more or less complete.&lt;br /&gt;On the content side, there still needs to be work for getting content for bots. I was planning on bots for The Bhagwad Gita and Thirukurals. The Bhagwad Gita is on a webpage, not parsable by Yahoo mail. I would have to &lt;a href="http://curl.haxx.se/"&gt;curl&lt;/a&gt; (download) it all to a text file and then upload the file. Watch out &lt;a href="http://www.space.com/spacewatch/index.html"&gt;this space&lt;/a&gt; for updates and please do drop a comment if you would like to install the bot in your app engine account.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-1013347053622900313?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/ztNlv-ldaBE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/1013347053622900313/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=1013347053622900313" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1013347053622900313?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1013347053622900313?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/ztNlv-ldaBE/twitteybot-updates.html" title="TwitteyBot updates" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/06/twitteybot-updates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNR3s6fyp7ImA9WxJWE00.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-655213467344948263</id><published>2009-06-17T23:25:00.000-07:00</published><updated>2009-06-17T23:59:56.517-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-17T23:59:56.517-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gids" /><title>Using Bit.ly to track Gmail logins.</title><content type="html">I had &lt;a href="http://dy-verse.blogspot.com/2009/01/gmail-ids-version-alpha.html"&gt;written&lt;/a&gt; a Gmail gadget that lets you track your usage of gmail. The tracking data was stored inside your own Google Calendar. The calendar was also used to send SMS messages if anomalies were detected in logging into the account.&lt;br /&gt;The only think the gadget seemed to lack was visualization. I wanted to use Google visualization some day, but could never find enough time to get it done. That is when I decided to piggy back on the visualization capabilities that &lt;a href="http://bit.ly"&gt;bit.ly&lt;/a&gt; &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; provides. I had &lt;a href="http://dy-verse.blogspot.com/2009/04/tracking-those-stalkers-on-orkut.html"&gt;written&lt;/a&gt; about the way to track rogue visitors. The same scheme can be applied to this Gadget also.&lt;br /&gt;An extra link was added at the bottom of the gadget where the user can specify the bit.ly URL. This is saved as a user preference and an invisible image with this link is appended everytime the gadget is loaded. Since a call is made to the bit.ly url, the access is tracked. The code is now uploaded to &lt;a href="http:%5C%5Cgmailids.appspot.com"&gt;http:\\gmailids.appspot.com&lt;/a&gt;. The source code is also available &lt;a href="http://code.google.com/p/gids/"&gt;here&lt;/a&gt;. To enable this change, you may have to add the gadget again (which may result in losing the existing data about how long you have spent on gmail), or when Gmail picks up the data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-655213467344948263?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/5SBuE5-bCbI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/655213467344948263/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=655213467344948263" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/655213467344948263?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/655213467344948263?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/5SBuE5-bCbI/using-bitly-to-track-gmail-logins.html" title="Using Bit.ly to track Gmail logins." /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/06/using-bitly-to-track-gmail-logins.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIGQno9fCp7ImA9WxJQGEg.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-1462857597790180951</id><published>2009-05-31T23:08:00.000-07:00</published><updated>2009-06-01T03:35:23.464-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-01T03:35:23.464-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitteybot" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Twitter Bot on Google App Engine</title><content type="html">Over the weekend, I have started working on another application to be hosted on the &lt;a href="http://appspot.com/"&gt;Google App Engine&lt;/a&gt;. This application is a  bot that reads from a set of RSS feeds and posts the updates to a specified &lt;a href="http://twitter.com"&gt;twitter&lt;/a&gt; account.&lt;br /&gt;On the face of it, this is a simple project, but there are some interesting intricacies that I wanted to put down in this post. The idea is to create a management dashboard that does the following&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Allow users to specify which twitter accounts to post to&lt;/li&gt;&lt;li&gt;Twitter status update interval&lt;/li&gt;&lt;li&gt;Feeds that will act as a source for status&lt;/li&gt;&lt;li&gt;Interval for fetching feeds&lt;/li&gt;&lt;li&gt;Multi tenancy, supporting multiple users for bot&lt;/li&gt;&lt;/ul&gt;The Google App Engine database has to be used to save the updates to handle the difference in frequency between the feed and twitter updates. Watch out this space for &lt;a href="http://dy-verse.blogspot.com/search/label/twitteybot"&gt;updates&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-1462857597790180951?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/0aXJcdti5yk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/1462857597790180951/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=1462857597790180951" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1462857597790180951?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1462857597790180951?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/0aXJcdti5yk/twitter-bot-on-google-app-engine.html" title="Twitter Bot on Google App Engine" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/05/twitter-bot-on-google-app-engine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQCQXk6eip7ImA9WxJQEkg.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-7322065654259090316</id><published>2009-05-25T05:26:00.000-07:00</published><updated>2009-05-25T05:26:00.712-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-25T05:26:00.712-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><title>Inside the dragon fish login demo</title><content type="html">&lt;a href="http://www.bhphotovideo.com/c/product/366741-REG/Velbon_DV7000_DV_7000_Tripod_with_2_Way.html"&gt;Dragon Interactive Labs&lt;/a&gt; have excellent demos on how javascript can be stretched to create some awesome effects. This post details how the &lt;a href="http://labs.dragoninteractive.com/panel/demo/"&gt;dragon fish demo login screen&lt;/a&gt; is done using pure javascript. The colors around the login box and the glow are done using background images and changing its position. The first layer is &lt;a href="http://labs.dragoninteractive.com/panel/demo/lib/img/form/map/rmap.jpg"&gt;this image&lt;/a&gt; that is set as a background image changing its left all the while.&lt;br /&gt;On top of this div are the masks for the four corners and the four sides. These have images with semitransparent pngs that are respinsible for the glow effect. There is also a mask in the middle that masks the majority of the background.&lt;br /&gt;It is above this layer that regular fieldset containing the username and password fields. You can see this effect if you move the third element with "map" classname with to an absolute position and 200 px left. The javascript constantly move the huge image to left, creating the effect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-7322065654259090316?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/8QGqNFBq3QM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/7322065654259090316/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=7322065654259090316" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/7322065654259090316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/7322065654259090316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/8QGqNFBq3QM/inside-dragon-fish-login-demo.html" title="Inside the dragon fish login demo" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/05/inside-dragon-fish-login-demo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UGQ3o4fip7ImA9WxJQEEo.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-5350146355842025282</id><published>2009-05-21T04:53:00.000-07:00</published><updated>2009-05-23T04:47:02.436-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-23T04:47:02.436-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="weave" /><title>Weave Identity : The auto login feature</title><content type="html">A few days ago, I had &lt;a href="http://dy-verse.blogspot.com/2009/05/weave-identity-in-contrast-to-cardspace.html"&gt;written&lt;/a&gt; about the interesting similarities between Microsoft Cardspace and the way Weave works. This post is about the other interesting feature - the auto login. The idea is to save the user name and passwords on the weave server, retrieve them when we are on a login page and submit it.&lt;br /&gt;If you unzip the xpi file, you can look for the LoginManager.js file. This is the file that is responsible for saving user credentials, retrieving them when required and submitting the form. Most functions are self explanatory.  An observer is called whenever a form is submitted. The credentials are then picked up and saved to the store.&lt;br /&gt;The _fillForm function is looks for matching logins saved for the login form and fills in the details. There is some complex logic that determines if a password is correct or not, but it can be ignored for now. It is something like the form.submit() function that I was searching for, but unable to find. I was also wondering how the extension handled password submission for sites like &lt;a href="http://accessories.us.dell.com/sna/productdetail.aspx?sku=A1283496&amp;amp;cs=19&amp;amp;c=us&amp;amp;l=en&amp;amp;st"&gt;meebo.com&lt;/a&gt; that hash the password before sending it across. Watch out &lt;a href="http://dy-verse.blogspot.com/search/label/weave"&gt;this&lt;/a&gt; space for updates on how these &lt;a href="http://dy-verse.blogspot.com/2007/05/login-form-oddities.html"&gt;login form oddities&lt;/a&gt; have been handled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-5350146355842025282?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/dSU3BvE5KYQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/5350146355842025282/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=5350146355842025282" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/5350146355842025282?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/5350146355842025282?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/dSU3BvE5KYQ/weave-identity-auto-login-feature.html" title="Weave Identity : The auto login feature" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/05/weave-identity-auto-login-feature.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIDQXY-fCp7ImA9WxJRFEU.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-6316640198057032896</id><published>2009-05-16T08:20:00.000-07:00</published><updated>2009-05-16T08:26:10.854-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-16T08:26:10.854-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GreaseMonkey" /><category scheme="http://www.blogger.com/atom/ns#" term="reddit bar" /><title>Reddit Bar :: adjusting the extra space</title><content type="html">A quick update to the reddit bar greasemonkey script. Looks like the reddit page updated its code to add some extra style to the comments page. This added an extra space under the &lt;a href="http://dy-verse.blogspot.com/search/label/reddit%20bar"&gt;reddit bar&lt;/a&gt; that was inserted using a greasemonkey script I had written. I just got some time to fix it and you can find the final code &lt;a href="http://userscripts.org/scripts/show/45848"&gt;here&lt;/a&gt;.&lt;br /&gt;The addition was a change to the style of the footer. The div with class ("footer-parent") had a padding-top set to 40px.&lt;br /&gt;A single line to set this to 0px did the trick and the extra space is now gone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-6316640198057032896?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/H4cEpAYCrGY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/6316640198057032896/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=6316640198057032896" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6316640198057032896?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6316640198057032896?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/H4cEpAYCrGY/reddit-bar-adjusting-extra-space.html" title="Reddit Bar :: adjusting the extra space" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/05/reddit-bar-adjusting-extra-space.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAAQ3c_fyp7ImA9WxJREkw.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-893671423709038237</id><published>2009-05-13T04:53:00.000-07:00</published><updated>2009-05-13T05:45:42.947-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-13T05:45:42.947-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="weave" /><title>Weave Identity : in contrast to cardspace</title><content type="html">There have been multiple announcements about Mozilla Weave adding an &lt;a href="http://labs.mozilla.com/2009/05/identity-in-the-browser/"&gt;identity angle&lt;/a&gt; to its offering. A video detailing the auto login capability is available &lt;a href="http://people.mozilla.com/%7Edmills/weave/weave-id-screencast-2009-05-06.swf"&gt;here&lt;/a&gt;. Weave enables automatic login using OpenID enabled sites behind the scenes. They also submit the login forms automatically when user credentials are remembered. As explained in the video, the "Sign in with Weave" button appears when login with OpenId is permitted. Clicking on the button would automatically perform the re-directions and log the user into the site.&lt;br /&gt;This seems to look exactly same the like Windows Cardspace initiative. The similarities are interesting. Here is the workflow laid out side by side.&lt;br /&gt;&lt;br /&gt;&lt;table class="MsoTableGrid" style="border: medium none ; width: 90%; border-collapse: collapse;" width="90%" border="1" cellpadding="0" cellspacing="0"&gt;  &lt;tbody&gt;&lt;tr style=""&gt;   &lt;td style="border: 1pt solid black; padding: 0in 5.4pt; width: 36.3pt;" valign="top" width="48"&gt;   &lt;p class="MsoNormal"&gt;Steps&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 359.3pt;" valign="top" width="479"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;Cardspace&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; width: 433.95pt;" valign="top" width="579"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;Weave Identity&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 36.3pt;" valign="top" width="48"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;1&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 359.3pt;" valign="top" width="479"&gt;   &lt;p class="MsoNormal"&gt;User loads the login page with Cardspace enabled.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 433.95pt;" valign="top" width="579"&gt;   &lt;p class="MsoNormal"&gt;User loads a login page that accepts OpenId Credentials.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 36.3pt;" valign="top" width="48"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;2&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 359.3pt;" valign="top" width="479"&gt;   &lt;p class="MsoNormal"&gt;User selects the “Login with cardspace” button on the page.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 433.95pt;" valign="top" width="579"&gt;   &lt;p class="MsoNormal"&gt;User selects the “Sign in with Weave”, or the button on   the address bar.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 36.3pt;" valign="top" width="48"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;3&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 359.3pt;" valign="top" width="479"&gt;   &lt;p class="MsoNormal"&gt;Cardspace UI is displayed and the user selects the card   that best represents the identity for the site.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 433.95pt;" valign="top" width="579"&gt;   &lt;p class="MsoNormal"&gt;There is just one weave identity for now. It gets   automatically selected.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 36.3pt;" valign="top" width="48"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;4&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 359.3pt;" valign="top" width="479"&gt;   &lt;p class="MsoNormal"&gt;A request is made to the identity provider site to get   details by Cardspace.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 433.95pt;" valign="top" width="579"&gt;   &lt;p class="MsoNormal"&gt;A browser redirect takes the user to the OpenId identity   provider page (services.mozilla.com).&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 36.3pt;" valign="top" width="48"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;5&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 359.3pt;" valign="top" width="479"&gt;   &lt;p class="MsoNormal"&gt;If the identity provider requires credentials, a dialog box   shows up.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 433.95pt;" valign="top" width="579"&gt;   &lt;p class="MsoNormal"&gt;Since the user is already logged in using weave, no   credentials are requested for.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 36.3pt;" valign="top" width="48"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;6&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 359.3pt;" valign="top" width="479"&gt;   &lt;p class="MsoNormal"&gt;Credentials are sent to the Identity provider and if   authentication succeeded, positive reply is received.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 433.95pt;" valign="top" width="579"&gt;   &lt;p class="MsoNormal"&gt;A redirect by the OpenId provider to the original page   with reply.&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt;  &lt;tr style=""&gt;   &lt;td style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; width: 36.3pt;" valign="top" width="48"&gt;   &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;7&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 359.3pt;" valign="top" width="479"&gt;   &lt;p class="MsoNormal"&gt;User is logged in successfully&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; width: 433.95pt;" valign="top" width="579"&gt;   &lt;p class="MsoNormal"&gt;User is logged in successfully&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;It is the second part of weave is the way the login manager works. The way it saves usernames/passwords and auto submits forms is interesting.&lt;br /&gt;More about it, and analysis in the next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-893671423709038237?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/3S74iT_mXFw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/893671423709038237/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=893671423709038237" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/893671423709038237?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/893671423709038237?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/3S74iT_mXFw/weave-identity-in-contrast-to-cardspace.html" title="Weave Identity : in contrast to cardspace" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/05/weave-identity-in-contrast-to-cardspace.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YHRHg5fyp7ImA9WxJSGEQ.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-3963434461128873930</id><published>2009-05-09T04:37:00.000-07:00</published><updated>2009-05-09T12:58:55.627-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-09T12:58:55.627-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="facebook" /><title>Facebook Konami Lens Flare Effect</title><content type="html">The &lt;a href="http://en.wikipedia.org/wiki/Konami_Code"&gt;Konami cheat code&lt;/a&gt; finally made its way into facebook. There were a lot of posts that spoke about the up-up-down-down-left-right-left-right-B-A-Enter code and the &lt;a href="http://news.cnet.com/8301-13515_3-10236321-26.html"&gt;lens flare effect on facebook&lt;/a&gt;. I did a little probing and here is how it is implemented and can be reused in your own site.&lt;br /&gt;First, there is the handler that catches the secret key. You can find it in &lt;a href="http://static.ak.fbcdn.net/rsrc.php/z5R85/lpkg/3ewrzwq8/en_US/141/162721/js/60ykwiekb0kk80os.pkg.js"&gt;this file&lt;/a&gt;. Just search for&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[38,38,40,40,37,39,37,39,66,65,13]&lt;/span&gt; which represent the character codes for the secret key combination. The function is called onloadRegister which typically registers a key handler on the window. The function effectively loads &lt;a href="http://www.facebook.com/ajax/lensflare.php?nctr%5Bid%5D=e21d5ee3cf3ade99f9714eca4c679039&amp;amp;nctr%5Bnid%5D=720edb2bd895415b718a8df230db5af5&amp;amp;nctr%5Bct%5D=1241867642246"&gt;this response&lt;/a&gt; that in turn loads the file responsible for the &lt;a href="http://b.static.ak.fbcdn.net/rsrc.php/z4YI6/l/1dgogsgc/nu_ll/162521/js/lensflare.js"&gt;lens flare javascript file&lt;/a&gt;.&lt;br /&gt;The lens flare is initialized using the following code after the required javascript file is loaded.&lt;br /&gt;&lt;span class="objectBox objectBox-string"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span class="objectBox objectBox-string"&gt;var lf = new LensFlare("http:\/\/static.ak.fbcdn.net\/images\/lensflare\/*?8:162521");LensFlare.flareClick(lf).flareScroll(lf).flareKeyPress(lf);&lt;/span&gt;&lt;/blockquote&gt;This is done after some variable are set in the win.Env object, the use of which is still a mystery to me. To execute this in our page, we need to initialize some objects, defined in &lt;a href="http://static.ak.fbcdn.net/rsrc.php/z5R85/lpkg/3ewrzwq8/en_US/141/162721/js/60ykwiekb0kk80os.pkg.js"&gt;this&lt;/a&gt; file. To get lens flare running, this file also has to be included. Here is the consolidated code that you need to use.&lt;br /&gt;&lt;br /&gt;Paste this in the browser URL first,&lt;br /&gt;&lt;textarea width="90%"&gt;javascript:(function(){var x = document.createElement("script");x.src="http://b.static.ak.fbcdn.net/rsrc.php/z4YI6/l/1dgogsgc/nu_ll/162521/js/lensflare.js";document.body.appendChild(x);var x = document.createElement("script");x.src="http://static.ak.fbcdn.net/rsrc.php/z5R85/lpkg/3ewrzwq8/en_US/141/162721/js/60ykwiekb0kk80os.pkg.js";document.body.appendChild(x);})()&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;and then, after sometime, paste this.&lt;br /&gt;&lt;textarea width="90%"&gt;javascript:(function(){var lf = new LensFlare("http:\/\/static.ak.fbcdn.net\/images\/lensflare\/*?8:162521");LensFlare.flareClick(lf).flareScroll(lf).flareKeyPress(lf);})()&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;You can try the code on this very blog window.&lt;br /&gt;To include this in your page, you have to include the following script in your page.&lt;br /&gt;&lt;br /&gt;&lt;textarea width="90%"&gt;var x = document.createElement("script");x.src="http://b.static.ak.fbcdn.net/rsrc.php/z4YI6/l/1dgogsgc/nu_ll/162521/js/lensflare.js";document.body.appendChild(x);&lt;br /&gt;var x = document.createElement("script");x.src="http://static.ak.fbcdn.net/rsrc.php/z5R85/lpkg/3ewrzwq8/en_US/141/162721/js/60ykwiekb0kk80os.pkg.js";document.body.appendChild(x);&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;The interesting part in this is the animation of the images to create the lens flare, another example of fine javascript wizadary !!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-3963434461128873930?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/l3g9VEtKcDw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/3963434461128873930/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=3963434461128873930" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/3963434461128873930?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/3963434461128873930?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/l3g9VEtKcDw/facebook-knoami-lens-flare-effect.html" title="Facebook Konami Lens Flare Effect" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/05/facebook-knoami-lens-flare-effect.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QDRnczfyp7ImA9WxJSFkw.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-3248688201633978622</id><published>2009-05-06T05:29:00.000-07:00</published><updated>2009-05-06T06:09:37.987-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-06T06:09:37.987-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GreaseMonkey" /><category scheme="http://www.blogger.com/atom/ns#" term="reddit bar" /><title>Reddit Bar :: Self links fixed</title><content type="html">A few posts ago, I had written about the &lt;a href="http://www.merriam-webster.com/dictionary/with"&gt;greasemonkey reddit bar&lt;/a&gt;. &lt;a href="http://twitter.com/swaroop"&gt;Swaroop&lt;/a&gt; pointed out that the reddit bar was not working fine for self links. It does not make sense to show up the reddit bar on such pages.&lt;br /&gt;I have changed the code to reflect the change and you can find it &lt;a href="http://userscripts.org/scripts/show/45848"&gt;here&lt;/a&gt;. The change was trivial. Just find out the target URL that would open the iFrame, and if it equals the document's url, the bar will not load, letting the page stay as it is.&lt;br /&gt;Swaroop also had pointed out that the reddit bar shows up twice and I am taking a look at it. If you have seen errors, please do sent me the URL to help me fix the error.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-3248688201633978622?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/XOYhrpS2pGo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/3248688201633978622/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=3248688201633978622" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/3248688201633978622?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/3248688201633978622?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/XOYhrpS2pGo/reditt-bar-self-links-fixed.html" title="Reddit Bar :: Self links fixed" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/05/reditt-bar-self-links-fixed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04GQ3c5eSp7ImA9WxJTGEg.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-7784790366632094767</id><published>2009-04-27T08:10:00.000-07:00</published><updated>2009-04-27T10:05:22.921-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-27T10:05:22.921-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rsa" /><category scheme="http://www.blogger.com/atom/ns#" term="app engine" /><title>Bridging the  Gap between the internal and external could - RSA Access Manager to protect resources on Google app Engine</title><content type="html">Here at &lt;a href="http://www.indeed.com/jobs?q=RSA&amp;amp;start=300"&gt;RSA&lt;/a&gt;, one of the areas of constant probing is the idea of using existing RSA applications to bridge the gap between internal infrastructure of an enterprise and its extension on an external cloud. With a long weekend at hand, I worked on this hobby project. This post details ways to seamlessly protect the applications that you have moved to an external cloud with an existing RSA Access Manager installation.&lt;br /&gt;The only interesting fact is that Google App engine is Platform-as-a-service (as opposed to Amazon EC2 which is Infrastructure-as-a-service).&lt;br /&gt;Here is a deployment diagram and the various components involved. As shown in the diagram, the identities of the user rests in a &lt;a href="http://accessories.us.dell.com/sna/productdetail.aspx?sku=A1283496&amp;amp;cs=19&amp;amp;c=us&amp;amp;l=en&amp;amp;st"&gt;LDAP&lt;/a&gt; or &lt;a href="http://accessories.us.dell.com/sna/productdetail.aspx?sku=A1283496&amp;amp;cs=19&amp;amp;c=us&amp;amp;l=en&amp;amp;st"&gt;Active Directory&lt;/a&gt; inside the enterprise domain usually protected by a firewall. Apps 1 and 2 are deployed inside the domain of the enterprise while App 3 is deployed on Google App Engine (different domain) . The user may access the resource either when he is inside the enterprise, or when outside from a kiosk, etc.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_gyLd8b7qor8/SfXPRj6nBmI/AAAAAAAAB8c/Bamw0yqhnOk/s1600-h/untitled.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 500px; height: 483px;" src="http://1.bp.blogspot.com/_gyLd8b7qor8/SfXPRj6nBmI/AAAAAAAAB8c/Bamw0yqhnOk/s400/untitled.JPG" alt="" id="BLOGGER_PHOTO_ID_5329393634668643938" border="0" /&gt;&lt;/a&gt;Authentication :&lt;br /&gt;In all cases, the user should be authenticated using credentials of the enterprise. Google App Engine credentials may be used for single sign on but it is not mandatory.&lt;br /&gt;&lt;br /&gt;Authorization :&lt;br /&gt;The system administrator should be able to define access management rules for the user based on the user's identity inside the enterprise.&lt;br /&gt;&lt;br /&gt;Here is how RSA Access Manager can be configured to access the authorization-rules server to determine access to users. Firstly, we would require an Access Manager agent at the Google App Engine server. App Engine Java version provides Server filters that intercept requests before they access the actual resource. Here is how the work flow proceeds.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;User accesses a resource on App engine. He is not logged into Google or on the enterprise.&lt;/li&gt;&lt;li&gt;The filter intercepts the request and does a URLFetch to the Access Manager Authorization-rules engine, deployed inside the firewall.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This communication is secured by using &lt;a href="http://accessories.us.dell.com/sna/productdetail.aspx?sku=A1283496&amp;amp;cs=19&amp;amp;c=us&amp;amp;l=en&amp;amp;st"&gt;Google Secure Data Connector&lt;/a&gt;. This could also have been secured using mutual SSL if URL Fetch would allow it.&lt;/li&gt;&lt;li&gt;The server sees that the there is no cookie set in the request and replies to the agent that authentication needs to be performed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The agent sends back a redirect response that throws the user to the authentication page hosted inside the enterprise domain.&lt;/li&gt;&lt;li&gt;User authenticated at this page. If the user is inside the enterprise, he could be authenticated using NTML, etc.&lt;/li&gt;&lt;li&gt;If credentials are correct, a cookie for the enterprise domain is set.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The user is then redirected to the resource page, carrying a message from the server to set a cookie for the Google domain.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The agent sets the cookie and again redirects to the resource page.&lt;/li&gt;&lt;li&gt;Since the resource is still protected by the filter, the filter kicks in again and does a URL Fetch to the server to see if the user is allowed.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The server sees the cookie that is sent in this request and decides on if this user is allowed access or not.&lt;/li&gt;&lt;li&gt;The agent sees the reply from the server and redirects or blocks the user, depending on the response.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;This case become a little complicated if resources are protected using Google credentials, as specified in the app config file. This is the case where single sign on and federation is required; details about this in a later post.&lt;br /&gt;&lt;br /&gt;Hence, using this simple filter, you can protect your applications that have moved to the external cloud just like resources are managed inside the enterprise. Adequate measures to secure the communication between the agent in App engine and the Authorization server ensure that this deployment is secure like it was when inside the firewall.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-7784790366632094767?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/zrM_wIQE51w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/7784790366632094767/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=7784790366632094767" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/7784790366632094767?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/7784790366632094767?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/zrM_wIQE51w/bridging-gap-between-internal-and.html" title="Bridging the  Gap between the internal and external could - RSA Access Manager to protect resources on Google app Engine" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_gyLd8b7qor8/SfXPRj6nBmI/AAAAAAAAB8c/Bamw0yqhnOk/s72-c/untitled.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/04/bridging-gap-between-internal-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAMQXc_cSp7ImA9WxJTFEo.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-6963635718928373482</id><published>2009-04-23T01:53:00.000-07:00</published><updated>2009-04-23T01:53:00.949-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-23T01:53:00.949-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="flash resizer" /><title>Flash Resizer : Toggle it on and off</title><content type="html">This is a continuation in the &lt;a href="javascript:document.getElementsByTagName('head')[0].appendChild(document.createElement('script')).setAttribute('src','http://gist.github.com/raw/89202/27baf59a408fac68e2ea82dbe162630618afbd93/FlashResize.js');"&gt;Flash Resizer Bookmarklet&lt;/a&gt; series that I had &lt;a href="http://dy-verse.blogspot.com/search/label/flash%20resizer"&gt;written&lt;/a&gt; about some time ago. This post details the capability to toggle the bookmarklet on and off. A couple of people had written to me complaining that the resize capability prevented drag and drop functionality inside the flash. All drag and drop events seem to be picked up by the event handlers assigned by the bookmarklet. Hence, the toggle functionality could be used to remove the event handlers.&lt;br /&gt;The trickiest part in the implementation is maintaining the state between two invocations of the bookmarklet. Since every invocation of the bookmarklet restores the object, all state information should be saved in the Global Window object.&lt;br /&gt;When the resize handlers are assigned, they are also pushed to a global array. On subsequent invocations, the presence (undefined or not) of this object can be used to toggle active or suspended state. If the resizer is to be disabled, the destroy method ofYUI resize is called and elements are popped out of the array. Reactivating would require adding handlers to "move-handler" class elements.&lt;br /&gt;You can drag and drop "&lt;a href="javascript:document.getElementsByTagName('head')[0].appendChild(document.createElement('script')).setAttribute('src','http://gist.github.com/raw/89202/27baf59a408fac68e2ea82dbe162630618afbd93/FlashResize.js');"&gt;Flash Resizer&lt;/a&gt;" to your bookmarks toolbar to check out the latest version. Click it once on any page that has flash on it to be able to resize the flash. Thereafter, you can click it to toggle activation and deactivation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-6963635718928373482?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/dIic9mFnYgg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/6963635718928373482/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=6963635718928373482" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6963635718928373482?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6963635718928373482?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/dIic9mFnYgg/flash-resizer-toggle-it-on-and-off.html" title="Flash Resizer : Toggle it on and off" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/04/flash-resizer-toggle-it-on-and-off.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkINRXo-fip7ImA9WxJTEEk.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-5753367174631104257</id><published>2009-04-18T01:23:00.000-07:00</published><updated>2009-04-18T01:49:54.456-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-18T01:49:54.456-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="launchy" /><category scheme="http://www.blogger.com/atom/ns#" term="wcd" /><title>Launchy plugin for WCD</title><content type="html">I have found the "&lt;a href="http://www.xs4all.nl/%7Ewaterlan/#WCD_ANCHOR"&gt;Whereever Change Directory&lt;/a&gt;"(WCD) tool  very useful on the command line. Its a directory changing tool that changes to the directory without requiring to type the whole path. Porting it to &lt;a href="http://www.launchy.net/"&gt;Launchy&lt;/a&gt; as a plugin would be a great utility.&lt;br /&gt;The &lt;a href="http://www.xs4all.nl/%7Ewaterlan/wcd-5.0.0-win32.zip"&gt;windows version&lt;/a&gt; of the WCD tool uses a batch file to perform the directory change operations. A batch file by the name wcdgo.bat it created at a location indicated by the wcd.bat file. To use it with Launchy, we would need to append a  "start ." statement to the  file. Here is the modified version called wcdLaunchy.bat, forked from wcd.bat. This is the file that has to be fed into the Runner plugin with an appropriate keyword in Launchy.&lt;br /&gt;&lt;br /&gt;Here is how the batch file looks like.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/97503.js"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-5753367174631104257?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/nf4pfXmtHHo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/5753367174631104257/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=5753367174631104257" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/5753367174631104257?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/5753367174631104257?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/nf4pfXmtHHo/launchy-plugin-for-wcd.html" title="Launchy plugin for WCD" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/04/launchy-plugin-for-wcd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQCQX88cCp7ImA9WxVaFU8.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-1100488653883514668</id><published>2009-04-12T02:26:00.000-07:00</published><updated>2009-04-12T02:26:00.178-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-12T02:26:00.178-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flash resizer" /><category scheme="http://www.blogger.com/atom/ns#" term="bookmarklets" /><title>Flash Resizer : Technical Details</title><content type="html">I had &lt;a href="http://dy-verse.blogspot.com/2009/04/flash-resizer.html"&gt;written&lt;/a&gt; about a bookmarklet that allowed Flash Content on a web page to be resized. This post details the technical details of the code.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://gist.github.com/89202.js"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;To start with, we iterate through all the flash elements - Object tag for IE and Embed to everything else. For flash elements that are opened with wmode="window", we redraw the element with a wmode="opaque". This is done to allow other HTML elements to be drawn on top the element.&lt;br /&gt;Transparent Divs are drawn over flash elements. Click handlers are added to the divs that recreate the flash elements on an "position=absolute" div. This div can be resized and moved (with the YUI resize component). The flash elements with a 100% width and height resize with the div.&lt;br /&gt;There are only a few caveats.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Shockwave Flash still appears on top of all HTML elements&lt;/li&gt;&lt;li&gt;Certain flash files do not scale and are fixed. Hence, resizeing the flash does not scale the contents, it just expands the element. Now working on ways to fix this.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-1100488653883514668?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/e9ArKcxl5FY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/1100488653883514668/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=1100488653883514668" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1100488653883514668?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1100488653883514668?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/e9ArKcxl5FY/flash-resizer-technical-details.html" title="Flash Resizer : Technical Details" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/04/flash-resizer-technical-details.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUMR345eip7ImA9WxVaFEk.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-5612527062760184271</id><published>2009-04-11T01:57:00.001-07:00</published><updated>2009-04-11T01:58:06.022-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-11T01:58:06.022-07:00</app:edited><title>At Devcamp 2</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://devcamp.in"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 569px; height: 147px;" src="http://devcamp.in/w/images/7/73/Devcamp22009.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-5612527062760184271?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/7x0x3SABUZY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/5612527062760184271/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=5612527062760184271" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/5612527062760184271?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/5612527062760184271?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/7x0x3SABUZY/at-devcamp-2.html" title="At Devcamp 2" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/04/at-devcamp-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMEQX0zfip7ImA9WxVaE0s.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-6685633514687490012</id><published>2009-04-10T06:00:00.000-07:00</published><updated>2009-04-10T06:00:00.386-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-10T06:00:00.386-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flash resizer" /><category scheme="http://www.blogger.com/atom/ns#" term="bookmarklets" /><title>Flash Resizer</title><content type="html">I have often noticed that Flash content on many sites can be better if  they could be resized to larger dimensions. Sites like &lt;a href="http://www.youtube.com/"&gt;youtube&lt;/a&gt; and &lt;a href="http://www.vimeo.com/"&gt;vimeo&lt;/a&gt; do allow full screen videos but it does not really work on multiple monitors where you would want to work on another application. Games also would look at lot better on sites like &lt;a href="http://www.onemorelevel.com/index.php"&gt;onemorelevel&lt;/a&gt; and &lt;a href="http://www.miniclip.com/"&gt;miniclip&lt;/a&gt; if I could simply maximize the flash and hide other annoying advertisements.&lt;br /&gt;I wrote a simple bookmarklet in the past couple of days that does just that. You can select any flash content, move it and re-size it by dragging the corners. The code is available is &lt;a href="http://gist.github.com/89202"&gt;here&lt;/a&gt;. All you would have to do is add this &lt;a href="javascript:document.getElementsByTagName('head')[0].appendChild(document.createElement('script')).setAttribute('src',http://gist.github.com/raw/89202/c4e3995dcbace0f40385cd4dbe00b909c362d664/FlashResize.js');"&gt;FLASH RESIZER&lt;/a&gt; link to your bookmarks or drag and drop it to the bookmarks toolbar.&lt;br /&gt;Here is how it works. A post about how the code works would follow.&lt;br /&gt;&lt;br /&gt;&lt;object width="660" height="525"&gt;&lt;param name="movie" value="http://www.youtube-nocookie.com/v/xt8doYQeEhQ&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube-nocookie.com/v/xt8doYQeEhQ&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="525"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-6685633514687490012?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/CB88RUS6hwI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/6685633514687490012/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=6685633514687490012" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6685633514687490012?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6685633514687490012?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/CB88RUS6hwI/flash-resizer_10.html" title="Flash Resizer" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/04/flash-resizer_10.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEDRXgzfCp7ImA9WxVaEE8.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-8388327706220249709</id><published>2009-04-06T04:27:00.000-07:00</published><updated>2009-04-06T06:14:34.684-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-06T06:14:34.684-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="reddit" /><category scheme="http://www.blogger.com/atom/ns#" term="GreaseMonkey" /><category scheme="http://www.blogger.com/atom/ns#" term="reddit bar" /><title>Reddit Bar - Greasemonkey Script</title><content type="html">Before &lt;a href="http://www.digg.com/"&gt;Digg&lt;/a&gt; released the &lt;a href="http://www.dollarrite.com/bebesound-soundmonitorwtih2receivers-mo142-6673.html"&gt;Diggbar&lt;/a&gt; a few days ago, many users may never have bothered to visit the comments page or upmod a story. It was just too much work to upmod a story, specially when the &lt;a href="http://userscripts.org/scripts/show/6065"&gt;Digg Redirect&lt;/a&gt; script took us directly from Google Reader to the story. With the digg bar, it becomes a lot easier for users participate.&lt;br /&gt;I think that the Digg Bar is a great idea and wantedto replicate it for reddit too. Here is a greasemonkey &lt;a href="http://userscripts.org/scripts/show/45848"&gt;script&lt;/a&gt; that you can install to see a similar bar for reddit. Users can toggle between the page and comments by clicking the comments. I find this particularily useful when hitting the comments page from reddit RSS feeds.&lt;br /&gt;The code is simple, it just removes the header, the footer and the right div that displays statistics. It then picks up the details of the story from a div called "sitetable" and places it in the header. The last step is to allow a toggle between the iFrames that displays the target page content and comments.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_gyLd8b7qor8/SdoAKplxxII/AAAAAAAAB7k/4jAynyKl6Mg/s1600-h/4889769.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 329px;" src="http://4.bp.blogspot.com/_gyLd8b7qor8/SdoAKplxxII/AAAAAAAAB7k/4jAynyKl6Mg/s400/4889769.jpg" alt="" id="BLOGGER_PHOTO_ID_5321566092654658690" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://web3.twitpic.com/img/4889769-599158c66d429e9844d04e8297d17940.49d9eefd-scaled.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-8388327706220249709?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/WGC2pNAz8CE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/8388327706220249709/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=8388327706220249709" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/8388327706220249709?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/8388327706220249709?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/WGC2pNAz8CE/reddit-bar-greasemonkey-script.html" title="Reddit Bar - Greasemonkey Script" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_gyLd8b7qor8/SdoAKplxxII/AAAAAAAAB7k/4jAynyKl6Mg/s72-c/4889769.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/04/reddit-bar-greasemonkey-script.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcMQXozeCp7ImA9WxVbGE8.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-1866121738908750693</id><published>2009-04-03T23:38:00.000-07:00</published><updated>2009-04-03T23:38:00.480-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-03T23:38:00.480-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hacks" /><title>Tracking those stalkers on Orkut</title><content type="html">A few days ago, I had &lt;a href="http://dy-verse.blogspot.com/2009/03/quick-analytics.html"&gt;written&lt;/a&gt; about a service that would help tracking URLs posted on twitter. I had barely started working on it when a &lt;a href="http://twitter.com/swaroopch"&gt;friend&lt;/a&gt; told me about &lt;a href="http://tr.im/"&gt;tr.im&lt;/a&gt;. It is a URL tracking service with statistics.&lt;br /&gt;Apparently, this can also be used for the other use cases - tracking on Orkut and forums. The redirect can be a simple transparent image placed in the forums or Orkut scraps. So, the next time you get a scrap from an annoying stalker, just add a &lt;a href="http://images.google.com/images?q=transparent+1x1+png+images&amp;amp;hl=en&amp;amp;client=firefox-a&amp;amp;rls=org.mozilla:en-US:official&amp;amp;sa=N&amp;amp;um=1&amp;amp;imgsz=icon"&gt;transparent png&lt;/a&gt; using tr.im to the scrap that you send. You can also drop the image into all emails and forum posts that you make. This would give you an idea on how far your mail travels or how many people view your posts.&lt;br /&gt;Though the service was written for twitter, you can use it for a variety of services.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-1866121738908750693?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/w6tAHRcS0Fg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/1866121738908750693/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=1866121738908750693" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1866121738908750693?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1866121738908750693?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/w6tAHRcS0Fg/tracking-those-stalkers-on-orkut.html" title="Tracking those stalkers on Orkut" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/04/tracking-those-stalkers-on-orkut.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8MQXk5fyp7ImA9WxVbFUs.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-6688816879483891475</id><published>2009-03-31T23:38:00.000-07:00</published><updated>2009-03-31T23:38:00.727-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-31T23:38:00.727-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="greasemonkey development" /><title>Greasemonkey on the server</title><content type="html">A search for the term "Greasemonkey on the Server" would lead you to a &lt;a href="http://code.google.com/p/monkeygrease/"&gt;project&lt;/a&gt; that uses a&lt;a href="http://www.merriam-webster.com/dictionary/with"&gt;servlet filter&lt;/a&gt; to insert scripts and seems to be quite old (and not under development). An alternative suggested in the forums, called &lt;a href="http://www.opensymphony.com/sitemesh/"&gt;SiteMesh&lt;/a&gt; seems to have the same fate.  Even if we were to use them now, they work only with code that you own.&lt;br /&gt;The framework I wanted should have the following&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Proxy any webpage, letting me insert my own scripts into the page&lt;/li&gt;&lt;li&gt;Should not require me to configure the server as a proxy. Instead, I should be able to hit a specific url to view the page&lt;/li&gt;&lt;li&gt;Images, CSS, and even AJAX should work like it would work on the original page.&lt;/li&gt;&lt;/ol&gt;Some application that could leverage such a framework would be&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dynamicall marking pages for automatic scraping, like &lt;a href="http://www.dapper.net/"&gt;dapper.net&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Adding more data to a page and saving it as our version&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tracking user mouse movements, studying user behaviour.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Walking users through sites&lt;/li&gt;&lt;li&gt;Colloborative browsing&lt;/li&gt;&lt;/ul&gt;The list goes on. There are a lot of sites that try to achieve the effect but without 100 % success. Here are some methods we can use to achieve near perfect pages, though they are fetched by our servers.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;For URLs (img, script, src), instead of rewriting the fetched HTML, we may as well have a handler at the root of our domain that redirects to the actual source. In this case, if the URL is absolute, it works just fine; in case of relative URLs, they hit our server and are redirected&lt;/li&gt;&lt;li&gt;Insert a script at the top of the page that substitutes the XMLHTTPRequest.open to call our proxyUrl.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use our script to rewrite a href attributes to have control over the target pages.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use our script to rewirte targets of form submit.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Send cookies set in the browser to our proxy for them to be relayed by the proxy to the actual server.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The idea is still rough and some of the elemets that are a problem include (but not limited to) Flash, top.location and window.location changes, script in the page tampering with the injected script, etc. A container like &lt;a href="http://code.google.com/p/google-caja/"&gt;Caja&lt;/a&gt; (or Cajita) could come in handy to tinker with elements that have to be changed at the server side.&lt;br /&gt;The idea is crude, but as I refine it, I would be posting updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-6688816879483891475?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/uMM33H5V75Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/6688816879483891475/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=6688816879483891475" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6688816879483891475?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6688816879483891475?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/uMM33H5V75Y/greasemonkey-on-server_31.html" title="Greasemonkey on the server" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/03/greasemonkey-on-server_31.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ADRH45fyp7ImA9WxVbE0k.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-2909578431152772359</id><published>2009-03-29T01:00:00.000-07:00</published><updated>2009-03-29T11:02:55.027-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-29T11:02:55.027-07:00</app:edited><title>At CloudCamp Bangalore</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.cloudcamp.com/bangalore/"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 558px; height: 127px;" src="http://www.cloudcamp.org/wp-content/themes/wicketpixie/images/logo_cloudcamp.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-2909578431152772359?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/VDGv6ZZE-m8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/2909578431152772359/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=2909578431152772359" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/2909578431152772359?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/2909578431152772359?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/VDGv6ZZE-m8/at-cloudcamp-bangalore.html" title="At CloudCamp Bangalore" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/03/at-cloudcamp-bangalore.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUMRXg9cCp7ImA9WxVbE0g.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-6058393379991640079</id><published>2009-03-25T11:37:00.000-07:00</published><updated>2009-03-29T12:01:24.668-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-29T12:01:24.668-07:00</app:edited><title>Quick Analytics</title><content type="html">As mentioned in an earlier &lt;a href="http://dy-verse.blogspot.com/2009/03/how-opensocial-templates-on-orkut.html"&gt;post&lt;/a&gt;, sneak-o-scope is dead due to &lt;a href="http://www.merriam-webster.com/dictionary/with"&gt;opensocial templates&lt;/a&gt;. However, the work done with sneak-o-scope could be used to build a simple &lt;a href="http://en.wikipedia.org/wiki/Analytics"&gt;analytics&lt;/a&gt; system. The system could be used for&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Know how many of your twitter followers actually click a link you post&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Track down that stalker who sends me disgusting scraps on Orkut&lt;/li&gt;&lt;li&gt;Know how many times my thread has been viewed in a forum&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tracking if a friend really clicked on a page send over the IM to him&lt;/li&gt;&lt;li&gt;Track how far an email travels, who view it, etc.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Hence, the requirements for the system should be&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Require no registration, should be as simple as TinyUrl&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Give a url that redirects to the original page, to an image or open a 1x1 transparent png. &lt;/li&gt;&lt;li&gt;Show easy to understand analytics&lt;/li&gt;&lt;li&gt;Send emails when someone is tracked&lt;/li&gt;&lt;li&gt;Allow to have the analytics private&lt;/li&gt;&lt;/ul&gt;I am still working on the UI to keep it as simple as possible, so if you have suggestions, please do write in. I would also appretiate a name for the project.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-6058393379991640079?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/IK27U-wQ83Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/6058393379991640079/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=6058393379991640079" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6058393379991640079?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6058393379991640079?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/IK27U-wQ83Q/quick-analytics.html" title="Quick Analytics" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/03/quick-analytics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4EQ344cCp7ImA9WxVUFEo.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-436181265728889961</id><published>2009-03-19T01:20:00.000-07:00</published><updated>2009-03-19T07:28:22.038-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T07:28:22.038-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="tynt" /><title>How Tynt works - Technical details</title><content type="html">The idea of &lt;a href="http://www.tynt.com/"&gt;Tynt&lt;/a&gt; is simple and effective - whenever stuff is copied from your site, track it and insert a small link-back to your website. It may now be a 100% effective, but the idea would work for people who don't play around with the content that is copied. This post describes how they track stuff that is copied and some enhancements that I think would be useful.&lt;br /&gt;Preventing text to be copied from a website has been around for ages. The &lt;a href="http://msdn.microsoft.com/en-us/library/ms536916%28VS.85%29.aspx"&gt;onCopy&lt;/a&gt; method gives us a handler just before content is copied allowing the actual copied text to be manipulated. The tynt site requires us to insert a script that registers handlers. Here is the step by step explanation, once their script loads on our website.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Register handlers for onCopy, onDrag, etc on the window Object&lt;/li&gt;&lt;li&gt;Get a unique URL that will be used as a tracker&lt;/li&gt;&lt;li&gt;When any of the registered event occurs&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Send an event to the server&lt;/li&gt;&lt;li&gt;On firefox, create a new node with the data that has to be displayed with the content that is copied. Set selection to existing node and this new node.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On IE, add extra text to the current Selection&lt;/li&gt;&lt;li&gt;Cancel the propagation of the current event.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;This works fine for most websites as not many use the on copy event. However, i find the text that is appended to the existing selection a little too obtrusively. Instead of adding such huge content, it would be easy if a simple image is included, with all the links on the image. The image still can be removed, but in my opinion, the chances that a simple small image would be ignored instead of such a huge block of text is high. The image can also serve as a pointer to the places where the copied content travels. There should also be some attribution text added when the client to which content is copied does not support rich text. Something simple in braces should do the job.&lt;br /&gt;As for how the analysis was done, all I had to do was use &lt;a href="http://www.fiddlertool.com/"&gt;Fiddler&lt;/a&gt; to load a formatted version of Tracer.js?user= to understand the code. Then I had to check out the eventHandlers that led me to handleTracing(). The function has a could of inline functions and one of them, called H() is responsible for replacing the text.&lt;br /&gt;To summarize, the idea is nice but it is the javascript implementaion that stole my attention. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-436181265728889961?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/56obHxgrWBM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/436181265728889961/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=436181265728889961" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/436181265728889961?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/436181265728889961?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/56obHxgrWBM/how-tynt-works-technical-details.html" title="How Tynt works - Technical details" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/03/how-tynt-works-technical-details.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UGQng5eSp7ImA9WxVUE0g.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-1666407934835041955</id><published>2009-03-17T23:26:00.000-07:00</published><updated>2009-03-17T23:53:43.621-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-17T23:53:43.621-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sneakoscope" /><category scheme="http://www.blogger.com/atom/ns#" term="opensocial" /><title>How Opensocial templates on Orkut killed Sneak-O-Scope</title><content type="html">Hi,&lt;br /&gt;&lt;br /&gt;A few months ago, I had &lt;a href="http://dy-verse.blogspot.com/2008/04/hacking-opensocial-applications-on.html"&gt;posted&lt;/a&gt; a hack on Orkut opensocial that allows directed phishing attacks on Orkut accounts. The orkut team has acted upon it now and has &lt;a href="http://orkutdeveloper.blogspot.com/2009/02/opensocial-applications-on-orkut.html"&gt;disabled profile&lt;/a&gt; views on orkut. The current specification mandates the use of &lt;a href="http://orkutdeveloper.blogspot.com/2009/03/using-templates-and-data-pipelining-for.html"&gt;templates&lt;/a&gt; for the profile view. Templates with data pipelining would be fine for displaying information but would completly diable all forms of interaction.&lt;br /&gt;This is a problem for the sneak-o-scope application as it relies on the fact that it can make a couple of javascript calls to record visit time, ip address, etc. With templates this is no longer possible. Without javascript, there would be no way to record the time when the user leaves a page. We can record enter time using requests [&lt;a href="http://opensocial-resources.googlecode.com/svn/spec/draft/OpenSocial-Data-Pipelining.xml#rfc.section.5"&gt;os:HTTPRequest&lt;/a&gt;] , but that would still not give us browser details like IP Address, user agent, etc. These requests are proxied through the Google URL Fetch bot. Adding images to the page also are replaced by the proxied version of the images.&lt;br /&gt;The problem was with &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;cross site script attacks&lt;/a&gt; on the applications. The template approach seems to be too limiting. A better stategy would be to use Caja to sanitize the applications better. Since the application runs in its own global object, the "top" javascript can be cajoled to disallow open frames. This would prevent the attack I published, but we will have to take a look at the other possible attacks.&lt;br /&gt;So, as of now, Sneak-O-Scope is suspended. It can start working only when javascript is allowed on the profile page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-1666407934835041955?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/JgmrcnGSl_Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/1666407934835041955/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=1666407934835041955" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1666407934835041955?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/1666407934835041955?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/JgmrcnGSl_Q/how-opensocial-templates-on-orkut.html" title="How Opensocial templates on Orkut killed Sneak-O-Scope" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/03/how-opensocial-templates-on-orkut.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUEQ388eSp7ImA9WxVVFkQ.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-2820376076202512828</id><published>2009-03-10T06:51:00.000-07:00</published><updated>2009-03-10T07:10:02.171-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-10T07:10:02.171-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open mail applications" /><category scheme="http://www.blogger.com/atom/ns#" term="YAHOO" /><title>YAHOO Open Mail Application : Email Header</title><content type="html">Hi,&lt;br /&gt;&lt;br /&gt;A few days ago, I had &lt;a href="http://dy-verse.blogspot.com/2009/02/yahoo-mail-data-leakage-prevention.html"&gt;written&lt;/a&gt; an article about the &lt;a href="http://developer.yahoo.com/mailapplications"&gt;Yahoo Open Mail application&lt;/a&gt; that performed redaction of emails. This is a post about another such application that may prove useful.&lt;br /&gt;There are a lot of websites like &lt;a href="http://headertool.apelord.com/"&gt;this&lt;/a&gt;, &lt;a href="http://whatismyipaddress.com/staticpages/index.php/trace-email-source-IP-address"&gt;this&lt;/a&gt; and &lt;a href="http://abuse.msu.edu/email-tracking.html"&gt;this&lt;/a&gt; that require us to paste the email header in the text box and they display the information in a much more readable format. Having a tool like this inside the YAHOO Open mail would be a lot more simpler.&lt;br /&gt;Technically, the way to create it is simple. We have to attach an drag-drop listener handler that activates when an email is dropped onto the application. The function would require "full" details and hence, we would also get the header in the "part" property of the passed JSON object. Once that is done, its a matter of parsing the information and displaying the information, either in a new tab or in a pop up dialog box. An addition would be to use &lt;a href="http://www.ip2country.cc/"&gt;free ip to geolocation&lt;/a&gt; tools to determine the location of the hop servers and display them as a map. A furthur visualization could be actually animating the mail to give the user, an idea of the delay, etc.&lt;br /&gt;I would love to get this out as quickly as possible, unfortunately, I seem to have lost my &lt;a href="https://bouncer.gh.corp.yahoo.com/"&gt;bouncer ID&lt;/a&gt; for the mail applications. If you know of any, please do let me know.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-2820376076202512828?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/LPH6FPeztAY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/2820376076202512828/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=2820376076202512828" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/2820376076202512828?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/2820376076202512828?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/LPH6FPeztAY/yahoo-open-mail-application-email.html" title="YAHOO Open Mail Application : Email Header" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/03/yahoo-open-mail-application-email.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MDRXozfSp7ImA9WxVVE0g.&quot;"><id>tag:blogger.com,1999:blog-8997727588422391656.post-6916659885134987652</id><published>2009-03-06T08:01:00.000-08:00</published><updated>2009-03-06T08:04:34.485-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-06T08:04:34.485-08:00</app:edited><title>Barcamp Bangalore</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://barcampbangalore.org/bcb/wp-includes/images/bcbbanner2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 298px; height: 298px;" src="http://barcampbangalore.org/bcb/wp-includes/images/bcbbanner2.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8997727588422391656-6916659885134987652?l=dy-verse.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Dy-verse/~4/QsM4feZqBZo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://dy-verse.blogspot.com/feeds/6916659885134987652/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8997727588422391656&amp;postID=6916659885134987652" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6916659885134987652?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8997727588422391656/posts/default/6916659885134987652?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Dy-verse/~3/QsM4feZqBZo/barcamp-bangalore.html" title="Barcamp Bangalore" /><author><name>Parashuram</name><uri>http://www.blogger.com/profile/10684165552621181878</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="06366582606537457783" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://dy-verse.blogspot.com/2009/03/barcamp-bangalore.html</feedburner:origLink></entry></feed>
