[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