Steve Jackson Games - Site Navigation
Home General Info Follow Us Search Illuminator Store Forums What's New Other Games Ogre GURPS Munchkin Our Games: Home

Go Back   Steve Jackson Games Forums > Roleplaying > GURPS > GURPS Character Assistant

Reply
 
Thread Tools Display Modes
Old 04-10-2012, 10:18 PM   #1
cosmicfish
 
Join Date: Mar 2010
Default Any plans to replace this program?

I like GCA, but it struck me recently as being perhaps a bit outdated.

Until a few months ago I had been running GCA on an older computer, and was convinced that the speed issues and occasional errors I was seeing were a product of the computer itself. Well, a few months ago I got a brand spanking new computer... and GCA is STILL slow, especially when dealing with high point total characters, and still got glitchy when I started exploring the limits of my special ops templates.

I do not mean to disparage the efforts of the creators, who have no doubt spent far more time and effort on this than their remuneration would suggest, nor do I mean to imply that this was not a great program when it was created. I just think that there are probably more modern platforms out there that would be better suited to handling the complexity of this task, and am hoping that such a task is sufficiently attractice and lucrative to be worthwhile.

Or perhaps this is just a problem for ME and no one else is seeing these problems.

Regardless - thanks!
cosmicfish is offline   Reply With Quote
Old 04-10-2012, 10:33 PM   #2
Armin
GCA Prime
 
Armin's Avatar
 
Join Date: Aug 2004
Location: Portland, OR
Default Re: Any plans to replace this program?

I am working on a new version using a more modern development platform. No ETA right now, but I am working on it as time allows.
__________________
Armin D. Sykes | Visit my GCA5 blog for updates and previews. | Get GURPS Character Assistant 5 now at Warehouse 23.
Armin is offline   Reply With Quote
Old 04-11-2012, 12:40 AM   #3
panton41
 
panton41's Avatar
 
Join Date: Jul 2005
Location: Jeffersonville, Ind.
Default Re: Any plans to replace this program?

My understanding is that much of GCA4's performance problems are tied to Visual BASIC 6. VB6 isn't just a slow language (interpreted instead of compiled or bytecode) but it also simply uses slow, outdated algorithms.

In another thread Armin mentioned using Visual Studio 2010, which allows VB.NET 4.0, which should allow for a major performance boost. (Though he might build against an older .NET version to allow cross-platform compatibility via Mono.) .NET languages are very fast compared to VB6 and even perform well against compiled code (for example the XBox 360 runs games in a subset of it). So there should be a major performance boost even if the underlying VB6-style data models are preserved. If the models are updated to take into account changes present in .NET we could see an even larger boost in performance.

But I do agree, I throw GCA4 against a Sandy Bridge Core i5 2500K and can see some slowdown on a program that by all rights should be lightening fast.
__________________
The user formerly known as ciaran_skye.

__________________

Quirks: Doesn't proofread forum posts before clicking "Submit". [-1]

Quote:
"My mace speaks Goblin." Antoni Ten Monros
panton41 is offline   Reply With Quote
Old 04-11-2012, 06:28 AM   #4
TorgSmith
 
TorgSmith's Avatar
 
Join Date: Mar 2008
Location: Mission Tx
Default Re: Any plans to replace this program?

I don’t have any performance issues with the application other than the initial load of the datasets. I don’t really see a need for a new version unless this code base is getting too hard to maintain.

If you do another version, I have a request. I think one thing that would speed things up quite a bit is if you have an import utility that allows you to import the datasets into an internal database. This would make load times much faster as you would not need to load the data every time. It looks like at least Office 2007 Access supports transactions with the TRANSACTION key word. This way if there was an error during the load of data, it could be rolled back. This would complicate the maintenance of the dataset a bit. I think that good requirements for this process would need to be defined prior to implementation.

Another request I have is to expose more events. For example the creates() in the current version can be added when something is added to a list. It would be nice if there was a remove from list event exposed to allow us to clean up after using the creates() with say a removes(). It would be nice if the items created with the creates() had a key value that linked back to the item that created it. If you could add this to the current version it would be great. :)
__________________
Thank You,
Torg Smith
TorgSmith is offline   Reply With Quote
Old 04-11-2012, 01:46 PM   #5
panton41
 
panton41's Avatar
 
