<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/topics-files/atom2xhtml.xsl" type="text/xsl"?>
<!-- This is a 512 byte XML comment that one must put into XML Atom feeds
such that browsers like Firefox 2.0 and IE7 will obey the XSL stylesheet.
Everybody hates overbearing browsers.
This is a 512 byte XML comment that one must put into XML Atom feeds
such that browsers like Firefox 2.0 and IE7 will obey the XSL stylesheet.
Everybody hates overbearing browsers.
This is a 512 byte XML comment that one must put into XML Atom feeds
such that browsers like Firefox 2.0 and IE7 will obey the XSL stylesheet.
Everybody hates overbearing browsers.
This is a 512 byte XML comment that one must put into XML Atom feeds
such that browsers like Firefox 2.0 and IE7 will obey the XSL stylesheet.
Everybody hates overbearing browsers.
This is a 512 byte XML comment that one must put into XML Atom feeds
such that browsers like Firefox 2.0 and IE7 will obey the XSL stylesheet.
Everybody hates overbearing browsers.
This is a 512 byte XML comment that one must put into XML Atom feeds
such that browsers like Firefox 2.0 and IE7 will obey the XSL stylesheet.
Everybody hates overbearing browsers. -->
<feed xmlns="http://www.w3.org/2005/Atom"
><title
>Blog@Case Topics: mediawiki</title
><link rel="self" href="http://blog.case.edu/topics/mediawiki"
 /><id
>http://blog.case.edu/topics/mediawiki</id
><category term="mediawiki" label="mediawiki"
 /><link rel="related" href="http://blog.case.edu/topics/casewiki" title="casewiki"
 /><link rel="related" href="http://blog.case.edu/topics/wiki" title="wiki"
 /><link rel="related" href="http://blog.case.edu/topics/google" title="google"
 /><link rel="related" href="http://blog.case.edu/topics/wikipedia" title="wikipedia"
 /><link rel="related" href="http://blog.case.edu/topics/computing" title="computing"
 /><link rel="related" href="http://blog.case.edu/topics/xml" title="xml"
 /><link rel="related" href="http://blog.case.edu/topics/maps" title="maps"
 /><link rel="related" href="http://blog.case.edu/topics/metadata" title="metadata"
 /><link rel="related" href="http://blog.case.edu/topics/semantic%20web" title="semantic web"
 /><link rel="related" href="http://blog.case.edu/topics/rest" title="rest"
 /><link rel="related" href="http://blog.case.edu/topics/google%20maps" title="google maps"
 /><contributor
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></contributor
><updated
>2006-09-28T18:49:10Z</updated
><entry
><title
>Overengineered Wikis</title
><link href="http://blog.case.edu/gps10/2006/09/28/overengineered_wikis"
 /><id
>http://blog.case.edu/gps10/2006/09/28/overengineered_wikis</id
><published
>2006-09-28T18:49:38Z</published
><updated
>2006-09-28T18:49:10Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>
<a href="http://en.wikipedia.org/w/index.php?title=Wiki&amp;oldid=68624891">According to</a> Wikipedia,
<blockquote>A wiki is a type of website that allows users to easily add, remove, or otherwise edit and change some available content</blockquote>To add to that, a wiki usually has a minimal markup from which readable output (usually HTML) is generated. Wikis are cool technology. Unfortunately, general adoption of wiki technology suffers from a critical fault: specifically-tailored, overengineered solutions. Wiki software packages come with all sorts of features-- file uploads, WYSIWYG, user permissions, spaces, plugins, advanced caching, etc. This is all fine and dandy, but they are missing one significant feature: indirection of core wiki abilities. At its core, a wiki is just a parser for a grammar, a versioning system and a front-end to the system. Wiki syntax is just like HTML, BBCode, TeX, XML, etc. It is a markup language. Nothing more, nothing less. Wikis are different from (most) content management systems in that they store a complete history of every change, much like RCS, CVS, or Subversion. Again, nothing special here. All wikis have these two attributes. The only thing that makes one wiki software package different from another is the front-end to control it all. My peeve is as follows. If two of the three qualifying attributes for wiki software are common among all wikis, how is it that wiki software varies so much? Why, when I install a wiki, don't I have the choice of selecting the markup parser? Why also can't I select the version storage system? These components should be interchangeable, should they not? At the programming level, there should just be a set of common interfaces for interacting with a wiki parser as well as storing content. Everything that makes one wiki software different from other wiki software should be the UI, ACL's, file attachments, and whatever other gadgets are part of wiki packages. Let's take MediaWiki for example. MediaWiki powers Wikipedia and because of this, its wiki syntax is probably the most recognized of all in existence. When selecting a wiki, one might want MediaWiki based solely on the popularity of the syntax. However, MediaWiki simply doesn't work for many scenarios. You want access control? You are out of luck. You want a very simple interface, again, you are out of luck. You look at DokuWiki. But wait, its wiki syntax is different and it only stores revision information in files. This isn't suitable! The same holds true everywhere you turn. One wiki offers a great set of features, but the limiting factor is often the syntax or the storage engine, something for which you have a hard requirement. In case you haven't guessed, this all goes back to deploying a wiki farm at Case. We are already dedicated to MediaWiki on wiki.case.edu. Unfortunately, MediaWiki doesn't support ACL's (despite what the access control patches available claim to do) and it doesn't easily support the concept of spaces. Making MediaWiki perform as part of a wiki farm is like hammering a square peg in a round hole. The ideal solution is to take something like SocialText and plug in the MediaWiki syntax. But wait, you can't plug-and-play wiki parsers. Back to square one. Ugh.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Semantic MediaWiki Active on Case Wiki</title
><link href="http://blog.case.edu/gps10/2006/08/30/semantic_mediawiki_active_on_case_wiki"
 /><id
