April 2009

Apr 27, 2009

Evernote is one of those applications that have subtly changed my life forever. I've become much better at capturing idea and thoughts since grabbing it a couple months ago. It's just so much easier to create a new item than a whole text file you have to name and find a place for. It's fast, searchable, and I have a lot more to say about it, but I'll wait for future blog posts.

One of Evernote's stellar features is the ability to upload photographs, and Evernote will run them through an OCR and will include the images in its search. Through this, I found out that there are hidden words everywhere. When doing a search for "IRA", I found the hidden acronym on my face, my hair and another on my sweater. Oh. My. God. What else is written on my face that I don't know about?

200904271527.jpg

Apr 25, 2009

During a recent break in regression testing, I sought out a method of streaming a video of my macbook screen to the web so my team could have the option of watching my tests as they ran. I'd also been wanting to give ustream.tv a try, and 2 birds + 1 stone == WIN. Ultimately, I didn't get everything working until after the testing was done, but I still posted the link and tested out a few filters on CamTwist, one of which was called "Take on me". The effect, as you might guess, give the cam a black and white comic feel. The slow frame rate added to the effect, and the urge to dig up one of my favoriate 80's A-Ha tunes and flail myself around in my chair was irresistible. Literally.

Since it took me a little while to dig up all the resources to accomplish such a feat, I figured I'd save someone else the trouble. So, here's what you do (instructions are for a mac, though a Windows machine setup looks similar:

  1. Download CamTwist and install
  2. Restart your computer (I tried not doing this, but nah, you really have to restart).
  3. Open up CamTwist, select Webcam and double-click the "Take on me" filter (Bonus: to stream your desktop, click "Desktop" under "Select a video source").
  4. Sign up for a ustream.tv account and fill out all the forms.
  5. Click the 'Broadcast now' button in the upper right hand corner of your ustream account page (Click "skip" for the Twitter unless you're looking for more ubiquitous embarrassment)
  6. Select "CamTwist" as the video input and a mic as the audio input. You should see your sketchy self on the monitor.
  7. Google "imeem take on me". I just discovered imeem as a way to listen to full songs without creating any accounts. I've done several searches with "imeem" + song title and get a full streaming tune. Once you get on an imeem page, the song should start playing automatically.
  8. Click "Start broadcasting"
  9. Give your fellow dev's the URL (you can find it under "Your Shows", and click the link "Go to Show URL" (Bonus: you can also embed the stream and chat on a web page by going to "Your Shows" and then "Share")
  10. Flail about in your chair (it might be slightly more effective if you wait until towards the end of the song and have someone click turn the filter on and off as fast as they can)

Of course, this example is pretty novel, but the combo of ustream and CamTwist open up some cool possibilities. Just being able to share your desktop on the web is pretty awesome. The resolution isn't great, but if you show just a portion of your screen, you can get the message across.

Helpful links

http://allocinit.com/index.php?title=CamTwist - Download page (http://allocinit.com/images/1/18/CamTwist-1.7.dmg - actual download)http://www.ustream.tv/helpcenter/camtwist - ustream instructions on setting up CamTwist
http://www.ustream.tv/helpcenter/advancedhowto - Advanced how to on ustreamhttp://www.ustream.tv/mydashboard - Your dashboard on ustream
http://chrisshattuck.com/chris-shattuck-live-stream - My (occasionally) live streaming feed
Apr 23, 2009

There's a nice little firefox plugin called Stealthier, which allows for secretive browsing of the internet. While it's probably most widely used for untraceable porn siestas, it can also allow you to quickly switch off your cookies, cache and sessions, making you instantly anonymous on any site. In particular, I use it to view my Drupal sites from an anonymous perspective without logging out or opening another browser (that likely doesn't have Firebug). Then, I can just turn off Stealthier and I'm back. Kind of like the spy in Team Fortress 2.

Apr 23, 2009

When we imagine how something will go, it is often vastly different than the way it turns out. I like being prepared for new situations, and this disparity between the imagined state and the reality cramps my ability to prepare. I discovered that the feeling I get in certain situations is very similar to the one I get when waking up really early in the morning. I've just been ripped from one environment where I was totally comfortable and thrust into the real world, where it's cold, dark, and disorienting. I didn't have time before waking up to prepare myself, so I just have to stick it out until thinks start to feel normal again. Eventually it does, and that's usually one thing I can remember in this state, that it will get better and that I will adjust. That probably keeps me from panicking.

I'm in the process of preparing for some in-depth research interviews, and I'm thinking how I can best prepare myself for the unexpected. The interviews will likely be in differing environments, with people I either don't know or could know much better. I know from experience the the calmer I am the the more I'm enjoying myself, the better the process of human interaction goes. As soon as you panic, people kind of cut you loose. So, in particular I'm trying to figure out what kind of techniques I can use to prepare myself. How can I most accurately anticipate the slew of variables I have no control over?

My working theory is that I can pull l up that feeling I get in the early morning. Totally discombobulated, unprepared, uncomfortable. And then project that feeling on the visualization of how the interview will go. Now, I can set up some emotional structures to prepare for that discomfort, and not let them surprise me into a bad mood.

If I still remember this theory by the time of the interviews, I'll post back in regards to how well it actually works.

Apr 22, 2009

I find that while a lot of my actions are initialized through selfish motivations, it's much more satisfying to explore the range of possible alternate motivations and discover something that's more world-serving. I was just thinking through the process of designing my new business card (more like not-business card) and happened upon a possible alternative thought process that opened things up in my mind a little this morning.

My immediate desire was to have something that was nice to look at, and after playing with a few ideas in Illustrator and Photoshop, my limitations as an artist frustrated me into doing some stock art searching. I eventually found a really nice piece of retro-style vector art and paid the reasonable licensing fee to use it.

I had to think through this a little, because I wasn't sure how I felt about using art that wasn't mine on the card. Through the years, I've kind of gotten used to doing everything myself for almost any type of project. Getting involved with the Drupal project was the first step in admitting that I had reached the edges of what I could accomplish as an individual, and since then various other aspects of my world have shifted to be more trusting and reliant on others. In this shift, I also learned more of the value of allowing others to be reliant on you. There's a real human need to find a place to fit in your world, and I think we find it by discovering what we have to offer to others.

I realized that in using this particular piece of art, I'm may be ultimately serving the purpose of the artist by adding to the overall beauty in the world (as opposed to using my own art and adding to the overall cruft). As a creator of sorts myself, I recognize that in creating something with quality part of me wants the attribution for the work, but if I think about it a little I can also muster the higher motive of just improving the overall experience of people in my world, regardless of its source. So, even though his name isn't on my card, the artist's work will still get out there just a little more because of it.

So, Kudos to Aleksandar Velasevic for creating a really nice piece of art, and thanks for letting me use it for a very reasonable licensing fee.

Apr 21, 2009

In the winter, it's actually kind of a boon to have a keyboard that doubles as a radiant heater, especially if you poor circulation in your fingers (/me points to myself). However, as a short spring dissolves into oppressive Idaho heat, the heat might make one a little wary of using the onboard keyboard for fear of the dripping sweat shorting out some of the circuitry concealed below.

Here's the solution: a nice free app called smcFanControl. It allows you to change the speed of your macbook fans up to the healthy limit. As an illustration, I just flipped it on and in the last minute the temp showing on the tasteful menu bar display has dropped 10 degrees.

I appreciate the default macbook settings, which can be really nice when recording music. In contrast, my Dell laptop fan runs all the time, and it's a challenge operating a software-based recording app from across the room. But, I also like having a choice.

As a bonus for those of you who are putting off flipping on the AC for as long as possible, also consider using a Lapinater plus with the Mousitizer extension. Keeps an inch and a half of insulation between my legs and the bottom of the mac, which is considerably warmer than the top. For couch-based telecommuters, it also adds a new range of positions to choose from (diagrams to come).

Apr 20, 2009

During a recent push to a production server, I recorded a Selenium test to illustrate one of its uses, which is porting Drupal configuration changes from one server to another reliably. In this example, I use a Selenum test suite to accomplish several tasks, including:

  • Import a content type
  • Import a view
  • Install modules
  • Create a multi-paned panel page
  • Fill out several configuration forms.

This series of tests saved me a lot of time and reduced the probability of errors to virtually nothing. In the past, I would keep a list of configuration changes to port, and do them manually to push from a development server to staging, and then from staging to production. It's time-consuming and error-prone that way.

This video just shows the tests running with me narrating (rather poorly). I just wanted to actually show what was possible to whet the appetite of folks who haven't used Selenium before. I hope to add more tutorial-style videos later.

This video has been removed, but I will post a clearer one at some point. Thanks!

Apr 20, 2009

The other day I decided to finally figure out how to do a little benchmarking on some of the code we've been working on, and on my co-worker Jason's lead, I started fumbling around for a way to use kCacheGrind, which allows you to visualize where the bottlenecks are in your code, showing you information like how much time was spent on each function, in milliseconds or percentages. Very cool, but it took a while to get the setup just right. So, this is a cheat sheet to capture my research.

First of all, here's the aspects of my setup that might differ from yours:

  • Mac OSX
  • I'm using VMWare Fusion for hosting a Linux virtual machine
  • xDebug was already installed and enabled on my local machine

In a nutshell, here's how it works:

  • Using a firefox plugin and the php xDebug extension, you turn on xDebug profiler and load a page
  • xDebug creates 'cachegrind' files, which contains information about each php function that ran during that page load.
  • Open the cachegrind files with kCacheGrind to visualize the data.

You could do this all in Linux, but I end up creating the files on my mac and then drag them over to an Ubuntu virtual machine.

And here's the steps:

1. Download the firefox xDebug plugin

2. Set up xDebug profiler configuration in php.ini.

A cachegrind file can be created for each process, and Apache typically uses several processes for each page load. After some experimentation, I realized I wanted all of these merged together in a single file, which is what the settings below will do. Technically, this is 'append' mode, and if you refresh the page again, it will continue to append information. So, I will load a page, then I'll change the filename slightly (added a description at the end, for example), so the next page load will create a new file. Below are the php.ini settings I use for xDebug (set up to use remote debugging) and the xDebug profiler. I've bolded the lines you need to change to reflect your setup:

; xDebug settings
zend_extension=/Applications/MAMP/bin/php5/lib/php/extensions/no-debug-non-zts-20050922/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000 ; Choose a port

; profiler settings
xdebug.profiler_append=1
;xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_name = cachegrind.out.%s
xdebug.profiler_output_dir=/xdebug/

3. Make sure cachegrind files are getting saved

Turn on the profiler in Firefox by clicking the little (p) button in the lower right corner of the window. Then, load a page that's hosted on your local machine (I haven't checked how remote testing works). A file should be generated in the directory you specified for xdebug.profiler_output_dir.

4. Get an Ubuntu virtual machine

If you don't have an Ubuntu machine and have VMWare fusion, download a torrent for a full Ubuntu setup. If you haven't used torrents yet, Transmission is a good client for mac, and Azareus is the only one I have experience with on Windows.

5. Install kCacheGrind

Use the Add Applications menu item in Ubuntu and search for kCacheGrind. The install might take a while because there's a lot of dependecies.

6. Test out kCacheGrind

Once installed, open up a cachegrind file in kCacheGrind. You should see a lot of pretty colors and be a little confused. Perfect, that means it's working.

I haven't spent a lot of time figuring out the different levels of information in kCachegrind, but just the basic information is useful. It's easy to see which functions eat up the most processing power.

A couple other thoughts once you get to this point:

  • Each page load might be quirky for one reason or another, so it might help to balance out between several loads. Since we've set up the profiler in append mode, just refresh the page a particular number of times. Just remember how many time so that when you benchmark changes you can make an accurate comparison of the changes.
  • In addition to seeing the amount of time spend on functions, you can see how many times it was called, and by what. I noticed a function right away that was being run several times when it only needed to be run once. It's because I assumed that template.php was only included once. I realized this is a good way to test out some of your assumptions.

Sources

Below are some links I found particularly useful for information:
http://elrems.wordpress.com/2008/02/12/profiling-php-with-xdebug-and-wincachegrind/ - Info for setting up php.inihttp://www.maccallgrind.com/ Mac callgrind reader (for use in a pinch, it was hard to find useful information in it, though)http://derickrethans.nl/files/phparch-xdebug-qa.pdf - Info about what the xDebug configuration lines actually mean
http://www.xdebug.org/docs/all_settings#trace_output_name - Variables that can be used for naming the cachegrind output files

- Credit to other co-worker Caleb for "Promoting me to get off my ass and write a blog post"

Apr 12, 2009

Just wanted to jot a few thoughts about this while it's on the mind.

I've worked with clients in the past who are content with a product that is okay, but not fantastic, because a lower cost = lower customer expectations = little or no backlash for bugs. I've tried this myself with designing several throw-away apps in an effort to generate a little buzz. What happened was kind of unexpected. Some people actually used the apps, and some people really liked them.

I realize these folks are transitional. They finally figured out how to articulate the problem of what they need, and are leapfrogging applications until they find one that works for them. As soon as they find one that works, they'll really dial back the effort, but might spend a little time trying to find something better when they experience bugs or garden walls. I followed the same process this morning to find a little countdown timer app. I found something that worked, and now have better things to do for a while before I go trying to find something better.

There's actually a market there. The equation is to spend less time and money on a product, charge less and your users will expect less, and will likely move on to something better eventually without bugging you much in the process.

Is this ethical? You're putting a sub-par product out there knowingly and expect people to use it little if at all. Doesn't this just add noise to the cacophony of options out there for just about anything you want to do? Add to the equation a huge marketing push, and you've got a lame duck you're nearly *pushing* on unsuspecting users. Phrased that way, it seems morally ambiguous at best. And once people have their band-aid, they will be less likely to find the better solution (and pay for it, supporting the producers of a fine product).

But, I can also see an argument from the other side. By providing a solution (any solution) to a problem, you're fulfilling your part of the bargain. It is, after all, a solution. Maybe people only use it in transition, but perhaps it's better to have at least some solution in the interim period. Maybe there's a role there, and an important one.

Jury's out on this one for me. I'd likely favor one of either side in different situations.

Apr 8, 2009

After some searching and trying a few apps that didn't work, I found Menubar Countdown. It sits in the mac menu bar and counts down the time you have left. The programmer also wrote a little blurb about why he created the software, which was particularly to practice using the Promodoro technique (25-minute bursts of activity). I'll have to read more about that, but in the meantime, thank Kris!

Apr 8, 2009

Normally, the prospect of spending the last few minutes of my evening writing a blog entry would seem a bit masochistic. The typical process:

  1. Visit my online blog
  2. Maybe sign in (after navigating to the login screen)
  3. Find the menu item I need to add a blog entry
  4. Open up some external wysiwyg (probably Dreamweaver) to compose so I can auto-indent html and save as I go
  5. Compose, copy and paste over to the add entry screen
  6. Submit, discover I used the wrong input type (should have been Full HTML, dangit!), change and resubmit
  7. Invariably decide to reword something, edit and resubmit

Besides the actual writing, that process is costly in terms of brain power and time. It kind of makes me sick to think about at such a late hour.

So, I'm probably the last mac-using blog-writer in the world to hear about Ecto, but on the off chance that I'm not, I'm using to it to post this to my blog, which - according to the Cult of Done Manifesto, item #12, is pretty much accomplishing my goal of telling everyone I know about it by just getting it on the web (thanks, Manifesto, for justifying my lazy ways!).

Ecto transforms the heavy process above to the following:

  1. CMD+Tab to Ecto (because it's always running on my mac)
  2. Click CTL+N to start a new entry
  3. Write it and click the Publish button
  4. Invariably change some wording and click the Publish button.
  5. Optionally do a little dance at how friggin easy this is

Maybe - just maybe - it takes a minute of time outside of actual writing, and a pretty brainless minute at that. Just click a couple pretty buttons. Heck I can do that in my sleep! (maybe I am doing it in my sleep...)

Getting Ecto set up with Drupal takes a little work initially, but once it's set, it's absolutely beautiful. Tutorials will likely come later, but I want to entice the reader with several more sexy bullet points to get you interested:

  • I use it to log ideas for blog posts. I just create a new entry with a couple word abstract, and then some late evening like this I'll flesh it out and post it.
  • You can filter out entries by word or tag.
  • It integrates with Drupal TAXONOMY! How bad ass is that?
  • It registers your input filters, and you can set a default (a beautiful method for getting around Drupal's single default input filter)
  • You can switch between wysiwyg and html
  • Add your own buttons to wrap particular code around
  • You can even edit other content types, not just blog entries (ideal for quick grammar corrections)
  • Spell check as you go (unlike Dreamweaver)
  • Image integration! Flickr integration! Twitter integration!
  • Schedule blog posts without extra Drupal modules
  • Manage multiple blogs in one place!

There are a few gotchas and quirks, but they're not bad considering the boons. This will be my sixth post from Ecto, so I may bump into a few more as I go, but so far, this is absolutely fantastic.

Ecto rocks my world!

Quirks:

  • Input format is hidden in HTML view, in the lower right hand corner. I attribute divine guidance in finding it
  • There's no 'clear formatting' button. Almost makes me miss TinyMCE
  • Oooh, icky <font style..> cruft when you try to stack formatting options

Update

Just discovered a novel use for Ecto and Drupal. In Drupal, if you decide to change the length of your teasers, you have to re-submit all your nodes to get the new length. With Ecto, you just select all your posts and click the 'publish' button, and *poof*, done.

Apr 6, 2009

Today I'm reviewing several screen-sharing apps to conduct some remote usability testing. These particular tests have some interesting constraints:

  • My subjects are parent-volunteered kids, 8-16 years old and all in the same family
  • I'm on a mac, they're on PCs
  • Tests should be about 45 minutes long
  • If possible, I should be able to take over the screen to type in URLs

I tested on the following hardware

  • Presenter: Windows XP with 1920 x 1200 resolution
  • Client: Macbook pro running Leopard

Yuuguu

Pretty good, but not quite good enough for usability testing.

  • Free
  • Marginal refresh rate (I foresee missing some important clicks and mouse wandering)
  • Requires registration of host and client for optimal use
  • Very easy transfer of control to attendee
  • Nicely integrated chat notifications (for passing URLs, for example)

TeamViewer

Pretty much pure awesomeness after looking at all the other apps.

  • Not so free (free for evaluation, $39/mo or around $650 for full license)
  • Awesomely spectacular refresh rate
  • Transfer of screen control is more difficult than with Yuuguu, but not bad
  • Presenter can run a small executable without having to install anything
  • No account is needed on either side, however the presenter has to type in a 9-digit code plus 4-digit password to connect.

Mikogo

Very simple interface, but didn't quite cut the mustard. The Mac version has a permanently disabled 'preferences' menu item, indicating it's probably in beta whether they say so or not.

  • Free
  • Uber-simple interface
  • Extremely crappy refreshing, probably totally unusable for a usability test
  • Registration needed by host, but not client

ShowMyPC

Not too bad, except for that refresh rate. Darn you, TeamViewer, you've spoiled me!

  • Free
  • Surprisingly works for a mac
  • No installation required
  • No accounts required, just pass a (long) code (and don't forget to type the dash)
  • Fairly dismal refresh rate
  • Rather obscure interface (screen sharing button is a black box in a gray box in a another gray box)

Bosco's Screen Share

I *maybe* should have been wary of the playful doggy-centric identity, but I gave it a go anyway. Apparently you have to configure your router and firewall to get it to work. I don't think I'm going to start a usability test with a router configuration. No sir.

Persony

Pretty cool stuff, especially the 3D conference room motif </toungeincheek>.

  • Free for 1-to-1 meetings
  • Web-based, you just need to pass a code. You might need to install some Java though, which could really hang things up in a usability test.
  • Absolutely the worst refresh rate of all the apps
  • Setting permissions for different attendees is pretty nifty
  • Lots of features, like voice and webcam sharing
  • Did I mention the horrible refresh rate?

Conclusions

I guess we'll be using TeamAssist tomorrow on an evaluation basis. The other apps just don't compare in terms of refresh rate.

Sources

http://webtoolsandtips.com/freeware/screen-sharing-remote-access-web-tools/ - Good leads on several apps
http://www.masternewmedia.org/screen-share-top-25-best-screen-sharing-tools/ - Good list, not entirely accurate

Apr 6, 2009

Below is a live list of Drupal usability resources and issues I want to work on. Right now, it's just links, but I'd like to put together some help for people just getting started with tackling usability issues. There's a lot of really great initiatives right now, and some good improvements to the Drupal issue queue workflow, but it's a little overwhelming, even for the veterans. I would assume there are two main audiences to address: 1) Those who want to learn more about what's going on, and 2) Those who want to get down to business (designers, coders and communicators).

Drupal.org pages

User Experience (in Community Initiatives section, some organization of a few patches)
User interface best practices (great list of links to explore)
Helping with Usability (in Contribute section)
Improve usability (in Getting Involved section)  

Issues:
Issues tagged 'usability'
Issues tagged 'needs usability review'
Issues tagged 'killer end-user features'

External resources

Usability group on groups.drupal.org
www.drupalusability.org - Issues discovered during the 2009 UofB usability testing
www.d7ux.org - What's going on with the Drupal 7 redesign by Mark and Leisa

Issues I want to read

Vertical tabs - This issue will nullify several other issues if it goes through, so I'd like to see if I can link up the discussions a bit. The 'promoted' is one issue I've been working on that applies.