Oct 07

So on my never-ending quest for total mobility and agility as an independent consultant, I’ve figured out how to cut the phone tether for working down in Mexico. Thanks to Skype’s phone bridge service, I’m in Cabo San Lucas right now conducting business as usual, taking phone calls and checking voicemail over a wifi connection on my laptop. The connection here is surprisingly quick and reliable (75kb/sec). Basically, I had some frequent flyer miles saved up and an offer from a buddy to stay at his hotel for $20/night. My laptop has a fully self-contained development environment via Virtual PC and I’ve got all the materials I need to build the extranet for AZ Behavioral Health and all the physical meetings archived as voicememos on my iPod. For a total cost of $50 a day to be able to work from a palapa, I figured I’d be an idiot not to go.

The phone setup is pretty sweet- Skype is voice chat service recently acquired by ebay and it let’s you talk to other people free over the internet. They have a service you can pay for that bridges their system to the public switched telephone network and let’s you handle inbound and outbound phonecalls. I purchased 600min of the skypein/skypeout service for $13 and I now have my Cingular Treo 650 forwarding all my calls to my skype number (a very simple thing to change yourself if you happen to have cingular). If I’m online, the phone rings through skype, I answer it and (other than a minor latency which you’d probably experience anyways on an international call) the caller has no idea I’m talking via my laptop. The call quality is excellent and what’s nice is voicemails show up as timestamped events in skype and you listen to them and can even save them as mp3’s. I did hear a rumor that it’s illegal in Mexico to circumvent their telecommunications system for voice traffic – I have no idea if there’s any truth to that and I’m sure as heck not going to ask a Federale. I could see this phone forwarding technique affording one the ability to backpack around Europe and work just as effectively from the road. Hrmm….

© 2005 Lights Out Production – All Rights Reserved Worldwide

Oct 03

For anyone who uses a software lifecycle process like FLiP to make clickable prototypes and hash out web applications with their clients, I ran into an interesting and frustrating problem today that you might be interested in. I have been using FLiP and specifically Adalon to generate a wireframe and ultimately a clickable prototype of a monsterous extranet application I’m building for Arizona Behavioral Health Corporation. FLiP involves more work up front but it’s really paying dividends in terms of helping us to unearth requirements that we missed in the brainstorm and wireframe phases. I made a mock application that consisted of static HTML pages that will look exactly how the screens appear in the app itself, only all the form controls are dummy controls simply linked to other static pages and don’t actually send any dyamic data. I did this by just href’ing the buttons to the target result pages and it worked great in both IE and Firefox when browsing the files on my laptop’s filesystem (not on a webserver), however when I posted the mock to my production server to demo to the client, I failed to retest the prototype in both IE and FF and only checked FF. Since it had already worked in both on my laptop it seemed like a fair assumption that just checking in one was adequate on the webserver. Apparently IIS 6.0 has this great ummmm error checking feature (ahem, annoyance) that disallows sending form data to staic pages and instead throws the following error:

HTTP Error 405 – The HTTP verb used to access this page is not allowed

The confusing thing is that it only throws this error for IE. I would think an error generated on the server-side would display regardless of the browser and I have no idea why Firefox works fine and IE doesn’t. If it were a real live application I would welcome this type of error since obviously it does no good to send form data to a static page. But for the purposes of my prototype this caused major pain today. It would be nice if there were a setting I could choose in IIS to the effect of “thanks for your concern IIS, but really, just serve my pages and don’t tell me how to write them” but alas, IIS insists on enforcing this error checking. I do know that this is the workaround that finally solved the problem: I had to manually go through each page that had a form on it and do two things:

  1. Change all method=”post” tags to method=”get”
  2. Specify the desired linked page under the form action tag as action=”blahBlahResults.htm”

Unfortunately I had arrived today at ABC to meet with the entire staff and get feedback on the prototype. After I went through it in FF with the CEO, he sent out a staff email and told everyone to check it out. Of course everyone else was on IE and the phone started ringing off the hook with people who couldn’t get in and it took me an hour battling this issue along with learning how to rollback revisions in the Subversion repository using the “reverse merge” technique. Once I wiped the egg off my face though, we made some great progress today and got a lot of good feedback from the actual people that will be using the app. I definitely see the advantage now of using a software lifecycle process like FLiP to uncover features and usability issues before ever writing a line of application code or modeling a database.

© 2005 Lights Out Production – All Rights Reserved Worldwide

Tagged with:
Sep 27