>http://blog.case.edu/gps10/2006/08/30/semantic_mediawiki_active_on_case_wiki</id
><published
>2006-08-31T02:47:37Z</published
><updated
>2006-08-31T02:59:53Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="semantic web" label="semantic web"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>I installed 
<a href="http://wiki.ontoworld.org/wiki/Semantic_MediaWiki">Semantic MediaWiki</a> (SMW) on the Case Wiki this evening. Semantic MediaWiki allows you to embed relations and attributes in articles. In a nutshell, it gives the wiki itself the ability to understand properties about something. For example, you can say that something is "located in" 
<em>something</em> else and later ask the wiki for all articles located within that 
<em>something</em>. Semantic MediaWiki works by introducing new wiki syntax, which is documented at 
<a href="http://wiki.ontoworld.org/wiki/Help:Annotation">Help:Annotation</a> on the SMW web site. I will plan to add something on the Case Wiki help, but until then... Semantic MediaWiki opens up a whole new door of possibilities for the Case Wiki. Documenting relations and attributes is only the first step. The real power comes in the ability to query the stored relations and attributes. For example, with a semantic-aware wiki, you will be able to craft specialized queries. For example, "Find buildings in the Case Quad built between 1900 and 1950" or "Find all places to eat in the Case Quad." Best of all, there will be no more need for manually-edited articles like "Places to get coffee." Instead, you can just query for "food providers who sell coffee." Cool, eh? I welcome any feedback people may have to this new feature.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Why Global Variables in PHP is Bad Programming Practice</title
><link href="http://blog.case.edu/gps10/2006/07/22/why_global_variables_in_php_is_bad_programming_practice"
 /><id
>http://blog.case.edu/gps10/2006/07/22/why_global_variables_in_php_is_bad_programming_practice</id
><published
>2006-07-23T01:32:21Z</published
><updated
>2006-07-24T16:11:59Z</updated
><category term="MediaWiki" label="MediaWiki"
 /><category term="PHP" label="PHP"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>I have done my fair amount of hacking PHP applications. In that time, I have come across many poor programming practices that have caused me to almost lose my mind. One that really grinds my gears is overuse of global variables.
<pre>
<code>
function myFunction()
{
  global $config1, $status1, $object1;

  if ($config1 === true) {
    $object1-&gt;doSomething();
  } else {
    if (!$status1) {
      $object1-&gt;doSomethingElse();
      $status1 = true;      
    } else {
      $object1-&gt;doAnotherThing();
    }
  }
}
</code>
</pre>If you are like me, code like the above drives you up a wall. The reason? The use of global variables was unjustified because better alternatives are available. The purpose of this entry is to explain why global variables are unjustified and what some alternatives are. First, we need to recognize that there are multiple types of global variables. Well, not technically (a PHP variable is a variable; it can be any type you want). Global variables can be distinguished by the type functionality they provide. I identify three types of global variables: Configuration Settings, Status Variables, and Global Objects
<h3>Configuration Settings</h3>The configuration setting global variable is a supposedly read-only variable used to dictate system-wide behavior. Configuration variables should never change when a program executes. Configuration setting variables are the least dangerous of the three types of global variables because the usage of a global variable to pass configuration information more or less makes sense. The downside to using global configuration variables is that they can be modified from anywhere in the program. Configuration settings should be read-only. All it takes is one unknowing programmer... The solution to global configuration settings? A static class instance holding all of the configuration settings. I recommend Zend Framework's 
<a href="http://framework.zend.com/manual/en/zend.config.html">Zend_Config</a> as the answer to the later part of that solution. I use the Zend Registry to store an instance of my config object. From any function in my program, I can just write
<pre>
<code>
  if (Zend::registry('config')-&gt;setting1) {
    //do something
  }
