Friday, September 19, 2008

Microsoft's "I'm a PC" . . . I was . . . now I'm not!

http://www.usatoday.com/tech/products/2008-09-18-microsoft-ads-seinfeld_N.htm -- Microsoft's new ads take a direct shot at Apple

I can understand Microsoft's viewpoint . . . their new ads are trying to fix their public image a bit. Vista has tanked, and users are frustrated and Apple has an a foothold and is gaining ground. Linux people are patting themselves on the back saying how wonderful their GUI is now and meanwhile it still doesn't do anything useful. I have been in the computer industry over 20+ years now and a majority of those years was as a advocate (slave?) for Windows systems. I always dismissed the Mac platform as toys for artists/writers/etc...

Guess what . . . they aren't toys. Last night I was able to create this video for our church . . .it's my 3nd effort at this and it was just fun and easy. Not a PC experience . . . or more importantly Windows experience. I have tried to do this type of thing in the past . . . and failed. I've spent days on Windows software to just get a video put together . . . never mind having fun doing it and going "oh - what if I did this?" My choice of computer systems and their underlying architecture is for one purpose -- to get what I want (and most importantly God wants) done in a timely manner. It's a tool -- just like a socket wrench. I can pick up a socket wrench that is a good tool and simply use it . . . it fits in my hand, works, and doesn't have it's mechanism falling apart.

And just for the record . . . guess how those ads are created?

http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9115120 --Microsoft's 'I'm a PC' ad images made on Macs

Wednesday, September 10, 2008

Programming web apps - Part 1

I've had a lot of experience in designing web apps over the past few years, and one of the biggest things that I've learned is the value of environments. I learned bits/pieces of this concept many years ago, but now I've put it into full practice on the applications that I design for. Right now I carry a Linux based laptop (a Dell Inspiron 1100) and it's a great little on the road warrior. (That was the subject of my recent Bluetooth tethering to phone issue.) Many years ago when my first child was on the way I was working at home for myself. In the process of the pregnancy, we needed to be at the hospital for monitoring. I found that was my most productive time as I was able to take my application in development and simply code on the road. I had to setup my configuration files though to allow for differences in how PHP worked on the Windows platform (my old laptop platform) and how my server(s) were configured.

The art of CVS/SVN taught me a few things when I worked for another employer. The problem that we ran into was keeping track of what files were supposed to go where. We circumvented this when we made files that looked at where they were living to determine what configurations were supposed to be in play. You can see an example of this below:



// Just add to this to determine the live URL's for the site.
$live_domain_array = array("tempo","www.mylivesite.com");
// Just add to this to determine the test URL's for the site.
$testing_domain_array = array("tempodev","tempotest");

