Tuesday, February 23, 2010

Calendar Quick Add v0.3 is out!

What's new:
- you can now add a default reminder to the events you added through Calendar Quick Add.

To enable this option, go to Settings, then under the item "Default reminder", enter the minutes you like. You can enter any positive number there. 0 minute does actually trigger a reminder exactly at the event's start time, but Android's default calendar will show that as "0 days".

Let me know if everything works well, and enjoy adding even more events to your calendar!

Saturday, February 13, 2010

Calendar Quick Add v0.2 is out!

v0.2 adds the ability to add homescreen shortcut that directly launches the quick add interface. To use it, add it to your homescreen the usual way: long click on an empty space on your home -> Shortcuts -> Calendar Quick Add.

I received report that Calendar Quick Add works with Nexus One, but not the Quick Search Box integration. I have no way to fix that since I can't afford a Nexus One, and there is no known way to test calendar related function on the emulator.

I have heard reports that Calendar Quick Add works both on the Droid and Nexus One. Let me know if other problems arise.

p.s. For the Quick Search Box integration (a.k.a. adding event from your homescreen) to work, you need to enable Calendar Quick Add to your allowed search item list. See the "First Run Setup" in the help section in the app for instructions.

Friday, February 12, 2010

Adding calendar events to your android phone the easy way

For a list of changes between versions, see here.

If you own an android phone and use the default calendar (which wonderfully syncs with your Google calendar, of course!), you probably know how hard it is to add an event to the calendar.

Once you get to the add new event page, you need to change go through 4 fields separately to set the start and end time - 2 for the date, 2 for the time. And for each of them, you have to deal with the spinners that are highly inefficient for input. Imagine how many button presses you need to do to get the right time and dat? Do these look familiar?

Now imagine if you can just type 8pm mon dinner with kate at apple bee, right at the Quick Search Box on your home screen:

Now you can do it with a new Android application, Calendar Quick Add. You will get this:

Other examples of what you can add:
  • 4pm doctor's appt - Add "doctor's appt" for 4pm today.
  • tomorrow valentine's day - Add "valentine's day" as an all-day event for tomorrow. You can also use "tmr" instead of tomorrow to shorten your typing on the phone!
  • sun 4-7pm mall shopping - Add "mall shopping" to 4pm-7pm the nearest Sunday in the future.

Give Calendar Quick Add a try!

Wednesday, February 10, 2010

Using Microsoft Natural Ergonomic Keyboard 4000 without Microsoft IntelliType

I love my Natural Ergonomic Keyboard 4000, but frankly, I can't say the same for the bundled software and driver, Microsoft IntelliType. For one, Microsoft IntelliType is cumbersome to use and offer far less customization than my imagination would run. The hacks out there to exhort more freedom out of IntelliType (yes, google'em) are just plainly ugly and I'm not even sure about how much more they can acomplish beyond what IntelliType offers. Furthermore, I prefer installing less stuff on my computer, and however powerful my computer is, I also would always appreciate one less service running in the background.

AutoHotKey comes to rescue! For those of you not in the know, AutoHotKey is an amazing macro / hotkey scripting tool on Windows. It's lightweight, portable, and very powerful - albeit with a slightly awkward syntax. The following trick is due to some helpful forum poster at the AutoHotKey forum, adapted by me. The Natural Ergonomic Keyboard 4000 registers itself to the OS as both a keyboard and a Human Interface Device (HID). The former looks to your OS just like your everyman's keyboard, but the latter accounts for the specials keys like favourites, etc., which, you probably know, will not work without the installing Microsoft IntelliType.

But a little AutoHotKey script can teach your OS how to react to the special keys on your keyboard. To use it, download AutoHotKey from its website; grab the script at the end of this post and save it to something like intellitype.ahk, and drag the script (in Windows Explorer) to the AutoHotKey.exe icon to run it.

Of course, the script now just pops up not-so-useful message boxes when you press the favorite keys, but it's the time now to head to the AutoHotKey website and read their tutorial (hint: look for the Run command). You can make those keys do almost anything you want!

And there you go, a solution to unveil all the potential of your Microsoft Natural Ergonomic Keyboard 4000 without even installing Microsoft Intellitype:

OnMessage(0x00FF, "InputMessage")

RegisterHIDDevice(12, 1) ; Register Microsoft Keyboard


; Zoom down
Send, {Ctrl}-

; Zoom up
Send, {Ctrl}+

; All up

; My Favorites
MsgBox Favourite

; Favorites 1
MsgBox Favorites 1
; Favorites 2
MsgBox Favorites 2
; Favorites 3
MsgBox Favorites 3
; Favorites 4
MsgBox Favorites 4
; Favorites 5
MsgBox Favorites 5

Send (

Send )

