Coldspring performance

19 views
Skip to first unread message

ElKlaaso

unread,
Aug 24, 2010, 1:31:57 PM8/24/10
to ColdSpring-Users
Hi,

I would like to make a request/give an idea about the new coldspring.

Im suspecting that coldspring is calculating a lot at creating a cfc
(especially non-singeltons because they are not cached).
I found this out using JRockit mission control. I can give the names
of the methods that take much time. getMetadata and duplicate are the
worst of these.

So a good idea for coldspring is to pre-calculate as much as is
possible after it reads the xml file.

greets,
klaas

Brian Kotek

unread,
Aug 24, 2010, 6:51:12 PM8/24/10
to coldspri...@googlegroups.com
You should almost never be using ColdSpring to manage transient objects. Not only is it slow, but for a model of any real complexity, it simply doesn't work. That's partly because of the complexity of the relationships, and partly because domain objects require more control over their creation. This may help explain further: http://www.coldspringframework.org/coldspring/examples/quickstart/index.cfm?page=singletons

With that said, there's really not much you can do without introspection, and the only introspection we have in CF is GetMetaData(). So unfortunately simply trying to read the XML isn't an option as it does not provide sufficient information. Further, one of the primary goals of CS2 is to mimic Spring's annotation-based configuration, which means most people using CS2 probably won't even have an XML file at all. So that's another reason why the XML can't be relied upon.

Basically, if there was a reliable way to make things faster (and there probably are some), they'll certainly be examined. But I don't think relying on the XML as a short cut is really an option.

Hope that helps,

Brian



--
You received this message because you are subscribed to the Google Groups "ColdSpring-Users" group.
To post to this group, send email to coldspri...@googlegroups.com.
To unsubscribe from this group, send email to coldspring-use...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/coldspring-users?hl=en.


Mark Mandel

unread,
Aug 24, 2010, 7:20:40 PM8/24/10
to coldspri...@googlegroups.com
Just so you are aware as well - all the details and code of CS2 are available here:
http://sourceforge.net/projects/coldspring/

Particularly the automated documentation here, which is updated with each build, and push to git:
http://sourceforge.net/apps/trac/coldspring/

For interest's sake, all the meta data about what a Bean is hooked up to is stored in it's BeanDefinition (http://coldspring.sourceforge.net/ber/docs/api/coldspring/coldspring/beans/support/BeanDefinition.html), which means at run time, there is no access to getMetaData() calls on a CFC. That is all done when CS2 boots up, and converts it all to BeanDefinition's with AbstractProperties and AbstractValues. (Which is also what is going to make Annotation Support that much easier to implement)

I'm actually just finishing up the RegexPointcutAdvisor for the AOP implementation, hopefully this morning, and except for the RemoteFactoryBean, I think CS2 is functionally on a level with CS1.x.

As per always - testing is always appreciated.

Mark
--
E: mark....@gmail.com
T: http://www.twitter.com/neurotic
W: www.compoundtheory.com

cf.Objective(ANZ) - Nov 18, 19 - Melbourne Australia
http://www.cfobjective.com.au

Hands-on ColdFusion ORM Training
www.ColdFusionOrmTraining.com

Sean Corfield

unread,
Aug 24, 2010, 9:53:33 PM8/24/10
to coldspri...@googlegroups.com
On Tue, Aug 24, 2010 at 4:20 PM, Mark Mandel <mark....@gmail.com> wrote:
> I'm actually just finishing up the RegexPointcutAdvisor for the AOP
> implementation, hopefully this morning, and except for the
> RemoteFactoryBean, I think CS2 is functionally on a level with CS1.x.

Does that mean if we have applications that do not use remote factory
stuff, it might be possible / useful to convert them to run on CS2 at
this time? How far off production-ready would you say the core
functionality of CS2 is?

Is there a migration guide? (to save me looking :) I know there are
some XML differences but I can't quite remember what else you said had
changed, in your talks about CS2...
--
Sean A Corfield -- (904) 302-SEAN
Railo Technologies, Inc. -- http://getrailo.com/
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

Mark Mandel

unread,
Aug 24, 2010, 10:00:51 PM8/24/10
to coldspri...@googlegroups.com
On Wed, Aug 25, 2010 at 11:53 AM, Sean Corfield <seanco...@gmail.com> wrote:
On Tue, Aug 24, 2010 at 4:20 PM, Mark Mandel <mark....@gmail.com> wrote:
> I'm actually just finishing up the RegexPointcutAdvisor for the AOP
> implementation, hopefully this morning, and except for the
> RemoteFactoryBean, I think CS2 is functionally on a level with CS1.x.

Does that mean if we have applications that do not use remote factory
stuff, it might be possible / useful to convert them to run on CS2 at
this time? How far off production-ready would you say the core
functionality of CS2 is?

All the written unit tests are passing at this stage ;) so yes, you could switch.

