Thursday, May 31, 2007

Ellen's Futons - Another Local Business That Gets It

As long as I'm on the topic of local businesses that are Doing It Right, I should mention Ellen's Futons.

Shira and I wanted to make another room in the house a backup guest room, but didn't want to fill it with a bed that would mostly be collecting dust. The usual solutions came to mind - buy a sofa bed or a futon (we even looked at Murphy beds, but shot that down quickly).

Sofa beds have a reputation for being terribly uncomfortable, and I've slept on one at my parents one for proof - so we focused on futons.

A quick local Google search turned up Ellen's Futons. They had a totally reasonable website, and a great location so we thought we would give them a try.

They were awesome. The sales clerk was patient, good humored and just an all around good guy. Turns out there's a lot more to futons than the $99 model you buy at Wal-Mart for college, and he took us through all the salient details.

After lots of consideration and kicking the tires we decided on what we wanted to buy. Then came the tricky part - choosing a cover. OK, it's not tricky, but it does mean you have to choose from among various colors and patterns.

Shira picked one easily. Only problem was it *probably* wouldn't fit the mattress we bought. D'oh. We picked another. But clearly, the second was just that, a second choice.

So what does the sales guy do? He tells us to buy 'em both and return the one that doesn't work. And who cares that the one that might need to be returned was a custom one that the store policy clearly states can't be returned. Wow, I thought, he's putting us ahead of the store policy. Cool.

And just now I got done returning the extra cover. I had zero issues with the return.

See, they get it. They too just won a customer for life.

--Ben

Viral Radio Ads

Last night, before bed, we were listening to the radio. I happened to catch a commercial for match.com. The commercial was nothing special, though it did include some woman chatting on about her profile.

At the end of the spot, they mentioned that you should check her profile, and that it was nycgingergirl.

Not that I'm shopping for a new mate, but I couldn't resist a quick google search for her.

Sure enough, she has a profile and a blog for you to read.

Now clearly, this has a kind of icky feel to it all, and it's obviously inspired by lonelygirl15. But still, I have to admit that I like how they've taken a more show rather than tell approach to their service.

They don't just send you to their home page, or to some promotion, they get you to actually search someone out.

I'm with Montgomery Burns on this one: "You know, I'm not art critic, but I know what I hate. And ... I don't hate this."

Problem Solving Advice

Fix the first problem fully and calmly before even thinking about the second problem.

From Shadow Divers, as the mantra deep sea wreck divers must drill into their heads. As explained, most deaths in this form of diving are caused by panic, not by the actual problem that triggered the panic.

And here's another thought from the book:

Deep sea diving is so dangerous, it's actually safer to do it alone than with a partner.

So far, I'm really enjoying Shadow Divers by Robert Kurson. The story is surprisingly riveting. I'm only on CD 2 out of like 10, but it's really sucked me in.

Wednesday, May 30, 2007

Small Business vs Big Business: Delivering on your word

So, yesterday, I had a terrific experience with a local repair shop - Appliance Fix-It. They were everything Sears couldn't be, and more.

They clearly passed step 1 - they gave me that warm and fuzzy feeling that they knew what they were doing and they wanted my business.

Today they nailed step 2 - they delivered on their word. They promised that my mower would be fixed the next day, and sure enough, at 11am this morning I got a call saying it was all done.

I must have talked to 6 different folks at Sears and not one of them could do what this tiny shop did. Deliver.

Now, of course, we need them to pull off step 3 - follow through. Will the mower really be ready and will the be courteous enough to help Shira load it into the car?

We shall see. Still, they are going to have to be awfully bad to get me to go back to the big guys.

Tuesday, May 29, 2007

Lawn Fairy

My lawn looks pretty dang good, if I do say so myself. There's only one oddity about all of this - *I* didn't mow it.

Shira got home and called me - "The Lawn Fairy visited us today," she explained.

Turns out, it was my next door neighbor taking pity on the fact that I'm having all these issues relating to my yard

Gosh it's great to have awesome neighbors.

--Ben

The Real Mower Solution - Getting It Fixed

Turns out, there's a local place named simply Appliance Fix-It (5800 Seminary Rd, Falls Church, VA 22041) which fixes mowers and such.

They are open late, incredibly friendly, apparently knowledgeable, and plan to have the mower fixed tomorrow.

