December 27, 2007

MindTouch Logo

2007 has been a banner year for MindTouch, in which we have exceeded every key metric we have set for ourselves:

  1. Our monthy downloads are running at 30,000 per month, from less than 1,000 last year. This rate makes our Deki Wiki product the fastest growing wiki in the marketplace, and MindTouch the leading commercial open-source wiki company going forward. We project that between July 2007 to June 2008 we will have 300,000 downloads, up from 10,000 in our first year of product release. That's 30X in one year!
  2. Our sales have tripled since 2006, with the quality of customers also increasing. One marquee customer that has announced our partnership is Mozilla, which is replacing its MediaWiki with Deki Wiki for its Developer Center (MDC) after extensive competitive analysis. We have many other customers that will announce next year across a variety of applications in the enterprise, online communities and devnets.
  3. Our passionate community of 1,500+ users and developers have contributed an amazing amount of good ideas and work this year. The most immediate and visible contribution is the translations. In a short 6 months, we have now the following foreign languages: Russian, German, French, Spanish, Dutch, Portuguese, Japanese, Polish and Norwegian. Thank you all, MindTouch Gardeners!
  4. As a direct result of the translations, we are able to enter two major foreign markets (to be officially announced early next year) via enthusiastic and capable resellers/system integrators. One of the resellers was a close partner with a well-known competitor, but due to their shortcomings and Deki Wiki's features, switched to us and has become MindTouched.
  5. Then, there are the products, of course. Since they have been documented fully on the blog and forums, I will not have to repeat them here.

What's most impressive about our achievement is that most of it is accomplished in an organic fashion with very little money or PR. Once we decide to pour a little more gas into the fire, our traction will increase even further. Hey, we might just do that! Stay tuned.

In short, MindTouch is on a roll. We are changing the game in the wiki market.

I want to end by thanking the MindTouch team, which has done an amazing amount of good work this year. Their dedication, hard work and perseverance are incomparable. Thanks to all.

Have a wonderful and healthy New Year!

December 24, 2007

Merry Christmas from MindTouch!

Aaron Fulkerson @ 11:23 am

Roy Kim: Merry Christmas from MindTouch!!

Merry Christmas and Happy Holi…wait…holy &#$%, wtf? LMAO…yes, I know this photo is hysterically funny. Well, you haven’t seen anything because this is only one of the photos Roy had taken to send out for Christmas cards. If you would like a Christmas Card from Roy he’s willing to mail you one. Roy is MindTouch’s lead developer and founder of Tabulas. Yes, this guy is a lot of fun to work with. Check out that sweater! The sweater and scarf were actually borrowed from Guerric, the latest addition to MindTouch’s development team, who purchased it for use at a Christmas Sweater party he attended.

Seriously though, Happy Holidays from MindTouch. We really appreciate all of your support this last year. To show this we have some very cool new products we’re releasing in the beginning of the year (most of you are probably already aware of one of these). 2008 is already shaping up to be a break out year for MindTouch and this is entirely attributable to you, the community. Thanks for blogging, talking, providing testimonials, giving praise, translating, filing bugs, writing install guides, submitting code patches, writing extensions, hosting user conferences (you can even invite us if you like :-) ), buying support, and yes even complaining about Deki Wiki. Because of all these actions by so many of you MindTouch has become the most popular vendor backed wiki. Sincerely, thanks. :-)

Please continue to provide your feedback in the forums. Good, bad, or otherwise. Also, you should know there is a section to author specs at the wiki. Yes, really you can spec out a feature, we will review it, we have implemented many of these. If you review the release notes of each product release you’ll notice the community is the predominate driver of the product releases. This is your product, we’re the facilitators. Keep the goodness coming.

December 18, 2007

I hope the holiday season finds you well! Here at MindTouch, we’ve been incredibly busy juggling tons of projects over the past month. All the exciting stuff in the pipeline will surely lend to an interesting 2008 :). If you’re looking for a change of scenery, you should definitely check out our hiring page. If you’re not looking for a change, you should still check out our hiring page for its GQ-esque photo spread of a certain super seg-shi (SINGLE!!!!) MindTouch developer. Damien and Aaron obviously had my best interests at heart when putting that page together, and I thank them. Ah, but enough of looking for love in the wrong places…

