There are only two hard things in Computer Science: cache invalidation and naming things. -Phil Karlton

It seems that naming has been an issue that has plagued my entire career. Confusing names. Names that sound similar but mean very different things. I'm even guilty of causing it!

But if you take one thing away from this blog post: Couchbase is not CouchDB. They are both database products, with some common roots, but they are not the same thing.

Interested in learning more? Check out:

While I'm at it, let me clear up a few other naming confusions that have plagued me for a long time:


  • I used single letter variables. For no good reason. It didn't occur to me that I could use an entire word!
  • For my undergrad. I went to Ohio University. No, not the Buckeyes of Columbus. The Bobcats of Athens.
  • Oh, but I also went to The Ohio State University for my master's. Those are the Buckeyes of Columbus.

Working at OSU

  • I worked full time at OSU. I started out in Student Affairs Business Office, which used to be called something else (HFSEC or something?)
  • I moved to Student Affairs IT.
  • Student Affairs was renamed to Student Life.
  • I have no idea what it's called now. I still call it Student Life.

Family names

  • My wife and I named our firstborn "Matthew Kevin Groves".
  • He's not Matthew Groves Jr, because my middle name isn't Kevin.
  • The convention within my family is that I am "Matt" and he is "Matthew".
  • "Groves", "Grover", "Tall Guy" also work. If you call me "Tall Guy", be prepared to be called "Shorty" or "Shrimp".
  • I will NOT tolerate any use of "Matty".
  • I'm not "Grooves" or "Graves" or "Grove".
  • I live in Grove City, Ohio. I realize this doesn't help.
  • I used to live in an apartment complex called "The Groves", which is in Grove City.
  • I may be related to Leslie Groves. This has nothing to do with naming, it's just a cool bit of trivia I thought I would mention.

Quick Solutions

  • I worked at Quick Solutions in Columbus for a bit.
  • Quick Solutions was named after a guy with a last name of Quick. Neat, huh?
  • It's not called Quick Solutions anymore; It's Fusion Alliance now.


  • I worked for Telligent for a few years. It's a company based in Dallas which makes the excellent Telligent Community product.
  • They changed their name to Zimbra while I was working there (after an acquisition).
  • After I left, they changed their name back to Telligent (after some sort of spin-off). The people I knew and worked with are with Telligent.
  • Telligent and Telerik are different companies; I've never worked for Telerik.
  • Jim Holmes worked for both Telligent and Telerik. Thanks for that, Jim.


  • Not CouchDB.
  • Couchbase.
  • If it helps, think of "SQL Server" and "MySQL". They both have "SQL" in the name, but they aren't the same thing.
  • Couch is an acronym (Cluster Of Unreliable Commodity Hardware).

Well, that's it. I started this post just to help and clear up the "CouchDB" and "Couchbase" thing, but it turned into more of a personal rant. Anyway. Couchbase.


I've just wrapped up my first week at Couchbase. So far, I like the job quite a bit.

One of the things I've been tasked with is to brainstorm a plan of things that Couchbase can do to reach out to developers, but specifically to Microsoft-oriented developers.

Couchbase love Microsoft

I've already talked to some of you for ideas, and I've created a huge list. The next step will be to pare down the list, prioritize it, and start working on it. But before I do that, let me send out one more appeal to developers of all kinds, including MS developers: what can I do to better communicate with and help you and your peers? Be as specific or general as you'd like!

Feel free to leave a comment below, hit me on Twitter via @mgroves, use my Contact Form, or email me directly matthew.groves AT couchbase DOT com

One of the things that I've always liked to have on my blogs over the years is a "latest comments" widget. I like to leave all my blog posts open for comment indefinitely, and this gives users a way to see the latest comments, even if they are on very old blog posts.

Disqus doesn't have a "drop-in" JavaScript snippet to do this, but Disqus does have an extensive HTTP API that allowed me to build my own.

The terminoloy that Disqus uses was a little confusing for me, but by reading some of the docs and trying a few tests in Fiddler, I was able to see that the forums/listPosts API endpoint was the one I wanted. You'll need to make sure that you have a public key generated in order to use the endpoint. Here's the widget I wrote:

Some notes:

  • Disqus rate limits you to 1000/requests per hour. For my blog, that's probably more than enough.
  • This script depends on jQuery, but you can use something else for your DOM manipulation, even plain JavaScript if that's your jam.
  • I was at least partially inspired by Raymond Camden blogging about something similar.

Joining Couchbase

April 22, 2016 mgroves 0 Comments
Tags: personal career

Short version: My new job title is Developer Advocate, and I am working for Couchbase.

Long version: Being a developer advocate / developer evangelist is something that I've been considering for a long time. I've enjoyed speaking, blogging, writing, screencasting, teaching, helping, networking for a while now. But until now, I had always done these things only in my spare time. The thought of making those activities into my full time job appealed to me. But, there are a lot of developer advocate positions out there, and most of them don't appeal to me, because the product or the company doesn't appeal to me. The few times I managed to get interviews with really awesome companies with great products, it didn't work out, and I thought that maybe it wasn't meant to be.

But I'm very excited to announce that I finally found a DA opening with a great company with a cool product (a NoSQL database company based in Silicon Valley!).

I've done a lot of thinking this year about my career, and what direction I want to go. I've been a coder for my entire career. Some of the best parts of being a coder is sharing knowledge with other coders: teaching, writing, and expanding my own knowledge in the process. As much as I enjoyed working for my previous employer, they make a product that isn't developer-facing, and therefore a developer advocate position just wasn't going to happen for me there.

I'm ready to begin a new chapter, and I'm looking forward to reaching out to developers and helping to build the Couchbase community.

Because Akismet has been letting me down recently on this site, I've decided to 'outsource' the commenting and spam checking to Disqus.

Installing Disqus is a piece of cake. You sign up and drop some JavaScript onto your site. Even the "# comments" that you see near the top of this post is taken care of by just pasting some JS.

But there are two things that I would potentially lose that I was concerned about:

  1. My "legacy" comments
  2. My Latest Comments widget (which I'll cover in part 2)

If I were migrating from WordPress or some other well-known blog software, it would have been really easy. WordPress->export, Disqus->import.

However, this site runs on my own home-grown blog engine (for better or for worse). I could have just left my legacy comments alone, and let them exist side-by-side on older blog posts. I called that "plan B".

But once I knew that I could import from other engines, well, I assumed there must be a way for me to "fake" it. It was a little bit of work, and it still might not be perfect, but it worked.

I researched the formats that Disqus can handle. One of them is the WordPress WXR format, which is based on RSS, which is based on XML. So, all I had to do was figure out how to generate the right XML. There isn't really a "spec" on the WXR, at least not one that I could find. Luckily, Disqus publishes specs for their own Custom XML Import Format, which is a version of WXR. Once I had that, it was a piece of cake to create an "Export to WXR" button on this very site. Here's roughly what it looks like in an MVC Razor View:

Some notes:

  • I used generated Guids for the comment_id. I'm not sure if it makes any difference from an import perspective, other than they should probably be unique.
  • I put both comment_date and comment_date_gmt. I don't believe that comment_date is actually used, but I put them both in there just in case.
  • Notice the <![CDATA[ ... ]]> within the comment_content. The CDATA is a way to encode data within XML tags that an XML parser might otherwise attempt to interpret.
  • The BlogPostName is the friendly English version (e.g. "I like balloons"). The BlogPostSlug is the URL-friendly version (e.g. "I-like-balloons").
  • I used Html.Raw because otherwise Razor seemed to have trouble parsing what I was generating. I'm not worried about any sort of DOM injection, since this export utility is behind auth. But generally, you should be wary of using Html.Raw in Razor

To import, I just saved the output of this view, and went to Disqus Import, and uploaded the file. It goes into a processing queue, and the time it takes with vary depending on how many comments you are importing and (I assume) how many other workloads that Disqus is trying to process. I imported 86 comments multiple times, and it generally took about 5 minutes at most.

Matthew D. Groves

About the Author

Matthew D. Groves lives in Central Ohio. He works remotely, loves to code, and is a Microsoft MVP.

Latest Comments