Session Notes: Native Mobile Application Development on Drupal [Drupalcon 2012]

Presenter: Kyle Browning, Workhabit

Why NOT native?

  • Options like Titanium/Appcelerator support multiple devices
  • Rapid prototyping: it’s easier to write JS than to do a bunch of memory management stuff
  • Native is not easy for development.

WHY native

  • Faster performance on the device
  • supported by the OS maker (can make support requests on iOS/Android forums)
  • Manage errors on the side of the stack
  • No waiting on API updates, release schedule
  • Game development
  • Personal prefs

Dev process

  • Start with getting your idea on paper.
    • Getting the idea on paper helps the entire process go more smoothly
  • Build wireframes/prototype
    • It’s easier to fail in wireframes and prototyping
    • Gather all the types of content you’ll be using
    • Lay out the app in a workflow (user flows, task maps)
    • Use tools like Briefs, Omnigraffle, Axure
    • Save time on development by failing early and learning as you go
  • Design (visual, UI)
    • WIll it need to support multiple devices?
    • What are the key tasks and how will those be called out
    • Attempt to create an experience users are familiar with: colors, taxonomy menu, etc.
  • Development
    • Figure out what features are pre-reqs for others
      • Will content come in as feeds? First build content, then feeds or vice versa
    • Build API communication file
    • If things are constantly changing, write unit tests
    • Tackle the larger, harder problems FIRST

Mobile stack

  • Mobile App
  • Services
    • Standardized solution to integrate external apps with Drupal
    • Service callbacks can be used with multiple interfaces like REST, XMLRPC, JSON, JSONP, JSON-RPC, SOAP, AMF, etc.
    • Gives you your connection into Drupal
    • Much time is spent messing around with Services
    • Servers
      • Defines Accept and Response types
      • Call Authentication Methods
      • Executes the actual function call
    • Authentication
      • Session based
      • OAuth both 2-legged and 3-legged
      • Singletons: You’ll have a user object that exists through the entire app; you want to make sure that only that object exists. Singletons help with that.
      • No need to re-login to the app when it opens.
    • Endpoints
      • A URL that a mobile app will hit
      • The bread and butter of Services
      • It’s a configuration object that has all the resources and servers/auth methods, etc. that you need to make Services work.
      • You can also work with versioning, access controls for new developers, etc.
    • Versioning
      • Helps keep things consistent
      • Won’t break apps when you build new features or functionality
    • Things to note:
      • Services Views is a bit wonky, but it works
      • There is potential to break if you change Views
      • Features allows you to take the View and put it into code so that it can’t be messed with.
      • Adding images inline within content
        • Services will insert unnecessary HTML tags instead of images
        • Working on a module that will strip out images and attach them as a file to the node
        • Use Imagecache to deal with image handling (it’s already in D7 Core)
    • Tools
      • Drupal iOS SDK and Dandy
        • Sits between Services and the mobile app so you can communicate with Drupal natively
        • Helps do user/session management
      • Services Log
        • hooks into services and logs everything that Services is doing.
        • You can see when you’re getting a 403, etc.—what is messing up and why?
    • Drupal
      • Holds and organizes content
      • Can be sent to mobile app through Services

Session Notes: Drupal Media [Drupalcon 2012]

Presenters: Dave Reid, Palintir & Aaron Winborn, Advomatic

Goals of the media project:

  • Unified media/file management within Drupal
    • We’ve been looking for a way to treat all media and files the same way in the Drupal database; this has been difficult.
  • Media/files as fieldable entities
    • Can tag and add taxonomy terms directly to files
    • Can include start and end dates on files to ensure limited access
  • Use a Single browser for editorial control
    • Makes things easier for content editors
    • Don’t have to worry about different fields for files vs. video?
    • Thumbnails for all images, video, etc. right in the browser
  • WYSIWYG and Views integration
    • Lets editors embed media directly into a text area
    • Allows you to modify the browser with Views
    • Can organize files by tag/title/etc.
    • Can use exposed filters, etc.

