Skip to content


Project Wikify Updated

Yes, it's true. I finally updated Wikify

In 2008 (That long ago, I know!), I started something called Project Wikify. Basically, it was a bookmarklet which let people edit stuff on web pages and save it onto a server. A lot of people may be aware of the simple thing where pasting javascript:document.designMode=”on”; into the URL bar makes the internet explode into awesomeness such as replacing every other word in this blog with the name of a certain genitalia. Of course, the absolutely huge issue with this is that you really can’t share your awesome creation.

So here comes Wikify to fix that, the age-old problem of sharing your vandalized sites has been finally resolved….  a year ago. And since then, nobody really has ever cared.

So, I looked back at it last week, and realized how painfully crappy the website for it was. To fix it, I decided to test out iWeb, yes, a totally non-leet WYSIWYG editor. But yes, that’s how crappy my web-design skills are, so the result is quite an improvement. Anyway, I used the Blank-Page template, so at least you can spare your eyes from yet another generic theme (*cough this blog cough*).

While designing the site, I tried out Wikify and discovered that it didn’t work on Wikipedia articles and the News button didn’t work. So I quickly got those features working, so now i’m writing this blog post about my tiny edits and the new site.

http://wikify.antimatter15.com/

Posted in Project Wikify.

Tagged with , , , , .


Wave Unread Navigator

screenshot_050I made an extension which shows a green sign (like gmail) on the side whenever there are blips outside the viewport. It allows you to quickly and effectively use keyboard navigation without blindly checking above and below, or generally scroll without needing to guess the position.

It comes as a Chrome Extension and also as a Greasemonkey Userscript.

Posted in Google Wave.

Tagged with , , , , , , , , , .


The future of the Ajax Animator

Eventually, what will happen is a pluggable editor system and swapping between the new Mini UI and the old standard UI. The pluggable editor system will enable switching between the existing VectorEditor and OnlyPaths editors as well as SVG-edit. Possibly, OnlyPaths will be phased out as SVG-edit supports every feature of the former as well as many more. The priority editors with the new version will be VectorEditor (the Mini UI editor, based on Raphael so it works fine cross-browser, but is also much more limiting than the rest, including OnlyPaths which it partially replaces). SVG-edit is an awesome project which is being actively developed, and will add new features that may make the Ajax Animator viable for more than just stick figures. New features that will come from the transition could include Gradients, Curved paths, Wireframes, Zoom, Groups, Align tools, Rotation and Resizing (without bugs!), Polygon/Polyline editing, to name a small subset. It’s likely that SVG-edit will have far more features by the time it’s fully implemented. It’ll be awesome.

The SVG-edit UI won’t fit well with the Mini UI (which I actually like more), so the classical UI will be revived.

Posted in Ajax Animator.

Tagged with , , , , , , .


CSS3 Sideways Google

I was surprised to find that one of the main referrers to my site recently has been Twitter. Looking into it, it seems to all be for my quickly hacked together CSS3 Sideways Google. Which uses the new CSS3 transforms supported by Webkit and Gecko (Firefox, Chrome and Safari) as well as the freaky DirectX stuff Microsoft has (Only major browser that isn’t supported is Opera, who is lagging a bit).

And in the spirit of CSS3 Sideways Google, I present CSS3 elgooG

It also appears that the awesome rotateme.org website was built entirely off of the original CSS3 Sideways Google and actually got 1500 diggs :)

Posted in Sideways Google.

Tagged with , , , , , , , , , , , , , , , , , , .


Who wants a Wave invite?

I have enough to give away to some people. I guess I’ll designate ~20 to people who go to my blog or something. Leave a comment and I’ll take your plea into consideration.

Posted in Google Wave.


Wave uses Closure

Closure Tools were recently released by Google to allow for others to use the same rich libraries that Google uses internally. Its used by Gmail, Google Docs and Google Maps, but interestingly also used by Google Wave. While they don’t actually announce that Closure is used in Wave, the view-source obfuscated mess from Wave does strongly show it.The reason why its use in wave is more interesting than most others is that Wave is in GWT, while the rest are pure JS. This implies that an interface to the Closure Library may be coming to GWT. While the interface doesn’t seem to be made from Closure, there are references to “closure_hashCode” and “goog.net.BrowserChannel”.

Posted in Google Wave.

Tagged with , , , .


Wave Search Pause Button

An issue now with the floods (is there any post about wave complete without a pun?) of people in wave, the with:public channel (of waves!) is becoming a unusable tsunami (har har har) of waves where clicking on one will end up opening up something else totally randomly as it has shifted down several by the time you click it.

