Erroneous User Interrupts

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
35 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Erroneous User Interrupts

Panu Viljamaa-3
Every time I try to open a Class Hierarchy Browser
in my D.5.1 on W2K  image I get a User Interrupt
-dialog to pop up.

  Looking at the debugger the stack looks something
like the following:

  ProcessorScheduler>>callback: cookie evaluate: aNiladicBlock
  InputState>>wndProc: hWnd message: message wParam: wParam ...
  TreeView>>defaultWindowProcessing: message wParam: wParam lParam:  ...
  ...
  TreePresenter>>expand
  ClassBrowserShell>>updateCategories
  ...


I didn't change those classes above, so I wonder what
is going on, and what  can I do to get rid of this strange
behavior. I already went to the backup image, but the same
thing occurs there as well.

It seems the image is 'screwed up' and I have no easy
way to recover my work. I can open the change-log, but
then I cant' really choose a large section of the log
and say 'file in' because there are so many intervening
expression  evaluations which now cause an error because
variables like 'self' now refer to something else.


Also, I wonder if there's an easy way to print the stack
out on the Transcript, from within the debugger, saying
something like 'Process current stack do:   ...' etc.
I could then give you guys a better picture of what is
going on with the 'User Interrupt' above.


Thanks Again
-Panu Viljamaa


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Panu Viljamaa-3
panu wrote:

> Also, I wonder if there's an easy way to print the stack
> out on the Transcript, from within the debugger, saying
> something like 'Process current stack do:   ...' etc.


Ok, I found this one out too, pretty nifty.
I evaluate: (Process allInstances  at: 5) stackTrace: 55
and out comes the following, showing the state of
the process that gives me a 'User Interrupt' -dialog
every time I try to open a class-hierarchy browser.

If anybody has any ideas what to think of this,
that would be great.

Thanks
-Panu Viljamaa

'Debugger>>suspendProcess
Process>>debug:topFrame:resumable:
Process>>walkback:topFrame:resumable:
DevelopmentSessionManager>>unhandledException:
DevelopmentSessionManager(SessionManager)>>onUnhandledError:
Signal>>defaultAction:
RaisedSignal>>defaultAction
RaisedSignal(Exception)>>_propagateFrom:
RaisedSignal(Exception)>>_propagate
RaisedSignal(Exception)>>signal
Signal>>signal
DevelopmentSessionManager(SessionManager)>>onUserBreak
ProcessorScheduler>>userBreak:
[] in ProcessorScheduler>>vmi:list:no:with:
BlockClosure>>ifCurtailed:
ProcessorScheduler>>vmi:list:no:with:
ListView(IconicListAbstract)>>nmGetDispInfo:
ListView>>nmNotify:
ReferenceView(View)>>wmNotify:wParam:lParam:
ReferenceView(View)>>dispatchMessage:wParam:lParam:
[] in InputState>>wndProc:message:wParam:lParam:cookie:
BlockClosure>>ifCurtailed:
ProcessorScheduler>>callback:evaluate:
InputState>>wndProc:message:wParam:lParam:cookie:
ListView(ControlView)>>defaultWindowProcessing:wParam:lParam:
ListView(ControlView)>>wmPaint:wParam:lParam:
ListView(View)>>dispatchMessage:wParam:lParam:
[] in InputState>>wndProc:message:wParam:lParam:cookie:
BlockClosure>>ifCurtailed:
ProcessorScheduler>>callback:evaluate:
InputState>>wndProc:message:wParam:lParam:cookie:
ShellView(View)>>defaultWindowProcessing:wParam:lParam:
ShellView(View)>>dispatchMessage:wParam:lParam:
[] in InputState>>wndProc:message:wParam:lParam:cookie:
BlockClosure>>ifCurtailed:
ProcessorScheduler>>callback:evaluate:
InputState>>wndProc:message:wParam:lParam:cookie:
ShellView(View)>>defaultWindowProcessing:wParam:lParam:
ShellView(View)>>dispatchMessage:wParam:lParam:
[] in InputState>>wndProc:message:wParam:lParam:cookie:
BlockClosure>>ifCurtailed:
ProcessorScheduler>>callback:evaluate:
InputState>>wndProc:message:wParam:lParam:cookie:
InputState>>pumpMessage:
InputState>>loopWhile:
InputState>>mainLoop
[] in InputState>>forkMain
ExceptionHandler(ExceptionHandlerAbstract)>>markAndTry
[] in ExceptionHandler(ExceptionHandlerAbstract)>>try:
BlockClosure>>ifCurtailed:
BlockClosure>>ensure:
ExceptionHandler(ExceptionHandlerAbstract)>>try:
BlockClosure>>on:do:
[] in BlockClosure>>newProcess'


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Chris Uppal-3
In reply to this post by Panu Viljamaa-3
panu wrote:

> It seems the image is 'screwed up' and I have no easy
> way to recover my work. I can open the change-log, but
> then I cant' really choose a large section of the log
> and say 'file in' because there are so many intervening
> expression  evaluations which now cause an error because
> variables like 'self' now refer to something else.

I haven't looked at the stack trace you posted (not yet anyway), but here's a
tip for all Dolphin users.

If you haven't got a copy of Ian Bartholomew's "Chunk Browser" already then you
/need/ to get it.  It's a tool for looking at the contents of a change log (or
any other file in chunk format, such as .PAC files), and allows you to compare
the definitions with what's in the current image, filter the definitions in
various ways, and to file them in selectively.   It, and Ian's profiler are
/necessary/ additions to any Dolphin programmer's toolkit.  See

    http://www.idb.me.uk/goodies.html

(Ian has other good stuff too, but the above two are, quite simply,
indispensible.)

    -- chris


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Andy Bower-3
Panu,

> > It seems the image is 'screwed up' and I have no easy
> > way to recover my work. I can open the change-log, but
> > then I cant' really choose a large section of the log
> > and say 'file in' because there are so many intervening
> > expression  evaluations which now cause an error because
> > variables like 'self' now refer to something else.
>
> I haven't looked at the stack trace you posted (not yet anyway), but
> here's a tip for all Dolphin users.
>
> If you haven't got a copy of Ian Bartholomew's "Chunk Browser"
> already then you /need/ to get it.  It's a tool for looking at the
> contents of a change log (or any other file in chunk format, such as
> .PAC files), and allows you to compare the definitions with what's in
> the current image, filter the definitions in various ways, and to
> file them in selectively.   It, and Ian's profiler are /necessary/
> additions to any Dolphin programmer's toolkit.  See
>
>     http://www.idb.me.uk/goodies.html
>
> (Ian has other good stuff too, but the above two are, quite simply,
> indispensible.)

Chris is right, and you should be able to use the ChunkBrowser to
import your changes into a new image (remember to save the .chg file
before overwriting it with the fresh image). make sure you read the
ChunkBrowser documentation page and use the "Last Chunk" button to only
show the latest changes in the image. You may also want to filter out
ordinary evaluation chunks to only get the code changes.

However, once you have (hopefully) got your work back, PLEASE start to
arrange it into packages so you can export it from the image. I am a
big proponent of using the image wherever possible (as regular readers
will know) but it is not safe place to store your work long term. You
MUST export stuff as packages and, ideally, check these into a change
control system. An alternative would be to use David Gorisek's STS
(www.gorisek.com) to archive changes longterm.

I'm not saying that Dolphin is buggy and liable to trash your image at
any time (as far as I'm aware it isn't). However, is is relatively easy
to make subtle accidental changes to the system (e.g. via a workspace
or via changes to the system code) that may *later* show up as a
trashed image. This is why saving a backup of the image is not
sufficient protection since the hidden damage may already have been
done when the backup is created.

Best regards

Andy Bower
Dolphin Support
www.object-arts.com


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Chris Uppal-3
In reply to this post by Panu Viljamaa-3
panu wrote:

> Also, I wonder if there's an easy way to print the stack
> out on the Transcript, from within the debugger, saying
> something like 'Process current stack do:   ...' etc.
> I could then give you guys a better picture of what is
> going on with the 'User Interrupt' above.