</code>
</pre>Note: In practice, I usually abstract the call to Zend::registry() in case I ever have a need to change which set of config variables I am using. Want another reason to use Zend_Config? It defaults to not allowing modifications of variables. Perfect for configuration settings!
<h3>Status Variables</h3>Status variables are used to keep track of something during the course of a program's execution. Whatever it is you are tracking you may need to access in multiple functions. It is painful to keep passing the same variable to these functions, so you figure a global variable is the best solution. For applications using the procedural design approach, I can see the argument for using global status variables. However, the second you move to OOP, it becomes poor programming practice. How do you solve the problem of global status variables? Object oriented programming. Good object oriented programming allows you to bury status variables as parts of objects. When a function is accessed, it looks at its internal status and reacts accordingly. Why should your addRecord() function check to see if there is a database connection? Your addRecord() function should just call $database-&gt;doQuery() and the database worries about establishing the connection. This probably sounds obvious to many, but you wouldn't believe how many times I have seen it in popular open source applications.
<h3>Global Objects</h3>
<pre>
<code>
function myFunction()
{
  global $myObject;
  $myObject-&gt;doSomething();
}
</code>
</pre>Whenever I see code like the above, my stomach feels queezy, especially when I see this reference inside a class method. The reason is that dependence on global object instances limits the flexibility of your program. I hate to single out applications, but here I must in order to illustrate my point. MediaWiki, the software that powers Wikipedia, is notorious for using global objects. In MediaWiki, the OutputPage class is an object used to build content for a page. Class methods for OutputPage have dependencies on global objects, like $wgParser, which is the globally-registered parser object. Whenever you call the parse() method on the OutputPage object to convert wikitext to HTML, $wgParser is referenced and its settings are applied. The problem with this approach is it is nearly impossible to have two instances of the OutputPage class with each using its own parser settings. Unfortunately, the problem exists in almost every class in MediaWiki, making extending the program beyond its traditional functionality almost impossible. Having objects depend on global objects is just plain dumb and should be avoided at all costs. So, how do you avoid this? One method is to make an object self-sufficient. Once an object is instantiated, it should not depend on any global variable, except perhaps a constant configuration setting. In your class contructor, copy the globally-referenced objects to member variables of your class. Do 
<b>not</b> rely on global variables after contruction. However, this is just a hack. You will eventuallly find the need for this proposterous coding pattern:
<pre>
<code>
$oldValue = $GLOBALS['object'];
$GLOBALS['object'] = new MyObject();

$instance2 = new MyOtherObject();
$GLOBALS['object'] = $oldValue;
</code>
</pre>Horrific, isn't it? The real solution is for your objects to not depend on any global objects at all. Anything that affects the behavior of an object should be passed to the constructor. Plain and simple. When designing a program, especially one that allows people to write their own plugins and extensions, it is imperative that there be no global object dependencies, because you never know how someone may extend the application. Plan for the unexpected and don't lock yourself into allowing only one type of behavior. After all of that, some of you are still saying that there are times when there only needs to be one instance of a particular object (say a class representing the browser request) and it is OK to use global variables. You would be correct, but only if the 
<i>static</i> keyword and the 
<a href="http://www.php.net/manual/en/language.oop5.patterns.php">Singleton pattern</a> it makes possible didn't exist. The Singleton pattern can be a very powerful tool in these situations. If you will only ever need one instance of an object across your whole program, then the Singleton pattern is the way to go. In summary, you should avoid using global variables because they limit program flexibility and their functionality can be duplicated using methods that are more aptly suited for the task at hand. If you are still not convinced that global variables in PHP is bad, I recommend querying your favorite search engine for "PHP global variable" and reading all the security-related problems that arise from poor use of global variables.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Gripes About MediaWiki</title
><link href="http://blog.case.edu/gps10/2006/05/01/gripes_about_mediawiki"
 /><id
>http://blog.case.edu/gps10/2006/05/01/gripes_about_mediawiki</id
><published
>2006-05-01T17:53:31Z</published
><updated
>2006-05-01T18:02:54Z</updated
><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>In trying to figure out what I want to do for MediaWiki as part of Google's 2006 Summer of Code, I am listing some of my gripes about MediaWiki, the software that powers Wikipedia and the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a>.
<h2>User-visible</h2>
<ul>
<li>No WYSIWYG. Unfortunately, not ready for prime-time.</li>
<li>Discussion method is horrible. Why not just integrate a tailored discussion board into MediaWiki. This is a front-runner.</li>
<li>Lack of robust permissions system. Can you protect specific articles? Articles with a prefix? Limit rights for specific sets of articles to specific groups? No. This is another front-runner.</li>
</ul>
<h2>Back-end</h2>
<ul>
<li>PHP 4. PHP 5 is the way. Not likely to be a viable project.</li>
<li>Use of global variables. Seriously, pass them as function parameters or have an object registry. This is on the table.</li>
<li>Configuration architecture. No web-config. No ability to run multiple wikis from one installation. This is also on the table.</li>
<li>No web services. Off the table according to developers.</li>
</ul></div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>MediaWiki + Google Summer of Code = Possible Project</title
><link href="http://blog.case.edu/gps10/2006/04/28/mediawiki_google_summer_of_code_possible_project"
 /><id
>http://blog.case.edu/gps10/2006/04/28/mediawiki_google_summer_of_code_possible_project</id
><published
>2006-04-28T21:20:16Z</published
><updated
>2006-04-28T21:26:51Z</updated
><category term="Google" label="Google"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>MediaWiki, the software that powers Wikipedia and the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a> is participating in Google's Summer of Code. Since I know MediaWiki like the back of my hand and since I have made many contributions to MediaWiki, I figure I stand a good chance at getting accepted into the program. This begs the question: What MediaWiki enhancements would you like to see? There are a few official ideas at 
<a href="http://meta.wikimedia.org/wiki/Summer_of_Code_2006">the Meta SoC article</a>, but I was curious what people at Case would be interested in. I know some librarians have interesting ideas for how wikis should work and should be enhanced. I know some have talked about Case launching a wiki farm. What if MediaWiki could be modified to allow the creation of "spaces," which are like smaller separate wikis? These spaces could have specific permissions. We could then use the Case Wiki as a wiki farm of sorts. Then, we wouldn't have to worry about administering two separate services. Enought ideas from me. Now it is your turn. Please leave some comments!</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>MediaWiki + Google Summer of Code = Possible Project</title
><link href="http://blog.case.edu/gps10/2006/04/28/mediawiki_google_summer_of_code_possible_project"
 /><id
