Saturday, December 31, 2011

Wait a second

For many, 2011 has been a long and economically challenging year, and the start of 2012 is a welcome new beginning. I think that most can attest that no matter one's level of patience, it can be a stretching and growing experience to wait on God for a year or more of rocky times. But if the year of 2011 has been a long time to wait on God, then how much longer is 2011 years to wait for "the second coming," Jesus' promised return? If Jesus were to come again, I have often wondered why he has taken two millenia--and counting--to do so. I mean, if people still aren't believing in him, what better way would it be to convince them than to make a dramatic appearance?

But then I got to thinking of his time course in the past, and why he might even choose to delay his coming for longer. It took him quite some time to attend to his first coming. If we measure from the time of the first writings of Scripture in the Torah, one could argue that he waited a good millennium or so to make his first appearance. And if we were to count from the beginning of creation, then we're looking at up to a multi-billion year delay before his first arrival. With that in mind, a 2,000 year delay in his reappearance is paltry at best.

More importantly, I realized that he may have an actual purpose in not returning so soon. For one, he has already expressed that his appearance by itself would not necessarily change hearts, as his first arrival had only emboldened many to bring him to his crucifixion. Instead of rushing his second arrival to turn hearts toward him, he may have in fact delayed his coming for this same effect.

Indeed, perhaps one of the most powerful points of his credibility is the fact that he has stood the test of time. Even for those who do not believe in him as God and Savior, the persistent longevity of his wisdom, of his message and example of love, justice, and forgiveness, still ring true thousands of years after he first spoke them. It would be one thing to hear this message spoken at an inspirational seminar, harbor a warm fuzzy feeling in one's heart on the way home, and promptly forget about it upon returning to work. It's another to inspire a generation to sacrifice their lives for a fiery orator's cause, only for the next generation to shun or forget such philosophy. But it's another entirely for the message to live on, no matter how misused, abused, or misinterpreted, to continue to humble and convict and energize those from all walks of life to live a life of service. Had Jesus returned in 70 AD to set up his kingdom, we would never know in our hearts whether his message would stand the test of time. If he had swooped in during the Plague or returned during the World Wars, we would never know if his message would have persisted on its own through some of its greatest tests.

Perhaps he will come tomorrow, or next year, or perhaps it will be another billion years before his next arrival. In any case, his message is alive and well, and so is he.

Thursday, December 01, 2011

Android 4.0 (Ice Cream Sandwich) on Virtualbox

Yesterday to my utter delight I realized that the Ice Cream Sandwich version of Android (4.0) can run in Virtualbox. I've been contemplating programming an Android app for the tablet form factor but don't quite have the resources to purchase a spanking new ICS tablet, and a virtually free virtual machine fits the pocketbook much better.

For Android ports, I normally turned to the venerable Android-x86 project. Indeed, they have just released an ICS port designed for the AMD Brazos platform, but the build apparently does not support internet connectivity or use of a mouse, which of course makes use within a virtual machine on a laptop rather challenging. Fortunately, I found another blog posting that referenced a Japanese site whose developer has provided a .vdi virtual hard disk file for loading directly within Virtualbox. Best of all, this not only includes mouse support and networking, but also hooks up with ADB for Android app development.

To set up the Virtualbox environment, I followed these steps:
  • Download the pre-made .vdi file with Android 4.0.
  • Create a new virtual machine with the following settings:
    • OS Type Linux 2.6
    • 512MB RAM
    • Acceleration: VT-x/AMD-V (which is apparently required for ICS at least on this build), nested paging, and PAE/NX
    • Bridged network adapter (but see below)
    • 2GB hard drive (not required)
    • Hard disk pointing to the .vdi file. Note that the disk will be attached by default to a SATA controller, but the disk should be removed from there and attached to the IDE Controller instead.
