Blog

    Happenings and acts of geekery.

Presentation: Moving from Verity to Solr

I gave a talk at last night's Philly CFUG meeting on making the migration from Verity to Solr in ColdFusion 9. Adobe has made it known that CF9 is the last release of ColdFusion to contain Verity and that Solr is the way forward.

I'm glad that's the case! Solr is amazingly powerful, fast and extensible. What has been exposed in CF9 barely scratches the surface of what it can do. That's not a bad thing - the Adobe team should be commended for making the transition as simple as possible by using the same tags, attributes and data structures. You'll find (as I did) that the migration is relatively straightforward provided your codebase isn't a real mess. 90% of the effort will go in to adjusting any code that builds formatted search criteria in Verity-specific terms into something that's Solr-compatible. Collection maintenance is left essentially untouched.

If you'd like, you can grab the slide deck and simple examples - with one disclaimer: the code is for example purposes only and should not be held up as an example of ideal coding practices :-). Special thanks to Ray Camden and Scott Stroz for their blog posts on Solr - their work was great background for this talk. Also - thanks to Adam Tuttle and the Philly CFUG for inviting me to speak!

Mobile Apps for Alumni Engagement Presentation

On Tuesday my colleague Chad Davis and I had the wonderful opportunity to present at the CASE District 2 meeting on the topic of "Your Alumni are Moving onto the Mobile Web. Are You? : Mobile Apps for Alumni Engagement." Chad is an Associate Director in the Lehigh Fund at Lehigh University, responsible for the annual giving efforts of Lehigh's 15 youngest classes, a demographic that is increasingly difficult to maintain contact with through traditional means. Embracing mobile technology appears to us to be an ideal means for connecting with this demographic, so there was plenty for us to collaborate on for this talk.

The session description:

In this session we will boldly go where email, Facebook, Twitter, the alumni website and an online community simply can't: directly into the pockets of alumni.

Mobile devices and near-ubiquitous internet access have made immediate information access not only possible but widespread. A well-designed mobile application will open up new opportunities for alumni to connect with both the institution and each other regardless of where they are at the time -- including solutions for special events and targeted micro-campaigns. We'll talk about the strategic use of the "small screen", location-based services and ideas for their use (home and away venues), and tools for building and supporting these applications.

Chad's case study on the Lehigh/Lafayette Challenge was especially well received. That campaign integrated print, email, Facebook, Twitter (a TON of Twitter) and (most interestingly) "text-to-give" functionality. The results were off the charts (over $14k fundraised in a week, a bunch of first-time donors, amazing buzz) that completely contradicts the thesis of the author of this CASE Currents article (login required) that mobile giving isn't a good fit. Lehigh proved it a success through a consistent, well-messaged, and extremely cost-effective effort.

To those of you who were in attendance, we thank you for choosing our session! We were especially happy to introduce some of you to Angry Birds and sorry for the sleep that you're likely to lose in the coming weeks.

Key takeaways from our talk:

Do not just repurpose what you have

You will not get the installation, utilization and feedback that you expect if all you do is pump RSS into a mobile skin. Make it faster and easier for your alumni to interact with the institution and you'll reap dividends for a very long time.

Everything should prompt an action

An engaging application is one that does things. Your app must be functional in order to be useful and as we discussed, only the truly useful apps find a home on the first screen of your moblie phone. If you're not there, you might as well not exist.

"Mobile app in a box" is a lousy shortcut

Several vendors are offering a single "mobile app in a box" solution that is practically useless when held up against an "actionable" standard. I see the attraction - "yes, we're now mobile!" - but the app won't get reuse beyond the intial installation if it doesn't do things that benfit the user. Reading campus news and looking at an event calendar is not substantive engagement - you're wasting your precious resources going down this road.

Segment and target aggressively

A single campus-wide mobile application will contain too much irrelevant content for too many people. Alumni don't care about campus bus schedules (unless they're on campus for reunion), students don't particularly care about regional club activity, faculty don't care about which alumni recently got married and so on. Build niche, targeted, relevant, useful and functional apps and you'll find happy users.

Mobile Web is the way to go