>http://blog.case.edu/gps10/2006/04/28/mediawiki_google_summer_of_code_possible_project</id
><published
>2006-04-28T21:20:16Z</published
><updated
>2006-04-28T21:26:51Z</updated
><category term="Google" label="Google"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>MediaWiki, the software that powers Wikipedia and the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a> is participating in Google's Summer of Code. Since I know MediaWiki like the back of my hand and since I have made many contributions to MediaWiki, I figure I stand a good chance at getting accepted into the program. This begs the question: What MediaWiki enhancements would you like to see? There are a few official ideas at 
<a href="http://meta.wikimedia.org/wiki/Summer_of_Code_2006">the Meta SoC article</a>, but I was curious what people at Case would be interested in. I know some librarians have interesting ideas for how wikis should work and should be enhanced. I know some have talked about Case launching a wiki farm. What if MediaWiki could be modified to allow the creation of "spaces," which are like smaller separate wikis? These spaces could have specific permissions. We could then use the Case Wiki as a wiki farm of sorts. Then, we wouldn't have to worry about administering two separate services. Enought ideas from me. Now it is your turn. Please leave some comments!</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Thoughts on Establishing a Wiki Farm</title
><link href="http://blog.case.edu/gps10/2006/03/24/thoughts_on_establishing_a_wiki_farm"
 /><id
>http://blog.case.edu/gps10/2006/03/24/thoughts_on_establishing_a_wiki_farm</id
><published
>2006-03-24T07:31:05Z</published
><updated
>2006-03-24T19:55:13Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="Wiki" label="Wiki"
 /><category term="Wiki" label="Wiki"
 /><category term="collaboration" label="collaboration"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>Following in 
<a href="http://blog.case.edu/jms18/2006/02/01/three_wanted_its_services_wiki_farm">Jeremy's</a> 
<a href="http://blog.case.edu/jms18/2005/11/09/wiki_space">footsteps</a>, I am going to jot down my thoughts on a wiki farm at Case. I will try to avoid saying why a wiki farm is needed. Jeremy already did an excellent job at communicating that point. By now, hopefully you are aware of what a wiki is and why it is useful. Although the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a> is a great start, many still desire something that is less official, something that is smaller, something that is more customizable. Enter a wiki farm. A wiki farm is someplace you can go to create your own wiki. A wiki for every individual. A wiki for every group. Wikis viewable by just you. Wikis viewable by just your department. Wikis editable by students in a class. It doesn't matter. You have it any way you like it. A wiki farm at Case is a great idea. Here are some of my thoughts on the matter:
<h3>How independent are separate wikis?</h3>Are separate wikis actual separate wiki software installations, or are they simply spaces within a master wiki? The former would theoretically allow higher per-project customization and possibly even allow multiple wiki software packages to be utilized. The later would establish a more-controlled and uniform environment, but potentially at the cost of customization.
<h3>How do you leverage authentication and authorization?</h3>For authentication, there are two methods: 
<a href="http://wiki.case.edu/CAS">CAS</a> for authentication of university people, 
<a href="http://wiki.case.edu/Sympa">Sympa</a> (lists.case.edu) for authentication of external people. For authorization, we can do group membership through 
<a href="http://wiki.case.edu/LDAP">LDAP</a>, 
<a href="http://wiki.case.edu/Sympa">Sympa</a> and the 
<a href="http://wiki.case.edu/USG">USG</a> web service. 
<a href="http://wiki.case.edu/Shibboleth">Shibboleth</a> can also be leveraged in there too. How are all of these methods combined seemlessly? We need to select a software package(s) that allows these all to be used.
<h3>Why can't we use a wiki hosting provider?</h3>There are free wiki farms in existence. We could use them. However, they wouldn't integrate with our authentication and authorization architectures. Considering some wikis could be used to discuss sensitive university matters (say a wiki on how to invest the endowment), we would not want this information to leave the Case network. Reasons enough.
<h3>Consistency Matters</h3>Wiki syntax can be difficult to master. Do we really want to introduce a separate syntax from the Case Wiki that is only valid on the wiki farm? If so, does this mean we are constrained to using MediaWiki?
<h3>What software is available?</h3>MediaWiki is proven to work well for individual projects. We could install many instances of MediaWiki using custom software to manage them. I am very fluent in MediaWiki's architecture and could create something rather quickly. XWiki is a promising wiki software product that natively supports creating multiple wikis, or spaces, within one master wiki. XWiki is opensource and is coded in Java. Confluence is like XWiki, but costs money and looks to have a more confusing interface (from personal experience). Given financial situation of the university, rule out Confluence. DokuWiki, TiddlyWiki, and others should all be considered. Many would require custom software to tie them together in a wiki farm. Wiki syntax is different for every wiki.
<h3>Can MediaWiki Work?</h3>As stated earlier, I could hack out a farm control application for MediaWiki with relative ease. MediaWiki IS meant for single project installations. We would just have many installations controlled via the farmer interface and would give owners of each wiki control over what extensions to enable. However, MediaWiki can seem overpowering. It IS overkill to drive a 10-page, 5-user wiki. At the same time, syntax agrees with the Case Wiki. The work we put in to the development of the Case Wiki can easily be translated to the wiki farm. Because of the existence of the Case Wiki, MediaWiki is in a position of "why shouldn't we select MediaWiki" instead of "let's evaluate MediaWiki as a possibility." Is this logic flawed?
<h3>Other thoughts</h3>Is there a market for the service? The reason for proposing a wiki farm is to give people a place to play that is not the Case Wiki. The Case Wiki can't serve everyone's need. There must be another service. Yet, would people utilize such a service? ITS has an internal wiki. IT for Enrollment Management has an internal wiki. The Case iTunes group has a wiki. My fraternity has a wiki. Would these groups have chosen the central wiki service if it were available? How do we encourage people chose the central wiki service? Just some random thoughts at the wee hours of the morning. Perhaps when somebody gives the green light for the wiki farm, my thoughts will be consulted. Who knows.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>My Sins Against the Wiki Community</title
><link href="http://blog.case.edu/gps10/2006/01/26/my_sins_against_the_wiki_community"
 /><id
