I am now a 50 year old manager of a small piece of a very large company that purchased us about 1 year ago. Been into computers since grade school in the late 70's, having spent years working in the field, building, fixing, installing, selling, teaching, gaming, programming and now consulting on all the aforementioned topics. Computing life is good.

Monday, January 28, 2013

Promises broken....


Today I wanted to talk about a problem I see in IT that’s what I believe to be IT’s biggest “Asleep at the switch” syndrome. As with a lot of things in this world, it is both a matter of perception from without as well as a “Well what else can we do” attitude from within. The point for me was driven home by a sickeningly disheartening affair that occurred with one of our clients. As you might know TAI has authored, maintains, augments, and advances several varieties of electronic health records. While most of us would like to believe the altruistic nature of the users are well received by those individuals that are being served, the facts are that in some cases these people are troubled to the point of being a danger to others as well as themselves.

In this particular case a user was murdered by the very person being helped by them. Engaging with people in the community as a matter of one’s job is certainly nothing new for practically everybody in the work force today but when those engagements might prove dangerous, it’s imperative that the computer systems built as tooling for those vocations provide ample support for warning of the potential dangers involved. As a response to this incident we implemented additional messaging and tracking of information within our system used by this client, allowing for dissemination of information which was always there. The new feature packages this information in a new way, bringing it to the forefront of the presentation. Forcing users of the system to see said information if it exists.  

In the aftermath of the incident, our client has of course undergone a number of procedural alterations to deal with the potential of this kind of thing occurring in the future. The system additions featured above being just one such example. The real measures that will provide the real protections against this kind of thing are not metered out in cyberspace but are invoked here in meat space. The particular thing that provoked my return to this dusty blog however is the comments our client have received, specifically regarding the measures implemented in the computer system.

Our client has expressed to us that their clients were amazed at the speed at which a systems change was made to the EHR. I find that “amazement” to be a problem. It’s not that the feature was implemented in the system; it’s that the feature was implement is such a short time that is drawing the praise and kudos. That is what I am struck with. With all the efforts our client has put into making changes with how they deal with this harmful potential, this little piece of system kit that assists in the JOB our client has should be minor by comparison. Being amazed that the changes in presentation were implemented so quickly are what I find interesting, and alarming all at once.

I personally have read a great deal of written materials detailing the glacial pace of change in some aspects of IT system development. Having been personally involved in a few efforts that have ground to a halt in the dogma that is process change control, I can say that the phrase “It would take an act of congress” might just as well be applied here.  This I find to be modern IT systems development greatest failure. While I do see the need for measured and calculated deliberation in the implementation and augmentation of modern computer information system small and large. The various levels of sign off that are required in most of these engagements are far too ponderous. The time required to even make minor changes in wording onscreen in most of these efforts is ridiculous. The unfortunate thing about all this is that the user community has simply grown accustom to it. Having been powerless to affect this glacial pace they see the situation as being “just the way it is”. That is what I find to be shameful from an IT perspective, being surprised by the rapid implementation of a systems feature for useful application in a problem domain aught not be met with praise by the users of said system. Rapid application development is the promise of modern system development paradigms. A promise that all too often has been broken by the not so modern layers of people and process involved in modern system development. 

Thursday, March 08, 2012

A little enlightenment


Yesterday I was working on a particularly perplexing problem where I had a need to have the Silverlight project (IntegraConnect in this case) know the exact location of the machine that was accessing it. The idea being that on a map centered on the users location could then show points of interest around their location. In this case the client would have their service coordinators in the field perhaps at a person home directing those persons to community resources, which is a prime directive for this particular client using the IntegraConnect system.


The problem is that Silverlight does not have an API to communicate with GPS hardware or even an API that will try to determine the location based on the IP address, but modern browsers do. So the problem was how to get that information from the browser. Turns out that there are copious examples of Javascript code that gets the coordinates out of the browser and place them in an alert or use them to message a Google map or some other such contrived thing… That code basically follows this simple pattern

function getCurrentLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showMyPosition, showError);
    }
    else {
        //alert("This website does not have the API")
    }
}


