New module idea... User Favorites

I've spent a couple hours today beginning to rebuild a website that I intended to offer up as a community activity tracking tool for the open source BASIC derivative language called FreeBASIC called the FB Tracker. Notes about the language itself (which rocks) aside, the site would be a fairly basic matter of allowing users to post and track projects, tutorials, snippets, sites, etc. through a single source. Most of this can be accomplished through some skillful use of Views + CCK, but there are a few community features I'll most likely be writing a module to implement. I have dubbed the module User Favorites and will post a few of my brainstorm ideas below...

I searched for a module similar to what I'm looking for and only found the Favorites module which is a far cry from what I need. The User Favorites module will actually allow users on a site to add content to a favorites list. It makes sense to give users the option of creating multiple favorites lists and will be fairly trivial to implement. Any of these lists may be set to be private or public lists. Users on large community or directory websites will be able to tag and track content through the site itself using their in site favorites list as well as provide feedback to the community regarding the value of content on the site.

Users will be able to browse the public favorites lists kept by other users as well as see who else on the site has favorited a specific piece of content. Favorites lists will be broken down by content type and sorted alphabetically, with users having the option to star a specific piece of content to make it sticky at the top of a list. Integration with Views means site developers will easily be able to create and sort lists of nodes ranked by how many times they've been favorited and/or starred. (Perhaps for the purposes of ranking, favorited content should count as 1 point while starred content should count as 3. Or rather... I can simply make that an administrative decision.) Integration with Userpoints means you can give users some love for providing feedback to other members of the community.

I'm happy to consider any further integrations with this module and am quite excited at the prospect of it being a first of its kind. However, if someone else knows of a module that may do something similar, please post it up here so I don't needlessly duplicate someone else's effort.

EDIT: A Tuesday morning, it's no longer past midnight, idea struck me on the way to work... I forgot to mention the idea of favoriting other users. This would allow you to track content posted by others and allow a ranking system for users similar to the one I mentioned above for content. It could be fun to use these statistics to display user relationships, user favorites compatibility (how much of your favorites match?), and other things like that. Maybe I can get Balazs to draw me up a user relationship graphic with his Drawing API. Lol

EDIT 2: Several folks have been posting up some very helpful pointers to modules that implement different parts of this idea. Let's just say... I'm never going to start a new module without doing a post like this first. This has been an invaluable learning experience, and hopefully I'll find some time to review the various modules and build on someone else's foundation.

Why use Drupal for e-commerce?

I recently posted a page to Ubercart.org titled, Why use Drupal for e-commerce?. In it I made some observations about Drupal and how it is the perfect platform on which to base an e-commerce site. All the things we wish other e-commerce specific systems would do (or that we have to hack to get done) Drupal does out of the box. Feel free to give it a read and offer up any feedback here.

A brief summary of my reasons include:

  • It's got great search engine optimization (including easy SEF URLs with the path and pathauto modules).
  • It's nice and secure with an active security team. (I've even got an e-mail in the past with someone from the team pointing out a hole in my code who had never even used the module! Kudos to the security team at Drupal.org!)
  • It's a very powerful content management system, which is a must for future e-commerce sites and a great benefit to companies that market products supported by a niche market or particular community.
  • There are many folks out there (like me!) who are available to help and to work for you as you start to setup your Drupal + Ubercart site. Having the whole directory of contributed modules and themes is great.

Anyways, enough shameless promotion of Drupal and Ubercart for now. I'm just about to roll out the Alpha 7d release and need to do one final test on an update from a previous version to make sure I don't go breaking anyone's site with the release!

Drupalcon: Day Two

Ahh, day two of Drupalcon has come and gone. Sorry this post wasn't up sooner... the wireless in our apartment decided to stop working altogether today, so I had to type this up in the evening and post it from the venue. C'est la vie. Briefly, I will let you know that I ended up skipping the morning sessions to explore La Sagrada Familia with my wife. A little bit of this post will be about that with some photos below, but I did make it back to Drupalcon this afernoon for a few sessions (install profiles, Ubercart.org, and a BoF session on training new Drupallers) and some fun meet-ups with other Drupallers I only know by their usernames and avatars. Smile

