Bob Dickenson | 4 Jul 12:03
Picon

additions to SimPy wiki.....

I've been aware of SimPy for a number of years and have recently started to actively learn the feature set.   Many problem domains I'm interested in would require simulation objects which do more that one thing at a time....so I've also been aware of the example that Klaus had posted for the Duck quacking and flying.

As part of my active learning,  I converted the Duck example to the new OO API.   It was a bit tricky getting the "zen" with simInstances usage in particular,  so I've posted the converted example on the wiki to help anybody else who is in the learning stage.

I then extended the example so that the Duck had a chance to survive by parameterizing the hunter to be less than perfectly accurate on a shot, have limited ammunition, and get limited shots at a duck.

After than I extended THAT extension by adding a DuckFactory process to create a flock of ducks and added a second hunter.

All three examples are posted on the wiki as sections 4,5,6 here : http://www.mcs.vuw.ac.nz/cgi-bin/wiki/SimPy?SimPyHints

I had some fun doing this and hope it helps some others up the learning curve.

I'm thinking about doing some of the following:   adding a HunterFactory, modifying Hunters to also be multiple process containers (like the Duck) and have them eat from stores of food, drink from levels of water, and (having known a few hunters)- "other beverages".  Food/water stores would eventually be exhausted.  So would "other beverages" but consumption there also could dynamically affecting their accuracy in shooting and give another interesting wrinkle in the simulation.  Might be interesting to add some factors to add to the side-effect of steel shot build-up in the lake as a result of hunters missing their targets also.


--
Bob Dickenson

------------------------------------------------------------------------------
_______________________________________________
Simpy-users mailing list
Simpy-users <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simpy-users
Klaus G. Muller | 5 Jul 07:14
Picon
Picon
Favicon

Re: additions to SimPy wiki.....

Dear Bob,
Thank you for your contributions on the wiki. It really helps the 
community to get inputs like yours.

