-
Cool phone tricks
One of the things I "lost" when I shutdown my server and stopped running my Asterisk PBX was the ability to redirect calls to my phone to my computer in case I was out of town or the like. When we travelled back east last month, we stayed with my uncle who had really high speed Internet (Verizon FIOS), but had virtually no cell phone coverage (neither my Sprint PCS nor my AT&T phone could keep a connection). One day I had to take a business call, but didn't want to hog my uncle's phone line, so I re-directed my PBX to send my calls over SIP to my Mac (using the Gizmo Project's SIP client). That was pretty cool, but I can no longer do that.
I've had a GrandCentral account for awhile and had read about forwarding to a Gizmo Project account. Today, I decided to play around and low and behold, I can still get work calls on my computer by having people call my GrandCentral number (which I'm now going to start giving out as my work number). Furthermore, I can make outgoing calls by adding people to my GrandCentral phone book and originating the call through the GrandCentral website (Gizmo Project charges for outgoing, but not incoming calls; this method makes the outgoing call actually an incoming call). So not only can I receive calls on my computer, I can now make free calls! I don't need free calls as I have unlimited long distance on my home phone, I have 100 outgoing minutes per month on my work line, and more than enough minutes on my cell phones. I don't even talk on the phone all that much!
-
Broken Idle Time in 10.4/10.5
After fighting with trying to get the amount of time since a user has done something with the system, I've determined that CGEventSourceSecondsSinceLastEventType is broken. The documentation indicates that calling it like:
CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType)
will tell me how many seconds since the user last moved the mouse, touched the keyboard, etc. The docs say:
The various system and app defined events do not contribute to this event type's time.
Unfortunately this just isn't true. In one app I'm working on, I have a timer that fires every 5 seconds and prints the idle time. It starts going up, but then a notification comes in and it resets back to zero without me touching the keyboard. So, this call is almost useless as I need to know when things are idle in order to perform some tasks. While some of you are saying that I can use a Carbon Event Idle Timer, it turns out that they don't work in background only apps. My only solution is to make the above call using something like:
+ (double) idleTimeInSeconds { double idleTime = 0; double tempIdleTime = 0; tempIdleTime = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGEventLeftMouseDown); if (idleTime == 0 || tempIdleTime < idleTime) { idleTime = tempIdleTime; } tempIdleTime = CGEventSourceSecondsSinceLastEventType(kCGEventSourceStateCombinedSessionState, kCGEventLeftMouseUp); if (idleTime == 0 || tempIdleTime < idleTime) { idleTime = tempIdleTime; } -
Thanks for the update, Fujitsu!
When Leopard came out, I blogged about a bug in Fujitsu's ScanSnap Manager software. I was unable to get anywhere with Fujitsu and almost forgot about it. However, today in trolling through their website, I saw that they had an article specifically about the software running under Leopard along with a download to a new version of the ScanSnap Manager. Yeah, I downloaded the software, gave it a try and found that it fixed my problem. However, they added a stupid feature called "Quick Menu" which brings up a half baked feature allowing you to send stuff to email, a folder, iPhoto, etc.
Too bad Fujitsu has never heard of VersionTracker or MacUpdate to post updates so that customers can actually find out about updates without having to dig through their site (which actually doesn't have a direct link to the Mac software under their downloads area).
-
ATMs attempting to be intelligent
Bank of America installed new ATMs sometime this year which, for the most part, are pretty user friendly. They're touch screen based (along with a physical keypad) and automatically scan in checks. You have to insert the check in the correct direction or the ATM spits it out because it can't OCR the check. While OCR does take time, it would seem that the ATM could simply flip the image and try the OCR again instead of spitting it out. This isn't rocket science to add that code:
if (!OCRsuccess) { rotate image; do_ocr; }It would have saved the bank lots of money on printing "insert check this way" labels.