function showError(error) {
    switch (error.code) {
        case error.PERMISSION_DENIED:
            //alert("This website does not have permission to use the Geolocation API")
            break;
        case error.POSITION_UNAVAILABLE:
           //alert("The current position could not be determined.")
           break;
        case error.TIMEOUT:
           //alert("The current position could not be determined within the specified timeout period.")
           break;
        case error.UNKNOWN_ERROR:
           //alert("The position could not be determined due to an unknown error.")
           break;
    }
}
function showMyPosition(position) {
    // stick the position into a hidden form variable
    var coordinates = position.coords.latitude + "," + position.coords.longitude;
    //alert("The position is “ + coordinates;
}

In the above examples I have commented out the alerts which is analogous to messagebox.show() in Silverlight and Winforms projects, but the flow is pretty clear. In it you call getCurrentLocation(), in there the if else block checks to see if the navigator.geolocation object exists. If it does the browser supports the thing, and another function is called that actually points to either an error routine or the actual get the location routine. If it does not we fall through to the browser is old and crusty and you should update it.


This is all well and good except it still does not get the information into our Silverlight application.


Now from Silverlight I can call the javascript with a simple invocation

HtmlPage.Window.Invoke("getCurrentLocation");


This is all well and good except it still does not get the information into our Silverlight application.


That’s where the fun began yesterday with all this exercise in futility where attempting to get the results passed into Silverlight from the JavaScript call had me working up quite a sweat. Each trip into Google land yielding some other wonks demonstration of creating objects that marshal the inherent differences between JavaScript types and Silverlight types. All of these one failure after another. One of the primary problems is that the JavaScript and Silverlight threads are running apart from one another. This concurrency has the Silverlight call returning (with NULL) before the JavaScript engine can get the results. If you run the thing in debug and break on the JavaScript. You can see that it’s working. Yet at full speed no workie, frustrating as all hell.


At this point I started to just give up, but then I thought about how HCSIS (The PA abomination that one of our most successful products interfaces with) In this thing they use a host of HTML form level containers that are invisible to hold values that get passed into and out of processes. To that end I changed the ASPX page that instances the Silverlight plugin as shown below…


In the body segment at the bottom I added the bolded and enlarged line to create our form level hidden container


<body>
<form id="form1" runat="server" style="height:100%">
<input id="Hidden1" type="hidden" runat="server" value="0,0" />
<div id="silverlightControlHost">
        <object data="data:application/x-silverlight-2," 
                 type="application/x-silverlight-2" width="1024" height="768" name="Xaml1">
        <param name="source" value="ClientBin/IhSIS.xap"/>
        <param name="windowless" value ="True" />
        <param name="onError" value="onSilverlightError" />
        <param name="background" value="Yellow" />
        <param name="minRuntimeVersion" value="4.0.0.0" />
        <param name="autoUpgrade" value="true" />
        <param name="Initparams" 
              value="UserAccount=<%=HttpContext.Current.User.Identity.Name%>,
              ipAddress=<%=HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]%>" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" 
              style="text-decoration:none">
        <img src="http://go.microsoft.com/fwlink/?LinkId=161376"
             alt="Get Microsoft Silverlight" style="border-style:none"/>
       a>
       object><iframe id="_sl_historyFrame" 
             style="visibility:hidden;height:0px;width:0px;border:0px">iframe>div>
form>
body>


Then up in script region I added my Java script code to get the results and place them into the hidden container. The error routine could be made a whole lot simpler as I am not really doing anything different for each of the 4 possible errors but I left it as is in case we wanted to handle them differently in the future. The basic procedure is we populate the hidden object with the string representation of the coordinates or 0,0 if there is some problem…


function getCurrentLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showMyPosition, showError);
    }
    else {
        document.getElementById("Hidden1").value = "0,0";
    }
}
function showError(error) {
    switch (error.code) {
        case error.PERMISSION_DENIED:
            //alert("This website does not have permission to use the Geolocation API")
            document.getElementById("Hidden1").value = "0,0";
            break;
        case error.POSITION_UNAVAILABLE:
            //alert("The current position could not be determined.")
            document.getElementById("Hidden1").value = "0,0";
            break;
        case error.TIMEOUT:
            //alert("The current position could not be determined within the specified time    out period.")
            document.getElementById("Hidden1").value = "0,0";
            break;
        case error.UNKNOWN_ERROR:
            //alert("The position could not be determined due to an unknown error.")
            document.getElementById("Hidden1").value = "0,0";
            break;
    }
}
function showMyPosition(position) {
    // stick the position into a hidden form variable
    var coordinates = position.coords.latitude + "," + position.coords.longitude;
    document.getElementById("Hidden1").value = coordinates;
}


