[dev] Constructive Criticism/Venting
Michael M Slusarz
slusarz at horde.org
Wed Mar 12 05:53:04 UTC 2014
Just a random e-mail to share some thoughts. Some come from
experience refactoring several things over the last month or so. Some
come from reading e-mails and bug reports.
* Horde_Core a a package is completely unnecessary. It really makes
no sense separate from the horde application. For H6 I see no reason
not to combine the two (they are identical to upgrade.)
* Type hinting is not tremendously useful, and in fact can be a
hinderance. Example: we were noticing that Horde_Imap_Client, when
unserialized in IMP (which will happen on every access except logins),
would recreate a cache object that would be entirely separate from the
global Horde object. To get around this, I decided to use the old
wrapper trick - create a wrapper library that does nothing more than
have access to the global instance when unserialized. This can/should
be accomplished without doing something like having to extend the
entire Horde_Imap_Client_Cache class. However, due to type hinting,
this wasn't possible. This calls into doubt the usefulness of type
hinting. Especially since...
* Dependency injection is useless IMHO. We really aren't using it, so
most/much of Horde_Injector functionality is unnecessary overhead.
E.g. as our AJAX processes become smaller, the Horde_Injector overhead
because a greater part of the process runtime. IIRC, it now takes up
to 10%, for things we don't use - like Reflection analysis on every
access (maybe this can be optimized/cached). For our (Horde
applications) purposes, dependency injection isn't tremendously useful
since we may have multiple configurations for the same object - i.e.
we have different DB setups for different apps, so each DB object
needs to be manually injected. Not to mention it is almost impossible
to try to trace/debug the code when using dependency injection. I've
personally spent hours making small changes in Horde components code,
simply because it can be impossible to try to trace where the object
is coming from. Horde_Injector is nice as a way to provide a global
singleton/configuration store, but that's about it.
* We really need to split the git repo (I know, I know, I won't shut
up about this). Whether we like it or not, composer is the package
manager of choice going forward (heck: Pirum is deprecated in favor of
compose). And I spent an afternoon trying to get composer to work
with our current structure, and it simply doesn't work -- it requires
both individual repos and specific tag naming.
* Maybe I'm being especially sensitive, but it seems I have seen a LOT
of unconstructive criticism lately on the lists. Of the "Horde
sucks!" or "you suck!" or "I upgraded to a new version, and to my
surprise it is totally different! f*** you for changing the code!",
or "this software sucks because it is missing 1 feature I want even
though it does 99% of what I need. Oh yeah, did I mention that I paid
nothing for this software, but that factor is irrelevant. And oh yeah,
I realize this is open source and I can fix/change the software to my
specifications, or even support the developers to help me out, but no!
I demand the software work the way *I* want it to!" Maybe it's my
mid-lifeness catching up to me, but I remember a sunnier time when
open source software was a privilege, not a right. I'm wondering if
we've now reached a new normal where people tend to forget this fact.
I'll be the first to thank most of the Horde users that provide useful
dialogue/criticisms/input that is integral to any open source project.
But haters are going to hate, and my unscientific subjective census
feels the negativity is on the uptick. And I haven't yet figured out
how to program my spam software to filter out emails based on content.
michael
--
___________________________________
Michael Slusarz [slusarz at horde.org]
More information about the dev
mailing list