I'm amazed. This simply blows away anything Sears could come close to offering.

Take note: small can seriously kick big's butt.

--Ben

Cicada Example: Abstracting Server Details

As promised, I'd like to present an example or two of the new Cicada framework I just posted about.

Before tackling these examples, you'll want to read the paper on Termite, as all the background needed to understand them can be found there.

An Opposite Server

Here's the code for an opposite server. You pass it a positive number, it'll give you back a negative one. Pass it a list, it will reverse it. Pass it true, it'll hand back false. You get the idea. Notice the use of pattern matching and guards to implement this:

(define opposite-server1
  (spawn (lambda ()
           (let loop ()
             (cicada/recv
              [(,from ,tag ,x) (number? x) (! from (list tag (* -1 x)))]
              [(,from ,tag ,x) (string? x) (! from (list tag (string-reverse x)))]
              [(,from ,tag ,x) (boolean? x) (! from (list tag (not x)))]
              [(,from ,tag ,x) (list? x) (! from (list tag (reverse x)))]
              [(,from ,tag ,x) () (! from (list tag x))])
             (loop)))))

To make calling this server easy, we can take a hint from the Termite paper and Erlang and define !? as follows:

(define (!? pid mesg)
  (let ((t (make-tag)))
    (! pid (list (self) t mesg))
    (cicada/recv [(,tag ,reply) (eq? t tag) reply]
                 (after 200 (error (format "Failed to receive reply about message ~a" mesg))))))

In this case, I've decided that a latency of 200 milliseconds should result in an error. Naturally, this behavior could be customized to be any number of alternatives.

Calling our new server now reduces to:

(assert equal? -7 (!? opposite-server1 7))
(assert equal? #f (!? opposite-server1 #t))
(assert equal? "oof" (!? opposite-server1 "foo"))
(assert equal? '(x 2 1) (!? opposite-server1 '(1 2 x)))
(assert equal? + (!? opposite-server1 +)) ; unknown type. just return it.  

Adding Abstraction

One detail I noticed when writing the above server was how the it needed to return back a message in just the right format for !? to function. Why should it be the responsibility of the server author to make sure this low level messaging format detail was done right?

We can actually do better. We can abstract out those server details, and let the server author just focus on code. For starters, we can define a procedure to create this specific class of server (named tagged response for the fact that all responses include a, well, tag).

(define (spawn-tagged-responder handler)
  (spawn (lambda ()
           (let loop ()
             (cicada/recv
              [(,from ,tag . ,mesg) () (handler mesg
                                                 (lambda (result)
                                                   (! from (list tag result))))])
             (loop)))))

Next we can re-write our opposite server, but this time without worrying about the details of formatting a response. The server can just focus on what it needs to do.

(define opposite-server2
  (spawn-tagged-responder (lambda (mesg !!)
                            (match mesg
                              [(,x) (guard (number? x))  (!! (* -1 x))]
                              [(,x) (guard (string? x))  (!! (string-reverse x))]
                              [(,x) (guard (boolean? x)) (!! (not x))]
                              [(,x) (guard (list? x))    (!! (reverse x))]
                              [(,x)  (!! x)]))))

Finally, we can show this all works by invoking more or less the same code above:

(assert equal? -7 (!? opposite-server2 7))
(assert equal? #f (!? opposite-server2 #t))
(assert equal? "oof" (!? opposite-server2 "foo"))
(assert equal? '(x 2 1) (!? opposite-server2 '(1 2 x)))
(assert equal? + (!? opposite-server2 +)) ; unknown type. just return it.     

In just 9 lines of code we've simplified the implementation of our server in a significant way. Gosh I love the bendy nature of Scheme.

Monday, May 28, 2007

Lawn Mower Woes

As usual, when I went to try mowing the lawn this season, the mower wouldn't start.

I've tried every approach possible to avoid actually getting it repaired. I've attempted to borrow mowers from our neighbors (theirs are broken too) and I've contacted people on Craigslist (they never seem to follow up after the initial contact).

So, I'm finally facing facts. We are on our way to Sears with the mower. They'll no doubt fix it by doing something trivial, like screwing on the gas cap. But at this point I don't care - if I don't get it fixed and my grass mowed, the county is going to declare our property a disaster area.