So now I use the simple evocation early on in IntegraConnect’s startup of

HtmlPage.Window.Invoke("getCurrentLocation");


To populate the hidden object on our page with the location.


Then when I want to use it say off the geomap screen I can get it out of that hidden object with


using System.Windows.Browser;


HtmlElement elem = HtmlPage.Document.GetElementById("Hidden1");


if (elem != null)
{
    string v = elem.GetAttribute("value");
    MessageBox.Show(v);
}


In this case I am just showing the message box of the results but from here it’s easy to split the string on the , and get the Latitude and the Longitude to work with…
And the clouds parted, and the rays of sunshine rained down upon my keyboard, and the angelic chorus rose up... and all was good…

Sunday, October 16, 2011

New phone development...

Last month I posted about the purchase of my new Android based LG Thrill and remarked how I was going to write that next flashlight application that everybody would want. (There are hundreds already out there). In reality I wanted to get into the Android development paradigm because I found the IOS development environment restrictive in various ways. ( You need a Mac... You need to use Code... Natively you need to learn ObjectC). To that end I have installed the latest bits of development requirement on my windows 7 laptop, and started toying around with the Java based development environment for the Android device environment. I found the initial Hello World style of application easy enough. I also found the task to deploying the application refreshingly simple. Code signing and certifying using the development environments own sample certificate to sign the apk package and I was able to just send to blue tooth device on my laptop to place it on my phone. Once the file was sent to the phone, the phone itself asked what I wanted to do with the file. I selected to install it where Android dutifully did so and the test app appeared in my set off apps. Touch it and it runs just as you might expect.

The development environment also allows easy sending of test applications to the software based Android emulator. you can use one of the 3 pre-built android configurations that came with the development environment, or you can build one with specific parameters that you want. IE Screen size, Memory, SD Card Size, and so on. Using the tools I built a emulator environment that closely matched my LG Thrill in feature set. and I use that emulator environment when I want to test an app without sending it to my actual phone.

I purchased a number of books via Amazon on Android development, and have them on my Kindle app in my IPad, (I still think the IPad makes a better kindle than an actual kindle does), and I was just playing with Java in Eclipse with thee android SDK when I came across some information about MONO Droid.. and my whole life changed....


Mono Droid Main web presence... Wonders did my eyes behold....

