<?xml version="1.0" encoding="iso-8859-1" ?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wiki="http://purl.org/rss/1.0/modules/wiki/" ><channel rdf:about="http://www.twiki.org/cgi-bin/view/Blog">
  <title>TWiki Blog - full RSS feed</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog</link>
  <description>TWiki is a Web-Based Collaboration Platform for the Enterprise.</description>
  <image rdf:resource="http://www.twiki.org/p/pub/TWiki/TWikiLogos/T-logo-140x40-t.gif" />
  <dc:language>en-us</dc:language>
  <dc:rights>Copyright 2012 by contributing authors</dc:rights>
  <dc:publisher>Peter Thoeny [peter09@thoeny.org]</dc:publisher>
  <dc:creator>The contributing authors of TWiki</dc:creator>
  <dc:source>TWiki</dc:source>
  <items>
    <rdf:Seq>
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x3" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x2" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x1" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201204x1" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201203x2" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201203x1" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201201x2" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201201x1" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201112x1" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x3" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x2" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x1" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x3" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x2" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x1" />
      <rdf:li rdf:resource="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201109x3" />
    </rdf:Seq>
  </items>
</channel>
<image rdf:about="http://www.twiki.org/p/pub/TWiki/TWikiLogos/T-logo-140x40-t.gif">
  <title>TWiki.org home.Blog</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog</link>
  <url>http://www.twiki.org/p/pub/TWiki/TWikiLogos/T-logo-140x40-t.gif</url>