There's only one seed of good news in all this - at least the grass is growing.

Update: After getting to Sears, they turned us away because the repair department is at another location, and while technically you can drop off repairs at the location we drove ot, they don't recommend it. Basically, the message we got from them was that they won't be able to transfer the drop-off to the repair center in a timely manner.

The repair center, naturally, is closed today.

This is absurd. If, as sears.com reports, the location I went to today is a drop off location for repairs, it should serve as just that. How they can think that it's better to inconvenience the customer by making them go another location, rather than taking responsibility for the transfer is beyond me.

Photo Of The Day

Taken as we were leaving the car wash earlier today. I'm not sure this qualifies as great photography, but I at least think it came out unexpectedly interesting.

Speaking of great photography - take a few minutes and check out Marcia Birken's work. I discovered her site tonight.

Marcia is a mom of a friend/acquaintance that Shira and I went to high school / middle school with. I'm still of the mindset that Moms and Dads of friends are supposed to be just that - Moms and Dads. Not globe trotting, world class photographers.

How wrong I was - I guess Moms and Dads are people too.

Cicada: Erlang Style Message Passing for SISC

Erlang - Always a contender

I'm a big fan of the Erlang programming language. I just love how it can be used to build large systems with relative ease.

If you spend just a few minutes dabbling with Erlang you quickly learn that its power is in that it allows you to view the world as loosely connected, totally independent processes. This is a good thing, because it's exactly these characteristics that make for a massively scalable system.

But, at the end of the day, when I dabble with personal projects, I usually choose Scheme, and specifically SISC over Erlang. I do this for a bunch of a reasons, one of the main ones being easy access to existing Java APIs. It's just too valuable to be able to take advantage of advanced linguistic features and get access to mainstream libraries and code.

Termite - the best of both worlds?

Then along came Termite - an implementation of an Erlang style language on top of Scheme. Suddenly, I didn't need to choose between the features of Erlang and Scheme - I could have them both. This was good.

Except for the fine print - Termite is only available for Gambit-C. Gambit, I'm sure, is a terrific implementation of Scheme. But, as I mentioned above, I'm not ready to give up my free Java access.

Cicada - Just a bit of Erlang and Termite

Which brings us to Cicada - a really quick and dirty implementation of Termite, but for, you guessed it, SISC.

First, the bad news:

  • SISC doesn't have particularly lightweight processes. That's one of the cool aspects of Erlang and Gambit-C - you can make millions of simultaneous processes. This means that if you are modeling huge numbers of processes, you probably should be steering clear of SISC in general. But, with that said, SISC delegates threading to the JVM, which no doubt is getting more flexible all the time. And a really quick Google search turned up a bunch of options for scaling Java threads
  • I've only implemented the concept of local processes. Termite offers support for spawning processes across nodes and sending messages between nodes (read: machines). SISC has full support of serializing all sorts of goodies, including continuations, so should I (or someone else, hint, hint) need this functionality, adding it shouldn't be a problem.
  • There are other features that are missing too - like support for connected processes. Again, when I need this functionality, I'll no doubt add it in.
  • I through this all together in a weekend. This is as beta as it gets. Feel free to play with it at your own risk. I'm quite certain there are still threading concurrency issues in the code.

Now for some good news:

It does indeed work! You can actually model problems the same way using Cicada as you would with Termite or Erlang. You can spawn processes and exchange messages. There's even support for pattern matching of received messages.

I was able to trace my way through the paper on Termite and recreate may of the examples, including some of the more sophisticated ones, like updating code in a running process.

I suppose the best news about Cicada is that even in the short term I've played with it, it's given me the chance to think about solving problems from a different perspective. It's like playing with OO for the first time.

Getting Access

You can download the source code for Cicada here. I've written it against SISC 1.16.6.

You're best bet for getting started is to read through com/ideas2executables/concurrent/cicada-test.scm, as well as the source code itself in com/ideas2executables/concurrent/cicada.scm.

I may post some examples on the blog - so stay tuned.

What's in a name?

Why name the package Cicada? Well, for one thing, I wanted to carry on the naming convention started by Termite of using bugs for this sort of thing. After a bit of poking around, I settled on cicadas as my bug of choice. They are actually remarkable insects - seeing as they manage to cool themselves by sweating, and around here only pop out of the ground every 13 years. And, just like this software package is missing a few features, cicadas are missing some of their own - like a mouth, for example.