All tests are currently run on CF9. I haven't done a run through on CF8 in a few weeks, to make sure nothing breaks there.

I've yet to test on Railo, so be aware of that, but will do down the line.

But there is also the proviso that it's alpha code - so 'there be dragons here'.  Let me know if you run into any issues.

The first release will be an Alpha release to allow people to play with it, and see how it works in the 'real world'.
 

Is there a migration guide? (to save me looking :) I know there are
some XML differences but I can't quite remember what else you said had
changed, in your talks about CS2...

So far, all I've documented was the 5 minute getting started guide.
http://sourceforge.net/apps/trac/coldspring/wiki/ColdSpringInFiveMinutes

The automated documentation does show all the objects in question, and provide documentation for the XSD's as well.

That being said, if you set up the XML schemas, it will show you were things need to change, as they will show up as errors in your IDE.

Mark


 
--
Sean A Corfield -- (904) 302-SEAN
Railo Technologies, Inc. -- http://getrailo.com/
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

--
You received this message because you are subscribed to the Google Groups "ColdSpring-Users" group.
To post to this group, send email to coldspri...@googlegroups.com.
To unsubscribe from this group, send email to coldspring-use...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/coldspring-users?hl=en.

Mark Mandel

unread,
Aug 24, 2010, 10:11:34 PM8/24/10
to coldspri...@googlegroups.com
Oh, and if anyone wants to help migrate / write documentation ;o) always all for it :)

Or does that go without saying?

Mark

Dave Shuck

unread,
Aug 24, 2010, 11:00:34 PM8/24/10
to coldspri...@googlegroups.com
Very cool Mark!  I had no idea it was that close. I will be pulling down tomorrow and attempt to swap out cs1 in some of our apps. Thanks for all your hard work. 

Mark Mandel

unread,
Aug 24, 2010, 11:14:52 PM8/24/10
to coldspri...@googlegroups.com
Yeah, I need to write more about this.

Work, ColdSpring, cf.Objective(ANZ), and getting prepped for MAX is sapping a lot of my time :P

Excuses... excuses ;)

Mark

Sean Corfield

unread,
Aug 25, 2010, 1:13:06 AM8/25/10
to coldspri...@googlegroups.com
On Tue, Aug 24, 2010 at 7:00 PM, Mark Mandel <mark....@gmail.com> wrote:
> All the written unit tests are passing at this stage ;) so yes, you could
> switch.
>
> All tests are currently run on CF9. I haven't done a run through on CF8 in a
> few weeks, to make sure nothing breaks there.
>
> I've yet to test on Railo, so be aware of that, but will do down the line.

Good to know. Thanx. I might try it on client project (or rather a
branch of a client project) to see how it does and I'll file tickets
if I run into any problems.

> So far, all I've documented was the 5 minute getting started guide.
> http://sourceforge.net/apps/trac/coldspring/wiki/ColdSpringInFiveMinutes

Cool. I'll see how far that gets me.

Klaas-Jan Winkel

unread,
Aug 26, 2010, 9:33:49 AM8/26/10
to coldspri...@googlegroups.com
I dont agree... what makes a prototype different from a singleton
concerning injecting things? (im aware of the danger of injecting
prototype into singelton, this is not very useful, but the opposite is
straightforward and i need it here and there).

So what i mean is, call the getmetadata after loading xml, and cache
the result of getmetadata... and any calculating on this metadata. So
this cached metadata can be re-used when a new prototype object is
instantiated.
Also annotations have to be read at inialization.. the metadata is
just in a different format.

--
Don't drink and park, accidents cause people

Klaas-Jan Winkel

unread,
Aug 26, 2010, 9:37:57 AM8/26/10
to coldspri...@googlegroups.com
Hi Mark,
Do you have any perforamance tests coldspring 1 vs 2?

--

Brian Kotek

unread,
Aug 26, 2010, 9:54:01 AM8/26/10
to coldspri...@googlegroups.com
You don't agree with what? There is always overhead in having ColdSpring create a bean, whether it is a singleton or not. The dependency graph is already created, but the bean factory still has to go through the dependencies to ensure that they are all actually created. The difference is with a singleton this overhead only happens once. With a transient, it happens each time it is created.

Klaas-Jan Winkel