The Duck example is intended to show the "has-a" approach ("has a 
Process"), instead of the use of inheritance, i.e. "is-a" ("is a 
Process"). That allows an object to have any number of processes.

I like your conversion of the Duck example to the OO API! There are a 
few modifications which are necessary, though. "activate" and "simulate" 
are methods of class Simulation, and "Process" objects need to have 
their "sim" attribute initialized. We clearly need to work on the OO 
documentation and integrate it with all other SimPy documentation. In 
the meantime, you can use the "SimPy’s Object Oriented API " document. 
<Manuals/SimPyOO_API.html>
** <Manuals/SimPyOO_API.html>
Here is your first example with those modifications:

###############################
from SimPy.Simulation import *

from random import random

class Duck:
def __init__( self, name ):
self.name = name
self.quack = Quack( self , sim=sim)
sim.activate( self.quack, self.quack.quack() )
self.fly = Fly( self , sim=sim )
sim.activate( self.fly, self.fly.fly() )
def kill( self ):
Process().cancel( self.quack )
Process().cancel( self.fly )

class Quack( Process ):
def __init__( self, owner , sim):
Process.__init__( self , sim=sim)
self.owner = owner
def quack( self ):
while True:
print "%10.2f %s quacks" % ( self.sim.now(), self.owner.name )
yield hold, self, random()*10

class Fly( Process ):
def __init__( self, owner , sim):
Process.__init__( self , sim)
self.owner = owner
def fly( self ):
while True:
print "%10.2f %s flies" % ( self.sim.now(), self.owner.name )
yield hold, self, random()*10

class Hunter( Process ):
def kill( self ):
yield hold, self, random()*200
d.kill()
print "%10.2f hunter kills %s" % ( self.sim.now(), d.name )
sim = Simulation()
d = Duck( "my first duck" )
h = Hunter( sim=sim )
sim.activate( h, h.kill() )
sim.simulate( until = 500 )
###############################

Happy duck hunting!

Klaus Muller

Bob Dickenson wrote:
> I've been aware of SimPy for a number of years and have recently 
> started to actively learn the feature set. Many problem domains I'm 
> interested in would require simulation objects which do more that one 
> thing at a time....so I've also been aware of the example that Klaus 
> had posted for the Duck quacking and flying.
>
> As part of my active learning, I converted the Duck example to the new 
> OO API. It was a bit tricky getting the "zen" with simInstances usage 
> in particular, so I've posted the converted example on the wiki to 
> help anybody else who is in the learning stage.
>
> I then extended the example so that the Duck had a chance to survive 
> by parameterizing the hunter to be less than perfectly accurate on a 
> shot, have limited ammunition, and get limited shots at a duck.
>
> After than I extended THAT extension by adding a DuckFactory process 
> to create a flock of ducks and added a second hunter.
>
> All three examples are posted on the wiki as sections 4,5,6 here : 
> http://www.mcs.vuw.ac.nz/cgi-bin/wiki/SimPy?SimPyHints
>
> I had some fun doing this and hope it helps some others up the 
> learning curve.
>
> I'm thinking about doing some of the following: adding a 
> HunterFactory, modifying Hunters to also be multiple process 
> containers (like the Duck) and have them eat from stores of food, 
> drink from levels of water, and (having known a few hunters)- "other 
> beverages". Food/water stores would eventually be exhausted. So would 
> "other beverages" but consumption there also could dynamically 
> affecting their accuracy in shooting and give another interesting 
> wrinkle in the simulation. Might be interesting to add some factors to 
> add to the side-effect of steel shot build-up in the lake as a result 
> of hunters missing their targets also.
>
>
> -- 
> Bob Dickenson
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Simpy-users mailing list
> Simpy-users <at> lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/simpy-users
>   

------------------------------------------------------------------------------
Klaus G. Muller | 5 Jul 07:24
Picon
Picon
Favicon

Re: additions to SimPy wiki.....

Sorry, my previous message lost the indentation. Here is the text again:

from SimPy.Simulation import *

from random import random

class Duck:
    def __init__( self, name ):
        self.name = name
        self.quack = Quack( self , sim=sim)
        sim.activate( self.quack, self.quack.quack() )
        self.fly = Fly( self , sim=sim )
        sim.activate( self.fly, self.fly.fly() )
    def kill( self ):
        Process().cancel( self.quack )
        Process().cancel( self.fly )

class Quack( Process ):
    def __init__( self, owner , sim):
        Process.__init__( self , sim=sim)
        self.owner = owner
    def quack( self ):
        while True:
            print "%10.2f %s quacks" % ( self.sim.now(), self.owner.name )
            yield hold, self, random()*10

class Fly( Process ):
    def __init__( self, owner , sim):
        Process.__init__( self , sim)
        self.owner = owner
    def fly( self ):
        while True:
            print "%10.2f %s flies" % ( self.sim.now(), self.owner.name )
            yield hold, self, random()*10

class Hunter( Process ):
    def kill( self ):
        yield hold, self, random()*200
        d.kill()
        print "%10.2f hunter kills %s" % ( self.sim.now(), d.name )
sim = Simulation()
d = Duck( "my first duck" )
h = Hunter( sim=sim )
sim.activate( h, h.kill() )
sim.simulate( until = 500 )

Klaus Muller

Bob Dickenson wrote:
I've been aware of SimPy for a number of years and have recently started to actively learn the feature set.   Many problem domains I'm interested in would require simulation objects which do more that one thing at a time....so I've also been aware of the example that Klaus had posted for the Duck quacking and flying.

As part of my active learning,  I converted the Duck example to the new OO API.   It was a bit tricky getting the "zen" with simInstances usage in particular,  so I've posted the converted example on the wiki to help anybody else who is in the learning stage.

I then extended the example so that the Duck had a chance to survive by parameterizing the hunter to be less than perfectly accurate on a shot, have limited ammunition, and get limited shots at a duck.

After than I extended THAT extension by adding a DuckFactory process to create a flock of ducks and added a second hunter.

All three examples are posted on the wiki as sections 4,5,6 here : http://www.mcs.vuw.ac.nz/cgi-bin/wiki/SimPy?SimPyHints

I had some fun doing this and hope it helps some others up the learning curve.

I'm thinking about doing some of the following:   adding a HunterFactory, modifying Hunters to also be multiple process containers (like the Duck) and have them eat from stores of food, drink from levels of water, and (having known a few hunters)- "other beverages".  Food/water stores would eventually be exhausted.  So would "other beverages" but consumption there also could dynamically affecting their accuracy in shooting and give another interesting wrinkle in the simulation.  Might be interesting to add some factors to add to the side-effect of steel shot build-up in the lake as a result of hunters missing their targets also.


--
Bob Dickenson
------------------------------------------------------------------------------ _______________________________________________ Simpy-users mailing list Simpy-users <at> lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/simpy-users
------------------------------------------------------------------------------
_______________________________________________
Simpy-users mailing list
Simpy-users <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simpy-users
David Scheinman | 6 Jul 17:45
Picon
Favicon

Batch Processing

I've been meddling with SimPy for a few weeks now and I think I'm  
beginning to get the hang on it.  I am interested in modeling a  
manufacturing production line that involves machines that process jobs  
in batches of various sizes.  I've thought about various ways to  
implement this but I was wondering if someone has done this before and  
can point me to an example or documentation.

Thanks so much!
~dave

------------------------------------------------------------------------------
Henrik Bohre | 13 Jul 00:18
Picon
Favicon

Multiple processes with waitevent list loses events?

Hi all,

I'd like to be able to wait for an event list from multiple processes,
Running only one waiter, I always get both events, but when running
more waiters they don't receive all events. Is there a way to ensure
that all processes receive all events they are waiting on?

I am using SimPy 2.0.1/Python 2.5 on Ubuntu Hardy.

Best regards,
/Henrik

from SimPy.Simulation import *
class Waiter(Process):
    """Waiting for events"""
    def waiting(self,whichEvents):
        while 1:
            yield waitevent,self,whichEvents
            print "At time %s process %s sees events fired:%s"\
                   %(now(),self.name,[x.name for x in self.eventsFired])

class Signaller(Process):
    """Signalling events"""
    def signalling(self,whichEvents,when):
        yield hold,self,when
        for e in whichEvents:
            e.signal()

initialize()
event1=SimEvent("event1")
event2=SimEvent("event2")
w1=Waiter("Waiter1")
w2=Waiter("Waiter2")

activate(w1,w1.waiting(whichEvents=[event1,event2]))
activate(w2,w2.waiting(whichEvents=[event1,event2]))
s1=Signaller("Signals event1")
activate(s1,s1.signalling(whichEvents=[event1, event2],when=20))
simulate(until=50)

At time 20 process Waiter2 sees events fired:['event1']
At time 20 process Waiter2 sees events fired:['event2']
At time 20 process Waiter1 sees events fired:['event1']

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
Klaus G. Muller | 14 Jul 06:44
Picon
Picon
Favicon

Re: Multiple processes with waitevent list loses events?

Hi  Henrik,
"signal" does not cause immediate process reactivation. It is not like a "yield" command.
If you want to see both events in both processes, allow for immediate synchronization/reaction to each signal, like this:

from SimPy.Simulation import *
class Waiter(Process):
    """Waiting for events"""
    def waiting(self,whichEvents):
        while 1:
            yield waitevent,self,whichEvents
            print "At time %s process %s sees events fired:%s"\
                   %(now(),self.name,[x.name for x in self.eventsFired])

class Signaller(Process):
    """Signalling events"""
    def signalling(self,whichEvents,when):
        yield hold,self,when
        for e in whichEvents:
            e.signal()
            ############## Added for immediate synchronization
            yield hold,self,0

initialize()
event1=SimEvent("event1")
event2=SimEvent("event2")
w1=Waiter("Waiter1")
w2=Waiter("Waiter2")

activate(w1,w1.waiting(whichEvents=[event1,event2]))
activate(w2,w2.waiting(whichEvents=[event1,event2]))
s1=Signaller("Signals event1")
activate(s1,s1.signalling(whichEvents=[event1, event2],when=20))
simulate(until=50)

Output:
At time 20 process Waiter2 sees events fired:['event1']
At time 20 process Waiter1 sees events fired:['event1']
At time 20 process Waiter1 sees events fired:['event2']
At time 20 process Waiter2 sees events fired:['event2']

Regards,

Klaus Müller

Henrik Bohre wrote:
Hi all, I'd like to be able to wait for an event list from multiple processes, Running only one waiter, I always get both events, but when running more waiters they don't receive all events. Is there a way to ensure that all processes receive all events they are waiting on? I am using SimPy 2.0.1/Python 2.5 on Ubuntu Hardy. Best regards, /Henrik from SimPy.Simulation import * class Waiter(Process): """Waiting for events""" def waiting(self,whichEvents): while 1: yield waitevent,self,whichEvents print "At time %s process %s sees events fired:%s"\ %(now(),self.name,[x.name for x in self.eventsFired]) class Signaller(Process): """Signalling events""" def signalling(self,whichEvents,when): yield hold,self,when for e in whichEvents: e.signal() initialize() event1=SimEvent("event1") event2=SimEvent("event2") w1=Waiter("Waiter1") w2=Waiter("Waiter2") activate(w1,w1.waiting(whichEvents=[event1,event2])) activate(w2,w2.waiting(whichEvents=[event1,event2])) s1=Signaller("Signals event1") activate(s1,s1.signalling(whichEvents=[event1, event2],when=20)) simulate(until=50) At time 20 process Waiter2 sees events fired:['event1'] At time 20 process Waiter2 sees events fired:['event2'] At time 20 process Waiter1 sees events fired:['event1'] ------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge _______________________________________________ Simpy-users mailing list Simpy-users <at> lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/simpy-users
------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Simpy-users mailing list
Simpy-users <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simpy-users
Henrik Bohre | 14 Jul 09:53
Picon
Favicon

Re: Multiple processes with waitevent list loses events?

Thanks Klaus,

works great!

Best regards,
/Henrik

On Tue, Jul 14, 2009 at 6:44 AM, Klaus G. Muller<kgmuller <at> xs4all.nl> wrote:
> Hi  Henrik,
> "signal" does not cause immediate process reactivation. It is not like a
> "yield" command.
> If you want to see both events in both processes, allow for immediate
> synchronization/reaction to each signal, like this:
>
> from SimPy.Simulation import *
> class Waiter(Process):
>     """Waiting for events"""
>     def waiting(self,whichEvents):
>         while 1:
>             yield waitevent,self,whichEvents
>             print "At time %s process %s sees events fired:%s"\
>                    %(now(),self.name,[x.name for x in self.eventsFired])
>
> class Signaller(Process):
>     """Signalling events"""
>     def signalling(self,whichEvents,when):
>         yield hold,self,when
>         for e in whichEvents:
>             e.signal()
>             ############## Added for immediate synchronization
>             yield hold,self,0
>
> initialize()
> event1=SimEvent("event1")
> event2=SimEvent("event2")
> w1=Waiter("Waiter1")
> w2=Waiter("Waiter2")
>
> activate(w1,w1.waiting(whichEvents=[event1,event2]))
> activate(w2,w2.waiting(whichEvents=[event1,event2]))
> s1=Signaller("Signals event1")
> activate(s1,s1.signalling(whichEvents=[event1, event2],when=20))
> simulate(until=50)
>
> Output:
> At time 20 process Waiter2 sees events fired:['event1']
> At time 20 process Waiter1 sees events fired:['event1']
> At time 20 process Waiter1 sees events fired:['event2']
> At time 20 process Waiter2 sees events fired:['event2']
>
> Regards,
>
> Klaus Müller
>
> Henrik Bohre wrote:
>
> Hi all,
>
> I'd like to be able to wait for an event list from multiple processes,
> Running only one waiter, I always get both events, but when running
> more waiters they don't receive all events. Is there a way to ensure
> that all processes receive all events they are waiting on?
>
> I am using SimPy 2.0.1/Python 2.5 on Ubuntu Hardy.
>
> Best regards,
> /Henrik
>
> from SimPy.Simulation import *
> class Waiter(Process):
>     """Waiting for events"""
>     def waiting(self,whichEvents):
>         while 1:
>             yield waitevent,self,whichEvents
>             print "At time %s process %s sees events fired:%s"\
>                    %(now(),self.name,[x.name for x in self.eventsFired])
>
> class Signaller(Process):
>     """Signalling events"""
>     def signalling(self,whichEvents,when):
>         yield hold,self,when
>         for e in whichEvents:
>             e.signal()
>
> initialize()
> event1=SimEvent("event1")
> event2=SimEvent("event2")
> w1=Waiter("Waiter1")
> w2=Waiter("Waiter2")
>
> activate(w1,w1.waiting(whichEvents=[event1,event2]))
> activate(w2,w2.waiting(whichEvents=[event1,event2]))
> s1=Signaller("Signals event1")
> activate(s1,s1.signalling(
> whichEvents=[event1, event2],when=20))
> simulate(until=50)
>
> At time 20 process Waiter2 sees events fired:['event1']
> At time 20 process Waiter2 sees events fired:['event2']
> At time 20 process Waiter1 sees events fired:['event1']
>
> ------------------------------------------------------------------------------
> Enter the BlackBerry Developer Challenge
> This is your chance to win up to $100,000 in prizes! For a limited time,
> vendors submitting new applications to BlackBerry App World(TM) will have
> the opportunity to enter the BlackBerry Developer Challenge. See full prize
> details at: http://p.sf.net/sfu/Challenge
> _______________________________________________
> Simpy-users mailing list
> Simpy-users <at> lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/simpy-users
>

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
Fabio Barone | 18 Jul 21:48
Picon

Complex simulation for a first-time SimPy user

Hi

I got the task of implementing a complex simulation, and SimPy got chosen.
I am not an experienced simulation developer, and my statistics are also pretty beginner level.

I feel overwhelmed but also thrilled to make it work. Maybe you could help?

It is a complex simulation for an alternative currency network. For background visit
theliquiditynetwork.org

That's the plot.

The network has members, businesses and a trust managing the quids (name for the alt.curr. units).
Members register and get an initial float of quids. Same for businesses.
They trade, and after some predefined period the velocity of the accounts is
measured (how many trades have been happening?). If the velocity reaches
a certain level, the member/business gets additional quids, if it is below a threshold
quids are removed. This is done through the trust.
(If you'd like to comment on the mechanics of the network
please check the "participate" link on the website).

How to model?

Members and Businesses could be Process instances (currently thinking of
modeling around 1500 members and 300 businesses, can that be handled through Simpy?).

The PEM could be "spend". How to model how they interact though?
When to spend? On which business? B2B should also happen.

I'll probably heavily use the random object,
Amount could be a random.randrange(min,max).
For now the network itself is modeled as a Process with PEM run(),
which yields every day as a step of 1.0 (1 equals one day).
I guess we will need some variables to model something like the likeliness that
trades happen (i.e. simulating a "flourishing" or "low" economy, etc.).

We're aiming at a reasonable compromise between speed of development
and complexity.

The main goal of the simulation is to see if the system can work at all.

Please comment:
- If SimPy is appropriate for this task
- Suggestions for modelling
- Request more information if my explanations lack details
- Whatever you feel appropriate.

I deeply appreciate any advise. Thank you very much for following me up to here.

Best wishes
fabio


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Simpy-users mailing list
Simpy-users <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simpy-users
Klaus G. Muller | 19 Jul 15:11
Picon
Picon
Favicon

Re: Complex simulation for a first-time SimPy user

Dear Fabio,
an interesting modeling/application area!
Yes, SimPy can handle this task 1800 processes are no problem at all.

The approach I suggest is to develop your model in an evolutionary fashion, i.e. build a small model, test/run it, enhance it, etc. You will find that at every step in the model evolution, there will be new questions and assumptions to make about the real world (the Quid system). That alone will already give you a lot of insight into the feasibility and performance of your real world system.

What you need to define up front is which data you want to observe/gather concerning your system. Also, you need to list all the external factors which influence the performance of the system, like the state of the economy.

Modelling the users and businesses as Process objects sounds fine. For each PEM, I would describe the process steps in first person form and put them into pseudo-code (comments). For example:

    # I register/initialize my membership  
    # while I am a quid user
          # I make a daily trade
          # I wait one day
          # if I have a reason to terminate my membership, leave the quid system

Then assign attributes (like "nrQuids") to the classes.
Subsequently, fill in Python and SimPy code where prescribe by the pseudo-code.

The trust is the central entity, I assume, where the decisions for the system are taken. That should also be a Process sub-class instance with a PEM.

I would not worry too much about actual statistics -- as your system has not been built yet, you won't have many hard data to drive the simulation. Concentrate on a more qualitative "what-if"analysis primarily to determine the key drivers (internal and external ) for your system.

If you are working with random numbers, always start the simulation with a given seed for the random number generator (for repeatability). Run a number of repetitions and plot the output variables to see trends.

Good luck! Keep coming back to this list with any SimPy questions you have.

Klaus Muller




Fabio Barone wrote:
Hi

I got the task of implementing a complex simulation, and SimPy got chosen.
I am not an experienced simulation developer, and my statistics are also pretty beginner level.

I feel overwhelmed but also thrilled to make it work. Maybe you could help?

It is a complex simulation for an alternative currency network. For background visit
theliquiditynetwork.org

That's the plot.

The network has members, businesses and a trust managing the quids (name for the alt.curr. units).
Members register and get an initial float of quids. Same for businesses.
They trade, and after some predefined period the velocity of the accounts is
measured (how many trades have been happening?). If the velocity reaches
a certain level, the member/business gets additional quids, if it is below a threshold
quids are removed. This is done through the trust.
(If you'd like to comment on the mechanics of the network
please check the "participate" link on the website).

How to model?

Members and Businesses could be Process instances (currently thinking of
modeling around 1500 members and 300 businesses, can that be handled through Simpy?).

The PEM could be "spend". How to model how they interact though?
When to spend? On which business? B2B should also happen.

I'll probably heavily use the random object,
Amount could be a random.randrange(min,max).
For now the network itself is modeled as a Process with PEM run(),
which yields every day as a step of 1.0 (1 equals one day).
I guess we will need some variables to model something like the likeliness that
trades happen (i.e. simulating a "flourishing" or "low" economy, etc.).

We're aiming at a reasonable compromise between speed of development
and complexity.

The main goal of the simulation is to see if the system can work at all.

Please comment:
- If SimPy is appropriate for this task
- Suggestions for modelling
- Request more information if my explanations lack details
- Whatever you feel appropriate.

I deeply appreciate any advise. Thank you very much for following me up to here.

Best wishes
fabio


------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/Challenge _______________________________________________ Simpy-users mailing list Simpy-users <at> lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/simpy-users

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize  
details at: http://p.sf.net/sfu/Challenge
_______________________________________________
Simpy-users mailing list
Simpy-users <at> lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/simpy-users

Gmane