Monday, March 29, 2010

Rain and Rubberbands - A couple hacks worth your time

As we come up on Passover, I should really be helping to prep for the Seder and not be blogging. But, I can't resist posting these two links.

Besides, Passover is very much the holiday of the hack. On the holiday, you take your entire kitchen and store it away, and then bring in just dishes, pots, etc. that are saved for the holiday. As you make your way through the week, you learn to make do with the odd collection of kitchen instruments you've accumulated, rather than depending on the ones you have daily access too.

Here are those links...

OK, I'm off to go do some Seder prep. See ya'll on the flip side. Hope everyone has a wonderful first couple of days of Passover!

Sunday, March 28, 2010

Passover 2010 - Ready or not, here we go!

The TODO list is basically done. The last pizza pie has been eaten. The cooking for tomorrow night's seder has begun.

I do believe it's Pesach time.

Here's to happy, meaningful and tasty Passover! Chag Semeach all!

Saturday, March 27, 2010

911 Writers Block - A Fun, If Shallow, Resource

911 Writers Block is such a simple and clever idea for helping to bust writer's block. Just pick a topic, like say Endings and up pops one to work with. Like:

It took you over four hundred cream pies to get here, but at last you've made it onto Oprah. Your sense of satisfaction is enormous.

I even like the phone menu metaphor they use (like Dial 6 for verbs).

The only catch? There's only a few ideas per section. Maybe I'm missing a way to see a batch of new ideas. Or maybe the site is still in early development.

Regardless, I think it was a nice find on StumbleUpon.

Thursday, March 25, 2010

Blogger Bloggers Rejoice - Blogger Gets Pages

I've always been a fan of Blogger as a personal publishing platform. But one feature WordPress got right from early on was the ability to have both Posts and Pages. While the choice between when to use a Post or Page could get confusing, the notion that sometimes you want to publish static information as a Page was quite sensible.

Well, Blogger has finally caught up in this respect: you can now create pages.

For example, my welcome page, should be just that - a Page and not a post.

I guess I'm pleased to see that Blogger is still continuing to evolve. I guess I'll continue to like it.

Wednesday, March 24, 2010

Dabbling With PLT Serializable Continuations

The other day, I was rambling on about Amazon Web Services and PLT Scheme, and how they might mix well together. One of the concepts that fascinated me was that of Stateless Servlets and how they leverage serializable continuations.

Specifically, I was wondering if you could have a servlet create a bunch of continuations that represented worked to be completed. These continuations could then be serialized, stuffed in a in a queue, and then processed by a collection of entirely separate servers.

Trying It Out

To simulate this, I through to together a toy example. In this case, I created a function to grab stock exchange info, and considered that the work that I wanted to distribute. I then wrote a handful of helper functions to serialize and deserialize the work. The result is the following:

#lang scheme
;; Standard includes here, nothing fancy
(require web-server/lang/serial-lambda
         web-server/lang/abort-resume
         scheme/serialize
         net/url
         (planet neil/csv:1:5))

;; Helper syntax to 'package up' some work to be completed. The packaging process
;; creates a serializable function, and then goes ahead and serializes it. The result
;; is effectively a string which can be stored and re-executed later.
(define-syntax package
  (syntax-rules ()
    [(_ expr ...) (serialize (serial-lambda () expr ...))]))
;; More helper code. In this case, the run function is handed the serialized code
;; which is deserialized and then run.
(define (run serialized-thunk)
  ((deserialize serialized-thunk)))

;; A simple structure for holding stock data.
(define-struct stock (symbol price low high) #:transparent)

;; A simple function for grabbing stock data. Notice how there's
;; nothing special about how this function is written.
(define (get-stock-info symbol)
  (apply make-stock
         (first
          (csv->list  (get-pure-port 
                       (string->url (format "http://download.finance.yahoo.com/d/quotes.csv?s=~a&f=sl1jk" symbol)))))))


;; This function takes in a collection of stock symbols (MSFT, RHT, etc.)
;; and returns back a list of serialized expressions. If I went with 
;; my queue example, it's the results of this function that I would publish
;; to the queue.
(define (make-stock-getters symbols)
  (map (lambda (symbol)
         (package
          (get-stock-info symbol)))
       symbols))

The above code can be used as follows:

(make-stock-getters '("MSFT" "RHT"))
;; =>
;;(((2) 1 ((#"\\stuff\\serialized-continuations.ss" . "lifted.10")) 0 () () (0 "MSFT"))
;; ((2) 1 ((#"\\stuff\\serialized-continuations.ss" . "lifted.10")) 0 () () (0 "RHT")))

On another server, or in my case, a fresh instance of DrScheme, I can then run the code:

 (run '((2) 1 ((#"c:\\users\\ben\\desktop\\i2x\\src\\trunk\\ss\\play\\serialized-continuations.ss" . "lifted.10")) 0 () () (0 "RHT")))
;; =>
;; #(struct:stock "RHT" "30.70" "14.43" "31.76")

How Did The Solution Do?

I've got to say, my little experiment appears to have worked. If I had a AWS SQS implementation, I could have gone through hundreds of stock symbols, serialized their continuations, and published them to a queue. I could have them had a collection of Linux servers sitting around, processing the queue.

I guess a legitimate question is, is it worth? Why bother with serialized continuations. Why not simply publish a statement like:

 stock:lookup:RHT

to the queue, and then write a program to parse that data and run the lookup?

In this case, that may very well be a workable solution. But, the continuations really shine in that you don't need to write specialized queue processors. Effectively, rather than having to invent a new language for exchanging data among processes, you can use the Scheme implementation itself. Less code to write means faster implementation time, fewer bugs, and the removal of another layer of transformation code. That sounds like a big win to me.

Tuesday, March 23, 2010

More Twins Cuteness Overload

As promised, we had tons of photos from our trip to Boston, and of the twins. Well, here's a whole batch of them. Enjoy!

Let Them Eat Cake - A Short Video Comparison

Here's the Twins enjoying their very first taste of cake on their Birthday. I'm disappointed that I couldn't get better footage -- but I think you get the idea.

Are they cute, or are they cute?

Monday, March 22, 2010

Witnessing Democracy By Proxy

Yesterday, with the big Health Care Vote going on, David and I thought it would be cool to swing by the DC Mall and see what was going on. Unfortunately, I had way to much to do, so I had to skip out. But, David, did in fact, get into the the thick of it.

As you can see from his photos, he got to witness America at its best: people peacefully assembling, protesting, and generally trying to change public opinion through clever signage. Ahh, it makes me proud to be an American.

Friday, March 19, 2010

The Twins Turn 1!

It's hard to believe that just about a year ago The Twins were welcomed into the world. My first thought upon meeting - my gosh, they are so very tiny (as I tried to capture). They were downright magical.

And now when I see them, I continue to be amazed. They walk, talk, eat, have teeth - they are little people. And their still magical. It's amazing how much can happen in year.

We celebrated the big day by, among other things, giving the twins their first taste of real cake. It was their first bite of junk food. Chana jumped in and ate her piece like a champ. Though, I think she was confused as to what all the excitement was about. Poor Dovid had missed his nap earlier and was wiped from opening presents. He just fell asleep at the table, never getting to eat his cake. It was so very precious.

All in all, it was a great birthday.

We've got tons of photos - here's just a couple to show you how cute they are. Lots more to come.

Thursday, March 18, 2010

Shira's latest laptop

A snapshot from our trip to Boston - at over fifteen pounds, this laptop is more a luggable than anything else.

So far, our flying experience has been great. Security was a breeze. Have I mentioned lately how much I love the lightweight Maclaren Triumph stroller? It folded up and went through the scanner without a hitch.

Let's hope our luck holds.

Wednesday, March 17, 2010

I Know It's St. Patty's Day and All...

But what the heck are they giving away at Sine, the Irish Pub at Pentagon Row? The line was way, way out the door.

They are certainly doing something right this holiday.

The Power of Amazon Web Services, and a Scalable PLT Scheme Architecture

I'm currently on a web app scalability kick (or to be buzzword friendly: I'm looking into leveraging Cloud Computing). I've now made it through a book on Google App Engine, and have started to delve into the other major player in the cloud space: Amazon.

While Google App Engine gives you a single contained environment that turns your programs into a scalability monster, Amazon appears to be more interested in delivering individual services so you can roll your own. At first, I was pretty turned off by this because the App Engine solution seemed to account for a great many nuances that an Amazon based solution would still need to handle. But, as I get to know the Amazon services better I'm seeing just how powerful they are.

Why couldn't you create the following with relative ease:

  1. Implement the standard HTTP REST protocol behind Amazon's web services. This is little more than porting PHP code to PLT-Scheme. There are plenty of examples of handling XML returned from services, too.
  2. Create a simple wrapper API around SDB, SQS and S3. This would give you instant access to a massively scalable and distributed database, queue and file system.
  3. Run the Stateless PLT-Web Server, a server optimized to not store state on the local machine, on a EC2 Linux box.
  4. Use Auto Scaling to spin up new stateless web servers as needed.

Of course, you could create the above solution with nearly any programming language. Though using PLT-Scheme's stateless web server has some interesting advantages because of its continuation support. Not only could you stash continuations in a store for the web user to execute later on, but I wonder if you could add them to queue, and have another application execute them altogether. The continuation pattern may be an excellent way to fork off tasks to be handled by other services.

The bottom line is this: thanks to Amazon, nearly any language can be used to develop a massively scalable architecture. Man, am I impressed.

Tuesday, March 16, 2010

Slowly Coming Out Of Passover Denial

David made our first big Passover shopping trip of 2010. We've now got the essentials like Matzo, Matzo Farfel, 4.5. Liters of Manisschewitz wine and marshamallow fluff.

We are still a long, long way from being ready. But perhaps I'm at least ready to acknowledge Passover is coming.

Maybe.

Gotcha Of The Day: Getting A Joomla 1.5 Plugin To Function

I'm upgrading a client's Joomla from 1.0 to 1.5, and in the process porting over some existing Mambots to 1.5 Plugins.

The OO interface of Joomla 1.5 is definitely a vast improvement over 1.0. Yet, even with the provided tutorial, I couldn't seem to get my Plugin to work. Here's a few of the big hurdles I had to clear before I could get my first plugin working.

For the sake of a comparable example, suppose I wanted create a plugin that replaced all instances of the word and with or. I started off with the following to files in and.zip and installed them (oh, and don't forget to activate the plugin after install!):

and.xml:

<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="system">
  <name>And to Or</name>
  <author>Ben Simon</author>
  <authorEmail>questions@ideas2executables.com</authorEmail>
  <authorUrl>http://www.ideas2executables.com/</authorUrl>
  <version>1.0</version>
  <description>Map all instances of And to Or</description>
  <files>
    <filename plugin="and">and.php</filename>
  </files>
</install>

and.php:

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.plugin.plugin' );

class AndPlugin extends JPlugin {

  function onPrepareContent( &$row, &$params, $page=0 ) {
    $row->text = preg_replace("/and/i", "or", $row->text);
  }
}
?>

The first issue I ran into was a misconfiguration in and.xml -- I had copied the tutorial's XML file, which had the group set to system. As a result, it was never going to invoke the plugin for content. I fixed this by tweaking the XML to say:

<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="content">
  <name>And to Or</name>
  <author>Ben Simon</author>
  <authorEmail>questions@ideas2executables.com</authorEmail>
  <authorUrl>http://www.ideas2executables.com/</authorUrl>
  <version>1.0</version>
  <description>Map all instances of And to Or</description>
  <files>
    <filename plugin="and">and.php</filename>
  </files>
</install>

I uninstalled, and re-installed the plugin - still, no dice.

After poking around the code, and re-reading the tutorial, I realized I had named my file incorrectly. It needs to be named exactly: plg«Section»«Name». I fixed this by changing the code to say:

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.plugin.plugin' );

class plgContentAnd extends JPlugin {

  function onPrepareContent( &$row, &$params, $page=0 ) {
    $row->text = preg_replace("/and/i", "or", $row->text);
  }
}
?>

For this change, I was able to just FTP the new source file in place and didn't have to bother with the uninstall/install dance. But still, no luck.

After even more poking around, I realized that the constructor that I thought superfluous, was in fact critical. Without adding the following line of code, the plugin never gets registered with the event system, and the onPrepareContent is never invoked. I fixed this like so:

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport( 'joomla.plugin.plugin' );

class plgContentAnd extends JPlugin {


  function plgContentAnd($subject, $config) {
    parent::__construct($subject, $config);
  }

  function onPrepareContent( &$row, &$params, $page=0 ) {
    $row->text = preg_replace("/and/i", "or", $row->text);
  }
}
?>

Whew. With all these conventions noted - I'm officially on good terms with Joomla 1.5. Turns out, we're going to be friends after all.

Monday, March 15, 2010

Data Just Waiting To Be Processed

Take a look at this census data and tell me it's not crying out to be included in some mashup?

Of course, there's plenty more where that came from.

A Blog Worth Checking Out

I stumbled on Peter Van Dijck’s Guide to Ease, and have managed to get pretty lost in it. If you're interested in design, information architecture or just good blogging - check it out.

Inventing Your Own Reality In Advertising - Yeah, not so impressive

Adrants highlights this spot from Microsoft about Bing:

And they make an excellent point:

But the most ridiculous thing about this campaign is the real world version of the scenario painted in the commercial. Do a search for Euston tube station on Google and it's the first result. Do the same search on Bing and its also the first result. Not exactly a product differentiation there.

Finding some actual examples where Bing beat Google might actually garner it some points. Instead, they just come off as out of touch.

Compare that to Google's super bowl ad, which I find incredibly sincere.

Friday, March 12, 2010

Brooks on Obama and Information Cocoons

David Brooks writes:

If you ask a conservative Republican, you are likely to hear that Obama is a skilled politician who campaigned as a centrist but is governing as a big-government liberal. He plays by ruthless, Chicago politics rules. He is arrogant toward foes, condescending toward allies and runs a partisan political machine.

If you ask a liberal Democrat, you are likely to hear that Obama is an inspiring but overly intellectual leader who has trouble making up his mind and fighting for his positions. He has not defined a clear mission. He has allowed the Republicans to dominate debate. He is too quick to compromise and too cerebral to push things through.

You’ll notice first that these two viewpoints are diametrically opposed.

Indeed, they are. Brooks goes on to explains why this is, and what to make of the Real Obama. It's one of the sanest things I've read about Obama in a long time.

A Big 'Ol List Of Google Docs Tips

While searching for help on the VLOOKUP function in Google docs I noticed the note:

We'd love to learn how you're using the VLOOKUP function. You can now show off your finished spreadsheet by editing our knol (a knol is an authoritative article about a specific topic).

Sure enough, the link points to a helpful examples of VLOOKUP. Poking around further, I saw that the link was to just one article of a big list.

This list of docs definitely seems handy. Some are broad like Google Spreadsheets FAQ, and some are quite specific like how to share PDFs . They all seem worthy of review.

Test driving a and buying a brand new set of wheels

Wheels for our little one, that is. A friend was generous enough to let us borrow a stroller for the short term (and man are we so thankful - what a huge help that was!), but it was time to buy one for real. Of course, I've been doing research and was forming a plan - though, I was still weeks away from making a decision (weeks, we didn't really have). Shira, on the other hand, wouldn't put up with my dithering - she dragged me to Babies-R-Us to go shopping last night.

As you can see from the snapshot, we did a good bit of stroller test driving:

I had wanted something lightweight, and simple - I was thinking the Chicco Capri. In the end though, we went with the Maclaren Triumph. It just had a better overall driving feel to it, and it seemed to offer a few more features while remaining lightweight.

Surprisingly, Amazon has no reviews on it - though Buzzillions does, and it gets a 4.3 out of 5 with 255 reviews. Not too shabby.

Of course, the real question is, how does the boy like it. Well, we hope to do a thorough field test this afternoon after day care.

I have to say, I am again impressed with Babies-R-Us. The clerk who helped us in the store was knowledgeable, and was patient as I insisted on reviewing each model over and over, long after Shira had made up her mind. And price wise, they had the same price as Amazon - though we were able to use a 20% off coupon.

Now, if we could just have some sunny weather to let us get out of the house and use the stroller - that would be perfect!

While we're testing the stroller out, and deciding if it's the one I'd love to hear from you. Do you have any stroller advice or insight into the Maclaren's in general? Add it to the comments, we'd all appreciate it.

Thursday, March 11, 2010

Google App Engine - Pondering The Trade-offs

I'm making my way through the O'Reilly book on Google App Engine and I can't help but compare the trade-offs of it versus my usual PHP setup.

Now, I'm just scratching the surface of Google App Engine, so some of these points are probably wrong. First, let's consider what you give up by going with the App Engine:

  • Ability to use common 3rd party tools like PHP, MySQL, WordPress, etc.
  • The requirement that your app be specially programmed in a stateless manner
  • Your data and files are no longer stored or accessible via standard methods (gone are the relational tables, and FTP access)
  • Your programs lose access to features such sessions, the ability to open up arbitrary ports, run operating system processes, etc.
  • The number of programmers who can pick up an App Engine project is minuscule when compared to the universe of programmers who can jump on a typical PHP project

And on the gain side:

  • Infinite scalability

And the thing, as risky as all the losses are, the infinite scalability is awfully powerful.

A Functional Programmer's Dream?

Another thought I keep having is that this setup is a Functional Programmer's dream, right? The whole system is built on the notation that when you suck state out of the problem, you can get amazing benefits - in this case, the ability to run as many copies of the application, on as many servers, as you need. All without fear that they'll step on each other.

There are lots of different approaches to making scalable applications. This approach that you program them from the ground up, using only resources that scale, seems quite sensible to me. Sure, it means that you give up the comfortable environment you're used to - but perhaps in the long run, you come out ahead.

Wednesday, March 10, 2010

Use #471 for a thumb drive: Portal Document Repository

We just bought a Canon MX860 all-in-one printer, and so far we're really happy with it. It's got all the bells and whistles you could ask for, including document feeding and flatbed scanning.

For some odd reason, looking at the flatbed scanner triggered an old traveling tip from long ago - when you travel overseas, the State Department suggests traveling with at least one copy of your passport. While the copy won't work in an official capacity, it's certainly better than nothing if you lose your passport.

With the flat bed scanner, it occurred to me I could copy any and all important documents and just throw them on my thumb drive.

Of course, there's a security concern here - as a lost thumb drive could now mean important documents are in the wild. I suppose I could have dealt with this risk by encrypting the files, but I took a simpler route. First off, I stored the files not in the root directory, second of all I named the files something misdirecting, and finally, I changed the file extension from .jpg to something completely different.

I think this covers the case of the casual user picking up the thumb drive and inspecting it. It also keeps things nice and simple, as you can open up the files by just changing the extension back to .jpg.

Now, I just need to convince Shira to tell me: (a) what our important documents are, and (b) where she keeps them, and I can actually follow through with this hack. Yeah, that's not going to happen.

Tuesday, March 09, 2010

Styling Google Docs - Close, but not quite there

There's a lot I like about Google Docs: they're collaborative, remotely accessible and easy to publish to a wide audience, to name just a few features.

One of the primary complaints about Google Docs is their relative simplicity. Compare Google Docs or Google Spreadsheets to Word and Excel feature-wise and the results are almost laughable. But, most of this I can forgive, as the majority of documents I make do just fine with the simple features Google offers. There is one area though, I keep bumping my head into - that is the look and feel of a published Google Doc.

By default, a published Google Doc has almost no style information associated with it - check out this example to see what I mean. In some respects, this is a good thing - I suppose I'd prefer no style to cruddy style.

Google gives you a couple of options for pretty'ing up the document:

Use a pre-existing template. A template is is essentially an already styled document, that you can replace the content with your own.

Edit the CSS of the document and manually add style. You can follow this guide to add some slickness to your doc. The image tip is especially helpful.

These are fairly reasonable options but I keep finding them limiting:

  1. The template library is a cool concept, but I like to add in style information *after* I'm done writing, rather than before. That way, I don't get distracted trying to find the perfect look, and get off track content wise. I don't see an elegant way of applying a template after the fact.
  2. Manually adding in CSS is very cool, and feature I'm glad they have. But, for typical documents, I don't want to mess with CSS every time.
  3. The default style of the document is to have its width match that of the browser. With the wide screens in use these days, I really don't think that makes a heck of a lot of sense.

My suggestions then?

  • It would be really helpful if they had a publish option that showed the exact same view as the Fixed Width Page - that is, a white page on a gray background. This alone would go a long way towards making the default published doc look good. And it makes sense to publish the document and have it appear the same as it does in your editing view.
  • I wonder if there could be a way to grab the CSS from a template and merge it into your existing document. That is, use the template library concept, but don't force users to pick the template up front. By merging just the CSS from a template, you wouldn't lose any content.
  • Publish more detailed CSS docs. The above issues could be basically solved by keeping around some standard CSS documents that can be dropped into place. One reason I haven't done this is that I can't seem to find documentation that fully explains the different CSS selectors a typical document uses. If I knew these, I could probably write up some standard CSS that would give me the fixed look && feel I'm after, and I could just copy that in place when I was creating a doc.

Like all things Google, I'm sure Docs is on a path to evolve. I just know that with a few small tweaks, this whole issue of publishing good looking documents - easily - could be put rest.

Biologists vs. Engineers

Lambda-The-Ultimate referenced this fun paper: Can a Biologist Fix a Radio? — or, What I Learned while Studying Apoptosis and I found it a fun read. I certainly thought of my dad and brother, as the author described how a biologist might go about fixing a radio and had a chuckle.

It got mentioned on a programming forum because the paper calls for formal languages, and discusses their power. I can definitely appreciate that.

I also liked how the author talked about the cycles a scientific discovery goes through (from it being an esoteric discussion among a few, to a gold rush, to a state of frustration and confusion) and thought it matched up well to how tech trends tend to occur.

Give it a read - and ask yourself, how would your profession go about fixing a radio?

Sunday, March 07, 2010

Huntley Meadows Park - An Excellent First Hike

The weather in DC was perfect today (just about 60° and sunny!) and my Mom was in from out of town - so it seemed like the perfect day to take our little guy on our very first family hike. I poked around this list of DC area hikes and tried to find one that was short, interesting for all, and wasn't too far a drive away. I ended up finding a 1.6 mile loop at Huntley Meadows. It was short enough, marked easy and included a boardwalk over wetlands - that certainly sounded interesting to me.

I have to say, I was really impressed. Huntley Meadows is really one of those hidden gems that you can live in DC for years and never hear of, yet, makes for a wonderful little walk through the woods. The trail really is easy - we opted to take our guy in a Baby Bjorn (you can see Shira did the schleping!), but we probably could have gotten away with using a stroller. Even with the easy terrain, it was still an interesting hike - the walk through the marshland was surprisingly dramatic, especially when you consider this is not some exotic location, but a park in Alexandria, VA.

If you've got young hikers, or are interested in birding - this is definitely a place you've got to check out.

Some photos below...

Saturday, March 06, 2010

A Resource For Finding DC Local Hikes

Our plan is to try to do a little light hiking with my Mom tomorrow. However, the usual book I use to find hikes wasn't finding anything close in enough for our tastes.

A little poking around Google and I found a most excellent resource: LocalHikes: Washington-Baltimore, Washington, DC. This is an impressive list of hikes that are within the DC metro area. I found a couple short ones that were within 30 minutes drive of our place - just what I was looking for.

Besides the comprehensive nature of the site, I also like all the info they give about each hike, including reviews. The best part, though, is that included in each trail head description is the latitude and longitude of where to start. That solves one of the biggest challenges to taking a hike - finding the right start point.

Hopefully the weather will hold, and we'll get in a little adventure tomorrow.

Thursday, March 04, 2010

Review: Poetry Speaks To Children

We got Poetry Speaks To Children as a gift (thanks cousin Ludmilla!) and I've quickly grown to like it. The book is beautifully illustrated with lots of visual variation, so our little one likes looking at it. And the poems are really fun to read. Some are clever and obvious, and others leave me scratching my heading wonder what I just read.

One of the best parts, though, is that the book comes with a CD where poets read their work aloud. Poetry is often meant to be heard more than read (or so I've been told), and it's really neat to kick back and hear the author read the poem as he or she intended.

I have to imagine that kids of all ages would get a kick out of this book. But my guess is that the real winners are the adults. For most of us, poetry isn't something we can connect to, appreciate or find entertaining. And this book helps you do all three.

It's a definite winner. And best of all, it's guilt free entertainment - nobody ever says, can't you just turn off that poetry and watch some TV or something!.

Automagically Bringing Up Street View, and Other Google Maps Hacks

Programmatically Linking to Google Maps is usually trivial. Just use a URL like so:

 starbucks+arlington+va
where the query startbucks+arlington+va is replaced by any text you want to search for. If you want, you can even plug in arbitrary latitude and longitude by saying: q=LAT,LNG where LAT and LNG are decimal latitude and longitude values.

But today, I wanted to link an admin tool I wrote to not just Google Maps, but the Street View of Google Maps.

At first I tried bringing up a particular map view, grabbing the link URL, and reverse engineering it. But given the randomish parameters, that quickly became a non-starter.

That's a good thing too, because one quick Google search brought me to someone asking the same exact question over at StackOverflow.com.

Listed in the answers was a link to this handy page: Google Map Parameters. Turns out, those random parameters I was tripping over aren't random at all. They're documented, and you're effectively encouraged to use them.

That's definitely a handy resource. It should even be handy to non-programmers who might have a blog or other web resource, and want to be able to get the most out of Google Maps. By constructing just the right URL, you should be able to get Google Maps to behave in a custom manner.

Incidentally, the simplest URL I came up with to jump to a particular map point with Street View on was:

http://maps.google.com/maps?q=LAT,LNG&layer=c&cbll=LAT,LNG&cbp=11,0,0,0,5

Where LAT and LNG are the latitude and longitude of the point you're requesting.

Wednesday, March 03, 2010

divshare.com - the painless way to embed audio on your blogger blog

I wanted to embed an audio clip on my blog and realized I didn't have to an easy way to do it. Googling around, I find a bunch of suggestions - but none that I was in love with.

In the end, I simply signed up for Divshare.com and was able to upload the clip there, and trivially embed it on the blog.

It seems like the free account at divshare will work just fine for my purposes.

Another interesting option is blogcastone.net - but that site assumes you have your mp3 file uploaded somewhere already. Though, it does seem like it might be a handy lightweight solution.

A New Favorite Sound

Along with having a new favorite food, I've also got a new favorite sound. Give it a listen:

That's beautiful music, isn't it?

(Yes, that's our little one snoring away. He's always been a loud sleeper - which I'm incredibly thankful for. It means we can stand in the hallway and confirm he's happily dreaming away.)

Tuesday, March 02, 2010

Baby Sign Hack - A Printer Friendly ASL Site

ASLdeafined, a website that helps educate students, parents and the community in sign language, is one of my clients. Naturally, I was eager to consult them about baby sign, and how early it can be taught. Their response was that you could start as early as 6 months (though, I imagine it's some time before the child actually starts to respond to what you are showing them).

Shira and I went through some of their tutorials to start to get up to speed. OK, I'm a little biased, but I thought they were really slick (and amazingly cute) videos - seriously, check out the sample here. Anyway, we were off and running learning some simple signs.

And of course, as soon as I'd step away from the computer, my mind would go blank.

Looking around, I found LifePrint's First 100 Signs - and was pleased to see how printer friendly the pages were. Going page, by page, I was able to print out a stack of about 6 signs (in some cases, only printing page 1 of the web page, or manually shrinking the page percentage). The pages include both a some still photos of the sign, as well as short description.

My plan is to spread the pages around, and try to remember to use the signs - hopefully, with use, they'll sink in.

I'm tempted to take the content from LifePrint and put together a single page cheat-sheet that has the signs, and descriptions. But I'm thinking my effort is probably better spent learning the signs.

Anybody have any tips for teaching baby sign? I assume it's just a matter of practice, practice, practice.

A New Favorite Food: Gerber Lil' Crunchies, Zesty Tomato

Technically, this isn't my favorite food to eat but to watch getting eaten.

A couple weeks ago, we introduced our little one to the wonderful world of Cheerios. We tentatively fed him a single O. And for a boy that has no problem trying to put objects bigger than he is in his mouth (take my exercise ball, for example), he gave his now familiar skeptical-food-look with the lone Cheerio. He crinkled up his brow, and we waited to see what he would do. Well, chew, of course. We had success - the boy would eat Cheerios.

The we put some Cheerios down in front of him, and encouraged him to pick them up and eat them himself. Yeah, that didn't work out so well.

It took him a few eating sessions to realize how the whole setup works: we put the Cheerios in front of him, and then he's supposed to pick them up. Then there was the minor detail that his fine motor skills just weren't quite up to the challenge of getting those teensy Cheerios all the way to his mouth. He might manage to pickup a Cheerio, and then would end up gnawing on a part of his fist that was nowhere near the Cheerio itself. Yes, it was absolutely precious to watch.

One of his teachers at daycare suggested we try the Gerber Biter Biscuits. These are a hefty cookie that he could really go to town on. The bigger size definitely helped him get a handle on the food, and he started to show some control.

Shira then picked up a package of Lil' Crunchies. What an excellent find. They turn out to be big enough that he can grab on to them, but small enough that he can chew and swallow them with ease. (And they actually taste pretty good)

And tonight he showed off just how far he had come along. We dumped a bunch of crunchies on his tray, and he went to work. Holy Smokes! He was able to pick them up and munch away. Sure, there was crunchies in his hair when he was done - but heck, I tend to have food in my hair when I'm done eating. Who doesn't?

He also branched out and tried a few stalks of broccoli tonight. The shape was close enough to the crunchies that the same skills applied. And he gave his classic - now, what exactly are you feeding me? look. But, did manage to get a few pieces down.

Looking at our 6 month old grow it boggles my mind both the shear magnitude of what we need to learn as humans, and just how fast we learn it.

I'm humbled. And very much entertained.

Late But Oh So Tasty

Sunday was the holiday of Purim - and if there's one thing you can depend on when it's Jewish Holiday Time, it's some traditional tasty treats. The well known item for Purim is the Hamantaschen - a 3 corner cookie filled with fruit or some other goodness (poppy-seed being my favorite). Of course, you're supposed to have the hamentaschen prepared, and ready to give to friends on Purim - which we weren't able to pull off. Instead, we finished cooking the first batch on Sunday, and made the last batch tonight.

Luckily, they don't taste any less good the day after the holiday.

Here's the recipe we followed:

Mrs. Shafer's Hamentaschen

Cream together: 3 eggs, 1 cup sugar, 1/2 cup oil

add 1/2 cup orange juice, 4 tsp baking powder, 1 tsp vanilla

add enough flower to make a good, workable dough

At this point, the official recipe ends and we start winging it.

As you can see from the photos below, you'll want to roll out the dough, and use a glass to cut out circles. Drop some fruit (pie filling or preserves work well) in the center, and then fold into a triangle. Drop a dab of flour on top, and wet the corners with some water to provide some extra glue.

Baking time? This year we did 13 minutes at 350°. But we don't write that down and have to figure it out year, after year.

One word of caution: the dough absolutely multiplies. You'll roll out one batch, etch out your circles, and lift up the discarded dough to find you had more than you started with. In other words, the process isn't fast.

But it's definitely worth it!