Join Date: Jul 2005
Location: Jeffersonville, Ind.
Default Re: Any plans to replace this program?

Quote:
Originally Posted by TorgSmith View Post
I don’t have any performance issues with the application other than the initial load of the datasets. I don’t really see a need for a new version unless this code base is getting too hard to maintain.
Support for Visual BASIC 6 officially ends with Windows 8, though it's still working in the Consumer Preview.
__________________
The user formerly known as ciaran_skye.

__________________

Quirks: Doesn't proofread forum posts before clicking "Submit". [-1]

Quote:
"My mace speaks Goblin." Antoni Ten Monros
panton41 is offline   Reply With Quote
Old 04-11-2012, 03:56 PM   #6
Armin
GCA Prime
 
Armin's Avatar
 
Join Date: Aug 2004
Location: Portland, OR
Default Re: Any plans to replace this program?

Quote:
Originally Posted by ciaran_skye View Post
But I do agree, I throw GCA4 against a Sandy Bridge Core i5 2500K and can see some slowdown on a program that by all rights should be lightening fast.
The VB.NET version is definitely faster.

But GCA can never be lightning fast unless it works much differently, losing either much of it's user-friendliness, or it adds an entire additional level of internal complexity. Much of what GCA operates on internally is basically string parsing and interpreting, which just isn't fast compared to straight math against known fixed values.

The most effective thing I've found to increase speed was tokenizing values in the solver, which has been in GCA4 for ages, and is why GCA4 isn't nearly as slow as it could be, if it was still using the same solving engine it had when it was originally released. (GCA4 does so much more processing now than it did back then.)

(And the new program is currently targeted against .NET 4.0, as I hadn't thought otherwise when I first started, but since I'm not doing anything too odd, it looks like that is supported by Mono anyway.)

Quote:
Originally Posted by TorgSmith View Post
If you do another version, I have a request. I think one thing that would speed things up quite a bit is if you have an import utility that allows you to import the datasets into an internal database. This would make load times much faster as you would not need to load the data every time. It looks like at least Office 2007 Access supports transactions with the TRANSACTION key word. This way if there was an error during the load of data, it could be rolled back. This would complicate the maintenance of the dataset a bit. I think that good requirements for this process would need to be defined prior to implementation.
The FastLoad system is basically a type of flat-file database, and that's why FastLoads load so much faster than initial data set loads--far less processing to do.

I don't see how I can effectively improve things any more than that, just by loading data sets into a transactional database, since the load order of the data files is important. That is, what the final result of the data set is may look quite different just because you loaded a different data file early in the load order, compared to another data set.

I admit that I'm not exactly up to date on database stuff these days.

Quote:
Originally Posted by TorgSmith View Post
Another request I have is to expose more events. For example the creates() in the current version can be added when something is added to a list. It would be nice if there was a remove from list event exposed to allow us to clean up after using the creates() with say a removes(). It would be nice if the items created with the creates() had a key value that linked back to the item that created it. If you could add this to the current version it would be great. :)
Those are actually more like commands than events. GCA does them because they're specified, and processes them in a fixed order.

I have long been considering including something like an event system, so that processing of various bits could occur only if other bits occur, but change is slow to come when you have something that's working and limited time to work on it.

Quote:
Originally Posted by ciaran_skye View Post
Support for Visual BASIC 6 officially ends with Windows 8, though it's still working in the Consumer Preview.
Not to mention all the oddnesses we've already been seeing the last few years for some users, and also Data Execution Prevention preventing GCA from running. Much of that should definitely be improved with the new code base.
__________________
Armin D. Sykes | Visit my GCA5 blog for updates and previews. | Get GURPS Character Assistant 5 now at Warehouse 23.
Armin is offline   Reply With Quote
Old 04-11-2012, 06:39 PM   #7
TorgSmith
 
TorgSmith's Avatar
 
Join Date: Mar 2008
Location: Mission Tx
Default Re: Any plans to replace this program?

Quote:
Originally Posted by Armin View Post
Quote:
Originally Posted by TorgSmith View Post
If you do another version, I have a request. I think one thing that would speed things up quite a bit is if you have an import utility that allows you to import the datasets into an internal database. This would make load times much faster as you would not need to load the data every time. It looks like at least Office 2007 Access supports transactions with the TRANSACTION key word. This way if there was an error during the load of data, it could be rolled back. This would complicate the maintenance of the dataset a bit. I think that good requirements for this process would need to be defined prior to implementation.
The FastLoad system is basically a type of flat-file database, and that's why FastLoads load so much faster than initial data set loads--far less processing to do.