There are two ways to get a stack trace (beyond the one you've already found).
One is to press the 'Copy' button in the walkback dialog which will copy the
stack trace text to the system clipboard.  The other is to open your
<image-name>.errors (in the same folder as your image) which is just a text log
of the stack traces from every error since you started your image (or last
deleted the file).

The rest of this is pure speculation...

Looking at the two stack traces you posted, they don't seem to be the same.  I
suspect (but may be wrong) that part of what's happening is that the spurious
interrupts are (somehow) being generated and that it is just chance what
Dolphin is doing at the time when it next 'notices' them.  So the stack
trace(s) itself may not be very helpful.

A few questions:

What happens if you just resume when the interrupt happens ?  Does it continue
to work OK afterwards, or do you get an endless stream of these interrupts, or
what ?

What happens if you open some other browser/tool window ?  Especially the
System Browser ?  If that works then maybe you could use that to put your
remaining code into packages before starting a fresh image.  I suspect that it
won't work, though...

I'd be tempted to try killing the 'Idler' process from the Process Monitor tool
(the system will start a new Idler), to see if that fixes it.  I doubt it if
would, but...

Also, if you evaluate:

    UserLibrary default getAsyncKeyState: VK_CANCEL

from a workspace, does it answer 0 ?  (VK_CANCEL is defined in the
'Win32Constants' PoolConstantsDictionary which you can add to the workspace's
scope using the Workspace=>Pools... menu command.  Or just use 3 instead ;-)

    -- chris


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Schwab,Wilhelm K
In reply to this post by Andy Bower-3
Andy, Panu,

> However, once you have (hopefully) got your work back, PLEASE start to
> arrange it into packages so you can export it from the image. I am a
> big proponent of using the image wherever possible (as regular readers
> will know) but it is not safe place to store your work long term. You
> MUST export stuff as packages and, ideally, check these into a change
> control system. An alternative would be to use David Gorisek's STS
> (www.gorisek.com) to archive changes longterm.

If you "insist" on keeping images alive for a long period of time, then
a few things will help to keep you out of trouble:

(1) Make backups (source, image, changes together), and so so regularly.
  "Regularly" might be twice a day or once per month, depending on how
aggressively you are making changes.

(2) Learn what is most commonly dangerous, and avoid saving a problem.
In my book, those things are new/changed external interfacing code, and
anything up through and including #onViewOpenened in presenter startup.
  I recommend getting ready to test, including workspace statements to
make it go, then backup, and then carefully sneak up on the problem.  If
it fails, use the debugger to learn something, then exit w/o saving,
reload, and try to fix it.  Repeat until it works.

(3) NEVER save an image that has thrown up the (feared) primitive 2 GC
error.  I haven't seen one of those in a long time, but it means that
you have stomped on something important, and the image will likely be
useless.

The backups are big, but you can perhaps scare up an old computer
(people are tossing >500MHz machines now) with an old CDR (people seem
to have no use for those slow 4x things anymore) and an $80 hard drive
(look for cheap but bigger than you think you might need).  Mix well,
and you have bit bucket that will serve you for a while.  I have
typically used Zip drives to move files to such a machine, but $30 will
now get you a USB drive that will hold more than one zipped backup.  The
goal is to make CDs with your backups, and then disperse them as needed
(home, office, safe deposit box) to protect your work.

That is not to say that you should not pay attention to packaging.
Ensuring that they can save, and fixing them if they cannot, is part of
good maintenance too.


> I'm not saying that Dolphin is buggy and liable to trash your image at
> any time (as far as I'm aware it isn't). However, is is relatively easy
> to make subtle accidental changes to the system (e.g. via a workspace
> or via changes to the system code) that may *later* show up as a
> trashed image. This is why saving a backup of the image is not
> sufficient protection since the hidden damage may already have been
> done when the backup is created.

Very true, but if that is case, then the backup from two weeks earlier
is perhaps ok.  In the few situations that I have had to do a rollback
like that, it's been fairly easy to decide whether the backup was sound,
because I had a particular task (whatever exposed the problem) in mind.

BTW, Dophin is _not_ buggy :)

