Posts filed under Development
  • Drupal for Journalism Educators: Poynter's News University Goes Live

    Poynter's News University

    Last week, Poynter’s NewsU.org, the world’s leading journalism education website, went live with a complete redesign. The website was designed and developed by Aten and built entirely in Drupal. It is the result of almost a year of strategy, design, and development, in collaboration with the incredible team of web producers and content experts at NewsU.

    It’s an exciting step forward for NewsU, and an exciting case study in using Drupal as a learning platform. The website features hundreds of courses spread across several course types, each with its own needs for design, behavior, reporting, and 3rd-party integration.

    A few of challenges we tackled with NewsU included:

    • Creating an effective UI for allowing NewsU to promote — and end users to find — courses within an extensive catalog of almost two hundred training modules.
    • More clearly demonstrating the relationship between NewsU and its parent organization, the Poynter Institute.
    • Managing permissions and enrollment across hundreds of courses for more than 130,000 users.
    • Importing massive data sets into Drupal from legacy sources including MySQL and SQL Server.
    • Integrating with SCORM learning modules, Adobe Connect, and other 3rd-party services.
    • Developing and implementing design and technical standards for creating (as well as retro-fitting) courses across the entire website.

    We’re extremely pleased with the outcome of the process. It is rewarding to work with organizations that have such relevance in the current world climate. As journalism continues to evolve and adapt in the age of the Internet, the need for quality, relevant training will need to adapt with it. So far, Drupal has proved a capable platform for handling the unique needs of an online learning experience. We’re looking forward to helping expand and refine both NewsU and Drupal as a learning platform.

    Check out the redesign at NewsU.org.

    Look out for an upcoming case study on the design and development process, as well as a soon-to-be announced session proposal for DrupalCon San Francisco. You can learn a bit more about the redesign process at NewsU Next, see what people are saying on Twitter, or ready the official press release.

  • Safely Querying CCK Data Types

    I recently came upon an article by Matt Johnson talking about the dangers of querying CCK tables directly. Due to shifting data within the CCK schema depending on a number of factors, directly querying tables can be hazardous if not done correctly. It’s easy to forget this until you’ve done a site where you’ve written dozens of queries directly against CCK tables, only to later change fields on your content types and have them break. Let’s take the example of building a site which catalogs artist and album information. I might start by creating an artist content type, with a field on it which defines the record label the artist is current signed to. Upon doing this the table structure would look like this:

    So if after I’ve developed for a while and written a handful of queries which depend on the “label” field to work correctly I decide it’s time to add a content type for albums, this type also needs a label field as artists might switch labels between albums. So after creating my artist content type and sharing the field, our table structure looks like this:

    The catch when querying these tables directly is that even if you already have data in your fields and change the field definitions, the CCK will change the schema and move the data around as necessary, making direct queries against these fields hazardous. In his article Matt recommends using views as an abstraction layer for queries by instantiating the view objects and executing the query, here’s a simplified example:

    <?php
    $view = views_get_view($view_name);
    $view->execute();
    if ($view->result) {}
    ?>

    Let’s take a look at the pros and cons of this approach:

    Pros:

    • Queries which are more stable, since views handles any shifting within the CCK table schema automatically.
    • Ability to take advantage of the recently committed views caching patch written by Jeff Eaton and Earl Miles. This can offer performance gains if you’re not already using some form of external caching.

    Cons:

    • Needing to write a different view for every query on the CCK schema you’re making.
    • The need to export those views to code.

    Although the views method works, and has some advantages, I find it a little cumbersome to create a view for every custom query I’m running on a site. An alternate method I’ve been using for some time is to find the table information directly through the CCK API and run the queries based on the information it provides. Heres an example:

    <?php
     
    // Get an array of field settings for the record label field.
    $field_info = content_fields('field_label');
     
    // Get the database table and column(s) information for the field.
    $db_info = content_database_info($field_info);
     
    // Get all nid's which have a label field value which matches the $record_label query parameter.
    $nids = db_query("SELECT n.nid FROM {node} n INNER JOIN {". $db_info['table'] ."} fd ON fd.vid = n.vid and fd.nid = n.nid WHERE fd.". $db_info['columns']['value']['column'] ." = '%s'", $record_label);
     
    ?>

    I much prefer this method as it maintains all the advantages of the views method in terms of stability, yet avoids the need to clutter the views interface, and maintains portability without the need to export the views you define to code.

  • Building websites for content

    We take a content-first approach to building websites. That means that one of the first things we’ll do in a project is ask you for all of the content you plan on publishing to the web. That’s right, all of it.

    What if you don’t have all of it?

    Well, then we’ll want to have some really in depth discussions about what it’s going to be. Content is an incredibly important part of every project for us, here’s a few reasons why.

    Where’s the beef?

    Users want stuff. Whether it’s products, news, images, articles, local weather, social networking or a plethora of other things, your content is the reason people come to your website. Your content is what we’ll design for during the creative phase. It’s what we’ll build for during development. In fact, putting your users in touch with your content in a no-nonsense way will be our motivation in every step of the project. When it comes to building a website, understanding your content isn’t only a good way to start, it’s the only way.

    Your content, your brand

    The copy, images, video and rich media applications that you serve your users are the heart of your brand on the web. They’re how you communicate with your audience; how you build and maintain relationships that perform. The better we know your content, the better we know your organization - which helps us create a website that communicates your vision, embodies your brand, and invigorates your audience.

    Everything in its place

    People expect to find things in specific, sometimes arbitrary or surprising, places. Shoe polish? Look next to light bulbs. Camping gear? Try sporting goods, next to automotive.

    Web content is no different. Your users expect to find content in specific places, and we need to make sure it’s there, waiting for them. A solid information architecture can mean the difference between frantic, frustrated clicking, and smooth, intuitive browsing. So how do we know your user’s browsing habits? Among other things, we ask them how they’d find your content.. This process is a critical step in building your website, and we’ll need a comprehensive list of your content to complete it.

    Unique approach for unique content

    Your content helps to define our development approach. Do you plan on promoting company events? We’ll need to build a calendar. How about feature staff biographies? We’ll probably want to integrate profiles with user accounts. Each type of content that you feature on your website could mean a custom tailored solution, so we’ll need to be as prepared as possible. Having access to all of your content up front assures that we build out the functionality of your website realistically, with no surprises, and in a way that fits your needs like a glove.

    Details, details, details

    When it comes to the front end, it’s the small things that take a website from good to great. Getting the style right on an author’s name, a publication date, an address for an event, a blockquote, etc., profoundly improves the overall readability and aesthetic of the final product. Getting familiar with these details from the get-go, that is, the specific challenges your content presents, gives us much more time to get it right, and minimizes any “crunch” leading up to the launch date.

    So what does all of this mean for you? Basically, expect to deliver a whole lot of content, and to do it really early on in the project. The way we see it, we’ll both reap the rewards. You’ll get an effective, smooth process and a high performance website that you can really be proud of, and we’ll get - well - pretty much the same thing, actually.

  • Goodbye 2008, Hello 2009

    Goodbye 2008

    Having survived the post-holiday frenzy that were weeks 1 and 2 of 2009, we took a few minutes to reflect on accomplishments from 2008.
    Here are a few stand-outs from the list.

    • We participated in DrupalCon Boston 2008
    • Sponsored and helped plan DrupalCamp Colorado
    • Released a few Drupal modules, most notably YouTube API
    • Won a 2008 Web Award and 2008 Interactive Media Award for iCitizenForum.com, bringing the number of awards for our work with Colonial Williamsburg to more than a dozen
    • Launched a handful of shiny new websites, including our own

    Equally worth mentioning, we’ve settled nicely into the Denver office (love the space and the neighborhood), have made important refinements to our process, and have continued to gel as a team. All in all, a productive year.

    Hello 2009

    We’re two weeks in, and already have plenty to talk about.

    DrupalCon 2009

    We’re excited to be attendees and bronze sponsors for the event… looking forward to a fantastic conference in Washington this March!

    DrupalCon 2009 Bronze Sponsor

    Usability Tests for Drupal 7

    Brad’s off to participate in a round of formal usability tests at the University of Baltimore for Drupal 7 this February. This will help continue the work done by graduate students there last year.

    Fresh New Projects Any Minute Now

    We’ve been busy, and it’s about to show — expect new portfolio pieces soon. Among them, there’ll be a Drupal website for a prominent New England art institute, a Drupal website for a large international non-profit, a Drupal+Flickr powered showcase site for a Denver-based tattooer and artist, and a Flash game using Papervision3D where you’ll have to fight weeds to save flowers.

  • Fresh Paint

    The Aten Design Group website has a new look. Well, maybe not an altogether new look, but a revised look. We’ve modified the typography, adjusted the layout, and made some color changes. The blog sports a reversed color scheme, with syntax highlighting for code examples.

    The copy has changed, too. We’ve added projects to the portfolio, added text about our technical proficiencies and our iterative process, and added a couple employee profiles.

    And then there is the technical platform - you guessed it, that changed also. We moved from a hybrid combination of custom PHP plus WordPress to a shiny clean installation of Drupal. The new framework provides a more robust environment for potential changes in the future, offers site-wide categorization, and provides better user management for delegating content development internally. It’s easier to publish content, faster.

    So maybe “Fresh Paint” is a bit of an understatement — it’s more like “New Foundation, New Walls, New Furniture and Fresh Paint.” But what a mouthful.

previous123