Here’s a quick way to enumerate all the sites hosted from a specific IP address. You are probably aware of the reverse phone lookup which allows you to look up the address associated with a phone number (scary I know, try it on your home line). Well the same type of reverse lookup exists for domain names and IP addresses and it’s called Reverse IP Lookup. It’s generally run from the command line but there are sites that offer a web interface to run the same query.. Using a free service like this one recently mentioned on AZIPA you can feed in a domain name and find the IP and other sites hosted from that same IP. As a complete tangent- before the web-based reverse phone lookup service existed, we would use Pizza Hut of all sources to get an address from a phone number. Believe it or not when you gave them your number in ordering a pizza they would read back your address to verify it! I have no idea if they still do this, but I digress…

A cool trick you can use along with this to simplify a common search such as a whois lookup if you happen to be using the Firefox web browser: add it as a quicksearch. NOTE: the search must work by putting the search terms in the querystring in order for this to work. There are a handful of search services I use regularly and I generally add them to the quicksearches bookmarks folder in Firefox. This saves you the step of actually going to the site to execute the search. These are the steps:

  1. Run a search query
  2. Bookmark the results page (you should see the search terms in the URL)
  3. In Firefox under Bookmarks -> Manage Bookmarks – Drag your bookmarked page to the QuickSearches folder
  4. Right-click on it and do Properties
  5. This is the magic : in the Location field, replace the querystring with the search terms with “%s” and choose a keyword that you can use to trigger this search
  6. Close the bookmark manager and try running your search. I chose the keyword “whois” for this one so in the FF address bar I type “whois 140.99.14.114” and I get back a listing of all my domains. Pretty sweet.

Here’s a screenshot of my quicksearches to show you what it looks like:

© 2005 Lights Out Production – All Rights Reserved Worldwide

Aug 31

I’ve looked through a lot of flash detection scripts and have found none that allow you to do inline flash detection (ie. test the browser and display either a piece of flash or a substitute graphic on the same page without redirecting the user). Flash 8 will supposedly come bundled with scripts to do this but in the meantime I found some javascript code that did the trick. I’ve finally got around to cleaning it up and wrapping the whole thing in a simple custom tag I call FlashIfYouCan. If you want to see it in action you can check my company homepage here (note that it only plays on the first visit and you’ll have to use the replay button after that). Unfortunately I don’t remember where I got the original javascript from or who the author was (it looks like it might have been generated from Dreamweaver because it uses the “MM_” prefix). There were no copyright notices so hopefully it’s cool to pass it along. Big thanks to whoever it was the created the original source. This is the syntax for calling the custom tag:

<cfmodule template=“FlashIfYouCan.cfm”
pathToNonFlashFile=“/images/headerHome_nonFlash.jpg”
pathToFlashFile=“/images/fishheader.swf”
AltTag=“When searching for a technology consultant, you’ll find there are a ton of fish in the sea.”
width=“785”
height=“183”
bgcolor=“##AFAFAF”
usemap=“##imagemap”
flashVersion=“7”>

It lets you specify the minimum version of Flash you require and will allow you to have an imagemap on the static graphic to emulate the flash controls. The only problem I can see with using this method w/ js is that in the unlikely event that the viewer has flash but has disabled javascript, this tag will display a placeholder graphic instead of the swf which the user COULD play. The likeliehood of this scenario seems pretty rare to me though and the value of not having to do the wacky redirect technique outweighs the downside of having a few people that will falsely fail the flash detection.

On another note, the Arizona CFUG had Greg Rewis from Macromedia at Monday’s meeting talking about Studio 8. We had about 75 people attend in person and another 50 via breeze. The archived meeting is here if you missed it- it was a three hour tour of the features in the new Studio. Flash 8 looks promising, they really improved the video codec and the enhancements for doing encoding from within Flash are nice. Honestly, I don’t get very excited about the alphachannels, live dropshadows via actionscript, and designer-centric enhancements. The most powerful addition to me seems like the CSS support in Dreamweaver. Supposedly MACR had a dedicated team working just to ensure that CSS renders correctly in all browsers and in Dreamweaver and the demo proved that they nailed it. I just hope that team got a fat Maui vacation at the end of that process because that sounds like gruelling work. Apparently MACR is en fuego sales-wise w/ Studio 8- they beat their stated goal within 4 days of accepting preorders. Way to go out w/ bang guys!

© 2005 Lights Out Production – All Rights Reserved Worldwide

