On Wed, Mar 30, 2011 at 6:12 AM, Henrik Johansen <
henrik.s.johan...@veloxit.no> wrote:

>
> On Mar 30, 2011, at 7:13 23AM, Daniel Lyons wrote:
>
>
> On Mar 29, 2011, at 6:17 PM, Martin Dias wrote:
>
> I have a couple of algorithms and I want to show the progress while they
> run. I played with the progress bar and it's okay for my needs.
>
> The progress bar should be pluggable and decoupled of the algorithms.
>
> I am writing to you to ask about good designs for my problem. I hope I
> haven't expressed the problem in a too abstract way.
>
> The design I have in mind is a kind of observer pattern: the serialization
> algorithm publishes information about the run; a specific listener
> implements the progress bar for that serialization algorithm, interpreting
> the information published.
>
>
> I'm a newcomer here, so I'm sharing my experience with non-Smalltalk
> systems and my best guess what would constitute good designs. I hope other
> real Smalltalkers will poke some holes in this and point out the right way
> to do things! ;)
>
> The simplest design, IMO, would be this API:
>
> MyProgressBar>>percentComplete: aNumber
> MyProgressBar>>beIndeterminant
> MyProgressBar>>beDeterminant
>
> You would manually invoke percentComplete: with a new percent complete each
> time you want to advance the progress bar. I've seen this kind of thing in
> practice somewhere. Maybe it was Cocoa?
>
> The next level of abstraction would be to go a bit more jQuery UI and
> remove percentComplete: and use this instead:
>
> MyProgressBar>>maximum: anInteger
> MyProgressBar>>current: anInteger
>
> Now you'll calculate the progress bar based on some quantity of "tasks" you
> want to do. You could even go further and just have:
>
> MyProgressBar>>incrementProgress
>
> instead of letting your clients tell you which one they're on. That would
> prevent progress bar relapse. Either of these would be easy to implement on
> top of the above API using percent.
>
> The simplest observer-type pattern would be to rely on the built-in
> observer/event system and use the stuff from Object's updating protocol or
> events-registering or events-triggering. I don't know which one of these is
> modern or preferred. Anybody? :) At any rate, they make it possible to
> expose a simple object/message protocol as in Polymorph, where your progress
> bar widget would be listening for change notifications from your domain
> object. Then you can ask the same questions about your model as above, in
> terms of whether you want to work in terms of simply percent complete or N/M
> or what.
>
> Another question is whether or not you want to provide a string message
> status to go under the progress bar.
>
> Does this help at all, or did I miss the point?
>
> —
> Daniel Lyons
>
> I've used Announcements for this in the past, and liked it quite alot.
>
> I will take a look on that.


> - Worker announces WorkCompleted or some such.
> Announcement holds details of the work it's done, in my case different
> properties of an analysis like leak rate, .
>
> - GUI/Client is set up before analysis starts, and initialized with the
> total work to be done.
> Annnouncement handling contains code to estimate how much progress the Work
> indicated by it was of the overall total.
>
> I also used a different client which provided ETA based on a more
> sophisticated analysis of the Work announcements.
>

Wow! I don't need to estimate time but it's very interesting think on that.


>
> Needless to say, there's no hard dependency on a UI in such a scheme, as
> there simply won't be any clients instantiated if you run headless. (well,
> unless you make one writing to stdout or something)
>
> Not sure what would be reasonable to put in a Work-annnouncement intended
> as superclass for custom solutions...
> In other words, the downside is that this approach doesn't lead to
> something you can use out-of-the-box, you always have to do some
> customization, either/both to what data you provide, or/and to how you give
> feedback.
> (In this case, a  standard widget using the simplest design you described
> is preferrable, btw, the pluggability is done at a different level than the
> widget)
>
> In this moment I am interested in a simple solution, I will not write a
framework, but I like the discussion. Thanks!


> Cheers,
> Henry
>

Reply via email to