• fassembler discussion

  • "Opensourcing" fassembler (was: Command line option for revision?)

    from darcy on May 11, 2008 07:15 PM
    On Fri, May 9, 2008 at 7:40 PM, Rob Miller <robm@...> wrote:
    > maybe that's b/c i think of fassembler as more of a general tool, sort of like
    > make or buildit.
    
    I lean pretty strongly in the opposite direction.
    
    First of all, it seems premature to worry about the generality of
    fassembler.  It's by far the best build tool we've ever had, but
    there's still tons of room for improvement -- as Paul's svn-revision
    flag and the various incarnations of our site creation script show us.
     I just don't really think it's beneficial to be worried about the
    generality of a build tool which no one else uses when it doesn't yet
    even satisfy all of our needs.  Our top priority for a build tool is
    satisfying our internal needs for building our software, and I think
    even if we want to offer it to the wider world the best way to do that
    is to make it really solid for ourselves and only then work on
    extracting out the openplans-isms and providing the generally useful
    bits.  After all, given its purpose, if it's not really, really,
    really useful to us, why should we expect anyone else to want it?
    
    By no means do I want to make the above case too strongly or too
    generally -- the fact that fassembler is a build tool is a very
    important factor in my thinking, and the equation would be completely
    different for a different type of software program.  But it is just a
    build tool; does the world really need yet another general purpose
    build tool?  It's got some very nice features to it, but I don't think
    an abort/retry/viewlogs prompt or an interactive merge is really
    enough to make fassembler a killer app; ultimately the reason we like
    fassembler is that it builds an openplans stack for us more easily
    than anything we've had before, and that's, of course, not something
    that can be provided generally.  If there are features in fassembler
    that other, general purpose build tools lack and could really use,
    there's no reason why we shouldn't try to extract them and contribute
    them (or at least "conceptually extract" them; if nothing else make
    some feature requests) to other build tools, but positioning
    fassembler as an *alternative* build tool just doesn't strike me as
    particularly valuable for anyone.
    
    Because consider, loosely, the costs and the benefits of trying to
    make fassembler a generally useful open source project up front.  If
    we do, we inevitably end up creating rather more work for ourselves as
    we try to keep our software concepts from leaking into the builder --
    spreading things out across multiple packages, limiting our options,
    and so on.  The benefit to the world, meanwhile, is questionable,
    since there are plenty of build tools out there so it's not like we're
    providing something that fills a real need.  So is the internal
    benefit -- we're not particularly likely to gain a whole lot from
    attracting a wide audience for fassembler-independent-of-our-software:
    it's pretty stable and relatively small, so we don't have much need
    for "community bugfixes" [though I could imagine this might change if
    we made it totally general and got it tremendously popular with active
    contributions!]; and since the problem we're trying to solve -- to
    finally come up with an easy way to build the openplans stack -- _is_
    so specific to us, I don't think there's much potential for cool,
    unanticipated new features to provide a whole lot of value back to us;
    we just want to figure out how to make our software build easily, we
    don't need a whole lot of exciting innovation and cutting edge ideas.
    
    On the other hand, if we don't worry about its general value at all,
    the world won't really be losing anything, and we'll be able to very
    efficiently polish it and hone in on exactly what we need to make a
    really great openplans-stack build tool -- just like Ian did such a
    great first pass of when he originally wrote it.
    
    >  of course, we may not have making fassembler work as a more general tool on
    > our list of cares; it's certainly not a high organizational priority.
    
    So, actually, I think I'm arguing that it's not only a low
    organizational priority, it's also quite counterproductive to existing
    organizational priorities to make fassembler work as a general tool: a
    low priority because fassembler doesn't inherently provide a whole lot
    of value to the world, and counterproductive because trying to make it
    general will just hinder our immediate priorities of being able to
    build openplans software stacks quickly and easily.
    
    egj
    
    Thread Outline:
  • Re: "Opensourcing" fassembler (was: Command line option for revision?)

    from k0s on May 12, 2008 12:45 PM
    On Sun, May 11, 2008 at 07:15:33PM -0400, Ethan Jucovy wrote:
    > On Fri, May 9, 2008 at 7:40 PM, Rob Miller <robm@...> wrote:
    > > maybe that's b/c i think of fassembler as more of a general tool, sort of like
    > > make or buildit.
    > 
    > I lean pretty strongly in the opposite direction.
    > 
    > First of all, it seems premature to worry about the generality of
    > fassembler.  It's by far the best build tool we've ever had, but
    > there's still tons of room for improvement -- as Paul's svn-revision
    > flag and the various incarnations of our site creation script show us.
    >  I just don't really think it's beneficial to be worried about the
    > generality of a build tool which no one else uses when it doesn't yet
    > even satisfy all of our needs.  Our top priority for a build tool is
    > satisfying our internal needs for building our software, and I think
    > even if we want to offer it to the wider world the best way to do that
    > is to make it really solid for ourselves and only then work on
    > extracting out the openplans-isms and providing the generally useful
    > bits.  After all, given its purpose, if it's not really, really,
    > really useful to us, why should we expect anyone else to want it?
    <snip/>
    
    Just as an aside, one of the reasons why I found writing topp.build difficult (both psychologically and otherwise) was the perceived need to make things work generally.  Having a build tool that is specialized to our needs removes this difficulty and lets us do whatever we want, for better or worse.
    
    So I'm +1 on almost everything said here.  
    
    I would like to see things be kept as easy as possible for non-TOPP people to build our software.  Even if we're not interested in outside contributions or use at this point (which we're not, as I understand things), I think writing fassembler with this in mind is probably easier to do up front than to reengineer later.  I can see the other point of view here too (that is, why waste our time keeping fassembler working outside of our core developers at this point of time?), but I'm speaking purely from my perspective on how I like to develop software.
    
    Jeff
    
    • Re: "Opensourcing" fassembler (was: Command line option for revision?)

      from darcy on May 12, 2008 12:50 PM
      On Mon, May 12, 2008 at 12:44 PM, Jeff Hammel <jhammel@...> wrote:
      >  I would like to see things be kept as easy as possible for non-TOPP people to build our software.  Even if we're not interested in outside contributions or use at this point (which we're not, as I understand things), I think writing fassembler with this in mind is probably easier to do up front than to reengineer later.  I can see the other point of view here too (that is, why waste our time keeping fassembler working outside of our core developers at this point of time?), but I'm speaking purely from my perspective on how I like to develop software.
      
      +1.  Just to be clear, let me disambiguate:
      
       * Building fassembler in a way that allows non-TOPPers to build our
      software: +1.
       * Building fassembler in a way that allows fassembler to build any
      software: -1.
      
      In other words, I think Fassembler's purpose should be to build The
      OpenPlans Software Stack only, but to build it for anyone, not just
      TOPP.
      
      egj
      
      • Re: "Opensourcing" fassembler (was: Command line option for revision?)

        from k0s on May 12, 2008 12:53 PM
        On Mon, May 12, 2008 at 12:50:15PM -0400, Ethan Jucovy wrote:
        > On Mon, May 12, 2008 at 12:44 PM, Jeff Hammel <jhammel@...> wrote:
        > >  I would like to see things be kept as easy as possible for non-TOPP people to build our software.  Even if we're not interested in outside contributions or use at this point (which we're not, as I understand things), I think writing fassembler with this in mind is probably easier to do up front than to reengineer later.  I can see the other point of view here too (that is, why waste our time keeping fassembler working outside of our core developers at this point of time?), but I'm speaking purely from my perspective on how I like to develop software.
        > 
        > +1.  Just to be clear, let me disambiguate:
        > 
        >  * Building fassembler in a way that allows non-TOPPers to build our
        > software: +1.
        >  * Building fassembler in a way that allows fassembler to build any
        > software: -1.
        > 
        > In other words, I think Fassembler's purpose should be to build The
        > OpenPlans Software Stack only, but to build it for anyone, not just
        > TOPP.
        
        Yes, this is what I meant :)
        
        jeff
        
  • Re: "Opensourcing" fassembler (was: Command line option for revision?)

    from ianb on May 13, 2008 12:02 AM
    Ethan Jucovy wrote:
    > On Fri, May 9, 2008 at 7:40 PM, Rob Miller <robm@...> wrote:
    >> maybe that's b/c i think of fassembler as more of a general tool, sort of like
    >> make or buildit.
    > 
    > I lean pretty strongly in the opposite direction.
    > 
    > First of all, it seems premature to worry about the generality of
    > fassembler.  It's by far the best build tool we've ever had, but
    > there's still tons of room for improvement -- as Paul's svn-revision
    > flag and the various incarnations of our site creation script show us.
    
    I would add that a large part of what it's been is a place to codify 
    conventions around our stack, which is something that didn't really 
    happen with topp.build, and kept it from being easy to use as a result.
    
    So in addition to the actual code in fassembler, there's the conventions 
    we build about how a stack is actually used (which includes the 
    filesystem layout, the deployment process, newsite/newbuild, etc).
    
    The fact that both the tool to build and the conventions used to manage 
    the software are kind of mixed together is concerning, and makes this 
    less of a clear choice.
    
    >  I just don't really think it's beneficial to be worried about the
    > generality of a build tool which no one else uses when it doesn't yet
    > even satisfy all of our needs.  Our top priority for a build tool is
    > satisfying our internal needs for building our software, and I think
    > even if we want to offer it to the wider world the best way to do that
    > is to make it really solid for ourselves and only then work on
    > extracting out the openplans-isms and providing the generally useful
    > bits.  
    
    Generally I agree, and I haven't really intended it to be general, but 
    then I also tried to avoid any TOPPisms in the core code.  I think this 
    is good engineering practice.  In this case, the alternative I proposed 
    to what Paul did I think satisfies the needs, keeps TOPP-specific stuff 
    out of fassembler, and probably is a more generally useful feature.  (I 
    didn't actually understand quite what Paul wanted until I saw the patch, 
    actually, so this isn't any criticism of that work)
    
    So, I think this is something of a false choice.  I don't think we'll 
    need to make this choice, and while stuff might slip in we should 
    continue to fix it just as good practice.
    
     > If there are features in fassembler
    > that other, general purpose build tools lack and could really use,
    > there's no reason why we shouldn't try to extract them and contribute
    > them (or at least "conceptually extract" them; if nothing else make
    > some feature requests) to other build tools,
    
    I've thought about this some with relation to zc.buildout.  There are 
    several features that fassembler has that zc.buildout doesn't (and 
    should), and of course zc.buildout is a more generally used tool.
    
    That would be nice for zc.buildout, but I don't know if it would help 
    us.  zc.buildout is not quite the same scope as fassembler, and in 
    practice fassembler *does* have bindings to some of our conventions -- 
    conventions that are not necessarily product-specific, but 
    how-we-glue-our-products-together-specific.  And many of fassemblers 
    features really are at the recipe level.  So, we could change our work 
    to be zc.buildout recipes, maybe keep a lot of the features (so long as 
    we don't use anyone else's recipes), and maybe even get as polished an 
    experience.  But we couldn't use other people's recipes, and I'm not 
    sure other people could easily use our recipes (though maybe so).
    
    If zc.buildout had cool features that *we* want, then maybe this would 
    be useful.  I don't know... does it have features we want?
    
    > but positioning
    > fassembler as an *alternative* build tool just doesn't strike me as
    > particularly valuable for anyone.
    > 
    > Because consider, loosely, the costs and the benefits of trying to
    > make fassembler a generally useful open source project up front.  If
    > we do, we inevitably end up creating rather more work for ourselves as
    > we try to keep our software concepts from leaking into the builder --
    > spreading things out across multiple packages, limiting our options,
    > and so on.  The benefit to the world, meanwhile, is questionable,
    > since there are plenty of build tools out there so it's not like we're
    > providing something that fills a real need.
    
    FWIW, I know of several people building build tools right now, because 
    they don't like the current options.  Build tools all suck in different 
    ways.  Choosing the kind of suckage you like maybe is why people write 
    new build tools ;)
    
    > So is the internal
    > benefit -- we're not particularly likely to gain a whole lot from
    > attracting a wide audience for fassembler-independent-of-our-software:
    
    It depends on our open source strategy, but I think fassembler (or some 
    build tool) could be essential to that strategy.
    
    So, to quote your other email:
    
    >  * Building fassembler in a way that allows non-TOPPers to build our
    > software: +1.
    >  * Building fassembler in a way that allows fassembler to build any
    > software: -1.
    
    If we want people to build our website, or some subset of our website, 
    then sure.  If we want people to mix new pieces into a website, when the 
    website is structured similar to how ours is, then we need to build 
    other kinds of software with fassembler.
    
    Also, fassembler is one piece of what makes a stack like ours feasible. 
      If we want people to use stacks like ours, there needs to be a good 
    build story.  fassembler doesn't *have* to be that story, but it's the 
    only story we have.  If we want to make something like dvhoster open 
    source, we need this story -- without a diverse and interesting set of 
    backend processes dvhoster just isn't interesting or manageable.
    
     From this perspective, maybe adopting and improving a tool like 
    zc.buildout makes more sense.  Of course, internally it doesn't make 
    sense, because it has all the problems of making fassembler open source, 
    except times 100, as we squeeze our specific needs into this general tool.
    
    For the person thinking about how to make a website and how to build 
    their tools, making fassembler open source does just add to the mix and 
    make the decision harder and perhaps more partisan.  So from a strategic 
    point of view it's still not an easy or clear decision.
    
    Also, I think the work we've done building up conventions on building 
    and deploying a site is important, and itself worth sharing.  How that 
    fits into fassembler (or how it should fit into fassembler), honestly I 
    don't know.
    
       Ian
    
    
    • Re: "Opensourcing" fassembler (was: Command line option for revision?)

      from darcy on May 23, 2008 04:44 PM
      On Tue, May 13, 2008 at 12:02 AM, Ian Bicking <ianb@...> wrote:
      >> First of all, it seems premature to worry about the generality of
      >> fassembler.  It's by far the best build tool we've ever had, but
      >> there's still tons of room for improvement -- as Paul's svn-revision
      >> flag and the various incarnations of our site creation script show us.
      >
      > I would add that a large part of what it's been is a place to codify
      > conventions around our stack, which is something that didn't really happen
      > with topp.build, and kept it from being easy to use as a result.
      >
      > So in addition to the actual code in fassembler, there's the conventions we
      > build about how a stack is actually used (which includes the filesystem
      > layout, the deployment process, newsite/newbuild, etc).
      >
      > The fact that both the tool to build and the conventions used to manage the
      > software are kind of mixed together is concerning, and makes this less of a
      > clear choice.
      >
      > Generally I agree, and I haven't really intended it to be general, but then
      > I also tried to avoid any TOPPisms in the core code.  I think this is good
      > engineering practice.  In this case, the alternative I proposed to what Paul
      > did I think satisfies the needs, keeps TOPP-specific stuff out of
      > fassembler, and probably is a more generally useful feature.  (I didn't
      > actually understand quite what Paul wanted until I saw the patch, actually,
      > so this isn't any criticism of that work)
      >
      > So, I think this is something of a false choice.  I don't think we'll need
      > to make this choice, and while stuff might slip in we should continue to fix
      > it just as good practice.
      
      Okay, yeah, I buy that.  My only concern is that we don't try to
      opensource fassembler prematurely or without good reason to, when the
      clearest and most immediate benefit it provides is to the openplans
      software stack.  So I think you're right that I'm offering a false
      choice, or at least confusing the line between developer intentions
      and engineering practice.  So as long as we're all in agreement about
      the goals (at least short-term) for fassembler, I'm perfectly happy to
      say we should aim for good code.  :)
      
      > I've thought about this some with relation to zc.buildout.  There are
      > several features that fassembler has that zc.buildout doesn't (and should),
      > and of course zc.buildout is a more generally used tool.
      
      Which features do you have in mind?
      
      > That would be nice for zc.buildout, but I don't know if it would help us.
      >  zc.buildout is not quite the same scope as fassembler, and in practice
      > fassembler *does* have bindings to some of our conventions -- conventions
      > that are not necessarily product-specific, but
      > how-we-glue-our-products-together-specific.  And many of fassemblers
      > features really are at the recipe level.  So, we could change our work to be
      > zc.buildout recipes, maybe keep a lot of the features (so long as we don't
      > use anyone else's recipes), and maybe even get as polished an experience.
      >  But we couldn't use other people's recipes, and I'm not sure other people
      > could easily use our recipes (though maybe so).
      >
      > If zc.buildout had cool features that *we* want, then maybe this would be
      > useful.  I don't know... does it have features we want?
      
      It depends on who "we" are.  The OpenPlans software stack doesn't use
      buildout, and -- for the same pragmatic reasons that I'm against
      opensourcing fassembler -- I don't think there's any reason to start
      using buildout.  But TOPP does use buildout; Whit's used it for a few
      projects, and Ra just wrote a buildout for vanilla-Listen.  And plenty
      of people outside of TOPP have written buildout recipes centered
      around Deliverance.  So we can contribute useful features from
      fassembler into buildout and still benefit directly.  And of course
      even if we didn't use buildout at all, and if no one else was using
      buildout with our products, we would presumably benefit indirectly --
      a better build tool for the Zope and Plone communities presumably
      translates into more productive and successful projects in those
      communities, some percentage of which it's not crazy to assume TOPP
      will one day want to reuse.
      
      > If we want people to build our website, or some subset of our website, then
      > sure.  If we want people to mix new pieces into a website, when the website
      > is structured similar to how ours is, then we need to build other kinds of
      > software with fassembler.
      >
      > Also, fassembler is one piece of what makes a stack like ours feasible.  If
      > we want people to use stacks like ours, there needs to be a good build
      > story.  fassembler doesn't *have* to be that story, but it's the only story
      > we have.  If we want to make something like dvhoster open source, we need
      > this story -- without a diverse and interesting set of backend processes
      > dvhoster just isn't interesting or manageable.
      >
      > From this perspective, maybe adopting and improving a tool like zc.buildout
      > makes more sense.  Of course, internally it doesn't make sense, because it
      > has all the problems of making fassembler open source, except times 100, as
      > we squeeze our specific needs into this general tool.
      >
      > For the person thinking about how to make a website and how to build their
      > tools, making fassembler open source does just add to the mix and make the
      > decision harder and perhaps more partisan.  So from a strategic point of
      > view it's still not an easy or clear decision.
      >
      > Also, I think the work we've done building up conventions on building and
      > deploying a site is important, and itself worth sharing.  How that fits into
      > fassembler (or how it should fit into fassembler), honestly I don't know.
      
      This, I think, also feels premature to me.  I think it's clear that
      "fassembler is one piece of what makes a stack like ours feasible" but
      I also think that our stack isn't really there yet; fassembler has
      taken it a big step forward, and I think will continue to do so, but I
      at least don't yet feel confident that our stack is feasible, or that
      our conventions on building and deploying a site are yet bulletproof.
      So while I'd love for us to share these things, I think we've got a
      lot of work left to figure out this story in practice before we can
      actually tell it to anyone else.
      
      egj
      
      • Re: "Opensourcing" fassembler (was: Command line option for revision?)

        from ianb on May 27, 2008 12:31 PM
        Ethan Jucovy wrote:
        >> I've thought about this some with relation to zc.buildout.  There are
        >> several features that fassembler has that zc.buildout doesn't (and should),
        >> and of course zc.buildout is a more generally used tool.
        > 
        > Which features do you have in mind?
        
        Mostly filemaker, which serves as the basis for all the tasks, where 
        zc.buildout recipes tend to use ad hoc code that isn't very safe.
        
        I also think the configuration in fassembler allows for less verbose 
        build plans.  The line between configuration and code in zc.buildout 
        is... well, maybe not more vague, but it's placed differently.
        
        I also think some parts of our installation story are more sensible, 
        especially how eggs are handled.  But then, I think a lot of people 
        (probably a majority?) would agree with me, so it would not be very 
        controversial to make such a change (I was going to say "to suggest such 
        a change", but it's been suggested several times, and it's really a 
        question of implementation not suggestion).
        
           Ian
        
        
      • Re: "Opensourcing" fassembler (was: Command line option for revision?)

        from ra on May 27, 2008 01:15 PM
        On May 23, 2008, at 1:44 PM, Ethan Jucovy wrote:
        >> I've thought about this some with relation to zc.buildout.  There are
        >> several features that fassembler has that zc.buildout doesn't (and  
        >> should),
        >> and of course zc.buildout is a more generally used tool.
        >
        > Which features do you have in mind?
        
        having finally dug in a bit more w/ zc.buildout, i've got some  
        thoughts on how they compare.
        
        zc.buildout does a better job of encapsulating all of the information  
        needed for a deployment in a single place... there's a single  
        buildout.cfg file, and (in theory, anyway) this and buildout's  
        bootstrap.py script is all you need to go from zero to fully  
        deployed.  the buildout.cfg file is a single file that serves the same  
        purpose as fassembler's projects.txt and build.ini files, in what i  
        think is a more easily understandable format.  this may seem like a  
        small thing, but i think it has a big psychological impact.  when you  
        want to sit down and get started with a new buildout, it's clear where  
        you need to start; with fassembler, this is a bit more fuzzy.
        
        a buildout is made up of "parts", analogous to fassembler's projects.   
        each part has a "recipe", which is a python egg that contains the code  
        that performs the actual work.  the buildout.cfg file defines the  
        parts for a buildout and contains any configuration information  
        required by the various recipes.
        
        buildout does not provide any tools that actually make the process of  
        building a recipe any easier, however.  fassembler provides the  
        "filemaker" (a library that provides all sorts of goodies for pushing  
        files around, handling diffs and sanity checks and such) and a nice  
        task- and  project-based object model.
        
        another difference is that zc.buildout does some weird stuff w/ the  
        sys.path to isolate your buildout's eggs... fassembler doesn't try to  
        solve this problem, instead using virtualenv to handle this.  i think  
        this is a better approach, because it's more like what python folks  
        are already doing to manage this problem, and because it allows for  
        more interactive prototyping.  with virtualenv you can activate an  
        environment and start installing stuff, eventually using "poach-eggs -- 
        freeze" to capture the state of the environment for later  
        reproduction.  w/ buildout, you have to edit the buildout.cfg to  
        specify what eggs you want to use, then re-run the buildout binary to  
        set up the environment.  again, not a huge thing, but it feels more  
        awkward to me.  also, since buildout uses some strange magic to set up  
        the python environment, it's not clear to me how to introspect the  
        python environment to debug the setup.
        
        luckily, buildout and virtualenv are not mutually exclusive.  it  
        wouldn't be hard to create a buildout that simply sets up a bunch of  
        virtualenv's and calls poach-eggs for each one.
        
        >> That would be nice for zc.buildout, but I don't know if it would  
        >> help us.
        >> zc.buildout is not quite the same scope as fassembler, and in  
        >> practice
        >> fassembler *does* have bindings to some of our conventions --  
        >> conventions
        >> that are not necessarily product-specific, but
        >> how-we-glue-our-products-together-specific.  And many of fassemblers
        >> features really are at the recipe level.  So, we could change our  
        >> work to be
        >> zc.buildout recipes, maybe keep a lot of the features (so long as  
        >> we don't
        >> use anyone else's recipes), and maybe even get as polished an  
        >> experience.
        >> But we couldn't use other people's recipes, and I'm not sure other  
        >> people
        >> could easily use our recipes (though maybe so).
        
        i'm curious why you think our recipes wouldn't interoperate w/ other  
        recipes.  they may work differently, but are they really mutually  
        exclusive?  couldn't they coexist peacefully?
        
        in any event, if we built a compelling tool set for recipe building  
        (which i think we already have), i suspect others would start to use  
        it.  maybe filemaker just needs to be its own package...
        
        >> If zc.buildout had cool features that *we* want, then maybe this  
        >> would be
        >> useful.  I don't know... does it have features we want?
        >
        > It depends on who "we" are.  The OpenPlans software stack doesn't use
        > buildout, and -- for the same pragmatic reasons that I'm against
        > opensourcing fassembler -- I don't think there's any reason to start
        > using buildout.  But TOPP does use buildout; Whit's used it for a few
        > projects, and Ra just wrote a buildout for vanilla-Listen.  And plenty
        > of people outside of TOPP have written buildout recipes centered
        > around Deliverance.  So we can contribute useful features from
        > fassembler into buildout and still benefit directly.  And of course
        > even if we didn't use buildout at all, and if no one else was using
        > buildout with our products, we would presumably benefit indirectly --
        > a better build tool for the Zope and Plone communities presumably
        > translates into more productive and successful projects in those
        > communities, some percentage of which it's not crazy to assume TOPP
        > will one day want to reuse.
        >
        >> If we want people to build our website, or some subset of our  
        >> website, then
        >> sure.  If we want people to mix new pieces into a website, when the  
        >> website
        >> is structured similar to how ours is, then we need to build other  
        >> kinds of
        >> software with fassembler.
        >>
        >> Also, fassembler is one piece of what makes a stack like ours  
        >> feasible.  If
        >> we want people to use stacks like ours, there needs to be a good  
        >> build
        >> story.  fassembler doesn't *have* to be that story, but it's the  
        >> only story
        >> we have.  If we want to make something like dvhoster open source,  
        >> we need
        >> this story -- without a diverse and interesting set of backend  
        >> processes
        >> dvhoster just isn't interesting or manageable.
        >>
        >> From this perspective, maybe adopting and improving a tool like  
        >> zc.buildout
        >> makes more sense.  Of course, internally it doesn't make sense,  
        >> because it
        >> has all the problems of making fassembler open source, except times  
        >> 100, as
        >> we squeeze our specific needs into this general tool.
        >>
        >> For the person thinking about how to make a website and how to  
        >> build their
        >> tools, making fassembler open source does just add to the mix and  
        >> make the
        >> decision harder and perhaps more partisan.  So from a strategic  
        >> point of
        >> view it's still not an easy or clear decision.
        >>
        >> Also, I think the work we've done building up conventions on  
        >> building and
        >> deploying a site is important, and itself worth sharing.  How that  
        >> fits into
        >> fassembler (or how it should fit into fassembler), honestly I don't  
        >> know.
        >
        > This, I think, also feels premature to me.  I think it's clear that
        > "fassembler is one piece of what makes a stack like ours feasible" but
        > I also think that our stack isn't really there yet; fassembler has
        > taken it a big step forward, and I think will continue to do so, but I
        > at least don't yet feel confident that our stack is feasible, or that
        > our conventions on building and deploying a site are yet bulletproof.
        > So while I'd love for us to share these things, I think we've got a
        > lot of work left to figure out this story in practice before we can
        > actually tell it to anyone else.
        
        i disagree.  we are actively dealing with, and making progress  
        against, deployment challenges that are nearly universal to people  
        building web tools.  it's not perfect yet.  it may never be perfect.   
        but we've been through a number of iterations, it's gotten better each  
        time, and i think we already have valuable information, based on real- 
        world pain, encapsulated in our tools and our process.  i don't think  
        we need to wait until we reach some ultimate state of perfection  
        before what we've done is valuable to others.
        
        -r
        
        • Re: "Opensourcing" fassembler (was: Command line option for revision?)

          from ianb on May 27, 2008 02:05 PM
          Rob Miller wrote:
          > zc.buildout does a better job of encapsulating all of the information 
          > needed for a deployment in a single place... there's a single 
          > buildout.cfg file, and (in theory, anyway) this and buildout's 
          > bootstrap.py script is all you need to go from zero to fully deployed.  
          > the buildout.cfg file is a single file that serves the same purpose as 
          > fassembler's projects.txt and build.ini files, in what i think is a more 
          > easily understandable format.  this may seem like a small thing, but i 
          > think it has a big psychological impact.  when you want to sit down and 
          > get started with a new buildout, it's clear where you need to start; 
          > with fassembler, this is a bit more fuzzy.
          
          Perhaps this has to do with a lack of any structure to the projects 
          themselves (or, at least, just a small amount of structure).  Right now 
          we have basically this flat list of projects that you install, either 
          the ones listed on projects.txt or a set of choices you make manually. 
          The requirements (e.g., opencore-zeo requires opencore) add a little 
          structure, but not much.  And the topp project itself sets up the most 
          basic structure that really everything requires.  The only thing that 
          really binds these together is the requirements checkout, and that is a 
          vague entity.  But these things could be made less vague.
          
          > a buildout is made up of "parts", analogous to fassembler's projects.  
          > each part has a "recipe", which is a python egg that contains the code 
          > that performs the actual work.  the buildout.cfg file defines the parts 
          > for a buildout and contains any configuration information required by 
          > the various recipes.
          
          I got the vague impression that a typical part is smaller than a 
          fassembler project.  Or, that typically the levels don't exactly match 
          up.  A fassembler project is larger than a buildout part, and build part 
          is larger than a fassembler task, and a task... well, maybe it's 
          actually smaller than a buildout recipe?
          
          > buildout does not provide any tools that actually make the process of 
          > building a recipe any easier, however.  fassembler provides the 
          > "filemaker" (a library that provides all sorts of goodies for pushing 
          > files around, handling diffs and sanity checks and such) and a nice 
          > task- and  project-based object model.
          > 
          > another difference is that zc.buildout does some weird stuff w/ the 
          > sys.path to isolate your buildout's eggs... fassembler doesn't try to 
          > solve this problem, instead using virtualenv to handle this.  i think 
          > this is a better approach, because it's more like what python folks are 
          > already doing to manage this problem, and because it allows for more 
          > interactive prototyping.  with virtualenv you can activate an 
          > environment and start installing stuff, eventually using "poach-eggs 
          > --freeze" to capture the state of the environment for later 
          > reproduction.  w/ buildout, you have to edit the buildout.cfg to specify 
          > what eggs you want to use, then re-run the buildout binary to set up the 
          > environment.  again, not a huge thing, but it feels more awkward to me.  
          > also, since buildout uses some strange magic to set up the python 
          > environment, it's not clear to me how to introspect the python 
          > environment to debug the setup.
          > 
          > luckily, buildout and virtualenv are not mutually exclusive.  it 
          > wouldn't be hard to create a buildout that simply sets up a bunch of 
          > virtualenv's and calls poach-eggs for each one.
          
          I'm guessing there's still bootstrapping that would require using the 
          buildout egg setup, especially for acquiring the code for the various 
          recipes.  But it might not matter much if that code is managed differently.
          
          >>> That would be nice for zc.buildout, but I don't know if it would help 
          >>> us.
          >>> zc.buildout is not quite the same scope as fassembler, and in practice
          >>> fassembler *does* have bindings to some of our conventions -- 
          >>> conventions
          >>> that are not necessarily product-specific, but
          >>> how-we-glue-our-products-together-specific.  And many of fassemblers
          >>> features really are at the recipe level.  So, we could change our 
          >>> work to be
          >>> zc.buildout recipes, maybe keep a lot of the features (so long as we 
          >>> don't
          >>> use anyone else's recipes), and maybe even get as polished an 
          >>> experience.
          >>> But we couldn't use other people's recipes, and I'm not sure other 
          >>> people
          >>> could easily use our recipes (though maybe so).
          > 
          > i'm curious why you think our recipes wouldn't interoperate w/ other 
          > recipes.  they may work differently, but are they really mutually 
          > exclusive?  couldn't they coexist peacefully?
          > 
          > in any event, if we built a compelling tool set for recipe building 
          > (which i think we already have), i suspect others would start to use 
          > it.  maybe filemaker just needs to be its own package...
          
          I don't know if the recipes would fight, exactly, but I'm not sure if in 
          combination they'd create something all that pleasant.  For instance, if 
          you use filemaker you have some confidence about how things will be 
          overwritten, what gets logged, how changes are tracked, etc.  But if you 
          use a mix of recipes where some use filemaker and some don't, you lose 
          that confidence when running the build.
          
          Logging itself is another issue -- fassembler uses a logging system 
          that, IMHO, is considerably more pleasant for the user/deployer than the 
          typical logging setups for Python, including buildout.  But if you don't 
          use the logging system all the formatting will break out and quickly 
          become unreadable (unless, perhaps, we create a recipe wrapper than 
          monkeypatches stdout and file write operations, etc. -- but that'd be 
          crazy).
          
          Also, a variety of things in fassembler are depending on a specific 
          layout that we are using, and this allows them to be more concise. 
          (This also has a lot to do with everything depending on 
          fassembler:topp.)  Those conventions seem outside the scope of buildout, 
          and so we couldn't generally rely on recipes to use them.
          
          >> This, I think, also feels premature to me.  I think it's clear that
          >> "fassembler is one piece of what makes a stack like ours feasible" but
          >> I also think that our stack isn't really there yet; fassembler has
          >> taken it a big step forward, and I think will continue to do so, but I
          >> at least don't yet feel confident that our stack is feasible, or that
          >> our conventions on building and deploying a site are yet bulletproof.
          >> So while I'd love for us to share these things, I think we've got a
          >> lot of work left to figure out this story in practice before we can
          >> actually tell it to anyone else.
          > 
          > i disagree.  we are actively dealing with, and making progress against, 
          > deployment challenges that are nearly universal to people building web 
          > tools.  it's not perfect yet.  it may never be perfect.  but we've been 
          > through a number of iterations, it's gotten better each time, and i 
          > think we already have valuable information, based on real-world pain, 
          > encapsulated in our tools and our process.  i don't think we need to 
          > wait until we reach some ultimate state of perfection before what we've 
          > done is valuable to others.
          
          I generally agree, in that I think people are trying to do stuff similar 
          to us whether or not we advocate the technique -- this is the nuisance 
          of building a bunch of stuff that integrates together.  Those people 
          would probably be better off knowing what we do than not knowing what we do.
          
          A better first step than actively pushing or repurposing fassembler, 
          might be to write more about the techniques we've used, what's worked 
          and what hasn't, and some principles of the system.  There's a number of 
          people working on these tools at this exact moment, and writing might be 
          a better way to influence their work than code.  I have a half-started 
          post on fassembler that I should probably finish off.
          
             Ian