switch(true)
{
// ***************************************************
// ** D E V E L O P M E N T S E R V E R **
// ***************************************************
// First see if we're on on the development server
case in_array(strtolower($_SERVER['HTTP_HOST']),$testing_domain_array):
{
$application_folder = "application/tempo_dev";
$GLOBALS['server'] = 'test';
$GLOBALS['profiler'] = TRUE;
break;
}
// ***************************************************
// ** T E S T S E R V E R **
// ***************************************************
// First see if we're on on the test server
case in_array(strtolower($_SERVER['HTTP_HOST']),$testing_domain_array):
{
$application_folder = "application/tempo_test";
$GLOBALS['server'] = 'test';
$GLOBALS['profiler'] = TRUE;
break;
}
// ***************************************************
// ** P R O D U C T I O N S E R V E R **
// ***************************************************
// First see if we're on on the live server
default:
{
$application_folder = "application/tempo_prod";
$GLOBALS['server'] = 'production';
}



This approach is very easy to implement through my local hosts file on whatever computer I'm using:

192.168.1.64 tempo tempodev tempotest tempoadmin

Then in my Apache configuration file I can do this:



DocumentRoot /home/sites/tempo
DirectoryIndex index.php
ServerAlias tempo tempodev tempotest tempoadmin
#ServerName www.mylivesite.com



So . . . then when I copy the files to whatever environment I'm in, by virtue of the right hosts file entry, it knows what site to serve up. I'm currently working with CodeIgniter, so this is a little peek into a file like the /controller/database.php:


$db['default']['hostname'] = "localhost";
$db['default']['username'] = "username";
$db['default']['password'] = "password";

switch ($GLOBALS['server'])
{
case 'live':
case 'production':
$db['default']['hostname'] = "192.168.1.124"; // Production database server
$db['default']['username'] = "username";
$db['default']['password'] = "password";
$db['default']['database'] = "production_database"; //
break;
case 'test':
$db['default']['database'] = "test_database"; // local copy

break;
}


This is just some of the things I've learned . . .I'd be interested in what other developers do also. This is mainly related to my day to day job, but I'm using the same concepts on our Heartland Church web site was well as the child check-in system I'm designing.

Thursday, September 4, 2008

Finally Tethered!

I've had my Palm 700WX on Sprint around 18+ months now . . . I originally had a Sprint PPC 6700 and after too numerous problems Sprint "upgraded" me to the Palm 700WX, and I've loved it ever since. One thing that bugged me was the tethering capability. The Treo modem is disconnected via one firmware update . . . and the only way to get it back is to add a data plan onto the phone. I'm already paying for the data plan though, and my normal traffic on the phone really negates any benefit for paying even more money to occaionally connect my laptop to get a connection.

I decided to download the Mobile Stream USB Modem (www.mobile-stream.com) software a while back and was successful in getting my Windows system to connect. I forgot about it for a while and then tried the Junenet PDANET software. That combo allowed my Mac to connect via Bluetooth, but I couldn't get my laptop to connect. Today I tried the whole process again using the USB Modem software and was able to connect the laptop via a USB cable . . . that was pretty exciting in itself, but I had already bought a Bluetooth dongle (Trendnet) to use on the Linux laptop. I dug around and decided to use the dialup script from this web site: http://www.tikirobot.net/wp/tag/treo/ Finally after some fiddling I was able to get it connect up.

Some key points from this excercise:

1) FIRST AND FOREMOST -- check your EVDO icon . . . if it indicates that it's got a data connection, the software won't connect . . . the modem is already busy. I finally figured that out and it made things go a lot better!
2) Instructions on the 700WX are just about non-existent. I searched EVERYWHERE looking for every little nugget of knowledge I could find . . . and that web site listed above had instructions for the 700P (Palm OS) versus the Windows Mobile.
3) The biggest key is finding the right "channel" for the modem. I originally bound the USB to Bluetooth rfcomm and used the wrong channel . . . that doesn't allow your dial connect strings to work at all . . and Linux isn't very encouraging in allowing you to figure out things.
4) Ironically the Fedora Core 9 software on the laptop connected on it's own when I plugged in the USB cable it made the connection, but again, you have to make sure the phone isn't already using the modem. Mine is checking mail via my Mail2Web Exchange Server, as well as my Remember The Milk sync . . . so it's pretty busy.

I'm going to document this further, but at least I've captured a few things that I figured out along the way. I had to massage the connection script a bit to allow for path differences on my laptop/OS, but everything seemed to work just fine. I don't have Flash on my laptop yet, so I can't go running a speed test or anything . . . but regardless of the actual speed, it's just nice to be able to connect up anywhere I want to, regardless of a wireless 802.11 connection.

Wednesday, September 3, 2008

Using Chrome


Ok -- I'm a sucker for something new, but this is pretty slick. I'm trying out the new Google web browser called "Chrome" and it's pretty fantastic. I've been designing web applications for the past 6+ years now and have done a lot of web sites over the years. Once upon a time I got into using the Macromedia (now Adobe) Flash player for the web application interface. The reason was the Flash Remoting system which allowed data to be sent/pulled all via little system calls . . . and the Flash player was cross platform/browser compatible. This allowed for an application to be built and come as close to a normal desktop application as possible.

With delving into Ajax and more of the newer libraries and resources available, I've been designing more around the browser end of things and not the Flash side, but there are still specific limitations. I think the new Google Chrome (www.google.com/chrome) browswer addresses a lot of those issues that I've come up against in the past. In fact, right now at my job I'm desiging a health care staffing system all web browser based, but the complexity is becoming a bit staggering on how it should all work and work very quickly.

I've been focused on the Firefox side of things and the latest iteration of Firefox (3.0) has been a wonderful thing, but in trying out Chrome, my app is lightning quick and I think it might just be the thing for a enterprise level application to survive on. I know our staff uses the web for many purposes, but tieing the staffing system to the same mechanism that might be used for normal web surfing patterns, well it was a little daunting. The Chrome one process/sandbox per tab methodology is exactly what I think will fix some of the shortfalls I was concerned about. I think the new V8 part might be a little daunting to integrate, but if the current Javascript rendering speed holds up, I will just have to see. I'm very anxious for the Mac/Linux versions of Chrome to come out since that's my desired platform. (The new child check-in system I'm working on could REALLY use that, so I hope the Linux version is very quick in coming out!)

Psst . . . Google if you happen to see this . . . KUDOS! I know many developers like myself are very excited to see web application programming get a stable platform to design enterprise level systems.

UPDATE: Wow, apparently my comments and blog are a little more read than I originally thought. I ended up getting a contact from Eric Lai from ComputerWorld and was included in this article: http://www.computerworld.com/action/article.do?command=viewArticleBasic&articleId=9114063&intsrc=hm_list. At the time of this update, they had me listed as "Bradley Walker" . . . .DOH! I was very impressed that the writer tracked me down via our church secretary to get more info from me.