Have a good one,

Bill


--
Wilhelm K. Schwab, Ph.D.
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

David Gorisek-5
In reply to this post by Andy Bower-3
Just adding here that you will find more information about STS on our
wiki at:

http://wiki.gorisek.com

Packages make good practice because they force you to think about
prerequisites and how to group classes into higher abstractions and
components.

Also, if you are using #perform: with class factories a lot, then it is
almost essential that you have package prerequisites right to ensure
that your code is working right when deployed.

Best regards,

David Gorisek


Andy Bower wrote:
...
> However, once you have (hopefully) got your work back, PLEASE start to
> arrange it into packages so you can export it from the image. I am a
> big proponent of using the image wherever possible (as regular readers
> will know) but it is not safe place to store your work long term. You
> MUST export stuff as packages and, ideally, check these into a change
> control system. An alternative would be to use David Gorisek's STS
> (www.gorisek.com) to archive changes longterm.
>
...

>
> Best regards
>
> Andy Bower
> Dolphin Support
> www.object-arts.com


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Panu Viljamaa-3
In reply to this post by Chris Uppal-3
Chris Uppal wrote:


>
> What happens if you just resume when the interrupt happens ?  Does it continue
> to work OK afterwards, or do you get an endless stream of these interrupts, or
> what ?

It did continue ok.

However, the problem went completely away after I rebooted.
I find this curious. It was not enough to exit the image
without saving and come back. The problem disappeared
only after rebooting.

I did duplicate the problem several times before rebooting though,
and indeed it seems msot od the satck was different in different
times. Whatever the GUI-code was doing, at some point this interrupt
appeared, and was interpreted by Dolphin as a "User Interrupt".

Thanks for the help
-Panu Viljamaa


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Panu Viljamaa-3
In reply to this post by Andy Bower-3
Andy Bower wrote:


> However, once you have (hopefully) got your work back, PLEASE start to
> arrange it into packages so you can export it from the image.

I do have /several/ packages. I'm used to working that way,
and maybe that's the problem. When I try to start again
from a backup- or virgin image, it's hard to know which
packages I need to load, and in which order. And any way
it is a lot of work to load each of those packages
individually.

  So, maybe the best practice in Dolphin would be
  "Keep all your work in single package" !?

Some may suggest "create and maintain a script" that
loads the latest versions of all packages in the correct
order.  I actually once did this in D4, but now I have
a different set of packages, saved in different places,
and the script assumed the existence of some packages
which no longer are loaded, etc.  And why should I need
to script, when I have a Smalltalk IDE!

My point is: Users shouldn't have to re-invent
the wheel of how to make Dolphin a productive
environment that guards against loss of work
in case of crashes. It should be part of the
environment we pay for. We should be programming
other applications than 'crash recovery support'
already.

I know there are some 3rd party tools for source-code
management available. My concern with these is that
if the base platform is not very stable, what's the
effect of adding more components to it. If there
are good solutions provided by 3rd parties, O-A should
recommend these officially, to let us know which ones
are safe to use.

So pardon this little impatience from my part.
Right now, even  the 'Panic Button' no longer works
(but hangs) in my  Dolphin 5.1 image!  To exit the image,
I need to use Windows task-manager. Rebooting brings
no help.

The reason I bring these points up is not to say that
Dolphin is a bad product, but in the hope that there
will be some serious considerations to add better
stability and better, more usable tools for crash
recovery in Dolphin 6.

Thanks
-Panu Viljamaa

P.S.
I discovered this useful trick which might help others:
I modified to method #logEvaluate:  to do nothing.
Now expressions evaluated in the debugger etc. don't
go into the change-log, which makes it possible to file
in the latest set of changes without being interrupted
by attempts to evaluate expressions that no longer
work in the context of the file-in.


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Schwab,Wilhelm K
Panu,

