enterprise 2.0 the bdg way

Since 2002, you've known us as the Plumtree experts. Now we'd like to introduce you to Enterprise 2.0, the bdg way. If you'd like to know how to integrate blogs, tagging, wikis or social software into your IT infrastructure, you've come to the right place. If you're looking for Plumtree development, consulting or training, you've still come to the right place. But the consumer world is moving beyond portals. Worried that your enterprise software won't keep up? We can help, the bdg way.

Friday, June 26, 2009

ODTUG S672: ACED Sundown Session -- Middleware and SOA

ODTUG S672: ACED Sundown Session -- Middleware and SOA from Chris Bucchere on Vimeo.

ODTUG S680: Top Ten Tips for Java Developers on Oracle WebLogic Server

I just returned from the fabulous ODTUG (Oracle Developer Tools User Group) Kaleidoscope conference in Monterey, CA. I had the pleasure of giving two solo presentations and sitting on one panel.

I recorded both presentations and the panel. Here is the first full recording for your edutainment pleasure.

ODTUG S680: Top Ten Tips for Java Developers on Oracle WebLogic Server from Chris Bucchere on Vimeo.

Stay tuned for two more new videos which will be posted very soon.

Tuesday, April 07, 2009

Chris Bucchere Can Haz Professional Speakerness

So, rumor has it that I'm now a professional public speaker. Sch-weet! How did that happen, you might ask? Or maybe you're thinking, if Bucchere can haz professional public speaker-a-bility, how can I haz professional speaker-hood too?

Well, it's actually easier than you think. Here is a simple, five-step guide so that you too can haz professional public speakerness:

1) Speak (a lot) -- this is really crucial. You need to have a good track record of presentations, lectures, etc. Hopefully you have a nice collection of audio and video clips too. If not, well, then start volunteering to speak at different events in your area of expertise to help build your speaker cred. And bring a friend with a handy-cam.

2) Find a photo you like of yourself. This is not 100% necessary, but it might be nice if your "speaker page" (look ahead at Step 3) has a photo of you on it. If you can't speak well, at least maybe you can haz good looks. Purrrrrrrr.

3) Hire a great designer (like Paula Bee) to give you good looks, even if you don't have them naturally or via surgical enhancement. Your speaker page should be your home on the web for all your past and upcoming public speaking engagements along with links to your other achievements, e.g. books you've published, companies you've started, podcasts, blog posts, web sites, awards, testimonials, etc. Let your ego guide you to the highest form of self-aggrandizing and narcissistic speaker web page Valhalla. w00t! (Oh, BTW, if you haven't done any of those things, maybe you're not actually cut out for professional public speaker-dom just yet.)

4) Ask for money. No one is going to pay you to speak unless you ask them. How much? Well, that depends on who's asking, how much of your career you want this to be (e.g. are you a full time professional speaker or a full time software developer with a speaking habit/hobby), and how much you think your words of wisdom are actually worth. Start small and grow your rates as you continue to build your speaker cred. Oh, and negotiate a bit, please. A certain person recently asked for $40,000 + two first-class airline tickets, hotel and meals. He ended up getting $20,000 and flying SLF-style, by his damn self. (For you those of you who haven't heard of that great TLA, SLF stands for "Self Loading Freight," which is the most succinct and accurate description of coach-class airline travel that I've ever heard.)

5) Ask for feedback. Just so that you don't think my ego has inflated itself beyond all sense of reason and responsibility, I do want to let you know that I take feedback very seriously. Nearly every event at which I've spoken has had some formal or informal feedback process. And if not, there's always Twitter. Why bother telling me you didn't like my talk when you can tell the whole fucking world, right? Seriously, carefully consider and respond to each bit of feedback -- positive, negative and all points in between -- and consistently use feedback to make each talk better than the last. Brad King had a great tip on responding to feedback: use humor. If someone calls you a douchebag, respond by saying, "Thanks for your feedback! Since we don't know one another well, can I ask that you please refer to me as Mr. Douchebag from now on?" You might get surprisingly good results -- often a line like this can convert a hater to a fan.

