When "sharpening the saw" (SharpenTheSaw) for a new language, I try to reimplement a series of programs that I've been writing since I started in QBasic years ago. One is a clock; depending upon the environment, it picks up different features, generally what's new and different in the environment. The original DOS Turbo Pascal one used the CRT unit and the internal speaker for a bouncing text-mode clock and an alarm function; a later Windows Delphi version was graphical, had adjustable alpha-transparency, synced with the atomic clock via NTP, and so on.
There are other such projects I put together, too; UDP chat clients, database front-ends, shells, etc. With each I try to do the same thing, reimplementing each exercise to use whatever nifty new features of the language/environment are available to me; that way, I can explore the new territory without getting lost. The experience is invaluable, as I learn what constructs are best for the terrain before proceeding onto real work; the week or two it takes to implement each of the exercises in a new language or platform is very well spent.