I don't see how I can effectively improve things any more than that, just by loading data sets into a transactional database, since the load order of the data files is important. That is, what the final result of the data set is may look quite different just because you loaded a different data file early in the load order, compared to another data set.

I admit that I'm not exactly up to date on database stuff these days.
My mentioning of the database was more offhanded. The advantage of the database is that you do not need to do a load every time you open the application. The disadvantage of it is that you have more complex data maintenance.

Your current method has a simplified data maintenance in the since that you just reload all the data each time there is a change. There is one small weakness in that a change at an earlier loaded script could break a later loaded script. You would hope that the base scripts would not need to change much so as to minimize the risk of breakage.

The disadvantage of the database approach is that you need a complex version control system so that updates work without having to reload all the data. I do not know an easy way to do this off the top of my head. You would not want to refresh the database after each change as it would limit the benefit of the database approach.

Quote:
Originally Posted by Armin View Post
Quote:
Originally Posted by TorgSmith View Post
Another request I have is to expose more events. For example the creates() in the current version can be added when something is added to a list. It would be nice if there was a remove from list event exposed to allow us to clean up after using the creates() with say a removes(). It would be nice if the items created with the creates() had a key value that linked back to the item that created it. If you could add this to the current version it would be great. :)
Those are actually more like commands than events. GCA does them because they're specified, and processes them in a fixed order.

I have long been considering including something like an event system, so that processing of various bits could occur only if other bits occur, but change is slow to come when you have something that's working and limited time to work on it.
After reading my post and your comment I see I did not word that very well. The events I am talking about are ListAdd, ListRemove and maybe ListChange. Right now you are doing ListAdd. The skill script:
Code:
wc Barbarian, IQ/WC, cat(_General, Wildcard!), page(DF1:18), description(Replaces Camouflage, Disguise (Animals), Mimicry (Animal Sounds, Bird Calls), Naturalist, Navigation (Land), and Weather Sense. Make a HT-based roll for Hiking, Running, or Swimming, or a Per-based roll for Fishing, Survival (any), or Tracking.),
	creates(
		{SK:Camouflage, IQ/E, default(SK:wc Barbarian - 0), page(B183), cat(_General, Military, Outdoor/Exploration)}==0pts,
		{SK:Disguise (Animals), IQ/A, tl(0-12), default(SK:wc Barbarian - 0), page(B187), cat(_General, Criminal/Street, Spy)}==0pts _
	)
Executes when you add wc Barbarian to the list of skills. In the case of my example above, it creates a bunch of skills that default based on the main skill and cost 0 points. Now I was thinking something like this.
Code:
wc Barbarian,
	ListAdd(
		IQ/WC, cat(_General, Wildcard!), page(DF1:18), description(Replaces Camouflage, Disguise (Animals), Mimicry (Animal Sounds, Bird Calls), Naturalist, Navigation (Land), and Weather Sense. Make a HT-based roll for Hiking, Running, or Swimming, or a Per-based roll for Fishing, Survival (any), or Tracking.),
		creates(
			{SK:Camouflage, IQ/E, default(SK:wc Barbarian - 0), page(B183), cat(_General, Military, Outdoor/Exploration)}==0pts,
			{SK:Disguise (Animals), IQ/A, tl(0-12), default(SK:wc Barbarian - 0), page(B187), cat(_General, Criminal/Street, Spy)}==0pts _
		) _
	),
	ListRemove(
		removes(
			{SK:Camouflage},
			{SK:Disguise (Animals)} _
		) _
	)
It would also be nice to be able to make the created skills read only except to remove.
__________________
Thank You,
Torg Smith
TorgSmith is offline   Reply With Quote
Old 04-11-2012, 11:52 PM   #8
Armin
GCA Prime
 
Armin's Avatar
 
Join Date: Aug 2004
Location: Portland, OR
Default Re: Any plans to replace this program?