Friday, May 25, 2007

Dual Headed Laptop

Turns out, my Toshiba laptop can make use of a second monitor as an additional screen - and not just a larger version of my laptop screen.

Cool - I love the new real estate! (Kostyantyn tells me that I shouldn't be so surprised this works, but I guess I'm used to low end / out date hardware).

I was inspired to try this configuration by the article Three Laptop Tricks For Better Presentations. I'd say it was more than worth taking the time to read.

Originally Via: Micro Persuasion

Star Wars Hilarity: Darth Vader calls the emperor

There's just something about Star Wars that makes it an ideal film to laugh at. Here's the latest clip, passed to me by my Brother David, which is laugh out loud funny. It features Darth Vader breaking the bad news to the Emperor about the little mishap with the Death Star.

In the past, I've posted about Star Wars: Under the Tusken Sun, Chad Vader and even a fake documentary about The Battle Of Hoth. All remarkably clever stuff.

Review: Saving The World

Saving The World by Julia Alvarez. Ugh. Let's start with what I know.

The book consists of two stories threaded together. One is the story of a modern day woman going through a midlife crisis. The second is that of a woman in the early 1800's traveling the world inoculating people with the smallpox vaccine.

The second story, based on a true event, is a wicked cool concept. As I've blogged before, the whole notion of using human carriers to get a vaccine across an ocean is a terrific medical hack.

This story also turns out to be the easier one for me to grasp. It's fairly obvious why it's in a book called Saving The World, and it has a fairly powerful lesson to tell.

It's the first story that still has me puzzled, even after 4 days of reflection. What the heck is up with this woman who admits she has it all, and yet is in a funk about it? And then, as if her circumstances need to be in sync with her mood, her life takes some downward turns.

I just don't get it. To make matters worse, the side stories are just as incomprehensible to me.

I feel like any day now it's all going to click and I'll exclaim: "That's what Alvarez was trying to tell me! She's a genius." But in the mean time, I'll have to let it continue to let the ideas cook.

I think the book is indeed well written. The connections between the two stories are fun discover, as some are more obvious than others. And the way that the narrative changes points of view on the fly is also intriguing.

Overall, I give this book a 7.8/10 for being a thoughtful read, with at least a half positive message. If I can't crack that first story though, I may be forced to downgrade my opinion.

--Ben

Tuesday, May 22, 2007

New Work Game: Hide Ben's Laptop

My team just hid my laptop in my food drawer. Logic being, my team thought I would get hungry before I did any work.

How right they were...

To be fair, I did just leave it in the middle of the room and walked away. So, it was no doubt tempting to do something with it.

Thank You Notes - Dos and Don'ts

Do: send a hand written note, a few business cards and a stress ball to a prospect you spoke with on the phone.

Don't: send two of the exact same packages (including the hand written note).

Whoops.

--Ben

Monday, May 21, 2007

Dinner and Driving

Tonight we had a really enjoyable evening hanging out with my cousin Laura. She survived dinner at Cafe Asia in the city (where else would we take her?) and then she got the quick night tour of DC, and finally the tour of our home.

Mostly we demonstrate that after 8 years of living here, we still can't drive around DC at night. Even with the GPS we manage to miss every turn and get caught in every traffic circle. You'd think we just moved in last week.

Update: For the record, Shira and Laura were on a conference call to Grandma when I snapped this photo. This wasn't some sort of strange phone modeling thing.

Sunday, May 20, 2007

Baseball That Is As Good As It Gets

Today we caught a Nationals Game with Shira's Mom in town. We had a wonderful time. When you add up the fact that our seats were awesome, the weather was perfect, we were able to buy Kosher hot dogs from a Glatt Kosher vendor and the Nationals Won, you can see why I think this must be one of the best ballgames I've ever been to.

The Nationals came back from being down 3 - 1 in the 8th inning. It was probably a contest of who could be more pathetic - the O's or the Nats - but I don't care. We won, and the game had just the right level of excitement to make it tons of fun.

Our seats were so good, in fact, that I could even capture a few action shots from my SD 630.

What fun!

Now, if we could just get the price of tickets down to something that doesn't require you to take out a second mortgage, we'd be all set.

Buying Sudafed: Only In America

It's probably easier to buy a gun, and certainly easier to buy alcohol under age, than to buy Advil Cold & Sinus.

Here's the clerk recording Shira's ID info as she attempts to buy this heavily controlled substance.

Actually - I shouldn't be knocking this policy. If these steps do reduce drugs in the neighborhood, that's a good thing.

Shira just informed me - we only purchased .6 grams, so by Federal law, and we can purchase another 3 grams of pseudoephedrine today. How exciting.

--Ben

Friday, May 18, 2007

Maps for Story Telling

Christian put together an impressive map of his cross country trip, instead of a regular blog post. It turned out to be a really effective format for story telling.

I suppose maps, like cartoons allow you to get across your point using fewer words - which is a good thing.

Glad to have you back on this coast Christian and thanks for the tip!

Wednesday, May 16, 2007

Productivity Thought Of The Day: Avoid Distraction

Simply put: Do fewer things. Better.

If Christopher Columbus had altered his course every week, he would have surely starved to death and never found the new world.

It's easier to think things up than to think things through. So take the time. Think an idea through completely. Then work to avoid the distractions that will take you off point. You'll end up doing fewer things. You'll have the budget to complete them. And you do something most companies only dream of.

You'll accomplish your objective.

In a world that expects instant success, it's nice to see the slow down and get it right message being put out there.

Lousy Error Messages

From the gas pump's UI this morning: "Basic Table. 05."

Apparently, that's the gas pump equivalent of PC Load Letter.

At least the pump didn't produce a stack trace, kernel panic or core dump.

--Ben

Tuesday, May 15, 2007

Office 'Swear Jar'

Forget the swear jar - we have an Unfortunate decisions in professionalism jar.

Cuss out your team members, put down someone's idea unfairly or just be a general pain in the butt at the office and it'll cost you $0.25.

What a terrific idea!

--Ben

CSS Hack: IE and max-width

Firefox does max-width, IE doesn't. What's a developer to do when he or she wants to set a max-width on an image?

The very short answer:

post-body img {
  max-width:400px;
  width: expression(this.width > 400 ? 400: true);
}

The complete answer can be found here.

That's actually exceptionally cool that IE understands the expression statement in CSS. Seems like that could come in handy for all kinds of tricks.

Monday, May 14, 2007

The Simons Give Marriage Advice

This past weekend we had the pleasure of attending Matt and Abbie's wedding. The minister (also Abbie's mom - how cool is that?!) asked each of the married couples present for marriage advice.

Here's what we had to say on the topic...

Ben Says:

Go to bed angry.

(Most fights that seem significant can melt away once you've had a bit of sleep and some perspective on the matter.)

Shira Says:

Know his favorite dessert.
Know her favorite gemstone.
Make each one appear, every once in awhile, just because.

Warning: YMMV.

May 22nd - Shavuot Evening Study - Torah and Ice Cream

The traditional way to kick off the upcoming holiday of Shavuot is to stay up all night studying Torah. My shul will be following in that same tradition - though dialed back a bit. We'll be having a study session from 7:30pm - 9:30pm.

To make up for not studying all night, we'll have ice cream there. (Please don't ask me to explain logic of this statement.)

The official announcement is below. If you are in the area, and interested, please don't hesitate to contact me so you can join us for the study evening. The entire Internet is invited.

A Ben & Jerry's Shavuot Study Session

Join Ben (Simon) & Jerry (Jacobs) for an evening of Torah study and ice cream eating on Tuesday, May 22nd, as we usher in the holiday of Shavuot with the traditional night of Torah learning. The study session will run from 7:30pm to 9:30pm and will be held at the home of Rabbi Bass (for directions, contact the office at 703-979-4466). Come for the Torah study, to connect with the holiday of Shavuot, or just to eat some ice cream and kibitz. Everyone is welcome, no Torah study or ice cream eating experience necessary.

For more information, contact Ben Simon at chief.gabbi@gmail.com. See you there!

Jewish Reggae - You have to watch it to believe it

Yes, you read that right - Jewish Reggae. The clip is from 2005, so apparently he's been around for a while, but this is the first time I've seen or heard him perform.

Count me as impressed.

Thanks brother David for the link.

Sunday, May 13, 2007

