|
Posted May 22 2006 I needed some valid SWF files with constrained character sets for an injection PoC. Putting them here in case someone else needs some. PHP has finally taken the plunge into the 1960s by implementing GOTO. Here's an implementation for Java. A patch for a serious Java bug. No longer needed as of June 16. Max & Michael have written a Max/MSP driver based on the multitouch code.
My CSS-fu is weak; please use a recent browser. Random, semi-related image by flickrich. |
SmackBook ProSmack your MacBook to change desktops. Historical note: This is from 2006, and the code depends on a specific bug in amstracker. Don't expect it to work now. Several desktop managers come with this functionality built-in noadays, so you don't need to do this.
Why?
Of course, if you're using something like Emacs or Butler, all your keys will be taken already, so you'll need to use some sort of Command-Ctrl-Shift-4 keystroke for the actual desktop switching. Turns out, the laptop has a built-in motion sensor. Nominally, it's there to protect the internal hard drive. The basic idea is this: If the accelerometer suddenly notices that the gravitational pull of earth is no longer present, the most likely explanation is that the laptop, sensor and all, is currently accelerating at 9.81 m/s² towards said earth. In that case, it will (wisely) try to turn the hard drive off in preparation for impact. It can, however, also be used in situations not involving lobbing the laptop across the room, fun though that may be. Demo
Desktop Manager patchFirst, you'll need to be able to control Desktop Manager from
outside. Cocoa has a nice class called NSDistributedNotificationCenter
which can handle simple message passing between applications. DM uses
a notification center internally to send "next desktop", "previous
desktop" commands to itself, so the patch just replaces the normal
version with the distributed version. I added the following to
[[NSDistributedNotificationCenter defaultCenter] addObserver: self
selector: @selector(selectNextWorkspace)
name: NOTIFICATION_NEXTWORKSPACE
object: nil
];
[[NSDistributedNotificationCenter defaultCenter] addObserver: self
selector: @selector(selectPreviousWorkspace)
name: NOTIFICATION_PREVWORKSPACE
object: nil
];
To control all the windows in the system, an application needs to have access to
the CGSUniversalConnection; only one application can have that at a
given time, and the Dock tends to win the battle. Desktop Manager sneakily uses
Reading the sensorFor the actual sensor reading, I used amstracker by Amit Singh. He does not allow redistribution, so you'll have to get it directly from the source. notify: Remote control for Desktop ManagerThis 15-line program lets you send random notifications to any running application.
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
[[NSAutoreleasePool alloc] init];
if(argc != 2) {
NSLog(@"Use: %s notification-name", argv[0]);
return 1;
}
[[NSDistributedNotificationCenter defaultCenter]
postNotificationName: [NSString stringWithCString: argv[1]]
object: nil];
return 0;
}
Compile it with gcc -framework Foundation -o notify notify.m, then call it with
./notify SwitchToNextWorkspace.
Actual motion interpreterYou can do arbitrarily fancy stuff here; this 10-line Perl script
just checks to see if the horizontal acceleration exceeds some threshold in
either direction, and calls the
use strict;
my $stable;
open F,"./AMSTracker -s -u0.01 |";
while(<F>) {
my @a = /(-?\d+)/g;
print, next if @a != 3;
# we get a signed short written as two unsigned bytes
$a[0] += 256 if $a[0] < 0;
my $x = $a[1]*256 + $a[0];
if(abs($x) < 20) {
$stable++;
}
if(abs($x) > 30 && $stable > 30) {
$stable = 0;
my $foo = $x < 0 ? 'Prev' : 'Next';
system "./notify SwitchTo${foo}Workspace\n";
}
}
Summary
Updates7/30: And now, the "official" IBM version for ThinkPad, which lets you use "shave-and-a-haircut" as your screen-saver password. 6/29: Smack your Nokia phone 6/27: Smack the penguin: GTollina. 6/17: Less violent (light sensor based) version now out. 6/7: Tom Merritt at c|net has posted a tutorial video of sorts. Thanks! 6/5: Here comes the SmackPad - courtesy of Michele Campeotto, you can shake your IBM ThinkPad to bits too. 5/31: Lincoln Ramsay has released UniMotion, a small open source library for reading the motion sensor. It supports iBook, PowerBook and MacBook Pro, old and new. Go Lincoln! The latest release of VirtueDesktops supports the NSRemoteNotificationCenter protocol detailed above, so steps 1-7 of Dave's illustrated instructions have been superseded by "Install VirtueDesktop." Comments |