Tag Archives: Programming

Greasemonkey script can create a page from scratch? How do you fire it?

I was thinking about IdentityBurro. [IdentityBurro is a Greasemonkey script that, for example, when you are on the page of user phauly on del.icio.us, inserts into that page some links to the page of user phauly on flickr, 43things, webjay, last.fm, …]
I was thinking that instead of simply inserting a link I could directly insert into the page some photos of the user on flickr and some things he has been doing and some songs he has been listening. So basically it would be easy enough to produce a page like the ones in which technorati aggregates a lot of information about a tag (example) by showing some photos of the user from flickr, some URLs bookmarked by the user on del.icio.us, etc.
But why inserting all this information into a, for example, already existing flickr page? Why not creating a new page at all?
So the question is: can Greasemonkey be used to create a page from scratch and not just inserting some HTML elements into an already existing page? I guess the answer is yes but are there already examples out there? And, in this case, what fires the script since there is no originating web page? Could I run it just by typing in the address bar something like greasemonkey://my_aggregator.user.js?
I guess this userscript behaviour is in the air and actually, while I was typing this, I kinda remember that was propably jesse who was pondering this possibility loudly enough for me to hear it.

Identity Burro: making social sites more social.

Identity Burro Project Page.
[Impatients can check the Flash video or the Screeshots or directly install the script (current version 0.4).]
Identity Burro is a Greasemonkey script for Firefox that gives quick access to all the public aspects of a person: photos, blog, preferred sites, preferred songs, etc.
Precisely, when you navigate on the Web page of a certain user on (for example) Flickr, it inserts into the Web page links to the page of the same user on , Del.icio.us, Technorati, CiteULike, WebJay, Last.tm/Audioscrobbler, Rojo, 43things, 43places, AllConsuming, LiveJournal, Simpy (see Screenshots). And of course it works also on the other sites, i.e. when you are on del.icio.us page of user “alice”, links to the userpage of “alice” on the other sites are shown (see Screeshots).

An example? Have it. danah seems to use consistently the nick “zephoria” on social sites so you can try the extension with her Web presence (if you prefer to first watch and then try, you can see the Flash video of what will happen).
1. Just install Identity Burro script (or see install howto ).
2. Then visit (for example) zephoria page on Flickr or zephoria page on last.fm.
3. Now on the left of the flickr or last.fm danah’s page, you see a box with some icons that links to the pages of danah on the other social sites (see screenshot).
4. You can also expand the box to see more descriptive text for links (see screenshot).
5. If you click, for example, on the del.ciou.us icon, you land to zephoria page on del.icio.us.
6. Can you think of another? Well, feel free to add it in the comments.

So basically when you find an interesting user on, say, del.icio.us, you can try to see (one-click-away) her photos of Flickr, and her blog, and her preferred songs on Last.fm and Webjay, and the things she wants to do on 43things, and … Of course, sometime the user will have a different nick on different sites and in this case the script is not that useful (however see possible inprouvements) but, hey, it is only one-click-away so you can give it a try anyway, right?

Possible improvements
1. Assuming that a person has the same nickname on all the social sites is of course working on very limited cases. So what do we need? We need a parent place where an user can reasonably keep a link to all her identities (and possibly expressing them with a microformat, hIdentity?), and what better than your own blog? Possibly we could use OpenID, a decentralized identity system but I haven’t thought too much about it. Do you have any suggestion?
An OpenID identity is just a URL. You can have multiple identities in the same way you can have multiple URLs. All OpenID does is provide a way to prove that you own a URL (identity). And it does this without passing around your password, your email address, or anything you don’t want it to. There’s no profile exchange component at all: your profiile is your identity URL, but recipients of your identity can then learn more about you from any public, semantically interesting documents linked thereunder (FOAF, RSS, Atom, vCARD, etc.).
2. From a visual point of view, the HTML element inserted in the HTML page (divs, links, etc) inherits the CSS style of the current site. For example if flickr would have a black background and links in shocking pink, the IdentityBurro box would have them as well. Since I would like to have the same box, with the same colors and spaces between lines and fonts in all the possible sites, the question is: there is a way to clear all the previous set styles for an element? a sort of resetStyle? or somewhere a list of how all the CSS properties are set by default? If you have suggestions, the comments may be a good place where to place them. [In the code there is the variable resetStyle that tries to reset all the styles and it is prepended in every your_element.setAttribute("style",resetStyle+ "your specific inline css here")].
3.Still some sites to be added such: furl, wist, blogmarks, tagsurf, upcoming, jots, podcast, bloglines, smugsmug, bookswelike, kinja.com. Any more?
4. creating an ajax method that query google or yahoo! for “<username> blog” and creates a link with the first returned result (possibly the highest in the two combined queries) with anchor text such as “guessed blog of <username>”. For the ajax-power, I guess I need to steal, … ehm, take inspiration again from the fantastic bookburro code! ;-)
5. peritus was thinking about doing something with FOAF information as well. I can’t remember now precisely what.