While performance isn't the best, getting something out there that works and can be iterated on quickly is key. Mobile web apps give you that because they can be built using the same skillset that your current web development staff have. Pure native apps bring with them a host of issues including app store approval, the need for completely different development skills for each platform and the cost that inevitably follows. "Near-native" using PhoneGap, Appcelearator, Sencha and others are coming along strong to bridge the gap.

Your campus (and alumni experience) is unique

Every campus is special because the relationship is personal. When I meet with universities to talk about projects, we talk about "emotional resonance" and finding ways to tap in to that to meet institutional objectives. Your mobile presence, whatver it is, should be deeper, more meaninful, more representative of what your institution is all about than just some colors and branding. Do something novel and the alumni will find their way to it. Who doesn't want to be proud of their alma mater for being innovative and inspiring? Seek that out.

Links and our slide deck

Our slide deck (which is fun, but not nearly as fun as the narration that goes along with it): Mobile Apps for Alumni Engagment (pptx) | Mobile Apps for Alumni Engagment (pdf)

Links to mobile/social/mashup services that were mentioned in our talk:

Thank you again to those who attended and to those who subsequently review the content of the presentation. I'll be more than happy to do a webinar for any school who is interested in thinking through the mobile app landscape and visit onsite once my leg is no longer broken!

Chad and I are happy to answer any other questions you have and help you find your way as you begin to evaluate mobile application opportunities.



CASE Mobile: Our first jQuery Mobile + ColdFusion app

Our first mobile application built with jQuery mobile went "live" today at the annual CASE/NAIS conference in Chicago, IL and by early accounts it's a success!

The purpose of the app is to make relevant conference information available to attendees at all CASE events year-round. Conference attendees will particularly enjoy the ability to submit their session evaluations from their mobile devices right away without having to handle the traditional paper forms. Session information is available as is a venue map. Conference organizers can also send out "alerts" that pop up within the app itself, notifying attendees of upcoming sessions, room changes or other important information. The "app" works on all Apple iOS, Android and Blackberry (OS6 preferred) devices and semi-gracefully degrades for use on older devices -- all with no additional development effort thanks to jQuery mobile.




Built on a tried-and-true combination of Adobe ColdFusion, Mach-ii framework, ColdSpring framework and SQL Server for backend data storage, the app is expected to serve tens of thousands of unique users every year. Taking on jQuery Mobile as our front-end framework was not without some risk; it's still in alpha (we used Alpha 2) but the rapid development and cross-device capabilities of the framework far outweighed the immediate concerns. We'll be keeping a close eye on this and upgrade as new releases are made. Testing was done on a Motorola Droid 2, Blackberry Torch, an iPad and an (ancient!) iPhone 3G without issue.

Want to talk about how we might be able to help you implement a cross-platform mobile application? Email Steve at srittler@countermarch.com.

Client Feedback

It's always nice to get a note like this from a client:

Struggling to find the words to describe how absolutely AWESOME this is! You ended up designing something 10x better than I could've imagined.

Thanks, Mura CMS, for making it so easy for me to make my client so happy. I was able to put my time towards meeting their needs instead of implementing a CMS to drive it. This reminds me I'm way behind on blogging about the 5 sites we have up and running on this outstanding open source, ColdFusion-powered CMS.

How Adobe MAX 2010 was like the 1939 World's Fair

In 1935, in the depths of the Great Depression, several men took it upon themselves to create an event to "change the conversation" from one of uncertainty and insecurity to one of optimism and wonder. New York needed a shot in the arm and they thought a major event would draw both immediate stimulus and long term benefit to the region. Four years later the New York World's Fair opened with the slogan "Dawn of a New Day."

"The eyes of the Fair are on the future – not in the sense of peering toward the unknown nor attempting to foretell the events of tomorrow and the shape of things to come, but in the sense of presenting a new and clearer view of today in preparation for tomorrow; a view of the forces and ideas that prevail as well as the machines. To its visitors the Fair will say: "Here are the materials, ideas, and forces at work in our world. These are the tools with which the World of Tomorrow must be made. They are all interesting and much effort has been expended to lay them before you in an interesting way. Familiarity with today is the best preparation for the future.'" - 1939 New York World's Fair pamphlet

This year's Adobe MAX, while nowhere near as large in scope, was an awesome parallel to 1939 New York. The global economy isn't anything special. Innovation continues unabated. Piles of money are sitting idle waiting for the right reason to get back in the game. Adobe's people worked hard to put forward a vision for where these trends will go and how we will be able to take advantage of them, just like the guys from New York did with the World's Fair.