>http://blog.case.edu/gps10/2006/01/26/my_sins_against_the_wiki_community</id
><published
>2006-01-27T02:46:39Z</published
><updated
>2006-01-27T03:18:07Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="Wiki" label="Wiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>Last December, I was contacted through the grapevine to explore the possibility of using the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a> to host the discussion for the 
<a href="http://wiki.case.edu/2006_Academic_Happy_Hour">2006 Academic Happy Hour</a>. Organizers wanted a piece of technology that could be used during and after the event for collaboration. I told them it is possible to do this with the Case Wiki, but other products, such as 
<a href="http://forum.case.edu">forum.case.edu</a> or this blog system might be better suited, depending on the discussion format and desired output. Earlier this month, I was informed that the deciding powers had chosen to use the Case Wiki and the format for discussion was well within the abilities of MediaWiki. So, I thought all was well. I went to obtain the implementation details so I could see what skeleton pages I would need to create. There, I was told something I wasn't expecting: the administration have decided that they want the wiki postings from the Academic Happy Hour to be restricted to just the Case community. First, I was shocked, as this was the most remote possiblity imaginable after the past discussions about the usability of the Case Wiki. Secondly, I started second-guessing the decision. Why would they want to protect content? It is not like they are checking ID's at the door. Anyway, I am a worker bee. I needed to make this work. So, here we are. I have just committed a page restriction patch to the Case Wiki. Only certain users (currently just me) can "restrict" pages. Once a page is restricted, only a logged-in user can view it. Let me assure the community that as soon as the administration deems the content on the Academic Happy Hour page worthy of public consumption, I will remove the page restriction feature. What is the point in having an encyclopedia where certain volumes are behind lock and key? I don't know either.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Watching Wikis in Real Time</title
><link href="http://blog.case.edu/gps10/2005/12/18/watching_wikis_in_real_time"
 /><id
>http://blog.case.edu/gps10/2005/12/18/watching_wikis_in_real_time</id
><published
>2005-12-19T04:14:57Z</published
><updated
>2005-12-19T04:20:20Z</updated
><category term="AJAX" label="AJAX"
 /><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>I have created an AJAX-powered extension to MediaWiki that lets you watch edits in a wiki in real time. It is like watching the recent changes page with an automatically updated view of the differences between articles. Something like this would go a long way to make a wiki a credible medium for real-time collaboration. Check it out at 
<a href="http://wiki.case.edu/Special:AJAXWatcher">Special:AJAXWatcher</a>. First, load up the page then make an edit on the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a>. More features will come soon. If the extension is buggy, I apologize. I can confirm it works with Firefox 1.5 on Linux ;)</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>The Semantic Web and the Future of Wikis</title
><link href="http://blog.case.edu/gps10/2005/12/07/the_semantic_web_and_the_future_of_wikis"
 /><id
>http://blog.case.edu/gps10/2005/12/07/the_semantic_web_and_the_future_of_wikis</id
><published
>2005-12-07T18:28:18Z</published
><updated
>2005-12-07T23:32:30Z</updated
><category term="MediaWiki" label="MediaWiki"
 /><category term="WikiPedia" label="WikiPedia"
 /><category term="semantic web" label="semantic web"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>Everyone knows the 