The virtual machine booted and worked out of the box! Next, I needed to connect the virtual machine to ADB so that I could load up my app for testing:
  • Open a command-prompt in the directory of adb.exe (ie Shift-right-click in android-sdk-windows\platform-tools and choose the "Open command window here" item).
  • Enter adb connect [ip-address]. This turns out to be the most difficult step because unlike using netcfg in the Android-x86 builds, I haven't found an easy way to determine the local IP address. One method is to log into your router and check the DHCP client list. The list usually shows IP addresses for the various MAC addresses of devices connected to the router. You can find the MAC address of your device by right-clicking on the networking icon in the Virtualbox status bar, choosing "Network adapters...", and then opening the "Advanced" section.
One of the challenges I've faced while on the road is the inability to connect while completely disconnected from the internet or any router. In this case, I need a way to make a solely local network connection from ADB to the virtual machine. Fortunately, this posting describes a simple method to make that connection:
  • In the same network adapters page from within Virtualbox, change the "Attached to" selection to "NAT".
  • Choose "Port forwarding", and in the "Host Port" and "Guest Port" sections, type "5555". If you have multiple virtual machines and want to connect to each of them, you could increment the host port for each of the forwarding rules while keeping the same guest port for each device (eg host port 5556, guest port 5555 on a second virtual machine).
  • From the command-prompt in the directory of adb.exe, enter adb connect localhost.

The Android 4.0.1 device should pop up in the DDMS devices listing from within the Eclipse development environment, and packages should transfer to ICS with glee.

Sunday, November 13, 2011

Chicago Cloud

Making use of the panorama function on my phone camera provides a thin slice of of the city of deep-dish pizza with the Cloud Gate in view at Millennium Park in the heart of Chicago.

Wednesday, October 19, 2011

Compiling with Android ADT 14

Hong Kong is not so far away when the live video feed is broadcasting the announcement of all the latest Android goodness from the illustrious Ice Cream Sandwich release right to my laptop. Perhaps more importantly, the new Android SDK and developer tools is even closer by once I had downloaded the newly available releases to my Eclipse installation.

Actually using these tools, however, couldn't have felt further away when I launched my app only to be greeted with the dreaded "Conversion to Dalvik format failed" error message. Yikes!

Fortunately, the Android community is an active one, and an issue was posted fairly quickly with a follow-up workaround to the issue. The problem that I had encountered was that the OpenFeint libraries that my project depended on had duplicate classes that ended up conflicting with each other, perhaps because one of these libraries in turn depended upon the other (GameFeed on the main OpenFeint library). The solution was to removed duplicate references of these libraries to ensure that there were no conflicts. Here are the steps I took for my project
  • Open the .project file for my project, which may not be visible in the Eclipse project explorer but is in the project's root directory as found through a normal file browser.
  • Remove the entire <linkedResources> section.
  • Refresh the project (File > Refresh).
  • Navigate to Project > Properties > Java Build Path > Source and remove the library folders, which will probably be conveniently highlighted in red now that their reference as linked resources has been removed.
  • Repeat for any library that depends on another library included in the project.

My project now compiled fine for debugging. While exporting my project, I again ran into the Dalvik conversion error, but this time for an old rather than a new problem. Back when Android SDK Tools R12 was released, a bug was reported where projects failed to export because an older, incompatible version of ProGuard was included with Tools. The workaround was to download ProGuard 4.6 directly from its maker and replace the proguard.jar file. After upgrading to ADT 14/SDK 14, my manually-upgraded ProGuard file got replaced with the older version, and I had to swap it back. Here are the steps:
  • Download ProGuard 4.6 directly and unpack it.
  • Navigate to android-sdk-[platform]\tools\proguard\lib (eg in the android-sdk-windows folder).
  • Replace the proguard.jar file with the one from your newly downloaded ProGuard 4.6 folder.
  • Refresh the project and export it!
I hope these tips will get you up and running on the latest Android ADT and Tools, even if you (as I) don't yet have a device running Ice Cream Sandwich. And now, time for me to grab some midday dessert...

Friday, October 14, 2011

No failure to thrive

As if in full anticipation of Halloween, our faithful dinner guest has emerged for another appearance, bigger and better than ever. He's meeting all milestones along his growth and developmental trajectory.

And this is how he got there.

Monday, September 12, 2011

App development with Android-x86 on Virtualbox