MONO Droid is a port of the MONO development paradigm to the Android device pool. Its an offshoot of Xamarin's MONO Touch environment for the IOS devices (IPhone and IPad). I had basically forgotten about MONO Touch because it was initially owned by Novel and they gave the whole project and the staff working on that project, the axe last spring. My office, full of bits of technology that are no longer supported, had no room for yet another one so I gave up on writing C# for any of the I-devices. Well the original Novel development team lead by Miguel de Icaza, formed the company Xamarin out of the ashes left by Novel and are carrying the development forward. MONO Droid is a port of the MONO runtime with support for the Androids native libraries and features. It allows me to write C# code in the native C# environment I use every day for a living, Visual Studio 2010. From my own comfort zone I can write in the language I am most familiar with, in the environment I am most familiar with, to target my Android devices. (MONO-Touch also exists, for IOS. It affords C# language development for the I-devices but it has some of the key barriers for me personaly in that it requires a MAC development environment)
I first downloaded the trial of the MONO Droid sdk from android.xamarin.com and installed it. The SDK installs a number of things that support its needs including the MONO run times, and MonoDevelop (A visual studio like environment for those folks who don't have Visual Studio Professional). It also installs a number of add-ins and templates that expand on Visual Studio 2010 to support Android development. After installing MONO Droid, Visual Studio showed new project types in its new project dialog for various ANDROID deployments. Selecting one of these new project types creates a new project with everything needed to target an Android device.


New Project Dialog Showing Android Templates added to VS2010
The site also includes a series of short tutorials to help someone like myself jump right in and start to play with all the shiny knobs, bells and whistles in this new environment. The trial version will not however deploy to actual devices only emulator images built using native Android SDK that I was talking about at the outset. It even recognized the special emulator image I built to mimic my LG Trill.

Start Emulator Dialog

Using MONO Droid is easy. A simple tutorial available shows how to consume Web Services. Using that tutorial I was able to easily leverage all this code we have written in our silverlight developments. Over a single weekend I was able to write an android application that ports a laarge part of the face sheet functionality of one of our EHR applications (IhSIS). I dial up a persons record and can look at their Address History, Authorizations, Claims, Incidental Expense Requests, Service Provider List, and Supports network all from my Android Phone, Sweet.....


Emulated LG Thrill running my test IHSIS-DROID application actually connecting to my Web service Layer.















- Posted using BlogPress from my iPad

Sunday, September 25, 2011

New phone..... (First Impressions)

This weekend I decided to break free of the shackled existence that is the IPhone. While I initially enjoyed the simple interface and limited options that IOS presented to me as the user, two years ago, I have since wanted more. Looking at the android platform, mature a bit, and grow in diversity, I found myself beginning to loath my IPhone and its drones of fanboys all mindlessly parroting the party line. Mostly, I found myself somewhat embarrassed by my own apparent succumbing to the reality distortion field that surrounds that whole walled garden. So this weekend I bit the bullet and upgraded my old phone to a shiny new LG THRILL.


Stats...

1 GHz TI OMAP4430 processor with a dual-channel, dual-memory architecture for power and multitasking efficiency

Brilliant 4.3" 480x800 (WVGA) TFT touchscreen with support for glasses-free 3D viewing

Dual 5 MP high-definition cameras for 3D image and video capture plus a front-facing camera for video chat

8 GB internal memory and an included 8 GB microSD™ card.. (I purchased a 32 gig card because I have over 20 gigs of music.)

Dimensions and weight: 5.07" x 2.68" x 0.47", 5.99 ounce (Its powerful but definitely not svelte)




Overall impressions

The screen is very sharp albeit less so than the screen on the iPhone 4. Much improvement over my older IPhone 3gs.

I find typing on the on-screen keyboard of the android OS more accurate than that of the old phone. The word suggestion feature seems to be more useful as well.

Much is made by the apple camp regarding the massive gap in app availability in the app store over the android marketplace. I can say that so far, I have found everything I needed to replace functions and featured apps I used on my IPhone. Most of which are in fact the same versions I used on my old phone, besides, how many flashlight apps does one need?

The phone is fast, fast, fast. Dual core processor makes the thing just slick, even with all manner of extra stuff all sucking on the battery. Battery life I can see will be short though, for me that has never really been an issue, as I rarely need long battery life. However one thing I do like is the fact that I can replace my own battery with larger capacity batteries without having to send it back to the mothership for the retrofit.

One thing I went to android for is to be able to write code for my phone without having to invest personally in a Mac to do so. Also the native development environment is Java based for the android, conceptually a small transition from my comfort zone in C# vs the chasm that IOS's ObjectC presents.

As I said above I have a 20 gig music library. Plugging my phone into my PC for the first time. I was asked by the phone if I wanted to share the SD card via USB. On doing so, the phones SD card appears as a drive in windows. Copied my whole library over which was not a fast operation even by pokey slow USB 2 standards. Yet on disconnect the phone scanned the SD card and recognized my music. Just like iTunes had it organized. Cover art and all. Definitely a pleasant surprise even moving iTunes to iTunes never went as smooth.

Another feature I wanted to employ was faster Internet where available. I waited 2 years to IPhone to support 4g speeds on ATT and I would still be waiting. I also wanted to tether my phone to my PC in places where I need it, rather than having to use my old aircard. While I can now do so on IOS after paying extra, its still only 3g in places where it could be better. Now I have both, and by ditching my old aircard I can actually save a few bucks each month. Oh and it will also hotspot, so I don't have to actually be tethered to use it.

The android OS supports flash in the browser, and YouTube, so more of the web is available than IOS affords me. Though as a silverlight developer that aspect of the web that I contribute to still is off-limits to my phone

The phone has a number of high end features that frankly feel gimmicky and did not contribute to my purchase decision. Most notable being 3d capable without glasses. In my mind a non feature and frankly I have found it to get in the way from time to time. As they say "nothing is perfect"

There are definite differences between various android implementations. Not all of these are necessarily good though. For example, the new phone contained two types of on-screen keyboards. The standard android keyboard featured haptic feedback where the phone vibrated a little as you single finger type, and the LG keyboard the mimicked the IOS keyboard. No haptic feedback, only audio clues. The LG keyboard doesn't suggest words though. Personally I find the android keyboard better. Choice however, is why I went android in the first place, and the combination of the android OS and the High performance LG Thrill, makes me feel liberated and excited again about my phone and what I can do with it. (Note... after posting this I found a buried setup feature where I could activate items like haptic feedback for the LG keyboard. The primary difference with the LG keyboard being that it looks more like the IOS keyboard as it is implemented.)

Now to install all the Development tools and write a flashlight app 8)

