View Source

<ac:macro ac:name="toc" />


<li>Date: 25 April 2012, 20:00-21:00 UTC</li>
<li><ac:link><ri:page ri:content-title="2012-04-25 Meeting Agenda" /><ac:link-body>Agenda</ac:link-body></ac:link></li>
<li>Moderator: Matthew Weier O'Phinney (nickname weierophinney)</li>
<li>Next meeting: 02 May 2012</li>


<h3>ServiceManager Proposal (Was InstanceManager, Was ServiceLocator)</h3>

<p>(Entire log file below)</p>

<p>Ralph Schindler, after having created both the ServiceLocator proposal and working component (renamed to Zend\ServiceManager), is offering the Zend\ServiceManager prototype as well as a sample integration in the form of a ZendSkeleton application and Zend\Mvc refactoring up for inclusion in the framework.</p>

<p>Many quetions were asked about how ServiceManager and Zend\Di related to one another: Will SM replace DI, how will configuration work, how will we address the configuration structure issue. ralphschindler addressed each of these in the chat log below.</p>

<p>It was then suggested that the component and it's impact on Zend\Mvc be broken down into two phases, the first to get the ServiceManager into the framework as a component, then in a later phase, do the Zend\Mvc refactoring. This was put to a vote, and accepted:</p>

<blockquote><p>Do we accept the ServiceManager RFC?&quot;: 10 positives, 0 negatives and 2 neutrals, consensus: 10</p></blockquote>

<p><strong>tl;dr</strong>: Zend\ServiceManager tests and library code will be completed and a pull request will be issued.</p>


<ac:macro ac:name="html"><ac:parameter ac:name="output">html</ac:parameter><ac:plain-text-body><![CDATA[
pre.log {
white-space: -moz-pre-wrap; /* Mozilla, supported since 1999 */
white-space: -pre-wrap; /* Opera 4 - 6 */
white-space: -o-pre-wrap; /* Opera 7 */
white-space: pre-wrap; /* CSS3 - Text module (Candidate Recommendation) */
word-wrap: break-word; /* IE 5.5+ */
border: 1px solid darkgray;
padding: 0.5em;
<pre class="log">
20:04:18 &lt;weierophinney &gt; Hey, folks, let's get started
20:04:31 &lt; DASPRiD &gt; !time
20:04:31 &lt; Zend\Bot &gt; 2012-04-25 20:04:37 UTC+0000
20:04:34 &lt; DASPRiD &gt; yup
20:04:34 &lt; ocramius &gt; indeed :)
20:04:35 &lt;weierophinney &gt; agenda is here:
20:04:52 &lt;weierophinney &gt; only one topic today: the ServiceManager RFC.
20:04:54 &lt; SpiffyJr &gt; Standup + ZF2 meeting at the same time. Phew.
20:04:59 &lt;weierophinney &gt; ralphschindler: YOU HAVE THE FLOOR
20:05:20 &lt; DASPRiD &gt; $channel-&gt;getFloor()-&gt;remove();
20:05:44 &lt; SpiffyJr &gt; $users-&gt;getUser('DASPRiD')-&gt;slap();
20:05:57 &lt; DASPRiD &gt; SpiffyJr, missing parameter $target
20:05:58 &lt; DASPRiD &gt; :P
20:06:02 &lt;ralphschindle &gt; ok
20:06:24 &lt;ralphschindle &gt; waiting for confluence
20:06:26 &lt;ralphschindle &gt; heh
20:06:58 &lt; DASPRiD &gt; i have no confidence in confluence
20:07:02 &lt; ocramius &gt; put more coal in it
20:07:11 &lt; DASPRiD &gt; throw more hardware at it
20:07:32 &lt;ralphschindle &gt; so the question that we are trying to answer is, has everyone had enough interaction with Zend\ServiceManager and read enough about it to decide how it moves forward
20:07:59 &lt; DASPRiD &gt; i briefly read your email
20:08:06 &lt;ralphschindle &gt; we've had numerous discussions about the various problems that are attempting to be solved
20:08:07 &lt; DASPRiD &gt; sounds good to me
20:08:26 &lt;ralphschindle &gt; one conclusion i have is that not everyone can be pleased by any solution ;)
20:08:27 &lt; ocramius &gt; Nothing to say about ServiceManager itself, it looks good as it is :)
20:08:39 &lt; DASPRiD &gt; to me it basically sounds like an execution layer of a compilation part ;)
20:08:58 &lt;ralphschindle &gt; there are two aspects to this: ServiceManager as a component, and ServiceManager's role in Zend\Mvc
20:09:29 &lt; ocramius &gt; same as I see it, but that's the use case, I'd discuss about educations of user after any eventual questions about implementation is done :)
20:10:24 &lt;ralphschindle &gt; does anyone have any questions about ServiceManager as a component?
20:10:29 &lt; ocramius &gt; ralphschindler: did we completely loose confluence? :)
20:10:35 &lt;ralphschindle &gt; ocramius: its there
20:10:35 &lt; ocramius &gt; ah, yes
20:10:40 &lt; ocramius &gt; one question
20:10:53 &lt; ocramius &gt; I didn't dig into it
20:10:57 &lt; DASPRiD &gt; (How about ServiceManager As A Service (SAAS))… ;)
20:11:08 &lt; ocramius &gt; how is Di currently connected with ServiceManager?
20:11:27 &lt; ocramius &gt; missed that part, is that just a factory? If so, can Di reuse instances from ServiceManager?
20:11:46 &lt;ralphschindle &gt; Di can be consumed in a number of different ways by ServiceManager
20:12:01 &lt;ralphschindle &gt; as a service factory, as an abstract factory, or as an initializer
20:12:23 &lt;WalterTamboer &gt; ralphschindler: I don't like the idea of having it part of Zend\Mvc, it can be more useful as a component so one could use it without using Mvc.
20:12:23 &lt;weierophinney &gt; ocramius: in ralphs' branch right now, he registers it as an AbstractFactory -- bascially, if the SM cannot create an instance, it would fall back to DI.
20:12:55 &lt;weierophinney &gt; WalterTamboer: it's not _part_ of MVC, we're talking _integrating_ with MVC
20:13:02 &lt;WalterTamboer &gt; ah right
20:13:10 &lt; DASPRiD &gt; weierophinney, sidenote: update topic
20:13:11 &lt; ocramius &gt; weierophinney: that is clear to me, but can Zend\Di\Di get back to the ServiceManager (checking $serviceManager-&gt;has('service') or $this-&gt;get('service')) ?
20:13:12 &lt;weierophinney &gt; WalterTamboer: as in, the base location implementation.
20:13:18 &lt;weierophinney &gt; ocramius: yes.
20:13:23 &lt;WalterTamboer &gt; weierophinney: got it
20:13:47 &lt;weierophinney &gt; ocramius: that's the other aspect of what ralphschindler did -- he made a proxy, so you can have DI pull from the SM or from its definitions.
20:13:47 &lt; ocramius &gt; I missed THAT part from the discussion (Thought I've read it though today, but don't know where)
20:13:57 &lt;weierophinney &gt; ocramius: it's actually really, really slick. :)
20:14:20 &lt;weierophinney &gt; ocramius: you can also configure it so that it either prefers DI or the SM -- basically, which to try first.
20:14:21 &lt; ocramius &gt; and that would allow getting dependencies from ServiceManager? Is that something like Zend\ServiceManager\Di ?
20:14:23 &lt; DASPRiD &gt; (darn, i read "sick"…)
20:14:33 &lt;weierophinney &gt; ocramius: yes.
20:14:49 * ocramius goes look. If it is exactly that, you are allowed to shoot me
20:15:01 &lt;weierophinney &gt; ocramius:
20:15:08 &lt; SpiffyJr &gt; i managed to update to ralph's branch and my *entire* project worked as is using DI config
20:15:08 &lt; ocramius &gt; ok, shoot :D
20:15:12 * weierophinn shoots ocramius
20:15:19 &lt;ralphschindle &gt; when it comes down to it, i think that it can be explained as ServiceManager, along with EventManager is a dependency of Zend\Mvc
20:15:19 &lt; SpiffyJr &gt; which was very nice
20:15:22 * weierophinn needs Tazer-over-IP protocol
20:15:31 &lt; ocramius &gt; weierophinney: so here's a question
20:15:46 &lt; ocramius &gt; is the ServiceManager depending on Zend\Di or is Zend\Di depending on ServiceManager?
20:16:01 &lt;ralphschindle &gt; ServiceManager optionally consumers Di
20:16:09 &lt;ralphschindle &gt; consumes*
20:16:19 &lt; SpiffyJr &gt; neither, i think
20:16:26 &lt;ralphschindle &gt; only if you register one of those above linked factories as a service
20:16:27 &lt; SpiffyJr &gt; yea, what he said!
20:16:35 &lt; ocramius &gt; SpiffyJr: it is just because there's usage of Di inside ServiceManager ns
20:16:53 &lt; ocramius &gt; ok, that is almost all of it from me then :)
20:16:56 &lt; DASPRiD &gt; weierophinney,!/gattaca/status/186915498460590080
20:17:01 &lt; DASPRiD &gt; weierophinney, you are 23 days late
20:17:31 &lt;ralphschindle &gt; the DiServiceFactory et al. are implementations of a factory that can be used in situations where you want to use Di as a factory for a particular service
20:18:41 &lt; ocramius &gt; yep, it looks really good and slick, as matt said
20:18:58 &lt;weierophinney &gt; In my talks with ralphschindler, the thing to think about here is that we're currently stuffing a lot of stuff in DI that we really don't care about. A lot of dependencies are simply that, dependencies; we have no interest in pulling them ever, except to fulfill dependencies of other services.
20:19:31 &lt;weierophinney &gt; If we can simplify that story, and make starting with the framework easier, I think we have a win.
20:20:00 &lt;weierophinney &gt; ocramius: the other thing: a lot of the MVC integration ralphschindler did makes sense from a "these are the defaults; they should be readily and quickly available" standpoint.
20:20:19 &lt;weierophinney &gt; but some of that could be relegated to DI as well. We need to strike a balance.
20:20:19 &lt; ocramius &gt; ya
20:20:24 &lt; Akrabat &gt; Do we have a story around configuration yet?
20:20:35 &lt;ralphschindle &gt; Akrabat: what do you mean?
20:20:38 &lt;weierophinney &gt; Akrabat: no. I think we need to work on that.
20:20:56 &lt; DASPRiD &gt; can matthew read minds? i didnt understand the Q either
20:20:56 &lt;weierophinney &gt; ralphschindler: well, the argument from the DIC camp is that the configuration is at least following a regimented structure.
20:20:58 &lt; Gabriel403 &gt; Could someone explain simply what the servicemanager gives me, as a relative noob, compared to not having it?
20:21:03 &lt; DASPRiD &gt; ah
20:21:18 &lt; ocramius &gt; weierophinney: so here's an insane idea. If I wanted to have an instance defined in Di again, would I just replace the factory for it with a dummy factory using the Di abstract one?
20:21:20 &lt; Akrabat &gt; ralphschindler: currently $config['di'] conflates configuration with dependency definition
20:21:22 &lt;weierophinney &gt; ralphschindler: with the SM, configuration becomes more _arbitrary_ in structure.
20:21:30 &lt; SpiffyJr &gt; Gabriel403, a way to configure, store, and retrieve services.
20:21:31 &lt;ralphschindle &gt; Gabriel403: gives you all the structure of Di without auto-wiring and auto-initialization
20:21:32 &lt;weierophinney &gt; ocramius: probably. :)
20:21:42 &lt; ocramius &gt; Gabriel403: ServiceManager is a mix of instantiation (via factories) and registry
20:21:54 &lt; DASPRiD &gt; registry…
20:21:57 &lt;weierophinney &gt; Gabriel403: think of it this way: code-driven DI, vs. configuration driven DI. :)
20:22:00 &lt; ocramius &gt; Gabriel403: it handles what Zend\Di did before, but it without any magic
20:22:05 * DASPRiD enables TOIP on his end
20:22:09 &lt; ocramius &gt; Gabriel403: all the logic goes to these "factories"
20:22:25 &lt; Gabriel403 &gt; OK
20:22:31 &lt; Gabriel403 &gt; Thanks
20:22:37 &lt;weierophinney &gt; Gabriel403: basically, explicit wiring, vs. implicit.
20:22:50 * ocramius awaits DASPRiD's comment
20:22:50 &lt; ocramius &gt; :D
20:22:55 &lt;ralphschindle &gt; so, with regards to configuration, i am not sure i buy the structure of configuration argument
20:22:58 &lt; Akrabat &gt; I'm generally in favour of SM as long as we have a predictable convention for config
20:23:16 &lt;ralphschindle &gt; configuration with DI is largely dictated by the name of a parameter in a method somewhere
20:23:29 &lt;ralphschindle &gt; which is just as arbitrary as the name of a config value on some page in a manual somewhere
20:23:31 &lt; mwillbanks &gt; i have a question for those of us with some existing applications; what does the conversion process look like or can we just tell SM to take our DI config?
20:23:34 * mwillbanks hides
20:23:36 &lt; DASPRiD &gt; ocramius, about what? :P
20:23:49 &lt; ocramius &gt; mwillbanks: you can still use Di config
20:23:54 &lt;ralphschindle &gt; mwillbanks: largely, it still works as is
20:23:56 &lt; DASPRiD &gt; mwillbanks, Di will have a code generator
20:24:02 &lt; mwillbanks &gt; DASPRiD: woot!
20:24:05 &lt;weierophinney &gt; mwillbanks: you can just have it use DI -- that's the fallback. SpiffyJr talked about that earlier. :)
20:24:07 * EvanDotPro enters a bit late.. catching up now.
20:24:07 &lt; ocramius &gt; mwillbanks: just some of the services will be driven by SM, thus Di will have no effect on them
20:24:07 &lt; DASPRiD &gt; mwillbanks, at least that's what ralphschindler's mail says
20:24:17 &lt;weierophinney &gt; mwillbanks: and then gradually move to services as needed.
20:24:32 * mwillbanks would be very happy for a generator to fix performance lol
20:24:41 &lt; Akrabat &gt; ralphschindler: with config['di'], it's easy to find the correct config - you just read the class's API docs page which is auto generated and hence not out of date
20:24:42 &lt; SpiffyJr &gt; mwillbanks, all i did was merge ralph's branch, make the index.php/config updates
20:24:47 &lt; SpiffyJr &gt; and it worked with all other di config
20:24:54 &lt; mwillbanks &gt; nice; all good then
20:25:07 &lt;weierophinney &gt; Akrabat: I would argue having a key named after the factory or service name, and then keys beneath for the configuration parameters.
20:25:09 &lt; Akrabat &gt; ralphschindler: SM will require reading code
20:25:20 &lt;ralphschindle &gt; Akrabat: or a manual page
20:25:22 &lt; ocramius &gt; weierophinney: that needs some good conventions
20:25:29 &lt;ralphschindle &gt; which is the same as you reading an API page
20:25:32 &lt; Akrabat &gt; ralphschindler: assuming manual page is up to date
20:25:38 &lt; Akrabat &gt; API page is auto-generated
20:25:39 &lt;weierophinney &gt; ocramius: definitely.
20:25:42 &lt; ocramius &gt; I liked Di especially for it's strict relation with class signature
20:25:43 &lt;weierophinney &gt; Akrabat: yes.
20:26:00 &lt; Akrabat &gt; i.e I do not trust the ZF1 reference manual for config keys...
20:26:10 &lt;weierophinney &gt; ocramius: the problem, though, is that it also forces case sensitivity on configuration, which is a problem.
20:26:24 &lt;ralphschindle &gt; Di is great for people who write SOLID OO code, but the 30 people in this room don't represent the 3000+ ZF developers out there that dont
20:26:34 &lt;weierophinney &gt; Akrabat: what about having config keys in the API docs for the factories?
20:26:45 &lt; Akrabat &gt; weierophinney: that's definitely the way forward
20:26:47 &lt; ocramius &gt; weierophinney: not sure it is a problem, as keys could contain any utf-8 stuff if I wrote my classes in tr_TR
20:26:50 &lt; DASPRiD &gt; ralphschindler, i thought we where in here because we do :P
20:27:10 &lt; DASPRiD &gt; ocramius, i hope you dont :P
20:27:20 &lt; ocramius &gt; DASPRiD: I'm stupid, but not that much
20:27:24 &lt;weierophinney &gt; ocramius: case senstivitity in keys has been a _huge_ problem in ZF1. Ask Akrabat or Bittarman. :)
20:27:25 &lt; DASPRiD &gt; :D
20:27:38 &lt; ocramius &gt; I'll set it as a fact then :)
20:27:41 &lt; Akrabat &gt; ralphschindler: I'm still not sure I really understand what SOLID is, so I'm sure I don't write it :) Which is of course, one reason why I struggle whent my DI goes "wrong"
20:27:43 &lt; DASPRiD &gt; ocramius, actually, we have no cs convention which states that you have to write zf code in english…
20:27:55 &lt; epokmedi1 &gt; Question : How the ServiceManager will help in some generic initialization like setting the basepath on the basePath view helper ?
20:28:14 &lt; Akrabat &gt; ocramius: yes - take it as read that config keys needs to be lowercase, underscore separated :)
20:28:19 &lt; ocramius &gt; so here's my (small) proposal
20:28:24 &lt;ralphschindle &gt; Akrabat: in short, dont use statics, inject your dependencies all the time, use interfaces appropriately and make sure youre objects dont to get too big with too many responsibilities
20:28:38 &lt;weierophinney &gt; epokmedi1: one possibility is you create a "View" factory for your application. In there, you grab the configuration, and use it to seed helpers _in_ _addition_ _to_ instantiating your view.
20:28:48 &lt; Akrabat &gt; ralphschindler: I'm probably "SOLID-ish" then :)
20:28:50 &lt; ocramius &gt; start separating docs/tutorials for consumers (people that USE the zend skeleton application) and for people who write modules
20:28:55 &lt; ocramius &gt; (reusable)
20:29:01 &lt;weierophinney &gt; epokmedi1: in other words, we can move some of the boilerplate that we have in the application Module into a service factory instead.
20:29:05 &lt; ocramius &gt; that would keep the entire Di stuff hidden
20:29:13 &lt; Akrabat &gt; ocramius: everyone will write modules
20:29:17 &lt; epokmedi1 &gt; weierophinney: okay that's the answer i needed :p
20:29:18 * EvanDotPro is caught up
20:29:26 &lt; Akrabat &gt; you can't do anything in ZF2 without knowing DI atm
20:29:26 &lt; ocramius &gt; while still allowing awesomeness for the ones who wants to write awesome stuff
20:29:34 &lt; ocramius &gt; Akrabat: yes, I know that
20:29:43 &lt;weierophinney &gt; ocramius: I agree with that approach.
20:29:47 &lt; ocramius &gt; Akrabat: but we could simplify the docs
20:29:52 &lt; EvanDotPro &gt; personally, i think if we support both strategies, there's not much of a problem.
20:29:53 &lt; ocramius &gt; assuming people just know about the IM
20:29:57 &lt; ocramius &gt; (SM)
20:30:00 &lt; ocramius &gt; not about Di
20:30:07 &lt; Akrabat &gt; however, I don't disagree with improvind the docs and targetting them
20:30:13 &lt; ocramius &gt; so $locator-&gt;get('stuff')
20:30:16 &lt; ocramius &gt; which is both simpler
20:30:26 &lt; ocramius &gt; but which I fear because of what Symfony 2 became
20:30:27 &lt; SpiffyJr &gt; servicemanager-&gt;get() ;)
20:30:36 &lt; ocramius &gt; SpiffyJr: yeah
20:30:54 &lt; SpiffyJr &gt; mwillbanks, that reminds me - if you use getLocator() it needs to be changed to getSErviceManager() on ralph's branch
20:31:03 &lt; ocramius &gt; I just have fear of people starting spreading ids everywhere :(
20:31:13 &lt; ocramius &gt; that's my main point about all this stuff
20:31:17 &lt; Akrabat &gt; what's an id?
20:31:17 &lt;ralphschindle &gt; which is fine
20:31:23 &lt;ralphschindle &gt; b/c you can alias someone elses service
20:31:28 &lt; SpiffyJr &gt; ocramius, take, for example, doctrine_em
20:31:38 &lt; SpiffyJr &gt; ocramius, you keep wanting to swap to Doctrine\ORM\EntityManager but what if a single project has multiple instances?
20:31:40 &lt;weierophinney &gt; ocramius, Akrabat: I'd argue we still recommend using FQCN for identifiers for the most part.
20:31:40 &lt;ralphschindle &gt; EvanDotPro's user module will call zfuser_adapter
20:31:42 &lt; ocramius &gt; SpiffyJr: yeah, I'm gonna strip it with 0.2
20:31:44 &lt; SpiffyJr &gt; i *prefer* aliases
20:31:48 &lt; EvanDotPro &gt; Akrabat: i agree that DI config relates to class signatures who's documentation is kept up to date with api docs -- that's great for those of us who like that, understand DI, appreciate how crappy config keys in user docs are, etc.. but that's also part of the complexity a lot of are complaining about right now... having to go and look at the signatures, wire up the classes, deal with huge config files... then again, you k
20:31:55 &lt;ralphschindle &gt; which can be configured to alias whatever the actual service is called
20:32:05 &lt; ocramius &gt; SpiffyJr: multiple instances = multiple ids, but that should not come with the module itself
20:32:12 &lt; ocramius &gt; module should also show the sane default
20:32:21 &lt; SpiffyJr &gt; fair enough
20:32:30 &lt; ocramius &gt; the right way, especially when a module such as ORM module will be used MORE than we think
20:32:49 &lt; ocramius &gt; Akrabat: Symfony has "ids" for services
20:32:50 &lt; Akrabat &gt; EvanDotPro: yeah - I was just explaining how DI is, by definition, structured config. Complicated, but structured (if you know the rules)
20:33:06 &lt; ocramius &gt; you do $locator-&gt;get('') all over the place
20:33:15 &lt;ralphschindle &gt; ocramius: no
20:33:16 &lt;ralphschindle &gt; hyou dont
20:33:19 &lt; ocramius &gt; that makes everything locator dependent :\
20:33:22 &lt;ralphschindle &gt; your code uses the names you setup
20:33:26 &lt;ralphschindle &gt; this is the point of aliasing
20:33:29 &lt; EvanDotPro &gt; Akrabat: yep, i agree. and i appreciate it for that... too bad the general population doesn't as well, heh.
20:33:36 &lt; ocramius &gt; ralphschindler: yes, what I mean is that bundle devs did
20:33:43 &lt; ocramius &gt; ralphschindler: and now you can only use these ids
20:33:44 &lt; Akrabat &gt; weierophinney: yes fqcn appeals as it becomes self-documenting
20:33:45 &lt;ralphschindle &gt; yes, its the better architecture
20:33:50 &lt; ocramius &gt; that is because the thing got out of control imo
20:33:51 &lt;ralphschindle &gt; NO
20:33:59 &lt;ralphschindle &gt; you're missing the point
20:34:12 &lt;weierophinney &gt; ralphschindler: what was the "no" directed at?
20:34:13 &lt;ralphschindle &gt; you call your services, both provided and consumed by whatever name you decide
20:34:35 &lt; ocramius &gt; yes, that's fine
20:34:36 &lt;ralphschindle &gt; the merged configuration will have the proper 'youalias' =&gt; ''
20:34:47 &lt; DASPRiD &gt; ocramius, number of the service: 555 346352, go call it :P
20:34:52 &lt;weierophinney &gt; ocramius: I feel strongly that locator usage (whether DI or SM) should be mainly at the gateway level of the request -- objects in the execution cycle should largely be unaware of its existence.
20:35:06 &lt; ocramius &gt; weierophinney: nailed it
20:35:17 &lt; ocramius &gt; ralphschindler: yes, you can alias the alias, that's fine
20:35:45 &lt; ocramius &gt; ralphschindler: but still, sf has become messy because everything uses locators with no rule or no direction
20:35:58 &lt; ocramius &gt; that is what we need before getting on with ServiceManager
20:36:02 &lt; mabe_ &gt; 000000000000000000000000000000
20:36:03 &lt; ocramius &gt; prevent that
20:36:17 &lt;ralphschindle &gt; you can't prevent that
20:36:26 &lt;ralphschindle &gt; having that is the reason module/plugin ecosystems flourish
20:36:28 &lt;ralphschindle &gt; look at wordpress
20:36:32 &lt;ralphschindle &gt; some of the worst code you can find
20:36:33 &lt; ocramius &gt; you can't, of course, but you can give right directions
20:36:39 &lt;ralphschindle &gt; but theres 10000's of plugins
20:36:42 &lt; ocramius &gt; yes, I know that
20:36:47 &lt; mabe_ &gt; oh sorry - my cat talked with you
20:36:49 &lt; Akrabat &gt; At the end of the day, all I want to do is have an easy way to set up my database (or smtp) credentials and get at them in the db adapter that's within my mapper that's composed by my service object when I create that service object in my controller...
20:36:55 &lt; ocramius &gt; mabe_: hi cat!
20:36:57 &lt; DASPRiD &gt; mabe_, lol
20:37:01 &lt; DASPRiD &gt; mabe_, pic or it didnt happen
20:37:02 &lt; Akrabat &gt; I'd quite like it to not take a nested array that's 10 levels deep...
20:37:09 &lt;weierophinney &gt; mabe_: LOL
20:37:19 &lt; ocramius &gt; ralphschindler: we can give sane directions
20:37:21 &lt; ocramius &gt; OR
20:37:35 &lt; ocramius &gt; like EvanDotPro did with matus, stop him before it's too late
20:37:47 &lt;weierophinney &gt; Akrabat: I think the SM will make that story much, much better. We'll need to play with how to make configuration discoverable, but I think we can make it much flatter.
20:37:49 &lt;ralphschindle &gt; i'd opt for creating an infrastructure that allows discrepancies to be resolved
20:37:50 &lt; ocramius &gt; but I guess sane directions is better instead of having the last 2 hours of sleep stolen from EvanDotPro
20:38:00 &lt;ralphschindle &gt; what is matus?
20:38:05 &lt; ocramius &gt; matuszemi
20:38:15 &lt; EvanDotPro &gt; lol ocramius
20:38:15 &lt;ralphschindle &gt; and who's going to stop a developer that is not in the zf2talk channel?
20:38:18 &lt;weierophinney &gt; ocramius: if we steal 2h of sleep from EvanDotPro, he doesn't sleep for 28h. :)
20:38:31 &lt; ocramius &gt; weierophinney :D
20:38:35 &lt; DASPRiD &gt; ralphschindler, the community police team ;)
20:38:44 &lt;weierophinney &gt; kk, I'm going to step in...
20:38:56 &lt; ocramius &gt; ralphschindler: yes, exactly, you can't, but some directions help :)
20:39:02 &lt;weierophinney &gt; It sounds like general consensus is, "let's give it a shot and iron out the details as we go"
20:39:13 &lt;weierophinney &gt; Should I start a vote on the ServiceManager?
20:39:17 &lt; DASPRiD &gt; sounds like a plan
20:39:25 &lt; ocramius &gt; ServiceManager is already as good as merged for me
20:39:35 &lt; ocramius &gt; it is GOOD
20:39:36 &lt;weierophinney &gt; !start-vote Do we accept the ServiceManager RFC?
20:39:37 &lt; Zend\Bot &gt; Vote "Do we accept the ServiceManager RFC?"; type either +1, -1 or 0
20:39:38 &lt;ralphschindle &gt; well, it needs cleanup in the tests department
20:39:41 &lt;weierophinney &gt; +1
20:39:42 &lt; EvanDotPro &gt; +1
20:39:43 &lt; ocramius &gt; +1
20:39:44 &lt; Akrabat &gt; I want the details iron out before b4 is released
20:39:44 &lt;ralphschindle &gt; +1
20:39:45 &lt; Akrabat &gt; +1
20:39:50 &lt; mabe_ &gt; +1
20:39:50 &lt;weierophinney &gt; Akrabat: agreed.
20:39:58 &lt; SpiffyJr &gt; +1
20:40:00 &lt; Thinkscape &gt; +0.3
20:40:08 &lt; DASPRiD &gt; +1
20:40:09 &lt;weierophinney &gt; Gabriel403?
20:40:17 &lt; Akrabat &gt; hey! it's Thinkscape! Good to see you, sir
20:40:19 &lt;weierophinney &gt; OMG -- Thinkscape -- you're HERE?????
20:40:19 &lt; mabe_ &gt; Thinkscape: lol
20:40:21 &lt; ocramius &gt; Thinkscape: Y U CRASH DASPRiD's bot? :D
20:40:22 &lt; EvanDotPro &gt; and suddenly Thinkscape comes out of NOWHERE!
20:40:27 &lt; epokmedi1 &gt; +1
20:40:27 &lt; Thinkscape &gt; :)
20:40:29 &lt; Gabriel403 &gt; 0
20:40:31 &lt; DASPRiD &gt; Thinkscape, HEY
20:40:36 &lt; epokmedi1 &gt; yay
20:40:37 &lt; epokmedi1 &gt; +10000
20:40:42 &lt;weierophinney &gt; mwillbanks: ?
20:40:49 &lt; Thinkscape &gt; btw: with config merging you won't realistically see 10-level deep arrays. Just a bunch of files that are merged into 10-level deep arrays.
20:40:50 &lt;weierophinney &gt; SocalNick: ?
20:40:51 &lt; mwillbanks &gt; +1 :)
20:40:53 &lt; mwillbanks &gt; sorry :)
20:40:54 &lt; Thinkscape &gt; But files contain simple arrays.
20:40:57 &lt;WalterTamboer &gt; +1
20:40:59 &lt; SocalNick &gt; 0
20:41:09 &lt;weierophinney &gt; Bittarman: ?
20:41:12 &lt;weierophinney &gt; Freeaqingme: ?
20:41:17 &lt;weierophinney &gt; MikeA_: ?
20:41:22 &lt;weierophinney &gt; wilmoore: ?
20:41:28 &lt;ralphschindle &gt; Thinkscape: with merged arrays, the deepest level is still the same ;)
20:41:35 * weierophinn is thinking some folks are just camped out i nthis channel...
20:41:35 &lt; Thinkscape &gt; +1E-10
20:41:45 &lt; Akrabat &gt; Thinkscape: yeah - 5 deeps is usual
20:41:46 &lt; Thinkscape &gt; ralphschindler: you're not seeing it.
20:41:49 &lt; SocalNick &gt; i'm really digging Di so far, but can see the possible performance gains from SM, so I'm a 0
20:42:00 &lt; DASPRiD &gt; Thinkscape, status on zend\console?
20:42:01 &lt; Thinkscape &gt; ralphschindler: my point being - we can engineer it to be more user-friendly.
20:42:05 * wilmoore was camping :)
20:42:07 &lt; Thinkscape &gt; DASPRiD: stalled.
20:42:21 &lt; DASPRiD &gt; Thinkscape, bad!
20:42:27 &lt; EvanDotPro &gt; SocalNick: performance is really my main argument for it as well -- we simply can't compete with the current DI performance for high traffic ises.
20:42:28 &lt; Thinkscape &gt; DASPRiD: absolutely 0 feedback. And no interest from other contributors - see what Victor said.
20:42:28 &lt;weierophinney &gt; DASPRiD: it appears Thinkscape is stalled waiting for feedback from me.
20:42:35 &lt; EvanDotPro &gt; s/ises/sites
20:42:39 * wilmoore has only complaints right now...will discuss offline.
20:42:43 &lt;weierophinney &gt; !end-vote
20:42:43 &lt; Zend\Bot &gt; Vote result for "Do we accept the ServiceManager RFC?": 10 positives, 0 negatives and 2 neutrals, consensus: 10
20:42:44 &lt; Thinkscape &gt; weierophinney: that is the second reason [pun]
20:43:01 &lt;weierophinney &gt; wilmoore: kk -- ping us in #zftalk.2 afterwards.
20:43:01 &lt; EvanDotPro &gt; i have a high traffic ringtone site that i really can't refactor until performance is better because DI will just crush my server with the traffic i have.
20:43:13 &lt;ralphschindle &gt; ok, so I will get the component ready with tests, docs
20:43:13 &lt; wilmoore &gt; weierophinney: will do
20:43:22 &lt; Thinkscape &gt; ralphschindler: we can also use something that is reverse to factory -&gt; DI . For example something -&gt; DI def.
20:43:42 * ocramius really has to play around with some code generation :\
20:43:44 &lt;ralphschindle &gt; Thinkscape: i dont follow
20:43:56 &lt;weierophinney &gt; Thinkscape: I'll try and get the feedback you need this week. Been crazy this week with meetings.
20:44:34 &lt;weierophinney &gt; ocramius: that would be awesome. Maybe work with Thinkscape to create a console tool for it?
20:45:08 &lt; ocramius &gt; weierophinney: I don't know if I can integrate in console, but I'll buy some chains and stay the weekend at my pc playing around with it
20:45:19 &lt; ocramius &gt; I want a POC, even if dirty as hell (I am a crappy coder)
20:45:34 &lt; ocramius &gt; still believe strongly in Di, as said
20:45:36 &lt; epokmedi1 &gt; Thinkscape: in fact i was looking for you like for 2 weeks on the zf chan to see if you needed help on your zend\console component
20:46:09 &lt; DASPRiD &gt; everyone was looking for him
20:46:12 &lt; epokmedi1 &gt; we are going to need this kind of component more than anything and i'd like to help you
20:46:14 &lt; MikeA_ &gt; weierophinney: was scrolling
20:46:17 &lt; MikeA_ &gt; 0
20:46:18 &lt;weierophinney &gt; ocramius: remember, it's two-pronged -- not just generation, but consuming the generated definitions -- which means being able to provide a list of definitions to use.
20:46:48 &lt; ocramius &gt; weierophinney: my point is generating a closure for EVERY config.di.instance.alias
20:46:58 &lt; ocramius &gt; and every config.di.instance
20:47:15 &lt;weierophinney &gt; ocramius: right... and that's going to be... interesting. :)
20:47:24 &lt; ocramius &gt; then put a compiledDiFactory in front of the di factory in SM
20:47:58 &lt; ocramius &gt; weierophinney: indeed, I already see my panic this weekend, but it needs some experimenting
20:48:03 &lt;ralphschindle &gt; actually, you could simply compile the aliases into service factories and register them with SM
20:48:07 &lt;ralphschindle &gt; that was my goal
20:48:30 &lt; ocramius &gt; ralphschindler: that is impl. detail :) for now I need to generate the closures or whatever it is :)
20:48:35 &lt;weierophinney &gt; ocramius: also, keep in touch with ralphschindler -- he's creating an AMI we can use for benchmarking.
20:48:41 &lt;ralphschindle &gt; closure or FactoryInterface, same thing
20:48:45 &lt; ocramius &gt; yep
20:48:48 &lt; ocramius &gt; ralphschindler yup
20:48:51 &lt;ralphschindle &gt; in fact, let me go do that now
20:49:05 &lt; ocramius &gt; yeah, I guess the area is cleared :)
20:49:10 &lt;weierophinney &gt; kk, folks, let's call it a day.