<a href="http://www.wikipedia.org">Wikipedia</a>, the free encyclopedia. It has thousands of users and the content is, on average, pretty reputable. The Wikipedia can be used as a quick source to find facts. However, these facts are expressed in tables, phrases, and sentences in entries. For example, 
<a href="http://en.wikipedia.org/wiki/Abraham_Lincoln">Wikipedia:Abraham Lincoln</a>. To get facts such as his birthdate, years in office, etc, somebody types these attributes into the article. After those attributes are entered, the computer knows nothing about them other than the fact they are characters forming a string forming the article content. That is, without somebody manually adding the article to 
<a href="http://en.wikipedia.org/wiki/Category:1865_deaths">Category:1865 deaths</a>, we have no way to extract this information. In the ideal world, one would have a article for a person, define their date of death, and we could query in real-time and without relying on individual's resiliance to make an article of a category saying so, the people who died in a certain year. The 
<a href="http://en.wikipedia.org/wiki/Semantic_Web">Semantic Web</a> is a project to create a medium in which to exchange this type of information-- attributes and relationships among things. The biggest hurdle with the Semantic Web is establishing this information. How do you collect it? How do you update it? How do you verify its integrity? I hypothesize that a wiki, especially the Wikipedia, is an excellent arena in which to define significant portions of the Semantic Web. I'm elated to see that the 
<a href="http://meta.wikimedia.org/wiki/Semantic_MediaWiki">Semantic MediaWiki</a> project exists to do just this. By slightly modifying the syntax in which you compose wiki articles, you can define relations and attributes of the articles themselves. For example, instead of typing "Nord Hall is a building in the Case Quad" (or
<pre>
"[[Nord Hall]] is a building in the [[Case Quad]]"
</pre>in wiki syntax), you would type
<pre>
"[[Nord Hall]] is a [[is a::building]] in the [[located in::Case Quad]]"
</pre>. You could further define attributes about the article, for example
<pre>
"It has [[floors:=3]] floors"
</pre>. Although there is no difference to the average user, the relationship of this article to others and attributes of this article are now understood by the wiki-- by a computer. This opens up a whole floodgate of possibilities. Imagine you are visiting campus and you want to know your way around the Case Quad. You know about the existence of the Case Quad, but not what the buildings are. So, you go to 
<a href="http://wiki.case.edu/Category:Case_Quad">Category:Case Quad</a> on the Case Wiki. What you might see are articles tagged as relevant to the Case Quad. Some of these could be statues, fountains, etc. You don't care about them! You just want buildings. But wait, since the wiki knows about other article's relationships to the Case Quad, it can automatically say "They are n buildings located in the Case Quad. Here is a list." Or, you are composing a paper about the history of the Case Quad. You cannot find a list or map anywhere of what the Quad resembled in 1940. So, instead of referencing articles for every building in the Case Quad category, you just say, "Give me a list of buildings located in the Case Quad that were built before 1940." Since all the relationships and attributes of objects are known, the possibilities for data harvesting is immense. For an example of the Semantic MediaWiki project in action, see the 
<a href="http://wiki.ontoworld.org/index.php/San_Diego">San Diego article on the demo site</a>.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Creating Graphs</title
><link href="http://blog.case.edu/gps10/2005/12/06/creating_graphs"
 /><id
>http://blog.case.edu/gps10/2005/12/06/creating_graphs</id
><published
>2005-12-06T16:07:11Z</published
><updated
>2005-12-06T16:28:42Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>I want to create an extension for MediaWiki that will all users to create graphs of data. I'm not talking about simple relationship graphs, as exist with 
<a href="http://wiki.case.edu/Category:People">Category:People</a>, but instead graphs that depict data. I would like a line graph of the cost of tuition over the years to be an easy thing to make. So, the big question is: how do you faciliate to creation of these graphs to the average user? Ideally, everything would be a web form. This is out of the question, as forms and MediaWiki do not play well together. Instead, I have to resort to some kind of markup to describe the graph. For instance, if you look at 
<a href="http://wiki.case.edu/Category:University_Presidents">Category:University Presidents</a>, you will see markup that describes a timeline. Likewise, it is possible to embed 
<a href="http://www.graphviz.org">Graphviz</a> markup in articles to render Graphviz graphs. So, I'm looking at some kind of a markup language. Do readers think that a graph markup language is something that could be understood by others? Are there any graph markup languages in existence? I just need something plain and simple. You specify the type of graph, labels, axis scale, and data points. I was thinking about something like the following:
<pre>
bar {
  title = Cost of Tuition at Case
  xtitle = Year
  ytitle = Total Tuition Cost ($)
  
  data {
    (1993, 15200)
    (1994, 15700)
    (1995, 16300)
    (1996, 17100)
    (1997, 17800)
    (1998, 18400)
    (1999, 19200)
    (2000, 20100)
    (2001, 21000)
    (2002, 22500)
    (2003, 24100)
    (2004, 26500)
  }
}
</pre>This would be the most basic example. You specify a plot type, some labels, and your data, and the graph gets generated for you. Of course, there could be other options that you can set, but those would be optional. I plan on using 
<a href="http://www.aditus.nu/jpgraph/">JpGrah</a>, so the possibilities for graphs are almost endless. The problem is encapsulating everything in a markup language without exposing the user to PHP function calls. If anyone could provide your opinion on this endeavor, it would be much appreciated.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Graphs and Wikis, Oh My, Part Deux</title
><link href="http://blog.case.edu/gps10/2005/12/02/graphs_and_wikis_oh_my_part_deux"
 /><id
>http://blog.case.edu/gps10/2005/12/02/graphs_and_wikis_oh_my_part_deux</id
><published
>2005-12-02T05:03:51Z</published
><updated
>2005-12-02T05:13:26Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="Wiki" label="Wiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>In a 
<a href="http://blog.case.edu/gps10/2005/11/29/graphs_and_wikis_oh_my">previous post</a> I talked about the things that could be done with graphs on wikis. After a few hours programming today, I managed to create a quite elaborate graph extension for MediaWiki. Although I haven't gotten around to creating a plotting graph extension (yet), I am rather pleased with my current extension. On the wiki, you will notice 
<a href="http://wiki.case.edu/Special:Graphs">Special:Graphs</a>. This is my extension. There are a few links on that page that let you download XML that describes a graph for a dataset. That's only half of it! From the XML description of the graph of the entire wiki, I am able to extract relevant datasets and formulate them how I desire. One format method is 
<a href="http://www.graphviz.org">Graphviz</a>, which, (surprise, surprise) has a parser hook in the Case Wiki. So, by querying Special:Graphs/graphviz/category/categoryname, where categoryname is a category in the Case Wiki, you get the Graphviz markup to display a visual representation of that category. You will notice that this graph is now displayed automatically on some category pages (categories with about 10 or less nodes to be exact). Check out: 
<a href="http://wiki.case.edu/Category:People">Category:People</a> 
<a href="http://wiki.case.edu/Category:Bars">Category:Bars</a> 
<a href="http://wiki.case.edu/Category:Computer_Networks">Category:Computer Networks</a> I know the font looks a little weird. It has to do with not have TrueType installed on the wiki server. I'll look into recompiling the image generator later. Until then, happy wiki'ing.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Semantic MediaWiki</title
><link href="http://blog.case.edu/gps10/2005/11/30/semantic_mediawiki"
 /><id