Today, we’ve posted Deki Wiki 1.8.3 Release Candidate 2 for your public consumption. The source release is only a RC because of the extended holiday - with most of the MindTouch development staff out of the office, we decided to hold off on the “official” release until after we all return. The last thing we want is for a critical bug to be reported, and nobody here to fix it! We plan on releasing 1.8.3 Final on January 4th - at that time, all VMs will be upgradeable using our updateWiki.sh script.

Don’t be deceived by the incremental release number - this is a huge upgrade which contains better enterprise support, higher performance (vetted live with our hugely popular Wik.is), more extensive configuration support, and a cure for the blues1.

The OpenGarden community has been tremendous in shaping the direction of this release - with our attention divided during this release cycle, it’s been wonderful to have such strong voices in our forums improving Deki Wiki (especially with the recent localization work!). Be sure to join our community … you can help define the direction of Deki Wiki :)

1 Subject to FDA approval in 2008

Download Deki Wiki 1.8.3 or read the release notes.

December 17, 2007

Writing Extensions with DekiScript

Steve Bjorg @ 8:12 pm

In Deki Wiki 1.8.3, we’ve added the capability to write extensions in XML using the DekiScript service. This makes it a lot easier to write extensions for embedding widgets or using JavaScript APIs.

The idea is quite simple and intuitive.  An extension file contains functions.  Each function returns a HTML document that contains a <head>, <body>, and <tail> element.  For example, output of a function might look like this:

<html>

<head><script src="http://server/instant.js" type="text/javascript" /></head>

<body><img src="http://server/picture.png" class="instant ishadow33 icolorF0F4FF" /></body>

<tail></tail>

</html>

This output describes how to load the “instant.js” JavaScript file and then apply a polaroid effect to “picture.png”.  The <tail> element is empty for this example.  Its use is similar to <head> for loading/embedding JavaScript.  The difference is that code in the <tail> element is only run after the page has fully loaded.  When Deki Wiki receives this output, it merges the <head> and <tail> elements from each function invocation.  It also replaces the function call with the contents of the <body> element.  Once all functions have been invoked, the page is sent to the browser.  Simple and elegant!

Let’s create an XML file that describes the extension and its functions.  The following example describes an extension with one function called “instant”.  The function takes no parameters and simply returns the above document as a result.

<extension>

<title>Sample DekiScript Extension</title>

<description>This extension contains functions for adding picture effects.</description>

<uri.help>http://wiki.opengarden.org/Deki_Wiki/Extensions/Polaroid</uri.help>

<namespace>sample</namespace>

<function>

<name>instant</name>

<description>Add an instant picture effect (polaroid) with tilt to images.</description>

<return>

<html>

<head><script src="http://server/instant.js" type="text/javascript" /></head>

<body><img src="http://server/picture.png" class="instant ishadow33 icolorF0F4FF" />
</body>

<tail></tail>

</html>

</return>

</function>

</extension>

So far, our output is constant, which isn’t really interesting.  This is where DekiScript comes into play.  Instead, of returning a static document, we can use the same mechanism used by Deki Wiki to generate pages dynamically.  To make this work seamlessly, we take advantage of XML namespaces to mark parts of the document we wish to evaluate.

First, we need to declare the DekiScript namespace by adding xmlns:eval="http://mindtouch.com/2007/dekiscript" to the <html> element.  Next, we need to declare that our function takes four parameters: the image URI, shadow opacity, frame color, and tilt direction.  Finally, we need to replace the hard-coded values with DekiScript expressions.  To access the function arguments, we prefix their names with args.

Here is the final version of our sample extension:

<extension>

<title>Sample DekiScript Extension</title>

<namespace>sample</namespace>

<function>

<name>instant</name>