We came to Los Angeles for the opportunity to hear about the "materials, ideas and forces at work in our world" and learn more about the "tools with which the World of Tomorrow must be made".

What we saw did not in any way disappoint.

Mobility and immobility to the forefront.

Since MAX 2009, the diversity of web-enabled devices has shifted dramatically. Last year was all about iOS and various masked/unreleased mobile devices. This year was about mobile on more pieces of hardware than you could carry home, tablets of varying lineage, and surprisingly, television. This happened practically overnight - the iPad hadn't even been released this time last year, let alone the soon-to-be-released competitors. Nobody was talking television (that we heard, anyway).

We are now designing and building software in a world driven by the complimentary yet wildly different states of mobility and immobility simultaneously. The mobile vision that Macromedia pushed in the early 2000s we once laughed about has now become reality. Our televisions, instead of being "consume-only" devices, are poised to finally and seamlessly become a part of the online world. We as designers and developers, visionaries and builders, are now facing the challenge of targeting both the really-really-small screen and the big screen with our content *and* on more hardware platforms than ever before.

Did anyone really see this coming? In the US, carriers had a stranglehold on the mobile device market until Apple and Google broke it up with a combination of compelling hardware, attractive features and the savvy application of piles of R&D money. A similar situation exists in the cable television world: the cable companies have a lock on the pipe and an uneasy (yet long established) relationship with the content people that is now being rapidly eroded by the success of Hulu and similar services. The Google TV, Boxee Box, Roku and Apple TV devices mercifully save us from the awful UX of the dreaded cable box while adding a pile of new internet-enabled two-way capabilities. These disruptions to the mobile and television spaces open up opportunities on globally accessible, established platforms with wildly differing standards, sizes and capabilities.

We need tools that help us do this efficiently. At last week's MAX, Adobe delivered strongly with compilers and tools for mobile and television based on technologies we as designers and developers already know. We who came to Los Angeles are coming home with the knowledge that we can now build apps for more devices than ever before using the tools we're already skilled with.

Developers will still use AIR, Flash, Flex, ColdFusion and Dreamweaver. Designers will still use Illustrator, Photoshop and Catalyst. We dream, we draw, we build, we test, we release and it all just magically works. Try that with anything other than what Adobe is offering. There's no way it is as easy, as rich or as accommodating. The most important take-away from MAX this year is that evolutionary changes in Adobe's tools are enabling us to keep ahead of revolutionary changes in the way information and entertainment are shared with the world. That should be reassuring (and exciting) news to all of us who use Adobe's tools.

One other fascinating historical parallel to the 1939 World's Fair:

NBC used the event to inaugurate regularly scheduled television broadcasts in New York City over their station W2XBS (now WNBC). An estimated 1,000 people viewed the Roosevelt telecast from about 200 television sets scattered throughout the New York area.

It's about time the internet turned into a "lean back" experience ala TV. We saw the future this week and it's both stunning and immediately available for us to create.

And one more thing...

Anyone who still dismisses Adobe as a strictly PDF or Flash company doesn't have a clue what they're talking about. Adobe is first and foremost a tools company. Their "bet" is on designers being able to accurately get the vision in their heads to the real world more efficiently, not on locking every designer in to a Photoshop license. The "bet" is on developers being able to deliver their applications to more screens as efficiently as possible, not forcing them to target one specific runtime or operating system. Adobe's very existence depends on shipping tools that meet the needs of those two groups - be they for print, HTML-based web applications or Flash-based web applications. "Targeting" HTML5 is nothing more than a continuation of trends that we've seen over and over with Allaire/Macromedia/Adobe: something new emerges (electronic publishing, the web, animation, browser wars, multimedia, new platforms) and Adobe responds by offering tools to help us bring that stuff to the masses. We're not married to Adobe - we're in a long term relationship with a company committed to the community that supports it. That's the way it ought to be - and their responsiveness to emerging technologies (not threats!) is one of our best assets.

I loved this year's MAX. I left exhausted and inspired to do way, way more on devices I had never expected to touch. That's one very effective conference, and one I plan on attending again next year.

Go. Create. And until next year's MAX, go to your local user group. They'll be talking about this stuff all year long!