Quote:
Originally Posted by TorgSmith View Post
After reading my post and your comment I see I did not word that very well. The events I am talking about are ListAdd, ListRemove and maybe ListChange. Right now you are doing ListAdd. The skill script:
Code:
wc Barbarian, IQ/WC, cat(_General, Wildcard!), page(DF1:18), description(Replaces Camouflage, Disguise (Animals), Mimicry (Animal Sounds, Bird Calls), Naturalist, Navigation (Land), and Weather Sense. Make a HT-based roll for Hiking, Running, or Swimming, or a Per-based roll for Fishing, Survival (any), or Tracking.),
	creates(
		{SK:Camouflage, IQ/E, default(SK:wc Barbarian - 0), page(B183), cat(_General, Military, Outdoor/Exploration)}==0pts,
		{SK:Disguise (Animals), IQ/A, tl(0-12), default(SK:wc Barbarian - 0), page(B187), cat(_General, Criminal/Street, Spy)}==0pts _
	)
Executes when you add wc Barbarian to the list of skills. In the case of my example above, it creates a bunch of skills that default based on the main skill and cost 0 points. Now I was thinking something like this.
Code:
wc Barbarian,
	ListAdd(
		IQ/WC, cat(_General, Wildcard!), page(DF1:18), description(Replaces Camouflage, Disguise (Animals), Mimicry (Animal Sounds, Bird Calls), Naturalist, Navigation (Land), and Weather Sense. Make a HT-based roll for Hiking, Running, or Swimming, or a Per-based roll for Fishing, Survival (any), or Tracking.),
		creates(
			{SK:Camouflage, IQ/E, default(SK:wc Barbarian - 0), page(B183), cat(_General, Military, Outdoor/Exploration)}==0pts,
			{SK:Disguise (Animals), IQ/A, tl(0-12), default(SK:wc Barbarian - 0), page(B187), cat(_General, Criminal/Street, Spy)}==0pts _
		) _
	),
	ListRemove(
		removes(
			{SK:Camouflage},
			{SK:Disguise (Animals)} _
		) _
	)
It would also be nice to be able to make the created skills read only except to remove.
I think you may want to check out the owns() and locks() tags (and maybe childof()).

(That's a lot quoted for a small response, but my laptop is annoying, so I'll let it be.)

Armin
__________________
Armin D. Sykes | Visit my GCA5 blog for updates and previews. | Get GURPS Character Assistant 5 now at Warehouse 23.

Last edited by Armin; 04-12-2012 at 01:44 AM. Reason: ordering, clarity
Armin is offline   Reply With Quote
Old 04-12-2012, 04:35 PM   #9
Alden Loveshade
 
Alden Loveshade's Avatar
 
Join Date: Jun 2010
Location: Hmm, looks like Earth, circa CE 2020+
Default Re: Any plans to replace this program?

I don't know enough programming to give much in the way of useful suggestions. But I do use this program every week and my mega-mage who has more spells than I can remember takes many minutes to load. Admittedly my computer's not the fastest on the block--it was considered pretty fast about two or three years ago, but that's ancient history.
__________________
GURPS Fantasy Folk: Elves My first GURPS supplement
Top 12 Clues You're a Role-Playing Old-Timer My humorous (I hope) article that also promotes SJGames/GURPS
Kerry Thornley: Dwarf Planet Eris, Discordianism, and The John F. Kennedy Assassination Without Thornley, there would never have been the Steve Jackson Games edition of Principia Discordia
Alden Loveshade is offline   Reply With Quote
Old 04-12-2012, 05:23 PM   #10
Armin
GCA Prime
 
Armin's Avatar
 
Join Date: Aug 2004
Location: Portland, OR
Default Re: Any plans to replace this program?

Quote:
Originally Posted by Alden_Loveshade View Post
I don't know enough programming to give much in the way of useful suggestions. But I do use this program every week and my mega-mage who has more spells than I can remember takes many minutes to load. Admittedly my computer's not the fastest on the block--it was considered pretty fast about two or three years ago, but that's ancient history.
This should be faster when the new program is available, but that'll still be one of the slower characters to load. Lots of spells means lots of relationships, and the more relationships, the more work GCA has to do to figure out what's connected and what's affected by any changes.

Armin
__________________
Armin D. Sykes | Visit my GCA5 blog for updates and previews. | Get GURPS Character Assistant 5 now at Warehouse 23.
Armin is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Fnords are Off
[IMG] code is Off
HTML code is Off

Forum Jump


All times are GMT -6. The time now is 01:32 PM.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc.