All posts by SteveB

A few weeks ago we silently launched the MindTouch App Catalog, which combines the content from the existing Extension Directory, Template Gallery, and DekiScripts. At the same time, we also added a new category for MindTouch Applications, which provide a complete, interactive user experience.

MindTouch App CatalogThe reception for the App Catalog has been overwhelmingly positive and it is time to officially announce it. Take a moment and see it for yourself. You can browse by category (e.g. communication, authentication, documents) or by type (e.g. app, template, script), and if you are overwhelmed by the selection–there are already over 100 entries–then try out the App Catalog searchbox.

Read more…

cebitlogo As some of you know, I will be speaking at CeBIT, the world’s largest and most renowned trade fair for the world of IT and telecommunications (last year they had a half million attendees!), on the ‘Enterprise Social Networks’ panel on Thursday, March 5th from 11:20am to 12:35pm. To speak at CeBIT is a huge honor and I’m looking forward to participating with such a remarkable group of panelists, including Vassil Mladjov (Blogtronix), Mike Walsh (Leverage Software), and Devan Batavia (Jive Software). Henning Behme, Deputy Editor-in-Chief of iX magazine will also be there as the moderator for the panel.

If you’re at CeBIT and want to meet up for a drink, conversation, or both – send me a message on Twitter (@bjorg) and I’ll be sure to get in touch.

Below is more information about what to expect from the session.

Session Title: The Power of Social Networking in the Enterprise

Description: Enterprises are just beginning to tap into the power of social networks for their own workforces. This session will discuss the ways that enterprises can use internal social networks to create a more effective organization as well as the challenges of implementation and adoption.

Where: The panel will be held at the Digital New Media Solutions Forum which is located in Hall 6, Stand G28. This is a large block in the center of the south end of the hall. A map of the fairgrounds showing the location of Hall 6 in relationship to other landmarks can be found here.

europe

Every so often, I get the question of “why would anybody want to store XML in a wiki?” Granted, this question is usually brought up by a competitor rather than by a customer. At first brush, XML just makes things more complicated, but this perception quickly dissipates as your collaboration turns into automation turns into workflows. In this post I share some insights into why MindTouch Deki is built the way it is.

Most wikis use wikitext as markup language. Wikitext is what made wikis popular: it’s fairly easy to learn by semi-technical people, it’s fast to edit, and it doesn’t require much of a user interface. One could say that a wiki without wikitext is not a wiki – since the origin of the term “wiki” is the Hawaiian word “fast.”

MindTouch Deki, on the other hand, uses XHTML–an XML format for content. XML is tedious to edit by hand, it’s verbose, and hence requires a user interface to be usable. It is also fairly complex to combine contributions from multiple authors and highlight changes between versions.

At first brush, one might wonder why choose XML over wikitext? The reality is that wikitext was a great start for the open collaboration revolution – and I do mean revolution, but more on that in another post. But wikitext has its problems. It’s not a standard. Different wiki vendors use different markups. Sometimes, a wiki even makes the markup selectable. That’s not good for promoting uniformity and training users. Wikitext makes simple operations simple and it makes advanced operations nearly impossible. In the end, we have to recognize why wikitext was invented. Wikitext allowed validation of the hypothesis that open collaboration works, without requiring lengthy user interface development. That hypothesis has been validated: open collaboration not only works, it works amazingly well! This was the goal and it was achieved. Usability was not a goal. Now, it’s time to look at what was sacrificed to get us there.

The first victim of wikitext was the WYSIWYG editor. Nobody wants to format content using markup, even wikitext markup. Once formatting becomes a concern, wikitext is starting to show it’s limitations. Regardless of how many resources are being poured into creating a wikitext-enabled WYSIWYG editor, such editor will always be second rate when compared to a HTML editor. Why? Because HTML is an industry standard with lots of competition to create the best HTML editing experience possible. It’s simple Darwinism. Modern browsers support HTML editing. Microsoft Word supports HTML editing. Countless other applications support HTML editing. Why discard all these great tools and start from scratch?  At the end of the day, you would need to replicate everything that HTML already does. That doesn’t sound right.

In contrast, relying on existing standards has many benefits. For example, MindTouch Deki now uses fckEditor for WYSIWYG editing–don’t let the name distract you from this otherwise fantastic editor. Before fckEditor, Deki used Xinha as editor. In the future, Deki may use something else, be it written in JavaScript, Flash, or even Silverlight. As long as the editor supports HTML, the option will be on the table. It also means companies which have built custom user interfaces for Deki, such as Shelfari, can select the editor that best fits their needs. Because HTML is a standard and Deki is built using XHTML, our users have more choices in how they want to interact with their content. And that’s a pretty good thing.

The second victim of wikitext is interoperability. Even if wikitext were a standard, it would still be confined to wikis. What about all the other applications out there? What format should they use to extract or update information in a wiki? Would everything need to become wikitext enabled? This approach doesn’t seem reasonable. With XHTML, you get the best of both worlds. First, you get all the benefits of versatile HTML editors, and second, you get all the powerful tools that have been created for XML. For example with XPath, you can locate and extract exactly the piece of information you want. And with XSLT, you can format this information in anyway you like. XML tools are found in all programming language and enterprise systems. Using XML gives a system a lingua franca that forms the foundation for interoperability. That’s why we made sure that the Deki API provides access to all functionality in XML, including the content of pages.

The last point is about the benefits of native support for XML – and JSON, another popular interoperability format. Once you design an application to store everything in XML and you give it scripting capabilities, you implicitly create something much, much larger. For example, the “other” applications I referred to in the previous paragraph are now simply scripted wiki pages: wiki pages that can read other wiki pages, locate and extract information, and then present this information in an augmented way. This capability is profoundly important: when pages can automate the synthesis and presentation of information, you get a great reporting tool. When these pages can be reused themselves as XML sources, you get a formidable business tool. This ability is what made spreadsheets the #1 business tool. With Deki, this capability is now unleashed unto networks of individuals rather than confined to their individual desks.

The ability to retrieve and process XML/JSON is an integral part of DekiScript, Deki’s built-in scripting language. DekiScript enables users to create composite pages using content from the wiki as well as from web-services. New web-services for business applications and online data emerge every day–ProgrammableWeb is a great resource to learn about them. Deki is designed to take advantage of these and put their power into the hands of your users. This kind of capability would not be possible if Deki had not been designed from the ground up to be XML-based. To get a sense of what is possible, visit our DekiScript forums. I’m amazed every day about what our community is building with it.

In short, the benefits of using XML as the de facto data format and making it core to the platform yields immediate rewards. This is part of our web-oriented architecture and I personally believe it is one of the strongest reasons why Deki fits so well with business applications and online communities. After all, no man is an island, and neither should your wiki.

In conjunction with MindTouch Deki v8.08.1 “Kilen Woods,” we’re also releasing updated versions of MindTouch Dream and SgmlReader.

MindTouch Dream 1.5.6

MindTouch Dream is a .NET REST framework for developing lightweight, highly decoupled web-services. It runs on Microsoft .NET 2.0 and Novell Mono 1.2. Dream is the foundation for web-oriented architecture of MindTouch Deki. Learn more about Dream here.

IMPORTANT: of high importance in this release is the change of license for Dream, which is now licensed under Apache License v2. This makes it easier to embed Dream into other projects or reuse parts of the library without having to worry about licensing.

  • fixed byte ordering issues in CryptoUtil that surfaced on SPARC architecture
  • host now provides expanded timer status information
  • fixed bug in XDocCop that appended unnecessary   when validating a HTML document
  • added XML signing scheme that works across .NET and Mono
  • HttpUtil now can convert neutral cultures (e.g. en, de, fr, …) to specific cultures (e.g. en-us, de-de, fr-fr, …)
  • XDocDiff now no longer splits words on underscore or dot/comma if preceded by a digit
  • XDoc/XDocDiff/XDocFacotry: always use preserve whitespace (required for XML digital signatures)
  • TaskTimer now use a dedicated thread to avoid issues when server time changes unexpectedly (common on VMs)
  • DreamMessage now throws an exception when using AsDocument() and the request body cannot be parsed as XML
  • services can now override the default OPTIONS implementation
  • added WebDAV status codes to DreamStatus
  • and other bug fixes