Take a day off for RIA Unleashed

Pull out your credit card. Yes, yours. This conference is for you. It's only $75! If you don't think spending $75 will make you at least $75 more effective the following week, you're severely undervaluing yourself (so is your employer for that matter).

As for your employer: forget 'em. Take the day off. You'll be so energized and refreshed by the simply amazing content it'll feel like a vacation day anyway. Out of them? Call in sick (I'll vouch for you...just cough a little). Hold your employer accountable for their mission statement of "investing in our employees" and being an "innovative" place to work. That's right...they all say it...make 'em mean it.

Compared to MAX or CFUNITED (r.i.p.) this is an amazingly great value for the money. It's close to home. Yes, even if you're in DC or Philly it's close to home. Anywhere you can get to via Amtrak or in a car within a day is close to home. Regional events need our support too ~ consider this a call to stand up and count yourself among the growing world of CF developers who aren't just 'one trick ponies.'

Content: ColdFusion, Flex, Flash, AIR, Mobile. Plus all the related good stuff presented by people who make you feel smarter just by being in their presence. Just look at this speaker list! You (yes, you) need to be there.

It's a day of training (two if you do the workshops) for far less than a weekend at the beach. Training that will put you that much closer to having your own beach house. Or mountain house. Or Swiss chalet. Whatever floats your boat. Even if that's a boat.

School's back in session. Get to class. See you there!

Pour a little out for CFUNITED

Commingled with the fun and excitement of attending this year's CFUNITED conference was an acknowledged sadness associated with knowing it was to be the last. We've grown accustomed to seeing each other once a year (for some not often enough, for others...just the right amount) and the loss of an opportunity to reconnect is a moment we should recognize and appreciate.

Many of us can say a lot of the same things about CFUNITED: we've seen great and not-so-great presentations, enjoyed great and not-so-great food, partied into the wee hours racking up bar tabs that were impressive or simply outrageous, and met the people that we call our community. Or more accurately: our friends.

A community without a place to commune isn't complete, and simply doing it on the internet isn't enough. Michael Smith and the TeraTech/Stellr team identified the need for a physical place for our rabid online community to gather outside of DevCon/MAX and user group meetings. The creation of CFUN and subsequent evolution (and growth) into CFUNITED gave us just that place. CFUNITED became one of those few gatherings that was both technically *and* socially valuable to the full spectrum of ColdFusion developers. CFUNITED also helped other members of the community identify the things they wanted in a conference, implicitly leading to the creation of cf.Objective to cater to the advanced CF crowd with many others to follow suit in their own way. All of these things added credibility and value to our community as a whole.

It is for those reasons CFUNITED will always represent a special place and time for us all. This conference turned newbies into real developers, the fortuitous hallway/bar conversations turned intermediate developers into professionals, and creative topic selections turned quiet cube monkeys into amazing speakers and teachers. Simply being together made us all feel a little less weird for being so enthusiastic about what ColdFusion enables us to do.

So as we move ahead without another CFUNITED on the calendar, I hope we all remember that the community is more important than any one event, that none of these things that we appreciate would be here without our continued passion and participation, and that it's important for us to support the things we have and the things to come. Doug Boude said it best: "now that one of the larger trees in the forest has sadly fallen, the vacancy it leaves us with is the opportunity and catalyst to allow for the currently smaller, more focused, and/or regional conferences to flourish and fill this niche."

NCDevCon, BFusion/BFlex, cf.Objective, RIA Unleashed, D2WC, and tons of user group meetings (online and in person) happen every single year. MAX will always be there with the extremely promising CF Unconference component. Out of the collective will of the ColdFusion community new events will emerge, and as they do we'll find our new normal. We've inherited a great gift: a passionate community and proof that there is significant interest in conferences at all skill levels.

This is a fond farewell and thank you to CFUNITED for what its creation and ending have done for our community. Thank you, everyone, who ever attended and made my CFUNITED experience better as both an attendee and speaker. I look forward to the day we're all in the same place again.

Mach-II is (still) awesome

Mach-II rocks. It is one of the more "mature" surviving ColdFusion application frameworks, and as such doesn't get nearly the amount of buzz that the new (interesting, different, creative, awesome-in-their-own-way) frameworks get. If you're looking at frameworks, I encourage you to take a look at the amazingly capable Mach-II - we've had fantastic success with it!