Thanks to:
Jesse for providing the fabolous BookBurro Greasemonkey script and releasing it under Creative Commons “Attribution-ShareAlike 2.5”
Peritus for improuving the script in various ways.
– The mozilla community at large for providing Firefox, a web browser it is fun to play with (and hopefully, in the process, improuve it a bit).
– Otis Gospodnetic, creator of simpy.com, for sending me by email the code for adding simpy to the list of supported sites that was introduced in version 0.4.

The script code is released under a Creative Commons “Attribution-ShareAlike 2.5” (since BookBurro code was). So feel free to play with it, improuve it, redistribute it, …

How to install Identity Burro
1. Install the Mozilla Firefox browser;
2. Install the Greasemonkey extension;
3. Install the Identity Burro script (current version 0.3).
[If you have problems, check the Flash video]
Continue reading

Releasing under open licences and getting some feedback.

This still amazes me. I released some slides under Creative Commons licence time ago and I got some emails with a improuved version of the slides and some comments about typos, errors. I released IdentityBurro under Creative Commons (I would have preferred GPL but the original code of BookBurro was under CC as well because the a snippet of code Jesse used was under CC, I guess this is what virality of licences really means) and I received 2 emails of people using the code in different ways.
Jeremy wrote me “Because I learn by tinkering, I was able to pick through your script and adapt it to provide this functionality.”. His greasemonkey script, The Flickr Tag Convergence Script, allows you to search for any tag on a Flickr photo page on either del.icio.us or Technorati with one mouse click. The script places small icons (one for del.icio.us and one for Technorati) in front of each photo tag (see the screenshot). The script is also available on UserScripts.org, another shiny creation of Jesse, BookBurro’s creator.
On the other hand, Daniel was so kind to improuve the Identity Burro code by looking over the Todo list. He added some of the other sites I listed as wanting to include (Cite-u-Like, Last.fm (+audioscrobbler now that it’s completely incorporated into last.fm), 43things, 43ideas@43things, 43places, 43ideas@43places, 43.allconsuming.net, Rojo and LJ). He also added the shrink/collapse button I mentioned. So I played with it again, added some more funcionalities and there will be a 0.3 version of IdentityBurro in minutes.
I just want to mention that I created Identity Burro tinkering with the code of Book Burro. I met Jesse, Book Burro’s creator at AAAI, and I was amazed to meet him and I thought I had a lot to learn by looking at his code, I was right. [During his AAAI invited talk, Jay Tenenbaum showed one slide about Book Burro, and at the end of the presentation, Jesse showed up saying “you showed a slide about Book Burro, well, I created Book Burro”]. That’s amazing, I want something like that happening to me as well in future! By the way, Jesse is now visiting Commerce.net and he ponders about Trust – Since userscripts operate outside of the security model, a malicious userscript could send every keystroke to the bad guys. A combination of peer review, and automated testing will be used to help secure end users.. UserScripts.org aggregates scripts but the actual code stays on the creator’s site, so I think the idea is that, say, Mark Pilgrim trust/approuves a certain Greasemonkey script and I trust Mark Pilgrim, I can install the script without examining the code line by line. What if the bad guy’s web server, mine for example, serves 90% of the time a “good” script and 10% of the time (or only to people using Windows that are probably not going to look at the code) serves a “malicious” script? Should Mark Pilgrim just trusts a generic URL or it is better to tie his trust action to a specific file content, for example associating an MD5SUM to the trusted file? More clearly, the trust action should be “I trust the script served at http://example.com/script.user.js” or “I trust the script served at http://example.com/script.user.js whose MD5SUM is 34GFGF94RU…”? The second provide more security but every time you release a new version, people have to restate their trust in your script by re-reading the code. So Jesse, what do you think?

AjaxOffice / WebOS / Microsoft starts shivering

Many possible titles for this entry on Kottke, and all of them means “start counting microsoft’s remaining days”. This is nothing too new for AjaxOffice-aware people but the article is very well written. A question for you: should the code running this apps be Free Software? I think so. Moreover, Kottke reasons that the entities who can create WebOS are just Google, Yahoo!, Microsoft, Apple or Mozilla Foundation.
And why not the world community starting for example developing AjaxOffice on Sourceforge?
Oh, yes, I was going to forgot; the titles of the post were:
* GoogleOS? YahooOS? MozillaOS? WebOS?
* You’re probably wondering why Yahoo bought Konfabulator
* An update on Google Browser, GooOS and Google Desktop
* A platform that everyone can stand on and why Apple, Microsoft, and, yes, even Google will have to change their ways to be a part of it
* The next killer app: desktop Web servers
* Does the Mozilla Foundation have the vision to make Firefox the most important piece of software of this decade?
* Web 3.0
* Finally, the end of Microsoft’s operating system dominance

