Isn't it a bit ironic that a programmer would call automation "lazy"?
  (*Chris*)

On Sat, Jun 28, 2008 at 12:15 PM, Frank W. Zammetti <[EMAIL PROTECTED]> wrote:
> I'm not sure what you see as "lazy", exactly?
>
> Frank
>
> -----Original Message-----
> From: Al Sutton <[EMAIL PROTECTED]>
> Sent: Saturday, June 28, 2008 12:06 PM
> To: Struts Developers List <dev@struts.apache.org>
> Subject: Re: environment awareness (project stage in JSF)
>
> Brian,
>
>  From what I can see your only real problem is QA on config files and
> given that how can you you can guarentee that all of your servers will
> never have their config drifted between zones because a certain problem
> occurr in dev but does in production.
>
> I've previously worked on a project that used LDAP directories for
> everything (data storage and configuration). The app servers were only
> given the LDAP FQDN to bind to and pulled all of their config data from
> there. The LDAP servers had IP access control rules which prevented any
> machine outside of the domain attaching to them, this meant a server on
> the dev network couldn't get the production configuration and vice
> versa.  You could use an HTTP URL and web server as an alternative, but
> the principal is the same, protect the data which can cause things to go
> wrong (i.e. the config file), and don't try to code to prevent every
> screw-up a support techie will make (they can be pretty inventive when
> it comes to how to screw things up).
>
> I can also see concerns over where do you draw the line between
> environments. With your example of credit card processing where would
> you say dev and production separate, do you write the code to return
> dummy auths and/or declines in dev mode, or do you call out to the
> payment gateway? One means that anyone with a spare machine can test
> something, the other means you need them to have the correct config and
> equipment to talk to the payment gateway?, what happens if someone wants
> to switch between the two in order to test the gateway interface, do you
> create another environment label?
>
> All in all it does seem like a lazy solution to me, whats needed is
> better QA, not a solution which makes people sloppy because they think
> that the code will catch their mistakes.
>
> Al.
>
>
>
>
> Brian Pontarelli wrote:
>> I think this is an over-simplification of a complex problem. Here are
>> a few examples from orbitz.com:
>>
>> - Thread pool sizes. We couldn't replicate production (1500+ servers)
>> in staging, so instead, we created as many VMs as we could handle on
>> the limited number of machines we had (~100) to get an accurate
>> simulation. This required smaller thread pools to not kill the OS
>>
>> - Different back end host connections to the GDSs. You can't book a
>> real flight in staging or development.
>>
>> - Different server names. We had around 7 tiers that spanned multiple
>> servers. Each request to Orbitz hits anywhere from 10-20 different
>> machines. Although we used Jini to discover the services, we still had
>> to configure the Jini lookup servers differently between environments
>>
>> - A classic example that everyone uses is database configuration and
>> SMTP servers. These are could be in a JNDI entry or the application
>> might create connections directly, depends. If the application creates
>> this stuff it will need different configuration per environment.
>>
>> - Not charging credit cards in development, but charging them in
>> staging and production. And we also had specific merchant accounts to
>> test in staging that were full transactions, but they didn't charge us
>> the full amount. We also had many different bank accounts setup to
>> test all the different types of cards and transaction boundaries.
>>
>> And the list continues. I might agree that an MVC might not need to
>> know the environment, but an application will. The example you give
>> with logging has very little to do with environment concerns and more
>> to do with poor testing and programing. In addition, you should have
>> been able to turn it off.
>>
>> I think a better example of bad environment configuration is using it
>> to configure everything and having complex and error prone
>> configuration files. I recall two cases that are quite humorous:
>>
>> 1. With Jini we could dynamically add machines and the system would
>> discover them and they would immediately start accepting work. Made
>> scaling simple. Someone had setup a box and mistakenly named the
>> environment to "pr0d" (yeah that's a zero in there). Took us hours to
>> figure that gem out and at 2am no less.
>>
>> 2. Someone was creating a new service to interact with a new GDS
>> feature that provided discounts on hotel rooms. They were testing it
>> out in development and being a developer, thought a 98% discount would
>> be some good test values. Rather than putting the value in the
>> config-development.properties file it ended up in the
>> config-default.properties file and made it all the way out to
>> production. The hotel called us up and mentioned that they had quickly
>> sold out over New Years at a whopping $6 a night. Luckily they only
>> had 5 rooms or something, but we ate the cost of selling a 5-star
>> hotel at 98% off.
>>
>> I think the principle is sound, just needs a lot of testing and
>> understanding. I definitely don't think it has anything to do with
>> lazy developers. In fact, some of the best developers I know use it
>> extremely well to control size, performance, scale, functionality, and
>> much more in different environments.
>>
>> -bp
>>
>>
>> On Jun 28, 2008, at 4:56 AM, Al Sutton wrote:
>>
>>> I think the concept is an idea which will appeal to lazy developers.
>>>
>>> Why on earth would you want to put conditionals into your code that
>>> you know will only evaluate to a set value in the environment they
>>> run in?
>>>
>>> If anything it makes problems harder to track down because if someone
>>> takes a copy of the app from a production machine to a dev machine to
>>> further investigate a problem it will behave differently, which is
>>> just a hiding to nowhere in multi-threaded apps such as S2 webapps.
>>>
>>> An example of one of the "joys" that can come from this type of idea
>>> came from a project I worked on where a coder used log4j and isDebug
>>> to conditionally build a log string and log some extra data. This
>>> might be seen as a good idea, except the code within the conditional
>>> block didn't properly check all the objects were not null and under
>>> certain functionally valid conditions an NPE was thrown, so when a
>>> problem arose in production at a customers site they were asked to
>>> turn debug logging on and all that they sent back was a log with an
>>> number of NPEs which didn't relate to the original problem.
>>>
>>> Ohhh the fun we had explaining that a new release had to go through
>>> their change (long) control procedure just so we could find out what
>>> the original problem was and until that we we're kind of stuffed
>>> finding out what in their environment triggered the problem.
>>>
>>> Yes in an ideal world it shouldn't have happened. Yes it probably
>>> should have been picked up by some QA test somewhere. But don't we
>>> all live in the real world?
>>>
>>> Al.
>>>
>>>
>>>
>>> Chris Pratt wrote:
>>>> We use something similar in our system.  The system uses a bunch of
>>>> resource bundles that are separated into logical domains, and each
>>>> entry can be overridden by a local file on each machine.  Plus each
>>>> entry can be scoped by environment (production, test, development),
>>>> machine, or application name (in case multiple applications are
>>>> sharing a library component).  We have log4j and spring configurers so
>>>> that it is tightly integrated into the tools we use.  It's saved us an
>>>> eternity of time tracking down bugs from one environment to the next
>>>> since we deploy the same WAR file that was accepted by the quality
>>>> assurance group into production and let the configuration take care of
>>>> itself.
>>>>
>>>> I've often thought of creating a Google Code project to open source
>>>> it, but wasn't sure if there would be enough interest.
>>>>  (*Chris*)
>>>>
>>>> On Fri, Jun 27, 2008 at 1:38 PM, Brian Pontarelli
>>>> <[EMAIL PROTECTED]> wrote:
>>>>
>>>>> Yeah, I found that environment resolution was a key feature for any
>>>>> large
>>>>> application. At Orbitz we could deploy the same bundle to any
>>>>> server and the
>>>>> bundle would figure out where it was and configure itself for that
>>>>> environment. Worked really well.
>>>>>
>>>>> I have also provided this type of feature in JCatapult using an API
>>>>> that can
>>>>> be implemented however developers need. The default implementation
>>>>> uses
>>>>> JNDI, but it is simple to change it. The nice thing about that is
>>>>> you can
>>>>> assume at all times that the environment is available and make
>>>>> assumptions
>>>>> around that.
>>>>>
>>>>> -bp
>>>>>
>>>>> On Jun 27, 2008, at 1:53 PM, Frank W. Zammetti wrote:
>>>>>
>>>>>
>>>>>> We d something similar as well, but we decided to use a simple env
>>>>>> var in
>>>>>> all environments... So the exact same EAR can deploy to any
>>>>>> environment and
>>>>>> the code within simply looks for that var and acts accordingly.
>>>>>> Simple but
>>>>>> highly effective.
>>>>>>
>>>>>> Frank
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: Ian Roughley <[EMAIL PROTECTED]>
>>>>>> Sent: Friday, June 27, 2008 2:59 PM
>>>>>> To: Struts Developers List <dev@struts.apache.org>
>>>>>> Subject: Re: environment awareness (project stage in JSF)
>>>>>>
>>>>>> I've actually had to implement this type of feature in multiple
>>>>>> enterprise applications.  However, I would say that it's not
>>>>>> knowing the
>>>>>> environment, but being able to change configuration elements per
>>>>>> environment that is important (for what I did, and in rails I
>>>>>> think this
>>>>>> is the most important elements).  i.e. change the SMTP, temp file
>>>>>> dir,
>>>>>> admin user email address, etc. depending on whether you are testing
>>>>>> locally vs. production.
>>>>>>
>>>>>> If developers are using spring, there is a way to load property files
>>>>>> with a hostname extension (which is one solution) - but should we
>>>>>> always
>>>>>> expect users to be using Spring?  The other question is being able to
>>>>>> modify struts.property properties depending on env (i.e.
>>>>>> devMode=true in
>>>>>> development and never in production).
>>>>>>
>>>>>> /Ian
>>>>>>
>>>>>> Antonio Petrelli wrote:
>>>>>>
>>>>>>> 2008/6/27 James Holmes <[EMAIL PROTECTED]>:
>>>>>>>
>>>>>>>
>>>>>>>> http://blogs.sun.com/rlubke/entry/jsf_2_0_new_feature2
>>>>>>>>
>>>>>>>> I like it. This is one of the features of RoR that I really
>>>>>>>> found useful
>>>>>>>>
>>>>>> ---------------------------------------------------------------------
>>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>>
>>>>>>
>>>>> ---------------------------------------------------------------------
>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>>
>>>>>
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>>
>>>>
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to