Things I really, really like about Mach-II:

Backwards compatibility

Take an old (Mach-II 1.1 app, circa 2006) and update the framework to 1.8 (released 2009). Replace the application.cfm file with application.cfc, comment out everything in index.cfm and *boom*...you're done. I can't really assess how challenging it is for the team to maintain backwards compatibility, but I sure do appreciate how simple it is to upgrade. Instant feature add with zero headaches.

Coldspring integration

<include file="./mach-ii_coldspringProperty.xml" />

and in your listeners:

<cfcomponent name="mpListener" extends="MachII.framework.Listener"

depends="howConfigManager,mpManager,reportManager,notificationManager">

I don't think it gets much easier than that. Instant Coldspring integration for dependency injection (and more), radically simplifying the configuration of all of my listener and model cfcs. Now we've got all the power of Coldspring cleanly available to our Mach-II application.

Faster Fixes

Knowing where to find things is one of the hallmarks of any good framework. Some do it by convention, some by configuration. Mach-II falls into the latter camp but that's perfectly fine by me. Getting back into the mental model of an application months (or years) after deployment is a challenge but by simply cracking open mach-ii.xml I can see what happens where within seconds and bend it to my will. I love this.

Modularity

This wasn't in the framework back in the 1.0 and 1.1 days (when we created some mammoth apps), but by 1.5 (which came out in 2008) the ability to break up large Mach-II applications into separate modules was baked in and oh-so-handy. It's two years later and we've been able to make the easy changes to break those older apps into a collection of modularized sub-apps for much easier maintenance. Perfect example is an extranet: lots of only slightly related apps put under one common umbrella sharing security or UI components. This is easy to implement and support in a well-designed Mach-II application. All of our more recent apps make use of this feature.

The Team

The people who created and have since improved and evolved Mach-II are some of the smartest folks who are or have been involved in the ColdFusion community. Look at this list. Not only have they created something awesome, but they're incredibly responsive on the wiki, development Google group, and framework users Google group. They use this framework at their day jobs so you know that each release has been painstakingly designed, implemented, tested, re-tested, piloted and then released. Plus, they're open to new ideas (even if you personally have no idea how to make them happen!). Code is great, but the people are the best.

The View Loader

This is where some of those "convention-based" concepts have crept in to Mach-II much to the benefit of the users. Back in the "bad old days" your mach-ii.xml file would contain a block that looked sorta like this, except far longer:

<page-views>
      <page-view name="showWelcome"       page="views/showWelcome.cfm" />
      <page-view name="showHome"       page="views/home.cfm" />
      <page-view name="baseTemplate"       page="views/baseTemplate2010.cfm" />
      <page-view name="blankTemplate"    page="views/blankTemplate.cfm" />
      <page-view name="welcomeLanding"    page="views/welcome_landing.cfm" />
      <page-view name="showSendPassword"    page="views/showSendPassword.cfm" />
      <page-view name="showAppHelp"       page="views/showAppHelp.cfm" />
   (and so on)

Each page would have a page-view defined. Someone called shenanigans on it and now we have the PatternViewLoader to replace ALL of it!

<page-views>
   <!-- This would load all views with the pattern of "/views/**/*.cfm" which is the most basic and common pattern -->
<view-loader type="MachII.framework.viewLoaders.PatternViewLoader" />
</page-views>

So, so simple. Love this line of the config file more than any other.

Better apps, faster.

Take Mach-II off the shelf and use it as your "glue." Add Coldspring to manage your model. Use ColdFusion 9's new Hibernate ORM capabilities to cut the lines of code in your model by a huge factor. Redirect some of the saved time into building a better UI using jQuery, improving your cross-browser capabilities with clean CSS and making your client happier by communicating more frequently. Result: a better app, designed to be maintainable and much more in line with your client's spoken and unspoken expectations. How could any craftsman not feel good about that? Mach-II is a key component to that successful formula for us.

Try Mach-II. Need help? Talk to the team on the list. Build great things.

On conferences and venturing outside

Two years ago I blogged about having attended a conference completely outside the 'geek crowd' and how much of an eye-opening experience it was. Since then, not only have the marketers' forecasts become reality (Twitter going big and them taking advantage of it) but I've also been fortunate to attend Higher Ed Camp Philly.