<description>Add an instant picture effect (polaroid) with tilt to images.</description>

<param name="image" type="uri">image uri</param>

<param name="shadowopacity" type="int" optional="true">shadow opacity in percent
(from 0 to 100; default: 33)</param>

<param name="framecolor" type="str" optional="true">frame color in hex
(from "000000" to "FFFFFF"; default: "F0F4FF")</param>

<param name="tilt" type="str" optional="true">tilt direction
(either "left", "none", or "right"; default: nil)</param>

<return>

<html xmlns:eval="http://mindtouch.com/2007/dekiscript">

<head><script src="http://server/instant.js" type="text/javascript" /></head>

<body>

<img

eval:src="args.image"

eval:class="'instant ishadow' .. (args.shadowopacity ?? 33) .. ' icolor' ..
(args.framecolor ?? 'F0F4FF') .. (args.tilt ? ' itilt' .. args.tilt : '')"

/>

</body>

<tail></tail>

</html>

</return>

</function>

</extension>

DekiScript allows you to evaluate attributes and elements.  When an attribute is evaluated, the attribute prefix is automatically stripped, and the attribute value becomes the result of the DekiScript expression.  For elements, it’s a little more varied.  There are three kinds of elements that can be evaluated: <eval:expr>, <eval:js>, and <eval:if>.  The first two are identical in execution, but the result is embedded in a different way.  The first uses the usual DekiScript embedding rules (just like for attributes), while the second converts the result to JavaScript notation (JSON), wich makes it really easy to embed DekiScript values such as lists or maps.  The third kind is a conditional element that prevents its inner elements from being embedded and evaluated unless the test condition succeeds.  All three forms replace the element with the outcome of the operation.  Let’s make this more concrete by looking at a couple of simple examples:

<eval:expr>"Hello"</eval:expr>
Hello
<eval:js>"Hello"</eval:js>
"Hello"
<eval:if test="true">Hello</eval:if><eval:if test="false">Bye</eval:if>
Hello

Last, but not least, we need to add our extension to Deki Wiki.  This is done in the usual manner.

  1. Go into the Control Panel
  2. Click on Service Management
  3. Click on “Local”
  4. Select “Extension”
  5. Enter a description for your service (like sample)
  6. Enter the DekiScript SID: http://services.mindtouch.com/deki/draft/2007/12/dekiscript
  7. Add the config the key manifest
  8. Set the value for the config key to the location of the XML extension file. The location can either be a disk path or a URI. (e.g. /root/sample.xml or c:\files\sample.xml or http://server/sample.xml)

That’s it!  You’re now ready to use the XML extension.

I’ve uploaded a couple of extensions already (AccuWeather and Scratch) to wet your appetite, but you can expect a lot more in the comming months.  The DekiScript service is included in Deki Wiki 1.8.3 RC2, which should go out tomorrow. Share your thoughts, suggestions, and questions on the forums.

Ugh, I Lied!

Aaron Fulkerson @ 1:01 pm

Well, I didn’t exactly lie. :-) You see, I told folks Deki Wiki needed two clicks and a few seconds of their time. We were nominated for the Open Web Awards. Turns out we’ve made the finals. Woohoo! Right? Well, yah, but now I have to beg for people to vote again. :-( For some reason I was under the impression that if we made the finals that the final decision went to the judges. Therefore, I wouldn’t have to reach out to the community again and beg for clicks. So, I say I lied because I asked for two clicks and a few seconds when in fact Deki Wiki needs four clicks and about six seconds of your time.

Please lend MindTouch Deki Wiki two (more) clicks and a few (more) seconds of your time.

  1. Click image below
  2. Scroll down to the Category: Application or Widget, Click “MindTouch Deki Wiki”
  3. Submit vote

Thank you very much for your support! It’s super cool we made the finals.

December 15, 2007

Final Call: Two-Clicks For Deki Wiki

Aaron Fulkerson @ 10:39 am

Deki Wiki is in the running for an Open Web Award, an event that’s being organized by Mashable and participated in by a conglomerate of bloggers. Voting closes this weekend.

Please lend MindTouch Deki Wiki two clicks and a few seconds of your time.

  1. Click image below
  2. Scroll down, Click “MindTouch Deki Wiki”
  3. Bask in the glory of knowing that you’ve just made two-clicks for humanity ;-)