Tagged with:
Aug 23

I recently finished a book called “Object Technology: A Managers Guide” that my friend Max Porges recommended to me. In all it was a very nice high-level overview of what OO technology is and does. It certainly was not a nuts & bolts, syntax-level book (as the name probably confirms) but I still think it has value for programmers in that it reels in all the relevant concepts in a nice summary. I won’t summarize the content of the book as you can get that from amazon, but one example really gave me an “aha” moment and I wanted to cover that here.

I have always been awed by how UPS can successfully route millions of boxes each day to where they need to be. That feat alone is stunning but add ontop of that all the constraints they deal with limitations like physical volume of the various shipping vessles, the weight limitations on their airplanes, the fluctuating price of gasoline, right down to the changing road and weather conditions and blockages that affect their vehicles – how on earth do they seem to roll with the punches so effortlessly and choose optimal routes for each package? If you think about it, it’s an interesting challenge because there are infinite permutations of how to group the boxes and choose the routes and there may be multiple “right answers.” The amount of engineering that must be involved a system that accomodates this level of complexity and variance from that many unpredictable, real-world circumstances is incredible and I’ve had trouble conceiving of where I would even begin if I had to design such a system. That is until I read the above book… It’s actually a mind-blowingly simple concept made possible via OO design once you consider all the packages objects. Here is the key:

Each box is a greedy, self-serving object operating under freemarket conditions and abiding by a predetermined set of rules and priorities as far as tradeoffs with respect to price/speed/reliability. I think of it in terms of that one reality show that seems to be so popular (The Great Race?) -they give ten couples $100 and tell them each that they need to get themselves from starting point A to destination B in 12 hours and await instructions there. The couples have a ruleset they must abide by (both from the show’s producer and from society if you think about it – ie. carjacking should not be a viable option). They come up with the most effective strategy of getting from A to B given their resources at any given moment and this can change, they can even partner with other teams if the circumstances provide that such arrangement would be self-serving and mutually-beneficial. But it’s crucial that all decision-making capability is distributed to the level of the couples. If there were to be one central authority trying to call out the plan for best strategy for every couple at every given moment, first it wouldn’t be interesting but most importantly it would be a completely unmanageable mess.

According to the OO book above, UPS undoubtedly employs a similar strategy in how they route their packages. They make them into greedy, self-serving individuals trying to get to where they need to be as cheaply as possible and as quickly as possible. Let the packages figure out what route is best given the paramters and the conditions. If you expand this concept further, their planes are probably simultaneously calculating tradeoffs for optimal weight loading and space management given the destinations of the packages that have chosen them. And one level further, if UPS is like Southwest Airlines, there is some forethought and forecasting going into their purchase and allocation of fuel and they’ve probably done monte carlo simulations on the value of buying oil futures at any moment. Especiall w/ oil at $60/barrel and with a fleet of gas-guzzling machines as large as theirs, there is no doubt in my mind that they’ve invested considerable resources into building intelligence into the “selfish” fuel reserve object that determines the most effective way to buy and distribute their gas. Of course these are all just speculations on my part and I don’t actually even know anyone who works at UPS- I’m just a big fan of how smoothly their operation always seems to run given the complexity of what they juggle.

Read that book if you get a chance. There are some other examples in there which are equally as inspiring, that one just stood out for me as being the “aha” of the month.

© 2005 Lights Out Production – All Rights Reserved Worldwide

Aug 21

I always thought recovering deleted files from harddrives was something left up to forensic specialists you see on CSI and 24. It really is no more difficult than downloading this free program called PC Inspector and walking through their recovery wizard. I had the opportunity tonight to put this little app to use. My friend Tracy recently had her SD memory stick for her digital camera crap out on her during vacation. The flash memory apparently got corrupted when she tried accessing it from her computer. I used a USB SD reader and hooked it up to my PC. The card itself showed only 5 pics on it but after running PC Inspector and stepping through a few screens it was able to identify all 70 missing pics. Unfortunately the way it tries to piece them back together, only about half come out looking pristine. The others look like a mish-mash collage of duotoned photos like a crazy art major would do for a thesis. It would take a bit of photoshop work to restore them all but the data is all there. For a piece of freeware, not a bad little program to keep in mind of you hose your files. You can see below the interface and all the corrupted directories alongside the recovered files (circled in red).

© 2005 Lights Out Production – All Rights Reserved Worldwide
© 2005 Lights Out Production – All Rights Reserved Worldwide

preload preload preload