>http://blog.case.edu/gps10/2005/11/30/semantic_mediawiki</id
><published
>2005-12-01T03:08:58Z</published
><updated
>2005-12-01T03:10:18Z</updated
><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>
<a href="http://meta.wikimedia.org/wiki/Semantic_MediaWiki">Semantic MediaWiki</a> The possibilities for data harvesting are endless.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Remove Edit Restrictions on the Case Wiki</title
><link href="http://blog.case.edu/gps10/2005/11/08/remove_edit_restrictions_on_the_case_wiki"
 /><id
>http://blog.case.edu/gps10/2005/11/08/remove_edit_restrictions_on_the_case_wiki</id
><published
>2005-11-08T16:25:46Z</published
><updated
>2005-11-08T16:50:29Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="Wiki" label="Wiki"
 /><category term="WikiPedia" label="WikiPedia"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>I've been thinking a bit lately about removing some of the restrictions that are currently in place on the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a>, mainly limiting user accounts to users with a Case ID and password and disallowing anonymous edits. Although I can make an argument either way about these issues, I will try to outline by basic thoughts below. Why should we be selfish and limit principal authorship of content to the Case community? Case plays an important role in Cleveland, Ohio, and the international research scene. Why should we prevent those affected by us from posting information? The purpose of a wiki is to share information. Limiting membership limits the knowledge base of potentially shared information. However, people who have membership probably have 80-95% of the knowledge of Case that exists. We are limiting membership because we want to trace edits back to people. There have been a few cases already when one or two people have posted questionable content. We knew who they were. They can be contacted easily. Opening up editing rights potentially opens the floodgates. There will be a constant battle with spam bots. People will need to moderate individual posts and posting users. Information might not be as trusted because it isn't tied to a name. Is this situation desirable? Can the community at-large contribute that much more to the wiki? Will the Case community decide to contribute anonymously? There are many paths we can take in opening up the Case Wiki. If we were to open it up completely, I would personally recommend against a flag day where all restrictions are removed. Instead, I would opt for a gradual lifting of restrictions. Then, it might be possible to see what effect each has on its usage. Currently, the Case Wiki requires you to log in (requires Case network id) to edit normal pages. All talk/discussion pages can be edited anonymously. How should we proceed? I came up with the following potential steps:
<ul>
<li>Allow recognized users from other universities to log in via 
<a href="http://wiki.case.edu/Shibboleth">Shibboleth</a>. They will get usernames like joe.smith@mit.edu or emily.jones@cmu.edu</li>
<li>Allow external users to register accounts. These could be in any format except the user@domain and firstname.lastname format. We should require these users to verify their e-mail address to prevent spam bot attacks.</li>
<li>Allow all pages to be edited anonymously. This could cause issues.</li>
</ul></div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>New Syndicated Feeds on the Case Wiki</title
><link href="http://blog.case.edu/gps10/2005/10/31/new_syndicated_feeds_on_the_case_wiki"
 /><id
>http://blog.case.edu/gps10/2005/10/31/new_syndicated_feeds_on_the_case_wiki</id
><published
>2005-10-31T18:21:41Z</published
><updated
>2005-10-31T18:25:49Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="Wiki" label="Wiki"
 /><category term="syndicated feeds" label="syndicated feeds"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>I completely rewrote our custom 
<a href="http://wiki.case.edu/CaseWiki:Feeds">syndicated feeds</a> plugin for MediaWiki this weekend. The new version has some slight semantic differences from the old, so if you notice any weird changes in your news readers, please comment on 
<a href="http://wiki.case.edu/CaseWiki_Talk:Feeds">CaseWiki_Talk:Feeds</a>. One notable change is the addition of a feed for your watchlist. For example, 
<a href="http://wiki.case.edu/misc/atom/Gregory.Szorc/watchlist">http://wiki.case.edu/misc/atom/Gregory.Szorc/watchlist"&gt; Enjoy.</a></div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Iowa State University Wiki</title
><link href="http://blog.case.edu/gps10/2005/10/27/iowa_state_university_wiki"
 /><id
>http://blog.case.edu/gps10/2005/10/27/iowa_state_university_wiki</id
><published
>2005-10-28T02:17:50Z</published
><updated
>2005-10-28T02:27:15Z</updated
><category term="MediaWiki" label="MediaWiki"
 /><category term="Wiki" label="Wiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>