Thank you for the support!

I originally posted on this topic a couple days ago.

A side note. Miguel just added the MindTouch blog to the Mono: MononlogueMonologue. Thanks! We’re happy to be aggregated. For those of you monos who are hearing of MindTouch for the first time, which is probably most of you :-): we develop a free and open source wiki platform that’s developed in C# and runs on Mono. The project gets about 1,000 downloads a day. In short, MindTouch moves (because of VM) easily 700 Mono instances every day. :-) Lend us your vote and download Deki Wiki.

December 12, 2007

Matt AsayWe are very excited to announce that open source industry veteran Matt Asay has joined MindTouch’s board of advisers. Matt will work with MindTouch on business development, marketing and strategic issues to help MindTouch accelerate its growth and extend its leadership in the rapidly growing collaboration, online community and web publishing markets.

Matt brings a decade of in-the-trenches open-source business and legal experience to MindTouch, with an emphasis on emerging open-source business strategies and opportunities. Matt is general manager of the Americas division and vice president of business development at Alfresco, the leader in open-source content management software. Matt is also an adviser to several other leading open source companies and a prolific blogger on the open source industry with a wide following.

“We are very excited to have Matt help us in building up our company based on its market momentum, superior technology and a vibrant global community,” said Ken Liu, MindTouch CEO. “We are confident that by adding Matt’s insights and connections in the open source industry to our core strengths, we will reach the next level of success rapidly.”

“MindTouch basically came out of nowhere and is taking the wiki market by storm with an amazing adoption rate in the past 6 months that’s driven almost entirely by its vibrant community worldwide and word of mouth,” said Matt. “This is very intriguing and telling, and has all the signs of a successful company. That’s why I want to be a part of it and contribute to its growth.

This morning I mentioned to Steve that we should provide an example mashup of Google Charts with some data store using DekiScript in Deki Wiki to compliment Corey’s previous blog post. We spoke about it for about 2 minutes this morning. A few minutes ago Steve showed me this:

Google Charts MySQL Mashup in Deki Wiki

Cool. He’s performing SQL queries on a MySQL database, in this case a Deki Wiki database and then feeding this to the Google Charts extension. What you see in the first table (above) is the MySQL query presented in a table. You’ve always been able to do this with Deki Wiki. The second item, the pie chart, that you see is the MySQL mashup with Google Charts. To achieve the mashup Steve used the following DekiScript:

{{ google.piechart(400, 200, mysql.values("SELECT (SELECT COUNT(*) FROM pages WHERE user_id = page_user_id) + (SELECT COUNT(*) FROM old WHERE user_id = old_user) AS 'Total Edits' FROM users WHERE user_name != 'Anonymous' ORDER BY user_name"), mysql.values("SELECT user_name AS 'User Name' FROM users WHERE user_name != 'Anonymous' ORDER BY user_name")) }}

Obviously this looks a little ugly, but what can I say: it’s SQL. You get the general idea. This is precisely why the Google Charts extension is interfaced using DekiScript, as was previously asked by a Gardener on Corey’s last blog post. DekiScript makes constructing these kinds of mashups a lot easier and a lot easier to read.

To make this mashup possible Steve had to make a couple minor changes to the MySQL extension. Previously the MySQL extension would only return a table. Today Steve added the ability for the extension to return a single value or an array of values. It took him a couple minutes to make this change, but now you can create some nice MySQL and Google Charts mashups. He’s checking this in today. Free free to have at it from SVN. If you want to wait for the official release 1.8.3 is due out at the end of December.

December 11, 2007

Google Charts and Graphs

coreyg @ 3:23 pm

I am going to start posting tutorials and tips on our blog for your benefit of upcoming features for Deki Wiki 1.8.3.