So... Sagrada Familia. It is unbelievable. I really can't describe it, and pictures can only do so much. If you're ever in Barcelona, it is a must see attraction. It's pictured below... basically it's a huge construction process going on since the late 1800's to build a temple worshipping the Holy Family (hence the name). While I don't agree with the worship of St. Joseph theologically, the building, artwork, and wonder of the cathedral was not lost on me. It's simply stunning! The two finished entrances are covered with large sculptures depicting the life and sufferings of Jesus described in the gospels. They're simply incredible, though I preferred the side Gaudi did (the neo-Gothic side, not the modern angular fictures). Anyways, it's 8 EUR well spent to tour around, especially if you're still in town.

Christina (or Mrs. Ubercart as Boris calls/introduces her) is still not feeling 100%, so we came back after the tour so she could rest and I could wend my way to the venue. I got there just in time for lunch to wrap up, so I stood by the food tables and stuffed my face for a few minutes. There I ran into Matt Westgate (Lullabot [loves you.]/original e-commerce dev) and Gerhard (Killes) who I met yesterday but didn't recognize by his real name. Tongue

I left the table as soon as my hunger was sated and caught the second half of Boris Mann's install profile session. There's been plenty of work done to make install profiles easier to write and better integrated with the installation process. As of Drupal 6, you will be able to inject configuration forms and such into the install process to better customize an install. Furthermore, as more profiles get developed, there are more reusable bits of code out there for devs to choose from. crud.inc is one example (handles database functions), and the profiles already produced (like the Bryght profile available from their svn repository) are full of copy/pastable examples. Boris' main plea? Right install profiles. He said he'd love to see some Ubercart profiles setting up various types of Ubercart sites for different uses... and I agree. Will have to have a chat with Shawn when I get back to Louisville.

After Boris I presented the Ubercart.org session, which was really a basic community site setup/experience session. I was happy to point out some things we did wrong (particularly developing a live site on a beta version and not having a good backup plan) along with a few things we did right that have really helped build our community and consequently the project. I was able to get some good feedback on URL SEO, and I'll just throw out to folks that you really need to nail down how you'll use pathauto to construct your URLs up front. Nik Le Page pressed home the fact that it's not something you want to come in on the tail end and try to nail down. Another Drupaller filled us in on some tips regarding keywords in the URLs, and other modules were pointed out like the nodewords module (add meta tags to nodes) and global redirect module (to push all node/### requests to the appropriate pathauto path). It was a good time, although I felt like a lot of the folks were at least on my level in these areas... hopefully some people were exposed to new things, and I did try to warn folks up front that the Ubercart demo and development sessions would be Friday and Saturday. If I can't get a net connection it's going to kill the sessions, though... so let's hope that's not an issue!

A couple Ubercart devs, Chris and Aymerick, sat in on the session, and I met up with a guy named Jordi who had evaluated Ubercart a while back. His recommendation for the catalog was to abandon the use of taxonomy and use a CCK node type for categories and node references to give them relationships. This way data fields could be added to the actual categories themselves, and a fairly basic query/View could be setup to handle the loading or display of the nodes. I see some benefit to this, but I'm not entirely sure what a module would do to facilitate such an action. I believe the category module has tried something similar in the past, but I don't think it's lasted. I could see a use for a module to programmatically create and relate the nodes for you, and this may indeed have a broad application... but I'd need to be sold a little more on the use cases and type of code needed in a module before I did some work on it. Jordin's use case would be a large CRM, using the category nodes to describe customer relationships... but giving you a better UI and ability to describe categories than a taxonomy would.