<a href="http://www.rofflehaus.com/wiki/Main_Page">Rofflehaus</a>, a wiki for Iowa State University and surrounding areas is the most developed university-centered wiki I have seen to date. They appear to be using it as a portal for information, posting sports schedules and scores, recent and upcoming events, etc. The maturity of the wiki is pretty impressive given the fact it only started on July 1 of this year. They also have about 100k more hits than the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a> with only half the number of users. Of course, our user number is a bit deceiving because our wiki logs you in automatically if you are logged into 
<a href="http://wiki.case.edu/CAS">CAS</a>, but still... Still, I am having a difficult time finding university-centered wikis hosted by the university itself. It seems to be a pattern that these wikis are the ones that take longer to grow. I blame the requirement for registered users. Of course, removing that 
<a href="http://www.rofflehaus.com/wiki/Category:Sex">taints</a> your wiki.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Wiki Touchgraph</title
><link href="http://blog.case.edu/gps10/2005/10/13/wiki_touchgraph"
 /><id
>http://blog.case.edu/gps10/2005/10/13/wiki_touchgraph</id
><published
>2005-10-14T03:40:55Z</published
><updated
>2005-10-14T03:43:51Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="Maps" label="Maps"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="Wiki" label="Wiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>I found this cool applet called 
<a href="http://www.touchgraph.com">Touchgraph</a> that does pretty cool relational plotting. Just check out 
<a href="http://wiki.case.edu/Special:Touchgraph">Special:Touchgraph</a> on the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a> for a quick preview. It still has a long way to go, but you get the idea.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Are Wiki Engines the Future of Content Management?</title
><link href="http://blog.case.edu/gps10/2005/09/14/are_wiki_engines_the_future_of_content_management"
 /><id
>http://blog.case.edu/gps10/2005/09/14/are_wiki_engines_the_future_of_content_management</id
><published
>2005-09-14T20:09:53Z</published
><updated
>2005-09-14T20:31:27Z</updated
><category term="Computing" label="Computing"
 /><category term="Content Management" label="Content Management"
 /><category term="MediaWiki" label="MediaWiki"
 /><category term="Wiki" label="Wiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>Wiki software such as MediaWiki, the package that powers 
<a href="http://en.wikipedia.org">WikiPedia</a> and the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a>, is very robust and has potential beyond operating wikis. Imagine MediaWiki modified to have granular permissions with adjustable scope. You now have the perfect content management system. The software contains numerous enterprise-class features, such as multi-tier caching and load-balancing. Editing pages is very simple, using an easy-to-learn markup. Also, by using a wiki engine, you would get a full page history and a recent changes list. The differences between wiki software and content management software is very small. With MediaWiki, the only real difference is the lack of a robust permission system and the inability to create infinite levels of structure. If MediaWiki were modified to include these, it would instantly become a free and viable enterprise-class content management system. Anyone looking at shelling out lots of $$$ for a commercial content management system should look at modifying MediaWiki for a fraction of the cost. The results won't be disappointing.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Google Sitemaps Significantly Help Spidering</title
><link href="http://blog.case.edu/gps10/2005/08/15/google_sitemaps_significantly_help_spidering"
 /><id
>http://blog.case.edu/gps10/2005/08/15/google_sitemaps_significantly_help_spidering</id
><published
>2005-08-15T19:10:23Z</published
><updated
>2005-08-15T19:29:58Z</updated
><category term="CaseWiki" label="CaseWiki"
 /><category term="Computing" label="Computing"
 /><category term="Google" label="Google"
 /><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>A week ago, I registered the 
<a href="http://wiki.case.edu/Main_Page">Case Wiki</a> with 
<a href="https://www.google.com/webmasters/sitemaps/">Google Sitemaps</a> (
<a href="http://mail.wikipedia.org/pipermail/mediawiki-l/2005-August/006254.html">1</a>). Today, I looked at the 
<a href="http://wiki.case.edu/stats/">Case Wiki statistics</a> and was surprised at the difference it makes. Just compare the 
<a href="http://wiki.case.edu/stats/awstats.pl?framename=mainright#robots">Case Wiki robot stats</a> to the 
<a href="http://blog.case.edu/stats/awstats.pl?framename=mainright#robots">Blog@Case robot stats</a>. Even though the Case blog system has more traffic and many more pages, the Google Sitemaps support allowed every single page in the Case Wiki to be indexed overnight. Since the Google Sitemaps XML files also contain metadata about the pages, including their last update time, this means more efficient robot spidering and better search results. With the search engine friendliness of the Case Wiki, I wonder how long it is before articles like 
<a href="http://wiki.case.edu/Department_of_History">Department of History</a> are higher in the search results than the 
<a href="http://www.case.edu/artsci/hsty/">actual site</a>.</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
><entry
><title
>Looking for Other Universitiy Wikis</title
><link href="http://blog.case.edu/gps10/2005/08/06/looking_for_other_universitiy_wikis"
 /><id
>http://blog.case.edu/gps10/2005/08/06/looking_for_other_universitiy_wikis</id
><published
>2005-08-06T16:46:46Z</published
><updated
>2005-08-06T16:51:34Z</updated
><category term="MediaWiki" label="MediaWiki"
 /><content type="xhtml"
><div xmlns="http://www.w3.org/1999/xhtml"
>Inspired by the discovery of 
<a href="http://oberwiki.net/">oberwiki.net</a> this morning (which is pretty darn cool), I was curious what other universities have wikis. If you know of one, please post a comment to this post!</div
></content
><author
><name
>Gregory Szorc</name
><email
>gregory.szorc@case.edu</email
><uri
>http://blog.case.edu/gps10</uri
></author
></entry
></feed
>