The tutorial today is about the Google Charts and Graphs Deki Wiki extension.

Google Charts and graphs allow you to take comma separated values and display them in a variety of different ways.

Line Chart

The Line Chart script allows you to insert values into the following script to have a line chart display on your page:
{{ google.linechart( … ) }}

The line chart has the following values that can be changed:

  1. Width and height ex: 400, 200
  2. Chart values - This is the dataset that you want to plot on the chart ex: [[10,20,30,50,40],[40,50,30,20,10]]
  3. Legends (optional) - This is what you can name the data sets ex: ['fake','real']
  4. Colors (optional) - These are the colors of the lines ex: [ 'ff0000', '0000ff' ]

Here are the above example values inserted into the script.

{{ google.linechart(400, 200, [ [ 10, 20, 30, 50, 40 ], [ 40, 50, 30, 20, 10 ] ], [ 'fake', 'real' ], [ 'ff0000', '0000ff' ]) }}

This is what it looks like:

Google Line Chart

Bar Charts

If you want your data to be displayed as a bar chart then we will swap out the linechart in the beginning of the script with barchart

Also you can toggle with the horizonal/vertical aspect of the chart along with if the bars are next to each other or stacked using true and false values.

true,true = Vertical and stacked
true,false = Vertical and next to each other
false, true = Horizontal and stacked
false, false = Horizontal and next to each other

Here are examples of the barchart scripts with sample images below.

{{ google.barchart(400, 200, [ [ 10, 20, 30, 50, 40 ], [ 40, 50, 30, 20, 10 ] ], [ 'fake', 'real' ], [ 'ff0000', '0000ff' ], true, false) }}

Bar Chart - 2

{{ google.barchart(400, 200, [ [ 10, 20, 30, 50, 40 ], [ 40, 50, 30, 20, 10 ] ], [ 'fake', 'real' ], [ 'ff0000', '0000ff' ], false, true) }}

Bar Chart - 3

Pie Charts

Piecharts are a little different because it only requires one dataset and the last parameter is a boolean: True means that the pie chart will display in 3D and False means it will be displayed in 2D. Here are the values that are different:

labels (optional) - This is the same as Legend in Line and Bar chart ex: [ 'you', 'him', 'me' ]
colors (optional) - These are the colors of the lines (I use _ to keep the default colors)
threed (optional) - draw 3D chart default: true

Below are sample scripts with sample images below them.

{{ google.piechart(400, 200, [ 10, 20, 30 ], [ 'you', 'him', 'me' ], _, true) }}

Pie Chart 3d

{{ google.piechart(400, 200, [ 10, 20, 30 ], [ 'you', 'him', 'me' ], _, false) }}

2d Pie Chart

The Google Charts integration allows you to create pages that include dynamic charts that pertain to the content on the page, allowing you to create professional looking wiki pages for projects or presentations. Deki Wiki has numerous extensions that allow you to create dynamic pages that improve the visual appearance of your content. Let me know what other extensions you would like to see samples for.

December 9, 2007

Goin home, goin home

Aaron Fulkerson @ 9:29 pm

A great friend of mine and MindTouch left us today. Marc Orchant passed away earlier today. I’m deeply saddened. Marc Orchant is one of the most wonderful people I’ve met professionally. I spoke briefly of Marc at my personal blog after hearing the initial terrible news of Marc’s critical condition. Oliver Starr has been providing updates about Marc’s condition and has provided a final update as well as setup means of donating to Marc’s family.

Robert Hunter, whom Oliver quotes, says it best:

Marc Orchant

River gonna take me
Sing me sweet and sleepy
Sing me sweet and sleepy
all the way back home
It’s a far gone lullaby
sung many years ago
Mama, Mama, many worlds I’ve come
since I first left home

Goin home, goin home
by the waterside I will rest my bones
Listen to the river sing sweet songs
to rock my soul

Thank you for sharing your wisdom and for the friendship Marc. Mine and MindTouch’s thoughts are with Marc’s family.