Send `=

Mem2Hex( pointer, len )
A_FI := A_FormatInteger
SetFormat, Integer, Hex
Loop, %len% {
Hex := *Pointer+0
StringReplace, Hex, Hex, 0x, 0x0
StringRight Hex, Hex, 2
hexDump := hexDump . hex
Pointer ++
SetFormat, Integer, %A_FI%
StringUpper, hexDump, hexDump
Return hexDump

; Keyboards are always Usage 6, Usage Page 1, Mice are Usage 2, Usage Page 1,
; HID devices specify their top level collection in the info block
; local RawDevice,HWND
RIDEV_INPUTSINK := 0x00000100
DetectHiddenWindows, on
HWND := WinExist("ahk_class AutoHotkey ahk_pid " DllCall("GetCurrentProcessId"))
DetectHiddenWindows, off

VarSetCapacity(RawDevice, 12)
NumPut(UsagePage, RawDevice, 0, "UShort")
NumPut(Usage, RawDevice, 2, "UShort")
NumPut(RIDEV_INPUTSINK, RawDevice, 4)
NumPut(HWND, RawDevice, 8)

Res := DllCall("RegisterRawInputDevices", "UInt", &RawDevice, UInt, 1, UInt, 12)
if (Res = 0)
MsgBox, Failed to register for HID Device
InputMessage(wParam, lParam, msg, hwnd)
RID_INPUT := 0x10000003
SizeofRidDeviceInfo := 32
RIDI_DEVICEINFO := 0x2000000b

DllCall("GetRawInputData", UInt, lParam, UInt, RID_INPUT, UInt, 0, "UInt *", Size, UInt, 16)
VarSetCapacity(Buffer, Size)
DllCall("GetRawInputData", UInt, lParam, UInt, RID_INPUT, UInt, &Buffer, "UInt *", Size, UInt, 16)

Type := NumGet(Buffer, 0 * 4)
Size := NumGet(Buffer, 1 * 4)
Handle := NumGet(Buffer, 2 * 4)

VarSetCapacity(Info, SizeofRidDeviceInfo)
NumPut(SizeofRidDeviceInfo, Info, 0)
Length := SizeofRidDeviceInfo

DllCall("GetRawInputDeviceInfo", UInt, Handle, UInt, RIDI_DEVICEINFO, UInt, &Info, "UInt *", SizeofRidDeviceInfo)

VenderID := NumGet(Info, 4 * 2)
Product := NumGet(Info, 4 * 3)

; tooltip %VenderID% %Product%

if (Type = RIM_TYPEHID)
SizeHid := NumGet(Buffer, (16 + 0))
InputCount := NumGet(Buffer, (16 + 4))
Loop %InputCount% {
Addr := &Buffer + 24 + ((A_Index - 1) * SizeHid)
BAddr := &Buffer
Input := Mem2Hex(Addr, SizeHid)
If (IsLabel(Input))
Gosub, %Input%


A post two years too late...

Digging around my computer, the following is what I meant to publish in Aug 2008, as the conclusion to my 3 month long internship at Karlsruhe, Germany:

Where in the world was I?

I know it's absurd to blog about blogging, but here's my rant: as an inherently lazy person I really cannot keep up a blog, especially when I unintentionally became a professional travel information researcher this summer, thus spending most of my internet time on sites like wikitravel.org - so here is the excuse for the absence of blogs...

Anyway, as I'm writing this in the Karlsruhe Hbf waiting for my train to Frankfurt airport, my summer extravaganza in Europe is drawing to an end, and as of my last check in Google Earth, I had traveled, point to point between cities, about 1/4 of the Earth's circumference on the train. Where was I?

  • 1st weekend: went nowhere. I did walk around the city of Karlsruhe a little bit, but my first weekend is nevertheless unique, as it's the only weekend which I did not go traveling. ;)

  • 2nd weekend: Strasbourg - close enough to Karlsruhe, thus only a Saturday day trip.

  • 3rd weekend: Köln (or... Cologne).

  • 4th weekend: Had a quick look at Ulm, then spent a night in Lindau am Bodensee, the little island where one can see the Swiss Alps across the lake on a no so cloudy day, and then Neuschwanstein.

  • 5th weekend: Intended to go to München, but miscalculated the time, and ended up spending too much time on the way to München (in Würzburg and Rothenburg ob der Tauber) and had only less than a day in München...

  • 6th weekend: Berlin for a 3-day trip, but still far from long enough...

  • 7th weekend: The weekend for the Heidelberg meeting arranged by DAAD, but I went first to Giessen to visit a physics lab, another program arranged by DAAD. Then on Sunday, took a day trip in Hamburg.

  • 8th weekend: Vienna, but also stopped by about 3 hours in Salzburg on my way there.

  • 9th weekend: A long "weekend" in Italy. Actually stopped by a day in München first (to make up for my short visit the first time), then went to Venice, Florence, and finally Rome.
  • 10th weekend: Recuperating from my trip in Italy, so only took a short day trip south: checked out the so-called highest waterfall in Germany in Triberg, then chilled out in the Bodensee again, but this time in the west side, in Konstanz (Lindau was on the very east). And from Konstanz I took a short trip to Insel Mainau, the Swedish flower island.
  • 11th weekend: Paris. Yet another 3-days-but-far-far-from-enough-weekend-trip.
  • 12th weekend: Day trip to Dresden on Saturday with a short excursion to Leipzig (for Bach, of course), then attended the Volodos concert (Scriabin, Schumann and Liszt) in the Salzburg Festival (in Salzburg, of course!), then went to a nearby lake, Königssee.
  • 13th weekend: Last weekend... went to Salzburg on Friday night yet again for a lieder concert (Brahms Op.32 and Op.33) with Thomas Quastoff and András Schiff, then on Saturday, two quick trips in Aachen (where I brought a prodigious amount of chocolate) and Baden-Baden. On Sunday, walked in Koblenz a little bit, then took a cruise down the Rhine. Then, of course, spent a sleepless night (because of my 7am flight) in the Frankfurt airport.

So, that's as much ground as I could cover in 13 weekends (plus a few weekdays), as much Europe as I could absorb in 3 months, as much money as I could afford in traveling, and certainly as much energy as I could spend before I need a long, restful break of doing nothing to recover from the constant on-the-road-ness. I'm falling in love with Europe, but...

I'm glad to be home again.