MindTouch Dream 1.5.6 is available for immediate download from SourceForge.

SgmlReader 1.8.1

SgmlReader is a versatile .NET library written in C# for parsing HTML/SGML files. The original community around SgmlReader used to be hosted by GotDotNet, but it has been phased out. MindTouch Dream and MindTouch Deki use extensively the SgmlReader library. We found and fixed a few bugs in it as well. In the spirit of the original author, we’re providing back these changes.

  • Fixed an infinite loop bug when parsing unclosed comments
  • Fixed a debilitating bug where equal elements where no longer consider equal after a while

SgmlReader 1.8.1 is available for immediate download from SourceForge.

I’m so happy to see WOA (web-oriented architecture) gaining steam. I’ve been pitching it for a while as an healthier alternative to SOA since it’s simple enough that a student can understand it and build something with it in a weekend. More importantly, the student did so without requiring a massive tool chain! It’s simple… it’s open… and, it’s proven! What is there not to love? :)

informationweek_logo_397.gifRecently, Roger Smith of InformationWeek did a piece comparing SOA and WOA. Roger kindly quoted me on the subject:

One IT exec who’s really been doing his Web-oriented architecture homework is Steve Bjorg, co-founder and CTO of MindTouch (…) “By going the WOA-plus-REST route instead of SOA-plus-SOAP, the requirements for extending the application dropped considerably,” Bjorg says. “There is no SOAP processing stack with complicated WSDL documents, an SOA registry, and what have you. Instead, someone can easily create an extension to Deki Wiki using any number of computer languages.”

Another quote on the benefits of WOA in conjunction with MindTouch Deki was provided by Mike Shaver, Mozilla’s Chief Evangelist:

(…) Mike Shaver, offers this explanation of why Mozilla went the WOA route in adopting MindTouch’s Deki Wiki as the future platform for its developer community. “Mozilla has a large volume of developer-relevant information, ranging from traditional documentation and sample code to test suites and bug-tracking data, as well as a number of active discussion forums and RSS streams,” Shaver says. “More than any other wiki system we looked at, Deki Wiki feels designed to be extended as a platform for Web applications. … Whipping up a new extension or integration point is easy enough that even a chief evangelist can do it.”

zdnet_2.gifJoe McKendrick of ZDNet picked up the story as well. Both Roger and Joe tried to keep a balanced point-of-view, which, in my opinion, doesn’t render justice to WOA. So, I felt compelled to continue the discussion here.

One of the reasons that WOA has the edge over SOA is how agile and distributed it is at its core. Imagine not needing to reach cross-group consensus to get something done! Imagine being able to understand the document schema just by looking at it. Imagine being able to interact with a system just by using your browser. In short, imagine it just works… that should make your mind go “WOA!”

WOA may sound too good to be true at first. Those who defend SOA as the “enterprise solution” claim it is the more mature technology… unfortunately, these people are wrong. The rise in popularity of WOA is undoing the noise and bloat that SOA introduced. The truth is WOA existed first! It is what made the web scale to billions of pageviews across a fully decentralized network of heterogenous machines, known was the Internet. A few years later, SOA was introduced as a way to fix something that was never broken. More importantly though, the fix required lots of new tools and technologies, including compilers, registries, libraries, document standards, and so forth. Not coincidentally, the companies who designed and promoted SOA were those who would benefit the most from it… the tool vendors. Heck, if a solution requires an XML appliance to scale, then it’s not part of the solution, it’s part of the problem!

There is another reason I like WOA. And that reason is that it abides to the “Keep It Sincerely Simple” (KISS) design philosophy. Not only does it make my head hurt less–which is always a big plus in my book–it also empowers my team to move faster from concept to trial to product stage. It doesn’t matter how smart or clairvoyant a software architect is… the odds are he or she was wrong when you look back a few years later. That’s just how it is! Faced with this reality, you may decide to design for infinite extensibility or accepted obsolescence. The former path leads to slipped schedules, bloated code, and mountains of impenetrable specifications. The latter ships incrementally, the code fits today’s problem, and the inner workings can be garnered through simple observations. So it should come at no surprise that most start-ups chose the WOA approach… it gives them a competitive edge!

