Design and Tools


DevX Home    Today's Headlines   Articles Archive   Tip Bank   Forums   

Page 1 of 2 12 LastLast
Results 1 to 15 of 21

Thread: Design and Tools

Hybrid View

  1. #1
    Yves Reynhout Guest

    Design and Tools

    Most people seem to be working with business objects in the middle tier...
    But what exactly does 'Business Object' mean? Does it mean they use a
    service-oriented approach or an object-oriented approach or a mixture of
    both (OO for the business layer and SO for the data layer)? What's your
    experience with these different approaches?
    Do any of you use code-generators (like ProcBlaster, VBExpress, COMExpress,
    DB2COM, SLICENDICE, CodeAssist)?
    Do any of you use errorcode-generators? If so, what are their drawbacks?
    Do you use any other tools (such as UML modelers) for design and/or
    code-generation?

    Just some thoughts,
    Yves Reynhout - www.ultragenda.com



  2. #2
    Richard Dalton . Guest

    Re: Design and Tools


    "Yves Reynhout" <yves.reynhout@hotmail.com> wrote:
    >Most people seem to be working with business objects in the >middle tier...

    But what exactly does 'Business Object' mean?

    How long is a piece of string?

    >Does it mean they use a service-oriented approach or an object->oriented

    approach or a mixture of both (OO for the business >layer and SO for the
    data layer)?

    I posted a question recently on this board about OO.
    The truth is I think we're in a bit of a twilight zone
    at the moment. OO as we know it doesn't seem to be very
    suited to n-tier apps, particularly web based apps that
    need to scale. I don't think we've quite nailed the
    alternative yet. OO is great, and it will play a part
    but it won't be the OO that we knew and loved.

    >Do any of you use code-generators (like ProcBlaster, VBExpress, >COMExpress,

    DB2COM, SLICENDICE, CodeAssist)?

    We wrote our own. We're pretty happy with it. One thing is
    for certain, I wouldn't want to be building the kind of apps
    I'm building without a code generator, either written in-house,
    or by a third party.


    -Richard


  3. #3
    Guest

    Re: Design and Tools

    (darin) What does the code generater build for you? I've looked at some of
    the available products and none of them seem to do anything better or faster
    than I can do by hand. They all seem to just generate mounds and mounds of
    virtually identical code.

    I just build one class, module, or what-have-you that handles all the
    options necessary for whatever it is I'm building and then extend it from
    app to app.

    Please don't think I'm trying to be snitty. I really am curious how you use
    code gens in your work.

    Just wondering




    <Richard Dalton .> wrote in message news:3a590af3$1@news.devx.com...
    >
    > "Yves Reynhout" <yves.reynhout@hotmail.com> wrote:
    > >Most people seem to be working with business objects in the >middle

    tier...
    > But what exactly does 'Business Object' mean?
    >
    > How long is a piece of string?
    >
    > >Does it mean they use a service-oriented approach or an object->oriented

    > approach or a mixture of both (OO for the business >layer and SO for the
    > data layer)?
    >
    > I posted a question recently on this board about OO.
    > The truth is I think we're in a bit of a twilight zone
    > at the moment. OO as we know it doesn't seem to be very
    > suited to n-tier apps, particularly web based apps that
    > need to scale. I don't think we've quite nailed the
    > alternative yet. OO is great, and it will play a part
    > but it won't be the OO that we knew and loved.
    >
    > >Do any of you use code-generators (like ProcBlaster, VBExpress,

    >COMExpress,
    > DB2COM, SLICENDICE, CodeAssist)?
    >
    > We wrote our own. We're pretty happy with it. One thing is
    > for certain, I wouldn't want to be building the kind of apps
    > I'm building without a code generator, either written in-house,
    > or by a third party.
    >
    >
    > -Richard
    >




  4. #4
    Guest

    Re: Design and Tools

    I wish I had time to finish up an article I've been writing on Error
    handling in VB (at least Vb6, I haven't had any time to play with .NET yet
    other than to read the postings on it).

    I've never been much on the Errcode generators, but then, I've bought 3 in
    the past year.

    What I've done with them is take the best parts of each (after all, they
    have to give you some of the code), and meld them together. That said,
    VBWATCH seems to be the most flexible, and those guys actually seem to
    listen to their customers! Most of the others are just too dang complicated
    for their own good. But each has one or two good ideas.


    I don't like the idea of having any code "written" for me right before I
    compile. That's just asking for some subtle foulup that manifests itself in
    the deployed app. I much prefer to code in the error handling from the
    start.

    I do make a line numbering pass through the code before compiling, though. I
    still can't believe that VB6 didn't have support for built in line numbers
    without having to actually add them into the code!

    Good luck with it...


    "Yves Reynhout" <yves.reynhout@hotmail.com> wrote in message
    news:3a58ceef@news.devx.com...
    > Most people seem to be working with business objects in the middle tier...
    > But what exactly does 'Business Object' mean? Does it mean they use a
    > service-oriented approach or an object-oriented approach or a mixture of
    > both (OO for the business layer and SO for the data layer)? What's your
    > experience with these different approaches?
    > Do any of you use code-generators (like ProcBlaster, VBExpress,

    COMExpress,
    > DB2COM, SLICENDICE, CodeAssist)?
    > Do any of you use errorcode-generators? If so, what are their drawbacks?
    > Do you use any other tools (such as UML modelers) for design and/or
    > code-generation?
    >
    > Just some thoughts,
    > Yves Reynhout - www.ultragenda.com
    >
    >




  5. #5
    Richard Dalton . Guest

    Re: Design and Tools


    <Darin> wrote:
    >(darin) What does the code generater build for you? I've looked >at some

    of the available products and none of them seem to do >anything better or
    faster than I can do by hand. They all seem >to just generate mounds and
    mounds of virtually identical code.


    Yeah, like most people my first experience was with the class
    builder in VB and I hated it. I spent so much time re-writing
    the code and renaming everything to our standards etc, that I
    could have written the **** thing in half the time it took to
    modify.

    After briefly talking to some third party people on the phone,
    I gave up. (Yes, sir, variable naming conventions are no problem. As long
    as you use our naming convention!!!)

    Anyhow, what we built is a tool that will build business objects
    that allow you to talk to a database. Pretty standard stuff.
    When you point it at a table e.g Employee you get 4 classes
    CEmployee and CEmployeeCollection in the business layer
    and CEmployeeDB and CEmployeeCollectionDB in the Database
    layer.

    Each object comes with a LoadData, SaveData, and DeleteData
    method. You also have Get and Let XML so that you can marshall
    the state of an object. Obviously the business layer also
    has properties for the various fields in the table.

    The generated code includes VBP files for the various layers
    and a VBG file to keep it all together.

    The objects that are produced also include error handling that
    will raise an error up from whatever layer ultimately becoming
    available to the presentation layer (which you have to write
    yourself). The error that gets raised includes all the context
    information you'd want (Date/Time, logged on user, routine where
    the error originated, etc.)

    The trick I used to raise all this information was to create an
    object called CError. This has the Get/Let XML I talked about
    earlier. When I raise an error I store the XML of my CError
    in the the Description property of the VB ErrObject.

    The other big thing you get is the issue of data collisions
    is handled. The Save and Delete methods will work out what
    has changed since you loaded a record.

    I found that when I sat down and worked out exactly what I wanted
    by business objects to do, they were all very similar. So I got
    the generator to build the stuff that was the same, and then I
    have little or no tweaking.

    My goal is that a rookie programmer should be able to point
    the generator at a database and build an app against the
    resulting DLLs. We've had some success.

    It isn't all roses obviously. I'm ironing out bugs it the
    generated code at the moment. I think we're about 2 months
    away from having something other people could use.

    Although there was never an intention to make it publically available. I'm
    hoping we'll make this thing freeware, or open source. But I haven't paidthe
    bill for developing it, so I'd understand if the Powers that be decide to
    sell it. I hope they won't though.


    -Richard










  6. #6
    Olaf Deutsch Guest

    Re: Design and Tools

    Richard

    it sounds great. That's, what i am looking for.
    please inform me, if you release the tool.
    If there a demo class like CEmployee ,CEmployeeCollection ,CEmployeeDB and
    CEmployeeCollectionDB available to see the generated code ?

    Olaf




  7. #7
    Richard Dalton . Guest

    Re: Design and Tools


    "Olaf Deutsch" <ODeutsch@t-online.de> wrote:

    Hi,

    Give me a few days. I've been meaning to put something
    up on my own site. I have a demo app that we've been
    using to test the generator. I just need to get it into
    a distributable package.

    I'll let you know when I have something.

    -Richard

    >Richard
    >
    >it sounds great. That's, what i am looking for.
    >please inform me, if you release the tool.
    >If there a demo class like CEmployee ,CEmployeeCollection ,CEmployeeDB and
    >CEmployeeCollectionDB available to see the generated code ?
    >
    >Olaf
    >
    >
    >



  8. #8
    Olaf Deutsch Guest

    Re: Design and Tools

    thanks for your fast answer.
    Olaf



  9. #9
    Richard Dalton . Guest

    Re: Design and Tools


    Hi Olaf,

    OK, I've posted a little bit (very little) of information.
    I'll expand on this over the next few days.

    The information I have up right now relates to how you
    interact with the business objects from the client.
    and also some background information
    I haven't delved inside the objects yet.

    It's almost insulting to post this little,
    but it's a start.

    It's at www.rdalton.com/asada

    -Richard

  10. #10
    Liam Grossmann Guest

    Re: Design and Tools

    Darin,

    I saw your comments on code generators and decided to reply. As one of the
    developers of one of the code generators mentioned, I'll try to explain why
    they are useful.

    > (darin) What does the code generater build for you?

    Classes, forms, SQL, stored procs, MTS code, error handling code,
    java-script, ASP, ........ and its all template driven so you can change the
    generated code (before generation) to get it to build what you want.

    > I've looked at some of the available products and none of them seem to do

    anything better or faster than I can do by hand.
    How about creating the DLLs required to access your database with stored
    procedures, all marshalled through MTS - say 5 minutes for a database with
    100 tables? I don't know any developer that can do that without making
    mistakes on data types, tables with composite primary keys, timestamps,
    GUIDs, etc.

    > They all seem to just generate mounds and mounds of virtually identical

    code.
    Some of the code generators available today are template driven - which
    means that you can control the final output of the code. The code generator
    puts in the building blocks and elimintes the mistakes made when cutting and
    pasting code.

    > I just build one class, module, or what-have-you that handles all the

    options necessary for whatever it is I'm building and then extend it from
    app to app.
    That's exactly what the code generators do .... but they eliminate the bugs
    caused by cutting and pasting code.

    > Please don't think I'm trying to be snitty. I really am curious how you

    use code gens in your work.
    Just look at our home page for the user comments ...... and maybe try to
    find the time to download the evaluation version - you'll be amazed what can
    be done.

    --
    Liam Grossmann
    http://www.vbexpress.com

    The Expressway to VB / Web Development

    <Darin> wrote in message news:3a593224$1@news.devx.com...
    > (darin) What does the code generater build for you? I've looked at some of
    > the available products and none of them seem to do anything better or

    faster
    > than I can do by hand. They all seem to just generate mounds and mounds of
    > virtually identical code.
    >
    > I just build one class, module, or what-have-you that handles all the
    > options necessary for whatever it is I'm building and then extend it from
    > app to app.
    >
    > Please don't think I'm trying to be snitty. I really am curious how you

    use
    > code gens in your work.
    >
    > Just wondering
    >
    >
    >
    >
    > <Richard Dalton .> wrote in message news:3a590af3$1@news.devx.com...
    > >
    > > "Yves Reynhout" <yves.reynhout@hotmail.com> wrote:
    > > >Most people seem to be working with business objects in the >middle

    > tier...
    > > But what exactly does 'Business Object' mean?
    > >
    > > How long is a piece of string?
    > >
    > > >Does it mean they use a service-oriented approach or an

    object->oriented
    > > approach or a mixture of both (OO for the business >layer and SO for the
    > > data layer)?
    > >
    > > I posted a question recently on this board about OO.
    > > The truth is I think we're in a bit of a twilight zone
    > > at the moment. OO as we know it doesn't seem to be very
    > > suited to n-tier apps, particularly web based apps that
    > > need to scale. I don't think we've quite nailed the
    > > alternative yet. OO is great, and it will play a part
    > > but it won't be the OO that we knew and loved.
    > >
    > > >Do any of you use code-generators (like ProcBlaster, VBExpress,

    > >COMExpress,
    > > DB2COM, SLICENDICE, CodeAssist)?
    > >
    > > We wrote our own. We're pretty happy with it. One thing is
    > > for certain, I wouldn't want to be building the kind of apps
    > > I'm building without a code generator, either written in-house,
    > > or by a third party.
    > >
    > >
    > > -Richard
    > >

    >
    >




  11. #11
    Liam Grossmann Guest

    Re: Design and Tools

    > Anyhow, what we built is a tool that will build business objects that
    allow you to talk to a database. Pretty standard stuff.
    > When you point it at a table e.g Employee you get 4 classes CEmployee and

    CEmployeeCollection in the business layer
    > and CEmployeeDB and CEmployeeCollectionDB in the Database layer.


    Just one question Richard. You say that the architecture you are using makes
    4 classes for each table. This sounds as if you are creating stateful
    classes which, in my opinion are a bad idea and can suffer from poor
    performance.

    A stateful class is a class that maintains state between calls. For example,
    you might have a collection class that loads all the customers into the
    collection and then you can do stuff as follows:
    For Each cCustomer in Customers
    Msgbox cCustomer.Name
    Next cCustomer

    The problem with these classes is that state is maintained in the class
    between calls. By that I mean each class contains a list of module level
    variables for the properties. Two problems arise

    1) If you deploy the DLLs that contain these stateful classses on a server,
    you're going to run out of memory. If I have 10000 customers in the database
    and each customer record is 100 bytes. I logon and 10000 * 100 bytes are
    referenced on the server for me. What happens in a large organisation with
    1000 users ..... thats a lot of memory being taken up on the server to
    maintain all those collections.

    2) If you decide to deploy these DLLs on the client .... what happens to
    your web clients? You'll have to put the DLLs on the server.

    3) Collections suffer poor performance because it can take time to create
    the associated indexes and keys for the collections. For relatively static
    data (e.g. customer status, order status, days of the week) stateful
    collections are great - load them into memory on the client machine when the
    app starts and use them everywhere for great perfomance. However, for data
    that is changing (e.g. customer lists, etc) I have found a 75% increase in
    performance on using disconnected read-only forward only recordsets over
    collections .... and there are no locking issues if you use timestamps on
    the tables with optimistic locking.

    4) How does the architecture service web clients? Have you tried it out? Any
    chance you can post samples of the classes?


    Liam Grossmann
    http://www.vbexpress.com

    The Expressway to VB / Web Development

    <Richard Dalton .> wrote in message news:3a598fcd$1@news.devx.com...
    >
    > <Darin> wrote:
    > >(darin) What does the code generater build for you? I've looked >at some

    > of the available products and none of them seem to do >anything better or
    > faster than I can do by hand. They all seem >to just generate mounds and
    > mounds of virtually identical code.
    >
    >
    > Yeah, like most people my first experience was with the class
    > builder in VB and I hated it. I spent so much time re-writing
    > the code and renaming everything to our standards etc, that I
    > could have written the **** thing in half the time it took to
    > modify.
    >
    > After briefly talking to some third party people on the phone,
    > I gave up. (Yes, sir, variable naming conventions are no problem. As long
    > as you use our naming convention!!!)
    >
    > Anyhow, what we built is a tool that will build business objects
    > that allow you to talk to a database. Pretty standard stuff.
    > When you point it at a table e.g Employee you get 4 classes
    > CEmployee and CEmployeeCollection in the business layer
    > and CEmployeeDB and CEmployeeCollectionDB in the Database
    > layer.
    >
    > Each object comes with a LoadData, SaveData, and DeleteData
    > method. You also have Get and Let XML so that you can marshall
    > the state of an object. Obviously the business layer also
    > has properties for the various fields in the table.
    >
    > The generated code includes VBP files for the various layers
    > and a VBG file to keep it all together.
    >
    > The objects that are produced also include error handling that
    > will raise an error up from whatever layer ultimately becoming
    > available to the presentation layer (which you have to write
    > yourself). The error that gets raised includes all the context
    > information you'd want (Date/Time, logged on user, routine where
    > the error originated, etc.)
    >
    > The trick I used to raise all this information was to create an
    > object called CError. This has the Get/Let XML I talked about
    > earlier. When I raise an error I store the XML of my CError
    > in the the Description property of the VB ErrObject.
    >
    > The other big thing you get is the issue of data collisions
    > is handled. The Save and Delete methods will work out what
    > has changed since you loaded a record.
    >
    > I found that when I sat down and worked out exactly what I wanted
    > by business objects to do, they were all very similar. So I got
    > the generator to build the stuff that was the same, and then I
    > have little or no tweaking.
    >
    > My goal is that a rookie programmer should be able to point
    > the generator at a database and build an app against the
    > resulting DLLs. We've had some success.
    >
    > It isn't all roses obviously. I'm ironing out bugs it the
    > generated code at the moment. I think we're about 2 months
    > away from having something other people could use.
    >
    > Although there was never an intention to make it publically available.

    I'm
    > hoping we'll make this thing freeware, or open source. But I haven't

    paidthe
    > bill for developing it, so I'd understand if the Powers that be decide to
    > sell it. I hope they won't though.
    >
    >
    > -Richard
    >
    >
    >
    >
    >
    >
    >
    >
    >




  12. #12
    Richard Dalton . Guest

    Re: Design and Tools



    Hi Liam,


    "Liam Grossmann" <liamgros@iol.ie> wrote:
    >Just one question Richard. You say that the architecture you >are using

    makes 4 classes for each table. This sounds as if you >are creating stateful

    I'm curious how the number of classes would imply that it's
    stateful. Is there something I should know

    No, it's not stateful. I must admit I discovered the
    state issue about 2 1/2 years ago, and it came as a bit of
    a shock, but now, I'm a huge fan. I actually think once you
    get your head around the idea of statelesness it leads to
    much more testable applications.

    You summed up the problem accurately so I won't go into that.
    Just to explain how classes hang together.

    Take the classic example of an Employee.
    The 4 classes are:

    CEmployee : Business class. This is what you
    code against when dealing with a single
    Employee.
    CEmployeeCollection: Business collection. Manages a collection
    of employees.

    CEmployeeDB : DB Layer Employee. CEmployee creates one
    of these to do a load, save or delete.
    the data is marshalled to it on one trip,
    and his class is destroyed when it's
    finished with.

    CEmployeesCollectionDB : Performs similar DB methods for
    CEmployeeCollection.


    I hope that explains things.


    -Richard

  13. #13
    Liam Grossmann Guest

    Re: Design and Tools

    Sounds good.

    Thanks
    Liam


    <Richard Dalton .> wrote in message news:3a663d9d$1@news.devx.com...
    >
    >
    > Hi Liam,
    >
    >
    > "Liam Grossmann" <liamgros@iol.ie> wrote:
    > >Just one question Richard. You say that the architecture you >are using

    > makes 4 classes for each table. This sounds as if you >are creating

    stateful
    >
    > I'm curious how the number of classes would imply that it's
    > stateful. Is there something I should know
    >
    > No, it's not stateful. I must admit I discovered the
    > state issue about 2 1/2 years ago, and it came as a bit of
    > a shock, but now, I'm a huge fan. I actually think once you
    > get your head around the idea of statelesness it leads to
    > much more testable applications.
    >
    > You summed up the problem accurately so I won't go into that.
    > Just to explain how classes hang together.
    >
    > Take the classic example of an Employee.
    > The 4 classes are:
    >
    > CEmployee : Business class. This is what you
    > code against when dealing with a single
    > Employee.
    > CEmployeeCollection: Business collection. Manages a collection
    > of employees.
    >
    > CEmployeeDB : DB Layer Employee. CEmployee creates one
    > of these to do a load, save or delete.
    > the data is marshalled to it on one trip,
    > and his class is destroyed when it's
    > finished with.
    >
    > CEmployeesCollectionDB : Performs similar DB methods for
    > CEmployeeCollection.
    >
    >
    > I hope that explains things.
    >
    >
    > -Richard




  14. #14
    Guest

    Re: Design and Tools

    > > (darin) What does the code generater build for you?
    > Classes, forms, SQL, stored procs, MTS code, error handling code,
    > java-script, ASP, ........ and its all template driven so you can change

    the
    > generated code (before generation) to get it to build what you want.


    There's no way I'm gonna want a code generator building forms for me. I
    build off the shelf, commercial apps, not one off's in some IT dept, That's
    just not an option.
    My stored procs generally have to be hand coded to get the faster
    performance out of them. I generally let ADO write the code to add, update,
    delete.
    The java and asp stuff might be nice, but I don't use IIS or MTS. I serve
    directly from a multithreaded ActiveX VB server. It gives me complete
    control over what I need to do and I can debug it all in the IDE. Will it
    scale to a million users? Probably not, but then, that's why I added
    clustering ability so that multiple servers can coordinate themselves.



    >
    > > I've looked at some of the available products and none of them seem to

    do
    > anything better or faster than I can do by hand.
    > How about creating the DLLs required to access your database with stored
    > procedures, all marshalled through MTS - say 5 minutes for a database with
    > 100 tables? I don't know any developer that can do that without making
    > mistakes on data types, tables with composite primary keys, timestamps,
    > GUIDs, etc.


    I don't cut and paste a single line of code anywhere. All the code for
    performing standard record operations is contained in one class, any class
    that I create to access a specific table inherits from that base class and I
    then extend it with the functionallity specific to that table. And it's not
    even in .NET (although .NET will sure make the inheritance stuff a **** of a
    lot easier).


    > > They all seem to just generate mounds and mounds of virtually identical

    > code.
    > Some of the code generators available today are template driven - which
    > means that you can control the final output of the code. The code

    generator
    > puts in the building blocks and elimintes the mistakes made when cutting

    and
    > pasting code.


    But I never cut and paste code. Ever. And woe be the the programmer on my
    staff that does cut and paste code!



    > Just look at our home page for the user comments ...... and maybe try to
    > find the time to download the evaluation version - you'll be amazed what

    can
    > be done.


    Thanks. I'll check it out.



  15. #15
    June Jones Guest

    Re: Design and Tools

    Now this is where I get confused about state etc...

    For example, you have a web page that returns some employee data that need
    to be added/updated...

    Take these solutions (in psuedo VB)

    1) Using a more OO approach...

    Set oEmp = New cEmployee
    With oEmp
    .Name = sName
    .Location = sLocation
    .Save
    End With
    Set oEmp = Nothing

    2) Using the Dwamish style...
    Set oEmp = New cEmployee
    oEmp.AddEmployee(sName, sLocation)
    Set oEmp = Nothing

    Both only instantiate the oEmp object for the duration of the procedure, but
    it does method 1 retain state? Certainly between method calls, but not
    involving any user interaction. So is it any less efficient/scalable?
    Especially if the cEmployee is in a DLL on a different machine.

    Regards,
    June

    ps. There is probably a method 3 involving recordsets being passed to an
    object instead of parameters in #2, but it's getting late :-)


    <Richard Dalton .> wrote in message news:3a663d9d$1@news.devx.com...
    >
    >
    > Hi Liam,
    >
    >
    > "Liam Grossmann" <liamgros@iol.ie> wrote:
    > >Just one question Richard. You say that the architecture you >are using

    > makes 4 classes for each table. This sounds as if you >are creating

    stateful
    >
    > I'm curious how the number of classes would imply that it's
    > stateful. Is there something I should know
    >
    > No, it's not stateful. I must admit I discovered the
    > state issue about 2 1/2 years ago, and it came as a bit of
    > a shock, but now, I'm a huge fan. I actually think once you
    > get your head around the idea of statelesness it leads to
    > much more testable applications.
    >
    > You summed up the problem accurately so I won't go into that.
    > Just to explain how classes hang together.
    >
    > Take the classic example of an Employee.
    > The 4 classes are:
    >
    > CEmployee : Business class. This is what you
    > code against when dealing with a single
    > Employee.
    > CEmployeeCollection: Business collection. Manages a collection
    > of employees.
    >
    > CEmployeeDB : DB Layer Employee. CEmployee creates one
    > of these to do a load, save or delete.
    > the data is marshalled to it on one trip,
    > and his class is destroyed when it's
    > finished with.
    >
    > CEmployeesCollectionDB : Performs similar DB methods for
    > CEmployeeCollection.
    >
    >
    > I hope that explains things.
    >
    >
    > -Richard




Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center
 
 
FAQ
Latest Articles
Java
.NET
XML
Database
Enterprise
Questions? Contact us.
C++
Web Development
Wireless
Latest Tips
Open Source


   Development Centers

   -- Android Development Center
   -- Cloud Development Project Center
   -- HTML5 Development Center
   -- Windows Mobile Development Center