Forte Estimating Metrics
In his book Object-Oriented Software Metrics (Prentice Hall, 1994), Mark
Lorenz in proposes an approach for estimating OO projects. Lorenz recommends
the average amount of effort spent on a single class is the best indictor of
the amount of work required on a new project. He suggests Smalltalk developers
average 5-10 person-days per class, and C++ developers average 25-35
person-days per class.
Has anyone a view on average effort to build Forte classes?
Note, the metrics quoted above relate to Design and Implementation. They
assume Analysis has been completed, and do not include the time for project
management, systems testing, and other support personnel. They assume a ratio
of 1:6 OO experts to novices. Higher ratios should result in greater
productivity (lower average efforts per class). The guidelines also assume no
library of reusable components.
Lorenz is an ex-head of IBM's Object Technology Center and a respected OO
consultant and author. His method is based on the results of 8-16 Smalltalk and
C++ projects (not all statistics are available from all projects). Projects
ranged in size from 60 to 700+ project-specific classes. Project durations
ranged from 6 months to 2.5 years, with teams of 2 to 35 developers.
Thanks for any help
gjb.
Ron,
Many thanks for your input, and I agree with your comments.
In this case, I do have a function point count which I am using for my primary
estimate. However, a prudent estimator will use multiple techniques for
comparison and reconciliation. The Class based approach, despite it's
weaknesses, appears to be a quick and simple technique to get a rough number.
As it's turned out, the function point estimate and the class based estimate
have come within 10% of each other.
Regards
gjb
ronald.ten-hove @ acm.org
07/06/97 03:32 am
To: Greg Barber
cc: forte-users @ Sagesoln.com @ Internet
Subject: Re: Forte Estimating Metrics
Greg,
In my experience, the class-count metric is a poor one for time estimation,
for four reasons:
1. The actual time/class is very domain- and implementation-
sensitive. Industry averages are fairly unhelpful, unless
you happen to employ average practices and work in domains
of "average" complexity (whatever that means!)
2. It does not account for the overall size of the project; the
larger the project, the lower overall productivity is.
3. It requires that a fairly detailed design be done already, which
represents a fair amount of the total effort; as an estimation
tool, it is only useful in the latter stages of a project.
4. Lorenz's research is based on a very small sample; 18 projects are
hardly enough to have statistical validity.
(I almost included a fifth point, but it is hardly worthy: class-counting
can be spoofed. Awareness of the use of class-count as a metric can give
developers a motive to either artificially increase or decrease the class
count, depending on other motivating factors.)
I would recommend function point analysis as a more general purpose tool
for project management. Using a good statement of the requirements, FPA
generates a measure of the size of the application in terms of function
points. This is independent of the implementation; it measures the
behaviours of the application, rather than the particulars of design
or implementation, such as class count or lines-of-code. Note that
expected productivity varies as a function of the overall size of a project.
FPA has been used as part of the study of literally thousands of
software projects, so the conclusions drawn from FPA studies done
by Capers Jones at Software Productivity Research have some
statistical credibility.
Looking at the general productivity numbers gathered by SPR
(http://www.spr.com), there are some productivity measures that
cover many languages, including Forte. In terms of lines-of-code
per function point, Forte is 3 times more productive than C++.
In terms of overall productivity (function points / man month), there
are too many variable factors to make a simple statement of relative
productivity levels between C++ and Forte meaningful. This has a lot
to do with the Forte object model and run-time system, which, in certain
problem domains, provides a lot of function points (or equivalent)
"for free." In other words, if you can use Forte's plumbing package,
you're automatically more productive. Providing the equivalent in
C++ would be a daunting task (I should know -- I've done it!)
The best method of determining your productivity is to measure it. There
are many factors that affect the overall productivity of your software
organisation; the programming language choice is just one. Using metrics
drawn on industry averages concerning just ONE variable in the product
development process is not terribly useful in project management.
If you are looking for an extremely rough number that is more defensible
that the good old "gut feel" technique, then class counting is probably
the least intrusive on the development process.
-Ron
At 08:02 AM 6/5/97 +1000, you wrote:
In his book Object-Oriented Software Metrics (Prentice Hall, 1994), Mark
Lorenz in proposes an approach for estimating OO projects. Lorenzrecommends
the average amount of effort spent on a single class is the best indictor of
the amount of work required on a new project. He suggests Smalltalkdevelopers
average 5-10 person-days per class, and C++ developers average 25-35
person-days per class.
Has anyone a view on average effort to build Forte classes?
Note, the metrics quoted above relate to Design and Implementation. They
assume Analysis has been completed, and do not include the time for project
management, systems testing, and other support personnel. They assume aratio
of 1:6 OO experts to novices. Higher ratios should result in greater
productivity (lower average efforts per class). The guidelines also assumeno
library of reusable components.
Lorenz is an ex-head of IBM's Object Technology Center and a respected OO
consultant and author. His method is based on the results of 8-16Smalltalk and
C++ projects (not all statistics are available from all projects). Projects
ranged in size from 60 to 700+ project-specific classes. Project durations
ranged from 6 months to 2.5 years, with teams of 2 to 35 developers.
Thanks for any help
gjb.
Similar Messages
-
Re: Forte Estimating Metrics
Greg,
In my experience, the class-count metric is a poor one for time estimation,
for four reasons:
1. The actual time/class is very domain- and implementation-
sensitive. Industry averages are fairly unhelpful, unless
you happen to employ average practices and work in domains
of "average" complexity (whatever that means!)
2. It does not account for the overall size of the project; the
larger the project, the lower overall productivity is.
3. It requires that a fairly detailed design be done already, which
represents a fair amount of the total effort; as an estimation
tool, it is only useful in the latter stages of a project.
4. Lorenz's research is based on a very small sample; 18 projects are
hardly enough to have statistical validity.
(I almost included a fifth point, but it is hardly worthy: class-counting
can be spoofed. Awareness of the use of class-count as a metric can give
developers a motive to either artificially increase or decrease the class
count, depending on other motivating factors.)
I would recommend function point analysis as a more general purpose tool
for project management. Using a good statement of the requirements, FPA
generates a measure of the size of the application in terms of function
points. This is independent of the implementation; it measures the
behaviours of the application, rather than the particulars of design
or implementation, such as class count or lines-of-code. Note that
expected productivity varies as a function of the overall size of a project.
FPA has been used as part of the study of literally thousands of
software projects, so the conclusions drawn from FPA studies done
by Capers Jones at Software Productivity Research have some
statistical credibility.
Looking at the general productivity numbers gathered by SPR
(http://www.spr.com), there are some productivity measures that
cover many languages, including Forte. In terms of lines-of-code
per function point, Forte is 3 times more productive than C++.
In terms of overall productivity (function points / man month), there
are too many variable factors to make a simple statement of relative
productivity levels between C++ and Forte meaningful. This has a lot
to do with the Forte object model and run-time system, which, in certain
problem domains, provides a lot of function points (or equivalent)
"for free." In other words, if you can use Forte's plumbing package,
you're automatically more productive. Providing the equivalent in
C++ would be a daunting task (I should know -- I've done it!)
The best method of determining your productivity is to measure it. There
are many factors that affect the overall productivity of your software
organisation; the programming language choice is just one. Using metrics
drawn on industry averages concerning just ONE variable in the product
development process is not terribly useful in project management.
If you are looking for an extremely rough number that is more defensible
that the good old "gut feel" technique, then class counting is probably
the least intrusive on the development process.
-Ron
At 08:02 AM 6/5/97 +1000, you wrote:
In his book Object-Oriented Software Metrics (Prentice Hall, 1994), Mark
Lorenz in proposes an approach for estimating OO projects. Lorenzrecommends
the average amount of effort spent on a single class is the best indictor of
the amount of work required on a new project. He suggests Smalltalkdevelopers
average 5-10 person-days per class, and C++ developers average 25-35
person-days per class.
Has anyone a view on average effort to build Forte classes?
Note, the metrics quoted above relate to Design and Implementation. They
assume Analysis has been completed, and do not include the time for project
management, systems testing, and other support personnel. They assume aratio
of 1:6 OO experts to novices. Higher ratios should result in greater
productivity (lower average efforts per class). The guidelines also assumeno
library of reusable components.
Lorenz is an ex-head of IBM's Object Technology Center and a respected OO
consultant and author. His method is based on the results of 8-16Smalltalk and
C++ projects (not all statistics are available from all projects). Projects
ranged in size from 60 to 700+ project-specific classes. Project durations
ranged from 6 months to 2.5 years, with teams of 2 to 35 developers.
Thanks for any help
gjb.Greg,
In my experience, the class-count metric is a poor one for time estimation,
for four reasons:
1. The actual time/class is very domain- and implementation-
sensitive. Industry averages are fairly unhelpful, unless
you happen to employ average practices and work in domains
of "average" complexity (whatever that means!)
2. It does not account for the overall size of the project; the
larger the project, the lower overall productivity is.
3. It requires that a fairly detailed design be done already, which
represents a fair amount of the total effort; as an estimation
tool, it is only useful in the latter stages of a project.
4. Lorenz's research is based on a very small sample; 18 projects are
hardly enough to have statistical validity.
(I almost included a fifth point, but it is hardly worthy: class-counting
can be spoofed. Awareness of the use of class-count as a metric can give
developers a motive to either artificially increase or decrease the class
count, depending on other motivating factors.)
I would recommend function point analysis as a more general purpose tool
for project management. Using a good statement of the requirements, FPA
generates a measure of the size of the application in terms of function
points. This is independent of the implementation; it measures the
behaviours of the application, rather than the particulars of design
or implementation, such as class count or lines-of-code. Note that
expected productivity varies as a function of the overall size of a project.
FPA has been used as part of the study of literally thousands of
software projects, so the conclusions drawn from FPA studies done
by Capers Jones at Software Productivity Research have some
statistical credibility.
Looking at the general productivity numbers gathered by SPR
(http://www.spr.com), there are some productivity measures that
cover many languages, including Forte. In terms of lines-of-code
per function point, Forte is 3 times more productive than C++.
In terms of overall productivity (function points / man month), there
are too many variable factors to make a simple statement of relative
productivity levels between C++ and Forte meaningful. This has a lot
to do with the Forte object model and run-time system, which, in certain
problem domains, provides a lot of function points (or equivalent)
"for free." In other words, if you can use Forte's plumbing package,
you're automatically more productive. Providing the equivalent in
C++ would be a daunting task (I should know -- I've done it!)
The best method of determining your productivity is to measure it. There
are many factors that affect the overall productivity of your software
organisation; the programming language choice is just one. Using metrics
drawn on industry averages concerning just ONE variable in the product
development process is not terribly useful in project management.
If you are looking for an extremely rough number that is more defensible
that the good old "gut feel" technique, then class counting is probably
the least intrusive on the development process.
-Ron
At 08:02 AM 6/5/97 +1000, you wrote:
In his book Object-Oriented Software Metrics (Prentice Hall, 1994), Mark
Lorenz in proposes an approach for estimating OO projects. Lorenzrecommends
the average amount of effort spent on a single class is the best indictor of
the amount of work required on a new project. He suggests Smalltalkdevelopers
average 5-10 person-days per class, and C++ developers average 25-35
person-days per class.
Has anyone a view on average effort to build Forte classes?
Note, the metrics quoted above relate to Design and Implementation. They
assume Analysis has been completed, and do not include the time for project
management, systems testing, and other support personnel. They assume aratio
of 1:6 OO experts to novices. Higher ratios should result in greater
productivity (lower average efforts per class). The guidelines also assumeno
library of reusable components.
Lorenz is an ex-head of IBM's Object Technology Center and a respected OO
consultant and author. His method is based on the results of 8-16Smalltalk and
C++ projects (not all statistics are available from all projects). Projects
ranged in size from 60 to 700+ project-specific classes. Project durations
ranged from 6 months to 2.5 years, with teams of 2 to 35 developers.
Thanks for any help
gjb. -
RCPT: Re: Forte productivity metrics
Confirmation of reading: your message -
Date: 13 Dec 96 9:07
To: [email protected]
Subject: Re: Forte productivity metrics
Was read at 20:10, 22 Mar 96.Confirmation of reading: your message -
Date: 13 Dec 96 9:07
To: [email protected]
Subject: Re: Forte productivity metrics
Was read at 20:10, 22 Mar 96. -
Do you have suggestions for estimating the effort required to:
1. Design and develop complex custom pages using OAF in a R11.5.10 eBusiness Suite environment
2. Design and develop modifications to existing Customer Online pages
ThanksDo you have suggestions for estimating the effort required to:
1. Design and develop complex custom pages using OAF in a R11.5.10 eBusiness Suite environment
2. Design and develop modifications to existing Customer Online pages
Thanks -
Your message with subject, Re: Forte productivity metrics, and dated 13 Dec 96 9:07 was read by Len Leber at Fri, 13 Dec 1996 18:35:01 PST.
==============================================
Len Leber
ATG Solutions, Incorporated
[email protected]Hi Souvlaki
If you are using Panther Mail you can use a plugin called MailPriority, which sadly doesn't work in Mail 2.0.
There are some work-arounds that get close to offering what Outlook has, including an all-or-nothing terminal hack.
You can read about them here. -
Bala Krishnan wrote:
>
I am planning to evaluate a Framework for Forte applications. I would be
glad if someone can let me know what are the finer points I should look
for. I am evaluating it more from performance point of view, so would
appreciate if you can throw some lights on the different types of
metrics that need to be collected.
Thanks in advance.
Balu.
Get Your Private, Free Email at http://www.hotmail.com
Hello Bala,
I think you should ask Forte Consulting : they have some bench available
with metrics in several environments.
I have done some performance testing, but it is too specific on hardware
and software architecture. Anyway the conclusion is always the same :
Forte isn't the limit, the infrastructure used with Forte is the limit.
So you can consider the framework as software infrastructure. The best I
think to evaluate a framework is to build the same application with and
without the framework and make mesures on the two versions.
What I would look after on a framework aboput performance :
1°) 3 Tier Architecture implementation
2°) Instanciation
3°) Partitionning
4°) Reference/Copy mechanism when you pass from a partition to an other
5°) Flexibility of use and evolutivity (modularity)
6°) Compatibility with external components and framework (like Express)
7°) Performance on each node of the architecture with and without
compilation (Forte has a Technote about Performance instrumentation on a
Forte Application)
8°) Packaging in Developement environment and in Production environment
9°) Tools given with the Framework (code generation, documentation
generation, delivery tools, version management tools, etc...)
10°) Full Tolerant system : Fail-over (process and network)
11°) Optimization of the hardware part (using multi-processing and
multi-threading)
Daniel.You need to post this question in HTTP Server/Apache Forum
-
Dear all,
We have an ABAP project, how can you estimate total of effort we spend to complete them. Please guide me some ways to estimate the ABAP development project ?
By the way, I want to know how to measure the productivity of a ABAP developer ?. What metric should we base on ?
For example: in VB or C++ projects, we measure productivity of developers base on number of code lines per day.
Please help me or guide me some measurement method.
Thank you.
VuPNHi Pham,
In some development projects I had worked, we used to follow this many metrics but I remember only few:)).
i) To know the total work estimate: You can take all the objects that you have developed and first make a complexity review. There you have to determine if the object is Simple, Medium, Hard or Complex, Very complex. This is a very relative term to establish. Hence use a standard approach in looking at the complexities may be by carrying a Complexity review template/ guideline, jotting all the points and take a weighted average as per their relevance and significance of them to the total delivery.
Now you have a total complexity review done. Just find out if a same kind of project had been done anywhere else and find out what was the number of hours/days spent for each of this degrees of complexities. Say low is 24 hours, medium takes 40 hours, blah blah. Break it down to the level of Technical design, coding, reviews, etc. Now you have a total estimate done. However you should never get biased with actuals as you already have while caluclating the estimates.
ii) Now it is easier to find the productivity as you can find out what was the estimated time to complete and how much did each developer take to complete the job.
Generally the estimates must be done in the initial phase of the project. Also these are very minimal number of metrics which I am trying to tell you. But there is a huge number of them and you could find it out from any quality expert may be auditing software projects for CMM, etc.
Regards,
Srikanth -
Hi there,
We are currently looking at ways of estimating the time and money
required to complete a Forte project. We are looking at using one or more
of Forte, Web Enterprise Designer, and Conductor.
Has anybody found/developed a technique that seems to work well in one or
more of these areas?
Thanks in advance for your reply.
Vanessa Rumball
Analyst Programmer
University of Otago
Dunedin
NEW ZEALANDHi!
Have you tried taking a look at the ODE solver.vi in LabVIEW? You can find more information on this VI here:
http://zone.ni.com/reference/en-XX/help/371361G-01/lvanlsconcepts/ode_solvers_in_labview/
Daniel G.
Applications Engineer
National Instruments -
Metrics to estimate (or measure) IOPs cost of types of VM
Hi,
I am involved in a project to reorganise storage for our VMs so that virtual disks are stored on the most appropriate RAID groups as we are seeing latency on some LUNs at present.
I would like to be able to estimate what the IOPs cost of a particular type of VM would be for future planning purposes. For example if we need to deploy a new Exchange server it would good to know the rough IOPs cost of that type of server before actually comissioning it so that we can start create its virtuals disks on the most suitable RAID groups. Obviously this would vary according to how much the server is being used but it would be good to know how an email server compares to a database server or compares to a file server. Does anyone know of any practical metric by which this can be measured.
Is there any information availble through vCenter? Does vCenter give you information on real time IOPs per VM?I assume you are Anuj since this question is identical to the e-mail we got :-)
General answer for everybody:
Yes, we have an estimation tool that is used as part of the Forms2ADF assessment. While the tool is integrated with JHeadstart design-time clases, there is currently no option to run it through a JDeveloper wizard, or through the command line.
The estimation tool counts various types of forms elements, and applies estimating weighting factors to each form element. These estimating factors are different for each customer, and for each application!
We always migrate a set of selected forms (simple, average, complex) and based on the time spent on these forms and the characteristics of these forms, we set the estimating factors and extrapolate to a total migration effort by generating a spreadsheet using this estimating tool.
Steven Davelaar,
JHeadstart team. -
RE: Forte Start up Delay
Sean,
It may be because of the fact that your launch server is pulling down the
latest version of your installed partitions. I think we have the same
problem, and there are 2 ways of dealing with this. 1. Run the development
workshop using ftexec and not use launch server. 2. Put all the developers
into a model node that does not have any applicaitons installed into this.
Venkat Kodumudi
Price Waterhouse LLP
Internet: [email protected]
Internet2: [email protected]
-----Original Message-----
From: [email protected] [SMTP:[email protected]]
Sent: Monday, June 29, 1998 11:41 PM
To: Venkat Kodumudi
Subject: Forte Start up Delay
To: [email protected] @ Internet
cc:
From: [email protected] @ Internet
Date: 06/29/98 08:27:27 PM PDT
Subject: Forte Start up Delay
Hi all:
We've been experiencing something interesting
lately.
On a HP K9000 system and a DEC AlphaServer 800
system, the Forte Workshop window startup takes
estimated 75 seconds of delay.
It means, after forte printed out the usual
"Attemping to connect to Launch Server.....
Running release cl0 of applet Forte....... "
messages, it will wait about 75 seconds for
the Workshop window to show up.
If one workshop window is up and running, any subsequence
Forte Workshop window will show up immediately.
After closed all the Forte Windows, the delay will happen
again.
We figured it might have something to do with the network
setup, but we couldn't solve this problem.
Anybody have experienced the same problem?
Thanks in advance for any clues.
Sean
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>-
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>Hi Greg,
Thanks for the suggestion. It's really cool. I hope that I have your
suggestion earlier because we have all our client using the launcher to
start our application now. In fact, we divided up our application functions
into applets and have our own customized "launcher distributed" as a sort-of
menu ( which provides the access control ). Changing back to use ftexec -fi
.. would be a major modification. I just hope that Forte has some way to
cheat the "b-tree" so that we can download the applet ourselves ( using some
other media such as FTP, compression, floppy etc ) and update the "b-tree"
later.
Regards,
Peter Sham.
Hutchison Telecom. (Hong Kong).
-----Original Message-----
From: Greg Nyberg [SMTP:[email protected]]
Sent: 1998 07 02 13:12
To: 'Peter Sham (HTHK - Assistant Manager - Software
Development, IITB)'
Subject: RE: Forte Start up Delay
We dont use the launcher to upgrade applications.. We use a c
program
which is actually the program run when they doubleclick on the icon.
This program checks on an FTP server (sortof) to see if there is a
more
recent version, downloads the new version (which is really a
self-extracting self-installing InstallShield program) and installs
it.
The c program then starts Forte using ftexec -fi ... technique.
We have users all over the world, including a number of hotels in
the
Far East using a dial-up TCP/IP connection. With compression, etc,
we
get the size of the file down to about 2MB which takes like 30
minutes
for them to download when we need to upgrade.
Write me if you want more info.
-Greg
> -----Original Message-----
> From: Peter Sham (HTHK - Assistant Manager - Software Development,
> IITB) [SMTP:[email protected]]
> Sent: Wednesday, July 01, 1998 11:16 PM
> To: Venkat Kodumudi
> Cc: '[email protected]'; '[email protected]'
> Subject: RE: Forte Start up Delay
>
> Hi Guys,
>
> Isn't it frustrating! We have the same problem on this "pulling
down
> the
> latest version" feature on our production environment. We have
now
> about
> 100M of applets and some PC is connected back to our computer
center
> through
> some license line. Downloading all the applets means
out-of-business
> for
> the whole morning. Up-grading the license line means increasing
> operating
> cost due to IT department inefficiency. So we can just prey that
no
> PC
> crash on her hard disk, no btree will be corrupted or our user
> wouldn't do
> any funny things on his/her files, otherwise, reloading the whole
> application means nightmare. Worst of all, we can't put our
> application on
> the file server. Is there any way out? Does anyone has a
solution?
>
> Regards,
> Peter Sham.
> Hutchison Telecom. (Hong Kong)
>
> -----Original Message-----
> From: Venkat Kodumudi [SMTP:[email protected]]
> Sent: 1998 06 30 21:09
> To: '[email protected]'
> Cc: '[email protected]'
> Subject: RE: Forte Start up Delay
>
> Sean,
>
> It may be because of the fact that your launch server is
pulling
> down the
> latest version of your installed partitions. I think we have
the
> same
> problem, and there are 2 ways of dealing with this. 1. Run
the
> development
> workshop using ftexec and not use launch server. 2. Put all
the
> developers
> into a model node that does not have any applicaitons
installed
> into
> this.
>
> Venkat Kodumudi
> Price Waterhouse LLP
> Internet: [email protected]
> Internet2: [email protected]
>
> > -----Original Message-----
> > From: [email protected]
> [SMTP:[email protected].
> com]
> > Sent: Monday, June 29, 1998 11:41 PM
> > To: Venkat Kodumudi
> > Subject: Forte Start up Delay
> >
> > To: [email protected] @ Internet
> > cc:
> > From: [email protected] @ Internet
> > Date: 06/29/98 08:27:27 PM PDT
> > Subject: Forte Start up Delay
> >
> > Hi all:
> >
> > We've been experiencing something interesting
> > lately.
> >
> > On a HP K9000 system and a DEC AlphaServer 800
> > system, the Forte Workshop window startup takes
> > estimated 75 seconds of delay.
> >
> > It means, after forte printed out the usual
> >
> > "Attemping to connect to Launch Server.....
> > Running release cl0 of applet Forte....... "
> >
> > messages, it will wait about 75 seconds for
> > the Workshop window to show up.
> >
> > If one workshop window is up and running, any subsequence
> > Forte Workshop window will show up immediately.
> >
> > After closed all the Forte Windows, the delay will happen
> > again.
> >
> > We figured it might have something to do with the network
> > setup, but we couldn't solve this problem.
> >
> > Anybody have experienced the same problem?
> >
> > Thanks in advance for any clues.
> >
> > Sean
> >
> >
> >
> >
> > -
> > To unsubscribe, email '[email protected]' with
> > 'unsubscribe forte-users' as the body of the message.
> > Searchable thread archive
> <URL:http://pinehurst.sageit.com/listarchive/>
> -
> To unsubscribe, email '[email protected]' with
> 'unsubscribe forte-users' as the body of the message.
> Searchable thread archive
> <URL:http://pinehurst.sageit.com/listarchive/>
> -
> To unsubscribe, email '[email protected]' with
> 'unsubscribe forte-users' as the body of the message.
> Searchable thread archive
> <URL:http://pinehurst.sageit.com/listarchive/>
To unsubscribe, email '[email protected]' with
'unsubscribe forte-users' as the body of the message.
Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/> -
Metrics for Captivatedevelopment
The company I work for would like me to convert some of our training material from PowerPoint slides to Captivate computer-based training.
Are there any metrics out there for estimating how long Captivate projects will take?
What kind of hourly rates are being charged for developing Captivate training?
Thanks for any light you can shed on these questions.Your two questions are pretty difficult to answer actually.
Development time varies greatly based on the output that you require. For example:
- Is it a Captivate screen recording
- Is it soft skills training
- Do you require a quiz
- Do you require the finished course to be published to an LMS
- Do you need any interactive components in the course
- Do you have all assets already (storyboard, images etc.)
- What is the lenght of the course
- Will there be voice-over
- Whats the developers experience level with Captivate
and many many other factors.
A 20 minute course might take 10 hours to create if it's a simple screen recording without any fancy stuff (menus, custom graphics, custom templates etc.) and it might take 200+ hours if it's a soft skills course with custom templates, interactivity, video, audio etc.
The same goes for the hourly rates. What do you require the vendor to do for you?
Should they create the entire package for you including templates, graphics, integration with LMS, quizzes, etc. or will you be supplying all the assets to the vendor for them to work with?
I doubt that you will be able to find a "standard" hourly rate for developing E-learning content since it varies based on the tasks that needs to be performed. Also - in my experience - I find that most E-learning development contracts are based on an agreed price and not on an hourly basis.
/Michael
Visit my Captivate blog with tips & tricks, tutorials and Widgets. -
Can not refresh the metrics in schedular
Post Author: sachinddalal
CA Forum: Performance Management and Dashboards
Hi,
When I refresh the metric using schedular, the metric is not refreshed , nor schedular return any error. But when checked in metrics proparties, the last refresh date is not changed, niether the values are updated.
Whe I try to refresh the metric manual, the values are refresh.
Please help me to troubleshoot the problem of refreshing metric through schedular.
Thanks,
Regards
Sachin DalalPost Author: jezbraker
CA Forum: Performance Management and Dashboards
Scheduler is pretty horrid for refreshing metrics.Better of to use the Rules engine and create a rule thats based on a schedule that based on condition (1=1 works well ) then refreshes metircs.troubleshooting is best done with the trace options in setup/parameters.there are a few other ways or seeing what the schedulers up to - but id stick to rules if i were you. -
Campaign Metrics - # Bounces Switched?
Hi -
We have sent out several campaigns and are now reporting on them.
The metrics seem to be mixed up on the subject area.
The campaign was sent out 2/3/2011
The receipent data on the campaign object shows delivery status of 8 hard bounces and 1 soft bounce as of 2/7/2011
The dates are important since the report is 24 hours delayed......
When we run our report using metrics from the Campaign Response History subject area - no formulas, just pulling Metrics."# of Soft Bounces and Metrics."# of Hard Bounces"
the results are SWITCHED. I have tried to change teh aggregation rule from default to sum, just to check. No pivot tables are being used...just straight values.
Does anyone know if this is really a bug or what else might be happening??
Thanks,
AnnHi Ann,
If you are sure you are seeing an error in the data, please enter an SR with Oracle Support.
Thanks! -
RE: (forte-users) 3J= 3M new to me error
Hi Thomas,
Thanks for your email but I think it will be interesting for Brenda not me.
It is exactly what I have expected from Forte Support: detailed information
about bugs and workarounds. But what I cannot understand is that #53398 was
released without any information about possible reasons for this problem or
suggested workarounds. My first reaction after reading this bugreport was to
open a new case at CallCenter to get more information about it. Please
release more information with your bug reports !
Regards
Zenon Adamek
Information Services
Senior Programmer Analyst
Tel: 905 712-1084 ext. 3628
Fax: 905 712-6709
E-mail: zadamekpurolator.com
-----Original Message-----
From: Thomas Degen - Sun Germany Forte Tools - Bonn
[SMTP:thomas.degensun.com]
Sent: Wednesday, September 27, 2000 9:49 AM
To: Adamek, Zenon
Cc: 'Brenda Cumming'; Forte-userslists.xpedior.com
Subject: RE: (forte-users) 3J=>3M new to me error
Hi Zenon,
bug #53398 is not a bug which will likely get fixed, it's an informational
bugreport.
You might see an errorstack like Brenda has reported (and described in
informational
bugreport #53398) probably when you are doing something illegal that is
possible
via Forte Tool but Forte is not trapping it for performance reasons. Hence
you will see
the error coming from your illegal operation only at runtime, probably
only
while
running interpreted in the Forte IDE, but in worst case it might be even a
segmentation
violation.
Technotes 12448 'Sudden client partition crashes at runtime' and 11225
'Don't reparent
mapped Widgets between UserWindows at runtime' explain this matter . See
attached.
But maybe Brenda is much more experiencing a problem as described by Forte
Technote 11398 'Read Only Workspace Errors using ListViews or ActiveX
control'
that might get easily resolved via setting of FORTE_YIELD_THROTTLE=0.
Good Luck and Best Regards !
BTW: I've logged bug #53398, so I've felt responsible to explain its real
background.
Thomas
Thomas Degen
Sun Microsystems - Forte Tools
Forte CTE & Sustaining Group
Technical Support Germany
tel.:+49.228/91499-50
MailTo:thomas.degensun.com
Technote 11398 Read Only Workspace Errors using ListViews or ActiveX
control
SCENARIO:
Getting some unusual interpreter errors that result in an error stating
that
the workspace has been set to read only. Please see Enclosures for the
two
most common error stacks that have been encountered. The abbreviated
versions of the errors are:
- Can't read record (record size = -1)
- Id in index does not match id in record header in data file
- Recursive deserialization attempted.
- Unknown Mark type in deserialization
- Could not read record (64,74615) from repository data file.
Header
is corrupt.
These errors can be happening in either the development environment when
running from one of the development workshops, or with the deployed
application.
The bug outlined in this Technote may be the culprit if the errors above
are
seen when running a client on Windows NT or Motif and the user interface
incorporates ActiveX controls or ListView/TreeView widgets.
CAUSE:
Basically what is happening is that in rare circumstances Forte may invoke
a
nested copy of the interpreter while the first interpreter has yielded.
This
is not a problem in and of itself, but in the case where the original
interpreter was in the middle of a repository fetch when it yielded, and
the second interpreter needs to fetch code as well, we will get one of the
errors listed above, depending on the exact timing. The reason for the
errors is that the repository code at this level is thread-safe but not
re-entrant. It is protected by a mutex that is already owned by the
current task. Which, given the scenario outlined here, where the two
interpreters are running inside of the same task, results in the nested
interpreter being allowed to change data out from under the first.
While for every fetch one or more calls to WindowSystem.Yield will be made
(this is there to prevent the semblance of system lock-up on Win 3.1,
where
Yield is the only way other applications can be allowed to run), there is
a parameter which controls how often to actually yield, which by default
is
set to one out of every 100 calls. This is the reason the problem is
intermittent--you need a yield to occur during a repository fetch
which starts another interpreter which also needs to fetch code from
disk.
The reason this has only surfaced recently is that the nested interpreter
scenario can only happen in 2 cases that we know of:
- ActiveX controls which respond to events/Windows messages
- Outline fields/ListViews with column(s) mapped to virtual
attributes
In all other normal cases, the yield can process the message (typically a
paint message) without starting another interpreter, so regardless of
whether
the first interpreter yielded during a repository operation or not, there
is
no conflict.
SOLUTION:
The workaround is to prevent yields altogether by setting the
FORTE_YIELD_THROTTLE environment variable equal to 0 in the client's
environment. This should have no detrimental effects since the yield code
is in place solely for Windows 3.1x clients.
ERROR STACK 1
SYSTEM ERROR: Because of a prior error, your workspace was set to
read-only to
prevent the application from attempting to write to the repository. The
repository and work you have saved to the repository are safe. If your
workspace
contains unsaved work, you may use the following procedure to save this
work.
First, export the changed components. Then, shut down and restart this
application and reopen this workspace in read-write mode. Finally, import
the
changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 695]
Detected at: qqrp_Session::GetObjectById
Last TOOL statement: method EFWindowController.EFEventLoop
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
The remainder of the Error Manager stack is:
SYSTEM ERROR: Internal Error attempting to deserialize element (64,67470)
(fetch
bitmask is 0x20). Your workspace is now read-only to prevent the
application
from attempting to write to the repository. The repository and work you
have
saved to the repository are safe. If your workspace contains unsaved work,
you
may use the following procedure to save this work. First, export the
changed
components. Then, shut down and restart this application and reopen this
workspace in read-write mode. Finally, import the changed components and
save
your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 61]
Detected at: qqrp_LogicalSession::MaterializeObject
Last TOOL statement: method EFTabManagerNew.EFNoteBookHandler
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
SYSTEM ERROR: Unknown Mark type in deserialization.
Class: qqsp_ImplementationException
Error #: [1101, 34]
Detected at: qqrp_DeSerializeObject::ProcessHdr
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
ERROR STACK 2
SYSTEM ERROR: A serious error has occurred in Repository
(c:\PROGRA~1\CSSPTEST\conplu0). Corrective action may be necessary.
Notify
your repository administrator.
Class: qqsp_ImplementationException
Error #: [1101, 198]
Detected at: qqrp_Repository::Fetch
Last TOOL statement: method
SalesDevelopment_NWC.DEVNotifyofTabSetCurrent
Error Time: Wed Dec 03 10:27:22
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
taskId =
[769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
"ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
SYSTEM ERROR: Could not read record (64,74615) from repository data file.
Header is corrupt.
Class: qqsp_ImplementationException
Error #: [1106, 612]
Detected at: qqbt_BtreeAccess::FetchDataFileRecord
Error Time: Wed Dec 03 10:27:22
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
taskId =
[769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
"ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
Technote 11225 Don't reparent mapped Widgets between UserWindows at
runtime
It is sometimes tempting to unparent a widget from one UserWindow and
reparent
it into another at runtime. However, this can cause crashes if the widget
(or
its decendants) are "mapped" to data. Here's why...
Suppose you have two UserWindows, UW1 and UW2. UW1 contains a DataField
(DF1)
which is mapped to a TextData. UW2 contains a RadioList (RL2) which is
mapped to
a scalar Integer. At compile time, every mapped attribute is internally
assigned
a "Map ID" (a small integer) which is used to tie the Widget to its
corresponding attribute. These Map IDs are used by the Widget to look up a
pointer to their data in a "Map" which is maintained by the UserWindow.
Each
UserWindow is assumed be to independent of the others, so there is nothing
wrong
with Widgets in different UserWindows being assigned the same Map IDs.
In
this
case, let's assume that DF1 and RL2 both got assigned the same Map ID of
3. No
problem so far, since each lives in a separate UserWindow with a separate
map.
Now suppose at runtime the application "detaches" or unparents DF1 from
its
UserWindow and reparents it somewhere into UW2. When it comes time for DF1
to
paint itself the Display System it must ask the Runtime System for the
value of
DF1's mapped attribute. To do that it says "give me the value of the
TextData
for DF1. You'll find it in the Map for this UserWindow (UW1), and its Map
ID is
3". When the runtime system goes to do this it expects to find a TextData
in
this "slot" of the map, but instead it picks up the integer which is
mapped to
RL2. At best this leads to bad data being returned; more likely you get a
segfault and a crash.
If DF1 was not a mapped attribute (say, a Rectangle) there would be no
problem
because there is no data mapped to a Rectangle. If instead of moving DF1
you
created a brand new DataField on the fly there would be no problem,
because the
dynamic DataField would not have any Map ID and so couldn't conflict with
any
IDs in UW2.
So how do you solve this problem? This is exactly what Nested Windows are
all
about. While you can't move DF1 into the middle of UW2, you can nest
UW1.
This
works because UW1 brings its map with it, and when you access DF1 it knows
to
look up its value in UW1's map.
UserWindows are intended to be the "unit of compilabilty" that can be
nested
inside other UserWindows. It is dangerous to "transplant" anything from
inside
one UserWindow into another at runtime.
(Note that you can't avoid this problem by cloning DF1 because the MapID
gets
copied along with it, and the clone will fail in the same way.)
Further details explained in related technote 12448 'Sudden client
partition
crashes at runtime.'
Technote 12448 Sudden client partition crashes at runtime
Scenario : You have two UserWindows, A and B. When Window A starts up, it
instantiates an instance of B and reparents some component of B into A's
window
hierarchy.
This is not allowed and almost always leads to an error at best or at
worse a
segmentation fault.
Here's why :
When you compile a UserWindow in Forte, each "mapped attribute" (whether a
form
element or menu element) is assigned an internal ID which represents an
offset into
that UserWindow's table of mapped attributes. This offset is only valid
in the
context of the UserWindow in which it was compiled. If you detach a
FieldWidget or
MenuWidget from one compiled Window ("tmpMenu" for example) and then
parent
into another compiled window ("tmpWindow") the internal ID comes with it.
When Forte tries to make use of that copied widget it uses the ID as an
offset
into tmpWindow's table of mapped attributes. But that copied offset is
meaningless in the context of tmpWindow's table, so you get some kind off
error.
In this case it found that the data type of the variable in the slot
wasn't
what
was expected. But you might even index off the end of the table and get a
segmentation fault.
There is nothing to prevent you from dynamically creating menu items and
adding
them to a window at runtime; that will work fine. Although of course you
can't
access them via mapped attributes, since those can only be created at
compile time.
But you are not allowed to reparent a widget from one compiled UserWindow
into
the hierarchy of another.
More information may be found in technote 11225 'Don't reparent mapped
Widgets
between UserWindows at runtime'.
Possible errorstacks seen at runtime instead of a complete crash or
segmentation
violation while you are illegally reparenting a widget or menuitem between
windows
at runtime:
Map::SetSubjectData: Invalid conversion from map type 0 to subject type 22
SYSTEM ERROR: Bad parameter at location 3 in method
qqrt_MapClassAccess::ProcessSubjectData.
Class: qqsp_Exception
Error #: [1001, 381]
Detected at: qqrt_MapClassAccess::ProcessSubjectData at 3
Error Time: Wed Aug 09 13:03:57
Exception occurred (locally) on partition "testproject_CL0_Client",
(partitionId = D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd,
taskId =
[D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd.68]) in application
"FTLaunch_cl0", pid 672 on node ONEWAY in environment Audi3M2Env.
At 13:14 26.09.00 -0400, Adamek, Zenon wrote:
Hi,
It is the unfixed defect 53398. Please contact Forte support.
Zenon
-----Original Message-----
From: Brenda Cumming [SMTP:brenda_cummingtranscanada.com]
Sent: Tuesday, September 26, 2000 1:15 PM
To: Forte User group
Subject: (forte-users) 3J=>3M new to me error
Hi,
We are in the process of going from 3J1 to 3.0.M.2, and I am getting
this error that I am unfamiliar with on a GUI that works fine in 3J.
It
does not happen all the time, and I have been unable to establish the
pattern that kicks it off. Has anyone seen this before?
PS- this error is not occurring in the deployed (non-compiled) app,but
when I am running locally from my workspace.
SYSTEM ERROR: Bad parameter at location 6 in method
qqrt_MapClassAccess::ProcessSubjectData.
Class: qqsp_Exception
Error #: [1001, 381]
Detected at: qqrt_MapClassAccess::ProcessSubjectData at 6
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2,
taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Can't find scope 20070 for a class.
Class: qqsp_Exception
Error #: [201, 11]
Detected at: qqlo_ClassTableLoadScope at 1
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Because of a prior error, your workspace was set to
read-only to prevent the application from attempting to write to the repository.
The repository and work you have saved to the repository are safe. If
your
workspace contains unsaved work, you may use the following procedure
to save this work. First, export the changed components. Then, shut down and
restart this application and reopen this workspace in read-write mode.
Finally, import the changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 695]
Detected at: qqrp_Session::IsDistributed
Last TOOL statement: method PPMeasWin.
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Internal Error attempting to deserialize element
(64,120684) (fetch bitmask is 0x20). Your workspace is now read-onlyto
prevent
the application from attempting to write to the repository. The
repository
and work you have saved to the repository are safe. If your workspace
contains unsaved work, you may use the following procedure to savethis
work.
First, export the changed components. Then, shut down and restart this
application and reopen this workspace in read-write mode. Finally, import the
changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 61]
Detected at: qqrp_LogicalSession::MaterializeObject
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Recursive Deserialization attempted, Internal Error!
Class: qqsp_UsageException with ReasonCode: SP_ER_INVALIDSTATE
Error #: [301, 231]
Detected at: qqsp_DeSerializeDriver::Run at 1
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in anew
email the word: 'Unsubscribe' to:forte-users-requestlists.xpedior.com
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.comHi Thomas,
Thanks for your email but I think it will be interesting for Brenda not me.
It is exactly what I have expected from Forte Support: detailed information
about bugs and workarounds. But what I cannot understand is that #53398 was
released without any information about possible reasons for this problem or
suggested workarounds. My first reaction after reading this bugreport was to
open a new case at CallCenter to get more information about it. Please
release more information with your bug reports !
Regards
Zenon Adamek
Information Services
Senior Programmer Analyst
Tel: 905 712-1084 ext. 3628
Fax: 905 712-6709
E-mail: zadamekpurolator.com
-----Original Message-----
From: Thomas Degen - Sun Germany Forte Tools - Bonn
[SMTP:thomas.degensun.com]
Sent: Wednesday, September 27, 2000 9:49 AM
To: Adamek, Zenon
Cc: 'Brenda Cumming'; Forte-userslists.xpedior.com
Subject: RE: (forte-users) 3J=>3M new to me error
Hi Zenon,
bug #53398 is not a bug which will likely get fixed, it's an informational
bugreport.
You might see an errorstack like Brenda has reported (and described in
informational
bugreport #53398) probably when you are doing something illegal that is
possible
via Forte Tool but Forte is not trapping it for performance reasons. Hence
you will see
the error coming from your illegal operation only at runtime, probably
only
while
running interpreted in the Forte IDE, but in worst case it might be even a
segmentation
violation.
Technotes 12448 'Sudden client partition crashes at runtime' and 11225
'Don't reparent
mapped Widgets between UserWindows at runtime' explain this matter . See
attached.
But maybe Brenda is much more experiencing a problem as described by Forte
Technote 11398 'Read Only Workspace Errors using ListViews or ActiveX
control'
that might get easily resolved via setting of FORTE_YIELD_THROTTLE=0.
Good Luck and Best Regards !
BTW: I've logged bug #53398, so I've felt responsible to explain its real
background.
Thomas
Thomas Degen
Sun Microsystems - Forte Tools
Forte CTE & Sustaining Group
Technical Support Germany
tel.:+49.228/91499-50
MailTo:thomas.degensun.com
Technote 11398 Read Only Workspace Errors using ListViews or ActiveX
control
SCENARIO:
Getting some unusual interpreter errors that result in an error stating
that
the workspace has been set to read only. Please see Enclosures for the
two
most common error stacks that have been encountered. The abbreviated
versions of the errors are:
- Can't read record (record size = -1)
- Id in index does not match id in record header in data file
- Recursive deserialization attempted.
- Unknown Mark type in deserialization
- Could not read record (64,74615) from repository data file.
Header
is corrupt.
These errors can be happening in either the development environment when
running from one of the development workshops, or with the deployed
application.
The bug outlined in this Technote may be the culprit if the errors above
are
seen when running a client on Windows NT or Motif and the user interface
incorporates ActiveX controls or ListView/TreeView widgets.
CAUSE:
Basically what is happening is that in rare circumstances Forte may invoke
a
nested copy of the interpreter while the first interpreter has yielded.
This
is not a problem in and of itself, but in the case where the original
interpreter was in the middle of a repository fetch when it yielded, and
the second interpreter needs to fetch code as well, we will get one of the
errors listed above, depending on the exact timing. The reason for the
errors is that the repository code at this level is thread-safe but not
re-entrant. It is protected by a mutex that is already owned by the
current task. Which, given the scenario outlined here, where the two
interpreters are running inside of the same task, results in the nested
interpreter being allowed to change data out from under the first.
While for every fetch one or more calls to WindowSystem.Yield will be made
(this is there to prevent the semblance of system lock-up on Win 3.1,
where
Yield is the only way other applications can be allowed to run), there is
a parameter which controls how often to actually yield, which by default
is
set to one out of every 100 calls. This is the reason the problem is
intermittent--you need a yield to occur during a repository fetch
which starts another interpreter which also needs to fetch code from
disk.
The reason this has only surfaced recently is that the nested interpreter
scenario can only happen in 2 cases that we know of:
- ActiveX controls which respond to events/Windows messages
- Outline fields/ListViews with column(s) mapped to virtual
attributes
In all other normal cases, the yield can process the message (typically a
paint message) without starting another interpreter, so regardless of
whether
the first interpreter yielded during a repository operation or not, there
is
no conflict.
SOLUTION:
The workaround is to prevent yields altogether by setting the
FORTE_YIELD_THROTTLE environment variable equal to 0 in the client's
environment. This should have no detrimental effects since the yield code
is in place solely for Windows 3.1x clients.
ERROR STACK 1
SYSTEM ERROR: Because of a prior error, your workspace was set to
read-only to
prevent the application from attempting to write to the repository. The
repository and work you have saved to the repository are safe. If your
workspace
contains unsaved work, you may use the following procedure to save this
work.
First, export the changed components. Then, shut down and restart this
application and reopen this workspace in read-write mode. Finally, import
the
changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 695]
Detected at: qqrp_Session::GetObjectById
Last TOOL statement: method EFWindowController.EFEventLoop
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
The remainder of the Error Manager stack is:
SYSTEM ERROR: Internal Error attempting to deserialize element (64,67470)
(fetch
bitmask is 0x20). Your workspace is now read-only to prevent the
application
from attempting to write to the repository. The repository and work you
have
saved to the repository are safe. If your workspace contains unsaved work,
you
may use the following procedure to save this work. First, export the
changed
components. Then, shut down and restart this application and reopen this
workspace in read-write mode. Finally, import the changed components and
save
your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 61]
Detected at: qqrp_LogicalSession::MaterializeObject
Last TOOL statement: method EFTabManagerNew.EFNoteBookHandler
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
SYSTEM ERROR: Unknown Mark type in deserialization.
Class: qqsp_ImplementationException
Error #: [1101, 34]
Detected at: qqrp_DeSerializeObject::ProcessHdr
Error Time: Tue Nov 18 15:58:47
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
taskId =
[7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
"ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
ERROR STACK 2
SYSTEM ERROR: A serious error has occurred in Repository
(c:\PROGRA~1\CSSPTEST\conplu0). Corrective action may be necessary.
Notify
your repository administrator.
Class: qqsp_ImplementationException
Error #: [1101, 198]
Detected at: qqrp_Repository::Fetch
Last TOOL statement: method
SalesDevelopment_NWC.DEVNotifyofTabSetCurrent
Error Time: Wed Dec 03 10:27:22
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
taskId =
[769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
"ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
SYSTEM ERROR: Could not read record (64,74615) from repository data file.
Header is corrupt.
Class: qqsp_ImplementationException
Error #: [1106, 612]
Detected at: qqbt_BtreeAccess::FetchDataFileRecord
Error Time: Wed Dec 03 10:27:22
Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
(partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
taskId =
[769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
"ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
Technote 11225 Don't reparent mapped Widgets between UserWindows at
runtime
It is sometimes tempting to unparent a widget from one UserWindow and
reparent
it into another at runtime. However, this can cause crashes if the widget
(or
its decendants) are "mapped" to data. Here's why...
Suppose you have two UserWindows, UW1 and UW2. UW1 contains a DataField
(DF1)
which is mapped to a TextData. UW2 contains a RadioList (RL2) which is
mapped to
a scalar Integer. At compile time, every mapped attribute is internally
assigned
a "Map ID" (a small integer) which is used to tie the Widget to its
corresponding attribute. These Map IDs are used by the Widget to look up a
pointer to their data in a "Map" which is maintained by the UserWindow.
Each
UserWindow is assumed be to independent of the others, so there is nothing
wrong
with Widgets in different UserWindows being assigned the same Map IDs.
In
this
case, let's assume that DF1 and RL2 both got assigned the same Map ID of
3. No
problem so far, since each lives in a separate UserWindow with a separate
map.
Now suppose at runtime the application "detaches" or unparents DF1 from
its
UserWindow and reparents it somewhere into UW2. When it comes time for DF1
to
paint itself the Display System it must ask the Runtime System for the
value of
DF1's mapped attribute. To do that it says "give me the value of the
TextData
for DF1. You'll find it in the Map for this UserWindow (UW1), and its Map
ID is
3". When the runtime system goes to do this it expects to find a TextData
in
this "slot" of the map, but instead it picks up the integer which is
mapped to
RL2. At best this leads to bad data being returned; more likely you get a
segfault and a crash.
If DF1 was not a mapped attribute (say, a Rectangle) there would be no
problem
because there is no data mapped to a Rectangle. If instead of moving DF1
you
created a brand new DataField on the fly there would be no problem,
because the
dynamic DataField would not have any Map ID and so couldn't conflict with
any
IDs in UW2.
So how do you solve this problem? This is exactly what Nested Windows are
all
about. While you can't move DF1 into the middle of UW2, you can nest
UW1.
This
works because UW1 brings its map with it, and when you access DF1 it knows
to
look up its value in UW1's map.
UserWindows are intended to be the "unit of compilabilty" that can be
nested
inside other UserWindows. It is dangerous to "transplant" anything from
inside
one UserWindow into another at runtime.
(Note that you can't avoid this problem by cloning DF1 because the MapID
gets
copied along with it, and the clone will fail in the same way.)
Further details explained in related technote 12448 'Sudden client
partition
crashes at runtime.'
Technote 12448 Sudden client partition crashes at runtime
Scenario : You have two UserWindows, A and B. When Window A starts up, it
instantiates an instance of B and reparents some component of B into A's
window
hierarchy.
This is not allowed and almost always leads to an error at best or at
worse a
segmentation fault.
Here's why :
When you compile a UserWindow in Forte, each "mapped attribute" (whether a
form
element or menu element) is assigned an internal ID which represents an
offset into
that UserWindow's table of mapped attributes. This offset is only valid
in the
context of the UserWindow in which it was compiled. If you detach a
FieldWidget or
MenuWidget from one compiled Window ("tmpMenu" for example) and then
parent
into another compiled window ("tmpWindow") the internal ID comes with it.
When Forte tries to make use of that copied widget it uses the ID as an
offset
into tmpWindow's table of mapped attributes. But that copied offset is
meaningless in the context of tmpWindow's table, so you get some kind off
error.
In this case it found that the data type of the variable in the slot
wasn't
what
was expected. But you might even index off the end of the table and get a
segmentation fault.
There is nothing to prevent you from dynamically creating menu items and
adding
them to a window at runtime; that will work fine. Although of course you
can't
access them via mapped attributes, since those can only be created at
compile time.
But you are not allowed to reparent a widget from one compiled UserWindow
into
the hierarchy of another.
More information may be found in technote 11225 'Don't reparent mapped
Widgets
between UserWindows at runtime'.
Possible errorstacks seen at runtime instead of a complete crash or
segmentation
violation while you are illegally reparenting a widget or menuitem between
windows
at runtime:
Map::SetSubjectData: Invalid conversion from map type 0 to subject type 22
SYSTEM ERROR: Bad parameter at location 3 in method
qqrt_MapClassAccess::ProcessSubjectData.
Class: qqsp_Exception
Error #: [1001, 381]
Detected at: qqrt_MapClassAccess::ProcessSubjectData at 3
Error Time: Wed Aug 09 13:03:57
Exception occurred (locally) on partition "testproject_CL0_Client",
(partitionId = D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd,
taskId =
[D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd.68]) in application
"FTLaunch_cl0", pid 672 on node ONEWAY in environment Audi3M2Env.
At 13:14 26.09.00 -0400, Adamek, Zenon wrote:
Hi,
It is the unfixed defect 53398. Please contact Forte support.
Zenon
-----Original Message-----
From: Brenda Cumming [SMTP:brenda_cummingtranscanada.com]
Sent: Tuesday, September 26, 2000 1:15 PM
To: Forte User group
Subject: (forte-users) 3J=>3M new to me error
Hi,
We are in the process of going from 3J1 to 3.0.M.2, and I am getting
this error that I am unfamiliar with on a GUI that works fine in 3J.
It
does not happen all the time, and I have been unable to establish the
pattern that kicks it off. Has anyone seen this before?
PS- this error is not occurring in the deployed (non-compiled) app,but
when I am running locally from my workspace.
SYSTEM ERROR: Bad parameter at location 6 in method
qqrt_MapClassAccess::ProcessSubjectData.
Class: qqsp_Exception
Error #: [1001, 381]
Detected at: qqrt_MapClassAccess::ProcessSubjectData at 6
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2,
taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Can't find scope 20070 for a class.
Class: qqsp_Exception
Error #: [201, 11]
Detected at: qqlo_ClassTableLoadScope at 1
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Because of a prior error, your workspace was set to
read-only to prevent the application from attempting to write to the repository.
The repository and work you have saved to the repository are safe. If
your
workspace contains unsaved work, you may use the following procedure
to save this work. First, export the changed components. Then, shut down and
restart this application and reopen this workspace in read-write mode.
Finally, import the changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 695]
Detected at: qqrp_Session::IsDistributed
Last TOOL statement: method PPMeasWin.
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Internal Error attempting to deserialize element
(64,120684) (fetch bitmask is 0x20). Your workspace is now read-onlyto
prevent
the application from attempting to write to the repository. The
repository
and work you have saved to the repository are safe. If your workspace
contains unsaved work, you may use the following procedure to savethis
work.
First, export the changed components. Then, shut down and restart this
application and reopen this workspace in read-write mode. Finally, import the
changed components and save your workspace.
Class: qqrp_RepResourceException
Error #: [1101, 61]
Detected at: qqrp_LogicalSession::MaterializeObject
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition
"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
SYSTEM ERROR: Recursive Deserialization attempted, Internal Error!
Class: qqsp_UsageException with ReasonCode: SP_ER_INVALIDSTATE
Error #: [301, 231]
Detected at: qqsp_DeSerializeDriver::Run at 1
Error Time: Wed Sep 20 14:32:54
Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
(partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
[36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
application
"Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in anew
email the word: 'Unsubscribe' to:forte-users-requestlists.xpedior.com
For the archives, go to: http://lists.xpedior.com/forte-users and use
the login: forte and the password: archive. To unsubscribe, send in a new
email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com -
Cardinality estimator 2014 is off with OR in where clause
Here is my test setup on SQL Server 2014.
-- Create big table
CREATE TABLE [dbo].[Store](
Id int IDENTITY(1,1) NOT NULL,
City int NOT NULL,
Size int NOT NULL,
Name varchar(max) NULL,
CONSTRAINT [PK_Store] PRIMARY KEY CLUSTERED ([Id] ASC)
GO
CREATE NONCLUSTERED INDEX [IX_Store] ON [dbo].[Store] (City ASC, Size ASC)
GO
-- Fill with 100k rows
INSERT Store
SELECT i % 101, i % 11, 'Store ' + CAST(i AS VARCHAR)
FROM
(SELECT TOP 100000 ROW_NUMBER() OVER (ORDER BY s1.[object_id]) AS i
FROM sys.all_objects s1, sys.all_objects s2) numbers
GO
-- Create small table
CREATE TABLE #StoreRequest (City int NOT NULL, Size int NOT NULL)
GO
INSERT #StoreRequest values (55, 1)
INSERT #StoreRequest values (66, 2)
Now I execute the following query (I force the index to show statistics estimates)
SELECT s.City
FROM #StoreRequest AS r
INNER JOIN Store AS s WITH(INDEX(IX_Store), FORCESEEK)
ON s.City = r.City AND s.Size = r.Size
WHERE s.Size <> 1 OR r.City <> 55
Here are the estimates that I get (I'm not allowed to upload pictures):
Index Seek IX_Store
Actual Number of Rows: 90
Estimated Number of Rows: 50000
Fixing WHERE clause to use one table not two makes the estimate perfect:
SELECT s.City
FROM #StoreRequest AS r
INNER JOIN Store AS s WITH(INDEX(IX_Store), FORCESEEK)
ON s.City = r.City AND s.Size = r.Size
WHERE s.Size <> 1 OR s.City <> 55
Index Seek IX_Store
Actual Number of Rows: 90
Estimated Number of Rows: 89.74
Switching to 2012 compatibility mode gives estimate of 1 in both cases:
Index Seek IX_Store
Actual Number of Rows: 90
Estimated Number of Rows: 1
Could anyone explain the first result? I'm a bit worried about it. The fix in this case is trivial, but this problem gave us quite some headache in more complex real life queries with multiple joins.
Thank you!But not full statistics on a field basis, just sometimes some default stats like total row count that some plans will build. Even your StoreRequest table only has one two-field index that will have a full histogram.
But I've seen SQL Server make massively bad plans on two-field indexes.
I've seen SQL Server go wrong one-column indexes, so that is not a very relevant point.
Temp tables or not, the estimate here is clearly incorrect. SQL Server knows the density of Size and City. It knows the cardinality of the temp table. The density information gives how many rows the the join will produce. The WHERE clause will then remove
a certain number of rows. With no statistics for the temp table, it does not now how many, but it will apply some standard guess.
50000 is a completely bogus number, because the join cannot produce that many rows, and SQL Server is able to compute the join with out the WHERE clause decently. (Well, it estimates 90, when the number is 180.) No, this is obviously a case of the cardinality
estimator giving up completely.
It is worth noting that both these WHERE clauses gives reasonable estimates:
WHERE r.Size <> 11 OR r.City <> 550
WHERE s.Size <> 11 OR s.City <> 550
Whereas these two gives the spooky 50000:
WHERE s.Size <> 11 OR r.City <> 550
WHERE r.Size <> 11 OR s.City <> 550
Erland Sommarskog, SQL Server MVP, [email protected]
Maybe you are looking for
-
SCCM 2007 and 2012 coexistence and Cross Forest support
Hi All I have a question My company has recently acquired another company That company exist of 2 forests (forest A has one domain namely domain A : and forest B has one domain namely domain B) with a two way forest trusts between them Domain A has a
-
HT201320 i am unable to switch my mail from home screen
Dear All, I am unable to connect my mail. Also email section in home scteen is not supporting
-
Hi guys!!! I need some help. First i want to place a background picture in a jframe but it covers all the components. What can i do? And also i can't change the background color of jframe it stays always grey. What can i do in this case? Please Help!
-
Black and white colour profiles LR4 to CS6
Yesterday when I opened a black and white image from LR4 to Photoshop CS6 they opened as RGB-sRGB, today after doing an update to both photoshop and camera raw they now open up with an embedded profile mismatch of gray gamma with the option to change
-
HT202274 how do i reset my system password
I upgraded my imac to yosemite and now my kodak printer won't work. I have figured out how to fix this problem by reading through the community post but now need my system password to proceed. However I have forgotten it and not sure how to reset it.