Skip to content


Wave Reader

Wave Reader started around early December of 2009 to fill a somewhat significant void. Embedded waves could not be accessed by people who were not logged into their Google accounts, there was no way to link to a specific blip and the official wave client was insanely slow. Most of these issues have been mitigated, so the project is virtually defunct.

 

Posted in Uncategorized.


μwave: updates again

Edit mode is no longer experimental, a new implementation includes a tiny diff engine which allows editing a post without necessarily destroying layout. Root blip editing is now possible. There is a new tag list on the bottom of each wave, also including an “Add Tag” button. Search results are now formatted with modification date, number of blips, number of unread blips and read/unread state. There is a new settings panel when you click the logo. Added support for the internet exploder browser starting at version six. Owner_utils is a setting which adds utilities like “set everyone as read only”. The New Wave feature no longer creates pop-up prompts, but rather silently creates and opens an empty wave. It renders the live-editing cursors. There is a new multipane interface for desktop. Gadget support has greatly improved. It handles rotation on a mobile webkit device better. It now uses Wave Data/Robots Protocol 0.22 and renders using the newly exposed conversation model.

Posted in Microwave.

Tagged with , , , .


Done switching webhosts

So I guess it’s done, the DNS may still be propagating, but it should be not too bumpy.

Posted in Meta.

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


It’s host switching time.

Every year at about this time, I switch hosts, now I’m switching to Host Monster. This site may probably be down for the next day or so.

Posted in Meta.

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


Anony-bot + Embed API

Anonybot is something that might notice looks eerily like microwave which eerily looks like Wave Reader. It also notably looks exactly like the current version of static-bot. That’s because it is static-bot, just renamed with a focus on anonymous posting. It supports anonymous addition of tags, replying, deleting, and editing as well as adding participants. It renders everything almost perfectly, because I have yet to find a rendering flaw – gadgets do not render for the same reason as microwave (speed + I hate the Wave Reader hacky solution + google’s solution doesn’t work yet).

It’s really quite simple to use. To allow the bot to access stuff, just add anony-bot@appspot.com as a participant. It’ll make a reply with a link to the public URL. The URL isn’t cached or placed in any list, so unless you link to it, nobody can find it, however it is based on the wave ID, so if the wave ID is known, so is the static copy.

Access controls couldn’t be easier. Mark the bot as read-only to make the Anonybot version read only or delete the bot to disable the URL.

So that’s the first part of this post. The second is arguably more exciting.

The Wave Embed API is pretty great. Its pretty easy to use. But it also has one pretty big disadvantage: there is no theme integration whatsoever. I’m experimenting with a new wave embed system, built upon the Anonybot and Microwave architecture which will allow deep theme integration. So here’s the basic idea: You add the code to your theme, it automatically posts the content of the post to wave and creates a public wave for it, allows people to comment, links to the full wave client so people can follow the comments, and allows people on wave to discover your post and get to your site.

I’m not a designer, so the integration still sucks, but that’s the proof-of-concept using a few lines of configuration JS and a little CSS. Here’s the longer writeup of the experimental version. You can try it out here. I’m probably going to rewrite it to use less globals soon if people are interested (please comment here if you are).  Please refer to the newer post on the topic.

Posted in Anony-bot, Deep Comment Integration, Google Wave.


Ajax Animator on Chrome Web Store (well, when it’s released)

http://antimatter15.com/ajaxanimator/webstore.crx

If you run chrome --enable-apps and install it, you might be able to see an icon and magically be able to use the app offline. Or wait until the webstore is finally released and then you can just install it.

Edit July 10, 2010: Actually it was a while ago, but now the app works again and automatically restores the last state using localstorage.

Posted in Ajax Animator.

Tagged with , , , , , , , .


The Forward Button

Taken from the chromium site, which is really cool itself.

I would dare say that one of the least useful buttons on my browser has to be the Forward button. It’s the analogue for the far more used back button, but most of the time, people progress forward, not backward (obviously a pretty good thing). There’s still a huge bit of potential for this underused button. I have a mouse with buttons on the left side for navigating forward and back, It’s really quite nice (though the triple-click button makes me develop a tendency to click randomly when reading, which makes those sites with the double-click lookup very annoying).

One of the most horrible developments in usability has been Pagination, because someone thought it would be a great idea to split everything into annoying separate pages. Sure it was a way to get around a technical issue of browser reflow while progressively rendering and bandwidth usage. But it set a nasty precedent for the future of web-interaction.

Now we have to live with it.

So I was thinking, is there any way to use my side buttons in Javascript? I quickly prototyped a demo but to my dismay, clicks only triggered with a .button of 0, 1 or 2. Then I realized that I could programatically alter history and detect hash changes. So then came another prototype which worked by setting the URL to “#Math.random()” and then doing a history.go(-1), hooking onto window.onhashchange to see when something changed. Then I discovered the new HTML5 history.pushState() and onpopstate events and switched accordingly.

Now, that it’s possible to trick the browser into populating the future of history. How do you decide what the user is probably going to next? The great thing is that if we guess wrong, it doesn’t really matter, anything is still better than a non-functional forward button.