unread,
Aug 26, 2010, 11:31:12 AM8/26/10
to coldspri...@googlegroups.com
Yes, i know, thats why im asking for as much precalculation as
possible, im convinced the overhead can be minimized for that. Ive a
whole list of functions in coldspring that run slow. For example:

defaultxmlfactory.cfc:
ResolveBeanName ,Flattenmetadata

These are slow because of duplicates and getmetadata.. these can be cached.

greets,
klaas

sipa...@gmail.com

unread,
Aug 26, 2010, 12:12:20 PM8/26/10
to coldspri...@googlegroups.com
Klaas,

I'd be happy to test your modified Coldspring framework if you've got it working.

DW

Sent from my Verizon Wireless BlackBerry

Brian Kotek

unread,
Aug 26, 2010, 12:55:04 PM8/26/10
to coldspri...@googlegroups.com
Again, unless you're trying to use this to process non-singletons none of this is a problem. And if you are trying to use it to process non-singletons I'd be interested to hear why? What kind of beans are they?

Dennis Clark

unread,
Aug 26, 2010, 1:07:44 PM8/26/10
to coldspri...@googlegroups.com
Klaas,

ColdSpring beans are lazy-loaded by default to reduce CS's initial startup time (which can be quite slow). Pre-calculating metadata for lazy-loaded beans seems Wrong to me.

For instance, I could have a CS factory with 50 bean definitions, but my application may only need 5 beans at startup with the other beans loaded on demand. I do not want GetMetaData() calls on the other 45 beans slowing down my application's startup.

As Brian has already pointed out, CS is designed to manage singletons; high performance for generating transients is not one of its goals. If you need to create lots of transient beans then you are better off writing your own transient factory (which you could then define in CS as a singleton if you wanted to).