5 Lessons From Mom

On this Mother's Day it seems appropriate to take just a few moments and dwell on some of the lessons my Mom taught (and teaches!) me.

Mom, any successes I've had to date you can take pride in knowing couldn't have happened without you. And any of my short comings you can blame on Dad.

1. Don't make up other people's minds for them. That is: don't make assumptions about people and their behavior, be open to them and suspend judgment.

2. The letter grades are more important than number grades. In 2nd grade and the like, we received report cards with both numbers (1-4 on them) and letters (E for excellent, S for satisfactory, etc.).

The numbers were for quantitative items like tests, and the letters were for qualitative things, like effort put in.

My Mom made it abundantly clear: she cared about the letters. The numbers would follow if the letters were good.

And she was 100% right.

3. Bored is a four letter word. Ever want to get my mom annoyed? Just say you are bored. "People are boring, not situations" she would often say.

It is up to you to make your own positive/fun/productive situations; you shouldn't wait around for them to just happen.

4. Stand Tall. I'm a bit taller than anyone in my family and apparently many of my friends (except Greg, who is really tall). So I had a natural cause for stooping down a bit.

Mom would have none of it. She understood how important body language is and how it can effect your personality.

5. Laugh often. The best glue that held my parents, and I suppose our family, together was laughter. My Dad has dodged countless bullets by making my Mom laugh just when she was most upset.

Happy Mother's Day Mom! Thanks for these and all the other lessons you've passed on to me. See, at least a few of them stuck.

Recipe: Dessert Nachos

My latest invention: Dessert Nachos.

Ingredients:

  • Baked Tostidos
  • Chocolate Chips
  • Jif Extra Crunch Peanut Butter

Scoop peanut butter into nachos. Sprinkle liberally with chocolate chips. Enjoy!

I have no doubt Taco Bell will be contacting me any day now to license this recipe. Yes, I'm open to such an arrangement - but I'm sorry to report I don't come cheap.

--Ben

Thursday, May 10, 2007

Event Publication Made Easy

Tonight I was helping to plan an upcoming event for my shul and it occurred to me that it might be handy to publicize this event on my blog. But, rather than publicizing this one date, I had, thanks to my programmer instinct, the urge to figure out a way to publish an arbitrary feed of events on my blog. As Shira is fond of saying, I always find the most complicated way to solve a simple task.

After a bit of Googling around, I found the instructions I was after here. You start with a Google Calendar that you mark public, and end up with a chunk of HTML that you drop on your blog which renders the events the upcoming events on your calendar.

Sure, you have to jump through hoops to get this, but like any programmer oriented solution, you only have to deal with this pain up front and after that things Just Work.

Here's the end result - a dynamic view of my Public Events calendar:

Now, adding an event to my blog is as simple as adding a Google Calendar entry.

Google actually provides a whole slew of ways to link to and share your calendar and events. For example, clicking on the following button will automagically subscribe you to my Public Events calendar.

The whole story on linking and sharing calendars can be found here in Google's Event Publisher Guide.

All Terrain Shira

Nothing hotter than a wife on an ATV. I'm impressed on so many levels.

Shira And Her Furry Friend

Here's Shira with Man's Best Friend - in this case a Pit bull. For a woman, who not too long ago was afraid of dogs, she sure seems awfully comfortable.

Wednesday, May 09, 2007

Org Chart Wiki

Forbes is offering a new beta, an Org Chart Wiki. I can't claim I understand what the point of being able to have a community come together and (re)create org charts, but I'm sure the folks at Forbes have a good reason for this.

Naturally, I had to add the Simon Organization into the system, just for completeness.

The actual application is so-so. My first thought when playing with it was that it was really cool (and it is). But, after trying to actually create an Org Chart, I have to say, it's in need a of tweaks to make it more user friendly. I kept overwriting people when I mean to append them.

But, no doubt, that's just the beta part - and I'm sure they'll improve it from here.

Thanks to Steve Jobs for pointing out the site. I continue to get quite a few laughs out of Steve Job's fake diary, so check it out if you haven't.

Tuesday, May 08, 2007

Programming Wind Sprints

Project Euler is a chance to do some programming wind sprints.

There are plenty of problems to choose from, and they all require you to puzzle through some sort of tricky question. I like how the questions are worded, and include an example answer.