We split up and I made it into a BoF (Birds of a Feather) session regarding Drupal training and mentoring. This is something I enjoy doing and would be happy to support... although it doesn't seem the idea of a longer Drupal College was very popular among the companies represented (Achieve Internet, CivicSpace, and computers Plus). A more intense, short training session seemed to be their idea of a good investment. It was great to sit in on this and hear a little about the workings of these companies and pick up the small nuggets they dropped here and there about the development process. Sharing a bit of their thoughts:

  • Make it a rule to not let any single project be more than 25% of your revenue. (Granted, these are larger companies with large clients.)
  • Take on small/under budget projects you feel like supporting and let them be the training of your new developers.
  • For distributed development companies, take advantage of co-working and code sprints when possible to show clients your devotion to the project... CivicSpace will send folks to the client's site at the start of a project to really nail down the details.
  • Project management is key. Talent isn't enough.
  • Achieve will take the wireframes and specs and start with the really clear design issues (give 'em a blog) up front. This shows the client that work is getting done and gives them time to iron out the other requirements and redefine them as necessary. This is part of their rapid development process. Suggestion: bill by the hour, not the project.
  • Computers Plus uses a handy feedback block for their clients. Clients can browse the site in development and leave feedback for the developers from any page in the site using the block. Incredible idea, and really helpful if you're just not sure you're doing something the right way. Who really knows what a client might be thinking?

That was the end of the day, so I ran off to find the other roomies and head back to the apartment. I eventually got back with Christina and we joined the others at an Irish Pub around the block where Boris, Liz, Ernest (souvent22), Nik, Balasz, Shakur, and a host of the NowPublic crew were hanging out. It was fun again to rub shoulders with these guys. This is where Christina received her new nickname... feel free to call her Mrs. Ubercart when you see her at the Drupalshow on Saturday. Wink Apparently, I've talked with Ernest in the past about QuickBooks integration and never realized it. I think we just all need to get together in person more often... Anyways, there's hope for a bit of collaboration as Ubercart starts to flesh out its features regarding QuickBooks importing/exporting. Ernest is looking to produce a sort of one-click shop for small shops running off of QuickBooks, and it's looking like Ubercart with QuickBooks support and a smart install profile could do the trick. We'll see what happens... And he says (and he wasn't the first) that if Ubercart nailed down a recurring payments API he'd be able to start using it on projects. Well, guess what might just have to go into the payment module when I get back around to it? I'd love to flesh out these features in Ubercart, and I'll probably take chx up on his advice to look into an API compatible with e-commerce modules if at all possible. I'm not sure that it will be, but for chx I'd give it one heck of a try. Lol

Until tomorrow... well, today I suppose. Ciao.

Drupalcon: Day One

Well, day one has come and gone. Christina is in bed beside me asleep and feeling more toward the better side of things. She's been sick since last night, unfortunately, most likely due to the disrupted schedule and lack of good food and enough water. Nik gave her a cocktail of medicines that have been helping. Smile Hopefully she'll feel up to a tour we will take tomorrow of La Sagrada Familia... which is incredible! I'll post pictures later of the place lit up at night. Onto some details about the conference...

The venue for the Drupalcon is amazing. (See the first picture below for a happy shot of the banner they hung for us!) It's an old factory that's been converted into a hi-tech convention center. I'm sure the brick and cement walls do wonders for the wireless network reception... but it works and it's nice. And there's free food for lunch. Wink Overall it's about a 30-40 minute metro/tram ride from our apartment. It was fun seeing more and more Drupallers as we got closer and then entering geek heaven when we got off the tram at Cornelia Center. The organizers couldn't have picked a better place.

The day started off with a quick introductory session followed by a nearly on time first session. I'll have to post a pic of the swag we got, but it was all incredibly cool and useful (a public transit map, a lens/LCD cleaner, a MySQL cheat sheet, and Lullabot buttons!). We also got cool Drupalcon shirts that you can bet I'll be sporting in the Ubercart office. Cool

I attended The Observer session by Moshe Weitzman and Barry Jaspan. (I met them earlier at the family gathering at Moshe's which was much fun - and also informative!) The wireless wasn't working for a while, so there was plenty of question and answer time which proved quite fruitful. I learned about the great solution they setup for publishing content at The Observer, including their edition nodes and ability to preview editions for certain days in the future (or I suppose in the past) so their editors can preview an edition before it gets published. They talked a little about the process of communicating with a client and stressed the importance of wireframes and design documents being received up front. Obviously, you can't wait till the whole site is done to start theming, but they would have preferred to wait a little longer on this particular project. The also gave a quick plug for Advomatic hosting for any looking for a good host.

Next I made it to Simon's session on the state of e-commerce. He provided a great birds' eye view of the project, covering the main bases for a wide set of modules. There's just sooo much to cover, but his slides were concise and his info about upcoming features for version 4 was quite exciting. I'd be lying if I said I didn't imagine how I might implement some of the stuff in Ubercart. Wink They'll have PDF invoice generation, a recurring payments API (I think has existed for a while, but the question comes up often in the Ubercart forums), and product features which will be "integratable" with actions for workflow stuff. We've really got to define actions for Ubercart. I mean, we're practically doing it already w/ our own hooks... it should be a piece of cake to define them as events. (Oh bother... I always mix up the actions/events terminology.) I also realized I was doing something silly with the checkout pane/order pane APIs and may try to correct the problem when I return. It would be something along the lines of adding _validate and _submit functions to the checkout process instead of including that code in the checkout pane callback... that would allow me to simplify the checkout pane API even more and be more consistent with the Forms API. I'll chew on it...

Lunch was good. It was baguettes, cheese, some weird green mass filled fried thing, and other finger foods. I ate it outside with a guy named Joe Golden from Vermont. We chatted a bit about his work and a bit about Ubercart when Olav and his fellow German Friedrich (sorry if that's spelled wrong Sad ) joined us. Olav wrote a VAT module for Ubercart... and get this. He and Friedrich co-authored a German Drupal development book and included a chapter on setting up a store in Drupal... using Ubercart. I was totally pumped to find out about it and wish I could've talked to him more. I hope to see him in an Ubercart session. Although I met him a little later in the day, I also found by accident Aymerick from France (and the Ubercart forums). He's contributed role product and expirable product modules to Ubercart, and I hope to see him again, too.

I also ran into Jeff Robbins from Lullabot and had a good chat with him about his recent improvements to Contemplate (better UI, file exports to put templates in a sites/all/contemplate directory, and more). I got to fill him in a little on Ubercart and toss around some general excitement about Drupal development and the Drupalcon. Perhaps some day we can get on a Podcast to share a little more. Remember... Lullabot loves you. (Will post a picture of the proof later. Wink )

After lunch I caught the Forms API 3 session. Here I learned a little about the upcoming changes to the Forms API for Drupal 6. It's exciting stuff that will affect every Ubercart module, but it won't be too bad to update. Image buttons are now in core. Also, individual buttons can now have validate and submit handlers, and you can embed data on buttons to pass through the form in the new $form_state array. $form_id and $form_values are no more, but their old contents and new info will be sent in the state variable. Multi-step forms have also been improved, which will be a big plus for Lyle who's been struggling with them in Drupal 5 for taxes forms. There is also no more returning of a URL for redirection... you simply set it in the $form_state array, which is good for affecting the redirect with hook_form_alter() I suppose. His was a great session to sit in on, and it ended with Ewoks dancing on the screen.

After that I caught the Drupal College session, which was a small presentation and then brainstorming session on an official Drupal training course. The idea is for it to last a little longer and include company partnerships. There's still more thinking to be done, but it sounds exciting. I wish it'd been around when I was just graduating... I won't be attending myself, but I would be interested in doing mentoring and training with the guys if it ever materializes. I wish them all the best!

I didn't attend a final session but chose to hop online for a few minutes... bad attendee. But I did get the opportunity to meet other developers, including Alan from NowPublic. I got to gush to J.R. from Hawaii (now living in Barcelona) for a while about Ubercart, and this is also when I hooked up with Aymerick. I'm sure there will be plenty more to tell... Afterwards, we all headed back to the apartment, hung around for a while, and went out for a quick bite to eat. Turns out when I went to pay for my hamburguesas there was a 5 EUR bill on the ground that the waiter handed me to pay him with. Well... I did, and I ended up making 1 EUR back just to eat at his restaurant! How about that! In Barcelona, you can get paid for Drupalling and paid for eating. }:)

Pages