Of course it may be that we don't quite understand what you're really suggesting. You are welcome to implement your ideas and share them with us so we can see it in action. Both CS1 and CS2 are available as Git repositories: Mark maintains the official CS2 repo on SourceForge (http://sourceforge.net/projects/coldspring/develop) and I have an unofficial clone of CS1 on GitHub (http://github.com/boomfish/coldspring1).

Sharing your code through Git in 5 easy steps:
  1. Clone the repo of the CS version you wish to work from
  2. Implement your ideas and commit them to your local repo
  3. Push your work up to your own remote repo
  4. Tell us about your remote repo & what's in it
  5. There is no step 5
Good luck!

-- Dennis

Dan Wilson

unread,
Aug 26, 2010, 1:43:53 PM8/26/10
to coldspri...@googlegroups.com
I personally am not happy with the statement "CS is designed to manage singletons". I understand Coldspring has a lot of overhead and it just isn't performant for non-singletons. To me, however, that's a ColdSpring limitation.

I find myself writing a lot of custom instance factories to handle non-singletons. This requires the manufacture (or reconfiguration) of a factory object, a configuration in ColdSpring (along with the dependencies) and the implementation of the custom instance factory in code. All of this, because ColdSpring isn't sufficiently performant to handle non-singletons.

I'd prefer to put all my bean definitions in ColdSpring, instance or singleton, and consolidate the management.


DW



William Osler - "We are here to add what we can to life, not to get what we can from life."

Brian Kotek

unread,
Aug 26, 2010, 1:49:16 PM8/26/10
to coldspri...@googlegroups.com
Dan, what are these non-singleton objects that you're creating custom factories for?

Sean Corfield

unread,
Aug 26, 2010, 1:51:17 PM8/26/10
to coldspri...@googlegroups.com
I thought Mark had said that CS2 would address this (to some degree)
and make it reasonable to use CS to manage transients? Mark?

Dan Wilson

unread,
Aug 26, 2010, 1:52:37 PM8/26/10
to coldspri...@googlegroups.com
here's a quick example:

<bean id="InstanceFactory" class="ChallengeWaveCore_CF.model.InstanceFactory">
<constructor-arg name="PropertyMap">
<map>
<entry key="ChallengeAcceptMarker">
<map>
<entry key="path"><value>ChallengeWaveCore_CF.model.ChallengeAcceptMarker</value></entry>
<entry key="initDependancies">
<map>
<entry key="transfer"><ref bean="transfer" /></entry>
</map>
</entry>
</map>
</entry>
<entry key="PasswordChangeValidator">
<map>
<entry key="path"><value>ChallengeWaveCore_CF.model.PasswordChangeValidator</value></entry>
<entry key="initDependancies">
<map>
<entry key="CurrentMemberLoader"><ref bean="CurrentMemberLoader" /></entry>
</map>
</entry>
</map>
</entry>
</map>
</constructor-arg>
</bean>


In the first object, Transfer is needed to deal with changing the status of a pending Challenge Invitation.

In the second object, the currentMemberLoader is needed to load the current member to perform an operation.


Objects + dependencies. Quite normal.

Brian Kotek

unread,
Aug 26, 2010, 1:53:26 PM8/26/10
to coldspri...@googlegroups.com
I guess what I'm trying to understand is what are all these transient objects that people keep saying that want to manage through the bean factory?

Brian Kotek

unread,
Aug 26, 2010, 1:57:08 PM8/26/10
to coldspri...@googlegroups.com
Have you looked at the BeanInjector CFC I created, that is part of my ColdSpring Bean Utilities in RIAForge?

Klaas-Jan Winkel

unread,
Aug 26, 2010, 2:11:13 PM8/26/10
to coldspri...@googlegroups.com
For me, its not much singletons.. just a few.

I use reactor.

I made an extension of the reactor factory, that first checks
coldspring for the bean, coldspring calls back to reactor as the
factory through an unintercepted create method. This way i can use
reactor as the factory, but coldspring for injection. Its just two
pretty simple cfc's that do this.

I noticed that reactor is not good with business rules that span
multiple relations, so for each application i make a
Relationalbusinessrules cfc that contains functions that represent
events on which relational rules need to be enforced.

I need to inject this cfc into some records... just 3 or 4 or so...

For the rest, i need to inject some application settings, for example
one record has a getUrl method, but it needs to replace some constants
in the url first.. i inject these in this record.

greets,
klaas

Peter Bell

unread,
Aug 26, 2010, 2:18:44 PM8/26/10
to coldspri...@googlegroups.com
Hey Brian,

Well, in my in-house framework, I inject service classes into business objects so they can implement an active record style pattern while still providing a service API for persistence for non-HTML front ends without duplicating code. In essence I have UserService.save() that does the heavy lifting, but there is also the option to user.save() which just delegates via a variables.UserService.save( this ). I use a similar pattern for handling validations using a generic but extensible library. This means that I inject singletons into *all* of my transients within LightBase. I've built over 80 projects this way and it's a really good fit for my use case (YMMV).

@OP,

It was primarily the fact that CS wasn't optimized for transients that caused me to write LightWire. Of course, you could use CS plus Brian's BeanInjector, but that seemed a lot of framework at the time given that I only needed DI (not AOP or remote proxies or any of the rest of the CS goodness) and it's a problem you can solve from scratch in about 10-12 hours and just a few hundred lines of code if you roll your own solution. I know plenty of people that have written DI solutions for themselves, and I'm looking forward to both CS2 (which I also thought was going to be more "transient friendly") and Sean's upcoming DI offering. For ColdBox users there is also a native DI solution as well as support for CS and LW.

If you're using CS and happy with it, look at Brian's BeanInjector. Otherwise there are plenty of other ways of being able to inject beans into your transients.

Best Wishes,
Peter 

Dan Wilson

unread,
Aug 26, 2010, 5:02:41 PM8/26/10
to coldspri...@googlegroups.com
I have at one point. I believe that was focused on auto-wiring by name, is that right?

I do prefer the explicit configuration of ColdSpring XML, rather than matching by name, but I can appreciate where you are coming from.


DW

Brian Kotek

unread,
Aug 26, 2010, 6:02:09 PM8/26/10
to coldspri...@googlegroups.com
It sounds like my BeanInjector would work perfectly for this kind thing. Just inject it into your custom Reactor factory and use it to wire the records you're creating. 

Don't get me wrong, it would be great to speed up everything as much as possible. But even in Spring, you're supposed to use certain annotations to handle autowiring of transients. And those annotations actually leverage AspectJ to work, meaning most of the overhead is eliminated at compile time. That said, I'm looking forward to seeing what Mark has done in this area.

Thanks,

Brian 

Klaas-Jan Winkel

unread,
Aug 26, 2010, 6:54:53 PM8/26/10
to coldspri...@googlegroups.com
What makes beaninjector more suitable for transient objects? Isnt i
better to say prototype? (transient means they were once persisted,
but we're talking about more right?)

Peter Bell

unread,
Aug 26, 2010, 7:07:11 PM8/26/10
to coldspri...@googlegroups.com
A transient is a non Singleton bean (see Singleton pattern - "there can be only one"). A prototype is often used to refer to one way of instantiating transients - the prototype pattern is often used to speed up instantiation of objects by having a "prototype" object that can be copied and/or reused although it's very language specific as to whether the pattern makes sense. Prototype also has other meanings such as when describing how objects are done in Javascript - prototype vs class based.

Whether an object is transient and whether it was once persisted are orthogonal (independent). You might reconstitute data within a singleton from a persistent store and a transient may never have been or be persisted.

Transient is a pretty good term for this discussion.

Best Wishes,
Peter

Mark Mandel

unread,
Aug 26, 2010, 7:43:34 PM8/26/10
to coldspri...@googlegroups.com
We're still pre-alpha ;o) so no, not yet.

Got some performance tweaks to do too for Alpha1 (or whatever we call it)
Primarily:
https://sourceforge.net/apps/trac/coldspring/ticket/52

Mark


On Thu, Aug 26, 2010 at 11:37 PM, Klaas-Jan Winkel <k.wi...@gmail.com> wrote:
Hi Mark,
Do you have any perforamance tests coldspring 1 vs 2?



Mark Mandel

unread,
Aug 26, 2010, 7:48:52 PM8/26/10
to coldspri...@googlegroups.com
Yup, that is totally the plan.

New locking architecture is already in place, which should make things much better for transients, and it's about as fast as I can probably make it.

Past the first Alpha release, also planning on doing stuff like:
https://sourceforge.net/apps/trac/coldspring/ticket/47
http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-lookup-method-injection

e.g.

<!-- a stateful bean deployed as a prototype (non-singleton) -->
<bean id="command" class="fiona.apple.AsyncCommand" scope="prototype">
  <!-- inject dependencies here as required -->
</bean>

<!-- commandProcessor uses statefulCommandHelper -->
<bean id="commandManager" class="fiona.apple.CommandManager">
  <lookup-method name="createCommand" bean="command"/>
</bean>

To make it even easier to manage prototype/transient beans.

Mark


On Fri, Aug 27, 2010 at 3:51 AM, Sean Corfield <seanco...@gmail.com> wrote:
I thought Mark had said that CS2 would address this (to some degree)
and make it reasonable to use CS to manage transients? Mark?



Klaas-Jan Winkel

unread,
Aug 27, 2010, 2:48:42 PM8/27/10
to coldspri...@googlegroups.com
@PB:

I looked up the prototype pattern, indeed.. never realized that they
were design patterns.
Im user reactor, and i need all these transients because im importing
stuff into a database (please dont start a discussion about if this is
a good idea, ive thought about it carefully).
So, when using JRockit mission control, i can see that createobject
takes a lot of cpu time.
The prototype pattern would be great to avoid this, but i dont see a
way to clone an object, do you guys?
I thought about updating reactor, adding a destroy method to the
record objects (the transients), when its called reactorfactory takes
the record back into a cache and clears it completely to its original
state, so it can re-issue this record again. Isnt that a good idea?

greets,
klaas

Brian Kotek

unread,
Aug 27, 2010, 3:01:31 PM8/27/10
to coldspri...@googlegroups.com
Sorry, I have to ask it anyway: you do realize that Reactor was never meant to be a data import tool, and that the root of your problem appears to be caused by using Reactor for something it was never meant to do, right?

Peter Bell

unread,
Aug 27, 2010, 3:20:23 PM8/27/10
to coldspri...@googlegroups.com
You may want to ping Mark Drew. I think he did some stuff to Reactor to speed up loading of collections using an IBO style pattern. No idea if it ever got committed to the project or not. This is probably a good question for the Reactor list . . .

Best Wishes,
Peter

Peter Bell

unread,
Aug 27, 2010, 3:23:40 PM8/27/10
to coldspri...@googlegroups.com
Hey Brian,

You're right, but FWIW there was a discussion on this on a Grails list a while back and it *is* possible to use an ORM to bulk load tens or hundreds of thousands of records. Use case is usually where there is rich validation in the domain model that people want to leverage for validating the imports without duplicating code, so I see why this is raised sometimes. No idea if it'll be possible to get Reactor to do this, but it isn't conceptually impossible in an ORM (e.g. Hibernate) - it's just problematic, requires performance tweaking, and may end up not being performant depending on the details of the implementation . . .

Klaas-Jan Winkel

unread,
Aug 27, 2010, 5:23:41 PM8/27/10
to coldspri...@googlegroups.com
Its not impossible, on my laptop it takes 0,5 seconds for 1 product to
get downloaded by http, converted from xml to a bean, converted from a
bean to reactor record and saved... ofcourse it goes in batches of
multiple.. this is the average per product. one products concerns
about 5 tables or so.. its not to bad.. but on the production server
many other sites are running at its more like 1 seconds.. its not a
problme, but i'd like it a bit faster..
I optimized reactor a bit.. made it much faster by using alternatives
to getmetadata..
As peter said, its the domain validation thats the reason i use
reactor.. i dont wanna bypass all my business rules.. would be
horrible

--

Brian Kotek

unread,
Aug 27, 2010, 5:39:59 PM8/27/10
to coldspri...@googlegroups.com
When you said "importing data" I assumed (and I think Peter did too) you meant a bulk data import, which is typically tens or hundreds of thousands of records. For a small number this will probably work fine.

Klaas-Jan Winkel

unread,
Aug 27, 2010, 5:44:03 PM8/27/10
to coldspri...@googlegroups.com
Its at the most 60.000.. but it doesnt matter if it takes a day.. the
site will stay fully functional trhoughout.. i just dont want it to
take up to much resources..

Klaas-Jan Winkel

unread,
Aug 28, 2010, 11:28:06 AM8/28/10
to coldspri...@googlegroups.com
I wanted to try coldspring 2..

but now i need GIT?
I hate version repositories.. all this command line shit.. plugins and stuff.
I just wanna download a zip with the files, or install a windows
application or a eclipse plugin.. and than i find that egit is in
incubation..
arrghhhh I feel like pulling out my hair.

Klaas-Jan Winkel

unread,
Aug 28, 2010, 11:29:04 AM8/28/10
to coldspri...@googlegroups.com
owyeah. .and then im looking for a userinterface, and i get a list of
10 different ones...

Peter Bell

unread,
Aug 28, 2010, 11:35:58 AM8/28/10
to coldspri...@googlegroups.com
On a Mac gitx is great. On a PC, there's TortoiseGit, but either way I'd thorough recommend getting used to the command line interface. I hated it and am now glad I invested the time. Anyway, cloning a repo isn't that complex, so just google/follow a tutorial (plenty of good ones on Github). And it's an investment in any future work you do with OSS software as many of them are moving to github.

Best Wishes,
Peter

Sean Corfield

unread,
Aug 28, 2010, 2:31:40 PM8/28/10
to coldspri...@googlegroups.com
On Sat, Aug 28, 2010 at 8:28 AM, Klaas-Jan Winkel <k.wi...@gmail.com> wrote:
> but now i need GIT?
> I hate version repositories.. all this command line shit.. plugins and stuff.
> I just wanna download a zip with the files

If you actually care about contributing, you wouldn't see this as a
burden - you'd see it as a learning opportunity. If you're too lazy to
spend a bit of effort on that, people aren't going to be very
convinced about your desire to contribute... It would take just a few
minutes of your time and here's a link to get you started:

http://sourceforge.net/scm/?type=git&group_id=308174
--
Sean A Corfield -- (904) 302-SEAN
Railo Technologies, Inc. -- http://getrailo.com/
An Architect's View -- http://corfield.org/

"If you're not annoying somebody, you're not really alive."
-- Margaret Atwood

Dennis Clark

unread,
Aug 28, 2010, 4:03:49 PM8/28/10
to coldspri...@googlegroups.com
Sure, it's easier to just download a zip with the files.

Let's say we gave you a zip file of the current snapshot of coldspring 2. You extract it, read the source code for a few days, and write some simple apps to test it out. Then you get an idea for an enhancement and modify your copy of the code. You get it working, clean up your changes, maybe even include a unit test for it. Now you want to get your enhancement into upstream.

Meanwhile, Mark has been busy hacking away and has made over a dozen commits since you downloaded the snapshot. You send up a patch that diffs your changes against the  snapshot you downloaded, but chances are it won't apply cleanly to the latest code on upstream. Mark doesn't have time to figure out what you changed and how to merge it into his code: after all they're your changes, not his.

You download a new copy, and are faced with either performing a 3-way merge or re-implementing your changes from scratch on the new copy. Let's say that this time you manage to get out a patch that applies cleanly to the latest upstream code.

Other folks take a look at it and like it, but notice that it doesn't handle some edge cases that you didn't think of. The say they'll accept your patch only after you address those issues. So now you're back at square 1.

With Git, the story becomes quite different. Not only will Git download upstream updates and merge them for you, but it will allow you to track your own changes without needing commit access to upstream! In fact you could continue to develop your own enhancements (with version control) and keep them in sync with upstream indefinitely without upstream ever accepting your changes.

So yes, Git requires some learning up front, but making custom changes, keeping up with other people's changes, and contributing your changes back becomes MUCH easier when you are using Git.

However, if you're not prepared to get your hands dirty with your code and you want something that "just works", then ColdSpring 2 may not be ready for you yet: after all the project is still in prealpha status. Mark will probably make a zip download available when the project gets to beta status.

-- Dennis

Brian Kotek

unread,
Aug 28, 2010, 4:20:45 PM8/28/10
to coldspri...@googlegroups.com
If you don't know about Git and aren't willing to invest the short time it takes learn how to clone a repository or download something like TortoiseGit, you can wait for an official alpha or beta release. Git is a very popular (and rapidly growing) version control system, and IMHO is definitely the best VCS out there right now. My advice to you would be to spend a little while learning about it, since you're only going to be seeing it in use more and more. You'll notice no one else on the list is complaining. 

Mark Mandel

unread,
Aug 28, 2010, 7:37:11 PM8/28/10
to coldspri...@googlegroups.com

Also remember - we haven't had a release yet!

Mark

Sent from my mobile device

Michael Kear

unread,
Sep 14, 2010, 12:22:09 PM9/14/10
to coldspri...@googlegroups.com

I have decided to try Git in my system, because i really do need to improve my version control.   Can anyone who uses windows recommend whether i should implement  the MsysGit  or the Cygwin flavours.      Does it matter?   (I don’t have high volume, just increasing complexity with multiple clients using the same code base nowadays).

 

 

Cheers

Mike Kear

Windsor, NSW, Australia

0414 622 847

Adobe Certified Advanced ColdFusion Developer

AFP Webworks Pty Ltd

http://afpwebworks.com

Full Scale ColdFusion 9 hosting from A$15/month

Brian Kotek

unread,
Sep 14, 2010, 12:27:52 PM9/14/10
to coldspri...@googlegroups.com
I would just use TortoiseGit. It's been a while since I set it up but I think it has everything you need.

--

Brian Kotek

unread,
Sep 14, 2010, 12:29:26 PM9/14/10
to coldspri...@googlegroups.com
I take that back, I think I did have to install Git, I'm using the msysgit version. I just not positive whether I had to install this myself or whether TortoiseGit did it as part of the install. 

Dennis Clark

unread,
Sep 14, 2010, 1:07:58 PM9/14/10
to coldspri...@googlegroups.com
On Windows, select the git distribution based on your needs:
  • Use the Cygwin git package if you already use Cygwin or need to use git cvsimport (as it depends on programs not provided with msysgit).
  • Use the MsysGit net installer if you don't use Cygwin but need access to bleeding-edge versions of Git (since the installer builds the binary from a clone of 4msysgit.git).
  • Use the official Git for Windows installer if none of the above apply, or you wish to use Git with Aptana Studio 3 (which requires it).
I use Git for Windows for my regular git work. It includes the bash shell and some standard GNU command tools. The installer offers the option to add Git to your system path, but I suggest saying NO to this; you are better off using git from the included bash shell. I also suggest using an enhanced console application like "Console" (http://console.sourceforge.net) to launch your Git bash shell. If you use Console, just remember to hold down the shift key if you want to highlight console text for copying to the clipboard.

Git for Windows 1.7.0.2 has a bug with git svn import. Git for Windows 1.7.2.3 was just released and fixes that bug (among other things I'm sure), so it may be time for me to upgrade.

Cheers,

-- Dennis

On Tue, Sep 14, 2010 at 12:22 PM, Michael Kear <mk...@afpwebworks.com> wrote:
--

Michael Kear

unread,
Sep 14, 2010, 8:16:29 PM9/14/10
to coldspri...@googlegroups.com

I downloaded the windows installer for Git,  and set it to installing itself,   then I saw that it was the Cygwin package.     I’ve had bad experiences before with stopping installations in the middle of the install routine, so i decided to let it finish.   It downloaded 1.54GB of installation files!!!  It’s been installing for hours now.   The c:\Git folder and its subfolders comes to 3.99GB!!!!!   And its still only 85% complete on the setup.

 

Does that sound right?     Really?  Its that huge??  Or have i done something stupid?

 

 

Cheers

Mike Kear

Windsor, NSW, Australia

0414 622 847

Adobe Certified Advanced ColdFusion Developer

AFP Webworks Pty Ltd

http://afpwebworks.com

Full Scale ColdFusion 9 hosting from A$15/month

 

Mark Mandel

unread,
Sep 14, 2010, 8:18:22 PM9/14/10
to coldspri...@googlegroups.com
Yeah, that doesn't sound right.

I tend to use cygwin whenever I'm in Windows... sounds like you somehow are installing *everything* with cygwin?

Mark

Brian Kotek

unread,
Sep 14, 2010, 9:19:14 PM9/14/10
to coldspri...@googlegroups.com
That's definitely very wrong. Did you try just installing TortoiseGit?

Michael Kear

unread,
Sep 14, 2010, 10:06:22 PM9/14/10
to coldspri...@googlegroups.com

Wow.  Now i have a whole operating system i think.     I have a folder c:\git  (it wanted to install in c:\cygwin but i changed that to c:\git) with 1.54GB in it,  and subfolders like:  \bin,   \cygdrive, \dev,\  \etc,   \home,  \lib,  \srv,  ]tmp,   \usr,  \var,  \opt,  \sbin

 

Can anyone shed any light on what i have here?   I thought i was just downloading the windows install of GIT but instead I’ve downloaded and installed something else I think.

 

Brian, I downloaded TortoiseGit, but I didn’t try installing it yet, because this Cygwin was already installing.  So i thought I’d wait and let that finish before i tried installing TortoiseGIt.   Now I don’t know where i am so i’ll just wait until i am sure I know what i’ve done with this Cygwin.   I’ve gone 14 years now without Git, so another day or two isn’t going to make much difference.  On the other hand, if i screw it all up, it could cost me a lot of time.

 

 

Cheers

Mike Kear

Windsor, NSW, Australia

0414 622 847

Adobe Certified Advanced ColdFusion Developer

AFP Webworks Pty Ltd

http://afpwebworks.com

Full Scale ColdFusion 9 hosting from A$15/month

 

Mark Mandel

unread,
Sep 14, 2010, 10:08:36 PM9/14/10
to coldspri...@googlegroups.com
Cygwin is actually a 'sort of' emulator for a *nix environment on Windows.

Hence you have all those folders, because that's how *nix works.

Cygwin has a variety of packages and programs that can be installed with it (it's actually pretty cool), but normally you only end up choosing a handful.

Somehow it looks like you installed them all?

Mark

Dennis Clark

unread,
Sep 14, 2010, 10:16:47 PM9/14/10
to coldspri...@googlegroups.com
The install instructions on the TortoiseGit home page (http://code.google.com/p/tortoisegit/) says "Please install msysgit 1.6.1 or above before install tortoisegit http://code.google.com/p/msysgit".

I uninstalled my previous Git for Windows and installed http://code.google.com/p/msysgit/downloads/detail?name=Git-1.7.2.3-preview20100911.exe. It installed in seconds and didn't download any extras. In addition to the steps I mentioned earlier, I also unchecked "install shell extension" as TortoiseGit seems to be the more popular Git shell extension these days. I'll look at TortoiseGit later.

The release notes for this version are a bit scary ("you should not install and use it if you cannot fix bugs yourself"), but I don't think this version is any less supported than any previous one. It seems to be working on my existing local repositories.

A simple hint on whether you have the right installer: Git for Windows defaults to installing to "C:\Program Files\Git", while MsysGit defaults to installing to "C:\Git". I suspect that Michael picked an installer that downloads and builds the entire Git toolchain.

-- Dennis

Dennis Clark

unread,
Sep 14, 2010, 10:26:07 PM9/14/10
to coldspri...@googlegroups.com
Yeah, I think that is what happens if you run Cygwin's setup.exe and select the topmost checkbox in the package selection tree: it installs _EVERY_ package in the Cygwin repository. Not even *nix diehards are likely to want that. The Cygwin folks should have the installer give an "ARE YOU SURE?" warning when someone tries it.

BTW I'm pretty sure TortoiseGit will NOT work with Cygwin's git.

-- Dennis

Michael Kear

unread,
Sep 14, 2010, 11:36:37 PM9/14/10
to coldspri...@googlegroups.com

I think you’re right, Mark, Dennis.    I installed the ‘default’ option at the top of the list.    The guys writing this, took the usual attitude that Unix people take – ‘its not REAL programming if anyone could read the code without a manual beside them’ thats why there were helpful functions like ‘xbiff’ and ‘xdvi’  and ‘rxvt’  - no indication anywhere what those things do, and whether or not i might want them.  So it was a case of being forced to install everything or take on a long study of documentation somewhere to find out what all those things do.

 

It’s a pity that some programmers have an attitude that readable variable names and table name etc are somehow a lower form of enterprise.  Perhaps its a form of snobbery or elitism,  i don’t know.   But they make it unnecessarily difficult for newcomers to understand what’s going on.   I am maintaining an application these days that I inherited that has lots of these things – processes peppered with variables named v1 and v23  and q87 apparently because the previous programmer thought it was unnecessary typing to use an actual word for the variable name.      Oh yes and to make it even more entertaining,  ‘v1’ on one process, isn’t the same thing as ‘v1’ on another.   Why we couldn’t have had variables named ProductID or StoreID i don’t know.

 

Now i think i’ll delete it all and try again with TortoiseGit.

Reply all
Reply to author
Forward
0 new messages