Yesterday, I wrote a post called Turning Drupal Themes Upside Down. Tonight I'd like to conclude those thoughts with a call to arms. Its time for us (you know who are you) to form a splinter project. For now I'm just going to refer to it as the Gizmo project. It would be rude of me to name our project before anyone even joined the party! Anyways, here's the basic concept (!$details).
In many ways, we're aiming to create a CMS that organizes and generates styles. The idea is not t build some "grandma can build a webpage" system. Really, we're looking to build a tool that moves drupal theming in a more ruby on rails direction. Developers, and users who are willing to learn CSS are the audience. Screw the folks that think we should build some magic mind reading design creation machine. Lets keep this practical.
Folks,(especially those who do a lot of professional-drupal work), if your workload is like mine, you probably are desperate to find ways to shave off time for drupal projects. And theming is probably the most obvious time waster that could be most easily corrected. So when are we going to start if not now? If we don't build it, who will? I know this can be done... anyone who's learned drupal's CSS patterns knows it can be done.
I've begun to lay the foundations of this framework in curved slate. Over of the course of the day, Curved Slate morphed into something of sketch of how such a framework could come together and how different CSS rules could be seperated with one master class that enables simplification of the actual coding that makes the design (e.g. makes designing a breeze... mostly colors, typography, space, and images... then fun stuff). (sorry, bug fixes are late).
I want to give the reasons why I think this project should be largely independent from Drupal.org's contributions CVS (except for the Gizmo.module).
1. First and foremost, I believe the Gizmo Project will bring a greater benefit to the drupal community by splintering from it at the very start. Since its goal is inherently visual, artsy, creative, I feel it would be good to allow it to develop its own culture from the ground up.
2. The Gizmo Project isn't about code. It's about style, interface, and beauty. When one considers that most users make their judgements about a website in 1/20th of a second almost entirely on the basis of appearence, the need for a healthy community that focuses on design is clear. Therefore, I'd like the structure to encourage experiementation, creativity, and in some areas sheer irresponsibility and chaos. I feel that there is a very large group of drupal users who could provide tremendous value to the drupal community with thier understanding of graphic design, user experience, and how monkeys see the world. However, I think the realities of code and actual work that needs to be done at drupal.org is inherently unfriendly to these types. It doesn't make sense to me to build this community within the confines of drupal.org. For one, there are lots of legacy issues that will interfere with developing such a community, and two, drupal.org has enough on its plate. It just makes sense for both drupal, and this group that I see coming together to start a fresh, and build their own culture.
3. Drupal.org has certain legal considerations that basically make forming a splinter project the only option (in my mind at least). I don't think its in our best interest to make the project GPL only. But, I'd like to put legal issues on the backburner for now. All I can say is that I'll find the lawyers to help us work it out when this proposal is more mature than say -- a -- blog post.
So, let's get started.
Since I am in a unique position to set the tone of this project, here's our first rule, and first task.
1. There is to be no talk of setting up rules or chains of command until our complete lack of rules causes problems that suggest clear rule/authority-based solutions.
2. Our first priority is to get some sort of system up to manage revisions, versions, and contributions. The project module, or unix-shell based systems are not an option (with exception to the core, and module.. since those will be inherently geeky, and serious tasks).
1. Are there similar frameworks and ideas that we should look to?
2. How should we manage revisions, versions, and collaborative work given that Unix commands and complex project management tools represent everything that the types who would be most valuable to this project, and are not given a good place to contribute to drupal hate.
3. Before I submit my own more detailed outline sometime tomorrow, is there anyone that would like the opprotunity to set the stage? Please, I'm all ears, and I'm ready to code... suggest away... I hope I've made it clear that I have no intention of masterminding this, all I offer is tons of development, and very extreme anarchist political leanings.
Comments
How Yahoo do it
I went to a PHP conference in London a month ago. One of the many interesting talks was given by a Yahoo guy. They have a contextual templated theming engine. To my mind it was very complex, but the basic idea was that themeing should be inherited. So, a page had a context - for example a page for the online store ChocolatesIsUs, or a page for SkiStuffShop. Then a page was broken into sections. A section could be a block. For each section the engine looked at a chain that basically says is there a template for the most local context, if there is, then use it, otherwise move to the next layer of context information and repeat.
So, if ChocolatesIsUs have a sale page, as do SkiStuff, and we are displaying a 'Sale of the Century' banner, first we see if there's a template that's specific to ChocolatesIsUs. If there's not, then we check whether there's a template that's specific to sale pages. If there's not then we look to see whether there's a template that's specific to ChocolatesIsUs. If there's not then we apply the global template to the content for that section. Then we move onto the next section.
Now it turns out that this can become quite complex: the basic idea is to move up a chain, but sometimes you want to break out of your current chain, and move to some adjacent chain. Maybe for example when you have a page dedicated to Meisen Porcelain, in the PorcelianFigures web pages, and you want to use the Meisen themeing. So they also have a bunch of tools to construct the theming templates, template chains, and to move themeing template info around in the heirachy.
So, I'm bringing this up because - one of the major failings that I see in pretty much all CMSs, is that they are block orientated. It's almost always, one style for all pages. But whenever you see beauty it's got a fractal feeling; things are derived from a central pattern, but are subtly different.
It seems to me that you should have the opportunity to theme and layout individual items on individual pages, parts of a page, or particular pages in ways that differ from all other pages on a site. I've certainly seen that the most successfully sites from a design perspective have had individualisation down to this level, and I feel that CMS's should support you in easily doing this.
We should be able to implement fluid interfaces that are non-static and non-blocky, with overlapping dynamic elements. I'm imagining the sort of thing that you can do in Flash.
And before anyone writes a but-this-is-html-and-css reply, yes, I know the limitations of the technology. Nevertheless, I do think you can get quite far along this path.
Grids
Uh...
You can't call this the Gizmo Project, because of www.gizmoprroject.com the Skype alternative.
Yeah, well I'll take em' to court I will!
No seriously, that's cool -- I wouldn't want to aggrevate the suits at Skype.
Now you've gone and done it.
you've successfully provoked me into starting up my blog again. =)
As the author of phptemplate, and much of the current template system, I have a rather unique perspective on the requirements for some of this stuff, including a bevy of my own ideas and things I want to discuss.
I'd like to discuss some things if you're interested some time.
Oh. and my blog is http://daemon.co.za
it's still bare
but i'll have some content soon.
The Best News I've Gotten all week!
YES! Let's talk very soon. Are you in South Africa? (might be an expensive call!). I'll send you an email right now, and start think of ways I can help send my flood of google readers your direction! (its actually quite incredible how many people have been starting to stumble onto this blog via drupal theme questions...)
FYI to those of you who don't know, Adrian is the mind behind php-template, and many of the form API improvements that have revolutionaized drupal's theming capabilities.
I sent you a mail too
but i have not recieved yours.
my skype is vertice123 , and I will be on irc for the next while.
I'd really like to chat to you tonight if at all possible.
Not on skype quite yet. And
are you getting my emails ?
I don't seem to be getting yours.
Feel free to contribute right now
You can do so by writing a gizmo that expands on the prototype concept, providing the CSS for a great styling of drupal code, or by merely suggesting a good style that's on another site which you feel is worthy to be incorporated.
To contribute code to gizmo, just leave a comment for now! Its important that a few of us start some momentum for this project by making contributions (its a social pyschology thing -- the contributions don't even have to be well thought out to be effective).
AWESOME
Perfect. I agree with your approach. I will track this, and hope to be able to contribute!
Right on!
Nick,
I have been lurking around your blog for a few weeks now. Not only I had a good time, I also learned a lot. The Gizmo project becoming a reality is nothing short of a dream coming true. Even if all you will let me do is to run and get pizza, I want to do my part. :)
Although I am not afraid of CVS, submitting styles using node forms and cultivating a theme garden sounds like smart route. Won't we need a module for that though :)
Roman
Here's the first gizmo
Here's the first gizmo "module" located in curve_slate beta2 at gizmos/navigation.php. Only one style function so far, but I think it proves a point:
function block_menu_style($id, $element, $collapsed, $expanded, $leaf) { if ($element = "iconmenu" ) { $blockSelector = "#block-menu-" . $id; $output .= " " . $blockSelector . "{font-size:1.1em;} " . $blockSelector . " .content ul.menu li.collapsed a:link, " . $blockSelector . " .content ul.menu li.collapsed a:visited, " . $blockSelector . " .content ul.menu li.expanded li.collapsed a:link, " . $blockSelector . " .content ul.menu li.expanded li.collapsed a:visited {background-image:url(gizmos/art/".$collapsed.");} " . $blockSelector . " .content ul.menu li.expanded a:link, " . $blockSelector . " .content ul.menu li.expanded a:visited, " . $blockSelector . " .content ul.menu li.collapsed a:hover, " . $blockSelector . " .content ul.menu li.expanded li.collapsed a:hover {background-image:url(gizmos/art/".$expanded.");} " . $blockSelector . " .content ul.menu li.leaf a, " . $blockSelector . " .content ul.menu li.expanded li.leaf a {background-image:url(gizmos/art/".$leaf.");} " . $blockSelector . " .content ul.menu li.collapsed a:link, " . $blockSelector . " .content ul.menu li.collapsed a:visited, " . $blockSelector . " .content ul.menu li.expanded li.collapsed a:link, " . $blockSelector . " .content ul.menu li.expanded li.collapsed a:visited {background-image:url(gizmos/art/".$collapsed.");} " . $blockSelector . " .content ul.menu li.expanded a:link, " . $blockSelector . " .content ul.menu li.expanded a:visited, " . $blockSelector . " .content ul.menu li.collapsed a:hover, " . $blockSelector . " .content ul.menu li.expanded li.collapsed a:hover {background-image:url(gizmos/art/".$expanded.");} "; print $output; } }
That's a lot of code, and I rather like the idea of only having to write:
<?php block_menu_style("1267", "iconmenu", "tango/folder.png", "tango/folder-open.png", "tango/text-x-generic.png");?>In order to apply it to one block that needs it instead of actually having to sort through all that css...
I'm starting to like "gizmo" even though it was intended to be a temporary generic name. I've got a bunch of work to do now, but I think I'll have a site up to manage the project in a few days. In the meantime, feel free to suggest changes, submit a style (I'd be happy to convert the CSS to gizmo provided its a decent style). etc.
interesting
Nick,
You're in the zone. Agreed that modularization of themes is needed. There has been some talk of a framework from Ber ("bricks" he calls the content, i believe) and others. I think the new flat forum in Drupal (included in 4.7 release?) is some kind of modular theme element.
[Interesting your vision of developing your team outside Drupal. My whole interest in Drupal comes from my yearning for collaboration/communities. Yet even drupal.org falls short in delivering this (despite having a profound degree of commonality among the people, subject matter). Your mere suggestion that this must be done outside the drupal.org framework tells me that either drupal.org is a major underachiever or the dream of true collaboration is a hoax.]
Since you're talking along these lines, should this project be abstracted away from Drupal & applicable to other CMS? Stupid idea I know. Something might already exist i dunno.
I'm dado and I approve this project.
Hi Nick, as Dado and the
Hi Nick, as Dado and the others already commented suggest, yes you really are "in the Zone". I like what you are proposiing, very much.
Dado, I dont think the fact that this is being done outside the standard drupal site community means the dreams of collab are failing, the collab in drupal is tremendous and a great example to all. But nothing is pure black and white, and certainly the drupal community is now very large and very mixed, theres bound to be different mindsets and aims and theres no reason why a rich ecology of online sites and communities cannot better serve these. In fact its possibly necessary, because a creative and exploratory mindset may cause a lot of difficulties for those trying to simply ensure a good stable release of core code. Likewise the stringent demands of developing a stable product may be a great restriction on creativity and flair. I think Nicks point and proposed community is spot on. And Im sure were both attratced to this as much as anything by his mindset than just say the resulting modules and details.
Also agree with this being Drupal specific, Im also irrationally stuck on Drupal. It will certainly make things much much fatser, I think civicrm is suffering as a result of its decion to play to multiple CMS's.
Nick, Im afraid I cant offer very much in the way of coding skills or even time. Im currently stuck in a remote region and so am not wanting to make commitments cant keep. But I will do as much as I can in support of it as I can.
I really like the project itself and maybe most of all the general community that you wish to build around this, in the real spirit of open source collaboration.
Some initial suggestions:
1, a nit picky one on the comments style youre using, would be much easier if just listed all the comments rather than having to click on each one to see them one by one, guess the ajaxian solution would be good, ie click to expnd rather than reload.
2, you proved to me that cvs wasnt as difficult, Id not bothered with it but your brief post made me have a go and wow what a nice tool to have under your wing. Lets not prevent our community from empowering itself, if we can provide the easy intros like you did and it really isnt too much difficulty its worth using i reckon. I have heard that SVN offers a more modern and better approach to change management, and I know that tortoise has a tool for that too, after trying the trotoise cvs tool you proposed I also checked out the svn one. anyway, my suggestion is to use cvs / svn if its not hard to setit up on the serverside.
3, Suggest you have a look at Dman's work, hes doing great things with drupal and he recdently was talking about some clever forms api stuff so that can incorporate form elements in tables, its not related, but I believe his philosophy / approach is very much in tune.
4, theme suggestions, again checkout dman's site, its a straightforward drupal site, but I do like the blocks that appear raised/floating with the use of shadows. But Im a novice in terms of web design.
5. Another chap jjeff - the lullabot guy must also be very in tune with this.
All the best, Mark
Thanks for the kind words.
Thanks for the kind words. Its a timeless truth that one can never "create" a community online -- the trick is to discover communities who have yet to realize they are a community, and to give them a place to thrive. Its going to be a little while before I'll have the time required to create a place that I feel this community needs, and deserves, but on the plus side, it will require us to be creative ;-)
Your comment on the setup of drupal.org's development is dead on. I couldn't have said it better myself:
But, yes, that kind of enviroment is not exactly the sort of place where I envision great leaps in terms design and user experience to occur. Moreover, the tools themselves are absolutely ill-suited for anything that isn't encloised in the ?PHP tags.
However, depending on where this thing goes, we may yet reunite in with drupal.org in the future -- if we bring a lot of new value to the community and platform, and they approach me about hosting us, I'd consider it an honor. To put it simply, at the moment, this idea is too young for either a) drupal.org to consider the pain-in-the-ass of accomodating us b) for it to make sense to try to pick that battle in the first place. So I guess in that sense, maybe I put it wrong when I called us a splinter group -- I think we're more like a band of explorers that has choosen to venture out into a new space -- and though we are away, we will never loose the nostalgia for our family, and the soil that we left behind in the motherland. ::tear drop::
Regarding those suggestions:
1. Yes, that would be a terrible choice wouldn't it? Its actually some weird bug that has emerged from today's update of the code. I'm trying to figure it out...
2. I actually think we will use CVS -- its a powerful tool, and one that I think we should support. However, the key difference is I don't want CVS to be a barrier to contributions, or participation. One motive I have (which some of you probably sense) is to accelerate the rate at which beginners can become experts -- as of now, there is absolutely no clear path for new users to develop their knowledge and skills... so in that sense, I'm beginning to think gizmo -- beyond the extrodinarily practical benefits it could contribute to drupal -- could be a great place for new users to start to learn the occult arts. The great thing about having Gizmo so focused on CSS is that the problems are extremely difficult to solve, but they are right there in front of your face on the screen -- as opposed to a white screen that reads "FATAL ERROR: UNEXPECT T_PARSE ENCAPSULATED..."
However, even more important, CSS has a way of hypnotising non-geeks with no programming knowledge into suddenly becoming full-time developers (consider that I knew no HTML less than two years ago). And among a lot of the folks with big steaks in drupal, the shortage of experienced drupal programmers is reaching the point of crisis with demand exploding the way it is.
3. Thanks for the heads up, I'll try to figure out how to ping him (i've seen the formapi artical you're talking about it).
4. We can't do shadows (yet). The reason being that a) the technique we use for curved corners, and the technique he used are like Russian vs. Sheet Music -- they simply don't translate to each other. b) his technique is very very very time consuming to implement, and requires lots of precisely sliced gifs that would in effect lock this theme into being 10 times more inflexible. That said, I'm actually scanning the internet daily for a better corner technique to pop up, so as I mentioned earlier, our corners technique is like democracy -- its the worst solution, except for the alternatives.
5. I reckin jjeff will be, especially considering how much I've just eaten my own words
My suspicion is a lot of them are waiting to see where this goes... I'm sure they've noted the occassional attacks of "idea incontinence" I've had at times.
Theme acceleration for beginners
Nick,
I know very little CSS and I know even less PHP, but I love Drupal and the relative ease (as compared to others I've tried) it provides a dope like me to build a database driven website. The gizmo project sounds like a great idea and your comparison of the project to Ruby on Rails caught my attention. I'm not a programmer, but that Rails deal is so cool it almost makes me want to become one. Since time constraints don't permit me to pursue that urge, I'm focusing the little time I do have on learning about Drupal.
IMHO, anything that accelerates the ability of people like me to go from CSS novice to a competent themer would be an extremely valuable service to the Drupal community at large. Because as you point out, many people judge a site by it's appearance.
Drupal already provides people a solid vehicle to build robust dynamic websites. What's lacking is a robust way to make those dynamic sites look great. Modular CSS design could fill that void.
I'd be happy to contribute in whatever way I could.
Roger a/k/a KSA213755
Dado, I think we're on the
Dado, I think we're on the same page. My main interest is in reducing the number of times I need to reinvent the wheel, and to lower the amount of repetitive work required to make drupal look good.
For example, I'm planning on converting this entire set of great looking horizontal and vertical lists to work with drupal's markup.
Now, in the beginning of this project (since I most likely will be doing the work alone) I'm probably just going to focus on building a library of styles. My CSS knowledge is probably the most valuable skill I could contribute to drupal... however, there aren't too many ways for me to contribute my CSS knowledge except in the forms of tutorials, and themes. So in some ways this is me inventing a way to give back to the community.
Drupal's community is actually a wonder of the world in terms of how much collaboration goes on, and the fact taht no one gets paid. However, it tends to be more complex than a matter of people simply wanting to come together to be a part of something.
The reason I want to seperate this project from drupal.org has actually really nothing to do with the folks who do work there. Rather, I'd like to create an enviroment that is suited for building libaries of styles and UI patterns. So, I want users to be able to submit styles for page elements using a simple node form. I want each user to be able to have their own page of style contributions that -- well -- actually show live examples of the style. THis is possible, and kind of easy to do if we start from scratch. The drupal.org infastructure team has way too much on their plate as is, and I doubt they'd be very keen on the "experiemental and largely unplanned" approach to setting up the collaborative enviroment.
Moreover, I'd like to help expand the ways that people can give back to the drupal community, and since we'd be starting fresh, I think we might create an opprotunity for new pods of drupal users to collaborate on problems and issues which they have expertise. For example, you're an M.D. -- the human body is not a programming language, but I'd suggest that drupal -- as a dynamic complex system that responds to new enviromental challanges -- shares a lot of similarities living organisms. ( They are all Holons to me).
So, I suppose a big reason why I'm wanting to do this off drupal.org is that I'd like to create an opprotunity for new types of drupal collaboration (in all likelyhood, its too early to guess what types of collaboration might emerge).
Finally, you're absolutely correct that such a platform could be open to all CMSs, and if my main concern was the platform, thatn it would make sense to make it multi-CMS friendly. However, I want this platform to benefit drupal, and drupal alone. This is entirely due to my rabid, and almost fanatical dedication to it. It's almost as though I've developed some sort of nationalistic obsession, and drupal is my nation.
my only counter point is
my only counter point is that drupal probably has a finite lifespan. [i assume we all recognize it is not utopia.] the gizmo theming concept has the potential to outlast drupal.
Hmmm... I don't know...
Last night, I was thinking a lot about this. The gizmo approach to stylesheets only works in situations where you can fully predict the type of markup you're working with. Take a look at the styles generated by that first Gizmo I wrote.
Nasty isn't it?! Look at those selectors "#block-id-"... .content .menu ul li.expanded a.active....
Lately, I've found that constraints are my friend. By constraining the patterns of menus in drupal, they've provided us wit a unique opprotunity to collaboratively share and evolve styles. But I think the reality is that without drupal, we'd never have this opprotunity.
I disagree: I don't think drupal is going anywhere. What do you envision replacing it? Zack Rosen (Founder and Director of Civicspacelabs) estimates that the drupal economy has grown by a factor of 10 in the past year. Consider the community has literally doubled over the past year as well. This explosive growth carries a lot of risks in my opinion. Most worrysome is that a lot of effects of this explosive growth's problems have become new causes of the of the original problem themselves: Since demand has grown so explosively, all of the good drupal developers have too much work on their hands, and therefore they have no time help grow a new crop of experts, and I'm beginning to think this is also leading to a worrysome trend of unmaintained modules that were crucial to drupal (echm.... img_assist). So Drupal has a situation on our its hands that is very much like a man who drinks because he thinks he's a failure, and then fails all the more because he drinks.
So long as we can find away to stop this cycle of incestuous applification, I tink there's nothing tat will stop drupal, not even the cycles of technology going obsolete really affect it, in my opinion, simply because a) its code, and therebye can change to meet whatever new stuff pops up, as opposed to physical objects with circuits, b) the small efforts of 100 hundreds of developers have turned drupal into a pseudo-living thing that adapts to a constantly changing enviroment, and has a very sensitive nervous system . Of course, drupal isn't alive at all -- since these characteristics are not derived from it, but rather the combined actions of 50,000+ users. And bear in mind, we had 25,000 users only one year ago. Tipping points indeed....
i can't comment on the portability of gizmo
since i don't understand the approach yet. i'm just shooting from the hip. you're from texas- you should understand :} [i lived 8 yrs in Houston]
as for the longevity of drupal- i come from a java background. i know java is a failure in the web (if J2EE were worth a damn there would be at least ONE advanced Java-based OS CMS out there). But I do see some advantages of object oriented architectures that is lost on Drupal.
When I create a Drupal module, there are a lot of hoops to jump through, which would come for free if there were inheritance. Because PHP4/Drupal lacks encapsulation, changes to the core (e.g. forms API) makes for bigger changes to client modules.
I see the fact that many crucial modules are not being maintained (e.g. node_import) as a SHORTCOMMING of Drupal, and a symptom of these design problems. If Drupal were easily maintainable and/or if the collaborative community really collaborated, then these modules would move forward and/or require less maintenance.
Drupal has grown, because it is the best that many have seen. I suspect that will be realization that the emperor is scantily clad (witness 4.7 sliding ~6 months past estimated release date) or Drupal will reinvent itself fundamentally to be more object oriented. Likely sucessors: some Ruby on Rails CMS or Apache Lenya or other. Not for some years though.
Sorry to be negative in my wildly speculative ravings. I continue to be a Drupal loyalist. But one has to recognize deficiencies in order to improve, what ho! I remain
Your obdt and humble servant,
dado