Wednesday, April 20, 2011

Being anal ain't all bad

I tend to be rather short with people and process that I consider overly burdened with steps and detail. In other words I hate 'ANAL' people. Folks who have their list of steps for everything, and follow those steps with religious zeal, bordering on fanaticism. You know the folks, the ones who want the results of report x ordered the same way each and every time as and example. Such a person calls out the national guard when a software change presents output in a different order. Such a person questions the validity of such output simply because two rows of output are swapped. I used to think of this kind of behavior as a bad thing, wasteful of precious time that I have never had enough of. Sweating the small stuff, I felt sorry for these folks, while being annoyed with them in my interactions. These folks are everywhere after all.

Hypocritically perhaps, I find my interactions with systems to follow such an anal pattern. Initially this behavior on my part was undertaken to simply allow the kind of compliance that I feel will come in any such system rollout to the larger whole. Sure the steps followed religiously in testing and development are overkill, unnecessary and wasteful of precious time, but at some point, when I am going to be tasked with deployment and the whole thing gets put under the scrutiny of external eyes, those anal bastards are gonna want all the i's dotted and the t's crossed. I better just do it at the outset, it's better that way. At least that's what I have always told myself.

One such measure I have found myself, initially begrudgingly so, undertaking is to have a complete history of each and every version of project z that is being deployed to a client even in test. This is not to say that through the miracles of source control I could recreate said archive. No rather I am talking about having each version archived in it's own bundle, in a repository on the clients own environment. If the client has a training and production version then there is an archive of each of these items for every version that has ever been sent along to the client. Overkill? Perhaps but required for certain levels of compliance with certain regulatory bodies whose sole existence is to ensure that measures such as this are in force, else bad things will happen inflicted by ( insert big brother here ).

I have been at a training seminar for the past few days. Each day spent from 7am through 6pm in sessions. Of course we have a client who has an urgent need for 16 new and changes to a rollout that I must also attend to. So even though I am away I have to get this stuff done as well. Long nights in hotel room working remotely, and many a early morning deployment to test environment for the clients review. As you might imagine, many of these nights have had me performing these tasks in in a very impaired state of exhaustion. Mistakes in deploying a project of this type can be catastrophic and given the mental condition I am in in these scenarios are inevitable. In these instances I now see a new use for the Anal behavior I have trained myself to follow. It provides the appropriate safety net for the require CYA necessary when you do something like deploy a training version over a production installation at 4am.......


- Posted using BlogPress from my iPad

Location:W Flamingo Rd,Las Vegas,United States

Friday, April 15, 2011

Light dawns onto propeller beanie

It's been an excruciatingly long set of months leading up to this post. All of it spent in death march style months on two tasks that's have consumed my every waking moments attention. Looking over the past few years I am struck by one overriding thought, "What's new?".

Indeed if you read this dusty corner of the Internet, you will see that those kinds of intros have been in an overwhelmingly common occurrence. So with that astonishing revelation I am further struck by another thought, "What am I doing wrong".

I feel like I am in that STTNG episode where the ship is suddenly presented with a debilitating anomaly, rudderless and on a collision course with another ship that has appeared from the cloud. There is carnage and destruction and death and then there at the poker game again. Like a twisted cruel ground hog day from hell. The past few years have been one such occurrence after another. Each time I find myself saying, "Well we won't make that mistake again".