So how do you predict where the user wants to go next? In most paginated systems, on the top and/or bottom of a post is a series of links [1] [2] [3] [4]. The current page is usually grayed out and unclickable. This makes it pretty easy to detect, just iterate each link by node order, parseInt the innerText and see if there’s a single-number jump in the middle, offset it by one and then you get the next page in order.

I actually wrote this such a long time ago that I basically forgot where the extension is and after using it, I’ve disabled it myself because chrome seems to have a few nasty bugs that cause it to crash (tabs at least) quite frequently when it’s enabled. But here it is.

Posted in Design, The Foward Button.

Tagged with , , .


stick figure animator

One thing the ajax animator’s pretty bad at is stick figures. Sure it’s not impossible, but it can’t really compare with the ol-fashioned frame-by-frame joint-manipulation likeness of Pivot. It’s called stick2 because the original experiment with stickfigures was named stick.html, and when I went to extend it and didn’t feel like setting up a git/svn repo, I copied the file and named it stick2.html, and with no good project-naming skills, it stayed that way.

Anyway, this was a project that got pretty close to completion in early march, but I never bothered to blog about it until now. It should work pretty not-bad on an iPad J(except the color picker), though honestly, I’ve never tried it.

The interface is pure jQuery/html/css. The graphics are done with Raphael, but the player actually uses <canvas> for no particular reason.

Basically, it’s organized into two panels, the left-side figures-box and the bottom timeline. The figures-box contains figures (amazing!) and clicking on them adds them to your canvas. The two defaults are the pivot-style stickman, and something called “blank” which is a root node with no additional nodes. Though it shows up as a orange dot, unless you add something to it, it doesn’t have any actual look when viewed in the player.

On top is the context-sensitive buttons. Well the buttons in my screenshot aren’t context sensitive, they’re permanent. But when you click on a node, a new set of buttons (and words too!) appears. One is a line and the other is a circle. Click them to add a new segment or circle to the currently selected node. Then are various settings for the current segment (each node other than the root one is associated with a segment). Clicking those allows you to modify them. Also, a red X appears on the right, and that basically means remove the node and the child nodes.

So, now you have some extra nodes, how do you change them? Simply hold it down and drag, and the the segments move as well. But note that the length of the segment doesn’t change as you move it. That’s because by default, it locks the length of the segments. There are two ways to get around it. The first is to hold shift while dragging. The second is to tap the little lock icon on the top left.

On the bottom, is the timeline with live-previews of your frames with a semitransparent gray backdrop of numbers. Switch between each one by clicking on them and add one at the end by hitting the green “Add new frame” button.

On the canvas, there are two yellow squares, those allow you to resize the canvas.

On the very left of the top toolbar, is the play button. Hit it and the figures toolbox minimizes and it plays out your animation. Click it again to get back. Then is a little upload button. Hit it and then a little box pops up with a link to where you can find your animation in a way that you can share and to edit (not actually edit, but more like fork, as each save is given a unique id). Next is the download button which you hit, and get prompted by a big prompt-box which you use to paste in the ID of the animation you (or someone else) has saved, so you can edit it. Most of the time that’s useless as when you send a link with the player, it has a button which says “Edit”.

Sample animation: http://antimatter15.com/ajaxanimator/stick2/player.html?rlsm4lx14c

Try the application out: http://antimatter15.com/ajaxanimator/stick2/stick2.html

Code: http://github.com/antimatter15/stick2

Posted in Ajax Animator, Stick Figures.

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


Ajax Animator for iPad Updates

This isn’t really new, but I just remembered to write a post about it. Ajax Animator for iPad got a relatively minor, but certainly pretty important update.

The new update incorporates the TouchScroll javascript library to have nice flick-to-scroll-ness throughout native iPad apps.

The VectorEditor core had a few bug fixes, rotation now works and so does resizing (though it’s still susceptible to the always-existent resizing of rotated objects awkwardness – I would love it for someone to fix it). However, resizing doesn’t change the size of the bounding box, which is a somewhat awkward aesthetic but it’s still functional.

Posted in Ajax Animator.

Tagged with , , .


Mobile Flashcard App

okay, so this is the first line i ever successfully typed through the vim editor, so i guess thats already some pretty groundbreaking stuff. Sadly, it doesn’t get any better. The whole project is pretty much just as useless.

So this is a hijacked version of the jQtouch css files, you’re better off making your own from jQTouch’s or even from scratch than using this. Its literally the famed ‘code dump’, where i throw code over the imaginary brick wall into your faces and the project dies from then on. Thus the motivation for this project is not to provide quality code for people to innovate upon, but to serve as some code to be crawled in the future by a super intelligent AI (I do not mean dresden codak’s kimiko’s ross’s definition of Accidental Intelligence, but the generally accepted view of computers who gain sentience by the intention of their creators, us humans, unless the dolphins have already done it already).

It’s not hard to use at least.

It exposes ugly globals like current and next. Obviously, the current is the currently visible page. And also pretty obviously, the next is the hidden next page. Go edit them anyway you please.

After that, just run transition(‘name of transition’) to do a magical transition to the next one.

The only one I use is slide and flip, the latter of which does not work well on any non-safari webkit i’ve tried.

Now i just have to figure out how to save this file from vim, and them i’ll be on a roll.

https://github.com/antimatter15/simple-transitions

Posted in Uncategorized.