You can subscribe to this list here.
2005 |
Jan
|
Feb
(25) |
Mar
(84) |
Apr
(76) |
May
(25) |
Jun
(1) |
Jul
(28) |
Aug
(23) |
Sep
(50) |
Oct
(46) |
Nov
(65) |
Dec
(76) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(60) |
Feb
(33) |
Mar
(4) |
Apr
(17) |
May
(16) |
Jun
(18) |
Jul
(131) |
Aug
(11) |
Sep
(1) |
Oct
|
Nov
(1) |
Dec
(5) |
2007 |
Jan
(71) |
Feb
|
Mar
|
Apr
|
May
(6) |
Jun
(19) |
Jul
(40) |
Aug
(38) |
Sep
(7) |
Oct
(58) |
Nov
|
Dec
(10) |
2008 |
Jan
(17) |
Feb
(27) |
Mar
(12) |
Apr
(1) |
May
(50) |
Jun
(10) |
Jul
|
Aug
(15) |
Sep
(24) |
Oct
(64) |
Nov
(115) |
Dec
(47) |
2009 |
Jan
(30) |
Feb
(1) |
Mar
|
Apr
|
May
(2) |
Jun
|
Jul
(5) |
Aug
|
Sep
|
Oct
(4) |
Nov
(132) |
Dec
(93) |
2010 |
Jan
(266) |
Feb
(120) |
Mar
(168) |
Apr
(127) |
May
(83) |
Jun
(93) |
Jul
(77) |
Aug
(77) |
Sep
(86) |
Oct
(30) |
Nov
(4) |
Dec
(22) |
2011 |
Jan
(48) |
Feb
(81) |
Mar
(198) |
Apr
(174) |
May
(72) |
Jun
(101) |
Jul
(236) |
Aug
(144) |
Sep
(54) |
Oct
(132) |
Nov
(94) |
Dec
(111) |
2012 |
Jan
(135) |
Feb
(166) |
Mar
(86) |
Apr
(85) |
May
(137) |
Jun
(83) |
Jul
(54) |
Aug
(29) |
Sep
(49) |
Oct
(37) |
Nov
(8) |
Dec
(6) |
2013 |
Jan
(2) |
Feb
|
Mar
(1) |
Apr
(14) |
May
(5) |
Jun
(15) |
Jul
|
Aug
(38) |
Sep
(44) |
Oct
(45) |
Nov
(40) |
Dec
(23) |
2014 |
Jan
(22) |
Feb
(63) |
Mar
(43) |
Apr
(60) |
May
(10) |
Jun
(5) |
Jul
(13) |
Aug
(57) |
Sep
(36) |
Oct
(2) |
Nov
(30) |
Dec
(27) |
2015 |
Jan
(5) |
Feb
(2) |
Mar
(14) |
Apr
(3) |
May
|
Jun
(3) |
Jul
(10) |
Aug
(63) |
Sep
(31) |
Oct
(26) |
Nov
(11) |
Dec
(6) |
2016 |
Jan
|
Feb
(11) |
Mar
|
Apr
|
May
(1) |
Jun
(16) |
Jul
|
Aug
(4) |
Sep
|
Oct
(1) |
Nov
(4) |
Dec
(1) |
2017 |
Jan
(2) |
Feb
|
Mar
(1) |
Apr
|
May
(1) |
Jun
(20) |
Jul
(4) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2018 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(6) |
Nov
|
Dec
|
2019 |
Jan
|
Feb
|
Mar
|
Apr
(10) |
May
(10) |
Jun
(1) |
Jul
|
Aug
|
Sep
(1) |
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
(3) |
Apr
(9) |
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(7) |
Dec
(4) |
2021 |
Jan
(5) |
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Frederick W. <fre...@go...> - 2012-02-18 17:44:09
|
Stefan: > However are you sure that the the thread separation cannot create issues? It's indeed quite a challenge to ensure that concurrent threads work as expected under various situations. Therefore, when implementing the splash screen, I refrained from any optimizations that were not clearly without risks. The key is the following thread dependency: - The splash thread (ProgressVisualizer inner class) will never cause any issue as it is only considering the splash screen visualization of what it has been notified. - The init thread (non-EDT) creates/inits the classes (frames/panels). Following swing's "realization" thread rule by the letter, I've put any post-realization create/init logic (most often: pack()) of these classes into an invokeLater. The same applies when finalizing the initialization. There, the init Thread completely pauses until EDT is through and issues setVisible / toFront within the EDT afterwards (this is all done by invokeAndWait). So as a result, the dependencies between init thread and EDT are drawn very clearly and, by design, are very robust. What I cannot exclude for 100% is that there is still some UI component code (in some ? extends JFrame) that tries to access other components when being run in the init thread. But I reduced the likelihood of that being reviewing the existing code that is called (transitively) during initialization. So for the null pointer exception, please provide me the call stack and I would follow up with an analysis. My proposal for the splash screen would have been to include it into 1.7.0 and, if there are really reported issues, make it work for 1.7.x. I hope you understand I won't invest into reducing the scope of this functionality, as it works fine for me and I would have been willing to follow up on analyzing reported issues. But it would also be a very valid option to exclude the functionality from 1.7.0 (meaning forking 1.7.0 from before the splash screen commits) and making more experiences with this for the weeks until 1.8.0. My personal opinion is that for any feature I have developed in the last months bugs could still be reported when releasing, the probability for this to happen being only somewhat higher for the docking framework and the game init refactoring. So it's on you or the rest of rails-devel to decide... -- Frederick |
From: Stefan F. <ste...@we...> - 2012-02-18 17:20:02
|
Frederick: the splash screen looks awesome. However are you sure that the the thread separation cannot create issues? I had once during testing a Null pointer error message, however this was first time after I switched to test it using the sun jre, so I thought it was likely due to that. However I was not able to reproduce it in the following and it does not even occur after switching forth and back from openJdk. So I suspect that this might have come from the thread separation. Have you tested if the two can truly run independently by running first thread A followed by thread B and vice versa? I have to admit that I was surprised that you were able to create a clean separation given the current code, but you everything you did so far made it likely that you were able to achieve that. Given the speed improvement I would prefer to either not including that in 1.7.0 or restrict it to two threads (one for the splash, another for game init and UI startup), until more testing has been done. Could I ask you for the favor to bundle your commits for a new feature using git rebase --interactive? You have to be aware e.g. cherry-pick currently allows only selecting one commit and not a range of commits? And it makes creating the release readme easier to have only one commit instead of 16. Still it looks great! Thanks, Stefan On 02/17/2012 06:32 PM, Frederick Weld wrote: > Master now contains logic that is aimed at improving the user > experience during game initialization (new/load). A major motivation > for this is that loading a rails game on a docking layout takes close > to 40 secs (on my old computer). > > Most important aspects are as follows: > > - Splash screen provides information about initialization progress > - no java.awt.SplashScreen but a custom one as it is only > displayed after the choice in the game setup window > - can be turned of by an option in the Windows section > > - Windows become visible at once initialization is completed > - no more one-by-one popping up of the windows > - windows are already painted when becoming visible (important > for the ORWindow with background maps - which were inited white > before) > > - Moderate reduction of initialization time: > - class loading / window setup/wiring is done in a non-EDT thread > - painting triggered early and done concurrently by EDT > - third (minor) thread for visualization of initialization progress > - performance test (loading 1856 game with docking frames and > background map): > - Time until all windows become operational (and background > map is completely drawn): > - before: 38 secs > - now: 31 secs > > -- Frederick > > ------------------------------------------------------------------------------ > Virtualization& Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Stefan F. <ste...@we...> - 2012-02-18 16:51:50
|
Thanks for catching that: This is an issue of the flawed design of the Properties (from Java JDK) class as contains(...) returns false even if get(...) returns the value for the same key. Will be fixed. The second tier-profile can be selected during the creation of a new profile. I am still considering to add a selector for the predefined profiles on the main startup window and then creating a new user profile silently. Stefan On 02/17/2012 06:35 PM, Frederick Weld wrote: > Stefan: > In my tests, I found that my customized props also have entries that > are the same as the default (root) entry. Didn't you say that this > shouldn't occur? Perhaps there is an issue with my setup? > > Where would I select second-tier profile (import?) > > -- Frederick > > ------------------------------------------------------------------------------ > Virtualization& Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Frederick W. <fre...@go...> - 2012-02-17 17:40:49
|
Stefan: In my tests, I found that my customized props also have entries that are the same as the default (root) entry. Didn't you say that this shouldn't occur? Perhaps there is an issue with my setup? Where would I select second-tier profile (import?) -- Frederick |
From: Frederick W. <fre...@go...> - 2012-02-17 17:32:49
|
Master now contains logic that is aimed at improving the user experience during game initialization (new/load). A major motivation for this is that loading a rails game on a docking layout takes close to 40 secs (on my old computer). Most important aspects are as follows: - Splash screen provides information about initialization progress - no java.awt.SplashScreen but a custom one as it is only displayed after the choice in the game setup window - can be turned of by an option in the Windows section - Windows become visible at once initialization is completed - no more one-by-one popping up of the windows - windows are already painted when becoming visible (important for the ORWindow with background maps - which were inited white before) - Moderate reduction of initialization time: - class loading / window setup/wiring is done in a non-EDT thread - painting triggered early and done concurrently by EDT - third (minor) thread for visualization of initialization progress - performance test (loading 1856 game with docking frames and background map): - Time until all windows become operational (and background map is completely drawn): - before: 38 secs - now: 31 secs -- Frederick |
From: Frederick W. <fre...@go...> - 2012-02-17 17:04:55
|
Stefan: I would like to postpone my recheck to the point in time when I rebase my new dev onto your new functionality. Then, I could run an integrated test. I hope that's ok for you. -- Frederick |
From: Frederick W. <fre...@go...> - 2012-02-17 17:03:11
|
Stefan: My perception was not based on a in-depth profiler analysis but on the observation that the quad core's load was only at 50% since the initialization code didn't allow for any parallelization (except for the included libs like the svg renderer). After putting initialization into a non-EDT, the load gets close to 100% (at some portion of times - ie., when EDT rendering and framework initialization occur in parallel). But ok, even if only a few seconds are gained at the end, we will have at least a nice visualization of the startup, including that all windows become available at once (the visualization having been my main goal). -- Frederick |
From: Stefan F. <ste...@we...> - 2012-02-17 16:29:03
|
Frederick, I was under impression that it is mainly the UI startup (loading all tiles etc.) that impacts the startup performance. What I have not investigated yet is whether the UI objects get created before or after the game has been processed until the end of the action stack. Processing the game itself is pretty fast, as the automated testing proves (which runs on my system 8.7 seconds for 22 games). Have you already run a profiler? Stefan On 02/16/2012 11:51 AM, Frederick Weld wrote: > Erik: > EDT is the Swing Event Dispatcher Thread which handles the AWT queue > (as far as I know). > > Currently, I'm working on speeding up and visualizing the game > initialization process (ie., after leaving the game setup and before > the game windows are ready). This process takes about 20secs for > loading an end game on my computer. > Both goals rely on freeing up the EDT for his core tasks - hence my > request to alter the current concept. > > Given this motivation, what's your opinion on this? > > -- Frederick > > ------------------------------------------------------------------------------ > Virtualization& Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Stefan F. <ste...@we...> - 2012-02-17 13:54:17
|
Frederick, the latest commit added the proposed 3-tier structure (the master profile is the root.profile). I have added two new (pre-defined)profiles as suggested previously one which is called "prettyUI" and the other "ORDocking". I also changed those properties in root.profile that were different to what users have been used before (Icons and Route displaying) so that users can easily see all UI functions that have been added optionally. Could you please check (and maybe others) if this works as intended on their system? So please go to Configuration, define a new Profile based on the predefined ones and test if Rails get displayed correctly. Be aware that usually this has to be done before the game is started or Rails has to be restarted. As soon as this is confirmed I intend to finally release 1.7.0. Another observation (most likely for Erik): The "Load Recent" function fails on my system with a java.lang.ArrayIndexOutOfBoundsException. However I have to admit that it never seemed to work correctly (often it did not show the most recently used file). Stefan On 02/15/2012 09:28 PM, Stefan Frey wrote: > Frederick: > the argument for data/structure separation was mainly for the two tier > structure, where more than one default (predefined) profile was > possible. It would still be conceivable to define that inside the > structure document (e.g. pbem="..." and ftf="..."), but then it is > clearly data. For the 3-tier structure there is only one (meta)-default > profile, however I find it still easier to have all tiers identified > identically. > Anyway: Thanks for adding your options. > Stefan > > > > On 02/15/2012 08:16 PM, Frederick Weld wrote: >> Stefan: >> I do not perceive adding defaults to a schema as mixing schema/data >> definition. Defining defaults is actually a common part of schema >> definition (see XMLSchema). >> But I don't argue to change the current setup as it is already well established. >> >> ==>All config changes I initiated are now part of the default property >> file - I will also maintain that file when adding new options in the >> future. >> >> -- Frederick >> >> ------------------------------------------------------------------------------ >> Virtualization& Cloud Management Using Capacity Planning >> Cloud computing makes use of virtualization - but cloud computing >> also focuses on allowing computing to be delivered as a service. >> http://www.accelacomm.com/jaw/sfnl/114/51521223/ >> _______________________________________________ >> Rails-devel mailing list >> Rai...@li... >> https://lists.sourceforge.net/lists/listinfo/rails-devel > > > ------------------------------------------------------------------------------ > Virtualization& Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Frederick W. <fre...@go...> - 2012-02-17 06:17:58
|
Erik: Ok. I've only removed the NDC push/peek. The rest of the related code and the comment (which I amended) are still in place in case we want to revert back. -- Frederick |
From: Erik V. <eri...@xs...> - 2012-02-16 15:42:12
|
I have pushed a fix, that made both variables non-static. The start round number has been moved to GameManager (as have the SR and OR numbers long ago). So the start round number now is a generic feature, although it is only used in some 1835 variants yet. The tests now work again. I had to replace the reports of two more cases, which didn't have the turn order right. Erik. > -----Original Message----- > From: Erik Vos [mailto:eri...@xs...] > Sent: Thursday, February 16, 2012 12:27 AM > To: 'Development list for Rails: an 18xx game' > Subject: Re: [Rails-devel] 1835 automated game testing (was: Release Rails > 1.6.3 available) > > Ah OK. StartRound and StartRound_1835 are very old, and I suppose these > static variables have so far been overlooked (in the past we had many more > static variables). > I'll give it another look tomorrow. > > Erik. > > > -----Original Message----- > > From: Stefan Frey [mailto:ste...@we...] > > Sent: Wednesday, February 15, 2012 9:31 PM > > To: Development list for Rails: an 18xx game > > Subject: [Rails-devel] 1835 automated game testing (was: Release Rails > 1.6.3 > > available) > > > > This mail was sent out earlier today, but I never got it returned from > > the > list > > server. Please apologize if it turns it out to be double-posting for some. > > > > Erik: > > the issue for the automated game testing is easy to find. > > > > You define the two (state) variables turn and startRoundNumber as > > static variables in StartRound_1835. > > > > Keep in mind that all Junit tests run in sequence in the same JVM: So > static > > variables carry over between games and the never get re-intialized > > between test games. In consequence for variants that adjust StartRound > > behavior > will > > behave weird during testruns. > > > > So question is what was your reason to use static (class) variables > instead of > > standard (object) variables? I could only guess that the StartRound > > object > is > > not undo-safe, thus you used the static variables as a workaround. I > > do > not > > want submit this a fix, as long as I do not know your motivation there. > > > > If I remove the static qualifier the games seem to run correctly, > > however some 1835 tests will be reported as failed, however this is > > most likely to > the > > fact that the stored report is wrong and the newly generated one is > correct. > > > > I took the opportunity to copy the text of the e-mail that gave some > detailed > > instructions on the automated game text into the wiki. > > See > > http://sourceforge.net/apps/mediawiki/rails/index.php?title=Automated_ > > g > > ame_testing > > > > Stefan > > > > A final remark: > > I do not understand is why the Rails engine does not reject the saved > > game file if the ordering of players in the save file is different to > > the one > in the > > game engine, but I have not debugged the whole process yet, as I > > expect to work everything correctly as soon as the static variables are > removed. > > > > > > > > On 02/14/2012 09:21 PM, Erik Vos wrote: > > >>> However the existing 1835 and a new test case I have added fail now. > > >>> This is most likely related to the Clemens variant change of > > >>> player priority and rerunning several 1835 in one instance, > > >>> however this usually indicates some probability that it is not undo- > proof. > > >>> > > >>> So let us wait for you coming back to solve this jointly. > > >> > > >> I haven't looked at the non-standard 1835 variants for a long time, > > >> so > > > it's > > >> good to have a test case now. > > >> I only see 1835_NatDoubleShare failing, all other cases are OK. Do > > >> you > > > have > > >> more failures? > > > > > > I don't understand why JUnit does things different from normal running. > > > > > > The report expects: > > > > > > BuysItemFor,T3,M5,80 > > > FloatsWithCash,M5,80 > > > BuysItemFor,T2,M1,80<=== > > > FloatsWithCash,M1,80 > > > BuysItemFor,T1,M3,80 > > > FloatsWithCash,M3,80 > > > > > > and that is exactly what happens in a normal run (extract from log): > > > > > > 2012-02-14 21:08:25 INFO T3 buys M5 for 80M (ReportBuffer > addMessage > > 186) > > > > > > 2012-02-14 21:08:25 INFO M5 floats and receives 80M (ReportBuffer > > > addMessage 186) > > > 2012-02-14 21:08:25 INFO T2 buys M1 for 80M (ReportBuffer > addMessage > > 186) > > > <=== > > > 2012-02-14 21:08:25 INFO M1 floats and receives 80M (ReportBuffer > > > addMessage 186) > > > 2012-02-14 21:08:25 INFO T1 buys M3 for 80M (ReportBuffer > addMessage > > 186) > > > > > > 2012-02-14 21:08:25 INFO M3 floats and receives 80M (ReportBuffer > > > addMessage 186) > > > > > > so I'm amazed that the JUnit report says that>>T1<< has bought M3 > > > in its test run. > > > > > > junit.framework.ComparisonFailure: Reports differ in line 13 > > > expected:<BuysItemFor,T[2],M1,80> but was:<BuysItemFor,T[1],M1,80> > > > > > > where line 13 corresponds to the lines where I added arrows. > > > > > > I'm lost. > > > > > > Erik. > > > > > > > > > -------------------------------------------------------------------- > > > -- > > > -------- Keep Your Developer Skills Current with LearnDevNow! > > > The most comprehensive online learning library for Microsoft > > > developers is just $99.99! Visual Studio, SharePoint, SQL - plus > > > HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when > > you subscribe now! > > > http://p.sf.net/sfu/learndevnow-d2d > > > _______________________________________________ > > > Rails-devel mailing list > > > Rai...@li... > > > https://lists.sourceforge.net/lists/listinfo/rails-devel > > > > > > > ---------------------------------------------------------------------------- > -- > > Virtualization & Cloud Management Using Capacity Planning Cloud > > computing makes use of virtualization - but cloud computing also > > focuses on allowing computing to be delivered as a service. > > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > > _______________________________________________ > > Rails-devel mailing list > > Rai...@li... > > https://lists.sourceforge.net/lists/listinfo/rails-devel > > > ---------------------------------------------------------------------------- -- > Virtualization & Cloud Management Using Capacity Planning Cloud computing > makes use of virtualization - but cloud computing also focuses on allowing > computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Erik V. <eri...@xs...> - 2012-02-16 12:15:01
|
Well, go ahead, then. The idea of a multi-game server is a long shot anyway. Erik. > -----Original Message----- > From: Frederick Weld [mailto:fre...@go...] > Sent: Thursday, February 16, 2012 11:51 AM > To: Development list for Rails: an 18xx game > Subject: Re: [Rails-devel] Game Initialization within the EDT / AWT > EventQueue > > Erik: > EDT is the Swing Event Dispatcher Thread which handles the AWT queue (as > far as I know). > > Currently, I'm working on speeding up and visualizing the game initialization > process (ie., after leaving the game setup and before the game windows are > ready). This process takes about 20secs for loading an end game on my > computer. > Both goals rely on freeing up the EDT for his core tasks - hence my request to > alter the current concept. > > Given this motivation, what's your opinion on this? > > -- Frederick > > ---------------------------------------------------------------------------- -- > Virtualization & Cloud Management Using Capacity Planning Cloud computing > makes use of virtualization - but cloud computing also focuses on allowing > computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Frederick W. <fre...@go...> - 2012-02-16 10:51:36
|
Erik: EDT is the Swing Event Dispatcher Thread which handles the AWT queue (as far as I know). Currently, I'm working on speeding up and visualizing the game initialization process (ie., after leaving the game setup and before the game windows are ready). This process takes about 20secs for loading an end game on my computer. Both goals rely on freeing up the EDT for his core tasks - hence my request to alter the current concept. Given this motivation, what's your opinion on this? -- Frederick |
From: Erik V. <eri...@xs...> - 2012-02-16 09:45:43
|
> Erik/Stefan: > Assuming that rails 2.0 preceeds the development of distributed rails, this > would mean that I could drop the current mechanism completely for 1.x - > thus, returning to the singleton pattern. > > Would that be ok for you? Maybe I have missed something, but is there an actual bug that needs be fixed? Personally, I would prefer to keep future developments open until it's clear where Stefan will come up with. Erik. |
From: Erik V. <eri...@xs...> - 2012-02-16 09:38:26
|
Frederick, What does EDT mean? > - in the getGameManager, assume that the local game manager is to be > returned But which GameManager is "the local game manager" in a (future) multi-game server? This idea doesn't sound like a final solution. In fact, I was thinking in the same direction that Stefan is now taking: put all Rails objects in one tree. Erik. > -----Original Message----- > From: Frederick Weld [mailto:fre...@go...] > Sent: Thursday, February 16, 2012 7:50 AM > To: Development list for Rails: an 18xx game > Subject: Re: [Rails-devel] Game Initialization within the EDT / AWT > EventQueue > > Erik: > Thanks for the clarification. > > As far as I have understood, the current concept is as follows: > - assign a game manager key to a thread (using NDC push) > - return game manager instances based on current thread (using NDC peek) > - currently, this works as it is assumed that rails is only run in EDT > - in the future, proxy game managers apply this concept by running in their > dedicated thread > > I perceive the following shortcoming: > The concept stipulates that game initialization is performed within EDT > - hampering potential for parallelization > - rendering visualization of initialization process impossible > > Based on that I would propose altering the concept as follows: > - remove game key and NDC push for the local game manager (former EDT > instance) > - in the getGameManager, assume that the local game manager is to be > returned if peek returns that no NDC push has taken place for this thread > - for game manager service instances, the current concept of identifying > game managers by stream threads (or similar) is applicalbe as in the original > concept (no change here) > > This altered concept doesn't have any disadvantage over the original one and > would enable us to put local game initialization outside of the EDT. > > What's your take on this? > Is there anything else to be considered? > Otherwise, I would try to adopt the altered concept accordingly. > > -- Frederick > > ---------------------------------------------------------------------------- -- > Virtualization & Cloud Management Using Capacity Planning Cloud computing > makes use of virtualization - but cloud computing also focuses on allowing > computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Frederick W. <fre...@go...> - 2012-02-16 06:57:34
|
Only now, I've seen Stefan's response regarding the situation in Rails 2.0 Erik/Stefan: Assuming that rails 2.0 preceeds the development of distributed rails, this would mean that I could drop the current mechanism completely for 1.x - thus, returning to the singleton pattern. Would that be ok for you? -- Frederick |
From: Frederick W. <fre...@go...> - 2012-02-16 06:50:38
|
Erik: Thanks for the clarification. As far as I have understood, the current concept is as follows: - assign a game manager key to a thread (using NDC push) - return game manager instances based on current thread (using NDC peek) - currently, this works as it is assumed that rails is only run in EDT - in the future, proxy game managers apply this concept by running in their dedicated thread I perceive the following shortcoming: The concept stipulates that game initialization is performed within EDT - hampering potential for parallelization - rendering visualization of initialization process impossible Based on that I would propose altering the concept as follows: - remove game key and NDC push for the local game manager (former EDT instance) - in the getGameManager, assume that the local game manager is to be returned if peek returns that no NDC push has taken place for this thread - for game manager service instances, the current concept of identifying game managers by stream threads (or similar) is applicalbe as in the original concept (no change here) This altered concept doesn't have any disadvantage over the original one and would enable us to put local game initialization outside of the EDT. What's your take on this? Is there anything else to be considered? Otherwise, I would try to adopt the altered concept accordingly. -- Frederick |
From: Stefan F. <ste...@we...> - 2012-02-16 06:32:48
|
Some more details on that: The method Erik refers to below is getInstance() of GameManager. This method will only work from the thread that created the GameManager instance. So be aware that in essence any call to the Rails main core methods can fail if done outside the main thread. This is one of the reasons why the RevenueAdapter object is created and evaluated inside the main thread so that the revenue calculation is isolated from any calls to the core Rails engine and can run in a separate thread. This mechanism will be dropped moving onto Rails 2.0 and is replaced by a thread-safe mechanism (essentially be giving all items access to a GameManager equivalent by placing all Rails objects into a tree hierarchy). Stefan On 02/16/2012 12:24 AM, Erik Vos wrote: > No. The goal is to provide access to the current GameManager for objects > that don't have a reference to it: via a thread property. That is what NDC > provides. > > Originally GameManager was a singleton, and in those times it was easy. > But at some point we decided that we should be prepared for multiple games > running in the same JVM, and NDC was the only mechanism I knew about that > could help me out to identify which GM any object would belong to. > > Currently the implementation is still rudimentary, as the GM key given to > NDC is fixed. But in a multi-game server, that key should be derivable, for > instance from the identity of the stream over which an incoming player > action would arrive. > > I hope this is a bit clear... > > Erik. > >> -----Original Message----- >> From: Frederick Weld [mailto:fre...@go...] >> Sent: Wednesday, February 15, 2012 7:58 PM >> To: Development list for Rails: an 18xx game >> Subject: [Rails-devel] Game Initialization within the EDT / AWT EventQueue >> >> In RunGame, I've found the following comment: >> "We have to run loadGame on an AWT EventQueue to make sure that NDC >> will properly initialize game key so that GameManager instance can be >> properly queried for. This is a consequence of NDC abuse." >> >> New games are also initialized within EDT since this is triggered by the > button >> pressed event. >> >> So my question to Erik/Stefan/Brett: >> What is the goal of (ab)using the EDT? Is it that only one game may be > started >> at the same time? >> >> -- Frederick >> >> > ---------------------------------------------------------------------------- > -- >> Virtualization& Cloud Management Using Capacity Planning Cloud computing >> makes use of virtualization - but cloud computing also focuses on allowing >> computing to be delivered as a service. >> http://www.accelacomm.com/jaw/sfnl/114/51521223/ >> _______________________________________________ >> Rails-devel mailing list >> Rai...@li... >> https://lists.sourceforge.net/lists/listinfo/rails-devel > > > ------------------------------------------------------------------------------ > Virtualization& Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Stefan F. <ste...@we...> - 2012-02-16 06:21:40
|
Martin: yes both mechanisms co-exists in Rails 1.x, but as far as I know the code adheres to both, so you can rely on the one you prefer. The restriction of the president being the first certificate in the list of certificates of a company will be dropped in Rails 2.0. Stefan On 02/15/2012 09:58 PM, Dr....@t-... wrote: > Hi, > > by accident i stumbled over the hidden design concept thats treated > differently in some routines :) > > At some places in the code the game assumes that the president > certificate is the first in the internal certificate list of a company. > > But in other parts the game code explicitely searches the certificate > list for a certificate with the president attribute set. > > Of course i stumbled over the second code first as it gets used in > Stockround to determine if we start a company by buying a president. > > And the first assumption is used in the subsequent floatCompany to > adjust the UI... > > I can work around that and rework the list of certificates, nevertheless > we should make sure that everyone else subsequently knows about that > behaviour :) > > regards, > > Martin > > P.s. Code snippet: > > PublicCompany.java: > > public Player getPresident() { > if (hasStarted()) { > CashHolder owner = certificates.get(0).getPortfolio().getOwner(); > if (owner instanceof Player) return (Player) owner; > } > return null; > } > > > > ------------------------------------------------------------------------------ > Virtualization& Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > > > > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Erik V. <eri...@xs...> - 2012-02-15 23:27:34
|
Ah OK. StartRound and StartRound_1835 are very old, and I suppose these static variables have so far been overlooked (in the past we had many more static variables). I'll give it another look tomorrow. Erik. > -----Original Message----- > From: Stefan Frey [mailto:ste...@we...] > Sent: Wednesday, February 15, 2012 9:31 PM > To: Development list for Rails: an 18xx game > Subject: [Rails-devel] 1835 automated game testing (was: Release Rails 1.6.3 > available) > > This mail was sent out earlier today, but I never got it returned from the list > server. Please apologize if it turns it out to be double-posting for some. > > Erik: > the issue for the automated game testing is easy to find. > > You define the two (state) variables turn and startRoundNumber as static > variables in StartRound_1835. > > Keep in mind that all Junit tests run in sequence in the same JVM: So static > variables carry over between games and the never get re-intialized between > test games. In consequence for variants that adjust StartRound behavior will > behave weird during testruns. > > So question is what was your reason to use static (class) variables instead of > standard (object) variables? I could only guess that the StartRound object is > not undo-safe, thus you used the static variables as a workaround. I do not > want submit this a fix, as long as I do not know your motivation there. > > If I remove the static qualifier the games seem to run correctly, however > some 1835 tests will be reported as failed, however this is most likely to the > fact that the stored report is wrong and the newly generated one is correct. > > I took the opportunity to copy the text of the e-mail that gave some detailed > instructions on the automated game text into the wiki. > See > http://sourceforge.net/apps/mediawiki/rails/index.php?title=Automated_g > ame_testing > > Stefan > > A final remark: > I do not understand is why the Rails engine does not reject the saved game > file if the ordering of players in the save file is different to the one in the > game engine, but I have not debugged the whole process yet, as I expect to > work everything correctly as soon as the static variables are removed. > > > > On 02/14/2012 09:21 PM, Erik Vos wrote: > >>> However the existing 1835 and a new test case I have added fail now. > >>> This is most likely related to the Clemens variant change of player > >>> priority and rerunning several 1835 in one instance, however this > >>> usually indicates some probability that it is not undo-proof. > >>> > >>> So let us wait for you coming back to solve this jointly. > >> > >> I haven't looked at the non-standard 1835 variants for a long time, > >> so > > it's > >> good to have a test case now. > >> I only see 1835_NatDoubleShare failing, all other cases are OK. Do > >> you > > have > >> more failures? > > > > I don't understand why JUnit does things different from normal running. > > > > The report expects: > > > > BuysItemFor,T3,M5,80 > > FloatsWithCash,M5,80 > > BuysItemFor,T2,M1,80<=== > > FloatsWithCash,M1,80 > > BuysItemFor,T1,M3,80 > > FloatsWithCash,M3,80 > > > > and that is exactly what happens in a normal run (extract from log): > > > > 2012-02-14 21:08:25 INFO T3 buys M5 for 80M (ReportBuffer addMessage > 186) > > > > 2012-02-14 21:08:25 INFO M5 floats and receives 80M (ReportBuffer > > addMessage 186) > > 2012-02-14 21:08:25 INFO T2 buys M1 for 80M (ReportBuffer addMessage > 186) > > <=== > > 2012-02-14 21:08:25 INFO M1 floats and receives 80M (ReportBuffer > > addMessage 186) > > 2012-02-14 21:08:25 INFO T1 buys M3 for 80M (ReportBuffer addMessage > 186) > > > > 2012-02-14 21:08:25 INFO M3 floats and receives 80M (ReportBuffer > > addMessage 186) > > > > so I'm amazed that the JUnit report says that>>T1<< has bought M3 in > > its test run. > > > > junit.framework.ComparisonFailure: Reports differ in line 13 > > expected:<BuysItemFor,T[2],M1,80> but was:<BuysItemFor,T[1],M1,80> > > > > where line 13 corresponds to the lines where I added arrows. > > > > I'm lost. > > > > Erik. > > > > > > ---------------------------------------------------------------------- > > -------- Keep Your Developer Skills Current with LearnDevNow! > > The most comprehensive online learning library for Microsoft > > developers is just $99.99! Visual Studio, SharePoint, SQL - plus > > HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when > you subscribe now! > > http://p.sf.net/sfu/learndevnow-d2d > > _______________________________________________ > > Rails-devel mailing list > > Rai...@li... > > https://lists.sourceforge.net/lists/listinfo/rails-devel > > > ---------------------------------------------------------------------------- -- > Virtualization & Cloud Management Using Capacity Planning Cloud computing > makes use of virtualization - but cloud computing also focuses on allowing > computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Erik V. <eri...@xs...> - 2012-02-15 23:24:17
|
No. The goal is to provide access to the current GameManager for objects that don't have a reference to it: via a thread property. That is what NDC provides. Originally GameManager was a singleton, and in those times it was easy. But at some point we decided that we should be prepared for multiple games running in the same JVM, and NDC was the only mechanism I knew about that could help me out to identify which GM any object would belong to. Currently the implementation is still rudimentary, as the GM key given to NDC is fixed. But in a multi-game server, that key should be derivable, for instance from the identity of the stream over which an incoming player action would arrive. I hope this is a bit clear... Erik. > -----Original Message----- > From: Frederick Weld [mailto:fre...@go...] > Sent: Wednesday, February 15, 2012 7:58 PM > To: Development list for Rails: an 18xx game > Subject: [Rails-devel] Game Initialization within the EDT / AWT EventQueue > > In RunGame, I've found the following comment: > "We have to run loadGame on an AWT EventQueue to make sure that NDC > will properly initialize game key so that GameManager instance can be > properly queried for. This is a consequence of NDC abuse." > > New games are also initialized within EDT since this is triggered by the button > pressed event. > > So my question to Erik/Stefan/Brett: > What is the goal of (ab)using the EDT? Is it that only one game may be started > at the same time? > > -- Frederick > > ---------------------------------------------------------------------------- -- > Virtualization & Cloud Management Using Capacity Planning Cloud computing > makes use of virtualization - but cloud computing also focuses on allowing > computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Stefan F. <ste...@we...> - 2012-02-15 23:14:19
|
Erik: the issue for the automated game testing is easy to find. You define the two (state) variables turn and startRoundNumber as static variables in StartRound_1835. Keep in mind that all Junit tests run in sequence in the same JVM: So static variables carry over between games and the never get re-intialized between test games. In consequence for variants that adjust StartRound behavior will behave weird during testruns. So question is what was your reason to use static (class) variables instead of standard (object) variables? I could only guess that the StartRound object is not undo-safe, thus you used the static variables as a workaround. I do not want submit this a fix, as long as I do not know your motivation there. If I remove the static qualifier the games seem to run correctly, however some 1835 tests will be reported as failed, however this is most likely to the fact that the stored report is wrong and the newly generated one is correct. I took the opportunity to copy the text of the e-mail that gave some detailed instructions on the automated game text into the wiki. See http://sourceforge.net/apps/mediawiki/rails/index.php?title=Automated_game_testing Stefan A final remark: I do not understand is why the Rails engine does not reject the saved game file if the ordering of players in the save file is different to the one in the game engine, but I have not debugged the whole process yet, as I expect to work everything correctly as soon as the static variables are removed. On 02/14/2012 09:21 PM, Erik Vos wrote: >>> However the existing 1835 and a new test case I have added >>> fail now. This is most likely related to the Clemens variant change of >>> player priority and rerunning several 1835 in one instance, however >>> this usually indicates some probability that it is not undo-proof. >>> >>> So let us wait for you coming back to solve this jointly. >> >> I haven't looked at the non-standard 1835 variants for a long time, so > it's >> good to have a test case now. >> I only see 1835_NatDoubleShare failing, all other cases are OK. Do you > have >> more failures? > > I don't understand why JUnit does things different from normal running. > > The report expects: > > BuysItemFor,T3,M5,80 > FloatsWithCash,M5,80 > BuysItemFor,T2,M1,80<=== > FloatsWithCash,M1,80 > BuysItemFor,T1,M3,80 > FloatsWithCash,M3,80 > > and that is exactly what happens in a normal run (extract from log): > > 2012-02-14 21:08:25 INFO T3 buys M5 for 80M (ReportBuffer addMessage 186) > > 2012-02-14 21:08:25 INFO M5 floats and receives 80M (ReportBuffer > addMessage 186) > 2012-02-14 21:08:25 INFO T2 buys M1 for 80M (ReportBuffer addMessage 186) > <=== > 2012-02-14 21:08:25 INFO M1 floats and receives 80M (ReportBuffer > addMessage 186) > 2012-02-14 21:08:25 INFO T1 buys M3 for 80M (ReportBuffer addMessage 186) > > 2012-02-14 21:08:25 INFO M3 floats and receives 80M (ReportBuffer > addMessage 186) > > so I'm amazed that the JUnit report says that>>T1<< has bought M3 in its > test run. > > junit.framework.ComparisonFailure: Reports differ in line 13 > expected:<BuysItemFor,T[2],M1,80> but was:<BuysItemFor,T[1],M1,80> > > where line 13 corresponds to the lines where I added arrows. > > I'm lost. > > Erik. > > > ------------------------------------------------------------------------------ > Keep Your Developer Skills Current with LearnDevNow! > The most comprehensive online learning library for Microsoft developers > is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, > Metro Style Apps, more. Free future releases when you subscribe now! > http://p.sf.net/sfu/learndevnow-d2d > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: <Dr....@t-...> - 2012-02-15 20:59:01
|
Hi, by accident i stumbled over the hidden design concept thats treated differently in some routines :) At some places in the code the game assumes that the president certificate is the first in the internal certificate list of a company. But in other parts the game code explicitely searches the certificate list for a certificate with the president attribute set. Of course i stumbled over the second code first as it gets used in Stockround to determine if we start a company by buying a president. And the first assumption is used in the subsequent floatCompany to adjust the UI... I can work around that and rework the list of certificates, nevertheless we should make sure that everyone else subsequently knows about that behaviour :) regards, Martin P.s. Code snippet: PublicCompany.java: public Player getPresident() { if (hasStarted()) { CashHolder owner = certificates.get(0).getPortfolio().getOwner(); if (owner instanceof Player) return (Player) owner; } return null; } |
From: Stefan F. <ste...@we...> - 2012-02-15 20:30:44
|
This mail was sent out earlier today, but I never got it returned from the list server. Please apologize if it turns it out to be double-posting for some. Erik: the issue for the automated game testing is easy to find. You define the two (state) variables turn and startRoundNumber as static variables in StartRound_1835. Keep in mind that all Junit tests run in sequence in the same JVM: So static variables carry over between games and the never get re-intialized between test games. In consequence for variants that adjust StartRound behavior will behave weird during testruns. So question is what was your reason to use static (class) variables instead of standard (object) variables? I could only guess that the StartRound object is not undo-safe, thus you used the static variables as a workaround. I do not want submit this a fix, as long as I do not know your motivation there. If I remove the static qualifier the games seem to run correctly, however some 1835 tests will be reported as failed, however this is most likely to the fact that the stored report is wrong and the newly generated one is correct. I took the opportunity to copy the text of the e-mail that gave some detailed instructions on the automated game text into the wiki. See http://sourceforge.net/apps/mediawiki/rails/index.php?title=Automated_game_testing Stefan A final remark: I do not understand is why the Rails engine does not reject the saved game file if the ordering of players in the save file is different to the one in the game engine, but I have not debugged the whole process yet, as I expect to work everything correctly as soon as the static variables are removed. On 02/14/2012 09:21 PM, Erik Vos wrote: >>> However the existing 1835 and a new test case I have added >>> fail now. This is most likely related to the Clemens variant change of >>> player priority and rerunning several 1835 in one instance, however >>> this usually indicates some probability that it is not undo-proof. >>> >>> So let us wait for you coming back to solve this jointly. >> >> I haven't looked at the non-standard 1835 variants for a long time, so > it's >> good to have a test case now. >> I only see 1835_NatDoubleShare failing, all other cases are OK. Do you > have >> more failures? > > I don't understand why JUnit does things different from normal running. > > The report expects: > > BuysItemFor,T3,M5,80 > FloatsWithCash,M5,80 > BuysItemFor,T2,M1,80<=== > FloatsWithCash,M1,80 > BuysItemFor,T1,M3,80 > FloatsWithCash,M3,80 > > and that is exactly what happens in a normal run (extract from log): > > 2012-02-14 21:08:25 INFO T3 buys M5 for 80M (ReportBuffer addMessage 186) > > 2012-02-14 21:08:25 INFO M5 floats and receives 80M (ReportBuffer > addMessage 186) > 2012-02-14 21:08:25 INFO T2 buys M1 for 80M (ReportBuffer addMessage 186) > <=== > 2012-02-14 21:08:25 INFO M1 floats and receives 80M (ReportBuffer > addMessage 186) > 2012-02-14 21:08:25 INFO T1 buys M3 for 80M (ReportBuffer addMessage 186) > > 2012-02-14 21:08:25 INFO M3 floats and receives 80M (ReportBuffer > addMessage 186) > > so I'm amazed that the JUnit report says that>>T1<< has bought M3 in its > test run. > > junit.framework.ComparisonFailure: Reports differ in line 13 > expected:<BuysItemFor,T[2],M1,80> but was:<BuysItemFor,T[1],M1,80> > > where line 13 corresponds to the lines where I added arrows. > > I'm lost. > > Erik. > > > ------------------------------------------------------------------------------ > Keep Your Developer Skills Current with LearnDevNow! > The most comprehensive online learning library for Microsoft developers > is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, > Metro Style Apps, more. Free future releases when you subscribe now! > http://p.sf.net/sfu/learndevnow-d2d > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |
From: Stefan F. <ste...@we...> - 2012-02-15 20:28:46
|
Frederick: the argument for data/structure separation was mainly for the two tier structure, where more than one default (predefined) profile was possible. It would still be conceivable to define that inside the structure document (e.g. pbem="..." and ftf="..."), but then it is clearly data. For the 3-tier structure there is only one (meta)-default profile, however I find it still easier to have all tiers identified identically. Anyway: Thanks for adding your options. Stefan On 02/15/2012 08:16 PM, Frederick Weld wrote: > Stefan: > I do not perceive adding defaults to a schema as mixing schema/data > definition. Defining defaults is actually a common part of schema > definition (see XMLSchema). > But I don't argue to change the current setup as it is already well established. > > ==>All config changes I initiated are now part of the default property > file - I will also maintain that file when adding new options in the > future. > > -- Frederick > > ------------------------------------------------------------------------------ > Virtualization& Cloud Management Using Capacity Planning > Cloud computing makes use of virtualization - but cloud computing > also focuses on allowing computing to be delivered as a service. > http://www.accelacomm.com/jaw/sfnl/114/51521223/ > _______________________________________________ > Rails-devel mailing list > Rai...@li... > https://lists.sourceforge.net/lists/listinfo/rails-devel |