So what is there to stop it? Well, I made this insanely great, floodwall: the Wave Pause button. It’s a simple bookmarklet that if you click, it stops all incoming updates to the search panel and clicking it again restores it.

The functional bookmarklet can be found at http://antimatter15.com/misc/wave/pause.html which is a rather hideous looking page hacked together quickly.

How does that work? Well, it turns out it’s actually not that easy. My first idea was to just find the function which updated things (it turned out to be Vwh) and replace it with function(){} and restore it later. That worked fine… But I remembered some evil crap that google said, about GWT source being browser-targeted. Incidentally that means Wave gets dfferent versions of the code with different function names, and if they ever update wave, all the function names screw up too!

Oh noes! What now? Well, it uses a sort of pseudo-heuristic approach. It searches for a big characteristic which is .style[w2g]. BUUT, w2g is fwg in chrome! So first it iterates through all variables and finds one whose value equals “display”. Then it takes that variable name, and searches for functions which have .style[name of string which equals display] twice. That reduces the pool significantly. Then it checks to make sure it has the string .innerHTML in it, and has 4 arguments. After that, well, you are reduced to a single function and you can use the same method described above.

Posted in Google Wave.

Tagged with .


Auto Offline Manifest Generator Bookmarklet

I have a new and insanely great idea which I will try implementing tomorrow. Basically, its going to be a bookmarklet and clicking it will parse the page and extract all the files used, generate a HTML5 Cache Manifest, encode it as a Data URL and open up a iframe or window with the manifest parameter set and then the site will be cached for offline!

Actually, this looks technically impossible. That sucks. Same Origin rules suck.

Posted in Uncategorized.


XPath Bookmark Bookmarklet

javascript:(function(){
//inspired by http://userscripts.org/scripts/show/8924
var s = document.createElement(‘script’);
s.setAttribute(‘src’,’http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js’);
if(typeof jQuery==’undefined’) document.getElementsByTagName(‘head’)[0].appendChild(s);
(function() {
if(typeof jQuery==’undefined’) setTimeout(arguments.callee, 100)
else{
jQuery(“*”).one(“click”,function(event){
//http://snippets.dzone.com/posts/show/4349
for(var path = ”, elt = jQuery(this)[0]; elt && elt.nodeType==1; elt=elt.parentNode){
var idx = jQuery(elt.parentNode).children(elt.tagName).index(elt)+1;
idx>1 ? (idx=’['+idx+']‘) : (idx=”);
path=’/’+elt.tagName.toLowerCase()+idx+path;
}
window.location.hash = “#xpath:”+path
event.stopImmediatePropagation()
})
}
})();
})()

Sometimes you want to link to a certain part of a web page. That’s great and works well if its a nice site that clearly defines anchor tags to link to, but what if there isn’t?

Today I just remembered something and I thought that I saw something earlier with a xpath URL hash. I googled it and couldn’t find anything native to the browser (please correct me if I’m wrong) but found this script: http://userscripts.org/scripts/show/8924 which is basically what I was thinking about. But it was allegedly hard to make those URLs, so I thought why not make a bookmarklet to make linking to those URLs simple? So I quickly hacked this together

XPathLink (Just drag it over to your bookmarks bar as with any other bookmarklet). To use, just click on the bookmark, and click on the element you want to link to. You should see the URL will update with a xpath hash showing you the copy-pastable link to that element. The code is quite simple and should work on Firefox, Chrome and all the other browsers (maybe even IE) but the ability to auto-scroll and actually use the links is only available to Firefox and potentially Opera and Chrome.

And I’m working on a Chrome Extension for the original userscript (which should work with Chrome’s userscript support, but I’m going to try packaging it as a chrome extension file) But sadly chromium for linux isnt up to speed especially with extension development.

The source can be found http://gist.github.com/223708.

Update: Fixed the link for the path and added some stuff. Update 2: Fixed bookmarklet, now scrolls to clicked, executes only once, prevents default

Posted in Other, Uncategorized.

Tagged with , , , , , , , , , .


Firebug Console Error Stack

I noticed that unlike errors thrown otherwise in the page, when there is an error executing something in the console, you get an error with a link to an object on the DOM browser and have to parse a non-line-delimited mess of the error object instead of the nice looking stuff in the console saying line numbers.

To get around that and have the nice parsed out pretty error messages, wrap the code in the console with try{/*code here*/}catch(e){console.error(e)} though I hope that its just a tiny issue that they will eventually resolve in a later version

Posted in Uncategorized.