I initially used the Android emulator when I first started developing an Android application. I quickly realized, however, that its performance was not quite up to par with efficient development practices. I looked for alternatives, and at last a wonderful device came to my wireless provider, AT&T, in the form of the Motorola Atrix. Development speed took a great leap.

I realized though that there are still times when some sort of virtual device is important for developing Android apps. For one, with virtual devices I can test the application on multiple versions of Android, from the latest Gingerbread or Honeycomb releases to the first incarnations of Android, all without purchasing a single device. I also don't have to worry about crippling my phone with extensive tweaking. And perhaps most importantly, I can run the virtual device directly from the computer, without having to leash my phone to the computer by the USB cable.

Of course, I couldn't go back to the emulator, at least in its current form. I did hear about Android-x86, a port of Android to the x86 platform that offered considerably improved performance. Best of all, it can hook up with the ADB for seamless Android debugging. The challenge was actually getting all the correct settings, and in case you're interested in doing the same, I've gathered here a few tips to help speed your development process.

Installing Android-x86 in a virtual machine

  • Download the Android-x86 generic iso file. Most recently I tested a nightly build from the Gingerbread (Android 2.3) version. I used it with VirtualBox 4.1.2 on Win7.
  • Create a VirtualBox machine with the following settings: OS Type Linux, 512MB RAM, Bridged network adapter, 2GB hard drive, and CD pointed to the iso file. As you might imagine, the sizes can all be adjusted to your liking.
  • Start the machine and choose to install it to the hard drive. In the partition manager, I created a Linux partition for the entire space, flagged it to be bootable, and formatted as ext3. I also made a fake SD card, which is important for installing some applications, and gave it 200MB of space. Note that on previous versions, you had to leave enough space from the ext3 partition to create the SD card, or else it would silently fail, but the new version seems to take care of that. It might also be helpful to choose to make /system writeable for debugging/tweaking.
  • Shutdown the system and unmount the iso file.
  • After booting, choose Machine > Disable mouse integration to make the mouse visible.