> I do have /several/ packages. I'm used to working that way,
> and maybe that's the problem. When I try to start again
> from a backup- or virgin image, it's hard to know which
> packages I need to load, and in which order. And any way
> it is a lot of work to load each of those packages
> individually.

It's a lot more work when one has 140 or so packages =:0  Actually,
Dolphin's package mamagement has improved a great deal over time.  Re
robustness, they are no longer (comparatively) easily corruptable binary
data; instead, they are text that can be minded for valuable code if the
file as a whole has had it.

Re load order, Dolphin attempts to find and load prerequisiste packages.
  If anything, I would like to have an option to disable that feature
for scripting; that way, I would know when the script indeed loads all
packages and in a correct order.  When working through the package
browser, transparently loading the prerequisites is quite helpful.



>  So, maybe the best practice in Dolphin would be
>  "Keep all your work in single package" !?
>
> Some may suggest "create and maintain a script" that
> loads the latest versions of all packages in the correct
> order.  I actually once did this in D4, but now I have
> a different set of packages, saved in different places,
> and the script assumed the existence of some packages
> which no longer are loaded, etc.  And why should I need
> to script, when I have a Smalltalk IDE!

I don't think you do need to script, particularly with such a small
number of packages.

A quick search of the newsgroup (keyword bonkers - sorry Andy<g>) will
reveal the polarized nature of the users.  We have very different
approaches (with half lives of our images ranging from minutes to
months), so one tool isn't going to make us all completely happy.

I have Migrate, which you are of course welcome to try.  I wrote it when
such a tool was almost essential.  Now, I'm not so certain I would
bother to create it, but since I have it, I use it.  One of its main
goals is to write a load script for the next image using the current
image as a reference.  It also keeps track of things that I didn't want
to package or had to modify.  Finally, it tweaks some things that I find
very tedious to do manually.  The latter is important because I never
which time I build the image will be the point from which I take off on
the new version.


> I know there are some 3rd party tools for source-code
> management available. My concern with these is that
> if the base platform is not very stable, what's the
> effect of adding more components to it. If there
> are good solutions provided by 3rd parties, O-A should
> recommend these officially, to let us know which ones
> are safe to use.

Dolphin is very stable.  MySQL is too, but I still take snapshots of
databases.  A big portion of my work is based on Dolphin in one way or
another, and so I protect my source code.  Others do the same, and we
have divergent opinions no how to do it.  I am not aware of an unsafe
option (other than trusting only the saved image); if people have been
burned by something, they should bring it to the attention of this group.



> So pardon this little impatience from my part.
> Right now, even  the 'Panic Button' no longer works
> (but hangs) in my  Dolphin 5.1 image!  To exit the image,
> I need to use Windows task-manager. Rebooting brings
> no help.
>
> The reason I bring these points up is not to say that
> Dolphin is a bad product, but in the hope that there
> will be some serious considerations to add better
> stability and better, more usable tools for crash
> recovery in Dolphin 6.

I have gotten into similar spots, and have had to retreat a bit at
times.  An old saying (I seem to be overflowing with them today): "The
difference between a wise man and a fool is that the fool's mistakes
never teach him anything".  I am _not_ casting you in the role of the
fool.  However, a Smalltalk system cannot be what it is (live,
interactive, reflective, open to change) without putting the programmer
at risk of learning from mistakes.

Good luck with recovering your work!

Bill


--
Wilhelm K. Schwab, Ph.D.
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Louis Sumberg-2
In reply to this post by Panu Viljamaa-3
FWIW, a few miscellaneous comments.

>... it's hard to know which
> packages I need to load, and in which order.