I spent 20 minutes working through this one:

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest number that is evenly divisible by all of the numbers from 1 to 20?

I worked out a solution in JavaScript that solved the 1 to 10 version, but failed on 1 to 20 (in other words, it wasn't a solution at all). I gave up because it was way past my bed time.

Like wind sprints, it left me feeling out of shape and in need of more exercise.

Found Items - Business Cards, Photos, Check book, Oh My

Some gems Shira and I found while cleaning out our Project Room...

I got to watch my progression from senior software engineer to manager of middle-tier systems (same thought today as back then -- what the heck does that mean?). I must have found 100 business cards in my old brief case. I have no idea what I was planning to do with them all, but if I ever needed to distribute 100 of them in one sitting, I was good to go.

Guess how old Shira and I were in these photos?

They were both taken in 1996 - I was a sophomore in College. Yikes, even I think I look young. And Shira looks exactly the same as she does today.

And look what I found here - my very first, and last, meaningful checkbook! I had it for one summer in 1997. The only checks written (6 of them) were to my Mom to pay her back for putting Shira's engagement ring on her Visa card.

After that summer I got married, and haven't seen, much less had, a check book of my own.

And here's a real collector's item - an Amazing Media Yo-Yo. It's one thing to have a few shirts lying around, or a borrowed chair - but quite another to have one of the official Yo-Yo's. If Amazing Media had made it big, no doubt this Yo-Yo would go for thousands on eBay or be prominently featured in a special display case in the lobby. But, alas, things didn't go that direction, and it wound up at the bottom of a pile in our project room.

Yiddish Decoder

Apparently, on my most recent conference call I used the phrase spiel in the typical Yiddish sense.

The only problem is, my Ukrainian, Ethiopian, Chinese, Indian and Arkansasian, team mates along with the rest of the organization are a bit rusty when it comes to Yiddish.

So here's a handy list that you can use to decode what I'm saying.

So, next time I say:

Oy! That code was somewhere between dreck and chazerai. What meshuggeneh schlimazel wrote it?! The last thing we need is more schmutz in our source tree to schlep around.

you'll know exactly what I mean.

Monday, May 07, 2007

Not Funny Because It's True

I read this op-ed in The Onion and kept waiting to laugh. Only I didn't, because it hit too close to home.

The article, entitled "If Someone Wanted To Publish My Blog Entries For Money, I Wouldn't Say No" contains quotes like this one:

The No. 1 rule of my blog is that there are no rules. I write about everything from movies I've seen to crazy observations that just pop into my head about Starbucks. And sometimes I'll just write, "Had a pretty boring day today," take a picture of myself eating cereal for dinner, and call it a night. It's a web log, people. I'm not striving to be a great essayist, but if by chance some amazing commentary flows out of my keyboard, so be it. I don't write my blog to entertain anyone else, especially not some uptight Esquire editor. But if an Esquire editor is crazy about my work, and wants to run a three-page spread on my hilarious reviews of horrible movies, who am I to dismiss it out of hand?

Man, he's summing up my blog. That can't be good.

Hassle Me

For those of you who don't have a wife, here's a useful site: hassleme.co.uk.

I'd play with the site, but I can't think of a single thing to try that isn't already setup as a reminder in my sidekick or by Shira.

Still, one day I may think of something...

Needs vs Wants

I suppose a book on what a husband needs from a wife could reasonably be around a hundred pages.

I think the book on what a husband wants could probably be distributed as a pamphlet.

--Ben

Sunday, May 06, 2007

Most Creative Shopping in Washington DC

Today Shira and I went shopping at one of our favorite locations - the Torpedo Factory in Alexandria, VA.

The Torpedo Factory gives local artists access to studio space and an opportunity to sell their goods. It's the kind of shopping that includes both excellent finds and a warm-and-fuzzy feeling of supporting the local community.

It's a must see if you make it to the DC area.

Here's one of the artists hard at work making art:

Our favorite items tend to be pottery, which all look amazing, if you ask me.

OK, not everything they have there is something you'd want to bring home. But hey, it's art.

Product Of The Day: Trump Marker

This wooden cube may look like nothing special, but check out its claims: Keep Friends Longer and Avoid Family Fights.

That's one powerful cube.

--Ben

Mind Bending JavaScript

Tonight I discovered Flapjax - which is functional reactive programming brought to your web browser.

I've dabbled with FRP before with FrTime, but because the examples seemed more desktop application oriented, I didn't think I'd actually get a chance to use it. But, with Flapjax, you can have the features of FRP right in the comfort of your own browser. Now this could get useful.

OK, so what the heck is FRP? It's probably best shown with an example:

<p>
The time is {! timer_b(100) !}.
</p>

You should be thinking, oh that's nothing special. That's simply invoking the function timer_b, whatever that is. And you would be right. Except, here's the cool thing, as the time changes, the screen automagically updates. In other words, you write code as though you were dealing with a frozen time, yet the system continues to update as time passes. I know, it's funky stuff. Try out the running code to see what I mean.

This gets really impressive when you see how they mixed in code with CSS:

<div id="themouse"
  style={! {color: '#FFFFFF', 
            backgroundColor: '#000000',
            position: 'absolute',
            left: mouseLeft_b(document),
            top: mouseTop_b(document),
            padding: '10px'} !}>
the mouse
</div>

Most of the above example is basic HTML. But, check out the values of top and left. They are based on the value of mouseLeft_b and mouseTop_b.

As you move the mouse around, these values automatically update and the position of the HTML block changes. As I said, impressive stuff. Check out the running demo here.

And what does this all have to with JavaScript? As you can guess, Flapjax is actually implemented in terms of JavaScript and can even be written completely in JavaScript.

The thing that boggles my mind is just how little code needed to be written to express these relatively complex actions. And anything I can do to write less code is worth investigating.

Friday, May 04, 2007

What is Computer Science?

Computer Science - it's not about computers, it's not about science. Discuss.

The guy in the video actually knows what he's talking about - he's written one of the most respected books on the topics of programming. Which, naturally, every programmer should read and grok. (Hmmm, aren't I into giving advice today?)

Update: Here's another video on the topic of what makes computer science (and programing) so valuable.

Lessons from Spam - From Brute Force to Statistics

After reading Statistics Hacks I've been thinking of ways I can apply those lessons. I then came across this discussion of spam filtering, which is problem that has been nearly successfully beat thanks to a statistics solution.

All this led me back to the classic article by Paul Graham: A Plan for Spam. In it, Paul takes you on a journey from his attempt to solve his spam woes with a brute force solution to a statistical one.

Now that I have a bit more knowledge on the topic - all I can say is, wow. Every programmer should read this and try to grok it.

There are problems out there that you will simply bang your head against, and throw your arms up saying they can't be solved. And then it will hit you, if you provide a statistical solution, that may just be good enough.

As programmers, we love brute force - but there are other ways.

Thursday, May 03, 2007

In Deep Thought

Here's part of the team puzzling over the classic Monty Hall Problem.

I think Karun remains unconvinced. I read about this problem in Statistics Hacks, which is proof enough for me that the presented solution is right. After all, if it's printed in a book, it must be right. Correct?

--Ben

Wednesday, May 02, 2007

How long was that run? Gmaps Pedometer

Today, at the end of my run, I started to wonder how long the route had been. Was it an impressive 10 miles, like I felt it was? Or a depressing 2 miles that shows just how out of shape I am.

Naturally, I turned to Google to find out the answer - and it turns out that I ran respectable 5.0364 miles. I know this thanks to Gmaps Pedometer.

Gmaps Pedometer makes it really easy to sketch out your route, and see the distance you traveled. It also allows you to save it as a link. For example, to see my running route tonight, you can visit this link.

The site allows you to export the route as a series of way points, perfect for plugging into a GPS. Through a bit of web gymnastics, you can even get the map embedded on your blog, like below (thanks to the very cool GPSVisualizer site, and the handy GMap to GPX tool site).

Whether you are planning your next cross country hike, or just figuring out how long the schlep to shul will be in some foreign town - Gmaps Pedometer seems like a handy site to know about.

Tuesday, May 01, 2007

AOL Music Video Search

I'm really impressed with AOL's Music Video search. For example, searches for country music artists returned lots of results.

Here are two classic country songs, with most excellent videos. Try watching them, and tell me you don't just have a bit more respect for country music.

I can't seem to get them to play in Firefox - but trust me, they are worth opening IE for.