Adjusting Android-x86 screen resolution
  • The screen orientation of Android-x86 is in landscape mode, but you may prefer portrait mode. To add this configuration, close VirtualBox completely and open the .vbox file in the machine folder found in the the VirtualBox VMs directory (most likely in your user directory). In the <ExtraData> section, add the following line: <ExtraDataItem name="CustomVideoMode1" value="400x600x16"/> or some other multiple of 320x480. Other ratios work but seem to have poorer performance. Save and close the file.
  • Restart VirtualBox and reboot the machine. At the boot screen, press "e" to view the command-line configuration, and "e" again to actually edit it. Where the line has DPI=240, change it to DPI=160, and add vga=ask to the end of the line. Press Enter and then "b" to boot with this configuration. Changing the DPI allows the device to adopt a more natural size and resolution similar to what you would actually see on a phone. During boot you'll be prompted to see available resolutions and can choose the number for the resolution you entered.
  • Optionally, you can avoid having to retype all of this with each reboot by editing the GRUB menu list. After booting, press Alt-F1 to enter the command line, and then mount the grub folder as follows: Enter su, then mkdir /data/fs, then mount -t ext3 /dev/block/sda1 /data/fs. Next edit the grub.lst file (eg vi /data/fs/grub/menu.lst, if you're familiar with vi) with the changes from above.
Connecting Android-x86 to the Android developer kit
  • To connect the virtual machine to your Android development platform, you'll simply need to connect to the machine from ADB. To find out your IP address, press Alt-F1 in the machine and then type netcfg at the command-line, which should show the IP address on your local network on the eth0 line (eg 192.168.x.y).
  • Open a command-prompt in the directory with adb.exe (eg \path\to\android-sdk-windows\platform-tools). Enter adb connect [ip address], and you should see "connected to [ip address]". In DDMS, your device should also now appear.
Now when you launch your Android application, you should be able to choose the virtual machine from which to test your application!

Sunday, September 04, 2011

Extra dinner guest

This little critter dropped in unannounced for dinner. Only I think he thought I was the dinner.

Sunday, August 14, 2011

Beer bear

I came in to find this forlorn story strewn across the living room. Looks like this bear had a beer too many?

Saturday, July 30, 2011

auf Wiedersehen!

Bidding a fond farewell to Colin & Rachel as they head off to Germany. Looking forward to beer and sausage sometime in Deutschland! And perhaps customs would allow me to export a piece of San Francisco in the form of a slice from Milano's.

Thursday, June 30, 2011


I've always wondered why some will say they keep a diary, while others will say they journal. In many cases, I bet that if we were to lay our eyes on these private collections, we'd find them to be the same despite the difference in name. Perhaps some prefer the term "journal" because it has a more objective ring to it, like the grown-up version of a diary, even if they're really the same thing. Or at least that's why I try to convince people that I "journal."

Now if I wanted to sound really sophistiqué, perhaps I'd say that I'm actually logging, which has the ring of "science log" or "captain's log." And it turns out that with my Android device, I actually am logging all the time, at least in the form of a constant stream of debugging logs from my phone. And in some rare instances, I might actually want to read those logs.

While attempting to track down some very nasty and elusive bugs prior to releasing an update to tXtFL Mobile, I was using CatLog, a nifty log reader that lets me view debugging and--alas!--crash reports from these logs right on the device. But for some reason, try as I might, I couldn't see RuntimeExceptions in the stacktraces from my crashes. Rubbing my eyes, I wondered if I was missing something--I mean, logs shouldn't lie, right? Yet the traces of my crash disappeared without a trace.

This couldn't be right, so I decided to hunt for an alternative log viewer. While scouring the Android Market, I landed on an app called Logcat Live Wallpaper, with an alluring description, "A must-have for geeks =)". And it lived up to the hype.

A lonely picture cannot quite capture the aura of such artistry.

The beauty of the app is at least in part from the animations. It apparently takes inspiration from retro computers with "features" such as interference banding that routinely traverses the screen as in old monochrome monitors. It even has random speckling and and an "old phosphor" effect to mimic poor latency. What I liked most about it, though, is the fact that it's a live wallpaper, meaning that as soon as your program crashes, you find yourself staring at the stack trace, laced with the nostalgia of the 80s just to soften the blow.

As much as I enjoyed the wallpaper, I still needed a more dedicated way to view logs for actual debugging purposes. Fortunately, the CatLog developer was responsive and figured out how to restore the full output from logcat so that I could dissect out the RuntimeException stacktrace from the logs.

Notice the exception appearing in full force.

So after dissecting out the bugs that caused those RuntimeExceptions from my code as well, I was finally able to upload tXtFL Mobile 0.99.8. Of course, there will be more bugs (and features!) to come, so I won't stop "logging" quite yet.

Trying to sack some bugs. The new X's & O's animation from tXtFL now depicts QB sacks.

Friday, May 27, 2011

Gnome 3 on VirtualBox

With all the fervor for Unity vs. Gnome 3, I've been itching to see a live demonstration of the two interfaces. The irony of course is that Unity has dis-unified the world of desktop Linux by branching from the otherwise Gnome standard, but I'm enjoying the differentiation and new options for customizing my computing environment.

I turned to the trusty VirtualBox to test each of them in a virtualized environment, and Unity turned out to be the relatively straightforward, if not entirely exciting, install. Gnome 3, on the flip side, has a revolutionary interface involving an entirely new workflow, complete with a beautiful cascade of window previews and application overlays and slide-out workspaces to quickly and seamlessly shift back and forth from focused to bird's-eye view for each task and make fuller use of the entire desktop space.

The initial effort to get Gnome 3 working on VirtualBox was a slight challenge, so here are a few tips that might streamline your experience:
  • Upgrade to VirtualBox 4.0.8, which has some handy fixes for Gnome 3.
  • Fedora 15 works almost out of the box with Gnome 3. I downloaded and installed the Live 64-bit version to (virtual) hard drive.
  • My first install hung, for unclear reason. On my second pass, I deferred encryption, but the eventual installation success may also be from preventing power management, which was a problem I faced in Ubuntu on Virtualbox, or some other hidden cause.
  • After install, Gnome 3 failed and dropped back into old-school mode. I updated the packages via the command line (the graphical package hung), using the "sudo yum update", then "sudo yum upgrade" commands.
  • Apparently, SELinux can also conflict with Gnome 3 on VirtualBox, so I disabled it by editing the file, /etc/selinux/config.
  • After rebooting, I also had to install the VirtualBox Guest Additions. Prior to installing the additions, I also had to install gcc and kernel-devel to compile the additions kernel modules. "sudo yum install kernel-devel gcc" does the trick. Then I mounted the additions media and installed the .run package from the command line.
  • On another reboot, Gnome 3 was good to go!
Freezes and crashes also come with the install, but the experience gets smoother with each Fedora update.

Monday, May 02, 2011


A short urban hike the other day reminded me that living in San Francisco is not such a bad deal.

Coit tower is but a short hike away.

Just a quick pivot at the base of the tower brings you to another spectacular view.

And using FGFS (FlightGear Flight Sim), here's the view of Coit tower I really wish I could have seen.

And just to throw it in there, a virtual view of SF bay that would have made my day, any day.

Wednesday, April 27, 2011

HP LaserJet 1012 on Windows 7

As I sit here typing a brief guide to installing outdated software on low-end hardware, I'm also struggling to install outdated hardware using unsupported drivers. This time I'm justifying the waste of time with the assertion that I'm actually saving myself time from researching the purchase of a new printer.

So here's the dilemma. I have an HP LaserJet 1012 black & white printer, a stalwart of the Cold War, which in the transition to Windows 7 has been lost from HP's blessing. The drivers are still available from HP, but alas, only for Vista. Fortunately, those drivers do include a 64-bit version, which just may be compatible with my Windows 7 64-bit laptop.

Through numerous forums, I wandererd through alternative LaserJet drivers with subsequent "Unsupported Personality" errors but eventually landed on a solution that has at least printed the 18 papers required for my upcoming small group session. Here is the solution, in the off chance that you too might find the need to print some papers in a hurry using a venerable LaserJet:
  1. Download the HP LaserJet 1012 drivers. In my case, I chose the Vista 64-bit version, even though I actually have Windows 7 64-bit, as there are no Win7 drivers available. I extracted these files to a folder.
  2. Install Windows USB Printing Support. When I first plugged in the printer, it tried to install itself as a DOT4 device, but apparently I needed it as a USB device. Since the USB driver was not initially available, I had to manually add it by selecting it through this very short trail: Control Panel > System and Security > System > Device Manager > IEEE 1284 (eg "IEEE 1284.4 devices") > DOT4 USB printing support > Driver > Update driver > Browse my computer for driver software > Let me pick... > USB Printing Support.
  3. Add the printer. Back in the Control Panel, I went to View Devices and Printers > Add a printer > Add a local printer, and I chose USB001 (Virtual printer port for USB). At the driver selection page, I chose Have Disk and navigated to the drivers previously downloaded. Thus hp LaserJet 1012 HB drivers appeared in the printer list, ready for installation.
Looking back, the solution is simpler than I had anticipated. But reading through the all the articles that I've finally been able to print...not such a simple task!

XScreenSaver on Ubuntu

The screensavers on my Ubuntu desktop and laptop installs silently ceased launching power management over the past few months. As an eco-frienly aspirator, I realized that this simply cannot be, and decided to fish out an alternate screensaver source.

Fortunately, a screensaver with working power management that could be installed with only a few steps proved readily available. If you find yourself in this situations, feel free to follow the template outlined below. And if it saves you a few cents on electricity costs, don't forget to re-invest that in a Prius.

  1. Install xscreensaver and uninstall gnome-screensaver. The Synaptic Package Manager will do just fine for the job.
  2. Launch xscreensaver. The easiest way is to open a terminal and simply launch, "xscreensaver".
  3. Changes settings to your delight. For me, I used the Advanced > Display Power Management tool to enable power management controls so that my display went to standby in a timely manner. Note that "standby", "suspend", and "off" here refer to the display, even though those names are so acutely reminiscent of the entire computer.
  4. To ensure that xscreensaver launches automatically, open a terminal and run the command, "sudo ln -sf /usr/bin/xscreensaver-command /usr/bin/gnome-screensaver-command".
And voila, your brand-new 2009 software is ready to take your monitor into the next decade!

Monday, April 18, 2011

To Hell With Hell?

Yesterday the pastor at my church preached on the reality and eternality of hell in light of the recent popular controversy surrounding its existence. I agree that hell is a very frightening place, yet a place whose existence we must embrace just as we must with any other inconvenient truth. But the paradox that remains in many of our minds is this: how can God allow, let alone send people to, a place of such tortuous proportions as hell?

One might argue that even a loving God must send people to hell because he is also a just God. He is a God who must exact payment for sin just as a judge, no matter how much mercy he might have on a sinner, must sentence him to punishment for what he has done. But I think that with hell, there might also be a simpler answer: if hell is by definition a place apart from Christ, then ending up in hell is simply the natural result of choosing not to follow Christ. In other words, we might say that those who have chosen to reject Christ, to turn away from rather than follow him, are getting in hell exactly what they want--to never ever have to be with Christ. In fact, we might wonder whether for them, to be in heaven would be a hellish experience, for they would have to be with Christ, the very one whom they wish not to be with, for all eternity.

If so, God is not being malicious or cruel by sending people to hell. On the contrary, we might argue that he is being merciful and gracious by giving people what they want. So what then about the fire and brimstone of hell portrayed in the Bible? Does he not appear to actively and excessively punish people in hell, rather than merely allowing them to go where they please? I wonder if the fire and brimstone of hell may not be so much a depiction of God's active punishment. Instead, it may be describing what it sees as the end result of being apart from God--a feeling akin to what we may feel on earth when distant from someone we should be with, a feeling of emptiness and loneliness and dissatisfaction, something we might almost describe as a burning longing. Multiply this feeling by eternity, and the product is a gnawing and agonizing sense of discord, what we might even call a fiery feeling, a hellish experience.

As Christ himself tells us, "God did not send his Son into the world to condemn the world, but in order that the world might be saved through him" (John 3:17). He did not come to punish, to send us to torture, but the very opposite--to provide for us a new relationship with him, a way out of this eternal loneliness. Instead of judging those who choose not to be with him, he simply asserts, "This is the judgment: the light has come into the world, and people loved the darkness rather than the light" (v.19) Rather than coming to condemn or to judge, he allows us ultimately to choose our paths for ourselves, and if we could not stand to be with him--even then he gives us what we love.

Sunday, April 03, 2011

Blogger dynamic views

Today I noticed that Blogger offers new "Dynamic Views" for visualizing blog content in alternative layouts. All I had to do was add "/view" to the end of the blog URL, and voilĂ , I could view the blog in layouts reminiscent of Picassa collages, Gmail on the iPad, or a slightly confusing but innovate view called Timescale. The layouts seem like a nice way to get an overview of the entire blog from different angles, like sorting files by name vs. filetype vs. date modified timestamp. The Picassa-style collages (Flipcard, Mosaic, Snapshot), for example, have tiled and mosaic modes as well as a way to look at all the pictures in posts.

I personally liked using Gmail-on-tablet-style mode (Sidebar), which makes it easier to see each posting at length while separately scrolling around to see other articles. To get to additional articles, I had to use the mouse scrollwheel over the sidebar, or just clicking on an article lower in the list scrolled the bar.

Timescale also seemed like a useful organizing scheme by organizing articles in three columns, each with decreasing level of granularity, sorta like looking under a microscope at different magnifications. Somehow, Timescale seemed to figure out which of the articles were the more "interesting" ones on Voice of Text Flex, although many of the articles with images on this blog didn't seem to "make the cut" to the first column.

But the most ironic thing was viewing the dynamic layouts on Android. On Android's stock browser, I received the following message:

which would almost seem to imply that the mobile browser isn't quite "modern" enough and up to snuff for the technology, whereas on Firefox for Android, it works just fine:

Good to see Firefox is still alive and kicking. Well, enough about lay-outs for it's time for me to lay-down to bed!

Thursday, March 24, 2011

The Disappearance of the Sun

I saw an article today on the apparent arising of the "Java renaissance" from the dark ages, referring to Oracle's recent acquisition of the Java platform. "With Oracle's acquisition of the slowly fading Sun, things are looking brighter and 'we' can finally make some progress." The Sun they are referring to, of course, is none other than the fabled Sun Microsystems of old, maker of Java, and the question that inevitably comes to our minds is, What will the new day bring? Java's new owner purports to bring a brighter future for the platform. As an avid fan of a Java-based platform, Android, I've been somewhat discouraged though by the recent litigation brought by Oracle against Google and Android. I can only hope that this new day and the blossoming renaissance of Java apparently in our midst will herald not the darkness of lawsuit, but the warm glow of many new smartphones in the hands of common folk and rain down new wireless spectra into the hungry antennae they hold. Only time will tell how long the night will be before the new day arrives.

But more importantly, the article reminded me of a completely unrelated musical piece I came across entitled, "The Disappearance of the Sun," coupled with a montage that casts the daily disappearance of the sun as a sort of daily celebration of an honest day's work. The sun may be fading, and the next day so uncertain, but there is reason to rejoice in the conclusion of another day of life and work that God has granted us.

And one day when "the heavens will be set on fire and dissolved, and the heavenly bodies will melt as they burn," when the sun itself melts and disappears one last time, we can look forward to the rising of a new sun, the "new heavens and a new earth in which righteousness dwells" (2 Pt 2:12-3), and the everlasting Son who awakens us there.

Saturday, February 12, 2011

Stats browser

One of the fun things about tXtFL is learning all sorts of nifty little Android tricks. I finally read how to hook up a database cursor with a list scroller, which allows me to directly bind teams, players, etc. along with individual statistics into a single stats browser. The beauty of the binding is that it still has the flexibility for converting that data in an intermediate step, such as transforming a game ID number into "PIT@GB", or calculating the complicated passer rating from QBs' raw stats rather than trying to output it from a single sql query.

Here are a few shots of the stats browser following a rematch between Roethlisberger and Rodgers in superB bowl XLV.

Thursday, February 10, 2011

Super Bowl XLV, Windows VII

As an avid Linux fan I'm admittedly a Windows 7 fan as well, and this year's Super Bowl only made me fonder. My buddy Mike recently moved to the city, and he dropped by for a low-key bbq with some great weather. With bbq coals purchased only minutes prior to kickoff, we needed a way to view the game from the backyard while tending to the meat at the same time. Fortunately I had finally gotten my Hauppauge digital TV tuner working, which recording the broadcast on my desktop Windows 7 box. With my laptop in place close to the coals, I was able to wirelessly stream the game to my laptop. And because the game was recorded, I could start and stop the stream at will based on the unpredictable nature of flaming cheese and missing ingredients.

The net result was that we were 2 hours' behind by the end of the game, but we got to skip through the halftime show and still enjoy Rodgers' rally.

Sunday, January 30, 2011

End of 3rd year in sight...

It seems like an eternity since I first embarked on the 3rd year journey. When I finished my first clerkship, I thought that the worst was behind me now that I had supposedly re-integrated back into the clinical life. Needless to say, I was sorely disappointed when I entered my surgery block and found myself starting from scratch. I didn't remember a thing about anatomy, let alone how to fix it. Things got better with pediatrics, and I finally got to see neuro and psych from the human standpoint rather than that of the mouse. (The mouse is still very intriguing, mind you!) Delivering a baby was in fact quite incredible, and now in the final weeks of ob/gyn and 3rd year, I'm making a full circle and preparing to be beaten down in the OR again.

Of course, the trail doesn't end there, nor the travails. But if there's one thing that's been drilled into me, even more than the endless need to study and be flexible, is the everlasting need to take refuge in God. No matter how "the nations rage" (Ps 2:1)--as do the attendings and residents and nurses--He keeps extending the reach of his refuge from the chaos. Each day the psalmist reminds me when I wake in the darkness, "Let all who take refuge in you rejoice; let them ever sing for joy" (Ps 5:11). Amen to that!