Indeed, we tend not to make the same mistakes again, yet we do find ourselves in the same tenuous position. Fires raging all around, doom and gloom, and a squirt gun filled with gasoline to put them out. Eventually we have either managed to extinguish the flames by sheer will and perseverance, or they have extinguished themselves by simply running out of fuel to burn. (squirt guns don't have that large a capacity).

This particular project presented itself like any other. We engage with it like we have done before, with differences gleaned from the past designed to avoid painful bruising and internal injuries sustained in prior battles. Yet I sit here headed off to Vegas for my end of phase decompression feeling just as shitty as ever. The real problem on this one is that the source of this is really not through with it's carnage yet. The project is not finished, just an important milestone has been reached.

As I sit here thinking about what has gone wrong on this particular project and what has gone right, I find myself dismayed by the fact that the measures we employed at the outset have had the desired effects, it's just that new dis-functional elements have appeared that have wreaked havoc on the project. Like some twisted game of whack-a-mole, we stamp out a problem with process and another more insidious one appears to take it's place.

In this case the new elements have taken the form of a set of overwhelmed managerial elements on the other side of the table. This has resulted in feature creep that has killed our ability to deliver. The cart is leading the horse here and that is never a good thing. Our mistake was not seeing this at the outset and enforcing some measures that stand a chance at mitigating the effects. I am very disappointed, not at the client, but at myself rather for not recognizing this sooner. The whole thing is so textbook, and yet we fell victim to the standard pressures that befall every small company, struggling to stay afloat in what can charitably be called challenging economic times. The client is really in the same boat as we are in all this. They to have economic challenges and pressures to keep parties happy and all the kinds of things that lead this kind of nonsense. from the outside looking in, the problems are as plain as the nose on my face.

I have been reading a few things from other sage's in the industry over the past few weeks, in between compilations and bathroom breaks, and I am struck by the amount of tellings of these same tales of woe. Each pundit clearly outlining the problems in all the gory details that are not fit for children to see, each pundit unable to show a solution that will surefire rectify the situation. That is unless, as a company, we want to price ourselves out of the market. A small and very cut-throat market at that.

So what are we left with? Scorched earth in our wake, bandaged and bruised, we trudge on to the next bit of green pastures. Our collective experience, the bandages for the next skirmish to be held in those green grasses and fragrant woods. The cycle will continue unaltered by the actions of our rag tag group of disillusioned developers until wars end. In my case I can see one one real end to this and it's filled with the witty catch phrase "Would you like fries with that?"




- Posted using BlogPress from my iPad

Location:36000 feet en-route to Vegas

Thursday, January 13, 2011

Revelations

Have had a very very busy couple of months. The pressure of impossible schedules and deadlines that seem to come faster than they go have kept me away from this small dusty corner of the inter web for some time. The 80 hour 7 day weeks all bleeding one into the other leading to the sudden awareness of the holidays come and gone, a new year now well underway. This current road trip started on this past Sunday with a one way rental and drive through Allentown Pa. To pick up a co-worker and continue on to Erie Pa. That was to be two days then hoof it to Pittsburg and fly to Tampa. The main source of my last few months labors.

Here in Tampa, our client had been struggling with what every client struggles with in a new development. What is wanted, what is needed, what can be afforded, what order to implement in. As they say same shit different day. Also common in every one of these endeavors I have been involved in we find communications lacking amongst the constituents. In this I felt a major communication bottleneck occurred in a particular department headed, as they all are by a single person. Now there are many times when I have encountered this situation, finding the barriers being the result of a general impedance mismatch between parties. Not to blow my horn but generally that finding has been that the party with which the difficulties arise seemed to alway be out of touch with the reality of the situation.

Now in this case I found out something very interesting and quite eye opening. You see this individual had a former life as a very high ranking researcher in cancer treatments at the genetic level PHD level stuff, lab coats and security badges an all that stuff. After many years of research this person decided that they were tired of that and instead wanted to take on different challenges and decided to enter into information technology management. This person has been at that new and radically different profession now for longer than the former profession. Along the way having engaged into many systems development efforts and designs. This unique person has had what is effectively two lifetimes of profession in the span of time that I have only managed to struggle out a single such achievement ( rather badly I have come to realize ). Oh and this person has a family as well. In my case I can barely keep my spouse able to tolerate my presence, this person not only has been happily married this whole time but managed to have children as well.

I can truly say I am humbled by this revelation. In fact I realize that the communication barriers that seem to be there are not the result of any sort of superior grasp of intellect that I posses, no rather the other way around. You see from an intellectual understanding level I am simply not even worthy to carry this persons sandals. Very Eye opening indeed and further evidence of the distance I have yet to travel in all this entropy.....