FCC to turn down Skype's mobile open access plea: "The FCC plans to dismiss a request from Skype that would require mobile operators to open their networks.
Skype? Wanting someone to be more open? Are you serious? Get back to me when you open your own software up to third parties, then you can go back to writing petitions for other people to open up their own.
(Via Macworld.)
MultiClutch is a great program by Will Henderson which allows you to assign a keyboard shortcut to be executed when you perform a gesture on the trackpad. This proves immensely useful for providing improved gesture functionality to applications.
It should come to no surprise to you dear reader, that the initial functions for the gestures currently in Leopard slightly...well, dissatisfy me. I'm of the opinion that multitouch should be more than just bindings for keyboard shortcuts, but since I have no control over that, I'd at least like the shortcuts to be useful ones. So, with that in mind, I offer up my highly improved (in my own opinion of course) bindings for WebKit/Safari (They will work for both, but you have to bind them for both.)

Let me translate for you dear reader.
Zoom In is the pinch gesture, and it closes the current tab, or window if there is only one tab. This is the only dangerous one, since it's pretty easy to do the pinch gesture when you are scrolling. This can cause some faulty tab closures, which is annoying, and I'm habituated to hitting Cmd+W, but sometimes when I click and link and get a new window, it's really nice to be able to pinch it away.
Zoom Out is the zoom/expand gesture, and it opens a new tab. I use this ALL THE TIME, and really think it should be the Safari default instead of text size, but hey, what do I know?
Swipe Up and Swipe Down go Forward and Backward respectively. I liked these at Left/Right, but not as much as I like changing tabs (What Swipe Left and Swipe Right are bound to) with left and right, and I do that a lot. I understand that the gesture mimics the buttons, but again, I think Forward (Up) and Back (Down) make more spatial sense.
Finally, my favorites. Rotate Right is Cmd+R, which is Refresh. I maintain that I came up with this independently of Jesper, but whatever. It's awesome, and every app that has refresh should use it.
And now, the trump card. Safari 3 added a menu option called "Merge All Windows" which merges every open window and all their tabs into a single window. Similar to above, sometimes I use those pop-up'd windows to continue my browsing, which means I get several windows with several tabs each. This is annoying, and happens frequently enough. However, this has no keyboard shortcut! So sad.
Mac OS X makes this easy however, using "Keyboard Shortcuts" under Mouse/Keyboard Preferences.
You can see that I've added a keyboard shortcut "Cmd+Shift+M" to merge all windows to Safari. NOTE TO WEBKIT USERS: IF YOU USE WEBKIT NIGHTLIES IT STILL GOES UNDER SAFARI. THAT IS ALL. After I've done this, I can easily bind a MultiClutch gesture to do this, and that's just what I did.
So that does it. Let me know what you think in the comments, or on Twitter or something. Also, let me know what other bindings you have for applications.
BONUS: Adium implements gestures in 1.3. They are awesome! Thanks to Zac West for them.
Long time no see blog!
However, I've been busy. Today, I'd like to show everyone one of my final projects for school, which happens to be a multi-touch demonstration using my new Macbook Air (awesome) and Core Animation (also awesome). It's called Photo Touch, and I'll go ahead and let the video do the talking.
Hope you enjoyed that. I'll be back with more real soon. Like I said in the video, hopefully the code will be available after the presentation on the 11th of April. Wish me luck!
Thanks again to Patrick Gibson, Jefferson Han, and Scott Stevenson for their contributions to Photo Touch. (Photos, Ideas, and NanoLife Random Path code respectively).
Continuing my theme of Macbook Air trackpad related posts, today we're going to look at some intriguing differences in behavior between the trackpad and the device that made multi-touch all the rage -- the iPhone. The particular behavior I'm talking about is the swipe behavior in Preview.app. The behavior in Preview is obviously an attempt to mimic how the iPhone allows one to browse through all of the open documents in Preview. In this example we'll use a group of photos to exhibit both behaviors.
Let's start with the iPhone.
On the iPhone, the idea is that the user is reaching out and touching the photo, and "flicking" it to the left or right. So, let's say you reach out to the right side of a photo, and slide your finger to the left. The image then follows your finger, sliding off to the left, and the next image slides in from the right. This is pretty expected -- you have flicked the photo off the screen to the left, and it follows your finger off the edge of the screen. Even if you reach out and touch the middle of the photo and flick just a little bit to the left, the same expected behavior happens. You've grabbed the photo, pushed/flicked it off to the left, and a new image comes in from the right. Of course, the images aren't unlimited and if you attempt to do this when there is not a next image the image attempts to move off to the left, and then bounces back to show you that no image to the right exists, and that you are at the end. This all makes perfect sense, is pretty intuitive, and seems like the logical behavior to model the swipe behavior in Preview after, right?
Apparently not.
As an iPhone user, I approached the Macbook Air with a great bit of excitement. While the applications that currently support gestures don't exactly make me jump for joy, the potential for these gestures in third party applications is simply put, awesome. However, I'd at least expect some consistency between the two platforms.
Unfortunately, Preview falls short.
In Preview, swipes aren't as sophisticated, and in my opinion, not as well thought out as on the iPhone. Instead of the reaching out, touching, and flicking metaphors that work so well on the iPhone, swipes on the Macbook Air's trackpad simply move in the direction of the swipe rather uninterestingly. Sure, they animate nicely, taking full advantage of Core Animation, and when they reach the end of the set the image bounces back. However, Preview decides that reality, and thus platform parity, should fly out the window.
A swipe to the right in Preview, moves to the photo to the right. A swipe to the left in Preview, moves to the photo to the left. This is the opposite behavior you'd expect if you've ever used an iPhone, and sure enough, the opposite behavior I think you'd actually want. Using a multi-touch trackpad is not analogous to using the arrow keys. I'm not trying to arrow through my pictures, my mind is expecting a higher level experience -- I am reaching out and literally swiping through my photos, just like I might turn the pages of a book. Similarly if I rotate, or magnify my pictures, I'd be expecting the computer to act like I'm picking up a photo, and pulling the photo closer to me respectively, and indeed this is what happens.
Now then, it's possible that this functionality is actually intended. If we look at another application that implements multi-touch capability, the current behavior is actually correct. In Safari, moving to the right should in fact send us forward, and moving to the left, should send us backwards. That makes sense after using it a couple of times. There are thus two arguments that can be leveraged for the case of Preview's behavior. The first is system parity. Other applications act this way, thus, Preview should as well. I'm guessing that's the one they chose, and that's why it's implemented this way. I argue that is should be changed, because it just feels wrong. Even more so after you've used an iPhone for about two minutes. The second reason, is that Preview is not necessarily running a full screen context. Thus, the idea of flicking pictures isn't especially clear. However, I get the feeling that's exactly what they were attempting to mimic. When you reach the end of a set of photos, the image has a nice bounce effect, just like on the iPhone. However it bounces the wrong way! That's right, when you get to the end of a group of photos, and continue to scroll as if another photo should be there, the image slides to the right and then bounces back. This is completely wrong. Since the photo should be sliding off to the left, it should do so, and then bounce back, very similarly to how the iPhone works.
I think this ultimately shows one of the interesting aspects of these trackpads being integrated into our computers. It's very easy to get confused about how they should work. Multi-touch shouldn't be just an alternative way to arrow through things. It's an advanced and sophisticated input method, and requires programmers to really think about how users are going to interact with their computer when using gestures. Assuming Apple continues to integrate this technology into their laptops, we will soon be at a point where multi-touch is a big deal. Both platform parity and system parity need to be considered, but more importantly a great deal of thought needs to go into this process, and whether through guidance from the top as to how users should be expected to interact with the multi-touch trackpad, or through a standards system of our own, right now it's up to the developers using the technology to shape the way users use this technology.
All in all, there are far more iPhones and iPod touches around than Macbook Airs. Far more people are going to be used to using these devices, rather than a Macbook Air, and thus I think it's clear the paradigms we should strive to mimic.
Peter Hosey has pointed out, and I agree with him really, that Safari should mimic the iPhone behavior as well. After all, who doesn't want to flick through webpages?
Bugs have been filed on Preview and Safari: here and here.
Ciaó
Luckily I used to work with this insane genius named Lucas, who discovered that if you put a very small value into "m34" of Core Animation's CATransform3D struct, then scale the layer just right, you get a decent facsimile of the iPhone flip.
Since m34 doesn't sound very good in conversation, I think of this at the "Newman factor." The resulting distortion is, therefore, "Newman distortion," and the units in which it is adjusted are Newmans. One Newman is equal to the inverse of the distortion, which I'm pretty sure is math-speak for transform.m34 = 1/distortionInNewmans. In other words, the more Newmans you have, the less the distortion.
For the translation. Notice, still rocking the positive 1/DN. However, if you pull out that dusty old Linear Algebra textbook, and run matrix multiplication on these two matricies, you will notice that the negative values in the rotation matrix cause the 1/DN to become negative. In this case, this is interesting because we happen to have a positive Z increase from our Y-axis rotation that is being unrealistically removed from due to the projection onto our display. This, as Mike puts it, is fine when you are not rendering at full screen, but because you will clip over the edges on full screen, completely ruins the experience on a device like an iPhone.
ND = 1 / ((Layer.Height / Layer.Width) / 1000)
This equation is a general equation, meaning it will work on all displays. However, rendering as an art is derived from the aspect ratio of the screen you are rendering on. In addition, we must have a consistent aspect ratio from the layer. With this in mind, we can actually derive a much more precise equation, which can be fine tuned for precise animations.
float layerRatio = 0.0;
if(Layer.Height > Layer.Width)
layerRatio = Layer.Width / Layer.Height;else if(Layer.Height <= Layer.Width)
layerRatio = Layer.Height / Layer.Width
float maxScreen = 0.0;
if(Screen.Height > Screen.Width)
maxScreen = Screen.Height;if(Screen.Width > Screen.Height)
maxScreen = Screen.Width;ND = 1 / (layerRatio / maxScreen);
Let's just plug in some values, based on my own display resolution (1440x900), and the size of the test image (300x400).
ND = 1 / (0.75 / 1440)
ND ~= 2000;



