Monday, November 3, 2008

Results Driven

I have to offer up some praise to God in all he's done . . . because of him working through members at Heartland Church people have became members of our church. My wife attended the Class 101 on joining our church this past Saturday and 5 out of the 9 in the class were there because they had found Heartland Church Blue Springs, MO on the internet. God works in many wondrous and mysterious ways . . . who'd have though that because of circumstances in my personal life I would have had the time to drive the new work forward on our web presence? I'm very blessed by many great fellow workers in this online ministry at our church. As we move forward with an even better web presence; I pray that God will continue to allow us to reach out to our local community and bring people to not only our church, but to a relationship with God and his church, the universal church of Christ followers.

Tuesday, October 14, 2008

Child check-in systems . . . open source to the rescue?

I've been looking at various child check-in systems for our church and the majority of them have something that is not exactly easy to stomach -- a price tag. As it is, I'm working on getting a donated computer running, getting the label printer up and going, and all the other ancillary things that will need to be dealt with. The typical pricing structure is $xxx for 1-500 people, and then it scales up from there.

I've been working with a lot of interesting technologies over the years, and my main focus for the past 8+ years has been open source systems based on the LAMP (Linux/Apache/MySQL/PHP) stack. I've adjusted that slightly to include Postgres as my preferred database, just because I lean more towards Postgres as a stable enterprise level application . . . which I'm sure MySQL fans will be eager to jump in defense of, but it's my call, so I'll deal with it. I recently got very into some MVC (Model/View/Controller) type systems, like Ruby on Rails, but the learning curve for Ruby/Rails didn't quite lend itself to my schedule. I decided to look into MVC on the PHP side of things and decided that CodeIgniter would be a good way to go. I even changed over the infrastructure of the system I'm designing at my day job (Cascade Health Services) to use this way of doing things. To supplement that on the Javascript side of things, I'm using JQuery.

After spending some quality time on the other side of the kids check-in at Heartland Church, my wife and I decided that a computerized system would make a lot more sense. We are in the process of writing this and with the MVC modularity and abundance of code for both CodeIgniter/PHP/JQuery, I think our solution can be a very robust and easy to build system. I can see the need for something like this at churches around the country, but many of those churches don't have the luxury of new(er) Windows capable systems. In using the LAMP stack, I can take any PC and make it into a check-in system with merely a web interface to control the entire operation. I think making this solution available to others as an Open Source project would be fantastic as well, because it will allow others to contribute new ideas.

So that's my take on the subject . . . and day by day we're making progress on the system. I'm using my Linux based Dell laptop (FC9) as the guinea pig for this. I plugged in a Dymo 400 labeler and it amazingly worked right off the bat with my laptop setup. I'm hoping to get a computer ready to roll, with the flavor of Ubuntu as it's OS (operating system). I've already overcame quite a few technical hurdles, so now it's just time standing between the final product and testing. My wife and I are scheduled to check-in again this weekend, so it would be fantastic to put the system in place now . . . but we'll see how my schedule goes.

Thursday, October 9, 2008

Interesting juxtaposition

On CNN's front page today:
Tech »

* U.S. air-traffic network outdated, costly
* Stephen Hawking: Our future is in space

When we have a ticking time-bomb in terms of air traffic control networks, I think our immediate future should be on fixing what we already have going. My future is not quite in space per se, but somewhere more heavenly that's for sure.

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.