If you keep that up, before you know it, you'll be a coveted and highly compensated professional public speaker. However, it's not all fun and games. Please be prepared to really "Bring It/Kill It" when you speak. Repeat business is super important and no one's gonna pay for your speaking services again or recommend you to anyone if you give a dull and lackluster performance. As Dubya so eloquently put it: "Can haz fooled me once? Shame on you. Can haz fooled me twice? Well, um, you can't fool me twice 'cause I can haz Presidency or some shit." Oh, STFU George. (And while I'm on the subject of politics, who anointed Karl Rove as a Fox News commentator? Haven't we all had enough of his piss-all-over-the-constituion horseshit?)

Saturday, March 14, 2009

My SXSW Panel: Social Networks for the Anti-Social

See me speak at SXSW 2009 (http://sxsw.com)UPDATE: SXSW released a complete audio recording of this panel!

I'm at SXSW again this year. I attended SXSWi last year and, if my memory serves me correctly, I also attended SXSW Music in 1995, though I might be confusing it with H.O.R.D.E., Austin City Limits or one of the other great music festivals in this fine city which is known internationally for its eclectic music scene. Anyway, because The Social Collective is powering my.SXSW, I actually have the pleasure of spending 10 full days in Austin and attending all three festivals this year: Film, Music and Interactive. I'm also speaking, oddly enough, in a Music Panel called Social Networks for the Anti-Social. I have to warn you, most panels (at any conference, not just SXSW) totally suck and this may not be an exception. But who knows, it might be a completely magical and transcendental experience, but you won't know unless you check it out.

Tuesday, February 10, 2009

You Are What You Eat

I've never really understood the phrase, "You are what you eat." If it were true, I'd probably be an In-N-Out burger (double double animal style) or something far worse for you and/or better tasting.

Recently, I overheard someone on Twitter saying something to the effect of: "You are the sum of the five people you hang out with the most." My immediate reaction was to disagree vehemently. I'm totally not like that! I'm exactly who I want to be! I don't subject myself to the influence of others like that! Etc.

Not only am I completely wrong about this, but it may be that -- in some strange cosmic way -- I'm actually the sum of ALL the people around me, good, bad and everything else under the sun.

Today I discovered TwitterSheep. (No, this has nothing to do with sheep, fraternity rituals or anything else of a sexual nature, I assure you.) TwitterSheep simply looks at your followers and constructs a tag cloud based on keywords in their bios. That's not really remarkable, but what is remarkable is that when I ran my Twitter account through the application, the resulting tag cloud literally read like my own bio. Seriously. It's a visual representation of terms that -- when you sum them all together -- equal me. The largest words are what I do and care about most.

Am I right about this? Are you the sum of your followers? Try TwitterSheep and let me know how it worked for you!

Monday, February 02, 2009

my.SXSW Launches on The Social Collective

We're rolling out a huge conference site today called my.SXSW for the legendary film, music and interactive festival SXSW!

We certainly haven't done a scientific study about this, but using "thumb in the air" math, I would venture to guess that this is the largest conference ever to roll out a white-label social networking platform. We're very pleased they they chose The Social Collective.

You can read the full story on Collectively Speaking, The Social Collective blog.

Sunday, January 25, 2009

There's No Such Thing as a Free Lunch

Today Robert Scoble wrote a really interesting and thought-provoking article on his blog about the alleged suspension/removal of Joel Comm's Facebook account. He draws a parallel to the revocation of Robert's own Facebook account and makes a good case for Facebook being outta line.

Here's my response to Robert:

In defense of you, Joel and countless others who have been suspended or removed from Facebook, it certainly doesn’t seem like you’re being treated fairly. It’s hard to imagine that someone with 5,000 confirmed Facebook friends and ten times as many followers on Twitter could be considered a spambot. Generally speaking, online communities, wikis, social networks, etc. have a way of policing themselves; content that other people enjoy gets shared and promoted while spam and other “noise” gets blocked or ignored. Facebook and other social sites would all be best-served by this sort of grassroots self-policing, rather than a top-down approach.

However, there’s a subtle point to which some other readers have alluded in the comments. You wrote, “I don’t support companies that ‘erase’ MY data without my permission.” What you may not realize is that based on Facebook’s TOS, what you think are “your data” actually are not “your data,” not by a long shot, not once you’ve posted them on Facebook.

If you think there are safer or better places than Facebook to put “your data” on the internet, you’re also mistaken. Take a peek at Google’s TOS. In particular, read section 11, where you hand over all rights to “your” content to them (except basic copyright, which you automatically have any time you produce an original work and put your name on it). You’re basically giving Google a free license to use your content — even for their own commercial gain!

Everyone knows that there’s no such thing as a free lunch. In return for providing “free” distribution of “your” content, companies like Facebook, Google and the likes are creating massive databases of incredibly valuable “information capital.” This in turn allows them to offer you a “free” service while they sell this information capital — the stuff you gave them, remember? — to advertisers. That pays their bills, which in turn allows them to continue to give you “free” content distribution.

Average people (who upload videos of dogs on skateboards, etc. to Facebook) don’t care about data ownership and are perfectly happy to hand the rights to their content over to Facebook or Google it order to share it more easily with their friends. Average people — however — aren’t one man media outlets, either, but YOU are. So, being an internet/social media mogul, I’m sure you understand that content distribution isn’t free.

The solution? Host your content yourself! People like you and Joel have the resources to pay for your own hosting AND you have loyal audiences that will follow you wherever you go. You can leverage social media to help the viral spread of your content, but the obvious goal of your participation in social media and social networking should be to drive eyeballs/click-throughs back to YOUR site so people can view YOUR content, ensuring that YOUR advertisers get bang for their buck.

It really all boils down to two old sayings: there’s no such thing as a free lunch and you get what you pay for. Want to pay for your own hosting and distribution? Then you can own your own content. Want to get free distribution from Facebook or Google? Then be prepared to give them something in return.

Wednesday, January 14, 2009

How to Convince Your Company to Pay for a SXSWi Pass

Times are tough, right? Everyone is slashing spending, especially around travel and conference budgets. But you need (read: want) to be at SXSWi. So it's time to convince your boss that your attendance at SXSWi is something that the business needs to be successful.

Fortunately, if your company does or wants to do anything with the interwebs (and seriously, who doesn't these days?), this is easier than you thought. Just follow these five easy steps.

1. Look at the SXSWi speaker/panel lineup and pick ten panels that are relevant to your line of work. I'm a web 2.0 developer with more than a passing interest in social media, so this is easy. But the panels run the gamut of topics, so you should be able to find something that works for your business/industry. Here's an example: Building Personal and Company Brands with Web 2.0 Tools. Every company wants a stronger brand, right?

2. Copy the titles and abstracts into an e-mail to your boss and elaborate on how you'll benefit from them. More importantly, give specific reasons why what you learn will help you and your team, peers, etc. achieve 2009's business goals. To continue with our example, my company needs to grow our social media cred. The panel consists of Saul Colt, C.C. Chapman and Gary Vaynerchuk. According to their bios (on their web sites), Saul is "an accomplished marketing professional, with more than a decade of diverse high-level experience and a respected publisher" and C.C.'s company, The Advance Guard, "focuses on helping brands of all sizes smartly and strategically leverage emerging technologies for radical marketing programs." Gary doesn't really require an explanation, but if your boss has been living in a cave, then you might want to drop a few adjectives like "inspirational" and "passionate." Example: This panel will help me form an action plan on how to grow my company's social media cred, following the examples set by these three extraordinary social media mavens.

3. Outline the maximum line item costs for the event. The pass, the travel, the hotel and the food. If you really want to go, make your food budget less than $50/day, your hotel budget less than $100/day and cover the rest (if necessary) with your own cash. Don't provide a total, as it might overwhelm your boss at first brush. Besides, I'm sure he or she can add.

4. Plan a post-conference re-cap meeting. This is crucial! Set a date and make a list of team members who you will invite, including your boss. During this meeting, promise to share the highlights of what you learned at SXSWi and what you recommend that the business do differently. Explain how these revolutionary ideas will boldly move the company forward in ways they never could have imagined.

5. Split the difference. Remind your boss that the conference takes place Friday-Tuesday (March 13th to 17th). If you travel after work on Thursday or on Friday morning and return to work the following Wednesday, you're only missing three days of work AND you're donating your time to the company you love so much over the weekend.

There you have it, your "free" pass to SXSWi. Well, it's not exactly free. You have to deliver on all the promises you're making to your boss, especially if you want to go next year! Now if only it was this easy to justify the music festival. . . .

(Thanks to allisonb00, the inspiration for many things in my life, including this blog post.)

Tuesday, January 13, 2009

BIL Conference 2009 Selects The Social Collective to Provide Conference Social Network



(I-Newswire) - Long Beach, CA

The second annual BIL Conference, scheduled to take place on February 7th and 8th, 2009, announced today that they have selected Herndon, VA-based BDG's white-label conference social networking platform, The Social Collective, as their provider for conference registration and social networking services.

BIL is an ad-hoc conference for people changing the world in big ways. It’s a place for passionate people to come together to energize, brainstorm, and take action. Last year's BIL had over 300 attendees. This year, almost twice that have already signed up on the social network. Confirmed speakers include TED Prize winners Cameron Sinclair of Architecture for Humanity and Eric Rasmussen of InSTEDD.

Other proposed talks include Silona Bonewald's (founder of The League of Technical Voters) "Transparent Government Starting With The Federal Budget" and Ben Huh's (of I Can Has Cheezburger) "What's Funny About The Interwebs."

BIL's "unconference" format permits anyone to speak, so interested parties may sign up to give a talk.

The talks are then "favorited" to the main stage by peers, or remain in a breakout room if they don't receive enough favorites.

"We chose The Social Collective because it's a great way to herd smart people," said BIL Conference co-chair Todd Huffman. "In addition to posting new talks and adding talks to their favorites, people can create and join groups, engage in discussions, make a new network of friends and keep their new relationships alive post-conference. The format was a great fit for BIL, but I can see it working well at more structured events, too."

"We're really enjoying the experience of watching and participating in the growth of the online BIL community, powered by The Social Collective," said BDG chief and one of the The Social Collective developers, Chris Bucchere. "The BIL team has been a pleasure to work with and the community has been very supportive of our efforts. The outstanding content and people involved should make BIL one of the must-attend events of 2009."

For additional information or to register for free, visit the BIL Conference web site.

Sunday, October 26, 2008

Top Ten Tips for Writing Plumtree Crawlers that Actually Work

Just in time for Halloween, I've decided to publish my Top Ten Tips for Writing Plumtree Crawlers that Actually Work. This post may scare you a little bit, but hey, that's the spirit of Halloween, right?

[Editor's note: yes, we're still calling it Plumtree. Why? I did a Google search today and 771,000 hits came up for "plumtree" as opposed to around 300,000 for "aqualogic" and just over 400,000 for "webcenter." Ignoring the obvious -- that a short, simple name always wins over a technically convoluted one -- it just helps clarify what we're talking about. For example, if we say "WebCenter," no one knows whether we're talking about Oracle's drag-n-drop environment for creating JSR-168 portlets (WebCenter Suite) or Plumtree's Foundation/Portal (WebCenter Interaction). So, frankly, you can call it whatever you want, but we're still gonna call it Plumtree so that people will know WTF we're talking about.]

So, you want to write a Plumtree Crawler Web Service (CWS), eh? Here are ten tips that I learned the hard way (i.e. by NOT doing them):

1. Don't actually build a crawler
2. If you must, at least RTFM
3. Hierarchyze your content
4. Test first
5. When testing, use the Service Station 2.0 (if you can get it)
6. Code for thread safety
7. Write DRY code (or else)
8. Don't confuse ChildDocument with Document
9. Use the named methods on DocumentMetaData
10. RTFM (again)

Before I get into the gory details, let me give you some background. First off, what's a CWS anyway? It's the code behind what Oracle now calls Content Services, which spider through various types of content (for lack of a better term) and import pointers to those bits of content into the Knowledge Directory. This ability to spider content and normalize its metadata is one of the most underrated features in Plumtree. (FYI, it was also the first feature we built and arguably, the best.)

Each bit of spidered content is called a Document or a Card or a Link depending on whether you're looking at the product, the API or the documentation, respectively. It's important to realize that CWSs don't actually move content into Plumtree; rather, they store only pointers/links and metadata and they help the Plumtree search engine (known under the covers as Ripfire Ignite) build its index of searchable fulltext and properties.

Today, Plumtree ships with one OOTB CWS that knows how to crawl/spider web pages. Not surprisingly, it's known as the Web Crawler. Don't let the name mislead you: the web crawler can actually crawl almost anything, as I explain in my first tip, which is "Don't actually build a crawler." But I'm getting ahead of myself.

So, back to the background on crawlers. Oracle ships five of 'em, AFAIK: one for Windows files, one for Lotus Notes databases, one for Exchange Public Folders, one for Documentum and one for Sharepoint. Their names give you blatantly obvious hints at what they do, so I won't get into it. Along with the OOTB crawlers, Oracle also exposes a nice, clean API for writing crawlers in Java or .NET. (If you really want to push the envelope, you can try writing a crawler in PHP, Python, Ruby, Perl, C++ or whatever, but it's hard enough to write one in Java or .NET, so I wouldn't go there. If you do, though, make sure that your language has a really good SOAP stack.)

So, after reading this, you still want to write a crawler, yes? Let's get into my Top Ten Tips:

1. Don't actually build a crawler

Yes, you really don't want to go here. Building crawlers is not that hard, as there's a clean, well documented API. However, getting them work is a whole other story.

Most applications these days have a web UI. So, take advantage of it. Point the OOTB web crawler at the web UI and see what it does. Some web UIs will work well, other won't (particularly if they use frames or lots of javascript.)

Let's assume for a moment that this technique doesn't work. Or perhaps you're dealing with some awful client-server or greenscreen POS that doesn't have a web UI. Either way, you may still be able to use the web crawler.

How? Well, the web crawler can crawl almost anything using something that we used to call the Woogle Web. Think of it this way. Say you want to crawl a database. Perhaps that database contains bug reports. Rather than waste your time trying to write a database crawler, just write an index.jsp (or .php, .aspx, .html.erb, .you-name-it) page that does something like "select id from bugs" and dumps out a list of all the bugs in the database. Then, hyperlink each one to a detail page (that's essentially a "select * from bugs where id = ?" query). Your index page can be sinfully ugly. However, put some effort into your detail pages, making them look pretty AND using meta tags to map each field in the database to its value.

Then, simply point the OOTB web crawler at your index page, tell it not to import your index page, map your properties to the appropriate meta tags, crawl at a depth of one level, and get yourself a nice cup of coffee. By the time you get back, the OOTB web crawler will have created documents/links/cards for every bug with links to your pretty detail pages and every bit of text will be full-text searchable. So will every property, meaning that you can run an advanced search on bug id, component, assignee, severity, etc.

At Plumtree, we used to call this a Woogle Web. It may sound ridiculous, but a Woogle Web is a great way to crawl virtually anything without lifting a finger.

However, a Woogle Web won't work for everything. If you're dealing with a product where you can't even get your head around the database schema AND you have a published Java, .NET or Web Service API, then you might want to think about writing a custom crawler.

2. If you must, at least RTFM

If you're anything like me, reading the manual is what you do after you've tried everything else and nothing has worked out. In the case of Plumtree crawlers, I recommend swallowing your pride (at least momentarily) and reading all of the documentation, including their "tips" (which are totally different from and not nearly as entertaining as my tips, but equally valuable).

Once you're done reading all the documentation, you might also want to consult Tip #10.

3. Hierarchyze your content

Um, yeah, I know "hierarchyze" isn't a word. But since crawlers only know how to crawl hierarchies, if your data aren't hierarchical, you darn well better figure out how to represent them hierarchically before you start writing code. Even if you don't think this step is necessary, just do it because I said so for now. You'll thank me later.

4. Test first

Don't even try to write your crawler and then run it and expect it to work. Ha! Instead, write unit tests for every modular bit of code that you throw down. To every extent that's it's possible, write these tests first. It'll save your butt later.

5. When testing, use the Service Station 2.0 (if you can find it)

When you do finally get around to integration testing your crawler, it'll save you a lot of time if you use the Service Station 2.0. However, it may take you a long time to get it, so start the process early. Unlike every product Oracle distributes, it is 1) free and 2) not available for download. Yeah, you read that correctly.

To get it, you need to contact support. I called them and told them I needed it and after two weeks I got nothing but a confused voicemail back saying that support doesn't fulfill product orders. Um, yeah. So I called back and literally begged to talk to someone who actually knew what this thing was. Then I painstakingly explained why I couldn't get it from edelivery (because it's not there) nor from commerce.bea.com (because it's permanently redirecting to oracle.com) nor from one.bea.com (because there it says to contact support). So, after my desperate pleas and 15 calendar days of waiting, I got an e-mail with an FTP link to download the Service Station 2.0.

After installing this little gem, my life got a lot easier. Now instead of testing by launching a Plumtree job to kick of the crawler (and then watching it crash and burn), I could use the Service Station to synchronously invoke each method on the crawler and log the results.

Another handy testing tool is the PocketSOAP TCPTrace utility. (It's also very handy for writing Plumtree portlets.) You can set it up between the Service Station and your CWS and watch the SOAP calls go back and forth in clear text. Very nice.

6. Code for thread safety

So, as the documentation says (and as I completely ignored), crawlers are multithreaded. The portal will launch several threads against your code and, unless you code for thread safety, these threads will proceed to eat you for lunch.

Coding for threadsafety means not only that you need to synchronize access to any class-level variables, but also that you must use only threadsafe objects (e.g. in Java, use ArrayList instead of Vector).

7. Write DRY code (or else)

Even though you're probably writing your CWS in Java or .NET, stick to the ol' Ruby on Rails adage: Don't Repeat Yourself.

Say for example, that you need to build a big ol' Map of all the Document objects in order to retrieve a document and send its metadata back to the mothership (Plumtree). It's really important that you don't build that map every time IDocumentProvider.attachToDocument is called. If you do, your crawler is going to run for a very very very long time. Crawlers don't have to be super fast, but they shouldn't be dog shit slow either.

As a better choice, build the Map the first time attachToDocument is called and store it as a class-level variable. Then, with each successive call to attachToDocument, check for the existence of the Map and, if it's already built, don't build it again. And don't forget to synchronize not only the building of the Map, but also the access to the variable that checks whether the Map exists or not. Like I said, this isn't a walk in the park. (See Tip #1.)

8. Don't confuse ChildDocument with Document

IContainer has a getChildDocuments method. This, contrary to how it looks on the surface, does not return IDocument objects. Instead, it expects you to return an array of ChildDocument objects. These, I repeat, are not IDocument objects. Instead, they're like little containers of information about child documents that Plumtree uses so that it knows when to call IDocumentProvider.attachToDocument. It is that call (attachToDocument) and not getChildDocuments that actually returns an IDocument object, where all the heavy lifting of document retrieval actually gets done.

You may not understand this tip right now, but if drop by and read it again after you've tried to code against the API for a few hours, and it should make more sense.

9. Use the named methods on DocumentMetaData

This one really burned me badly. I saw that DocumentMetaData had a "put" method. So, naturally, I called it several times to fill it up with the default metadata. Then I wasted the next two hours trying to figure out why Plumtree kept saying that I was missing obvious default metadata properties (like FileName). The solution? Call the methods that actually have names like setFileName, setIndexingURL, etc. -- don't use put for standard metadata. Instead, only use it for custom metadata.

10. RTFM (again)

I can't stress the importance of reading the documentation. If you think you understand what to do, read it again anyway. I guarantee that you'll set yourself up for success if you really read and thoroughly digest the documentation before you lift a finger and start writing your test cases (which of course you're going to write before you write your code, right?).

* * *

As always, if you get stuck, feel free to reach out to the Plumtree experts at bdg. We're here to help. But don't be surprised if the first thing we do is try to dissuade you from writing a crawler.

Have a safe and happy Halloween and don't let Plumtree Crawlers scare you more than they should. Boo!