They sell Yogo Sapphires - a Montana specialty.
--Ben
They sell Yogo Sapphires - a Montana specialty.
--Ben
Did I mention Bozeman is beatiful? Well, as you can see, it is. And of course, the photo doesn't do the area justice.
Actually, that photo is from yesterday. Today, it's cloudy and rainy. Hopefully, the weather will improve. Regardless, the photo above is how I'd like to remember my trip.
Lunch today was at the Old Chicago restaurant. I have to say, it was very good. Though, I'm a sucker for Chicago style pizza crust, which I think they did well. The free WiFi didn't hurt either.
One of my favorite talks on computer science - it's Gerald Sussman's telling us what he thinks computer science hasgiven to the world. While I may not agree with everything he has to say, I think he's on the right track.
If nothing else, Gerald is always an entertaining speaker.
Spending a few days in adorable Bozeman, Montana, on our way to Yellow Stone.
A few comments along the way...
1. Wow - what a view! The scene with the airplane and perfect snow capped mountains is what you see as you you leave the plane, having just landed in Bozeman.
2. Flew Northwest. The only think resembling a perks was that they give you a full can of soda and your own seat (no snacks, though). I wonder which perk they'll phase out next?
3. Had a layover in St. Paul, MN. That airport has to have some sort of record for taking up the most space and yet being the least busy. The moving walkways seem to go on for miles and miles.
4. A bear eating fish as a wall decoration. Only in a Minnesota airport. Gotta love it.
So far, this place is a winner.
--Ben
I wanted to get a better understanding of a little Flash app I came across today, and though the best way to do so would be to peek at the ActionScript. For this, I needed a decompiler.
In the past, I've used Eltima's free SWF decompiler, but was always frustrated at the limitations it brought with it. I did some more poking around and found Flare. Flare is free, and does one thing and one thing well, extract ActionScript from a .swf.
Flare couldn't be easier to use, right click on the file and select Decompile - a moment later a .flr file is generated. Open this sucker up in a text editor, and poof, you can see the ActionScript.
That's my kind of UI.
Definitely worth a look if you are doing Flash stuff.
Today Shira and I had the pleasure of watching Matt and Michelle get hitched. I know Michelle from my shul, and it was great that we could all be there to celebrate this wonderful simcha.
My friend Joshua did the wedding rings, and they've gotten rave reviews by all present. If you're looking for custom jewelry (Jewish or otherwise), he's the guy to contact.
We wish Matt and Michelle a life of happiness and joy!
I'm thinking I should check out STklos. It has both "easy connection to the GTK+ Toolkit" and "an efficient and powerful object system based on CLOS."
I wonder if I could use it to put together prettier apps than MrEd?
Thanks to Grant for highlighting it.
My standard way to deal with smelly running shoes is by leaving them on
the porch. Sure the neighbors, visitors and mail man just love that.
Thanks for the tip Dave!
--Ben
Until I finally nail picking out colors, I'm going to be on the lookout for any color related resources that can help my plight.
Today I found the ColorSchemer Gallery.
It is what the name suggests - thousands of color combinations, named and tagged. Should be a great source of inspiration.
Whenever I create an admin section of a site, I like to pick a fairly random color scheme to play with. My theory being that I might surprise myself with what looks good. Usually, the results are pretty hideous, but of course, it's the admin section so who cares.
Perhaps next time I'll pick a random page of the gallery and "force" myself to use one of the schemes.
In fact, here's a bookmarklet to do just that:
I needed a whole bunch of sample last names for some bogus data for an app I'm working on. Thankfully, we have Google, and of course, this information is just a query away.
I quickly found the Top 1000 most common surnames in the US (as of the 1990 census).
This should be exactly what I need.
Little known fact - Simon is a more common last name than Frank and Clayton. Not to mention Lloyd and Boone. Heck, we just barely beat out Waters.
As a bonus, here's a little PLT-Scheme app I wrote up to grab and fix the case on the names. No claim that it's especially efficient or compact, it just is.
(module name-grabber mzscheme
(require (lib "url.ss" "net")
(prefix l: (lib "1.ss" "srfi"))
(prefix s: (lib "13.ss" "srfi"))
(planet "sxml.ss" ("lizorkin" "sxml.plt" 1 4))
(planet "htmlprag.ss" ("neil" "htmlprag.plt" 1 3))
(lib "26.ss" "srfi"))
(provide get-names)
(define (fix-case word)
(string-append (string-upcase (substring word 0 1))
(string-downcase (substring word 1))))
(define (get-names)
(let* ((url (string->url "http://names.mongabay.com/most_common_surnames.htm"))
(in-port (get-pure-port url))
(doc (html->sxml in-port)))
(close-input-port in-port)
(let ((name-rows ((sxpath '("//table[@style = 'boldtable']/tr")) doc)))
(l:drop (map (lambda (row)
(let ((cols ((sxpath '(// td *text*)) row)))
(if (not (null? cols))
(fix-case (l:first cols))
(void))))
name-rows) 1))))
)
There's plenty of crud on YouTube.com, but it turns out, there's even some fun kids oriented stuff. Case in point, this collection of Dr Seuss videos I stumbled on while searching for some place holder content.
Here's one to get you started:
Careful - you're only a click away from plenty of non-kid friendly videos. So, I'd only try this one supervised.
Usually, when Shira comes home from work, and I emerge from my laptop - we scrounge around looking for something resembling dinner. But not with my brother Dave here. He made an impressive spread of turkey burgers (tasty, and good for us), corn and other fix'ins.
Man, I could get used to this whole personal chef thing. Too bad he's going to be starting a job and moving out.
But while we got him, I'll be enjoying it.
My preferred way to generate PDFs with PHP is by using the FPDF Library. The library is: free, doesn't require any add ons to run, has a terrific set of tutorials and a clear user manual. It turned out to be a great way to generate official looking PDF documents with a minimum of fuss.
Today, I needed to generate a specific chart type, and ran into a problem using FPDF. Turns out, FPDF doesn't support arbitrarily filled polygon shapes - only rectangles. D'oh.
This, however, turned out to be a great excuse to dig a little deeper into both FPDF and the PDF standard itself. From a review of the FPDF source code, I realized that most of what it was doing was emitting the right PDF operators into a text stream and letting the PDF viewer worry about the details.
I busted out the old PDF Reference Manual and learned that the operators it used were very similar to PostScript. If you've never looked into PostScript, it's a wonderfully fun language to learn.
Using my knowledge of PostScript, and reviewing the source code of FPDF I was able to hack the FPDF source to include:
function Poly($points, $close = false, $style = '') {
if($style == 'F') {
$op = 'f';
} else if($style == 'FD' || $style == 'DF') {
$op = 'B';
} else {
$op = 'S';
}
$buffer = sprintf("%.2f %.2f m\n", $points[0][0], $this->h - $points[0][1]);
for($i = 1; $i <>h - $points[$i][1]);
}
if($close) {
$buffer .= " h\n";
}
$buffer .= " $op\n";
$this->_out($buffer);
}
Here's a sample usage:
require_once('../shared/lib/fpdf/fpdf.php');
$inch = 72;
$fpdf = new FPDF('L','pt','letter');
$fpdf->SetDrawColor(0xA4, 0x17, 0x17);
$fpdf->SetFillColor(0x63, 0x8F, 0xC9);
$fpdf->SetFont('Helvetica', '', 12);
$fpdf->AddPage();
$fpdf->Text($inch, $inch, "Test of the Poly(...) method:");
$fpdf->SetXY($inch, 4 * $inch);
// Build up a set of points
$points = array();
$points[] = array($inch, 4 * $inch);
for($x = 1; $x <>Poly($points, true, 'FD');
$fpdf->Output();
And here's how it looks in the PDF viewer:
And then there's the way I've adopted: see pretty flowers at Home Depot, buy, stick in ground, get wet. Repeat.
What's the worst that could possibly happen? They die. Well, chances are, they were going to die anyway. Now I've just invested a whole lot less effort into the process.
I don't think I'd use this approach for running a business, or writing code - but I think it'll work fine for gardening.
--Ben
Patrick, our plumber, couldn't have been nicer. He figured out the problem was with our sewer line in our second floor. He used pretty basic debugging technqiues to do this.
At the end of the day, he needed to use his big 'ol electric snake to degunk our sewer line. I felt a little better that he didn't use equipment I owned or could have easily bought. Turns out, it was worth calling in the big guns.
It's so easy to take your home's plumbing for granted - but today I was reminded that every flush and every shower is a little miracle in and of itself.
--Ben
I've shut the water off in the house, and Shira grabbed the phone book
to call a plumber.
Memorial day, can you think of a worse day to have to call a plumber? I
can't.
Wish us luck with this one...
--Ben
Here's another entertianing site I just stumbled upon: postcardsfromyomomma.com.
It's a glimpse into what mom's are writing in e-mail these days. Got to say, some of them felt awfully familiar.
Actually, I consider myself quite lucky - not only does my mom do e-mail, but she reads this blog (hi Mom!) and keeps in touch via text messaging.
Man, if I could convince her to start twittering...that'd be precious.
What the cell phone companies really need to offer is a way to record all your incoming and outgoing SMSs and archive them for you. That way, you could look back in a few years and read some of the chatter you had between family and friends. Most of it would probably be junk, but I'm some of it would be precious. It would be very much like a private, time delayed, version of twitter. Hmmm, I'm not sure that's a good thing.
Regardless, lots of fun stuff here.
Thanks to Gavin for blogging about the site.
Next move, I should make sure to bring:
. Tools for taking furniture apart
. Pads or blankets for padding
. Beer
. Snacks - lots of snacks
. Water and Soda
. A measuring tape
. Tape & rope
. Ziploc bags for assorted screws, nuts from taking things apart
. A couple of door stops
. Permanent markers
Did I miss anything?
Update: It's also a good idea to bring a Dry Erase marker - this is an easy way to mark up glass items (like glass shelves), to say what they belong to.
Special thanks to Shaun of StopPoliticalCalls.org for this time waster entertaining game. I give you: The Age Project.
Yet another thing for me not be good at, but it is oddly fun.
I'm still a big fan of online-stopwatch.com. Yesterday, I wanted a little window with the stopwatch running that wasn't too obtrusive. So, I visited the full screen online stopwatch in a new browser window, and then resized the window so it was tiny, but big enough that I could read the dial. (The photo below is actual size)
I liked the effect enough that I decided I would rig up a bookmarklet so I could get a tiny stopwatch at a click of a button.
Here's what I came up with:
Just drag the link above to your link toolbar, or right mouse click on it and say "Add To Favorites." Either way, you should now one click access to a little stopwatch.
It is, in fact, the user interface from hell.
For the life of me, I can't figure out how to disable the alarm from going off. If you plug in the alarm, set it to alarm at 8am, as far as I can tell, for the rest of its life, it will do so.
And every time it does this (go off, when I don't want it to) I spend 20 minutes pressing different combinations of buttons. I think, if I hold down 'cancel' and 'sleep' at the same time, it'll work. It never does. I always give up and pull the plug.
It turns out, innovative user experiences aren't always a good thing. If this clock used the same approach every other clock radio had used, it would be just fine.
What on Earth were the designers of this clock thinking? And did they ever test it out first?
Moral of the story: even the simplest user experience can be broken if you aren't careful.
--Ben
Update: Specifics about this device:
Brand: GE Model: 7-4837B Frustration Level: Very High
Thanks Nick for suggesting I provide this info.
I needed a clean way to display a handful of photos in a new app I'm working on. In the past, I've rigged up a simple click on the thumbnail to load it into the main image area slideshow in JavaScript. And it works OK, but I thought I'd look for something a bit sexier this time.
Yesterday, I found simpleviewer, and today I dropped it in place.
I'm actually quite pleased with it. I like it, because:
fo.addVariable("xmlDataPath", "gallerydata.xml");
I pointed the xmlDataPath to a PHP script which dynamically generates the gallery:
fo.addVariable("xmlDataPath", "gallery_gen.php?id=298848&xcache=1");
There seem to be quite a few other options out there for components like this - but so far, this one was the most straightforward to use. It's certainly worth a look.
I get it home and had trouble getting it all to work. I finally read
the instructions and what do you know, it all sync'ed up great.
It's now 11:15am and I have a call starting any second. My client IMs
me and says: "ready to talk?"
Using my ultimate keyboard setup, I type back: "all st"
Huh? I then type "ys."
Crap.
The "e" key is broken. ARGH!
That's what I get for cheaping out, I suppose.
Now it's back to Microcenter for another keyboard purchase. Murphy,
you're killing me here.
--Ben
Lately, when my clients have been asking me where they should host their smaller web apps, I've been sending them to a2hosting.com.
Why?
The highly discounted price won't work for everyone - as they limit you to a single database. However, for about $8.00 month, you get unlimited databases, shell access and lots of other goodies - which probably covers the bases for most small web apps and websites.
I have yet to try them out for a bigger app that requires either full server access or multiple servers, so I can't vouch for that sort of configuration. But for smaller apps, I find that my clients are quite satisfied with them.
Thanks to Jason, of TextCall fame, for searching them out and using them as his hosting provider.
Dave has a multitude of skills - and one of his primary ones that we'll
be putting to use is his grilling ability. I have it on good authority
this boy knows how to do some serious grilling.
So much for microwaved soy burgers - for the immediate future it's real
(and tasty!) meat.
Dave's cooking for the first time for us for tonight, so we're really
putting him the test. So far he's playing the part spot on.
Welcome to the household Dave, we're psyched to have you with us! (And
not just for dietary reasons.)
--Ben
Here's something useful I just learned: William Strunk and E.B. White's classic Elements Of Style is available in full text form online here.
It even looks great formatted on my Sidekick Slide:
Joyous!
(That's me practicing the Omit Needless Words recommendation)
This weekend I had a chance to read the paper Incremental Programming with Extensible Decisions by Doug Orleans. In it, it discusses a prototype framework that implements a variant of AOP and Predicate Dispatching.
The paper was though provoking and definitely convinced me that I need to be looking into trying to AOP or related approaches in my production work. But what I found really interesting, and what's been on my mind for the last few days is in the very first sentence of the introduction:
Incremental programming is defined by Cook and Palsberg as the construction of new program components by specifying how they differ from existing components
Doug goes on to explain that OOP fits the definition of incremental programming:
Object-oriented programming (OOP) languages typically support incremental programming with inheritance and dynamic dispatch features. Whenever a message is sent, a decision occurs, but the branches of the decision can be specified in separate components,
I suppose this is all fairly obvious in retrospect, but I tend to think of OO as more of a packing mechanism. If I want an authentication framework I could create it procedurally by outlining various functions, and passing the state in explicitly. Such as:
$data = lookup_user($username);
if(is_authenticated($data, $some_password)) { ... }
...
If I wanted to do this in OO, I could bundle the state and functionality together. Such as:
$obj = new AuthModule($username);
if($obj->is_authenticated()) { ... }
...
Obviously, there are pros and cons to using OO or procedural approaches, and of course, at some level, they are equivalent.
Doug's comments suggest that OO can be more than organizational technique, or a helpful modeling tool. Imagine if you built a system completely by bending and shmooshing together existing components. Inheritance based OO isn't powerful alone enough to do this, but with AOP and other approaches, perhaps you could.
The goal of a programming language and frameworks, I think, is pretty simple: allow you to get a job done by writing as little code as possible. Perhaps, incremental programming is a way to do that.
It would be an interesting exercise to try to develop a fairly sophisticated application built purely incrementally. Of course, you'd need to define the ground rules of what that would mean. But once you had the rules of the game established, it would be interesting to see what came from it.
Here's me and Dave's graduate school buddies. What a fun group.
--Ben
David roped, uh I mean, recommended I join him for the Lilac 5k race. Right now I'm dressed in my $10 shoes. I paid my $20 entry fee, and I'm trying not to get psyced out by all these runners in coordinated outfits.
I'm going for slow and steady and not fast and passed out.
Wish me luck.
-Ben
Then it hit me - I didn't bring home sneakers.
No problem, we hit the Wal-Mart for some quick shopping.
I picked up a pair of knock off running shoes for, get this, $10.00.
Amazing. No wonder Wal-Mart is doing so well in this economy - people
can actually afford the stuff here.
Best of all, if I run poory tomorrow, I can always blame the shoes.
--Ben
He's either a major player, or he really is graduating.
Thoughts?
--Ben
This is just too easy.
--Ben
"You call this the phone of the future? Inside the quest to build the
ultimate music phone and why Apple fell short?"
The article talks about the Rockr - Apple's first pass at an iPod +
phone.
I think there are some great lessons from this:
- Even Apple can produce crap
- No company is guaranteed success - just because they revplutionized
the mobile music world, didn't give them a free ride in the phone
world.
- Just because your first product was a flop isn't an excuse to not try
again
- People have incredibly short memories - with all the iPhone hype, was
the Rockr even mentioned?
- When you screw up, at least learn from your mistakes. I'd say Apple
did.
Hard to believe they went from that headline to essentially
revolutionizing the mobile platform.
--Ben
With all those moving parts, what could possibly go wrong?
Oh, let me count the ways.
Actually, I'm fairly impressed that I can (in theory) use public
transportation to get from my doorstep to BWI airport with a minimum of
fuss.
Hmmm, maybe I should hold off on celebrating this accomplishment till
*after* I'm in Rochester.
--Ben
I finally did it. Shira will be thrilled. I recycled 10 years of dead computer hardware - from Shira's first college computer (which had the iMac form factor years before Apple invented it), to gigantic Gateway towers (remember those? What a terrible idea those were) to obscure SUN hardware. All of it was delivered to the Arlington Household HazMat Program.
Check out this overhead view of all the crap I got rid of:
This probably raises a few good questions...
Here are some reasons: (1) I Run Linux - Linux does well on hold hardware. Have a slow PC that can't run windows lying around? You can always throw Linux on it. Or, you can say that you're going to throw Linux on it and never do. (2) I worked for a startup that went under - when a startup starts to die, inevitably, it will move to a smaller location. When this happens, the System Administrators will gladly give away free crap rather than move it themselves. This is a fun and effective way to inherit obscure, pricey hardware. (3) I can never turn down a good deal - when someone is offering free computer hardware, who can say no?
Some of it is pure laziness. But, honestly, I'd love to have played with the hardware I just chucked. I just haven't found time. If I haven't had time in the last 10 years, I doubt I'll have time any time soon.
This was the big surprise - not at all! Arlington has a terrific program to help their residents get rid of stuff like this. I called (703-228-6832) and easily made an appointment. A guy met me at the drop-off point and helped me unload my car. He couldn't have been nicer. He explained to me that all the recycling happens domestically and that the older hardware I was giving to him was especially rich in precious metals - so they were happen to take it. The service is free accept for the monitors I recycled - those were $15.00 a piece. He explained to me that the fee covers the labor it takes to disassemble and deal with all the hazardous stuff in a monitor. And besides, he said, we are a water treatment facility - we can't be polluting the water by taking short-cuts, can we?
The stuff I recycled was absolutely ancient, and much of it barely working. On the working stuff, the cost of shipping alone makes it a crazy thought to try to sell. I could have put an ad in craiglist, but even then, there would be more hassle than just recycling it. If folks want crappy hardware, there's plenty on eBay.
Not at all. I didn't recycle any of the half working laptops I have. So there's still plenty to tinker with if I ever do get the time.
So, with that task done, I think we can go to the next stage of the plan - fill the hardware void with new hardware. Hmmm, time to go shopping...
I just got an Evite to Arrow Bicycle's Grand Opening. While it came from a friend of mine, it was clearly advertising a business and not some weekend shindig. Inn this case, my friend is buddies with the store owners, and so she's helping them to spread the word.
My first thought was, of course, what an interesting guerrilla marketing technique* - as it mixes the personal invite with a definite marketing message.
In this case, the marketing flavor of the Evite actually worked - it was well done and quite clever. The Evite is informative and really emphasizes the event (the grand opening) rather than just the business. Only as a footnote does it include If you can't join us this weekend, keep us in mind for all your bicycling needs! - which is more than reasonable.
I also like the that the Evite includes responses from people who said they were coming. These turn out to be little testimonials, bits of humor and encouragement - all good things to have associated with your business.
Hmmm, wonder if I could use Evite to do an online launch party for apps my customers release...
Oh, if you're a biker here's the info to attend - sounds like it'll be a great time:
ARROW Bicycle's Grand Opening May 17th & 18th 10% off store wide (in stock items only), Prizes, and Great Times All Weekend Long! Location: ARROW bicycle 5108 Baltimore Ave., Hyattsville, MD 20781
*I doubt my friend thinks of this as marketing - that's just me putting my small business goggles on. Sorry Caron if I'm taking this evite too seriously.
I needed to convert an icon from one color to another*. I couldn't use the simple bucket fill tool The Gimp has (at least, I don't think I can) because the icon contained a variety of shades of color.
A little poking around The Gimp manual brought me to Rotate Colors. Here's the screen that pops up when you select that option:
Turns out to be a pretty intuitive UI - I just dragged around the various selectors until I had the color substitutions I needed. Here's the finished product :
Have to say, The Gimp saves the day again. This can't be the only way to get this effect - what other ways are there to do this?
Thanks to freeiconsweb.com for providing a sample icon I could plug into this example.
Today I had my first successful attempt at building a site logo. I'm still not convinced that it'll be the logo permanently, but it's a good start.
The secret turned out to be istockphoto.com and their Illustration Search ability.
My client suggested an object he wanted in the logo, like a Dump Truck and I did a search for it in the Illustration section. The results included a variety of options that I could drop in as a simple logo.
Also, I discovered that istockphoto.com has plenty of icons too, which are always a pain to find.
Have to say, I really think their Illustration search is going to come in handy.
Rulesofthumb.org is a fun site that gives you handy shortcuts you can use. Some are setup like classic rules of thumb:
Ten people will raise the temperature of a medium-size room one degree per hour.
Others are a bit more creative:
As a rule of thumb, the more satellite TV dishes per row home in a given block, the more dangerous that block is.
Fun and useful stuff.
Also, it's worth noting that the popular story about the phrase Rule Of Thumb coming from "maximum thickness of a stick with which it was permissible for a man to beat his wife" is false:
The term is thought to originate with wood workers who used the length of their thumbs rather than rulers for measuring things, cementing its modern use as an inaccurate, but reliable and convenient standard.
It is often claimed that the term originally referred to a law that limited the maximum thickness of a stick with which it was permissible for a man to beat his wife, but this has been fully discredited as a hoax.
It's hard to believe that just a short six months ago today, I started doing Ideas2Executables full time.
Wow, what an absolute adventure it's been.
Before I started, I made a mental list of reasons why doing i2x was a no brainer:
Overall, this has been awesome. At least once a day I turn to Shira and say - "please don't make me get a real job!"
So, if all goes to plan, there'll be many, many, many months more of Ideas2Executables to come. Thanks so very much to my customers who made this happen. Without you guys, I'd have a commute and no doubt a job that requires I get out of my pajamas.
While pondering my Mom on this Mother's Day it occurred to me that long before I was reading business books and working at start-ups I was witnessing her successfully run a small business. My Mom was an Avon Lady for years (20'ish?) and for many of those years was the top salesperson in her district. Turns out, she was an excellent teacher in what it takes to run a business. And now, I'm using those lessons every day in my own business.
Here are 5 lessons she taught me:
Thanks Mom - not only for being a great Mom and doing all the things a great Mom should, but for teaching me how to be a business mensch. If I have success with i2x, there's no doubt a big chunk of that is because of all the lessons you taught me.
--Ben
I needed to test out some work just completed, and to do so, I needed to run some files against a process. Problem is, there are 1000 files to choose from, and I only want to test a handful.
But which handful? Ideally, it would be random.
So here's my quick shell hack to give me 15 random files from a given directory:
ls | while read x; do echo "`expr $RANDOM % 1000`:$x"; done \
| sort -n| sed 's/[0-9]*://' | head -15
This works by:
Of course, this isn't efficient - but it doesn't need to be. Heck, it took longer to write up the blog post describing it, then it did to actually write the code.
I so love Unix. And I'm running this under cygwin on a Windows box. See, there's no excuse for not using Unix.
A client of mine wanted to include an image map in his RSS feed. So, I added in the following code:
<map name="foo">
<area shape="rect" href="..." coords="1,2,367,28"/>
<area shape="rect" href="..." coords="384,10,453,23"/>
</map>
<img usemap="foo" border="0" src="..."/>
This worked fine in IE, and it worked fine in a regular HTML page in Firefox - but for some reason, the image map wasn't clickable in the preview page of the feed in Firefox. The problem turned out to be a missing id attribute. I changed the above to:
<map name="foo" id="foo">
<area shape="rect" href="..." coords="1,2,367,28"/>
<area shape="rect" href="..." coords="384,10,453,23"/>
</map>
<img usemap="foo" border="0" src="..."/>
And I was good to go.
Caption: Either it's a mixed marriage or someone really hates to be
wrong.
--Ben
If you use MySQL Foreign Keys long enough, eventually you'll get the error:
MySQL Error Number 1005 Can’t create table ‘.\XXX\YYY.frm’ (errno: 150)
I fairly quickly learned that this error specifically means there's a problem with your foreign key constraint. The problem is, this is a totally generic error message - there could be any number of things wrong , and this message won't help you figure out what the problem is. (Like when you wife you gives you That Look, yet you have no idea which of the dozens of things you may or may not have done wrong, are the cause of said look.)
While trying to debug an especially tricky case of the Error Number 1005's (the problem: the ID type in the foreign table was INT, the constraint tried to match it up to a BIGINT column - d'oh!) - I learned the following:
If MySQL reports an error number 1005 from a CREATE TABLE statement, and the error message refers to errno 150, table creation failed because a foreign key constraint was not correctly formed. Similarly, if an ALTER TABLE fails and it refers to errno 150, that means a foreign key definition would be incorrectly formed for the altered table. You can use SHOW ENGINE INNODB STATUS to display a detailed explanation of the most recent InnoDB foreign key error in the server.
So, to figure out my issue, I just needed to run:
SHOW ENGINE INNODB STATUS
Hmmm, reading the manual - that's just crazy enough to work!
I did some more work on a coaching related website today, and was again inspired to some Google searching for some PMA.
The site called for the inclusion of the following quote:
"When a man sets out to do something great in the world, a thousand demons are released from hell to try to stop him." - Old Hindu adage
This reminded me of a more PMA oriented quote from the Talmud:
Every blade of grass has its angel that bends over it and whispers, "Grow, grow."
I happen to the like more positive one myself, but that may just be me.
This quote is one of many listed on the WikiQuote page for The Talmud. Some other of my favorites:
Despise no man and consider nothing impossible, for there is no man who does not have his hour and there is no thing that does not have its place.
Examine the contents, not the bottle.
He who loves money will not be satisfied with money.
If silence be good for the wise, how much better for fools.
If one man says to thee, "Thou art a donkey", pay no heed. If two speak thus, purchase a saddle.
Lots more here.
A while back I discovered Firefox Form Saver - which, as the name suggests, automagically fills out a web form for you once you've filled it out previously.
To say that it's an incredible time saver is an understatement.
But, I've mostly switched to IE for web development, and while I searched around, I couldn't find an equivalent plugin for IE.
That is, until last night.
Turns out, it was under my nose the whole time. The super useful and well implemented IE7Pro plugin has just the functionality I'm looking for. It's too bad they don't make more noise about it, as it's one slick feature.
To use the form saver, install latest IE7Pro Plugin. Visit a form of your choice and hit:
Control + [
Name the form and save it. Now, anytime you need to reload the form for that page, hit:
Control + ]
Couldn't be easier and couldn't be more useful.
Personally, I'd think the last place learn about how to get your message published on the cheap would be from a guy who gets a $20 million paycheck. But, alas, I was wrong.
Consider Tom Hanks' endorsement of Barack Obama.
Did he do it by holding some sort of press conference? Or how about some elaborate PR campaign? Did he hire a design firm for 10's of thousands of dollars to put together just the right website to match his every nuance, and announce it there? Nope, nope and nope.
He did the very same thing you or I could do - he shot a simple home video, with a script he wrote himself and then posted it on his MySpace page. And what's best of all, is that it totally works.
Heck, I didn't even know a MySpace page could be so effective - but he's managed to carve himself out a nice little niche there.
I think this is a wonderful example of how we have remarkable (free!) tools at our disposal. Think about it, you and Tom Hanks have the same publishing power? Awesome.
I think this, along with Brendan's work show that you don't need a big budget to have a big impact.
So my new monitor has been acting up these last few days. I'd plug it into my Dell Windows Vista laptop and it would do this whole flashing thing - go black, give me a glimpse of the screen - go black again. It would repeat this till I finally yanked the cord.
Sometimes it worked. It always annoyed me.
So I decided to do something about it. I started off by calling Acer - the maker of the monitor. That wasn't very useful - the kid on the phone was nice, but all he basically did was blame Dell.
So I finally called Dell. Tyler, my support rep, couldn't have been nicer and more effective. He did not, as I feared, send me back to Acer. Instead, he got a view into my laptop using dellconnect and troubleshot away.
The solution? Update the NVidia driver and the problem resolved itself.
But, better than a single solution, I learned:
While virtually meeting my newest cousin Angus (born just days ago, whoo!) I discovered that his daddy, a real estate agent, has quite an collection of YouTube videos for his business.
People often talk about leveraging video and YouTube for their small businesses, but I've never seen it done so well. Here's a sample of his work, which explains some steps you can take to improve your credit:
There are plenty more, too.
The videos are clean, relatively short, informative and in general, well done. They take an educational tone, without being preachy or too transparently salesly.
If you're interested in finding a real estate agent in Baltimore, give Brendan Cooke a call (remember, he's my cousin - so if he gives you any trouble, you let me know. I'll tell his wife.). If you have a small business, definitely watch these videos for some great inspiration.
Turns out, our projects for today all went off pretty much without a hitch.
One major goal was to tame our out-of-control rosebush - see how we did?
Before:
After:
We also needed to replace the hand rails on our porch, which involved buying new pieces of wood, painting them and fastening them into place. Shira was a trooper here, and pretty much did all the work - from the prep work and painting, to drilling the holes:
There's just something about a woman with power tools. Man, I'm a lucky guy.
And other than getting pricked by the rosebush, there were no casualties. All in all, the projects went better than expected.
We are now loaded up for a Sunday of working on the front of our house.
The plan: new railings for the steps, weed removal in the garden and new
plants.
If we make it through the day with no significant injuries, I'll call it
a success.
Wish us luck!
--Ben
It's official, we like and highly recommend them.
They do the standard sushi well that we normally enjoy, including Shira's typical favorite - Shitaki Mushroom Rolls. But they go beyond that with their stick-to-your ribs tempura fried rolls done up fancier than usual.
I had the smoked salmon tempura roll last night and was very impressed with it. Of course, it's deep fried lox - what's not to love?
Another area they surprised us with was with their side salad. It seems that a side salad in a Japanese restaurant usually consists of two pieces of lettuce, a slice of tomato and yummy ginger dressing. They kept the dressing, but changed the trend by delivering a surprisingly large (OK, normal size, really) salad. Not a huge deal, but yet another sign these guys are different.
Our first visit there, the service was awful. They put us in a remote corner (good) and then promptly forgot about us (bad). Last night's service wasn't great service, but it was totally passable.
The real down side of Endo Sushi is their lack of parking. Though, that didn't keep them from being quite busy last night. Besides, the walk back to the car helped me work off some of that deep fried goodness.
Looking for sushi in Arlington? Check them out.
--Ben
I'm writing this post on Thursday night, but it's not scheduled to show up until Friday morning. Spooky, I know?
Yeah, this was a nice add on by the good folks at Blogger. This should come in especially handy for Blogging while on vacation, Jewish Holidays, etc.
In honor of this disruption of the space time continuum, here's a Back To The Future spoof.
See you in the future!
It's nice to see some signs of life from our garden1. Well, signs of life that don't include weeds. The weeds always seem to be healthy.
This is one of the first flowers of the season from our rosebush. Glad it's back for another season!
1Can you consider a handful of plants thrown in the ground by our contractor a garden? Luckily, we had Teresa help us out to improve matters.