It seems that Dolphin will take care of the "which order" part, i.e., it
will automatically load in pre-requisite packages (or prompt for their
location if it can't find them).

The best tip I've recently found for keeping my image stable is to make sure
there are no "hidden" windows before I save the image.  This is easily done
by choosing the Windows menu (in any Dolphin window) and clicking on any
entry that indicates it is hidden.  (The System Transcript is an exception
and is ok.)  Maybe I've been lucky or maybe I haven't been doing much fancy
programming lately, but I've been working with the same image for at least
several months.

I'm also a user - and fan - of STS.  Before I save a package I always
compare what's in the image to the most recently saved version.  This is
easily done with STS, as is looking at previous versions of a particular
method (and restoring them).  On more than one occasion I've made a zillion
changes to a package, not written unit tests (shame on me) and found the app
doesn't work right a few versions down the road.  Using STS has made it
easier to rollback the changes or compare versions and remake the changes
incrementally, isolating where the problem is.  In other words, I'm more
confident that if I break something I can find the problem and fix it.

Now, having praised STS, David, if you're reading this, I'll reask a
question from some time ago.  Is there a way to compress the STS disk files?
They do get verrry large and discourage me from backing them up as
frequently as I'd like to.  By compressing, I mean truly getting rid of
everything that isn't needed - e.g., right now if I purge a package (or even
a method), it seems to delete it from STS, but the disk files don't get any
smaller.

-- Louis


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Udo Schneider
Louis Sumberg wrote:
> Now, having praised STS, David, if you're reading this, I'll reask a
> question from some time ago.  Is there a way to compress the STS disk files?
> They do get verrry large and discourage me from backing them up as
> frequently as I'd like to.  By compressing, I mean truly getting rid of
> everything that isn't needed - e.g., right now if I purge a package (or even
> a method), it seems to delete it from STS, but the disk files don't get any
> smaller.

I'm always forcing a garbage collect/reorganize on my STS repositries.
Something like:

OmniBase allInstances do: [ :each | each garbageCollect]

or even

OmniBase allInstances do: [ :each | each reorganize]


And always remember to backup first (using file copy or #createBackupOn:
  - see
http://wiki.gorisek.com/WikiDoc/WikiPage?page=OmniBase+Administration&lang=English).

However - I'm not sure whether this approach works with the
non-registered (e.g. STS-"only") OmniBase version.

CU,

Udo


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

David Gorisek-5
In reply to this post by Louis Sumberg-2
Louis,

regarding STS repository size there were two problems which people
reported in the past.

1. Repository database is too big for doing backup.
2. Versioning of code becomes slow when repository is really big.

The solution to those problems is the following:


Regarding 1: Instead of backing up the whole repository I would
recommend that you only export new versions of your project(s) and
backup these. You can use repository export functionality and export a
project version as a compressed XML file (.PEZ) which contains all
versions of package in a single file. This can be done with a single
mouse click.

If you later lose your repository you can recover your code by
installing STS again, then create new repository and import the .PEZ
file which you have in your backup.

Regarding 2: The current version of STS keeps track of loaded versions
of classes in the image and does not do code comparison upon versioning
anymore. This results in significant speed improvements so that
repository growth is not a problem anymore.

Also, with today's hard disks it does not really matter if the
repository is 100 or 300 MB.

However there are still possibilities for shrinking repository. Let me
list some:

1. Run OmniBase garbage collection, this will remove all unreferenced
objects from the database plus remove old versions of objects. Because
STS is mainly adding objects and not changing or removing existing
objects this wont do much.

2. Use STS "purge" functionality to remove unused package editions. This
  will remove the package edition from the repository, but it wont
remove class and method editions because these are still referenced from
the main list of class and method editions. However, this spring we've
added an additional check to the purge function so that it will search
for all references to contained class editions and if there are none it
will remove references to class editions too. So after doing GC these
objects are removed from files. NOTE: this and 1. will only work with
full functionality version of OmniBase.

3. Rebuild the repository by creating a new repository and import the
most current versions of project from the old repository.

Best regards,

David Gorisek



Louis Sumberg wrote:

>
> Now, having praised STS, David, if you're reading this, I'll reask a
> question from some time ago.  Is there a way to compress the STS disk files?
> They do get verrry large and discourage me from backing them up as
> frequently as I'd like to.  By compressing, I mean truly getting rid of
> everything that isn't needed - e.g., right now if I purge a package (or even
> a method), it seems to delete it from STS, but the disk files don't get any
> smaller.
>
> -- Louis
>
>
>


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Louis Sumberg-2
In reply to this post by Udo Schneider
Hi Udo,