In the end, I predict that SOA will morph into WOA in a few years. Some remnants of the old SOA will remain and a few unlucky chumps will be tasked to maintain it somehow. A situation not unlike that of the lost souls that keep COBOL code running to this day. So please take a moment to reflect on this and do the right thing. And remember…

Free your mind and go “WOA!”

keanureeves2.jpg

With the launch of the MindTouch Deki 8.08 RC1, we’re also releasing updated versions of SgmlReader, the versatile .NET library written in C# for parsing HTML/SGML files. The benefit of SgmlReader is that it can cope with some fairly loosely formatted documents and convert most of the content into valid XML.

SgmlReader is being released in two versions: 1.7.5 and 1.8.0. 1.7.5 marks the last version compiled for .NET 1.1. Starting with 1.8.0, .NET 2.0 is required. Both can be downloaded from SourceForge.net and include compiled binaries, as well as the source code.

Improvements in 1.7.5 (.NET 1.1)

  • Detect ending quote in attributes (e.g. <p class="para>...</p>)
  • Each unknown prefix is mapped to a unique namespace, allowing duplicate local names (e.g. <p o:x="foo" m:x="bar">...</p>)

Improvements in 1.8.0 (.NET 2.0)

  • Major code review & clean-up to use generics by jamesgmbutler (thanks!)
  • Support XML-only entity &apos; in HTML/SGML documents (e.g. <p>It&apos;s ok</p>)

To parse a HTML document into valid XML:

XmlDocument FromHtml(TextReader reader) {

        // setup SgmlReader
        Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
        sgmlReader.DocType = "HTML";
        sgmlReader.WhitespaceHandling = WhitespaceHandling.All;
        sgmlReader.CaseFolding = Sgml.CaseFolding.ToLower;
        sgmlReader.InputStream = reader;

        // create document
        XmlDocument doc = new XmlDocument();
        doc.PreserveWhitespace = true;
        doc.XmlResolver = null;
        doc.Load(sgmlReader);
        return doc;
}

All in all, some good improvements. If you have any recommendations on how to make it event better, please leave a comment or join us on the forums.

mdc-logo.png

OpenGarden.org has finally taken its rightful place as the MindTouch Developer Center. For now, not much has changed except for the new address: http://developer.mindtouch.com. Your login continues to work and your bookmarks are redirected automatically. But in the coming weeks and months, we’ll be giving MDC a facelift and a new structure that will make it easier to find, contribute, and connect with fellow community members.

Why are we doing this?

There were really two needs I felt we had to address. First, the artificial dichotomy between OpenGarden and MindTouch created a semblance of a two-class structure: MindTouch and the Community. This was never the case, as we all know from our active collaboration on the forums and the wiki. Yet, appearances matter sometime. This small adjustment simply makes it clear to new members that we are one family.

Second, there was some overlap in content between MindTouch and OpenGarden, which caused confusion as to the purposes of the two sites. MDC will be specifically tailored to address the needs and wants of those who want to get the most out of MindTouch Deki: its capabilities, its extensions, its API, and its multi-platform support. To that end, the new structure will make it easier to discover the full set of features, as well as provide an equal home for contributions from MindTouch and the Community alike.

The MindTouch Developer Center is a long-term investment. Its build out will continue over months and years. And it will happen in small incremental steps so that everyone can participate to move it in the right direction.

I’m looking forward to creating with your help the best place for learning and sharing everything there is to know about MindTouch Deki!

The Bungee Line

Our friends at Bungee Labs invited me to participate for one of their tech podcasts. They did a great job organizing the interview and asking great questions. Hats off to them!

MindTouch’s Steve Bjorg joins us to tell us all about their wiki platform called “Deki.” MindTouch is rapidly growing Deki’s install base, largely on its slick user interface. But there’s something hidden under the all the UI slickness: under the hood, Deki supports a comprehensive web API. In fact, the PHP user interface fully delegates all operations over web-service calls to the API. In other words, web-dev geeks like us can safely customize or extend the UI without risk of interfering with Deki’s business logic, such as page permissions or revisions. Coooool! Oh, and did we mention that it’s Free Software?

Here is the link to the podcast. Enjoy!

google-app-engine.pngYesterday, Google announced the general availability of Google App Engine, another option for deploying Cloud Software.

Google App Engine is a great place to create and share extensions for MindTouch Deki. By design, Deki is a distributed application platform that can be extended in any programming language, including C#, PHP, Java, Python, and the built-in DekiScript runtime. Sharing these extensions can be difficult though since you need to find a place to host them. This is were Google App Engine comes in.

Getting started is incredibly simple:

  1. Download the App Engine SDK.
  2. Create a new application.
  3. Add the DekiExt.py file to it.

After that, creating your own extension only takes a few lines of code:

class MyExtension(DekiExt):

    # title for the extension
    def title(self): return "My Extension"

    # a function is exported in the XML manifest
    @function("str", "return user greeting")
    @param("str", "name of user")
    def hello(self, name):
        return "Hi " + name

Now upload your extension to your Google App Engine account and voilà, anybody can now benefit from it!

To invoke from MindTouch Deki, just register your extension in the control panel. Now your users can access it by simply typing:

{{ hello("Bob") }}

To learn more how to write your own extensions using Google App Engine, check out the tutorial. Then drop by the developer forums to share your work, ask questions, and provide suggestions. Enjoy!

With all the discussions about about Cloud Computing going on, it’s time to draw lines and explain what the big differences are between Software-as-a-Service (SaaS) and Cloud Software.cloud-jail.jpg

SaaS: The dawn of Cloud Computing

SaaS has been attractive, because it removes all complexity from installation, deployment, maintenance, is globally accessible, and affordable. By its nature, SaaS resides in the “cloud” and overcomes the traditional headaches of VPNs for efficient collaboration. An added bonus is transparent backups (assuming there is backup strategy).

SaaS is great first step towards Cloud Computing, but it also has an important drawback: control. For all practical purposes, your data is not yours anymore. The SaaS vendor has full control over it; can mine it; and can lock you out of it. For consumers, this is generally not a problem, but for the enterprise, it is a concern.

In short with SaaS, the vendor is in control, not the customer. For the early days of Cloud Computing, that was an acceptable compromise, but times have changed and the cloud has evolved.

Cloud Software: The evolution of Cloud Computing

Cloud Software builds on Cloud Infrastructure (as described in this great post by our friends at RightScale). Similar to SaaS, Cloud Software provides instant gratification, taking mere minutes to be up and running. Depending on the vendor, Cloud Software is as easy to maintain and update as SaaS, and is of course globally accessible.

So what is the big difference? Your data and your application is sitting on servers that you control. There are no restrictions on moving data into or off your Cloud Infrastructure. These servers are for all practical purposes indistinguishable from servers in your physical data center.

What about backups? Cloud Software is designed to be run in the cloud. That means, it already addresses the need to replicate data repositories into the Cloud Storage fabric. Again, you control the Cloud Storage, so you can create additional copies of your data offline if you need to.

What about scaling? Cloud Software is designed to run on one to many machines. That means as your needs increase, you simply add more virtual infrastructure to the mix and voilà!

What about vendor lock-in? Cloud Software doesn’t really care what it runs on. With Cloud Infrastructure, all machines look the same, meaning you can move your application from one provider to another with few limitations. If need be, you can even move it back to your physical data center.

In short, with Cloud Software, the customer is back in control.

Is Cloud Software going to replace SaaS?

The short answers is “no” for the simple reason that SaaS works well when a single machine can services 1,000 to 100,000s of individual users, such as in a consumer setting. In the enterprise, however, Cloud Software has a big advantage. The premium to gain full control over your data and your infrastructure with Cloud Software is simply too low to give SaaS vendors the kind of control they have enjoyed so far. High value applications will transition to Cloud Software because customers want control, while SaaS will continue to supply free or low-cost applications and services.

This also reflects the different options for running MindTouch Deki Wiki. Wik.is is free for up 100MB (or $99/yr for 10GB) with no other restrictions, but the data reside on our servers. Alternatively, you can download Deki Wiki as a certified VMware image or from source code and install it on your servers. Or, you can get the best of both worlds, and launch a Deki Wiki EC2 instance directly in an Amazon.com data center in the cloud

It’s good to have choices!