Media in Drupal 6

  • Attached to nodes via upload file
  • Upload module has been retired for Drupal 7
  • Or media was created as a node through specific modules, which created baggage
    • Image
    • Video
    • Audio
  • OR media was created as a field within a node via CCK, which required a different type of field for each media type, and doesn’t give the opportunity to separate the media file from the node
    • Imagefield
    • Filefield
    • Embedded Media Field
    • VideoField
    • AudioField
  • Every module had its own strategy for file management, which led to confusion
  • Inline media became possible via
    • WYSIWYG
    • IMCE
    • Node Embed
    • Embedded Inline Media
    • Node Reference/Embed Media Browser
  • Before Drupal 7, there were MANY different modules offering media/file management, but each offered different stuff, and it wasn’t very extendible (multiple modules for new media requirements)

History of the Drupal Media Ecosystem

  • 2008: Proposal for Rich Media GUI
    • Create extensible browser for rich media editors
    • Create API to better connect developers with extension modules
    • Called the module Media
  • Original proposal went out to 5-6 developers; 2 dozen folks by the end of the year.
  • Ongoing Media sprint
  • 2009: added some patches to Drupal core
  • Now there are lots of maintainers, and an unofficial Media Initiative

The new NEW Media module for D7

  • Pushed 1.0 out of beta and into release/stable status in September
  • Now there’s TWO versions
    • Wanted to add new features, but didn’t want to break it before stable release
    • 2.x is unstable (we’re working with crazy sauce/hot sauce
    • Wiki link groups.drupal.org/node/215218
  • 1.x is feature locked; only fixing bugs right now
  • Views integration/UI changes will go only into 2.x
  • Palintir is already up to 2.x
  • Choose 1.x if you need something absolutely stable right now; BUT it won’t get any of the new stuff.
  • If you have the resources to fix what breaks, go with 2.x; it will be getting ALL the new features/updates.
  • In the sprint, they changed the Media browser so it was powered by Views
    • gives more flexibility for site builders to filter, present data
    • makes good use of code that ALREADY WORKS WELL

Media stack

  • Modules that integrate with Media
  • Media Module:
    • Widget for fields
    • Media browser
    • more UI
  • Views module: backend for Media browser (2.x)
  • File entity: Fields on files, file display and view modes, Admin UI
  • Drupal 7 core

File entity provides and API/UI for

  • Viewing/editing/deleting files
  • Managing fields and their display on file types
  • Allows file to be easily extended via
    • Translation
    • Rules
  • Does NOT
    • allow file types to be edited, or how they’re defined to be changed
    • Provide an API for file access
    • provide the greatest performance
    • exist currently in D7 core

Media

  • provides a unified UI for managing Drupal files
  • allows upload of new files
  • allows you to mass import from a directory
  • integrates with WYSIWYG
  • provide an API for other modules to provide
    • Media browser plugins
    • integration with media_internet for external sources
  • DOES NOT (yet)
    • natively display audio and video
      • Use oEmbed, MediaElement, etc. for display
    • embed non-media with WYSIWYG
      • works great for images, though
    • make it easy to configure
    • allow more control over WYSIWYG integration
    • have the greatest usability

Adding media files to content type

  • Add file field
  • Choose “Media file selector” as Widget
  • Choose in file settings WHICH browser plugins to show
  • Update allowed file extensions
  • Update “Allowed Remote Media types”
  • Update “Allowed URL schemes” – i.e. Youtube.com, Vimeo.com, etc.
  • In Manage Display tab, choose “Rendered File” – and then update the “View Mode” for that file.
  • Media will provide a new field in your node/edit screen which allows you to “add media.”

Adding remote videos to a content type

  • In the browser, choose “Web” instead of “Upload” or “Image Gallery”
  • Copy and paste URL.
  • Works the same way as image upload.
  • Displays multiple images at once.

Setting it up:

  • Configure WYSIWYG to accommodate new media content types
    • Make sure that “Convert media files to tags” is checked.
    • Update your various text input filters
    • Make sure the “Media Module” button is checked.
    • You should then see the “Media” button in your WYSIWYG editor, and pressing it will open the Media browser.
  • Configure Fields on a file
    • Structure > File types (2.x)
      • Allows you to add new fields to file types, e.g. tags, availability date, caption, image credit
    • Configuration > Media (1.x)
  • New “Edit Media” feature in 2.x allows you to update media fields without leaving the node.
    • Want to use fields for information that’s going to be the same everywhere you see it (currently, if you change fields on one image, it’ll show up everywhere that image is used).
    • Can’t edit the file itself (e.g. upload a new one); you can only update the FIELDS on it.
    • What if you want to upload a new version?
  • Multiform (http://drupal.org/project/multiform): allows you to include several forms in one <form>
  • New “Add file” section allows you to upload files in one go for later; nice touch for editors
  • You can also update the media browser in 2.x with Views, add new ways to filter, etc.

What other people are working on in Media

  • Plupload
    • Multiple upload
    • not integrated in Media browser (yet)
    • Does work from the Add file page
    • d.o/project/plupload
  • oEmbed
    • Easy workflow for embedding from multiple various content providers
    • integrates with Media: Internet
    • Used in Gardens
    • Works with both 1.x and 2.x
    • d.o/project/oembed
  • Remote stream wrapper
    • Easily ref files from CDNs and external sources
    • Can generate image style derivatives
    • Integrates with media browser
    • Works with 1.x and 2.x
    • d.o/project/remote_media_browser
  • Derivitaives API
    • Use rules to create derivatives and process media files
  • Media update/translation
    • Only works with 1.x
    • Replace and translate files
  • Media crop
    • Used in Gardens
    • Crop, rotate, and edit images via WYSIWYG
    • d.o/project/media_crop
  • Media front
    • Open standard media player
    • HTML5 with Flash fallback
  • MediaElement
    • External Lib.

I pray that my child never becomes an actress (assuming it’s a girl)

Because if she does, she’s doomed to a life of being judged not because of her character or her talent, but because of what she wears on the red carpet, or how skinny she is compared to the women ogling the obscene fashion show at home.

Don’t get me wrong; I’m as much a fan as anyone of all the gorgeous curvy actresses we’re starting to see. And I do believe that they’re an excellent role model for girls—showing that a beautiful woman comes at any size. But when I log into Facebook and see a bunch of housewives bitching about how skinny Angelina is, and coming out with that whole “what a horrible role model/she’s gonna make our daughters anorexic” nonsense, I can’t help thinking that’s a really old fucking story, and shouldn’t we be focused on getting *more* attention to the beautiful curvy girls, instead of constantly demonizing the skinny ones?

Here’s the thing: women’s bodies are beautiful. Big ones, small ones, tall ones, skinny and fat ones. I hope that the skinny ones are healthy; I hope the curvy ones are as well. But sitting around bitching about whether someone’s too skinny for someone’s liking sends the message that women are still, and always will be, judged for their bodies, not what they can do, or what they think. Including, and especially, by our own fucking kind.

And that, frankly, is a hell of a lot more damaging than seeing Angelina’s skinny ass on the red carpet.

Session Notes, Sessions 7–9: Agile UX Summit, 2/25/12

Anders Ramsay: Learning to play UX Rugby

  • Feeding the beast
    • Whole team of devs and they’re building shit faster than I can design it
  • Half-baked UX
    • PO’s under pressure to deliver the next release and signing off on crap
  • Sprint-tunnel vision
    • Yes, we delivered all the features we were supposed to deliver this sprint, but the design is an incoherent mess!
  • Why the dysfunction?
    • Playing the old waterfall game on an Agile playing field without knowing it.
    • Lacking the thinking tools to understand how the Agile game is played.
      • Scrum is not an acronym; it’s related to rugby.
      • “stop running the relay race, and take up rugby.”
  • Relay race
    • Team members run alone
    • Collaboration isn’t built into the game; the baton is handed to the next person
  • Rugby game
    • Intensive and continuous collaboration is core to the game
    • Reach the goal line again and again to win the game
  • Rugby in design
    • Team communication
      • Workshops, not meetings
      • Intensive passing game across roles/perspectives
      • Iterating towards shared understanding
      • Move away towards “debugging,” more towards a collaboration-centered design process
    • Collaboration-centered design
      • Shift towards facilitation as a core skill set
      • Cardstorming
      • Collaborative Chartering
      • Dot-voting
      • Story mapping
      • Card sorting
    • Ideation clearinghouse
      • Capturing the imagined final product.
      • Complete in an hour or less
      • There is a tremendous cost to not knowing what’s in the head of your project’s stakeholders (i.e. cutting off the project because you didn’t “get the vision”)
      • Step 1: Set focus/boundaries for the workshop
      • Step 2: Do a warm up; introduce people to the raw materials
        • 4-5 minute time window
        • Write every feature you expect on a separate sticky
        • Becomes a feature palette for sketching
      • Step 3: Sketching timebox
        • Give 5 minutes
        • Ensure safety; it’s okay if you “can’t draw”
        • Everyone in the room sketches SOMETHING
        • Sketch individually
        • No rules — someone wants to write text, they can
        • Clarify that this is research, NOT design.
      • Step 4: Critique
        • 2-min round-robin where people explain the vision/design
        • Take careful notes, attach to respective sketches
        • Look for and work to resolve differences in vision among stakeholders
    • Designing with workshops
      • Learn, apply and recombine workshop patterns
      • Cardstorming + dot-voting + sketching, etc.
    • Pairing
      • an intensive one-on-one passing game
      • Continuous problem debugging and knowledge distribution
      • One person “drives” and the other “navigates”
      • Use to debug and fix code in a continuous and collaborative way.
      • Change partners each day
    • Cross-functional pairing
      • Designing in multiple dimensions at the same time
      • Better collaboration means less/lighter documentation
      • Move from whiteboarding/sketches straight to building things together.
      • Developers can help with the transition from talking about building to actually building
      • Each medium/perspective informs the other
      • Move from wireframes to building the structure to HTML/CSS in a simultaneous process.

Todd Zaki Warfel: The Design Studio Method

  • Borne out of architecture and Industrial design
  • Three phases (charette):
    • Create: generate and prototype the concept
    • Pitch: presenting the design concept
    • Critique: talking about the design concept
  • Approach: 6.8.5
  • Tools:
    • Butcher paper
    • Sharpies (rougher feel; it’s about generating ideas)
    • Personas
    • Design challenge/scenarios
    • Templates, e.g. 6-up or 1-up grids
    • STOPWATCH
  • Teams should be CROSS-FUNCTIONAL. Represent 3 viewpoints:
    • Design side
    • Business side
    • Development side
  • Each team gets a different persona, and ONLY focuses on their persona for the duration of the studio
  • Design studio kicks off the design process
  • Step 1: Create
    • Create 6-8 concept sketches individually, within 5 minutes
    • Give templates with 6-8 blocks (like a storyboard) with grids and space for notes
    • Either storyboard a flow, or use the time to sketch multiple approaches to the same screen
    • Don’t forget a warmup session
    • Use paper and pencil to get people out of their element/comfort zone
    • Don’t worry about details; just get the elements down
    • Goal: get just enough of the concept on the page to be able to pitch your idea to the team
    • Don’t create more than you can pitch in 3 minutes
  • Step 2: Pitch
    • Put all sketches on the wall with personas, “inspiration gallery”
    • Everyone gets 3 minutes to pitch their idea:
      • What did you intend to achieve?
      • How does your idea achieve that goal?
  • Step 3: Critique
    • While someone’s pitching their concept, nobody is allowed to speak.
    • Once the 3 minutes is over, team gets 2 minutes to critique the concepts.
    • This is NOT feedback, i.e. “I don’t like this” or “I like this.”
    • Critique based on the goals for the design: where it achieved or failed to achieve the goals.
      • 2-3 ways it achieves the goals, EVEN IF YOU HATE IT (green markers)
      • 1-2 ways it can be improved upon, EVEN IF YOU LOVE IT (red markers)
  • Step 4: take feedback and iterate on designs
    • Stealing is highly encouraged; if another team does something you love, steal it and make it better.
  • Benefits
    • Generate two weeks of work in less than six hours (420 different design concepts)
    • Instant buy-in from team members: since team members help create the designs, they’re already buying into the concepts
    • Get team members to own and invest in the concepts
    • Engineers said their estimates on time were 50% more accurate
    • Having five minutes as a rule means you don’t have time to worry about it; just execute
    • Everyone gets to vet concepts as they go: it’s not as good as usability testing, but the benefit is that only the strongest concepts survive

Jonathan Berger, Code Literacy for Lean Teams

  • Coding as literacy
    • gets rid of the binary nature of “you can code or you can’t”
    • If you work in technology, the medium is power
    • “I can get this code to work or not” can be frustrating to those just learning
  • LITERACY DOES NOT EQUAL FLUENCY
    • Just because you can code doesn’t mean you’ll be good at it
    • Getting technical doesn’t have to be a full time commitment
    • Many resources available (books, sites, tutorials, etc.) are geared towards people who want to be full timers
  • More and more shops won’t hire designers who can’t code.
  • How does code literacy help lean teams?
    • More literacy leads to more sustainable projects and more successful outcomes
    • Fine details are important, but often get shoved to the wayside by devs moving on quickly to the next feature
    • There’s a whole class of things that are easier/less time consuming to do than to explain
    • Being able to fix details yourself saves the developers time,
    • Gives team more hands on deck, fewer bottlenecks
    • Builds camaraderie
  • How does it hurt?
    • Time/cost in learning curve
    • Potential for overstepping bounds (humility is important)
    • Harder to look at things with an “innocent” eye (i.e. without thinking about how it can be made)
    • Tunnel vision in devs can skew priorities towards problems that are “easy” to fix
    • DON’T LET CODE OVERSHADOW DESIGN
  • Ways to become literate
    • Use in browser mockups (HTML/CSS/JQuery)
    • Use Inspector (Chrome) or Firebug (Firefox) to inspect and change elements, then import changes into code mockups
    • Align product/development/design
    • Set up a local dev environment (e.g. MAMP, Rails)
    • Get started with Git
      • Designers can contribute small changes, e.g. copy or CSS, and push to production without interrupting the developers’ workflow
      • You can make the fixes that matter to you but aren’t crucial to the developers
      • Watch out for breaking tests (e.g. when copy is changed)
    • Learn JQuery & the DOM
      • Make better mockups—directly in the browser
      • Make more changes for the team
    • Learn the language your team is developing in—PHP, Rails, Drupal, etc.

Session Notes, Sessions 4–6: Agile UX Summit, 2/25/12

Tomer Sharon: Getting out of the (Agile) Building

  • How do you do UX Research in an Agile environment?
    • OLD: Fast Usability testing rounds
  • Tips for Agile Usability testing
    • Make it relevant to what the team is doing NOW.
    • It should be a small thing, not a BIG thing, and do it 3-4 times per sprint (i.e. once a week)
    • Recruit participants in advance.
    • Plan really fast.
    • One-page usability test plan on Smashing Mag: http://uxdesign.smashingmagazine.com/2012/01/26/ux-research-plan-stakeholders-love/
    • Make it a team thing. If nobody was there to hear about it, it didn’t happen.
    • No reports. Try a spreadsheet with observations, and just color or code where observations repeat.
  • “Getting out of the Building”
    • Getting an understanding of what the users actually need;
    • What you find isn’t necessarily going to relate to what the team is doing right now.
    • Bring users in in some way.
    • “Virtual Visit”
      • schedule phone call with potential or existing user of product.
      • No specific goal other than having engineers, project managers, etc. to “see” a user.
      • Use screen sharing software to watch customers using the product.
      • Get the product team talking to the user, asking the questions.
      • If the same problem is noted multiple times, it may turn into a product change/sprint.
    • “Field Fridays”
      • Take some engineers to visit a client for 60-90 minutes
    • “Collaging”
      • Ask participants to use collage to express their feelings about a topic.
      • Collect images around the topic.
      • Gives people a chance to express themselves more easily around the topic; uncover user needs in a less direct way.
  • Getting buy-in for user research
    • Become one with the team. There is ONE team who works on creating something. If you understand that, you can do these things.
    • If we want to get buy-in, our route to work should include stopping and talking with people within the organization
      • Identify what people care about.
      • Identify new research questions.
    • It’s OUR research: Getting buy-in for UX Research projects.
    • Elsevierdirect.com Code MKFLYER for 20% discount.

Andres Glusman: Managing your Malkovich Bias

  • Building something isn’t the problem; getting people to *use* what you build is.
  • On track to do 600-800 tests a year
    • Test 2-3 days a week
    • Setup tests prior to knowing what will be tested
    • Objectives are discovered via conversations, etc.
    • Recruit participants from community and through recruiter (compensate for their time)
    • Use GoToMeeting to broadcast sessions to developers
    • Record sessions using Silverback, JUST IN CASE you want to view it again
    • Follow up each session with discussion and notes/video
  • Everyone suffers from Malkovich bias: the tendency to believe that everyone uses technology like you do.
  • Watching people use the stuff you build helps solve the Malkovich bias
  • Experiment then double down;
    • First question: what are people going to respond to?
    • Test the most simple concepts you possibly can.
    • Use A/B testing to test experiments.
    • Know that your most likely outcome is failure; look for the points of heat (where people are staying)
  • Look at short and long-term experiments
    • Short term: trying out new messaging or graphics
    • Long term: creating new service areas, profiles, etc.
  • Lessons learned:
    • Give team direct access to customers
    • Look for the boulders in the road; be comfortable with error
    • Substitute frequency for precision; if one screws up, there’s another right behind it
    • Have discussions
    • Launch and Learn
    • Accept that failure is the most likely outcome
    • Experiment, then double down. Once you’ve found something that works, start working on implementation.
  • Other lessons learned:
    • Don’t buy your coworkers books and expect them to read them
    • Don’t try to sell the process; people don’t want to buy the process, they buy the results
    • JUST START DOING IT and let the results show you how successful it is.
    • Snuggle up to failure
      • We are more often wrong than we are right.
      • What would you do if you assumed you would fail?
      • Go after what will cause you to fail as often (and as FAST) as you possibly can.
      • The longer you put off getting people in front of your work, the longer you can live under the delusion that you won’t fail.

Lane Halley: Quick, Visual, Collaborative and Continuous

  • The old days of waterfall: PLAN-BUILD-TEST-SHIP
    • Based on shipping physical discs that the user would have to install.
  • Then, we started having:
    • Web services
    • Web apps
    • Web analytics
    • Mobile devices
    • “Permanent beta”
  • Things don’t have to be built in one big chunk; you can iterate and learn as you go.
  • Many UX processes are still stuck in the Waterfall “over the wall” mode
  • Changing role of design
    • Design as team responsibility, not a single designer’s responsibility
    • Cross-functional pairing
    • Designer as facilitator, not a lone wolf
    • Team as product owner
    • Bringing things into the entire process: smaller, lighter, more continuous
  • UX finally has a “seat at the table;” but the processes we’re using are causing backlog and distress
  • How to make it “leaner?”
  • Team discussions: who do we want to talk to, and what do we want to learn?
    • Create an interview guide with themes
      • Intro:
      • About you:
      • Collect a story about what you want to talk about
      • What devices do you own, and what do you use it for?
  • Provisional personas
    • Defines user hypothesis
    • Shared visual artifact
    • Evolves over time
  • Get “permission” to interview users: start by asking the team who the users are. What are their pain points? How do we delight them? If the team can’t answer, that’s a step towards getting permission
  • Interviews can give you an insight into personas (i.e. USERS) you didn’t know existed.
  • Team Interviewing
    • Pair interviewing
    • Multiple note-takers
    • Group synthesis
    • Visual radiators, sketchboards
  • Continuous customer engagement
    • Five users every Friday
    • “Talk to us” or “give us feedback” button on the website
    • Just-in-time recruiters
    • The point isn’t how many people you talk to; it’s that you’re doing it regularly
    • Schedule time in advance, EVEN IF YOU DON’T KNOW what you’re going to talk about
  • Use one session for multiple activities
    • Listen, gather context
    • use collaborative activities
    • get product or prototype feedback
  • Collaborative design sessions
    • Put everything on the board
      • “You can only have 5; which ones?” then prioritize.
      • “You can have 5 more; which ones?” etc.
    • Collect everything and start talking about priorities, hierarchy, etc.