Ruby on Rails Rules

After seeing at AAAI05 what Jesse is able to do with Ruby on Rails, I decided I have to learn it.
Rails is a full-stack, open-source web framework in Ruby for writing real-world applications with joy and less code than most frameworks spend doing XML sit-ups.
So far so good, it has been a great-great pleasure meeting this joy-toy. My suggestion for get going:
1. See the incredible “how to build a blog engine in 15 minutes with Ruby on Rails” video. [Even if you don’t want to start learning a new language/framework, trust me, check the video, you won’t regret it.]
2. Read the “Four Days on Rails” step-by-step tutorial (and create the code along).
3. Read the Really Getting Started in Rails, if you still have some doubts, especially if you haven’t used Ruby before (I didn’t) and don’t want to learn completely the language (I don’t). [info: Ruby is a language, Rails is a framework for building web applications that uses Ruby]

Tripods: online, multiplayer Google Maps game.

Some days ago I was wondering about Creating playable Games on Google Maps. I received an email today from Thomas Scott: he created Tripods: online, multiplayer Google Maps game.
How To Play? – Your job is to battle invading Google Maps tripod markers that are invading Manhattan!
I added it to the Games on Google Maps wiki page. Are you aware of more games? If so, would you mind add them on the wiki page?

Identity Burro: GreaseMonkey extension for social sites.


UPDATE: there is now an IdentityBurro project page
You are looking at the page of xyz on flickr and you would like to see xyz‘s bookmarks on del.icio.us?
Or, you are on the technorati profile page of abc and you would like to see abc‘s photos on flickr?
Well, if one of these desideratas has been in your mind before, you now have it!
Enter Identity Burro (or IdentityBurro), a GreaseMonkey extension that inserts, in the profile page of user xyz on flickr or del.icio.us or technorati, the link to the profile pages of user xyz on flickr and del.icio.us and technorati. Your social sites are now more social!
See the screenshots.

Still with me? Then I guess you might want to install:
   Current Version: Identity Burro v0.1

At the moment there is nothing better I can do that assuming an user has the same nick on every site: I assume xyz@flickr is xyz@del.icio.us and xyz@technorati. I know this is by no means guaranteed to be true (or desirable). I hope (and ask) that one of this social sites will soon let its users to enter which are their nicks on other sites. In this way I would be able to get this information and put the correct links when xyz@flickr is called abc@del.icio.us.

And of course, as you can see by the name of the extension, inspiration for this extension came from the mighty BookBurro extension, whose creator Jesse I just met few days ago at the AAAI 2005 conference in Pittsburgh.
The code is released under a Creative Commons “Attribution-ShareAlike 2.5” licence (since Book Burro was released in this way and the shareAlike option didn’t really give me a chance to change licence for a GPL).

If you like, you might want to let me know if it works in the buggy browser, I mean, Internet Explorer.
# when expanded, part of the unexpanded interface (buttons and icons) remains in background, more transparent. understand why and fix it
# when expanded the “expand” icon should become a “shrink” icon (the arrow in the other direction).
# some CSS properties are inherited from the current site, so that for example, the extension looks a bit different in flickr and in del.icio.us. Understand which are the properties of which elements and overwrite them (surely the background of some elements is inherited).
# adding more social sites, for example, webjay, citeulike, last.fm, audioscrobbler, furl, wist, blogmarks, 43things, tagsurf, upcoming, jots, podcast, consumating, rojo, bloglines, smugsmug, bookswelike, kinja.

Leave comments to this post for communicating with me about the extension.
Continue reading

Can your mind manage all the Greasemonkey you installed?

After meeting BookBurro’s creator and listening a great talk about microformats (and how greasemonkey extensions can assemble them to create useful services for you) past week, I’m thinking a lot about GreaseMonkey. For example, I have more than 4 extensions that modify google.com and I have no more idea if what I see is the original content sent by google or if it is modified/created by one of the 4 extensions. I see that Lucas Gonze had a similar problem: he was commenting on ReBLG icons being adopted by all the bloggers in few days but in reality it was an extension installed by him (and forgetted) doing the insertion in the HTML pages he was seeing. [Lucas is the creator of the great WebJay.org] For this reason he suggests to add a greasemonkey icon near every modification made via extensions. I’m not sure it is the best solution since I will end up easily having hundreds of GM icons in the pages, anyway it is something we need to think about.
And I just want to note, since every day it is easier for anyone to write “code”, that this quotation becomes more and more true:
  The moral is obvious. You cannot trust code that you did not totally create yourself.
      — Ken Thompson, Turing Award Lecture [Thompson, 1984]