</image>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x3">
  <title>Social Media Software: A Crowded Space - Not Just Facebook</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x3</link>
  <description> 
 <![CDATA[ <style type='text/css' media='all'>
.infoBoxWhatIs {
  float:right;
  width: 191px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxWhatIs">
<div style="color:#BD1C32; font-size: 25px; margin-bottom:15px">What is TWiki?</div>

<div style="text-align: justify; margin-top:10px; padding:0 5px">
A leading open source enterprise wiki and Web 2.0 application platform used by 50,000 small businesses, many Fortune 500 companies, and millions of people.<br />   Learn more.
</div>
</div>
Social Media is everywhere. As it is with many things, new technology is first pushed in the consumer space, then enters the enterprise market. Friday was a big event for social media when Facebook went public and was valued at $100B (that is a 1 with 11 zeros). Everybody defines social media differently. Wikipedia defines it currently as follows:
<p />
<blockquote>
Social media includes web-based and mobile based technologies which are used to turn communication into interactive dialogue between organizations, communities, and individuals. Andreas Kaplan and Michael Haenlein define social media as "a group of Internet-based applications that build on the ideological and technological foundations of Web 2.0, and that allow the creation and exchange of user-generated content." Social media is ubiquitously accessible, and enabled by scalable communication techniques.
</blockquote>
<p />
<div class="scrollBoxOuter" style="width: 300px; float: left; margin: 0 20px 10px 0;">
<div class="scrollBoxTitle" style=""> Social Media Landscape </div>
 <div class="scrollBoxContainer" style="height: auto; ">

 </div>
</div>
TWiki can be considered as part of social media if you take it broadly. Some call this space Enterprise Social Software (ESN), others call this Enterprise 2.0, others call this Social Business Software. Whatever you call it, I see TWiki as a <em>collaboration platform to get work done</em>. So the primary focus is work. It was like this since the beginning when I created the first TWiki application, a knowledge base for customer support. Today, some of the ESN vendors such as Yammer focus primarily on social, which is mainly micro blogging and news feeds. I find this useful to keep employees in synch, but a bit limiting because content is so transient. I will elaborate on this in a future blog post.
<p />
<div style="clear:right;"></div>
<style type='text/css' media='all'>
.infoBoxGettingInvolved {
  float:right;
  width: 190px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxGettingInvolved">
<div style="color:#BD1C32; font-size: 25px">Get Involved!</div>

<div style="text-align: justify; padding:0 5px">
TWiki is an open source project with 10+ years of history, built by a team of volunteers from around the world, and used by millions of people in over 100 countries. The community is focusing on building the best collaboration platform for the workplace. We invite you to get involved!
</div>
</div>
Back to social Media being everywhere: This space is very crowded - there are literally hundreds of providers, either in the cloud or as downloadable software. Business Insider has a blog, "INSANE Graphic Shows How Ludicrously Complicated Social Media Marketing Is Now", showing a very busy infographic of the social media landscape (also shown here - click to enlarge). The social media space is changing fast, and this infographic seems to be a bit outdated - why is Pinterest missing, and what is Friendster doing in there? The box for Social Business Software is in the lower left; TWiki is listed among 22 other ones. There are many more in this category - Gartner's 2011 Magic Quadrant of Social Software in the Workplace covers OpenText, Saba, Ektron, Liferay, XWiki and many additional ones.
<p />
This is an exciting space and time -- I invite you to join our community on TWiki.org to help create a kick ass product!
<p />
-- Peter Thoeny, founder of TWiki.org
<p />
<strong><em>References:</em></strong> <ul>
<li> http://en.wikipedia.org/wiki/Social_media - Social media on Wikipedia
</li> <li> http://www.businessinsider.com/social-media-marketing-landscape-complicated-2012-5 - Business Insider has a blog on "INSANE Graphic Shows How Ludicrously Complicated Social Media Marketing Is Now" 
</li> <li> http://blogs.perficient.com/portals/2011/09/05/gartner-magic-quadrant-on-social-software-in-the-workplace/ - blog showing Gartner's 2011 Magic Quadrant of Social Software in the Workplace
</li> <li> GettingInvolved - getting involved with TWiki ]]!&gt; 
</li></ul> 
(last changed by PeterThoeny) </description>
  <dc:date>2012-05-20T08:45:20Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x2">
  <title>Book: Information System Design Using TWiki</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x2</link>
  <description> 
 <![CDATA[ <div class="scrollBoxOuter" style="width: 500px; float: right; margin: 0 0 10px 20px;">
 <div class="scrollBoxContainer" style="height: auto; ">

 </div>
</div>
Book by PhilGochenour, XML Press, ISBN:978-0982219171, Apr 2012.
<p />
"Combining real-world experience with a veteran teacher’s ability to communicate, Phil Gochenour’s Information System Design Using TWiki demonstrates the basic principles behind any system design, whether it’s a cookbook or a software company’s wiki. Gochenour’s book builds an information system step by step, starting with the building block of all information systems, the topic, and continuing through metadata, search, to usability. With sample code that can be used to construct a complete, usable system on the TWiki wiki platform, Information System Design Using TWiki will help you harness the power of the TWiki wiki."
<p />
"Whether you are looking for a way to learn the basics of information system design, or are someone who works with TWiki on a daily basis and wants a handbook and more extensive user’s guide, this book is for you."
<p />
Above summary is from the publisher XML Press, http://xmlpress.net/publications/twiki/. The book can be purchased at Amazon.com and Barnes and Noble.
<p />
<div style="clear:right;"></div>
<style type='text/css' media='all'>
.infoBoxWhatIs {
  float:right;
  width: 191px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxWhatIs">
<div style="color:#BD1C32; font-size: 25px; margin-bottom:15px">What is TWiki?</div>

<div style="text-align: justify; margin-top:10px; padding:0 5px">
A leading open source enterprise wiki and Web 2.0 application platform used by 50,000 small businesses, many Fortune 500 companies, and millions of people.<br />   Learn more.
</div>
</div>
This is a relatively small book, it is nicely written and has a good flow. I am happy to see that the little known application feature of TWiki is explained in this book in easy terms, using real world examples. See also blog How to Create a TWiki Application.
<p />
-- Peter Thoeny, founder of TWiki.org and co-author of Wikis For Dummies book
<p />
<strong><em>Resources:</em></strong>
<p /> <ul>
<li> http://xmlpress.net/publications/twiki/ - book home at XML Press 
</li> <li> InformationSystemDesignUsingTWiki - book description on TWiki.org
</li> <li> WikisForDummiesBook
</li> <li> WikiReferences  ]]!&gt; 
</li></ul> 
(last changed by PeterThoeny) </description>
  <dc:date>2012-05-19T08:05:42Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x1">
  <title>How to Debug Networked Apps Using Tcpdump</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201205x1</link>
  <description> 
 <![CDATA[ I recently did yet another LDAP / Active Directory integration for a TWiki installation. LDAP has many knobs to turn, it can be challenging to configure it properly. In this case we had an issue where some users could authenticate, and others not. You can turn on debugging in the LdapContrib, but it did not help pinpointing the issue. TWiki communicates with the LDAP server over port 389. Wouldn't it be nice to see what gets sent back and forth across the network? That is where network monitoring comes into play.
<p />
<div style="border: none; margin: 3px 0 0 20px; float:right;">
<script type="text/javascript" src="http://www.twiki.org/p/pub/TWiki05x01/JQueryPlugin/jquery-ui.js"></script>
<script type='text/javascript'>
$(document).ready(function() {
 var $dialog = $('<div></div>')
  .html("")
  .dialog({
   autoOpen: false,
   title: "Sample tcpdump output",
   height: 505,
   width: 710,
modal: true,
  });
 $('#sample_tcpdump').click(function() {
  $dialog.dialog('open');
  return false;
 });
});
</script>
<button id='sample_tcpdump' class='twikiButton'></button>
</div>
There are many network monitoring utilities available to debug networked applications. The most common one is tcpdump, which is typically pre-installed on a Linux server. There is a port of tcpdump for Windows, it is called WinDump.
<p />
The tcpdump is a command line utility to analyze network packets. It allows one to intercept and display TCP/IP and other packets being transmitted or received over a network to which the server is attached. The tcpdump utility requires some basic knowledge of TCP/IP networking, but even without it one can guess what is going on.
<p />
In our case we wanted to find out why some users could not authenticate. As root user we run this command:
<p />
<code># tcpdump -vvv -A -i eth0 'port 389'</code>
<p />
The <code>-vvv</code> option turns on very verbose (aka noisy) output - there is also <code>-vv</code>, <code>-v</code> and none at all to reduce the noise. The <code>-A</code> option displays the packet content in plain ASCII. The last parameter in quotes specifies to monitor only traffic on port 389 of network interface eth0, e.g. the LDAP traffic we are interested in. There are many more parameters to tweak the monitoring settings - consult the man pages for details.
<p />
Analyzing the output we learned that users who could authenticate where queried against LDAP, but the ones who could not where not. This helped pinpoint the issue: Authentication failed if a user is not listed in the TWikiUsers topic.
<p />
There are other networking monitoring tools available for specific needs, see the related links below.
<p />
As a closing comment, network monitoring tools allow one to sniff network traffic. With power comes responsibility. Use it wisely and respectfully.
<p />
<strong><em>Related:</em></strong> <ul>
<li> http://www.tcpdump.org/tcpdump_man.html - tcpdump man page
</li> <li> http://en.wikipedia.org/wiki/Tcpdump - tcpdump on Wikipedia
</li> <li> http://techthrob.com/2010/07/26/how-to-monitor-network-traffic-in-linux/ - description of iftop and nethogs tools
</li> <li> http://ngrep.sourceforge.net/ - ngrep, a network packet analyzer
</li> <li> http://www.cyberciti.biz/tips/top-linux-monitoring-tools.html - linux monitoring tools - <strong><em>good list</em></strong> ]]!&gt; 
</li></ul> 
(last changed by PeterThoeny) </description>
  <dc:date>2012-05-14T08:14:47Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201204x1">
  <title>TWiki Screenshots: How to get work done using TWiki</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201204x1</link>
  <description> 
 <![CDATA[ TWiki.org has a new gallery of screenshots illustrating how TWiki is used to get work done. These screenshots just scratch the surface: TWiki has a lot of functionality, it can further be enhanced with hundreds of extensions.
<p />
The screenshots show some of the <strong><em>enterprise wiki</em></strong> functionality: The editing experience, user profile pages, admin functionality, and functions for power users. Some screenshots of TWiki applications demonstrate the <strong><em>application platform</em></strong> feature of TWiki. Finally there are screenshots showing how TWiki can be skinned to get a different look and feel. 
<p />
<p />
%THUMBNAIL{ image="twiki-screen-doc-view" title="Sample document page in view mode" }%
%THUMBNAIL{ image="twiki-screen-doc-edit" title="Sample document page in edit mode" }%
%THUMBNAIL{ image="twiki-screen-doc-edit-raw" title="Sample document page in raw edit mode" }%
%THUMBNAIL{ image="twiki-screen-user-list" title="User list, with filter" }%
%THUMBNAIL{ image="twiki-screen-user-list-twiki-org" title="User list on TWiki.org" }%
%THUMBNAIL{ image="twiki-screen-profile" title="User profile page" }%
%THUMBNAIL{ image="twiki-screen-profile-edit" title="User profile page in edit mode" }%
%THUMBNAIL{ image="twiki-screen-profile-picture" title="User profile page, modify profile picture" }%
%THUMBNAIL{ image="twiki-screen-add-web" title="Admin function: Add new web (workspace)" }%
%THUMBNAIL{ image="twiki-screen-access-control" title="Admin function: Group for access control" }%
%THUMBNAIL{ image="twiki-screen-stats" title="Admin function: Site statistics" }%
%THUMBNAIL{ image="twiki-screen-backup" title="Admin function: Site backup" }%
%THUMBNAIL{ image="twiki-screen-admin-user" title="Admin function: User data management" }%
%THUMBNAIL{ image="twiki-screen-presentation" title="For power users: TWiki presentation mode, I/O architecture example" }%
%THUMBNAIL{ image="twiki-screen-docgraphics" title="For power users: 300+ document graphics icons" }%
%THUMBNAIL{ image="twiki-screen-plugins" title="For power users: 400+ extensions on TWiki.org" }%
%THUMBNAIL{ image="twiki-screen-chartplugin" title="For power users: Charts with ChartPlugin" }%
%THUMBNAIL{ image="twiki-screen-spreadsheet" title="For power users: Over 100 spreadsheet functions" }%
%THUMBNAIL{ image="twiki-screen-sample-app" title=" Sample TWiki app: Contact DB using TML (TWiki Markup Language)" }%
%THUMBNAIL{ image="twiki-screen-sample-app-geolocation" title="Sample TWiki app: Gelocation with Google map" }%
%THUMBNAIL{ image="twiki-screen-sample-app-blog" title="Sample TWiki app: Blog application with sample blog" }%
%THUMBNAIL{ image="twiki-screen-sample-app-thumbnails" title="Sample TWiki app: Thumbnails with parameterized variables (these screenshots here)" }%
%THUMBNAIL{ image="twiki-screen-skin-windriver" title="Sample TWiki skin: TWiki Intranet at Wind River in California" }%
%THUMBNAIL{ image="twiki-screen-skin-pixar" title="Sample TWiki skin: Pixar RenderMan in California" }%
%THUMBNAIL{ image="twiki-screen-skin-wikipac" title="Sample TWiki skin: WIKIPAC in Brazil" }%
%THUMBNAIL{ image="twiki-screen-skin-loop" title="Sample TWiki skin: Loop.ph in London" }%
%THUMBNAIL{ image="twiki-screen-skin-xamanismo" title="Sample TWiki skin: Xamanismo in Brazil" }%
%THUMBNAIL{ image="twiki-screen-skin-futuremelbourne" title="Sample TWiki skin: Future of Melbourne in Australia" }%
%THUMBNAIL{ image="twiki-screen-skin-orchestra" title="Sample TWiki skin: Orchestra TU Braunschweig in Germany" }%
%THUMBNAIL{ image="twiki-screen-skin-high5s" title="Sample TWiki skin: High 5's by World Health Organization (WHO)" }%
<div style="clear:both"></div>
<!-- <ul>
<li> Set THUMBNAIL = 
</li></ul> 
-->
<p />
See all TWiki screenshots.
<p />
<strong><em>Related:</em></strong> What is TWiki, public TWiki sites, Structured Wikis at Work - Enterprise 2.0 in Action
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2012-04-27T18:47:18Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201203x2">
  <title>Public TWiki Sites</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201203x2</link>
  <description> 
 <![CDATA[ TWiki as an Open Source Enterprise Wiki and Web 2.0 Application Platform is primarily designed to be used at the workplace. Millions of people in over 50,000 organizations use TWiki at work, from small deployments to some large ones that have several 100,000 pages and over 10,000 users.
<p />
Most TWiki sites are access restricted, nevertheless there are also many public TWiki sites. Here are a few examples.
<p />
<table cellspacing="0" id="table1" cellpadding="10" class="twikiTable" rules="all" border="1">
		<tr class="twikiTableOdd twikiTableRowdataBgSorted0 twikiTableRowdataBg0">
			<th width="1" bgcolor="#dddde0" valign="top" class="twikiTableCol0 twikiFirstCol"> <font color="#ffffff"></font> </th>
			<td width="200" bgcolor="#ffffff" valign="top" class="twikiTableCol1"> %IMGLINK{ URL="http://renderman.escapestudios.com/renderman/bin/view/Main/WebHome" IMG="pixar-renderman" }% </td>
			<td width="250" bgcolor="#ffffff" valign="top" class="twikiTableCol2"> RenderMan TWiki, Escape Studios, Pixar, Disney </td>
			<th width="1" bgcolor="#dddde0" valign="top" class="twikiTableCol3"> <font color="#ffffff"></font> </th>
			<td width="200" bgcolor="#ffffff" valign="top" class="twikiTableCol4"> %IMGLINK{ URL="http://www.futuremelbourne.com.au/" IMG="futuremelbourne" }% </td>
			<td width="250" bgcolor="#ffffff" valign="top" class="twikiTableCol5"> Nice case study of a public TWiki. Look for the PDF in "Future Melbourne Wiki Post-Implementation Review" section. </td>
			<th width="1" bgcolor="#dddde0" valign="top" class="twikiTableCol6 twikiLastCol"> <font color="#ffffff"></font> </th>
		</tr>
		<tr class="twikiTableEven twikiTableRowdataBgSorted1 twikiTableRowdataBg1">
			<th width="1" bgcolor="#dddde0" valign="top" class="twikiTableCol0 twikiFirstCol"> <font color="#ffffff"></font> </th>
			<td width="200" bgcolor="#edf4f9" valign="top" class="twikiTableCol1"> %IMGLINK{ URL="http://loop.ph/bin/view/Loop/WebHome" IMG="loop-ph" }% </td>
			<td width="250" bgcolor="#edf4f9" valign="top" class="twikiTableCol2"> Loop.pH: Example of nicely skinned TWiki by a design studio in London </td>
			<th width="1" bgcolor="#dddde0" valign="top" class="twikiTableCol3"> <font color="#ffffff"></font> </th>
			<td width="200" bgcolor="#edf4f9" valign="top" class="twikiTableCol4"> %IMGLINK{ URL="http://collaborate.nist.gov/twiki-cloud-computing/bin/view/CloudComputing/WebHome" IMG="nist-cloud" }% </td>
			<td width="250" bgcolor="#edf4f9" valign="top" class="twikiTableCol5"> NIST Cloud Computing Collaboration site, used to develop standards and guidelines for the government’s quick and secure adoption of cloud computing. </td>
			<th width="1" bgcolor="#dddde0" valign="top" class="twikiTableCol6 twikiLastCol"> <font color="#ffffff"></font> </th>
		</tr>
		<tr class="twikiTableOdd twikiTableRowdataBgSorted0 twikiTableRowdataBg0">
			<th width="1" bgcolor="#dddde0" valign="top" class="twikiTableCol0 twikiFirstCol twikiLast"> <font color="#ffffff"></font> </th>
			<td bgcolor="#ffffff" colspan="5" valign="top" class="twikiLast">  See more samples of public TWiki sites. </td>
			<th width="1" bgcolor="#dddde0" valign="top" class="twikiTableCol6 twikiLast"> <font color="#ffffff"></font> </th>
		</tr></table>
<!-- <ul>
<li> Set IMGLINK = 
</li></ul> 
-->
<p />
<strong><em>See also:</em></strong>
<br />  &nbsp; &nbsp;  What is TWiki
<br />  &nbsp; &nbsp;  Structured Wikis at Work - Enterprise 2.0 in Action presentation
<br />  &nbsp; &nbsp;  Getting Involved with the Community
<br />  &nbsp; &nbsp;  Download TWiki
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2012-03-29T08:02:41Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201203x1">
  <title>TWiki Foundation Plan &amp; Personal Change for TWiki Founder</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201203x1</link>
  <description> 
 <![CDATA[ TWiki was born as a collaborative project 14 years ago. The TWiki project changed the workplace for many people in a fundamental way, bringing more transparency, accountability and flexibility to the workplace. In the last release meeting we briefly discussed the idea of creating a foundation for the open source TWiki project. I believe it is time to initiate a foundation so that we can get broader participation by the community.
<p />
I would also like to share some related news with the TWiki community: After long consideration I decided to leave Twiki Inc, the company. I enjoyed tremendously working with very dedicated and professional folks. So it is hard to depart from a company I co-founded 5 years ago. I am leaving the company for two reasons: Family and TWiki.org community. I'd like to be able to better take care for my family. In the interim I will do consulting, and I am looking for a new opportunity that matches my skill set.
<p />
I also want to be able to focus more on the TWiki.org community, which I believe I am now in a much better position to serve. Over the last three years I have been trying very hard to increase the open source community. We had some success, but too little in my opinion. I see several reasons for this. In October 2008 we relaunched the TWiki.org project with an Ubuntu style governance model. This brought more focus to the project (some contributors who disagreed departed), and brought professionalism to the community. The rock solid releases we had since then attest that this model works. This governance model also meant that <em>one</em> company is supporting and nurturing the community. Unfortunately the company was never in the position to substantially support the community, and there was a perception that "the community is taken care of" resulting in other companies not to get involved, which was an unfavorable position for the community to be in. I see this as the biggest reason for missing out on more community engagement. I'd like to tweak our processes to make TWiki.org an attractive place for geeks, consultants and companies using TWiki to contribute on a regular basis.
<p />
What if we establish a structure where companies can easily support the project, either monetary or with geek power? Think Eclipse model. What if we establish a structure where consultants are incentivized to contribute because they can make money doing so? Think certification program.
<p />
Which brings me back to the TWiki foundation question. If we create a foundation or join an existing foundation we can define a structure where TWiki.org becomes an attractive place to hang out and engage. This is an opportunity to strengthen the community.
<p />
Opinions? I invite you to participate and discuss this in our upcoming TWiki Jerusalem Release Meeting on 2012-03-02, which is this Thursday or Friday depending on your time zone.
<p />
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2012-03-01T05:10:20Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201201x2">
  <title>TWiki.org Blackout to Fight Internet Censorship a Success</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201201x2</link>
  <description> 
 <![CDATA[ On Tuesday I was asked if TWiki.org was going to participate in today's blackout campaign to protest against SOPA and PIPA, the legislation to combat piracy currently in discussion in Washington DC. I first intended to just add a yellow box on the homepage asking to contact a representative to oppose these legislative bills, because they would censor the Internet and stifle innovation.
<p />
There is a lot of coverage on the issue. I found these two most striking:
<p />
1. TED talk by Clay Shirky: Defend our freedom to share (or why SOPA is a bad idea): http://bit.ly/w9s7D5 - this is the best articulation I have seen so far why it is important to keep the internet open:<br /> 
<center>
<object width="526" height="374">
<param name="movie" value="http://video.ted.com/assets/player/swf/EmbedPlayer.swf"></param>
<param name="allowFullScreen" value="true" />
<param name="allowScriptAccess" value="always"/>
<param name="wmode" value="transparent"></param>
<param name="bgColor" value="#ffffff"></param>
<param name="flashvars" value="vu=http://video.ted.com/talk/stream/2012S/Blank/ClayShirky_2012S-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/ClayShirky_2012S-embed.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=1329&amp;lang=en&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=defend_our_freedom_to_share_or_why_sopa_is_a_bad_idea;year=2012;theme=master_storytellers;theme=media_that_matters;event=TEDSalon+NY2012;tag=Business;tag=Technology;tag=creativity;tag=media;tag=politics;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;" />
<embed src="http://video.ted.com/assets/player/swf/EmbedPlayer.swf" pluginspace="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent" bgColor="#ffffff" width="526" height="374" allowFullScreen="true" allowScriptAccess="always" flashvars="vu=http://video.ted.com/talk/stream/2012S/Blank/ClayShirky_2012S-320k.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/ClayShirky_2012S-embed.jpg&amp;vw=512&amp;vh=288&amp;ap=0&amp;ti=1329&amp;lang=en&amp;introDuration=15330&amp;adDuration=4000&amp;postAdDuration=830&amp;adKeys=talk=defend_our_freedom_to_share_or_why_sopa_is_a_bad_idea;year=2012;theme=master_storytellers;theme=media_that_matters;event=TEDSalon+NY2012;tag=Business;tag=Technology;tag=creativity;tag=media;tag=politics;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;"></embed>
</object>
</center>
<p />
2. Tim O'Reilly blog: SOPA and PIPA are bad industrial policy: http://oreil.ly/yRhkFE - Tim takes the perspective of the market and competition.
<p />
Today Wednesday, 2012-01-18 (coincidentally my birthday) is a big day where thousands of website went on strike and either completely blacked out their website, or made them partially inaccessible. The biggest site that had a complete blackout was the English Wikipedia, which went black for 24 hours from midnight to midnight US Eastern time after debating it with the Wikipedia community.
<p />
<center>

</center>
<p />
Based on a casual observation on Facebook and Twitter, probably the biggest impact made Google: Even though they only blacked out their logo with a link pointing to a page to take action, they collected 4.5 million anti-SOPA signatures today.
<p />
<center>

</center>
<p />
With TWiki.org community support I decided to completely blackout all 118,000 TWiki.org pages for 24 hours. We went on strike on 01:00am US Eastern time for 24 hours. In that period we had over 50,000 page views, with each page containing a message asking to contact Congress:
<p />
<center>

</center>
<p />
Here is the message to the member of Congress:
<blockquote>
I am writing to you as a voter in your district. I urge you to vote "no" on cloture for S. 968, the PROTECT IP Act, on Jan. 24th. The PROTECT IP Act is dangerous, ineffective, and short-sighted. It does not deserve floor consideration.  I urge my representative to vote "no" on SOPA, the corresponding House bill. 
<p />
Over coming days you'll be hearing from the many businesses, advocacy organizations, and ordinary Americans who oppose this legislation because of the myriad ways in which it will stifle free speech and innovation.  We hope you'll take our concerns to heart and oppose this legislation by voting "no" on cloture.
</blockquote>
<p />
As a result of the coordinated protest against these bills by thousands of websites today, USA Today reported that several senators backed down from supporting the bills. Success, at least for now!
<p />
Thanks all for all the support you gave to keep the Internet open!
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2012-01-19T07:46:45Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201201x1">
  <title>New TWiki-5.1.1 Release: Easy to Use, Easy to Upgrade</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201201x1</link>
  <description> 
 <![CDATA[ <em>Great work, TWiki.org team! Year over year you create rock solid code. You guys rock!</em>
<p />
<div style="float:right; width:250px; margin:0 0 5px 15px">

</div>
We just released TWiki-5.1.1 aka Istanbul Release. A big THANK YOU to everybody who contributed to this release! And special thanks to our release manager GeorgeTrubisky who built this release. We invite developers who appreciate to work on quality code to join us, get involved!
<p />
TWiki-5.1.1 is now available for download from the http://twiki.org/ website. This is a patch release that adds some minor new features and fixes a number of bugs. As for the last three years, this new release is well tested and is very stable. Upgrade is recommended to this TWiki-5.1.1 release.
<p />
This release supersedes TWiki-5.1.0, which introduced many usability enhancements, such as point and click user data management, more visual user profile pages with picture selector, and a backup feature to help upgrade TWiki sites. TWiki-5.1 also strengthens TWiki as an application platform to more easily build custom wiki applications.
<p />
<strong>Morgan Stanley has Globally Replicated Intranet TWiki With 30,000 Users:</strong>
<p />
<div style="float:right; width:400px; margin:0 0 5px 15px">

</div>
Recently, TWiki contributor HideyoImazu, who is VP of IT at Morgan Stanley submitted a technical article on their deployment of TWiki. You can read the TWiki Success Story of Morgan Stanley and the related blog post, but here is an interesting quote by Imazu-san:
<p />
<blockquote>
"Our TWiki has a very good track record of availability. It kept working as usual when one data center was lost. When another data center outage happened, TWiki stopped working because the network attached storage was lost despite the high availability design. But TWiki recovered faster than the other content management platforms.
<p />
There are internal users who don't want to put their content on other content management platforms than TWiki because other platforms don't provide high enough availability." 
</blockquote>
<p />
<strong>TWiki-5.1 Community Release Feature Highlights:</strong>
<p />
New features in the patch release are marked as "added in TWiki-5.1.1".
<p />
<div style="float:right; width:400px; margin:0 0 5px 15px">

</div> <ul>
<li> <strong>Usability Enhancements</strong> <ul>
<li> API and GUI for point and click user data management
</li> <li> Support disabled users in password manager
</li> <li> More visual user profile pages with in-place editing of form fields and picture selector
</li> <li> In-place editing of TWiki group settings using PreferencesPlugin
</li> <li> Point and click bookmarks for better usability
</li> <li> Improved statistics showing overall site usage over time, such as total number of webs, topics, users, etc
</li></ul> 
</li> <li> <strong>TWiki Application Platform Enhancements</strong> <ul>
<li> Macro language with parameterized variables
</li> <li> Ability to auto-create page on view if it does not exist
</li> <li> Relative heading levels for INCLUDE        <div style="float:right; width:200px; margin:0 0 5px 15px"></div>
</li> <li> Relative heading levels for SEARCH
</li></ul> 
</li> <li> <strong>Security Enhancements</strong> <ul>
<li> Set a flag to force password change on next login
</li> <li> S/Mime support for notification e-mails
</li></ul> 
</li> <li> <strong>Plugin Enhancements</strong> <ul>
<li> New BackupRestorePlugin to easily backup, restore and upgrade TWiki installations
</li> <li> BackupRestorePlugin: Add restore from backup feature - added in TWiki-5.1.1
</li> <li> New SetGetPlugin that can store variables persistently
</li> <li> New ColorPickerPlugin to pick a color in form fields
</li> <li> SpreadSheetPlugin: New functions BITXOR(), HEXENCODE(), HEXDECODE(), XOR()
</li> <li> SpreadSheetPlugin: New functions FLOOR() and CEILING() - added in TWiki-5.1.1
</li></ul> 
</li></ul> 
<p />
See more details and screenshots of the TWiki-5.1 release.
<p />
<strong>Easy to Backup, Restore and Upgrade TWiki:</strong>
<p />
<div style="float:right; width:400px; margin:0 0 5px 15px">

</div>
TWiki has now a solution to backup, restore and upgrade TWiki sites. It can be used via browser and on the command line. Backup can be done as a scheduled task to a directory of choice, including a mounted volume on a remote server. TWiki-5.1.1 now ships with an updated BackupRestorePlugin, which allows one to easily upgrade a TWiki site. The plugin can be installed in older TWiki releases as low as TWiki-2001-09-01 (Athens Release) to easily create a backup that can be restored on a new TWiki release. See overview with screenshot.
<p />
<strong>How You Can Help: Spread the Word!</strong>
<p />
<div style="float:right; width:300px; margin:0 0 5px 15px">

</div>
Word of mouth is a good way of spreading TWiki - your help is greatly appreciated! More exposure means more contributions, and a better system! Please spread the word in Facebook, LinkedIn, Twitter, blogs etc. You can point your connections to this blog post (at http://twiki.org/cgi-bin/view/Blog/BlogEntry201201x1) - short link is http://bit.ly/twRel511.
<p />
Sample tweet you could use:
<blockquote>
New TWiki-5.1.1 release available: Enterprise Collaboration. Rock Solid. Usable. Easy. Fun: http://bit.ly/twRel511 #e20 #enterprise #wiki
</blockquote>
<p />
Your help in spreading the word of the new release is greatly appreciated!
<p />
Let us know what you think of this new release! 
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2012-01-16T23:57:42Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201112x1">
  <title>TWiki I/O Architecture Explained</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201112x1</link>
  <description> 
 <![CDATA[ TWiki as an enterprise wiki is frequently used across many teams in an organization. Over time more and more content is maintained in TWiki. Teams use many other enterprise systems in their daily activities, such as bug trackers in Engineering, CRM and ERP systems in Sales, and inventory systems in IT. With this there is a need to make these systems talk to each other. When an enterprise wiki is used as an intranet it lends itself to become the platform to glue these enterprise systems together.
<p />
Let's take an example: A major customer, Acme Systems, orders a custom firewall hardware product. The Sales folks keep track of the sales opportunity in Salesforce, and Engineering uses FogBugz for change management and bug tracking. Engineers typically do not have access to Salesforce, and Sales folks do not have access to FogBugz. Status updates are sent by e-mail and change requests are coordinated using e-mail, which is ineffective and error-prone. In this scenario it makes sense to tear down the silos and create a dashboard where Sales and Engineering can go to one place to see up to date information on this sales order.
<p />
TWiki as an enterprise wiki and application platform lends itself to create team dashboards and project dashboards that bring teams together. There are many ways to integrate enterprise systems in TWiki as shown in this TWiki I/O architecture diagram:
<p />
<div style="float:left; width:624px; padding:0 20px 10px 0">

</div>
TWiki content (wiki pages, attachments) and TWiki applications reside in the data layer, shown in the middle in yellow. Wiki pages and attachments are typically unstructured. TWiki is a structured wiki, meaning is a platform that allows teams to create TWiki applications to structure content. Application developers use TML (TWiki Markup Language), HTML,CSS and JavaScript to create TWiki applications, such as project dashboards, status reporting systems, or inventory applications. These applications might store data internally in TWiki, or they might pull or store data in an external database.
<p />
<div style="clear:both"></div>
This diagram shows how TWiki applications can interact with other enterprise systems. Let's start from top left and go clockwise.
<p />
<div style="float:right; width:165px; padding:0 0 10px 20px">
     
</div>
<strong><em>1. Reports:</em></strong>
<p />
If content is stored in a structured format in TWikiForms based applications it is easy to create reports. Reports are formatted searches that can be SQL-like or regular expressions. The output can be formatted to be HTML, JSON, CSV, or any form of XML, such as RSS or ATOM.
<p />
Learn how to export TWiki data in CSV format for use in Excel.
<p />
<div style="clear:both"></div>
<div style="float:right; width:193px; padding:0 0 10px 20px">
     
</div>
<strong><em>2. Web Applications:</em></strong>
<p />
Many web applications have an API to interact with other web applications or with a server.
<p />
AJAX is a technology to interact with a server so that web pages can be partially updated without reloading the whole page. There is a TWiki.org blog that explains how Ajax works, it also has a TWiki specific Ajax example.
<p />
TWiki has a REST API. REST (REpresentative State Transfer) is a technique for implementing web services using XML documents plus standard HTTP, using its well-known operations (PUT, GET, POST, DELETE). TWiki has a preliminary RestPlugin. Any help in improving this plugin is appreciated; we invite developers to get involved with the TWiki community.
<p />
<div style="clear:both"></div>
<div style="float:right; width:140px; padding:0 0 10px 20px">
     
</div>
<strong><em>3. IFrame:</em></strong>
<p />
An iframe allows you to embed a web page in another web page. This is a convenient way to quickly mash up a dashboard that pulls data together from other web pages. Let's say you have a web-based bug tracker that has a page that shows a summary of recently updated bug items. You can embed that page in a team dashboard easily with an iframe. However, there is not much control over the format, if any. More work is involved if you want to have content shown in a specific format. This can be done with web applications that use REST, Ajax or database calls to query and format the data.
<p />
TWiki.org has an iframe example where you can learn how iframes work.
<p />
<div style="clear:both"></div>
<div style="float:right; width:220px; padding:0 0 10px 20px">
     
</div>
<strong><em>4. Transclusions:</em></strong>
<p />
Transclusion is the inclusion of a page or part of a page into another web page by reference. For example, you might want to show an RSS feed in a TWiki page that mentions your company. This can be done with the HeadlinesPlugin.
<p />
It is also possible to INCLUDE an external page or part of an external page in a TWiki page. You can apply a regular expression to include part of an external page, which is also called screen scraping. Screen scraping can be done quickly, but it can be fragile because it may brake if the format of the included page changes.
<p />
Let's look at an example: Show me the title of RFC:4180 embedded in a TWiki page! We include the RFC page and apply a regular expression that pulls out only the title and discards the rest of the page:
<pre>
  RFC:4180:
  &#37;INCLUDE{
   &#34;http://tools.ietf.org/html/rfc4180&#34;
   pattern&#61;&#34;.&#42;?&#60;span class&#61;\&#34;h1\&#34;&#62;(.&#42;?)&#60;/span&#62;.&#42;&#34;
  }&#37;
</pre>
Which results in the following output:
<div style="background-color:#f4f4f8; padding:5px 10px">
RFC:4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files 
</div>
<p />
Transclusions can also be data driven using URL parameters. Let's assume there is a website that returns the city name for a ZIP code using a URL parameter, such as <code>http://example.com/zip2city?zip=10001</code>. Assuming the ZIP code is supplied via a URL parameter to the current TWiki page, it is possible to pass that along to the included page:
<pre>
  City for ZIP code &#37;URLPARAM{ &#34;zip&#34; encode&#61;&#34;moderate&#34; }&#37;:
  &#37;INCLUDE{
   &#34;http://example.com/zip2city?zip&#61;&#37;URLPARAM{ &#34;zip&#34; encode&#61;&#34;url&#34; }&#37;&#34;
   pattern&#61;&#34;.&#42;?&#60;h1&#62;(.&#42;?)&#60;/h1&#62;.&#42;&#34;
  }&#37;
</pre>
Which results in the following sample output:
<div style="background-color:#f4f4f8; padding:5px 10px">
City for ZIP code 10001: New York
</div>
<p />
Learn more and see some examples on how to include topics and web pages.
<p />
<strong><em>5. Plugins API:</em></strong>
<p />
<div style="clear:both"></div>
<div style="float:right; width:225px; padding:0 0 10px 20px">
     
</div>
TWiki has an extensive plugins API that has been enhanced over man years. Over time hundreds of plugins have been created; the ones that have been contributed back to the community are listed in the plugins repository on TWiki.org. Some of these plugins are designed to interface with external systems.
<p />
Two plugins handle database connectivity. Both, the DatabasePlugin and the DBIQueryPlugin, allow you to interact with almost any relational database, provided the proper driver is installed. It is possible to embed a SQL query in a TWiki page and format the result as a table. For example, an Engineering team might want to show a graph that indicates bug trends of their product. This can be done as follows: The ChartPlugin is pointed to a dynamically generated table that is produced by a SQL query embedded in the TWiki page.
<p />
<strong><em>6. Other Systems:</em></strong>
<p />
Tools that have a command line interface can interact with TWiki in two ways. First, Perl scripts can directly interact with the TWiki::Func API to interact with TWiki content. Scripts can also interact with a custom API a TWiki plugin may provide, which can be done over pipe, sockets or RPC.
<p />
<div style="clear:both"></div>
<div style="float:right; width:186px; padding:0 0 10px 20px">
     
</div>
<strong><em>7. Add-on Scripts:</em></strong>
<p />
Third-party scripts can be used to push content into TWiki. WebFetch is one such tool that provides a framework for retrieving information from web sites to export to other sites, including TWiki. Say, instead of showing an RSS feed or ATOM feed in a TWiki page, you want to push RSS or ATOM content into TWiki in a structured way so that it is possible to query the content in TWiki. For example, a marketing team might want to have a permanent record of news sites and blogs that mention their product. TWiki's WebFetch add-on is designed to push external website content into TWikiForms based pages, which makes it easy to query the data in TWiki.
<p />
<div style="clear:both"></div>
<div style="float:right; width:174px; padding:0 0 10px 20px">
     
</div>
<strong><em>8. Mail Integration:</em></strong>
<p />
TWiki has outbound mail integration by default. This is used to alert users of recent changes (subscribe in WebNotify in any TWiki web), and to verify e-mail addresses when creating a TWiki account.
<p />
Inbound e-mail integration is possible with the MailInContrib. For some applications it useful to push e-mail content into TWiki. For example, in a TWiki based CRM or support ticket system you might want to CC TWiki to push customer interaction into TWiki.
<p />
<div style="clear:both"></div>
<div style="float:right; width:179px; padding:0 0 10px 20px">
     
</div>
<strong><em>9. Authentication:</em></strong>
<p />
Users do not want to be bothered with multiple accounts and logins when looking at a dashboard, or when interacting with a TWiki application. Many organizations use Active Directory (AD) or an LDAP server so that the employees can login to various systems with the same username and password. TWiki has an LDAP integration to authenticate users against AD or LDAP. It is also possible to use single sign-on where users authenticate just once across various web-based systems.
<p />
To summarize, TWiki lends itself to glue enterprise systems together, e.g. to tear down silos. Many plugins and add-ons are available so that you do not need to reinvent the wheel.
<p />
Do you have silos in your organization? What kind of integration challenges do you face?
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2011-12-21T01:34:37Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x3">
  <title>Case Study: How 10,000 Researchers at CERN Collaborate Using TWiki</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x3</link>
  <description> 
 <![CDATA[ <style type='text/css' media='all'>
.infoBoxWhatIs {
  float:right;
  width: 191px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxWhatIs">
<div style="color:#BD1C32; font-size: 25px; margin-bottom:15px">What is TWiki?</div>

<div style="text-align: justify; margin-top:10px; padding:0 5px">
A leading open source enterprise wiki and Web 2.0 application platform used by 50,000 small businesses, many Fortune 500 companies, and millions of people.<br />   Learn more.
</div>
</div>
CERN, the European Organization for Nuclear Research, is one of the world's largest and most respected centres for scientific research. At the European Laboratory for High Energy Physics, the Large Hadron Collider (LHC) accelerator is colliding beams of protons at energies of 3.5 TeV, recreating conditions close to those at the origin of the Universe. The four main LHC experiments, Alice, Atlas, CMS and LHCb are complex detectors with millions of output channels. These experiment detectors, &ldquo;large as cathedrals&rdquo;, have been designed, built and are now operated by collaborations of physicists from universities and research institutes spread across the world.
<p />
Wikis are a perfect match to the collaborative nature of CERN experiments and since TWiki was installed at CERN in 2003 it has grown in popularity, and the statistics from September 2011 show nearly 10,000 registered editors and about 110,000 topics. TWiki runs on Linux machines with the Apache web server and is written in Perl and so was easily installed on typical CERN computers. The TWiki service quickly became popular at CERN following its introduction and as the following figures show the number of users and topics has grown at a steady rate over the past years.
<p />
<table border="0"> <tbody> <tr><th>&nbsp; &nbsp;</th> <th>Registered users: Sep 2011</th> <th>&nbsp; &nbsp;</th> <th>TWiki topics at CERN Sep 2011</th> </tr> <tr> <td></td> <td></td> <td></td> <td></td> </tr> </tbody> </table>
<p />
<div style="float: right; width: 400px; margin: 5px 0 10px 20px;">

</div>
<strong>Use Cases</strong>
<p />
The Atlas collaboration consists of 3000 physicists from more than 174 institutes in 38 countries on 5 continents. These collaborators need efficient means of communicating information. To this end, Atlas has enthusiastically embraced TWiki since 2004 and now has over 14,000 web pages some of which are world readable containing technical information about Atlas as well as protected ones for physics preparations and results. New pages are created at a rate of 150/month and averaging over 10,000 updates a month. Atlas creates workbooks with TWiki and the application's working environment allows their users to contribute to the development and maintenance of the documents.
<p />
<div style="clear:right"></div>
<div style="float: right; width: 400px; margin: 5px 0 10px 20px;">

</div>
 CMS (The Compact Muon Solenoid detector) also uses TWiki for creating software guides and workbooks and makes use of the PDF creation feature that allows a one click creation of an entire book. They also benefit from the dynamic web page creation features and implement virtual blackboards that can be written on by users from all around the world. Both the Atlas and CMS experiment collaborations employ specific review processes to ensure that Wiki content is maintained and current. Certification features are used to ensure document integrity and authors are reminded by email to check the validity of information in their pages, in case it has not been updated by one of their peer researchers.
<p />
<strong>Problems and Solutions</strong>
<p />
<strong><em>Performance and search issues</em></strong>
<p />
The increasing number of people using TWiki had an effect on the system CPU load and resulted in slower page response times especially for searches. New hardware with more CPU power and memory corrected these performance issues. The TWiki data back-end was initially on AFS (Andrew File System) that has a limit on the number of files in a particular directory. TWiki now runs on a dedicated cluster of powerful machines and the TWiki data storage was migrated to NFS 4 on NetApp servers. In order to overcome issues with load-peaks caused by use of the internal TWiki search (based on grep), the FAST search engine (Now Microsoft Enterprise Search) in use at CERN for organization wide web-search, was adapted for use within TWiki. This allows for efficient search on protected data, yet retaining full access control to the content.
<p />
<strong><em>Data protection versus collaboration</em></strong>
<p />
<div style="clear:right"></div>
<div style="float: right; width: 400px; margin: 5px 0 10px 20px;">

</div>
TWiki culture lends to open free-form editing and most pages are world-readable and editable by CERN authenticated users. The experiments benefited from this ease of use and openness. Now integrated with the CERN Single Sign On authentication system external users can edit TWiki documents, which has led to the need for a user vetting procedure.
<p />
Since the LHC accelerator has started to provide physics results, researchers felt that some of the data should be protected and made available only to their users. Various levels of access control have been requested from the many small and large projects using TWiki.
<p />
TWiki has a system of access control based on specifying which users or groups of users can view and edit documents but this is difficult to manage for large groups. To group users CERN uses a concept called 'e-groups' for many other applications and these are managed by the experiments themselves and by CERN's HR department. By integrating e-groups into TWiki, the experiments can now easily manage the access control. Users are frequently joining or leaving experiments or moving from one group to another and so these e-groups are updated regularly to ensure that users have the correct rights when accessing a document.
<p />
<strong><em>Lifc-cycle of documentation</em></strong>
<p />
<div style="clear:right"></div>
<div style="float: right; width: 400px; margin: 5px 0 10px 20px;">

</div>
With regards to the life-cycle of Wiki pages and Webs, we have seen that the large LHC experiment collaborations keep their information alive and have active maintainers for house-keeping. For smaller projects and groups, the trend has been to use a TWiki web for the duration of the project or until the group is re-organized. New groups or projects have often started from scratch with a new TWiki web, instead of updating and evolving the pages of their predecessors. This split in terms of methodology is interesting, and mirrors the work habits of CERN departmental groups versus that of global collaborations with many visitors and short term contributors.
<p />
<strong>Conclusions</strong>
<p />
TWiki has proven to be a simple and easy tool to use for the creation and development of collaborative documents. The Wiki approach is a perfect match to the collaborative nature of the experiment communities at CERN. New members of the LHC experiments can easily access information and do not need to follow a course in order to contribute.
<p />
-- Peter Jones, system administrator at CERN - 2011-11-14
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2011-11-15T01:17:37Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x2">
  <title>How to Export TWiki Data in CSV Format for Use in Excel</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x2</link>
  <description> 
 <![CDATA[ <style type='text/css' media='all'>
.infoBoxGettingInvolved {
  float:right;
  width: 190px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxGettingInvolved">
<div style="color:#BD1C32; font-size: 25px">Get Involved!</div>

<div style="text-align: justify; padding:0 5px">
TWiki is an open source project with 10+ years of history, built by a team of volunteers from around the world, and used by millions of people in over 100 countries. The community is focusing on building the best collaboration platform for the workplace. We invite you to get involved!
</div>
</div>
Sometimes it is desirable to export TWiki forms based data from TWiki applications. CSV (comma-separated_values) is a simple file format that is widely supported by many applications, including spreadsheet programs such as Excel. This blog introduces the CSV format and explains how to generate a CSV file on the fly in a TWiki application.
<p />
The CSV format is not clearly defined, there is no real CSV standard. In common usage almost any delimiter-separated text data may be referred to as a CSV file. Traditionally, however, lines in the text file represent rows in a table, and commas separate the columns. This traditional understanding is defined in RFC 4180, which is the best known effort to formalize a CSV standard.
<p />
In its most basic form, each record is a line, and fields are separated by a comma. Here is an example that contains a header row representing the field names, and two records:
<p />
<pre>
First name,Last name,Age
Jimmy,Neutron,14
Mickey,Mouse,16
</pre>
<p />
Fields may contain commas, double-quotes, and line breaks (CRLF); in which case they should be enclosed in double-quotes. If double-quotes are used to enclose fields, then a double-quote appearing inside a field must be escaped by preceding it with another double-quote. Example:
<p />
<pre>
Field A,Field B,Field C,Field D
normal field,&#34;field, with, commas&#34;,&#34;field with
line feed&#34;,&#34;field with &#34;&#34;quoted&#34;&#34; text&#34;
</pre>
<p />
Now that we understand the basics of CSV, let's see how we can generate a CSV file from TWiki content. As long as content is structured using TWiki forms it is easy to generate reports on the fly using a SEARCH variable. The search can be formatted to produce output in CSV format.
<p />
Let's look at the ContactDbAddOn, which is a contact database. Each record is a TWiki page that has a ContactForm with fields Salutation, Name, Job Title, Company, Phone, Mobile, Fax, Email, and URL.
<p />
Here is a search that shows all records using the default search format:
<p />
<pre>
&#37;SEARCH{
 &#34;form.name &#61; &#39;ContactForm&#39;&#34;
 type&#61;&#34;query&#34;
 excludetopic&#61;&#34;&#42;Template&#34;
 nonoise&#61;&#34;on&#34;
}&#37;
</pre>
<p />
Now let's add a search format to generate the CSV output. We add a header line containing the names of the fields (the format parameter should be on one line) :
<p />
<pre>
&#37;SEARCH{
 &#34;form.name &#61; &#39;ContactForm&#39;&#34;
 type&#61;&#34;query&#34;
 excludetopic&#61;&#34;&#42;Template&#34;
 nonoise&#61;&#34;on&#34;
 header&#61;&#34;Salutation,Name,Job Title,Company,Phone,Mobile,Fax,Email,URL&#34;
 format&#61;&#34;&#34;&#34;,&#34;&#34;,&#34;&#34;,&#34;&#34;,
&#34;&#34;,&#34;&#34;,&#34;&#34;,&#34;&#34;,&#34;&#34;&#34;
}&#37;
</pre>
<p />

This search already produces the proper CSV output with fields enclosed in double-quotes. There are some limitations though:
<p /> <ol>
<li> Double quotes in fields are not escaped - they should be escaped.
</li> <li> WikiWords in form fields are automagically expanded into links - they should be escaped.
</li> <li> Even if a page only contains the SEARCH, the TWiki skin adds headers with pulldown menus and footers - all output except the SEARCH should be suppressed.
</li> <li> Content is delivered as HTML, e.g. shown in the browser - the user expects to see a "save file" dialog box.
</li></ol> 
<p />
1. Double quotes in fields are not escaped: TWiki currently has no easy way to escape a double-quote into two double-quotes, so this is a limitation we have to live with.
<p />
2. WikiWords in form fields are expanded into links: We can prevent that by enclosing the SEARCH in &lt;noautolink&gt; tags:
<p />
<pre>
&#60;noautolink&#62;
&#37;SEARCH{
  ...
}&#37;
&#60;/noautolink&#62;
</pre>
<p />
3. Even if a page only contains just the SEARCH, the TWiki skin adds headers with pulldown menus and footers: We can suppress all output except the SEARCH by specifying the <code>text</code> skin and a content type of plain text. Assuming we have a ContactsAsCSV page in the Sandbox web that contains just the &lt;noautolink&gt; tag and the SEARCH, we get the plain text result by adding these URL parameters to the page URL:
<p />
<pre>
http://example.com/do/view/Sandbox/ContactsAsCSV?skin&#61;text;contenttype&#61;text/plain
</pre>
<p />
4. Content is delivered as HTML, e.g. shown in the browser: The user expects to see a "save file" dialog box. We change the content type from plain text to <code>text/csv</code>, and set the content-disposition to <code>attachment; filename=Contacts.csv</code> as defined in RFC 1806 to suggest the file name <code>Contacts.csv</code> in the save-as dialog box. Here is a link that points to the ContactsAsCSV page with proper parameters (the link should be all on one line) :
<p />
<pre>
&#60;a href&#61;&#34;http://example.com/do/view/Sandbox/ContactsAsCSV?skin&#61;text;
contenttype&#61;text/csv&#37;0Acontent-disposition&#37;3A+attachment&#37;3B+filename&#37;3DContacts.csv&#34; target&#61;&#34;&#95;top&#34;&#62;Export to CSV file&#60;/a&#62;
</pre>
<p />
That's basically it. We can further improve this, such as generating a suggested file name with current date. You are invited to download and install the ContactDbAddOn, it has a working export to CSV feature.
<p />
<strong><em>References:</em></strong>
<p /> <ul>
<li> TWiki.TWikiForms - TWiki forms documentation
</li> <li> TWiki.VarSEARCH - SEARCH variable documentation
</li> <li> TWiki.FormattedSearch - create reports using formatted search
</li> <li> Plugins.ContactDbAddOn - Contact database with CSV export feature
</li> <li> http://en.wikipedia.org/wiki/Comma-separated_values - CSV article on Wikipedia ]]!&gt; 
</li></ul> 
(last changed by PeterThoeny) </description>
  <dc:date>2011-11-14T23:57:48Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x1">
  <title>Two Adopted Real-World Solutions for Enterprise Collaboration</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201111x1</link>
  <description> 
 <![CDATA[ <style type='text/css' media='all'>
.infoBoxWhatIs {
  float:right;
  width: 191px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxWhatIs">
<div style="color:#BD1C32; font-size: 25px; margin-bottom:15px">What is TWiki?</div>

<div style="text-align: justify; margin-top:10px; padding:0 5px">
A leading open source enterprise wiki and Web 2.0 application platform used by 50,000 small businesses, many Fortune 500 companies, and millions of people.<br />   Learn more.
</div>
</div>
I gave two technical sessions last month at the Silicon Valley Code Camp, one on How to Run a Long Background Process in a Web Application, the other one on How to Create a TWiki Application.
<p />
Video blogger David Spark of Spark Media Solutions and Dice interviewed me about real-world examples of enterprise collaboration. I mentioned two TWiki related examples.
<div style="clear:left"></div>
<p />
<table width="640" border="0" cellspacing="0" cellpadding="8"><tr><td bgcolor="#e1eaed">
<object width="640" height="390"><param name="movie" value="http://www.youtube-nocookie.com/v/7F0J1SH31C8?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/7F0J1SH31C8?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="390"></embed></object>
</td></tr><tr><td bgcolor="#e1eaed" align="center">
David Spark interviewing Peter Thoeny:<br /> 
Two Adopted Real-World Solutions for Enterprise Collaboration.
</td></tr></table>
<p />
David Spark:
<blockquote>
Collaboration across the enterprise is quite the bugaboo. Getting yourself and a friend to collaborate on a project is easy. Getting everyone in your group to collaborate is not so difficult either. But getting an entire company to collaborate using social tools such as wikis and blogs is quite a tantamount task. It's not easy and it takes a lot of trial and error and coaxing.
<p />
At Silicon Valley Code Camp, I chatted with Peter Thoeny, CTO of Twiki, which started out as a wiki for the workplace. But it's also a box of LEGO, said Thoeny, you can use to build your own web or workflow application that can run within the wiki.
<p />
Thoeny offered up a couple simple solutions for enterprise collaboration:
<p />
Replace "Email All" with internal blogs -- One client of Twiki's was having a problem with employees taking advantage of the "Email All." The casual "send to all" for multiple messages a day was clogging up the company's mail servers. Twiki proposed a series of department-specific internal corporate blogs that allowed for editorial control. The content was very visible on the company's homepage, and a weekly email was sent out to all employee's offering highlights from the blog. The solution reduced the "Email All" messages to just one a day.
<p />
Wikifying a company -- File attachments are so yesterday and they're also extremely limiting to only those people who receive them. And those people often don't save or store them in a place for them to find later. Conversely, if the document is made publicly available on a wiki, and you just send a link, now that content is stored in an open corporate setting and has value to all, not just the intended recipient.
</blockquote>
<p />

David interviewed many people at the Silicon Valley Code Camp. Here are two video compilations that are really funny:
<p />
<table width="800" border="0" cellspacing="0" cellpadding="8"><tr><td bgcolor="#e1eaed">
<object width="400" height="250"><param name="movie" value="http://www.youtube-nocookie.com/v/VtwMV7mwu5o?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/VtwMV7mwu5o?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="250"></embed></object>
</td><td>
</td><td bgcolor="#e1eaed">
<object width="400" height="250"><param name="movie" value="http://www.youtube-nocookie.com/v/IsZ-YL_o7XE?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube-nocookie.com/v/IsZ-YL_o7XE?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="250"></embed></object>
</td></tr><tr><td bgcolor="#e1eaed" align="center">
Annoying Habits of Developers.
</td><td>
</td><td bgcolor="#e1eaed" align="center">
Your Worst Manager Ever
</td></tr></table>
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2011-11-01T08:06:39Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x3">
  <title>Super Angel Ron Conway Talks About Entrepreneurship, Early Google and Facebook</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x3</link>
  <description> 
 <![CDATA[ <style type='text/css' media='all'>
.infoBoxWhatIs {
  float:right;
  width: 191px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxWhatIs">
<div style="color:#BD1C32; font-size: 25px; margin-bottom:15px">What is TWiki?</div>

<div style="text-align: justify; margin-top:10px; padding:0 5px">
A leading open source enterprise wiki and Web 2.0 application platform used by 50,000 small businesses, many Fortune 500 companies, and millions of people.<br />   Learn more.
</div>
</div>
Yesterday I attended a Rajeev Circle event at Stanford University. Professor Rajeev Motwani was an extraordinary connector between Stanford University and the entrepreneurial world in the Silicon Valley and beyond. The Rajeev Circle meets regularly to further his legacy in the areas of science, mentorship, investment and philanthropy. In yesterday's meeting we had the honor of getting advise from Eric Schmidt, executive chairman of Google, Ron Conway, super angel of the Silicon Valley, and others.
<p />
<div style="float:left; width:80px; margin:0 10px 10px 0; display:none">

</div>
I <!--a href="/videos/2011-10-26-ron-conway.mp3"-->recorded<!--/a--> the fireside chat between Ron Conway and Manish Chandra on the topic of starting and growing a startup. Below is the transcript.
<p />
<strong><em>Key takeaways:</em></strong>
<p /> <ul>
<li> Rajeev was an exceptional mentor to entrepreneurs.
</li> <li> Young entrepreneurs Larry Page, Sergey Brin and now Mark Zuckerberg eagerly learn how to run a company, "anything you can do to help me learn how to start a company I am all ears".
</li> <li> Ron as a super angel is first investing in the entrepreneurs, then in ideas.
</li> <li> Good connections with influential people is key to start a business. Manish of early Google, "I sent one e-mail to Ron, and Ron sent a bunch of e-mails, and pretty soon within a week we had almost every single media company that was relevant to our space."
</li> <li> Great entrepreneurs set clear goals and metrics. Mark Zuckerberg said to angel investor Ron with 100% competency that he "will reach 300 million users". Facebook has 800 million and counting.
</li> <li> Mark Zuckerberg's "rate of maturity is on a logarithmic scale." Ron sees Mark every 6 month, and "every time I see him I say, you are a different person. Your outlook on the business, and your business acumen is completely different."
</li> <li> Defining entrepreneurs change how we live and interact, "a defining entrepreneur is an entrepreneur that has the mindset of the consumer burned into their brain."
</li></ul> 
<p />
<hr />
<div style="float:right; width:400px; margin:0 0 10px 10px">

</div>
<strong><em>Transcript of fireside chat between Ron Conway and Manish Chandra</em></strong>
<p />
Manish: Ron, thanks for taking the time to join us, I know it's incredibly busy time in Silicon Valley and certain for you. We have just been talking before, and the first time I met Ron was with Professor Rajeev Motwani. and I just wanted to find out how you met Rajeev.
<p />
Ron: Sure. Here is Asha [Jadeja Motwani]. I first met Asha and Rajeev in the very early days of Google when Rajeev was giving Larry [Page] and Sergey [Brin] what I would call algorithm advise. What was the name of the paper?
<p />
Asha: Page rank?
<p />
No, no, it was something cuter than that. [...] "The web in your pocket" was the paper that Rajeev wrote with Larry and Sergey. If I am getting this wrong, correct me, but I think that is right. I was an early investor in Google. I invested when KP [Kleiner Perkins] and Sequoia invested. At that time I met Asha and Rajeev. Rajeev had an immediate significant impact on me because I have invested in 600 companies and in investing in 600 companies you meet a couple thousand people that are running these companies. On the Google team was this Professor from Standford, Rajeev, who you could tell that he got a lot of brain power. But what I like even better is what a nice person he was. And I couldn't believe how humble he was. Humble is understated, but believe me, when he said something, if you did not internalize and listen to it I think you were stupid. And I consider myself stupid. So, anytime I had with Rajeev I cherished.
<p />
And this was in 1998, it wasn't long before Rajeev and Asha said, hey, we have this idea, that because of all our connections with the computer science departments at the top 5 [universities] in the United States, why don't we harvest the companies that are being started out of these computer science companies and start a little angel fund around that. I already was running Angel Investment LLP, but Rajeev and Asha wanted to start a much smaller fund, just to take advantage of their connections at these top 5 universities. And I had the honor of naming them as many of you have heard of it, Dot Edu Ventures. The name is obvious, but I thought it is a cute name and was delighted that Rajeev and Asha adapted that name. And then we co-invested together and the shared deal flow between our two funds. And that is what formed our lasting relationship.
<p />
But if Rajeev spoke, you really were stupid not to listen, because, never say something unless something needed to be said. He was a very very wise person. We would would meet with entrepreneurs all the time, and Rajeev would say, and here is what I think ,and here is what I think. And he always would be right. With the entrepreneur he would always say, did you think of doing this, did you think of meeting this person, did you think of this channel. It was not just about engineering, Rajeev knew the whole landscape. So I wouldn't let many entrepreneur meet with Asha and Rajeev, because that was a privilege. And when they met, they got the best advise, ever. And that is, what we want to continue with Rajeev Circle, is giving entrepreneurs great advise like Rajeev did.
<p />
<div style="float:right; width:400px; margin:0 0 10px 10px">

</div>
Manish: That is great too. Rajeev's words were amazing. Every word you had to hold on to it, and really internalize it. The other thing Rajeev was really good at was, not only did he supply the words, he also supplied a couple very interesting intros that could change your live. And what, you are a little bit of that way yourself, is, an e-mail from Ron really can have a massive impact on the entrepreneur's life.
<p />
How do you engage with an entrepreneurs, I know you have a different philosophy than may be a lot of investors.
<p />
Ron: Yes, at SV Angels when we invest in a company, we invest with the premise that we are investing in the entrepreneur. Which means, we already think this is a great entrepreneur, so we do not need to look over their shoulder. So, the relationship we have with the entrepreneurs is, when they need our help, they ask for it. But we don't look over their shoulder or check on them, because we assume that they are competent. So we start by saying we have a lot of respect for the entrepreneur, and we would just help the entrepreneur when they need it. We are service firm. But because of our Rolodex we built up over the years, when an entrepreneur comes to us with a problem, and we define that as an inflection point, when you have an inflection point, come to us and we help you out. An inflection point is things like your next financing; or the product is taking off, lets get distribution; introduce us to Yahoo, Google, Facebook and Twitter; and help us get distribution for our product. And because we've invested in so many of those companies, we're well connected to the management teams, so we can really help you out.
<p />
On the back-end, most of the companies' liquidity event today is M&amp;A, it's not IPO. We help merge many of our companies into larger companies. Skype just acquires GroupMe, and I was with the CEO of Skype last night. And I said, isn't it funny, in our meeting we introduced you to GroupMe, and we mentor both sides of the equation. We were the banker. We mentored both sides of that sales transaction. No fee whatsoever, and got that company sold. That is an inflection point and the entrepreneurs asked us to help. That's an example.
<p />
Manish: I can share my story at Google when we were at that inflection point. I sent one e-mail to Ron, and Ron sent a bunch of e-mails, and pretty soon within a week we had almost every single media company that was relevant to our space.
<p />
Going back, tell us a little bit how you met the founders, and how you make the decisions to invest in the team.
<p />
<div style="float:right; width:400px; margin:0 0 10px 10px">

</div>
Ron: How we met Google was kind of interesting. But before meeting Google I was an angel investor in Ask Jeeves, which was a search company that preceded Google by, say, 4 years. And Ask Jeeves has already gone public the summer before Google was founded. And so I knew just enough about search to be dangerous. I spent 4 years with the Ask Jeeves founders and understood the space. I was at a holiday party at the back of eBay's home in Atherton and met with David Cheriton. David Cheriton was at this party. This party was black tie only, and I hate wearing black tie, but not as much as David Cheriton did. And David Cheriton had on a black tie. So I go over to him, and say, is this amazing, the two of us are in black tie at this party. And by the way, I have not seen any deal from the Stanford computer science department from you lately. Then he said, oh, there is one really interesting one called BackRub. And that was the codename for Google in those days. You want to meet them? I said, what do they do? Well they search. I go, oh good, I know a lot about search. What about it, do we need another search engine? And he said two magic words: Search by relevance, and page rank. I said, explain what page rank is. And it did not take him long to say, if a lot of people go there it must be something interesting on their website. Just track that and then link other websites to it. I said, wow, that is brilliant, I gotta meet these guys. that is in December, I did not meet Larry and Sergey until the following May because they were not ready. They already got their early angel funding from Ram Shriram, [Jeffrey] Bezos, Andy Bechtolsheim, David Cheriton, those are the 4 real angel at Google. But in May he said they are getting ready to the next round of financing. Do you want to meet them? 
<p />
We had lunch at the Empire Tap Room in Palo Alto, and by then I was so sold in page ranks and relevance. I still have the receipt from that lunch. At that lunch I wrote down, "first lunch on the way to invest in Google". I wrote it before I left that table. And we met Larry and Sergey two days later, and it was everything we thought would be. And we helped with the KP/Sequoia round. in the first meeting with Larry and Sergey it was so clear to me, but some people in the valley were saying these guys are arrogant, and after the first meeting I said these guys are not arrogant, and I say it to this day. They are very confident and determined, and know what they want. They know how to set a goal, and how to meet that goal.
<p />
The beautiful thing about Larry and Sergey in the early days [is], we would have all of our portfolio companies meet once a month on some common topic. And for the first two years at Google, Larry and Sergey would be the first one to arrive at the meeting and the last ones to leave. They were the most curious about, what is this thing about starting a company. And because they were so curious they became very successful, because they kept learning more than the other entrepreneurs in our portfolio.
<p />
Manish: coming back a little bit to the darling of the valley right now, Facebook. Can you tell a little bit how you first meet with him?
<p />
<div style="float:right; width:400px; margin:0 0 10px 10px">

</div>
Ron: Facebook goes all the way back to Napster, there is a connection. John Bonanza is here, who is a graduate of Napster. I met Sean Parker and Shawn Fanning, the co-founders of Napster when they were 18 years old, a couple month after they moved from the East Coast to San Mateo in the Union Bank Building. So we met Fanning and Parker, and Napster went out of business. Massive number of mistakes made at that company. I think, a Napster alumni can say if they agree, I think because of the people's out of control egos, that it did not had to happen [to fail]. But I invested in every company that Fanning and Parker have started since Napster. Shawn Fanning is on his 5th company, Sean Parker is on number 4. I was the first investor in Plaxo with Sean Parker. And then he met Mark Zuckerberg. He called me up and said, hey, you gotta come look at this one, I am going to be the president of this company. I met Sean and Zuck a couple month after Zuck had moved out [to the silicon valley]. It is funny how you meet people a few month after they move here, because I met Zuck a couple month after he moved here, shorts and flip flops. And, once again characteristics of a great, great entrepreneur. Zuck is a great listener, he was just like Larry and Sergey, anything you can do to help me learn how to start a company I am all ears. Sean Parker was on his third startup with Facebook. He would always be half listening to me. But I would always notice that Zuck was listening intently and absorbing. Hey, here is what you ought to do now, in all the advise. That is the characteristic of a defining entrepreneur.
<p />
My favorite story is at this first meeting - I took copious notes, I always take copious notes - and I said at the end of the meeting, because Zuck was, again just like Larry and Sergey, very precise about where his company was going, and what the product would look like. Very confident, not cocky, but confident that he was going to conquer the world. So I said, how big does this thing get, how many users does this get up to? And with 100% competency he said 300 million users. And guess what, he was dead wrong, he has 800 million and counting. But he had a number in his head, and he was going to meet that number. And great entrepreneurs exceed the number, and he exceeded the numbers. His rate of maturity is on a logarithmic scale. I only see Zuck every 6 month, and every time I see him I say, you are a different person. Your outlook on the business, and your business acumen is completely different. Here is somebody who is growing like a weed, and he is 30 or 31. Facebook has a long way to go. He is a defining entrepreneur. A defining entrepreneur is an entrepreneur that has the mindset of the consumer burned into their brain. And everything they think about, they are representing the mind of the consumer. Napster was great because Shawn Fanning had the mind of his user engrained in his head. Zuckerberg the same thing, he really understands the mind of what is now the Facebook generation. The same thing with Jack Dorsey of Twitter. He understands the mind of the Twitter user. That creates a great a product visionary, is a great entrepreneur.
<p />
Manish: Tell us a little bit about, what makes companies fail?
<p />
Ron: As I said with Napster, egos. In this case not the egos of anyone in the company, but the egos of the music industry and the investors that were surrounding the company. But with most startups that I watched fail, where it is frustrating is, because the entrepreneur did not admit that they where not meeting the metrics, they were not meeting their goals. And the company was doomed to failure, but the founders never realized that, and they never pivoted the company. We love it when we invest in a company, and a year later the entrepreneur comes saying, I think I screwed it up. But here is what I am going to do to fix it. And forget about that product we told you about a year ago, we are going this direction. That is the entrepreneur we say, no, you are actually the good entrepreneur, because you are not doubting yourself. And so the companies that morph and admit hey we are not meeting the targets that we set, we know what failure is, we are not going that route, those at the companies that...
<p />
Manish: What are some examples that transformed themselves?
<p />
Ron: There are just so many. There are probably 50 companies in that category.
<p />
Manish: When you look at the new set of conventions where the industries are evolving, what are some areas that you are personally watching out for and are interested in?
<p />
<div style="float:right; width:400px; margin:0 0 10px 10px">

</div>
Ron: Three years ago we adopted a theme of real time data. Massive amounts of data is being contributed by the consumer to the internet. So the consumers are building the product. If you look at Twitter and Facebook, all that content is contributed by the user. How exotic and wonderful is that! But there is examples of real time data everywhere, you know with crowd-sourcing and collective wisdom where the consumers are contributing to the success of the internet. Two of the latest sectors in real time data that are of interest to us are big data and collaborative consumption. And the poster child for that is probably a company called Airbnb, where you can share rooms in your home and get revenue. This company started in 2008, and there is probably a couple hundred thousand people in New York who were able to pay their rent in the mortgage crisis in 2008 because they got augmented income from Airbnb. So collaborative consumption is where the community is providing the product, and there is community around the users, and the owners of the Airbnb spaces. It's a whole community and social experience, you could say it is  a social network.
<p />
But I think the Facebook generation impedimizes what we call a "no fix cost society". The Facebook generation isn't interested in owning things. I want to own my own car, I want to own my own house. The Facebook generation thinks why do you need to own all that stuff? It is wasteful, it is not good for the environment. Why don't we share the car? Hence all the shared car services that are exploding today. And then even share rooms in our home or our apartments, hence the Airbnb model. So, collaborative consumption is another just huge space, early, early days. These are all multi-billion dollar opportunities of hundreds of companies in these spaces. That's why innovation has never been better.
<p />
Manish: I'd like to open it up for questions from the audience.
<p />
Asha: what is your current favorite company?
<p />
Ron: A company that we all can walk to right now, it is a company called Pinterest. And Pinterest is right here on High Street in Palo Alto. It is a virtual pin-board. It is mostly woman at this point, which does not panic us as investors. And guess what, Facebook was mostly woman in the early days. It is a virtual pin board, so if you are planning a wedding, you go around the web and collect content all about weddings and you put it on your pin-board. The beauty of this is that everybody is sharing their pin-boards and is giving each other advise. So things like wedding planning, remodels of your home, redecorating, this is where you can share and collaborate information on other things you've collected on the web that are of interest to other people. And they are building a whole community around this. And just like Google, Facebook, Twitter, and Pinterest, never argue with the numbers. This is growing like that [holding arm 80 degrees up]. It's growing at the pace of Facebook 5 years ago. So right now this is the most interesting company, just like Facebook, Google, Twitter came out of nowhere. And here it is right in our backyard.
<p />
[two questions skipped]
<p />
Manish: Thank you Ron, this was a pleasure!
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2011-10-28T16:19:13Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x2">
  <title>How to: Turn Text Upside Down</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x2</link>
  <description> 
 <![CDATA[ <style type='text/css' media='all'>
.infoBoxWhatIs {
  float:right;
  width: 191px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxWhatIs">
<div style="color:#BD1C32; font-size: 25px; margin-bottom:15px">What is TWiki?</div>

<div style="text-align: justify; margin-top:10px; padding:0 5px">
A leading open source enterprise wiki and Web 2.0 application platform used by 50,000 small businesses, many Fortune 500 companies, and millions of people.<br />   Learn more.
</div>
</div>
<table><tr><td>
Want to surprise your friends on Facebook, Twitter or Google Plus?
<div style="display: none">
How does this work? The text appears to be upside down (flipped), and it is possible to paste it into text boxes on Facebook and other websites, even though there is no such thing as an upside down character set. Some drawing programs offer text rotation, but that is handled at the application level. So how does upside text work in normal text input fields? Most websites nowadays support Unicode, which is a universal standard to represent text in computers. Unicode consists of tens of thousands of characters. The first 127 characters of Unicode are ASCII.
</div>
<p />
Type text: <strong>¡u&#653;op &#477;p&#305;sdn &#633;&#592;&#477;dd&#592; &#1503;&#1503;&#305;&#653; &#647;&#305;</strong>
<br /> 
<!--<pre>-->
<script type="text/javascript">
function upsideDownText() {
  var srcText = document.getElementById( 'src' ).value.toLowerCase();
  var out = '';
  for( var i = srcText.length - 1; i >= 0; --i ) {
    var ch = srcText.charAt( i );
    if( ch == 'a' ) { out += '\u0250' }
    else if( ch == 'b' ) { out += 'q' }
    else if( ch == 'c' ) { out += '\u0254' }
    else if( ch == 'd' ) { out += 'p' }
    else if( ch == 'e' ) { out += '\u01DD' }
    else if( ch == 'f' ) { out += '\u025F' }
    else if( ch == 'g' ) { out += '\u0183' } //1D77' }
    else if( ch == 'h' ) { out += '\u0265' }
    else if( ch == 'i' ) { out += '\u0131' } //1D09' '\u01C3' '\u0131' }
    else if( ch == 'j' ) { out += '\u017F'} //1D98' '\u0638' }
    else if( ch == 'k' ) { out += '\u029E' }
    else if( ch == 'l' ) { out += '\u05DF' }
    else if( ch == 'm' ) { out += '\u026F' }
    else if( ch == 'n' ) { out += 'u' }
    else if( ch == 'o' ) { out += 'o' }
    else if( ch == 'p' ) { out += 'd' }
    else if( ch == 'q' ) { out += 'b' }
    else if( ch == 'r' ) { out += '\u0279' }
    else if( ch == 's' ) { out += 's' }
    else if( ch == 't' ) { out += '\u0287' }
    else if( ch == 'u' ) { out += 'n' }
    else if( ch == 'v' ) { out += '\u028C' }
    else if( ch == 'w' ) { out += '\u028D' }
    else if( ch == 'x' ) { out += 'x' }
    else if( ch == 'y' ) { out += '\u028E' }
    else if( ch == 'z' ) { out += 'z' }
    else if( ch == '(' ) { out += ')' }
    else if( ch == ')' ) { out += '(' }
    else if( ch == '{' ) { out += '}' }
    else if( ch == '}' ) { out += '{' }
    else if( ch == '[' ) { out += ']' }
    else if( ch == ']' ) { out += '[' }
    else if( ch == '<' ) { out += '>' }
    else if( ch == '>' ) { out += '<' }
    else if( ch == '0' ) { out += '0' }
    else if( ch == '1' ) { out += '\u0196' }
    else if( ch == '2' ) { out += '\u01A7' }
    else if( ch == '3' ) { out += '\u0190' }
    else if( ch == '4' ) { out += '\u152D' } // 056B' }
    else if( ch == '5' ) { out += 'S' }
    else if( ch == '6' ) { out += '9' }
    else if( ch == '7' ) { out += 'L' }
    else if( ch == '8' ) { out += '8' }
    else if( ch == '9' ) { out += '6' }
    else if( ch == '?' ) { out += '\u00BF' }
    else if( ch == '\u00BF' ) { out += '?' }
    else if( ch == '!' ) { out += '\u00A1' }
    else if( ch == '\u00A1' ) { out += '!' }
    else if( ch == "\'" ) { out += ',' }
    else if( ch == ',' ) { out += "\'" }
    else if( ch == '.' ) { out += '\u02D9' }
    else if( ch == '_' ) { out += '\u203E' }
    else if( ch == ';' ) { out += '\u061B' }
    else if( ch == '"' ) { out += '\u201E' }
    else if( ch == "'" ) { out += ',' }
    else if( ch == '&' ) { out += '\u214B' }
    else { out += ch }
  }
  document.getElementById( 'dest' ).value = out;
}
</script>
<!--</pre>-->
<div style="text-align: center">
<form>
<textarea rows="5" cols="70" name="src" id="src" class="twikiTextarea" style="width:600px;height:80px;" onkeyup="upsideDownText()"></textarea>
<br /> 

<br /> 
<input type="button" value="Turn text upside down" class="twikiButton" onClick="upsideDownText()">
<br /> 
<textarea rows="5" cols="70" name="dest" id="dest" class="twikiTextarea" style="width:600px;height:80px;"></textarea>
<br /> 
Copy upside down text (flipped text) into a Facebook/Twitter/G+ status update
</form>
</div>
</td></tr></table>
<p />
<div style="clear:both"></div>
<style type='text/css' media='all'>
.infoBoxGettingInvolved {
  float:right;
  width: 190px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxGettingInvolved">
<div style="color:#BD1C32; font-size: 25px">Get Involved!</div>

<div style="text-align: justify; padding:0 5px">
TWiki is an open source project with 10+ years of history, built by a team of volunteers from around the world, and used by millions of people in over 100 countries. The community is focusing on building the best collaboration platform for the workplace. We invite you to get involved!
</div>
</div>
<strong><em>How does this work?</em></strong>
<p />
The text appears to be upside down (flipped), and it is possible to paste it into text boxes on Facebook and other websites, even though there is no such thing as an upside down character set. Some drawing programs offer text rotation, but that is handled at the application level. So how does upside text work in normal text input fields?
<p />
Most websites nowadays support Unicode, which is a universal standard to represent text in computers. Unicode consists of tens of thousands of characters. The first 127 characters of Unicode are ASCII. It is possible to create text that appears to be upside down by converting character by character to a Unicode sign that looks like the upside down version of the character. For example "b" becomes "q", and "6" becomes "9". For some characters there is no common character to represent the flipped version. Thankfully Unicode has many characters and it is possible to find one that is a pretty good fit. For example, the flipped version of "f" is "&#607;", which is a Latin character with Unicode number 607 (hex code 025F).
<p />
Now for the geek part: How does that work technically? This article is a TWiki page and contains some Javascript code and two textarea boxes, one for the original text, one for the flipped text. We use the <code>onkeyup</code> Javascript hook in the first text box to call an <code>upsideDownText()</code> function each time a key is released:
<blockquote>
<pre>
&#60;textarea rows&#61;&#34;5&#34; cols&#61;&#34;70&#34; id&#61;&#34;src&#34; onkeyup&#61;&#34;upsideDownText()&#34;&#62;&#60;/textarea&#62;
</pre>
</blockquote>
<p />
We do the text processing in the <code>upsideDownText()</code> Javascript function:
<p />
<blockquote>
<pre>
&#60;script type&#61;&#34;text/javascript&#34;&#62;
function upsideDownText() {
  var srcText &#61; document.getElementById( &#39;src&#39; ).value.toLowerCase();
  var out &#61; &#39;&#39;;
  for( var i &#61; srcText.length - 1; i &#62;&#61; 0; --i ) {
    var ch &#61; srcText.charAt( i );
    if( ch &#61;&#61; &#39;a&#39; ) {
      out +&#61; &#39;\u0250&#39; }
    } else if( ch &#61;&#61; &#39;b&#39; ) {
      out +&#61; &#39;q&#39; }
    } else if( ch &#61;&#61; &#39;c&#39; ) {
      out +&#61; &#39;\u0254&#39;
    // etc....
    } else {
      out +&#61; ch
    }
  }
  document.getElementById( &#39;dest&#39; ).value &#61; out;
}
&#60;/script&#62;
</pre>
</blockquote>
<p />
First we get the content of the text box identified by <code>id="src"</code>. We only process lower case letters, so we convert the string to lowercase using the <code>toLowerCase()</code> method. We could try to convert upper and lowercase characters; that is an exercise left to the interested reader.
<p />
Then we loop through the string, character by character, starting from the end of the string. A big if-then-else-if block handles the character conversion. Finally we push the converted string into the text box identified by <code>id="dest"</code>, which is the lower text box.
<p />
That's it, pretty simple code. View the raw TWiki page to see the complete HTML and Javascript.
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2011-10-20T17:13:12Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x1">
  <title>Case Study: Morgan Stanley has Globally Replicated Intranet TWiki With 30,000 Users, 500,000 Pages</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201110x1</link>
  <description> 
 <![CDATA[ At Twiki we are fortunate to have a large and active base of users.  Due to the long term success of the TWiki open source project, we estimate about 50,000+ teams use the collaboration platform world wide, across Fortune 500, Governments, Universities, and SMB.  One of the perks of selling enterprise software is the opportunity to meet a range of great customers using our technology in interesting ways. This blog is a shortened version of a Twiki Inc blog.
<p />
Recently a VP of IT at Morgan Stanley submitted a technical article on their deployment of TWiki.  You can read the TWiki Success Story of Morgan Stanley, but here are some highlights:
<p />
<p />

<strong>Scale</strong>
<p />
The sheer scale of the deployment at Morgan Stanley is staggering in enterprise scale terms: <ul>
<li> 30,000 employees use the platform
</li> <li> 4+ Million page views per month (does not include crawlers)
</li> <li> 500,000 web pages managed in the system 
</li> <li> 350GB of content
</li> <li> Managed across 3 Data Centers with HA (high availability)
</li></ul> 
<p />
<div style="clear:both;"></div>
<strong>High Availability</strong>
<p />

HA requires some special mention here.  Morgan Stanley has use cases that are considered critical for internal execution.  As such, the Twiki service needs to be reliably up.
We were excited to see how reliable Twiki is within the company.  The VP's quote says it all:
<p />
<blockquote>
"Our TWiki has a very good track record of availability. It kept working as usual when one data center was lost. When another data center outage happened, TWiki stopped working because the network attached storage was lost despite the high availability design. But TWiki recovered faster than the other content management platforms.
<p />
There are internal users who don't want to put their content on other content management platforms than TWiki because other platforms don't provide high enough availability." 
</blockquote>
<p />
<p />
<strong>Use Cases - "Mission Critical"</strong>
<p />
Morgan Stanley uses the platform for sharing and collaboration of content, both documents and web content. Here are their specific uses:
<p /> <ul>
<li> Technical Operations Manuals - Document storage for the IT teams to manage day to day operations of their software assets.
</li> <li> Software Product Documents - A place for their internal teams to store documents during the development of their internal software.
</li> <li> Team Workspaces - Webs for their teams to share/collaborate project content such as project status, meeting minutes, and progress reports.
</li></ul> 
<p />
A key comment from Morgan Stanley is the critical nature of the platform and its value within the organization:
<p />
<blockquote>
"TWiki not being a trading system or settlement system, TWiki's failure doesn't make the firm lose money directly. But some of mission critical systems depend on TWiki for their operation. In day-to-day operation and switching to new releases, operation manuals' availability is crucial. A very good track-record of availability and global content replication make TWiki appealing."
</blockquote>
<p />
<p />
<strong>Competitive Value</strong>
<p />
TWiki has enjoyed over a decade of providing content collaboration solutions to our user base with millions of users using the open source community edition. But the competitive advantages of Twiki sometimes need repeating.  A customer testimonial is the most effective way to community this.  Here is what Morgan Stanley views as competitive advantages of Twiki against other content management systems:
<p /> <ul>
<li> Flexibility - The company was able to tailor the platform to their scale, reliability, and usage needs easily
</li> <li> Cost Effective - In addition to the obvious license cost (non)issue, Twiki needs a small set of resources for hardware and IT personnel to manage the platform compared to other systems at the company
</li></ul> 
<p />
These two characterizations are hallmark strengths of the Twiki platform.   
<p />
Keep sending us feedback, we love hearing from you!
 ]]!&gt; 
(last changed by PeterThoeny) </description>
  <dc:date>2011-10-06T17:29:12Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item>
<item rdf:about="http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201109x3">
  <title>How to Use Regular Expressions to Parse Nested Structures</title>
  <link>http://www.twiki.org/cgi-bin/view/Blog/BlogEntry201109x3</link>
  <description> 
 <![CDATA[ <style type='text/css' media='all'>
.infoBoxGettingInvolved {
  float:right;
  width: 190px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxGettingInvolved">
<div style="color:#BD1C32; font-size: 25px">Get Involved!</div>

<div style="text-align: justify; padding:0 5px">
TWiki is an open source project with 10+ years of history, built by a team of volunteers from around the world, and used by millions of people in over 100 countries. The community is focusing on building the best collaboration platform for the workplace. We invite you to get involved!
</div>
</div>
<style type='text/css' media='all'>
.infoBoxWhatIs {
  float:right;
  width: 191px;
  margin:0 0 0.5em 1em; 
  border: solid #dddddd 1px;
  padding: 15px;
  background-image: url();
  background-repeat: repeat-x;
  background-color: #fbfbfd;
  text-align: center;
}
</style>
<div class="infoBoxWhatIs">
<div style="color:#BD1C32; font-size: 25px; margin-bottom:15px">What is TWiki?</div>

<div style="text-align: justify; margin-top:10px; padding:0 5px">
A leading open source enterprise wiki and Web 2.0 application platform used by 50,000 small businesses, many Fortune 500 companies, and millions of people.<br />   Learn more.
</div>
</div>
This is an advanced topic that teaches how to to parse nested tree structures such as programming languages and spreadsheet formulas using regular expressions in Perl. The article is generic enough to be used in other languages that support regular expressions.
<p />
Regular expressions are very powerful to parse and modify text. They are also very fast to process large text over and over again. For example, the TWiki engine makes heavy use of regular expressions to turn TML (TWiki Markup Language) into HTML. Can regular expressions be used to parse nested structures, such as to parse a programming language or a nested spreadsheet formula?
<p />
Some people say that regular expressions (e.g. finite state automaton) cannot parse nested structures because they are not regular, by definition. They argue, you would need an LL parser such as ANTLR to generate an abstract syntax tree which can be further processed with a tree parser.
<p />
All that sounded too complicated when I was going to implement TWiki's SpreadSheetPlugin. Regular expressions are extremely fast, and I thought it might be faster than the LL parser and tree parser approach. So I took the challenge to parse spreadsheet formulas using regular expressions.
<p />
For illustration, let's take a spreadsheet formula that needs to be parsed and processed. The example formula has 7 function calls with 5 levels of nesting, some of which have more than one function per level:
<p />
<blockquote>
<pre>
$ROUND( $TIME( ), $TIMEDIFF( $TIME( $T( R$ROW( ):C$COLUMN( -1 ) ) ), day ) )
</pre>
</blockquote>
<p />
There is a way to use regular expressions to parse, say, up to 5 levels, and with the limitation that you can have only one function call per level. Certainly we need a more flexible solution that does not limit us on the number of levels for nesting and number of function calls per level.
<p />
The solution is to parse twice, once to temporarily label the parentheses with level of nesting, then to resolve function calls recursively using matching parentheses identified by the labels. This can be done with regular expressions and recursive function calls.
<p />
First, let's determine the level of nesting, indicated by the numbers above the parentheses:
<blockquote>
<pre>
      1      2 2           2      3   4      5 5         5    5 4 3      2 1
$ROUND( $TIME( ), $TIMEDIFF( $TIME( $T( R$ROW( ):C$COLUMN( -1 ) ) ), day ) )
</pre>
</blockquote>
<p />
We use a regular expression to add the nesting level to the parentheses, together with an escape token (so that we can easily identify it later for processing and removal). Escape tokens with level are indicated by <span style="color: #009900">-esc-N</span>; newlines are added for clarity:
<p />
<blockquote>
<pre>
$ROUND<span style="color: #009900">-esc-1</span>( $TIME<span style="color: #009900">-esc-2</span>( <span style="color: #009900">-esc-2</span>), $TIMEDIFF<span style="color: #009900">-esc-2</span>( $TIME<span style="color: #009900">-esc-3</span>(
  $T<span style="color: #009900">-esc-4</span>( R$ROW<span style="color: #009900">-esc-5</span>( <span style="color: #009900">-esc-5</span>):C$COLUMN<span style="color: #009900">-esc-5</span>( -1 <span style="color: #009900">-esc-5</span>) <span style="color: #009900">-esc-4</span>)
 <span style="color: #009900">-esc-3</span>), day <span style="color: #009900">-esc-2</span>) <span style="color: #009900">-esc-1</span>)
</pre>
</blockquote>
<p />
First, we write the main function that parses and resolves a spreadsheet formula:
<p />
<blockquote>
<pre>
sub &#95;doFormula
{
    my( $formula ) &#61; &#64;&#95;;
    my $level &#61; 0;
    $formula &#61;~ s/(&#91;\(\)])/&#95;addNestingLevel($1, \$level)/geo;
    $formula &#61; &#95;doFunc( &#34;MAIN&#34;, $text );
    return $formula;
}
</pre>
</blockquote>
<p />
This function does two things:
<p /> <ol>
<li> Add an escape token with the level of nesting to each parenthesis of the formula. This is done using a regular expression that calls function <code>_addNestingLevel()</code>. We use modifiers <code>geo</code>, e.g. <code>g</code> for global (don't stop at the first match), <code>e</code> for execute (to call a function for each match), and <code>o</code> to compile the regular expression pattern only once (because the pattern is fixed).      <br /> <br /> 
</li> <li> Call <code>_doFunc()</code> to resolve the functions recursively.
</li></ol> 
<p />
The <code>_addNestingLevel()</code> function adds the escape tokens with the level of nesting to a parenthesis, such as <code><span style="color: #009900">-esc-5</span>(</code> and <code><span style="color: #009900">-esc-5</span>)</code>:
<blockquote>
<pre>
my $escToken &#61; &#34;\0&#34;;
sub &#95;addNestingLevel
{
    my( $theParen, $theLevelRef ) &#61; &#64;&#95;;
    my $result &#61; &#34;&#34;;
    if( $theParen eq &#34;(&#34; ) {
        # Increment level before adding escape token
        $$theLevelRef++;
        $result &#61; &#34;$escToken$$theLevelRef$theParen&#34;;
    } else {
        # Increment level after adding escape token
        $result &#61; &#34;$escToken$$theLevelRef$theParen&#34;;
        $$theLevelRef--;
    }
    return $result;
}
</pre>
</blockquote>
<p />
The nesting level is passed as a reference so that we can modify it. The escape token is the null character, which is a valid character in a Perl string. For the opening parenthesis <code>"("</code>, the nesting is incremented before adding the escape token with the nesting level. For the closing parenthesis <code>")"</code>, it is incremented after the fact. This ensures that we have the same nesting level for matching parentheses.
<p />
The <code>_doFunc</code> function handles all spreadsheet functions:
<blockquote>
<pre>
sub &#95;doFunc
{
    my( $theFunc, $theAttr ) &#61; &#64;&#95;;

    # Handle functions recursively
    $theAttr &#61;~ s/\$(&#91;A-Z]+)$escToken(&#91;0-9]+)\((.&#42;?)$escToken\2\)/&#95;doFunc($1,$3)/geo;
    # Clean up unbalanced mess
    $theAttr &#61;~ s/$escToken\-&#42;&#91;0-9]+(&#91;\(\)])/$1/go;

    my $result &#61; &#34;&#34;;
    if( $theFunc eq &#34;MAIN&#34; ) {
        $result &#61; $theAttr;
    } elsif( $theFunc eq &#34;ROUND&#34; ) {
        $result &#61; &#95;handleROUND( $theAttr );
    } elsif( $theFunc eq &#34;TIME&#34; ) {
        $result &#61; &#95;handleTIME( $theAttr );
    # etc.
    }
    return $result;
}
</pre>
</blockquote>
<p />
The first regular expression <code>s/\$([A-Z]+)$escToken([0-9]+)\((.*?)$escToken\2\)/_doFunc($1,$3)/geo</code> finds all functions of format <span style="white-space:nowrap"> <code>$NAME<span style="color: #009900">-esc-N</span>( ... <span style="color: #009900">-esc-N</span>)</code> </span> and calls the <code>_doFunc</code> function recursively to resolve the spreadsheet function. How can we identify the matching closing parenthesis of a function? The <code>([0-9]+)</code> after <code>$escToken</code> captures the level. With <code>\((.*?)$escToken\2\)</code> we scan non-greedily over the text to find the first escape token of same level, indicated with <code>\2</code>. We use the same <code>geo</code> modifiers for the regular expression, the <code>g</code> modifier results in parsing the string from left to right to find and handle all spreadsheet functions of the same level.
<p />
Spreadsheet functions at a deeper level are resolved first because of the recursion. The combined use of recursion and <code>g</code> modifier results in an inside out / left to right handling of the spreadsheet functions, which is the desired behavior.
<p />
The second regular expression <code>s/$escToken\-*[0-9]+([\(\)])/$1/go</code> cleans up escape tokens that are left over. For example <code>$EVAL( (2+7)/3 )</code> has parentheses that are not part of a function construct. Or, the formula might have unbalanced parentheses.
<p />
Finally we have a long if-then-else-if-then switch that handles all spreadsheet functions.
<p />
<strong><em>That is basically it!</em></strong> As you can see, with a few lines of code it is possible to parse complex nested structures by using just a few regular expressions and a function recursively.
<p />
This is a simplified presentation of the actual implementation of the SpreadSheetPlugin. Some spreadsheet functions get special treatment. For example, the <code>$IF( condition, then, else )</code> function needs to evaluate first the <code>condition</code>, then handle either the <code>then</code> or the <code>else</code> part based on the condition. This complicates the simple inside out / left to right parsing/handling described in this article. Interested folks are invited to download the SpreadSheetPlugin and study the code.
<p />
It would be interesting to do a reference implementation using the LL-parser/tree parser approach so that we could compare the performance to the pure regular expression/recursion approach discussed here. I have a hunch that the regular expression approach is an order of magnitude faster. Anyone challenging that? I would be happy to be proven wrong!
<p />
I hope this advanced regular expression topic is a learning experience for you as it certainly was for me. May be you can use this for one of your own projects?
<p />
<strong><em>References:</em></strong> <ul>
<li> http://en.wikipedia.org/wiki/Regular_expression - regular expression on Wikipedia
</li> <li> http://perldoc.perl.org/perlre.html - Perl regular expressions
</li> <li> http://perldoc.perl.org/perlretut.html - Perl regular expressions tutorial
</li> <li> http://stackoverflow.com/questions/133601/can-regular-expressions-be-used-to-match-nested-patterns - Question on Stackoverflow.com: Can regular expressions be used to match nested patterns?
</li> <li> http://stackoverflow.com/questions/1099178/matching-nested-structures-with-regular-expressions-in-python - Question on Stackoverflow.com: Matching Nested Structures With Regular Expressions in Python
</li> <li> http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html - do NOT try parsing with regular expressions
</li> <li> http://www.getinterface.com/support/developers-blog/entry/parsing-expression-grammars-vs-regular-ex/ - parsing expression grammars vs. regular expressions ]]!&gt; 
</li></ul> 
(last changed by PeterThoeny) </description>
  <dc:date>2011-09-17T05:48:30Z</dc:date>
  <dc:contributor>
    <rdf:Description link="http://www.twiki.org/cgi-bin/view?topic=Main.PeterThoeny">
      <rdf:value>PeterThoeny</rdf:value>
    </rdf:Description>
  </dc:contributor>
</item><!--
<p /> <ul>
<li> Set SKIN = rss
</li></ul> 
-->
</rdf:RDF>