Thanks for the response.  Unfortunately, I get a DNU for both
#garbageCollect and #reorganize.  Obviously these are in the Omnibase
database product, not in the STS-only product.

-- Louis


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Louis Sumberg-2
In reply to this post by David Gorisek-5
Hi David,

Thanks for your response.  Unfortunately, it looks like what I want is only
available if I buy the full Omnibase product, which I can't justify for
myself for this one piece of functionality.  I'm surprised and a bit
disappointed though, that the 'purge' function in STS does not truly (truly
to me, at least) purge the buggers.

I agree that 100MB or 300MB is not a huge file, but my repository quickly
goes over 500MB, especially if I initially version all OA classes, which is
the STS default, and version all goodies.  When I start getting a 600MB or
bigger file, it does make backups a little slower, so I don't backup the
whole repository as often as I'd like to.

Regarding your suggestion to use .pez files, I don't often use STS
Projects - in fact, I think I've only used these when Steve Waring and I
were working on the Windows Shell packages.  More important though is that I
like the repository approach - though it's not a single file, it appears to
be one, and I don't need to be micro-managing source files.  Everything just
goes into the repository, can't get much easier than that.

What I've tended to do is that when the repository gets pretty huge, I
rebuild it, essentially following your last suggestion, importing only the
latest versions of my own packages, and in general not versioning all the OA
classes and goodies.  However, this has the drawback that when I make a
change to someone else's method, I can't really use STS' compare or easily
rollback the change.  It also means I've lost the history of my own classes,
which has bit me on more than one occasion.

One more drawback to purge not truly purging is that if I version someone
else's package, it puts my name on all the methods etc.  When I make changes
to that package, it's not necessarily obvious which version of a method is
mine or theirs.  If I try to purge the initial version and import it,
importing allowing me to specify the package author's name, STS recognizes
that the methods et al are still somewhere in the repository and unpurges
the ones I'd wanted to purge, so I'm back to where I started.

Obviously I've learned to live with this all and I recommend STS, but still,
I think purge is a little weak in what it does.

-- Louis


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Chris Uppal-3
In reply to this post by Panu Viljamaa-3
panu wrote:

> Some may suggest "create and maintain a script" that
> loads the latest versions of all packages in the correct
> order.  I actually once did this in D4, but now I have
> a different set of packages, saved in different places,
> and the script assumed the existence of some packages
> which no longer are loaded, etc.

So write a script that /generates/ a script.  That's what I do (though it's
actually part of one of my own tools, not a separate script).  It looks to see
what packages are loaded, arranges them in pre-requisites order, and then
writes code to install those packages files in that order.  Simple enough.  I
also have scripts (or rather, tools) that generate scripts that will check for
clashes without loading the packages.  Etc...

Or, if that's too much work, just define an empty package 'Working Set' that
includes all your working packages as (manual) pre-requisites.  Load that, and
the system will load everything else for you.


> And why should I need
> to script, when I have a Smalltalk IDE!

And why should you complain of missing "features", when you are a programmer
using one of the most highly-programmable environments in existence !


> My point is: Users shouldn't have to re-invent
> the wheel of how to make Dolphin a productive
> environment that guards against loss of work
> in case of crashes. It should be part of the
> environment we pay for. We should be programming
> other applications than 'crash recovery support'
> already.