Higher Ed Philly was a great experience. I was really surprised at the great blend of technical folks and educators (from both public schools and universities) in attendance. The effect this had on the sessions was tremendous and has completely changed what I want to get out of attending a conference. In short, it was nothing like what I expected...it was way better!

From the perspective of a tech person who generally attends tech conferences, the interaction among the attendees was totally different. Instead of constant hardcore technical discussion, there was a balance of talk about tools and practical application. The educators' minds worked quite differently from ours but in a really valuable, interesting way. I found myself wanting to attend more of the educator-focused sessions simply to further understand their way of looking at the things we create as the starting point for their work to take off.

Consider this: we create, sometimes in a vacuum, but always with limited feedback. The educator must somehow translate the practical utility of whatever it is we created into something that the average human can understand and then apply to their own want or need. Their entire job is to act as our forgotten intermediary; a good number of them spend most of their time trying to keep other teachers up to speed on what's possible. Their (presumptive) reason for attending was to get a head start on that process.

Every session I attended included elements of show and tell, the educators talking about what they see as useful, and the techies trying to offer suggestions on the spot. We live to solve problems, and the challenges put forward by our fellow attendees were some of the most creative, interesting ones I got to think about all week. I think that's awesome and should stand as a strong message to all of us that we have to get out of our niche and spend more conference (unguarded, relaxed, non-work) time in a similarly blended community.

I bet we could have taught some of those teachers and instructional technology people at Higher Ed Philly a couple lines of CFML and made them dangerously powerful. I bet they could teach us a few things about how to understand methods of learning and made us dangerously effective communicators and trainers. Together we were kicking around ideas that wouldn't have naturally evolved from either camp alone and improved ourselves in ways we never expected.

...

Later today, the final CFUNITED conference will get underway. I'll miss it for all of the reasons that the attendees from any year share. But in retrospect, and through the lens of this new outlook on conference participation, I realize that the best learning I ever did there was from the informal chatter of people talking about their challenges, their daily realities, in a group of people we'd all like to consider colleagues. We talk about problems that are technical (solvable) and political (not always). We bring differing skills but a common understanding of CFML to the table and have a great time learning from one another.

CFUNITED has served us well as the table around which we gather, but tables also make us focus inward. In its absence next year, I hope to see the regional events (like CF.Objective, RIA Unleashed, NCDevCon and BFlex/BFusion to name a few) continue their excellent growth right alongside unconferences and meetups that blend our technical proficiency with people from other disciplines in the same space. We can't lock ourselves up in our own tech-specific shows all the time and expect to grow our community and grow our skills in a career-savvy way. The ColdFusion community, while awesome, will need to look outside the realm of those who work with competing technologies and instead turn towards people with complementary skills and interests to evangelize CFML as a platform.

Use the end of CFUNITED as a reason to expand your participation in new directions. Show off what your CF skills can do while scratching someone else's itch. And once you've done it, come back and share with everyone else. It's a big world, and we're all students of everyone else.

See you in Virginia!

Mobile Apps for Alumni Relations - Cornell Compass

We recently had the privilege of working with Andrew Gossen in Cornell's office of Alumni Affairs on a sweet little mobile project.

The Cornell Compass web application uses geolocation features exposed through mobile browsers to determine the distance and bearing from where you're standing to the center of Cornell's campus. It's fun! It would be way more fun if the orientation of the device was exposed as well (then we could make the compass dynamically spin in real time).

Once your location is determined you have the opportunity to "Check In" and drop a marker on a map with your name and class year (both optional). The map is visible both on the mobile device and via the website (we do some browser sniffing so the content is device-appropriate). All visitors are encouraged to share the link to the site via Facebook and Twitter.

The Compass app is optimized for iPhone, but is functional on both Blackberry and Android devices as well. The backend (which is trivially simple) is ColdFusion with Microsoft SQL Server. The bulk of the front end work was done using jQuery and a few assistive javascript libraries for doing the bearing calculations.

We're working with Cornell to design the next version of this application with more features that make it useful to Cornellians all over the world looking to deepen their relationships with each other. Interested in learning more? Please drop me an email! We're interested in working with other organizations to enhance the usefulness of the app including integration with alumni online communities and CRM systems.

More Entries

About the blog