I think it'd be a good idea to have an option on the package browser --
generate a script to load the current / the selected set of packages (in the
correct order).  Very easy for you to add the option yourself, but I think it'd
be generally useful enough for OA to consider adding it to the base system (if
anyone from OA's still reading this ;-).


> I know there are some 3rd party tools for source-code
> management available. My concern with these is that
> if the base platform is not very stable, what's the
> effect of adding more components to it.

Eh?  "not very stable" ??  It seems stable enough to /me/.


> P.S.
> I discovered this useful trick which might help others:
> I modified to method #logEvaluate:  to do nothing.
> Now expressions evaluated in the debugger etc. don't
> go into the change-log, which makes it possible to file
> in the latest set of changes without being interrupted
> by attempts to evaluate expressions that no longer
> work in the context of the file-in.

Have you /looked/ at the Chunk Browser yet ?

    -- chris


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Chris Uppal-3
In reply to this post by Panu Viljamaa-3
panu wrote:

> It did continue ok.
>
> However, the problem went completely away after I rebooted.
> I find this curious.

To me this sounds like a Windows/keyboard driver problem rather than a Dolphin
thing.  If Windows is convinced that the relevant key is being pressed, then
there's nothing that Dolphin can do except believe it...

(Incidentally, from experience, it is /really/ difficult for an OS/keyboard
driver to ensure that it never looses a key-up event.  You end up putting all
sorts of hacks into the software to say "well, if we've seen <such-and-such>
but we still think <some key> is down, then there must have been a key-up that
we've missed.  Even so, you can't make it completely reliable, and even modern
XP is still capable of missing a key-up.  Just a few months ago it happened to
this machine, and Window's was convinced that I was holding the <control> key
down, even though I wasn't.  It's usually sufficient to press and release the
"stuck" key again, if you can work out which it is, to bring the OS back to its
senses)

    -- chris


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Andy Bower-3
In reply to this post by Chris Uppal-3
Chris et al,

> I think it'd be a good idea to have an option on the package browser
> -- generate a script to load the current / the selected set of
> packages (in the correct order).  Very easy for you to add the option
> yourself, but I think it'd be generally useful enough for OA to
> consider adding it to the base system (if anyone from OA's still
> reading this ;-).

Still reading...

Best regards

Andy Bower
Dolphin Support
www.object-arts.com


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Schwab,Wilhelm K
In reply to this post by Chris Uppal-3
Chris,

> So write a script that /generates/ a script.  That's what I do (though it's
> actually part of one of my own tools, not a separate script).  

Is this something that you have or are willing to make available?


 > It looks to see
> what packages are loaded, arranges them in pre-requisites order, and then
> writes code to install those packages files in that order.  

Migrate at least attempts to do that.  I suspect that it does not work
quite correctly.  Dolphin covers for it, so I suppose the net result is
that it works :)


 > Simple enough.

Really =:0


 > I
> also have scripts (or rather, tools) that generate scripts that will check for
> clashes without loading the packages.  Etc...

That is interesting too.  I was content to do that in the "next" image,
which is arguably where it counts - OA might have changed something that
causes or fixes a name collision in D(n+1) which did not exist in Dn.

My approach is to "just try it" and let a walkback appear if there is a
problem.  I usually fix problems in the "old" image and then make
another attempt in the new image; when the latter builds cleanly,I'm
done.  On thing that I don't like is that the final state of any
version's image is usually a compromise to the get the next one to
build.  Of course, I make backups before butchering anything.

Have a good one,

Bill


--
Wilhelm K. Schwab, Ph.D.
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: Erroneous User Interrupts

Schwab,Wilhelm K
In reply to this post by Andy Bower-3
Andy,

>>I think it'd be a good idea to have an option on the package browser
>>-- generate a script to load the current / the selected set of
>>packages (in the correct order).  Very easy for you to add the option
>>yourself, but I think it'd be generally useful enough for OA to
>>consider adding it to the base system (if anyone from OA's still
>>reading this ;-).

I would like second Chris' request, and add that there should be a way
to get it to print the script on a stream, or perphaps return a
collection of package instances.  In particular, it should not force one
to open a workspace or a particular tool to get the list of packages.
Any such tool (I look forward to seeing what you will create) would
hopefully share the forementioned entry point.

Migrate includes some testing on the package tree, complete with unit
tests - please borrow/steal as you see fit (I did<g>).  On a more
serious note, the tests are not based on any other work; they are "mine"
and you are welcome to them.  The package ordering in Migrate is a
modified version (aka stolen from) something stolen from VW, or
something like that.  There might be a layer that I am forgetting, but
the point is that I found some code and made it work.


> Still reading...

Most vendors would not be.

Have a good one,

Bill

--
Wilhelm K. Schwab, Ph.D.
[hidden email]


12