<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>mediawiki &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/mediawiki/</link>
	<description>Feed of posts on WordPress.com tagged "mediawiki"</description>
	<pubDate>Tue, 01 Dec 2009 10:03:01 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[New SQL Parser in dbscript]]></title>
<link>http://devio.wordpress.com/2009/11/30/new-sql-parser-in-dbscript/</link>
<pubDate>Mon, 30 Nov 2009 07:51:08 +0000</pubDate>
<dc:creator>devio</dc:creator>
<guid>http://devio.wordpress.com/2009/11/30/new-sql-parser-in-dbscript/</guid>
<description><![CDATA[I wrote about my plans to add a new SQL parser engine into dbscript a couple of months ago. Now the ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I wrote about my plans to add a <a href="http://devio.wordpress.com/2009/06/29/parsing-sql-into-xml-and-c-objects/" target="_blank">new SQL parser engine</a> into <a href="http://www.devio.at/index.php/dbscript" target="_blank">dbscript</a> a couple of months ago. Now the time has come to actually implement it for T-SQL (MS SQL Server; Oracle and PostgreSQL will follow in future versions), and I found that I did not foresee all the consequences of my initial intent. The overall architecture remained the same though.<img src="http://static.devio.at/t.gif?http://devio.wordpress.com/2009/11/30/new-sql-parser-in-dbscript" alt="" width="1" height="1" /></p>
<p>The grammar definition allows to define attributes on non-terminals. Using the SQL Server versions as attributes (2005, 2008), I can mark commands or clauses as their support or feature has been introduced in a specific version, and store the database version as property of the uploaded Project Version.</p>
<p>The parser skips the parts of the uploaded file that it cannot parse, and writes these parts to the upload log. Up to now, the parser would simply fail if it considered the SQL file somehow invalid.</p>
<p>The (C#) object representation of a parsed SQL command has a boolean flag IsHandled for each non-terminal. The code processing the object representation needs to mark every non-terminal object as being handled (i.e. translated into schema information stored in the database). Objects that have not been flagged will also be listed in the upload log.</p>
<p>Next, the new parser allowed me to rewrite the dependency analysis. Until now, dbscript only analyzed view dependencies to order the CREATE VIEW statements. Dependency analysis has now been extended to all database objects.</p>
<p>One more major issue that has been solved is parsing and interpreting EXECUTE statements. Thus an EXEC sp_addextendedproperty is interpreted as adding a description to a database object.</p>
<p>This obviously led to changes in the XML generation of database schemas. Each object now lists its descriptions and the dependencies on and references from other database objects.</p>
<p>The XSL stylesheets which translate a project version XML into markup or HTML have been revised to reflect the additional information in the generated XML.</p>
<p>All taken together, the new parser adds:</p>
<ul>
<li>better feedback on which parts of the uploaded SQL file have been processed</li>
<li>dependency analysis</li>
<li>object and column descriptions</li>
</ul>
<p>See the following links documenting AdventureWorks OLTP 2008 (version 2005) for the effects of the new functionality:</p>
<p><a href="http://static.devio.at/AdvWorks2008-05-oltp.instawdb.sql.html" target="_blank">Single HTML file documentation</a></p>
<p><a href="http://dbshelp.devio.at/index.php/Database_Objects_AdventureWorks_2008-05" target="_blank">MediaWiki documentation</a></p>
<p><a href="http://screwturn.devio.at/AdventureWorks_2008-05_OLTP.ashx" target="_blank">ScrewTurn Wiki documentation</a></p>
<p>In both wikis, compare the (old-style) &#8220;wikibot&#8221; section with the new section &#8220;automatically generated&#8221; to see the changes.</p>
<p>The next version of dbscript with the mythical version number &#8220;1.0&#8243; will be released soon <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Mini concours de personnalisation de sommaire]]></title>
<link>http://darkoneko.wordpress.com/2009/11/29/mini-concours-de-personnalisation-de-sommaire/</link>
<pubDate>Sun, 29 Nov 2009 15:19:30 +0000</pubDate>
<dc:creator>DarkoNeko</dc:creator>
<guid>http://darkoneko.wordpress.com/2009/11/29/mini-concours-de-personnalisation-de-sommaire/</guid>
<description><![CDATA[Chalutations, Suite à mon billet &#8220;Personnalisons Wikipédia : le sommaire&#8220;, je lance un m]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Chalutations,</p>
<p>Suite à mon billet &#8220;<a rel="bookmark" href="http://darkoneko.wordpress.com/2009/11/21/personnalisons-wikipedia-le-sommaire/">Personnalisons Wikipédia : le sommaire</a>&#8220;, je lance un mini-concours de personnalisations : il n&#8217;y a rien à gagner, si ce n&#8217;est le plaisir de partager son code et de le voir réutilisé ! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Donc, j&#8217;invite chacun à faire son propre design de sommaire, et poster dans la zone commentaire du présent billet un lien vers une capture d&#8217;écran du résultat (par exemple uploadée sur <a href="http://imageshack.us/">imageShack</a>)+un lien vers votre monobook.css/vector.css. Une personne peut poster plusieurs designs, pour peu qu&#8217;ils soient notablement différents.</p>
<p>Le &#8220;mini concours&#8221; ouvre aujourd&#8217;hui (29 novembre) et se terminera dans 2 semaines (le 12 décembre 2009 au soir), suite à quoi je posterais une compilation de vos différentes œuvres. Je suis disponible sur IRC et ma page de discussion pour répondre à vos éventuelles questions et vous aider à débugger un peu si nécessaire.</p>
<p>Wikimédiens, à vos claviers !</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Chromium i problem z wyświetlaniem panelu nawigacji w MediaWiki]]></title>
<link>http://wredny.wordpress.com/2009/11/29/chromium-i-problem-z-wyswietlaniem-panelu-nawigacji-w-mediawiki/</link>
<pubDate>Sun, 29 Nov 2009 10:16:44 +0000</pubDate>
<dc:creator>wredny</dc:creator>
<guid>http://wredny.wordpress.com/2009/11/29/chromium-i-problem-z-wyswietlaniem-panelu-nawigacji-w-mediawiki/</guid>
<description><![CDATA[Używając tematu MonoBook lub Książka w wersji polskiej w MediaWiki, natknąłem się na problem z wyświ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Używając tematu MonoBook lub Książka w wersji polskiej w MediaWiki, natknąłem się na problem z wyświetlaniem panelu nawigacji. Problem występuje jeżeli używamy przeglądarki Chrome lub Chromium.</p>
<p>Rozwiązaniem jest edycja pliku skins/monobook/KHTMLFixes.css należy zmienić 3 linię pliku na:</p>
<pre>/* #column-content { margin-left: 0; } */</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Czyszczenie bazy MediaWiki ze starych wersji stron]]></title>
<link>http://wredny.wordpress.com/2009/11/29/czyszczenie-bazy-mediawiki-ze-starych-wersji-stron/</link>
<pubDate>Sun, 29 Nov 2009 10:09:12 +0000</pubDate>
<dc:creator>wredny</dc:creator>
<guid>http://wredny.wordpress.com/2009/11/29/czyszczenie-bazy-mediawiki-ze-starych-wersji-stron/</guid>
<description><![CDATA[Skrypt usuwa stare wersje (edycje) stron. Został przetestowany na MediaWiki wersja 1.15.1, przed wyk]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Skrypt usuwa stare wersje (edycje) stron. Został przetestowany na MediaWiki wersja 1.15.1, przed wykonaniem skryptu zalecam wykonanie kopii zapasowej. Skrypt usuwa również historię obserwowanych stron.</p>
<pre>delete from revision where rev_id not in (select page_latest from page);
delete from text where old_id not in (select rev_text_id from revision);
delete from recentchanges;
update revision set rev_parent_id=0;</pre>
<p>Po wykonaniu skryptu możemy sprawdzić ilość wierszy w tabelach text, page oraz revision. Jeśli ilość wierszy w każdej z nich jest taka sama to znaczy, że wszystko poszło zgodnie z planem.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Czyszczenie bazy MediaWiki z starych wersji]]></title>
<link>http://wredny.wordpress.com/2009/11/29/czyszczenie-bazy-mediawiki-z-starych-wersj/</link>
<pubDate>Sun, 29 Nov 2009 09:53:39 +0000</pubDate>
<dc:creator>wredny</dc:creator>
<guid>http://wredny.wordpress.com/2009/11/29/czyszczenie-bazy-mediawiki-z-starych-wersj/</guid>
<description><![CDATA[Skrypt usuwa stare wersje (edycje) stron. Został przetestowany na MediaWiki wersja 1.15.1, przed wyk]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Skrypt usuwa stare wersje (edycje) stron. Został przetestowany na MediaWiki wersja 1.15.1, przed wykonaniem skryptu zalecam wykonanie kopii zapasowej.</p>
<pre>delete from revision where rev_id not in (select page_latest from page);
delete from text where old_id not in (select rev_text_id from revision);
update revision set rev_parent_id=0;</pre>
<p>Po wykonaniu skryptu możemy sprawdzić ilość wierszy w tabelach text, page oraz revision. Jeśli ilość wierszy w każdej z nich jest taka sama to znaczy, że wszystko poszło zgodnie z planem.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cookies!]]></title>
<link>http://doncorr.wordpress.com/2009/11/22/cookies/</link>
<pubDate>Mon, 23 Nov 2009 02:19:06 +0000</pubDate>
<dc:creator>doncorr</dc:creator>
<guid>http://doncorr.wordpress.com/2009/11/22/cookies/</guid>
<description><![CDATA[When a Muppet retires, he may go to the Jim Henson Company Archives. He may not merely report to the]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p style="text-align:left;">When a Muppet retires, he may go to the Jim Henson Company Archives. He may not merely report to the archives in puppet form, though&#8212;he may show up as an animation cell or even a sketch by Jim Henson himself. Cookie Monster, Elmo and Kermit will be preserved for future generations of Sesame Street viewers&#8212;and for those of us who enjoy the reruns.</p>
<p style="text-align:left;">The archives are now in turn preserved&#8212;or at least described&#8212; on a wiki, <a title="Henson media wiki" href="http://muppet.wikia.com/wiki/The_Jim_Henson_Company_Archives" target="_blank">http://muppet.wikia.com/wiki/The_Jim_Henson_Company_Archives</a>.</p>
<p style="text-align:left;">While the wiki doesn&#8217;t necessarily present the archives as being especially innovative, the MediaWiki itself is worth considering as a point of discussion. Originally for use on Wikipedia, <a href="http://www.mediawiki.org/wiki/MediaWiki" target="_blank">MW</a> is open-source PHP (briefly, Web-development scripting language) software. <a href="http://www.wikia.com/wiki/Wikia:About" target="_blank">Wikia.com</a> has utilized the software, via a <a href="http://en.wikipedia.org/wiki/Free_content" target="_blank">free content</a> license, to develop a wiki site to be used by &#8220;millions of passionate fans.&#8221; While the Jim Henson Company Archive entry seems to be accurate and informed, the banner ads surrounding the wiki entry are off-putting. Is it right to profit from open-source software? If it is, by how much? Non-profits developing software utilized by for-profit companies?</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[External Data]]></title>
<link>http://dialektos.wordpress.com/2009/11/21/external-data/</link>
<pubDate>Sat, 21 Nov 2009 19:08:55 +0000</pubDate>
<dc:creator>dialektos</dc:creator>
<guid>http://dialektos.wordpress.com/2009/11/21/external-data/</guid>
<description><![CDATA[External Data se trata de una extensión para Semantic MediaWiki que nos proporciona la capacidad de ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>External Data se trata de una extensión para Semantic MediaWiki que nos proporciona la capacidad de obtener, filtrar y dar formato a datos externos para la inclusión en un artículo. Se definen 5 funciones parseadoras:</p>
<ul>
<li><strong>#get_external_data</strong> para obtener datos CSV, XML o JSON desde una URL, y asignarlos a variables que pueden ser accesibles en la página</li>
<li><strong>#get_db_data</strong> para obtener datos de una BBDD relacional</li>
<li><strong>#get_ldap_data</strong> para obtener datos de un servidor LDAP</li>
<li><strong>#external_value</strong> para mostrar el valor de esos datos</li>
<li><strong>#for_external_table</strong> recorre todos los valores obtenidos para un juego de variables, mostrando el mismo contenedor para cada una de ellas</li>
</ul>
<p>&#160;</p>
<h3>Obtención de datos de una URL mediante CSV, XML o JSON</h3>
<p>En caso de que vayamos contra una API cuya salida se ajusta a una de estas 3 mencionadas, llamaremos a la siguiente función:</p>
<pre>{{#get_external_data:URL&#124;format&#124;external_variable_name1==filter_value1&#124;...&#124;local_variable_name2=external_variable_name2&#124;...}}
</pre>
<ul>
<li><strong>URL</strong> es la ruta del fichero CSV, XML o JSON</li>
<li><strong>format</strong> es &#8216;XML&#8217;, &#8216;CSV&#8217;, &#8216;CSV with header&#8217; o &#8216;JSON&#8217;</li>
<li>los parámetros con un &#8216;<strong>==</strong>&#8216; son filtros; hacen un filtrado sobre las &#8220;filas&#8221; devueltas. Lo normal es que la API contra la que vayamos ya tenga filtrado gracias a los parámetros de la URL.</li>
<li>los parámetros con un &#8216;<strong>=</strong>&#8216; son mapeados; permiten conectar variables externas  a variables locales. Las variables externas son los nombres de los valores en el fichero. Las variables locales son las que se pasarán más tarde a la función #external_value</li>
</ul>
<p>Se pueden hacer varias llamadas a esta función en una misma pagina; sólo tenemos que tener cuidado eligiendo nombres distintos para las variables locales.</p>
<p>Podemos reemplazar un string en la URL, por ejemplo para esconder la clave de acceso a la API. Para ello, escribiremos una línea como la siguiente en LocalSettings:</p>
<p><code>$edgStringReplacements['FLICKR_KEY'] = '9fh349f7yhwiye';</code></p>
<p>y en el artículo escribiremos FLICKR_KEY, sustituyéndose a posteriori por la clave.</p>
<p>&#160;</p>
<h3>Mostrando los datos</h3>
<p>Una vez  hemos obtenido los datos, existen dos maneras de mostrarlos: #external_values y #for_external_table:</p>
<p><strong>1) Mostrar datos individualmente</strong></p>
<p>Tan sencillo como llamar a la primera función:</p>
<pre>{{#external_value:local_variable_name}}
</pre>
<p><strong>2) Mostrar una tabla de valores</strong></p>
<p>Los datos obtenidos mediante #get_external_data pueden tener varios valores por campo, por lo que nos gustaría mostrarlos como una tabla. Para ello escribimos lo siguiente:</p>
<pre>{{#for_external_table:expression}}
</pre>
<p>donde expression se trata de un string conteniendo las variables que queremos entre triples llaves. Por ejemplo:</p>
<pre>{&#124;
! Name
! Borders
! Population
! Area {{#for_external_table:&#60;nowiki/&#62;
{{!}}-
{{!}} {{{name}}}
{{!}} {{{borders}}}
{{!}} {{{population}}}
{{!}} {{{area}}} }}
&#124;}
</pre>
<p>&#160;</p>
<h3>Extras</h3>
<ul>
<li>Podemos hacer que los datos obtenidos remotamente se conviertan en datos semánticos, y además que esos datos se puedan actualizar si la fuente cambia, con una simple tarea cron.</li>
<li>Podemos limitar las URLs contra las que se puede ir creando una Whitelist</li>
</ul>
<p>Más información sobre todo esto a continuación.</p>
<p>Fuente: http://www.mediawiki.org/wiki/Extension:External_Data</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Personnalisons Wikipédia : le sommaire]]></title>
<link>http://darkoneko.wordpress.com/2009/11/21/personnalisons-wikipedia-le-sommaire/</link>
<pubDate>Sat, 21 Nov 2009 18:49:51 +0000</pubDate>
<dc:creator>DarkoNeko</dc:creator>
<guid>http://darkoneko.wordpress.com/2009/11/21/personnalisons-wikipedia-le-sommaire/</guid>
<description><![CDATA[Ce billet fait partie de la série &#8220;Personnalisons Wikipédia&#8220;. La personnalisation du jou]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ce billet fait partie de la série &#8220;<a href="http://darkoneko.wordpress.com/tag/personnalisons-wikipedia/">Personnalisons Wikipédia</a>&#8220;. La personnalisation du jour vous permettra de rendre toutes ces pages trop sérieuses un poil plus rigolotes (ou pas) en modifiant la tronche de leur sommaire à l&#8217;aide de quelques lignes de CSS.</p>
<p>Comme d&#8217;habitude, le code est à insérer dans votre sous page <a href="http://fr.wikipedia.org/wiki/special:mypage/monobook.css">/monobook.css</a>, ou <a href="http://fr.wikipedia.org/wiki/special:mypage/vector.css">/vector.css</a> selon le skin MediaWiki  que vous utilisez.</p>
<h3>Partie HTML</h3>
<p>Le code d&#8217;un sommaire ressemble à ça (l&#8217;exemple est pris sur la page du bulletin des admins, pour les titres de section) :</p>
<pre><big><big>
&#60;table id="toc" class="toc"&#62;
[...]
&#60;ul&#62;
	&#60;li class="<span style="color:#ff6600;">toclevel-1 tocsection-1</span>"&#62;<span style="color:#0000ff;">
		&#60;a href="#(semaine)"&#62;&#60;span class="tocnumber"&#62;(numérotation)&#60;/span&#62; &#60;span class="toctext"&#62;(semaine)&#60;/span&#62;&#60;/a&#62;</span>
		&#60;ul&#62;
			&#60;li class="<span style="color:#ff6600;">toclevel-2</span> <span style="color:#ff6600;">tocsection-2</span>"&#62;
				<span style="color:#0000ff;">[..lien section jour, identique a celui des semaines ci dessus..]</span>
				&#60;ul&#62;
					&#60;li class="<span style="color:#ff6600;">toclevel-3</span> <span style="color:#ff6600;">tocsection-3</span>"&#62;<span style="color:#0000ff;">[..</span></big><span style="color:#0000ff;"><big>lien section </big></span><big><span style="color:#0000ff;">titre..]</span>&#60;/li&#62;
					&#60;li class="<span style="color:#ff6600;">toclevel-3 </span><span style="color:#ff6600;">tocsection-4</span><span style="color:#ff6600;"> </span>"&#62;<span style="color:#0000ff;">[..</span></big><span style="color:#0000ff;"><big>lien section </big></span><big><span style="color:#0000ff;">titre..]</span>&#60;/li&#62;
					&#60;li class="<span style="color:#ff6600;">toclevel-3</span> <span style="color:#ff6600;">tocsection-5</span>"&#62;<span style="color:#0000ff;">[..</span></big><span style="color:#0000ff;"><big>lien section </big></span><big><span style="color:#0000ff;">titre..]</span>&#60;/li&#62;
				&#60;/ul&#62;
			&#60;/li&#62;
			&#60;li class="<span style="color:#ff6600;">toclevel-2</span><span style="color:#ff6600;"> tocsection-6</span>"&#62;<span style="color:#0000ff;">
				[..lien section jour..]</span>
				&#60;ul&#62;
					&#60;li class="<span style="color:#ff6600;">toclevel-3</span> <span style="color:#ff6600;">tocsection-7</span>"&#62;<span style="color:#0000ff;">[..</span></big><span style="color:#0000ff;"><big>lien section </big></span><big><span style="color:#0000ff;">titre..]</span>&#60;/li&#62;
					&#60;li class="<span style="color:#ff6600;">toclevel-3</span><span style="color:#ff6600;"> tocsection-8</span>"&#62;<span style="color:#0000ff;">[..</span></big><span style="color:#0000ff;"><big>lien section </big></span><big><span style="color:#0000ff;">titre..]</span>&#60;/li&#62;
				&#60;/ul&#62;
			&#60;/li&#62;
			[...]
		&#60;/ul&#62;
	&#60;/li&#62;
&#60;/ul&#62;
&#60;/table&#62;
</big></big></pre>
<p>Les deux choses importantes à retenir sont :</p>
<ul>
<li>Chaque niveau du sommaire à une classe dédiée (toclevel-X ). C&#8217;est là dessus que se basera notre code CSS.</li>
</ul>
<ul>
<li>Les niveaux sont imbriqués (niveau 2 contenu dans le 1, 3 dans le 2, etc), ce qui signifie que si on ne précise pas le contraire, un code affecté au niveau 2 affectera par défaut tous les niveaux 3 à 6  qu&#8217;il contient</li>
</ul>
<h3>Le code CSS</h3>
<p>Vous connaissez déjà le gros de la syntaxe utilisée car elle a déjà été expliquée dans mes précédents billets (si vous ne les avez pas lu, c&#8217;est le moment <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Les quelques éléments nouveaux seront détaillés en /* commentaires */ dans le code.</p>
<p>Le bout de code ci dessous donnera un style &#8220;météo&#8221; à l&#8217;ensemble des sommaires. J&#8217;expliquerais plus bas comment limiter son action à seulement certains d&#8217;entre eux (par exemple, uniquement le bistro, ou uniquement l&#8217;espace <em>wikipédia:</em> )</p>
<p>Initialement, je comptais faire un style plus ensoleillé&#8230; mais pas moyen de trouver une icone potable de chapeaux mexicains. Donc tant pis, les icones météo feront l&#8217;affaire. De toute manière, ça n&#8217;est qu&#8217;un exemple, le but étant que vous ayez la curiosité de modifier/adapter  le code à votre sauce ensuite (soyons fous et optimistes&#8230;)</p>
<pre><big><big>
<span style="color:#777777;">/* sommaires, "météo mode"
   les modifications sont faites sur le lien (a) plutôt que sur la ligne (li) afin que l'icône soit cliquable.
 */

/* effacer la numérotation du sommaire, car elle va m'embêter pour la suite */</span>
.tocnumber {
	<span style="color:#0000ff;">display:none;</span>
}
<span style="color:#808080;">
<span style="color:#777777;">/* grande font, bleu foncé, avec un soleil à gauche */</span></span>
.toclevel-1 a {
<span style="color:#0000ff;">	color:#007;
	font-size:160%;

	background:transparent url('http://upload.wikimedia.org/wikipedia/commons/thumb/5/52/Crystal_sun.png/25px-Crystal_sun.png') no-repeat scroll left bottom;
	padding-left:29px;</span><span style="color:#777777;"><span style="color:#0000ff;"> </span>/* décaler le texte sur la droite pour laisser de la place a l'icône */</span>
}

<span style="color:#777777;">/* font un peu moins grande, bleu standard, icône nuageuse à sa gauche */</span>
.toclevel-2 a {
<span style="color:#ff6600;">	<span style="color:#0000ff;">font-size:130%;
	color:#00F;

	background:transparent url('http://upload.wikimedia.org/wikipedia/commons/thumb/7/72/Cloudy01.svg/20px-Cloudy01.svg.png') no-repeat scroll left bottom;
	padding-left:24px;</span></span>
}

<span style="color:#777777;">/* font taille normal, bleu plus clair, icône orage */</span>
.toclevel-3 a {
<span style="color:#0000ff;">	font-size:100%;
	color:#55F;

	background:transparent url('http://upload.wikimedia.org/wikipedia/commons/c/cf/Weather_lightning.png') no-repeat scroll left bottom;
	padding-left:19px;</span>
}

<span style="color:#777777;">/* font plus petite, bleu encore un peu plus clair, pas d'icône (car serait trop petite pour être reconnaissable) */</span>
.toclevel-4 a {
	<span style="color:#0000ff;">font-size:80%;
	color:#99F;

	<span style="color:#ff6600;"><span style="color:#0000ff;">background:none; </span><span style="color:#777777;">/* pas d'image de fond (l'icône sur la gauche), il faut le spécifier sinon celle du niveau 3 s'affichera */</span>
</span></span><span style="color:#ff6600;"><span style="color:#0000ff;">	</span></span><span style="color:#ff6600;"><span style="color:#777777;">/* je laisse le padding-left hérité du niveau supérieur pour que le décalage soit cohérent avec les niveaux d'au dessus */</span></span>}
</big></big>
</pre>
<h3>Le résultat</h3>
<p style="text-align:center;"><img class="aligncenter" title="Personnalisons Wikipédia : le sommaire" src="http://darkoneko.wordpress.com/files/2009/11/toc_style_meteo.png" alt="" width="307" height="268" /></p>
<p style="text-align:left;">Pour vous donner une meilleure idée de l&#8217;impact, j&#8217;ai aussi fait une capture des sommaires du BA et du bistro avec ce thème, c&#8217;est cliquable et c&#8217;est ci dessous. Moins lugubre tout de suite, non ?</p>
<p style="text-align:center;"><a href="http://darkoneko.wordpress.com/files/2009/11/toc_style_meteo_bistro.png"><img style="margin-right:15px;" title="Personnalisons Wikipédia : le sommaire" src="http://darkoneko.wordpress.com/files/2009/11/toc_style_meteo_bistro.png?w=300" alt="" width="300" height="264" /></a><a href="http://darkoneko.wordpress.com/files/2009/11/toc_style_meteo_ba.png"><img title="Personnalisons Wikipédia : le sommaire" src="http://darkoneko.wordpress.com/files/2009/11/toc_style_meteo_ba.png?w=200" alt="" width="200" height="259" /></a></p>
<h3>Limiter la portée du code</h3>
<p>Maintenant, vous n&#8217;avez probablement pas envie que ce code soit actif sur absolument toutes les pages, et souhaitez le limiter a un/des namespace(s) ou des pages en particuliers.</p>
<p>Je veux dire, ce style rend bien pour les pages qui ont une arborescence sur plusieurs niveaux, mais pour une page ou ça n&#8217;est pas le cas, ça ressemble plutôt à ça, que je trouve moche :</p>
<p style="text-align:left;"><a href="http://darkoneko.wordpress.com/files/2009/11/toc_style_meteo_-_estampe.png"><img class="size-full wp-image-2063 aligncenter" title="toc_style_meteo_-_estampe" src="http://darkoneko.wordpress.com/files/2009/11/toc_style_meteo_-_estampe.png" alt="" width="249" height="247" /></a></p>
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">Pour ce faire, nous allons nous servir d&#8217;une série de classes que MediaWiki affecte à chaque page. Par exemple, le Bulletin des administrateurs (avec ma config) possède celles ci :</p>
<pre><big><big>
&#60;body class="<span style="color:#ff6600;">mediawiki ltr ns-4 ns-subject page-Wikipédia_Bulletin_des_administrateurs skin-monobook</span>"&#62;
</big></big></pre>
<p>(je saute celles que je ne connais/comprend pas)</p>
<ul>
<li>&#8220;<span style="color:#ff6600;">ltr</span>&#8221; indique que nous sommes dans un mode &#8220;left to right&#8221; (en opposition, par exemple, à l&#8217;arabe qui se lis en <em>rtl</em>, de droite à gauche)</li>
</ul>
<ul>
<li>&#8220;<span style="color:#ff6600;">ns-4</span>&#8221; est l&#8217;identifiant du namespace de la page (ici<em> wikipédia:</em> )</li>
</ul>
<ul>
<li>&#8220;<span style="color:#ff6600;">page-Wikipédia_Bulletin_des_administrateurs</span>&#8221; est un identifiant unique (ou presque) de la page</li>
</ul>
<ul>
<li>&#8220;<span style="color:#ff6600;">skin-monobook</span>&#8220;, comme son nom l&#8217;indique, spécifie que j&#8217;utilise le skin &#8220;monobook&#8221; pour visualiser la page. Les utilisateurs d&#8217;Açai/Babaco verront à la place &#8220;<span style="color:#ff6600;">skin-vector</span>&#8220;.</li>
</ul>
<p>Les deux qui nous intéressent sont celui qui indique le namespace et celui qui est unique à la page.</p>
<p>Mettons que je veuille limiter la portée du code au namespace <em>wikipédia:</em> . Au lieu de</p>
<pre><big><big>.toclevel-1 a {</big></big></pre>
<p>il suffit de mettre</p>
<pre><big><big>.ns-4 .toclevel-1 a {</big></big></pre>
<p>Et si je veux limiter sa portée au BA et au bistro, le code devient</p>
<pre><big><big>.page-Wikipédia_Bulletin_des_administrateurs .toclevel-1 a, .page-Wikipédia_Le_Bistro .toclevel-1 a  {</big></big></pre>
<p>Et voila le travail !</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[ انتخاب نرم افزار مدیریت محتوا]]></title>
<link>http://lahijsoft.wordpress.com/2009/11/18/%d9%be%d8%a7%d8%b1%d8%a7%d9%85%d8%aa%d8%b1%d9%87%d8%a7%db%8c-%d9%85%d9%87%d9%85-%d8%af%d8%b1-%d8%a7%d9%86%d8%aa%d8%ae%d8%a7%d8%a8-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d9%85%d8%af%db%8c/</link>
<pubDate>Wed, 18 Nov 2009 17:12:04 +0000</pubDate>
<dc:creator>میلاد صبح خیز</dc:creator>
<guid>http://lahijsoft.wordpress.com/2009/11/18/%d9%be%d8%a7%d8%b1%d8%a7%d9%85%d8%aa%d8%b1%d9%87%d8%a7%db%8c-%d9%85%d9%87%d9%85-%d8%af%d8%b1-%d8%a7%d9%86%d8%aa%d8%ae%d8%a7%d8%a8-%d9%86%d8%b1%d9%85-%d8%a7%d9%81%d8%b2%d8%a7%d8%b1-%d9%85%d8%af%db%8c/</guid>
<description><![CDATA[ابزارهای مدیریت محتوا باید هم راستا با استراتژی و سیاست های کلان شرکت ها باشند. از این رو پیش از انت]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>ابزارهای مدیریت محتوا باید هم راستا با استراتژی و سیاست های کلان شرکت ها باشند. از این رو پیش از انتخاب ابزار، بر رعایت سه گام اصلی تاکید می شود.</p>
<p>۱) تعریف و تفکیک سرویس هایی که قرار است ارائه شود؟ (Portfolio)</p>
<p>۲) تعریف نوع مخاطبانی که قرار است از این سرویس ها استفاده کنند؟ (Demand)</p>
<p>۳) هزینه تهیه و نگهداری و استفاده از سرویس های ارائه خواهد شد؟ (Finance)</p>
<p>در گام اول خدماتی که قرار است ارائه شود تعریف شده و چشم اندازی از ابزارهای موردنیاز ترسیم می شود. در گام دوم مشخص می شود که این خدمات برای کدام دسته از مخاطبان طراحی شده و در گام سوم تبیین می شود که هزینه عرضه و استفاده از این خدمات چگونه است؟ با رعیت گام های سه گانه فوق الذکر می توان حدود و ثغور ابزارهای فنی را مشخص کرد. همچنین بر وجود دو رویکرد متفاوت و متقابل در طراحی و تولید نرم افزارهای مدیریت محتوای متن باز و رایگان تاکید شد. اگر قرار باشد دقیق تر صحبت کنیم باید رویکردهای دوگانه را به سه رویکرد اقیانوس بی کران، چاه لایتناهی و دریاچه امن تعمیم داده و درباره مشخصات هریک به اختصار بگویم که: . رویکرد اول که اقیانوس بی کران خطاب می شود به تولید نرم افزار همه کاره توجه نشان می دهد و مشابه اقیانوسی به عمق یکی دو سانتی متر و وسعتی بی کران است. کمیت امکانات در این گونه نرم افزارها فراوان است که با قابلیت های فنی محدودی ارائه می شوند. نرم افزارهای عام راه اندازی وب سایت و پورتال مانند DotNetNuke و WebGUI و TikiWiki از این دسته اند.</p>
<p>رویکرد دوم که به گونه ای فانتزی چاه لایتناهی خوانده می شود، به تولید نرم افزار تخصصی اعتقاد دارد و همانند چاهی به قطر یکی دو سانتی متر و عمقی بی نهایت است. کمیت امکانات در این قبیل نرم افزارها محدود اما از بعد کیفی قابل توجه است. نرم افزارهای تخصصی وبلاگ و دانش نامه مانند MovableType و WordPress و MediaWiki از این دسته اند. . رویکرد سوم که چند سالی است مورد توجه قرار گرفته، دریاچه امن خوانده می شود و گرته برداری هوشمندانه ای از رویکردهای دوگانه قبلی است، بدین صورت که اعتقادی به ارائه امکانات کیفی لایتناهی و امکانات کمی بی کران نداشته و بر ایجاد تعادل در امکانات منتخب تاکید دارد. به طور خلاصه می توان گفت که رویکرد دریاچه امن بر ارائه بهنیه امکانات اصرار می کند. نرم افزارهای مبتنی بر این رویکرد از یک سو امکانات قابل توجهی دارد و از دیگرسو قدری هم وارد لایه های تخصصی می شود. نرم افزارهای Drupal و Plone بهترین نمونه های تولید شده با رویکرد بهینه هستند.</p>
<p><strong>● هزینه مالکیت نهایی</strong></p>
<p>تب استفاده از فرآورده های جنبش متن باز و رایگان چنان بیداد می کند که توجه به زیر و زبر کار در این هیاهو اغلب فراموش می شود. انتخاب نرم افزارهای متن باز اغلب براساس تصور نادرست کاهش هزینه ها صورت می گیرد. اصطلاح Total Cost of Ownership در میان زعمای وادی فناوری اطلاعات بسیار مورد استفاده قرار دارد و به مجموع هزینه هایی اطلاق می شود که از ابتدای تعریف خدمات تا پایان آن باید صرف شود. موسسه گارتنر نشان داده که تعریف انواع خدمات نیازمند گرد آمدن دانش و ابزارهای سخت افزاری و نرم افزاری و مدیریت و پشیبانی و غیره است. در این میان ۷۰ درصد هزینه ارائه خدمات صرف ارائه خدمات پشتیبانی شده و تنها ۶ درصد هزینه صرف تهیه نرم افزار می شود. سخت افزار حدود ۱۵ درصد و پیاده سازی شبکه حدود ۲ درصد از کل هزینه خدمات را صرف می کنند. حدود ۷ درصد از کل هزینه نیز به علت عدم دسترسی خدمات تلف می شود. براین اساس می توان گفت که استفاده از نرم افزارهای متن باز در بهترین حالت کمتر از یک بیستم در هزینه کل صرفه جویی خواهد کرد. موضوع ارائه خدمات کیفی پشتیبانی جایگاه ویژه ای در برنامه ریزی های اغلب سازمان های ایرانی که وظف به ارائه خدمات الکترونیک هستند ندارد. خلاصه این که درآمد اصلی اغلب شرکت های حاضر در وادی فناوری اطلاعات و ارتباطات از بطن خدمات حاصل می شود.</p>
<p><!--more--></p>
<p><strong>● آیا مدیریت محتوا ضرورت دارد؟</strong></p>
<p>بعضی سازمان ها نیازی به استفاده از نرم افزار مدیریت محتوا نمی بینند و صرف داشتن آدرسی اینترنتی (URL) و یکی دو صفحه ثابت (html) که آدرس و تلفن تماس با سازمان در آن لحاظ شده باشد را کافی می دانند. اما اگر بیش از یکی دو مرتبه در ماه نیاز به تغییر محتوا یا انتشار محتوای جدید دارید، اگر وجود بلاگ در وب سایت شما ضرورت دارد، اگر می خواهید تغییرات را به طور مستقیم و بدون دخالت برنامه نویسان در محتوای وب سایت اعمال کنید، اگر می خواهید که وابستگی جغرافیایی به وب سایت نداشته باشید و از هر نقطه آن را مدیریت کنید و اگر می خواهید که وب سایت شما به سهولت توسط سیستم های جستجو مانند یاهو و گوگل شناسایی شوند، ناگزیر به استفاده از نرم افزار مدیریت محتوا هستید، در غیر این صورت همان صفحات ثابت برای شما کفایت خواهد کرد.</p>
<p><strong>● از منظرهای مختلف</strong></p>
<p>انتخاب نرم افزار مدیریت محتوا را از منظرهای مختلف می توان بررسی کرد. به عنوان مثال می توان چند نکته را مورد توجه قرار داد و نرم افزارهای متعدد را با آن فیلتر کرد، یا فهرستی از قابلیت های خاص را تهیه و انطباق قابلیت های مختلف نرم افزارهای گوناگون را با آن بررسی کرد. توصیه می کنیم که از هر دو منظر به موضوع انتخاب بهینه نرم افزار مدیریت محتوا نگریسته شود تا انتخابی جامع و مانع صورت گیرد.</p>
<p><strong>● انتخاب از منظر نکته های کلیدی</strong></p>
<p>▪ اول؛ به طور عمومی این گونه تصور می شود که تمام نرم افزارهای مدیریت محتوا برای تولید، تغییر، انتشار و نگهداری محتوا به کار می روند و کار دیگری برای انجام ندارند. کارکرد اصلی نرم افزارها و شیوه مدیریت محتوا را در همین قدم باید زیر ذره بین قرار داد. به عنوان مثال نرم افزار WordPress برای ایجاد وبلاگ شخصی و خرده وب سایت ها استفاده می شود. از Drupal و Plone برای ایجاد وب سایت های بزرگ و متعدد استفاده می شود. همچنین باید در شیوه مدیریت محتوا نیز دقیق شد. برخی از نرم افزارهای ایجاد وبلاگ اجازه تعریف صفحه نمی دهند و تمام کارها را به صورت خودکار (هوشمند) انجام می دهند.</p>
<p>▪ دوم؛ کار با محتوا به شکل ذاتی با امکانی به نام ویرایشگر گره خورده است. ویرایشگر بخشی از نرم افزار محسوب می شود که بین کاربر و نرم افزار قرار گرفته و دریچه ای است که محتوا را از کاربر دریافت کرده یا برای ایجاد تغییر در اختیار کاربر قرار می دهد. برخی از نرم افزارها از ویرایشگرهای ضعیف استفاده می کنند که امکانات مختصری دارند. برخی دیگر این ضعف را با امکان افزودن نرم افزارهای ویرایشگر مرتفع ساخته اند. ویرایشگر مطلوب باید از دسته ویرایشگرهای WYSIWYG باشد. البته این گونه از ویرایشگرها با امکاناتی همراه هستند که کمتر مورد استفاده قرار می گیرند.</p>
<p>اگر به ویرایشگرهای ساده نیاز دارید، از انواع WYSIWYG صرف نظر کنید. در ضمن WYSIWYG مخفف عبارتی است که ترجمه اش می شود محتوا به همان صورتی نمایش داده می شود که وارد ویرایشگر شده است.</p>
<p>▪ سوم؛ این مورد را به دقت مورد بررسی قرار دهید که آیا نرم افزار مورد نظر شما امکان مدیریت منابع محتوایی دیگر مانند انواع فایل و تصاویر را مهیا کرده است یا خیر. اغلب نرم افزارهای مدیریت محتوا از این مشکل رنج می برند و امکانات مناسبی عرضه نمی کنند. در ضمن به غنای امکانات مدیریتی تصاویر دقت و شیوه های علامت گذاری فایل ها بیشتری داشته باشید.</p>
<p>▪ چهارم؛ امکان جستجو از جنس امکانات حیاتی سیستم هاست. بیشتر کاربران، وب سایت ها را از طریق وب سایت های جستجو پیدا می کنند. غنای امکانات جستجو تضمین می کند که وب سایت به سهولت قابل دسترس است. اغلب نرم افزارهای مدیریت محتوا شامل بخشی ذیل عنوان مدیریت جستجو (Search management) هستند، اما کیفیت در موارد مختلف متفاوت است. منابع متعددی در این باره صحبت کرده اند و استفاده از آنها اکیدا توصیه می شود. شک نکنید که امکان جستجوی اغلب نرم افزارهای مدیریت محتوا برای فعالیت های جدی کفایت نمی کند.</p>
<p>▪ پنجم؛ این نکته بدیهی را به خاطر بسپارید که تکنولوژی نرم افزاری نباید شیوه نمایش محتوا را مشخص کند، بلکه چگونگی نمایش محتوا باید به طور کامل توسط کاربر مدیریت شود. ارائه چنین امکانی به معماری نرم افزار بستگی دارد. بسیاری از نرم افزارهای کنونی از معماری MVC پیروی می کنند که محتوا در لایه ای مستقل (Content) نگهداری می شود و در لایه ای دیگر نمایش (Design) داده می شود. برنامه نویسانی که به تجربه های موفق دیگران وقعی نمی نهند و بر شیوه نه چندان موثر خود اصرار می ورزند کم نیستند و باید از این دست نرم افزارها اجتناب کرد.</p>
<p>▪ ششم؛ استراتژی سازمانی و سیاست شرکت ها جایگاه مخاطب را مشخص می کند.</p>
<p>چنانچه این امر از موارد ضروری قلمداد شود، باید از نرم افزارهایی بهره برد که امکان گردآوری و دسته بندی نظرات کاربران را فراهم سازند. اغلب نرم افزارها امکاناتی در این باره عرضه می کنند که برای امور ساده کفایت می کند. در کاربری های جدید باید از امکاناتی حرفه ای مدد جست که برقراری ارتباط دوطرفه با مخاطب را در اختیلر مدیریت قرار می دهد.</p>
<p>▪هفتم؛ اینکه حدود و ثغور اختیارات و بازه عمل کاربران مشخص شود از مهم ترین ویژگی های نرم افزارهای فاخر است. غنای این امکانات به کاربری وب سایت و تعداد مخاطب و کاربران پشتیبان مربوط می شود. برخی از نرم افزارها می توانند به دقت مشخص کنند که کدام کاربر، در کدام بخش ها، چه نقش هایی (Roles) دارد و مجاز (Permission) به انجام کدام کار است. حتی چگونگی انجام کارها نیز در برخی نرم افزارها قابل تعریف است. در نرم افزارهای فاخر می توان جریان محتوا (Workflow) را به طور کامل تعریف، مدیریت و حتی ارزیابی کرد.</p>
<p>▪ هشتم؛ اینکه بتوان به نسخه های قبلی محتوا دسترسی داشت برای برخی از افراد و سازمان ها واجد اهمیت است. این امکان اغلب با عنوان Versioning در نرم افزارهای مدیریت محتوا قرار می گیرد و استفاده از آن چندان ضرورت ندارد. بیشتر دانش نامه ها و وب سایت های خبری از طرفداران این امکان هستند.</p>
<p>▪ نهم؛ بسیار مشاهده شده که یک سازمان واحد نیاز به راه اندازی و مدیریت چندین وب سایت دارد و برای هر یک، از نرم افزاری مشابه و مستقل استفاده کرده است. برخی از نرم افزارهای مدیریت محتوا امکانی تحت عنوان Multiple Website دارند که به مدد آن می تواند چندین وب سایت مختلف را با دامنه های متفاوت با یک نرم افزار واحد راه اندازی و مدیریت کرد.</p>
<p>این امکان بیش تر مطلوب سازمان ها بود، اما افراد حقیقی نیز چندی است که از این امکان بهره می گیرند و بعید نیست که ظرف دو سه سال آینده به امکان اصلی بسیاری از نرم افزارهای مدیریت محتوا تبدیل شود.</p>
<p>▪ دهم؛ پشتیبانی از زبان های مختلف به اهداف مالکان نرم افزار مدیریت محتوا مربوط می شود. چنانچه قرار باشد از زبان های دیگر مانند عربی و انگلیسی و سواحیلی و اردو و اسپانیولی و پرتغالی پشتیبانی شود، همان بهتر که از نرم افزاری استفاده شود که این امکان را به صورت ذاتی در خود دارد. این قبیل نرم افزارها را در اصطلاح Multilingual خطاب می کنند. همچنین برای پشتیبانی از زبان فارسی باید نرم افزار از UTF-۸ پشتیبانی کند.</p>
<p>▪یازدهم؛ این که کدام یک از نکات فوق ارجحیت دارند به مراجعی مربوط می شود که قصد راه اندازی وب سایت را دارند. شاید نکته هفتم (نقش ها و مجوزها) از نکته دوم (ویرایشگر) اهمیت بالاتری داشته باشد. امنیت دسترسی ها و امکان انتخاب دستی URL برای هر مطلب و امکان تعریف Metadata برای هر مطلب و امکان دسته بندی های متنوع و پشتیبانی از RSS و پشتیبانی از CSS و تکنولوژی های توسعه و دسترسی به منابع آموزشی و موارد دیگر را نیز می توانند در زمره نکات مهم قرار داد. در بخش بعدی، فرایند انتخاب نرم افزار مدیریت محتوا را از منظری دیگر مورد بررسی قرار خواهم داد.</p>
<p><strong>● انتخاب از منظر ویژگی های فنی</strong></p>
<p>پیش از آغاز این بخش، ذکر این نکته لازم است که نرم افزارهای مختلف از منظر ویژگی های فنی توسط منابع و مراجع مختلف در دسته های متفاوتی قرار می گیرند که برای مخاطب عام معنادار هستند. در صورتی که مخاطب خاص می داند وضعیت فلان نرم افزار در فلان دسته بندی ضعف قلمداد می شود یا خیر.</p>
<p>▪ اول؛ نیازمندی های فنی (System Requirements) نرم افزار را از منظر بستر فنی مورد بررسی قرار می دهد. نوع سیستم عامل، وب سرور، پایگاه داده، مجوزها، زبان برنامه نویسی و غیره در این دسته قرار می گیرد. به طور خلاصه می توان گفت که نرم افزارهای متن باز مبتنی بر زبان برنامه نویسی PHP و پایگاه داده MySQL و وب سرور Apache در اولویت قرار دارند. برای سیستم های بزرگ استفاده از پایگاه داده شئ گرای PostgreSQL توصیه می شود. دیگر این که اغلب نرم افزارهای جدید مستقل از سیستم عامل طراحی می شوند. هر چند ثابت شده است که کارایی سیستم عامل لینوکس بالاتر است.</p>
<p>▪ دوم؛ امنیت (Security) از ویژگی های بسیار حیاتی است که از جنبه های مختلف در انتخاب نرم افزار تاثیر خواهد داشت. مواردی چون تصدیق هویت (Authentication) و SSL و مجوزهای دسترسی مشروط مانند Captcha و مدیریت نشست ها (Session Management) در این حوزه بررسی می شوند.</p>
<p>در صورت امکان توصیه می شود که مطالعه جامعی در این باره توسط کارشناسان فنی مجموعه انجام شود. این را هم بگوییم که نرم افزارهای کنونی به پشتیبانی از گونه های مختلف Authentication مانند Granular و Kerberos و LDAP و غیره اکتفا می کنند.</p>
<p>▪ سوم؛ پشتیبانی (Support) از موارد حائز اهمیت در انتخاب نرم افزار است. امکان دریافت خدمات حرفه ای، مشاوره، دسترسی به انواع مکتوبات، وب سایت های مرجع، کنفرانس های منطقه ای، دسترسی به مراکز داده حرفه ای طرف قرارداد با توسعه دهندگان نرم افزار و… ذیل امنیت مورد بررسی قرار می گیرند. این که بالاخره مرجعی برای رفع مشکلات وجود داشته باشد و حتی بتوان در ازای صرف هزینه مشورت دریافت کرد، برای برخی سازمان ها اهمیت دارد. این موارد کمتر برای افراد حقیقی مهم تلقی می شوند، هر چند قابل اغماض نیستند.</p>
<p>▪ چهارم؛ سهولت استفاده (Ease of Use) به امکاناتی اشارت دارد که تسهیل کننده مدیریت محتوا و کاربران باشند. امکان آپلود یک باره تعداد زیادی فایل (Mass Upload)، امکان ورود محتوا به صورت Drag &#38; Drop، امکان پیش نمایش وب سایت (Prototyping)، امکان لغو دستورات (Undo)، امکان تبادل فایل های فشرده (Zip Archives)، امکان استفاده از ویرایشگر WYSIWYG، امکان تعریف آدرس های دلخواه (Friendly URLs) و امکان مدیریت کامل بر تصاویر از جمله مواردی است که موجب سهولت در استفاده از نرم افزار خواهد شد. سرعت، دقت و لذت کار با نرم افزار با استفاده از این امکانات افزایش قابل توجهی خواهد داشت.</p>
<p>▪ پنجم؛ کارایی (Performance) شامل موارد پیشرفته ای چون نگهداری موقت محتوا برای درخواست های متعدد (AdvancedCaching)، امکان تبادل غیرهمزمان داده میان پایگاه داده ها (Replication) و امکان مدیریت درخواست میان سرورهای مختلف (Load Balancing) می شود. این گونه امکانات اغلب مورد استفاده وب سایت های بزرگ قرار گرفته و برای منابع محتوایی محدود اهمیت ندارد.</p>
<p>▪ ششم؛ ابزارهای مدیریتی (Management Tools) که به طور کامل در اختیار مدیریت مجموعه قرار می گیرد و از موارد فوق العاده مهم در انجام بهینه مدیریت محسوب می شود. مدیریت تبلیغات، مدیریت منابع محتوایی مانند تصاویر و فایل های متنوع، مدیریت دسترسی به بخش های مهم، مدیریت چند وب سایت ذیل یک نرم افزار، مدیریت محتوای اضافی، مدیریت آمارها، مدیریت جریان کاری مجموعه و مدیریت قالب های بصری در این حوزه مورد بررسی قرار می گیرند. توجه به این بخش اهمیت وافری برای مالکن وب سایت های بزرگ و پرمخاطب دارد. اغلب نرم افزارهایی که با عنوان پورتال (Portals) و دانش نامه (Wikis) منتشر می شوند در این زمینه غنی از امکانات هستند.</p>
<p>▪ هفتم؛ امکانات تعاملی (Interoperability) مورد نیاز تمام مجموعه هاست. این موارد بیشتر در نرم افزارهایی مطرح می شوند که با عنوان شبکه های اجتماعی (Social Network) منتشر می شوند. پشتیبانی از RSS و UTF-۸ و WebDAV و سازگاری با XHTML در این حوزه بررسی می شود. هر چه امکانات تعاملی وب سایت بالاتر باشد، امکان مشارکت مخاطبان در جریان محتوا افزایش خواهد یافت.</p>
<p>▪ هشتم؛ انعطاف (Flexibility) بیشتر مفهوم فنی دارد و به امکاناتی اشاره می کند که موجب دسترسی آسان تر به محتوا و مدیریت بهتر مجموعه می شوند. به عنوان مثال امکان بازنویسی آدرس اینترنتی برای هر صفحه (URL Rewriting) و امکان تعریف اطلاعات تکمیلی (Metadata) و امکان تولید محتوا و استفاده متعدد از یک محتوا (Content Reuse) یا پشتیبانی از امکان فنی CGI-Mode که برای برخی مجموعه های ضروری قلمداد می شود از این موارد است. چنانچه دو نرم افزار را که تفاوت های در این حوزه دارند با یکدیگر مقایسه کنید، خواهید دید که استفاده از نرم افزاری که شامل این امکانات است برای پشتیبان و مخاطب سهل تر خواهد بود.</p>
<p>▪ نهم؛ امکانات ذاتی (Built-in Applications) شامل تمامی امکانتی است که در سیستم های مختلف ذیل عناوین Module و Component شناخته می شوند و انجام فعالیت های اصلی مجموعه های تحت وب را در اختیار دارند. تمام آنچه که بلاگ، امکان چت، امکان دسته بندی، انواع گزارش گیری ها، تقویم، پرسش های مکرر، نظرسنجی، رای گیری، نظرات کاربران، نقشه وب سایت، امکان RSS و ویکی خطاب می شوند در این بخش قرار می گیرند. تنوع امکانات در این بخش به نوع نرم افزار بستگی دارد. به عنوان مثال نرم افزار e۱۰۷ در این باره فوق العاده فقیر است و برای پیاده سازی وب سایت های بزرگ مناسب نیست، حال آنکه نرم افزارهای Drupal و TikiWiki غنی از انواع امکانات هستند. ذکر این نکته ضرورت دارد که برخی امکانات به صورت ذاتی در بطن نرم افزار تعبیه نشده است. با مراجعه به وب سایت مرجع نرم افزار می توان از امکانات متعددی که در گذر زمان توسعه داده شده است استفاده کرد و دامنه فعالیت های نرم افزار را توسعه داد.</p>
<p>▪ دهم؛ تجارت الکترونیک (eCommerce) چند صباحی است مورد توجه اغلب توسعه دهندگان نرم افزارهای مدیریت محتوا قرار گرفته است و امکاناتی برای پشتیبانی از آن در بطن نرم فزارها قرار گرفته است. البته هستند نرم افزارهایی که به طور اختصاصی برای این کار طراحی و تولید شده اند. برخی از نرم افزارها امکانات ضعیفی در این حوزه عرضه کرده اند، اما بستر لازم برای توسعه این قبیل امکانات رادر بطن نرم افزار لحاظ شده است. برخی دیگر در این زمینه هم فقیر محسوب می شوند.</p>
<p><strong>● نتیجه گیری</strong></p>
<p>به طور قطع نمی توان گفت که فلان نرم افزار برای استفاده همگان مناسب است، اما تجربه های موفق بسیاری از شرکت ها خبر از موفقیت عام برخی نرم افزارها می دهد. از آنجا که استفاده از نرم افزارهای مبتنی بر زبان PHP را برای داخل کشور توصیه کردیم، می توانیم چند نرم افزار را برای کارهای مختلف معرفی کنیم. بدون شک Drupal بهترین گزینه برای وب سایت های پر ترافیک و بزرگ است که قابلیت مدیریت چندین زیر وب سایت را نیز مهیا کرده است. نرم افزارهای Joomla و mambo برای راه اندازی وب سایت های متوسط مناسب هستند. هرچند نرم افزار Movable Type با زبان Perl نوشته شده، اما همراه با WordPress بهترین گزینه برای دارندگان وبلاگ ها و وب سایت های جمع و جور محسوب می شوند. نرم افزار MediaWiki به عوان گزینه اول و TikiWiki به عنوان گزینه بعدی برای راه اندازی دانش نامه مناسب هستند. شرایط نرم افزارهای انجمن (Forum) مانند گذشته نیست و بسیاری از نرم افزارهای مدیریت محتوا امکانات مشابه و گاهی قوی تر عرضه می کنند. برای راه اندازی شبکه اجتماعی می توان از Drupal و Elgg استفاده کرد.</p>
<p>نرم افزارتجارت الکترونیک دوران ابتدایی رشد خود را طی می کنند و مانده است که بالغ شوند، اما OSCommerce برای استفاده گزینه مناسبی است. علاوه بر این حداقل بیست تا سی نرم افزار متن باز دیگر هم هستند که برای استفاده مناسب هستند. امیدواریم در آینده نزدیک مطالعه ای موردی ترتیب داده و نرم افزارهای معروف Plone و Drupal و Liferay را از جنبه های مختلف برای استفاده در سازمان های بزرگ مورد بررسی قرار دهیم.</p>
<p><img src="http://www.ramehr.com/archives/c14c1258281786_content_management_software_p1.php_files/break.gif" border="0" alt="" width="8" height="8" /></p>
<p>نویسنده: جواد زارعی</p>
<p>ماهنامه تحلیلگران عصر اطلاعات</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Personal Wiki usando o motor Mediawiki]]></title>
<link>http://rosseto.wordpress.com/2009/11/06/personal-wiki-usando-o-motor-mediawiki/</link>
<pubDate>Fri, 06 Nov 2009 23:30:07 +0000</pubDate>
<dc:creator>Fábio Rosseto</dc:creator>
<guid>http://rosseto.wordpress.com/2009/11/06/personal-wiki-usando-o-motor-mediawiki/</guid>
<description><![CDATA[Introdução Uma personal wiki é um sistema wiki mantido exclusivamente para uso pessoal na qual o pró]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h1>Introdução</h1>
<p>Uma personal wiki é um sistema wiki mantido exclusivamente para uso pessoal na qual o próprio usuário é responsável por inserir as informações.</p>
<p>O seu objetivo é organizar e facilitar o acesso as informações da mesma forma como ocorre com wikis &#8216;comunitárias&#8217;.</p>
<p>Algumas pessoas mantêm suas wikis pessoais em servidores possibilitando o seu acesso em qualquer lugar. O uso de senhas para proteção do acesso a wiki é facultativo.</p>
<p>Este texto tem por objetivo listar os procedimentos necessários para  a implementação de uma personal wiki utilizando a engine mediawiki &#8211; que por sua vez é o mesmo motor utilizado pela wikipédia.</p>
<p>Para rodar a mediawiki é necessário ter instalado um web server que rode scripts perl e uma base de dados sql.</p>
<p>Neste tutorial faz-se uso dos seguintes aplicativos:</p>
<ul>
<li><a href="http://www.apachefriends.org/en/xampp-windows.html">Xampp (XAMPP Lite)</a></li>
<li><a href="http://www.mediawiki.org/wiki/MediaWiki">Mediawiki</a></li>
<li><a href="http://www.gimp.org/downloads/">Gimp</a></li>
</ul>
<h1>Instalação &#8211; Mediawiki</h1>
<ul>
<li>Inicialmente instale o Xampp</li>
<li>Inicie os módulos apache e o mysql</li>
<li>Se preferir é possível configurar estes dois aplicativos para rodarem como serviço do windows</li>
</ul>
<p style="padding-left:60px;">Para isso, abra o painel de controle do Xampp (XAMPP Control Panel), pare os módulos apache e mysql e ligue as opções Svc, conforme apresentado na figura abaixo:</p>
<p><img class="alignnone size-full wp-image-93" title="xampp_servico" src="http://rosseto.wordpress.com/files/2009/11/xampp_servico.jpg" alt="xampp_servico" width="454" height="384" /></p>
<ul>
<li>Caso tenha problemas após a instalação em rodar o apache, abra o arquivo xampplite\apache\conf\httpd.conf, procure pela linha  &#8220;<em>Listen 80</em>&#8221; e altere o valor 80 (porta padrão http) para o valor 8080 (esta porta é utilizada como porta alternativa para o protocolo http, contudo, outra porta poderá ser utilizada)</li>
<li><em>Criação de database wikidb</em>
<ul>
<li>Acesse o endereço http://localhost:8080/xampp/</li>
<li>No quadro da lateral esquerda da página aberta selecione a opção MyPHPAdmin dentro da seção Tools.</li>
<li>Neste mesmo quadro selecione a opção mySQL</li>
<li>No quadro principal, selecione a aba SQL, e insira as linhas abaixo e em seguida, clique em executar
<ul>
<li><em>create database wikidb;</em></li>
<li><em>grant create, select, insert, update, delete, alter, lock tables on wikidb.* to &#8216;root&#8217;@'localhost&#8217; identified by &#8217;senha&#8217;;</em></li>
</ul>
</li>
<li><em>&#8216;root&#8217; e &#8217;senha&#8217; representam respectivamente o usuário e a senha administrativa do servidor mysql.</em></li>
<li>Em \xampplite\phpMyAdmin, abra o arquivo config.inc.php e altere o usuário e a senha de acordo com os valores escolhidos
<ul>
<li>$cfg['Servers'][$i]['user']                 = &#8216;root&#8217;;</li>
<li>$cfg['Servers'][$i]['password']       = &#8217;senha&#8217;;</li>
</ul>
</li>
<li>Salve o arquivo</li>
</ul>
</li>
<p><em> </em></ul>
<ul>
<li>Extraia o conteúdo do pacote referente a mediawiki para a pasta xampplite\htdocs e  renomeie o pacote extraído para, por exemplo, wiki.</li>
<li>Acesse http://localhost:8080/wiki/  , onde  <em>&#60;wiki&#62; </em>representa o nome escolhido para o pasta que contém os arquivos da wiki.</li>
<li>Clique na opção <span style="color:#000000;"><strong>set up the wiki</strong></span></li>
<li><span style="color:#000000;">Preencha os seguintes campos<strong><br />
</strong></span></li>
</ul>
<blockquote>
<ul>
<li>Wiki name: <em>Nome da wiki</em><br />
Language: <em>pt-br &#8211; Português do Brasil</em></li>
<li>Admin username: <em>root</em><br />
(Confirm) Password: <em>senha</em></li>
<li>Database type: <em>MySQL</em><br />
Database host: <em>localhost</em></li>
<li>Database name: <em>wikidb</em><br />
DB username: <em>root</em><br />
(Confirm) DB password: <em>senha</em></li>
</ul>
</blockquote>
<ul>
<li>Finalize o processo de instalação</li>
<li>Mova o arquivo /wiki/config/LocalSettings.php para o diretório pai.</li>
<li>A wiki já está instalada e pode ser acessada a partir de http://localhost:8080/wiki/</li>
</ul>
<h2>Alterar o nome da página principal</h2>
<ul>
<li>Para alterar  nome da página principal faça login com algum usuário com direitos administrativos (Para o exemplo: <em>root</em>)</li>
<li>Abra a página principal e selecione a aba <em>mover</em></li>
<li>Insira o novo título em <em>&#8220;Para novo título&#8221;</em></li>
<li>Clique em<em> &#8220;Mover página&#8221;</em></li>
</ul>
<h2><strong>Criação e alteraração do logo da wiki</strong><em><br />
</em></h2>
<p>Pré-requisito: Gimp</p>
<ul>
<li>Crie uma nova imagem  através da opção <strong>Arquivo &#62; Nova </strong>(sugere-se  largura=altura) <strong> </strong></li>
<li>Para o exemplo utilizou-se 640&#215;640<em> </em></li>
<li>Acesse o menu Filtros &#62; Renderizar &#62; Padrão &#62; Quebra-cabeça</li>
<li>Para o exemplo utilizou-se
<ul>
<li>Número de peças</li>
<li>Horizontal: 13</li>
<li>Vertical: 13</li>
<li>Largura do chanfro: 2</li>
<li>Reflexo: 0,5</li>
</ul>
</li>
</ul>
<ul>
<li>Na janela Camadas, crie uma nova camada:</li>
</ul>
<blockquote>
<ul>
<li>Botão direito sobre a janela de gerenciamento de camadas &#62; nova camada</li>
<li>Selecione a nova camada</li>
</ul>
</blockquote>
<ul>
<li>Adicione o logo ou texto desejado</li>
<li>Ordene adequadamente as camadas (as camadas superiores são apresentadas no topo)</li>
<li>Diminua a opacidade do quebra cabeça para exibir o logo</li>
</ul>
<ul>
<li>Botão direito sobre a janela de camadas selecione copiar como é visto</li>
</ul>
<p><img class="alignnone size-full wp-image-103" title="logo_wiki" src="http://rosseto.wordpress.com/files/2009/11/logo_wiki1.jpg" alt="logo_wiki" width="464" height="369" /></p>
<ul>
<li>Selecione a camada recém criada (Visível) e selecione o filtro <strong>Filtros&#62;Mapear&#62;Mapear objeto</strong></li>
<li>Em opções gerais, selecionar a opção <strong>Mapear para: Esfera</strong></li>
<li>Habilitar fundo transparente</li>
</ul>
<p><img class="alignnone size-full wp-image-106" title="logo_wiki_mapear" src="http://rosseto.wordpress.com/files/2009/11/logo_wiki_mapear2.jpg" alt="logo_wiki_mapear" width="500" height="357" /></p>
<p>Saída obtida para o exemplo:</p>
<p><img class="alignnone size-full wp-image-102" title="wiki_logo" src="http://rosseto.wordpress.com/files/2009/11/wiki_logo1.png" alt="wiki_logo" width="219" height="219" /></p>
<ul>
<li>Recorte e redimensione a figura para o tamanho <em>135&#215;135 </em>e coloque-a na pasta xampplite\htdocs\wiki\skins\common\images</li>
</ul>
<ul>
<li>Abra o arquivo</li>
</ul>
<blockquote>
<ul>
<li>xampplite\htdocs\wiki\LocalSettings.php</li>
</ul>
</blockquote>
<ul>
<li>e substitua o logo padrão pelo novo logo através da inserção da linha</li>
</ul>
<blockquote>
<ul>
<li>$wgLogo = &#8220;$wgScriptPath/skins/common/images/triforce.png&#8221;;
<ul>
<li>onde triforce.png representa o nome do logo utilizado no exemplo.</li>
</ul>
</li>
</ul>
</blockquote>
<p><strong><em>SO / Pacotes  utilizados</em></strong></p>
<ul>
<li><em>Sistema Operacional: Windows Vista Professional 64 bits<br />
</em></li>
<li>gimp-2.6.7-i686-setup.exe</li>
<li>mediawiki-1.15.1.tar</li>
<li>xampplite-win32-1.7.2.exe</li>
</ul>
<p><span style="text-decoration:underline;"><strong>Referências:</strong></span></p>
<p><em>http://en.wikipedia.org/wiki/Personal_wiki</em></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[對於 Google 協作平台的批判性思考]]></title>
<link>http://joechuang.wordpress.com/2009/11/05/google-%e5%8d%94%e4%bd%9c%e5%b9%b3%e5%8f%b0/</link>
<pubDate>Thu, 05 Nov 2009 02:17:17 +0000</pubDate>
<dc:creator>joe</dc:creator>
<guid>http://joechuang.wordpress.com/2009/11/05/google-%e5%8d%94%e4%bd%9c%e5%b9%b3%e5%8f%b0/</guid>
<description><![CDATA[由來 Google 協作平台 (Google Sites) 是 Google 將 Mediawiki 和 Blog 結合之後的東西，為了打擊 Mediawiki 所推出的產品，想要有 Mediawik]]></description>
<content:encoded><![CDATA[由來 Google 協作平台 (Google Sites) 是 Google 將 Mediawiki 和 Blog 結合之後的東西，為了打擊 Mediawiki 所推出的產品，想要有 Mediawik]]></content:encoded>
</item>
<item>
<title><![CDATA[Personnalisons Wikipédia : raccourcis clavier en mode édition]]></title>
<link>http://darkoneko.wordpress.com/2009/11/01/personnalisons-wikipedia-ajouter-des-raccourcis-clavier/</link>
<pubDate>Sun, 01 Nov 2009 15:04:16 +0000</pubDate>
<dc:creator>DarkoNeko</dc:creator>
<guid>http://darkoneko.wordpress.com/2009/11/01/personnalisons-wikipedia-ajouter-des-raccourcis-clavier/</guid>
<description><![CDATA[Ce billet fait partie de la série &#8220;Personnalisons Wikipédia&#8220;. La plupart des logiciels W]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ce billet fait partie de la série &#8220;<a href="http://darkoneko.wordpress.com/tag/personnalisons-wikipedia/">Personnalisons Wikipédia</a>&#8220;.</p>
<p>La plupart des logiciels WYSIWYG permettent de modifier l&#8217;apparence d&#8217;un texte (mise en gras, italique, souligné, etc) à l&#8217;aide de raccourcis clavier (respectivement ctrl+b, ctrl+i, ctrl+u, &#8230;) La personnalisation d&#8217;aujourd&#8217;hui vous permettra de créer des raccourcis clavier en JavaScript afin d&#8217;avoir des facilités similaires lors de vos éditions sur Wikipédia</p>
<h3>Introduction</h3>
<p><em>(ceux qui ne s&#8217;intéressent pas aux explications peuvent passer directement au code complet, à la fin du billet)</em></p>
<p>Le code du jour fait appel à la notion d&#8217;évènement, pour lesquels vous trouverez plus d&#8217;informations <a href="http://fr.wikibooks.org/wiki/Programmation_Javascript/Evenement#onkeydown">sur Wikibooks</a>. Les évènements qui nous intéressent ici sont ceux qui nous permettront de savoir quand l&#8217;utilisateur appuie sur une certaine combinaison de toucher sur le claviers, et sont au nombre de deux :</p>
<ul>
<li> &#8220;appui sur une touche du clavier&#8221; (<em>onkeydown</em>)</li>
</ul>
<ul>
<li> &#8220;relachement d&#8217;une touche du clavier&#8221; (<em>onkeyup</em>).</li>
</ul>
<p>Ces deux évènements permettent d&#8217;accéder en interne à un code correspondant à la touche qui viens d&#8217;être appuyée ou relachée.</p>
<p>&#8212;</p>
<p>Histoire de nous faciliter la vie, MediaWiki possède déjà une fonction JavaScript permettant de modifier un texte sélectionne comme l&#8217;on veux. Cette fonction est par exemple utilisée  lorsque vous cliquez sur un des boutons au dessus (la barre de menu) ou en dessous (les listes de caractères spéciaux), en mode édition.</p>
<p>Cette fonction est <em> insertTags()</em>. Elle prend 3 paramètres, qui sont respectivement :</p>
<ul>
<li> les caractères à ajouter avant la sélection</li>
<li>Les caractères  à ajouter après la sélection</li>
<li>Le texte par défaut,  s&#8217;il n&#8217;y avait pas de texte séléctionné.</li>
</ul>
<p>Exemple pour mettre un texte en souligné :</p>
<pre><span style="color:#ff00ff;font-size:12px;">
 insertTags('&#60;u&#62;', '&#60;/u&#62;', 'souligné');
</span></pre>
<p>&#8212;</p>
<p>Note : Le code n&#8217;a été, pour l&#8217;instant, testé que sous Firefox 3.0 et 3.5.4. N&#8217;hésitez pas à me donner un feedback sur le bon fonctionnement (ou non) sur d&#8217;autres versions et navigateurs.</p>
<p>Note2 : il faut savoir que les raccourcis défini en javascripts seront prioritaires sur ceux du logiciel (du moins avec firefox)</p>
<h3>Passons au code&#8230;</h3>
<h4>Conteneur</h4>
<p>Histoire d&#8217;être un minimum propre, notre code sera, comme pour les autres de mes billets, encapsulé dans une fonction</p>
<pre><span style="color:#ff00ff;font-size:12px;">
function keyboardShortcuts() {
  // le code sera ici
}
</span></pre>
<p>&#160;</p>
<h4>Utilisation des évènements</h4>
<p>La méthode pour définir une action (= l&#8217;appel à une fonction) sur les évènements qui nous intéresse est la suivante :</p>
<pre><span style="color:#ff00ff;font-size:12px;">
  document.onkeyup = function(e) { //l'user relâche une touche
    //code à executer
  }

  document.onkeydown = function(e){  //l'user appuie sur une touche
    //code à executer
  }
</span></pre>
<h4>Problématique de la double touche</h4>
<p>Problème : nous avons besoin de savoir lorsque l&#8217;utilisateur appuie à la fois sur &#8220;ctrl&#8221; et une lettre. Or, l&#8217;événement de base ne permet de le faire que pour une seule touche à la fois<br />
Solution : créer une variable qui sait si ctrl est actuellement appuyé ou non</p>
<pre><span style="color:#ff00ff;font-size:12px;">
  var isCtrl = false; //la touche commence "non enfoncée"

  //l'evenement "onkeyup" est appelé à chaque fois qu'une touche est relachée.
  document.onkeyup=function(e) {
    if(e.which == 17) isCtrl=false;  //l'user relâche la touche ctrl (qui a le code 17). La variable passe a False
  }

  //l'evenement "onkeydown" est appelé à chaque fois qu'une touche est pressée.
  document.onkeydown=function(e){
    if(e.which == 17) { //l'user appuie sur la touche ctrl. La variable passe a True
      isCtrl=true;
    }
  }
</span></pre>
<h4>Gestion des actions en elle-même</h4>
<p>J&#8217;ai géré ci dessous 5 raccourcis :</p>
<ul>
<li>ctrl+b, pour mettre un texte en gras</li>
</ul>
<ul>
<li>ctrl+i, pour mettre un texte en italique</li>
</ul>
<ul>
<li>ctrl+l (L minuscule), pour faire un lien interne</li>
</ul>
<ul>
<li>ctrl+m pour mettre le texte entre {{ }} et faire un modèle</li>
</ul>
<ul>
<li>ctrl+u, pour souligner un texte</li>
</ul>
<p>D&#8217;autres sont ajoutables à volonté, attention juste à ne pas utiliser des lettre dont vous vous servez souvent en édition pour vos raccourci (par exemple ctrl+x/c/V pour couper/copier/coller)</p>
<p>(sera mis dans la fonction d&#8217;onKeyDown)</p>
<pre><span style="color:#ff00ff;font-size:12px;">
    if( isCtrl == true ) {
       switch (e.which) { //quelle touche a été enfoncée ?
  	  case 66: //b
            insertTags("'''", "'''", 'gras');
            return false
	    break;
	  case 73: //i
            insertTags("''", "''", 'italique');
            return false
	    break;
          case 76: // l
            insertTags('[[', ']]', 'lien interne');
            return false
	    break;
          case 77: // m
            insertTags('{{', '}}', 'modèle');
            return false
	    break;
	  case 85: //u
            insertTags('&#60;u&#62;','&#60;/u&#62;'</span><span style="color:#ff00ff;font-size:12px;">, 'souligné');
            return false
	    break
       }
     }
</span></pre>
<h3>Résultat final</h3>
<p>Pour les flemmards et ceux qui ont peur d&#8217;en oublier un morceau, le code complet ci dessous; recopiable tel quel :</p>
<pre><span style="color:#ff00ff;font-size:12px;">
function keyboardShortcuts() {

  var isCtrl = false;

  document.onkeyup=function(e) { //l'user relâche la touche ctrl. La variable passe a False
    if(e.which == 17) isCtrl=false;
  }

  document.onkeydown=function(e){
    if(e.which == 17) { //l'user appuie sur la touche ctrl. La variable passe a True
      isCtrl=true;
      return;
    }

    //gestion des ctrl+lettre que l'on veux ajouter.
    if( isCtrl == true ) {
       switch (e.which) { //quelle touche a été enfoncée ?
  	  case 66: //b
	    insertTags("'''", "'''", 'gras');
            return false
	    break;
	  case 73: //i
	    insertTags("''", "''", 'italique');
            return false
	    break;
          case 76: // l
	    insertTags('[[', ']]', 'lien interne');
            return false
	    break;
          case 77: // m
	    insertTags('{{', '}}', 'modèle');
            return false
	    break;
	  case 85: //u
	    insertTags('&#60;u&#62;', '&#60;/u&#62;', 'souligné');
            return false
	    break
       }
     }
  }
  return true
}

//la fonction qui gère tous les appel de fonctions (du moins dans mes divers billets <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
//!\ CELA VEUX DIRE QU'IL FAUT FUSIONNER AVEC LA FONCTION main() EXISTANTE, SI VOUS EN AVEZ UNE /!\
function main() {
  // [...  autres fonctions  ... ]

   if (wgAction == "edit" &#124;&#124; wgAction == "submit")  { //à n'appeller que si en mode edition, sinon c'est inutile
      keyboardShortcuts()
   }
}

addOnloadHook(main)

</span></pre>
<p>Et Voili ! Comme d&#8217;habitude, n&#8217;oubliez pas de forcer le rafraichissement du monobook (ou vector) après avoir sauvegardé.</p>
<p>Source : <a href="http://www.lyxia.org/blog/developpement/javascriptajax/raccourcis-claviers-en-javascript-214">Ce billet sur Lixya.org</a> ; et un merci à Phe pour le coup de main <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Edit : retiré un &#8220;]&#8221; qui trainait au milieu du code &#8211; forcement, ça marche mieux maintenant &#8211; désolé <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Les serveurs de Wikimedia Commons sont en surcharge]]></title>
<link>http://darkoneko.wordpress.com/2009/10/30/les-serveurs-de-wikimedia-commons-sont-en-surcharge/</link>
<pubDate>Fri, 30 Oct 2009 18:11:43 +0000</pubDate>
<dc:creator>DarkoNeko</dc:creator>
<guid>http://darkoneko.wordpress.com/2009/10/30/les-serveurs-de-wikimedia-commons-sont-en-surcharge/</guid>
<description><![CDATA[&#8220;Wikimedia Commons&#8221; (ou plus simplement &#8220;Commons&#8220;)  est la banque de médias ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img class="size-full wp-image-1966 alignright" title="Les serveurs de Wikimedia Commons sont en surcharge" src="http://darkoneko.wordpress.com/files/2009/10/300px-wikimedia-servers.jpg" alt="Les serveurs de Wikimedia Commons sont en surcharge" width="300" height="225" /></p>
<p> &#8220;<em><a href="http://commons.wikimedia.org/wiki/">Wikimedia Commons</a></em>&#8221; (ou plus simplement &#8220;<em>Commons</em>&#8220;)  est la banque de médias  centrale des projets <em>Wikimedia</em>, c&#8217;est à dire qu&#8217;elle stocke la plupart des images utilisées sur les différentes Wikipédias, Wikibooks, Wikispecies, etc.</p>
<p>Il y a actuellement environ 4000 nouvelles images importées sur<em> Commons</em> chaque jour, mais différents partenariats (voir par exemple, côté partenariats  <a href="http://darkoneko.wordpress.com/2009/04/02/250000-images-de-plus-pour-wikimedia-commons/">celui ci</a> et <a href="http://darkoneko.wordpress.com/2008/12/07/100-000-images-pour-wikipedia/">celui là</a>) nécessitent des &#8220;<em>batch</em>&#8220;, des <a href="http://commons.wikimedia.org/wiki/Commons:Batch_uploading">imports massifs</a> de dizaines voire centaines de milliers d&#8217;images par bot dans un laps de temps relativement court.</p>
<p>Il y a une petite semaine, j&#8217;ai surpris une discussion intéressante entre un <em>tecchie</em> de la <em>Wikimedia Foundation</em> et un dresseur de bot sur le canal IRC  des développeurs, #wikimedia-tech .  J&#8217;y ai appris que l&#8221;espace disque des serveurs sur lesquels tournent <em>Commons</em> se fait rare. Pour fonctionner correctement, le système utilisé pour le stockage des images recommande fortement de ne pas remplir l&#8217;espace disque à plus de 80%. Nous avons dors et déjà dépassé cette limite (86%). D&#8217;après eux, à partir de 90% ça va commencer à sentir très mauvais  (voir ce qui est arrivé en<a href="http://techblog.wikimedia.org/2009/07/intermittent-media-server-load-problems/"> juillet dernier</a>).</p>
<p>De nouveaux serveurs ont dors et déjà été commandés, mais il n&#8217;arriveront que d&#8217;ici 3 à 5 semaines (plus 2/3 jours d&#8217;installation). C&#8217;est assez tard, mais 1) il y a des soucis de recrutements à la <em>Wikimedia Foundation</em> pour ces postes, ils sont en sous effectifs pour planifier les commandes et gérer le parc serveur en général 2) Sun (le fournisseur) est long pour la livraison de ce genre de commandes.</p>
<p>Pas de panique toutefois : les serveurs sont largement en mesure de supporter la charge normale (4000/jour) jusqu&#8217;à l&#8217;arrivée des renforts ; On ne peut par contre pas en dire autant si ça monte à 40.000/jour (typiquement, en cas d&#8217;import massif), donc les dresseurs de bots s&#8217;occupant des <em>batchs</em> ont été contactés pour leur demander d&#8217;appuyer  sur &#8220;pause&#8221; jusqu&#8217;à ce que la jauge d&#8217;espace libre repasse dans le vert.</p>
<p>Une fois le nouveau matos installé, <em>Commons</em> disposera d&#8217;un total de 24 Teraoctets de stockage</p>
<p>NB : par curiosité, j&#8217;avais demandé si supprimer les plus anciennes  &#8220;images effacées&#8221; (qui restent habituellement  physiquement sur les disques, pour permettre d&#8217;annuler la suppression ) des serveurs pour gagner de la place était une bonne idée, on m&#8217;a demandé en réponse si j&#8217;avais envie de déclencher une émeute chez les Wikipédiens <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[10 Web 2.0 Strategies]]></title>
<link>http://steveaw.wordpress.com/2009/10/23/10-web-2-0-strategies/</link>
<pubDate>Fri, 23 Oct 2009 07:26:53 +0000</pubDate>
<dc:creator>Steve Aw Kah Lok</dc:creator>
<guid>http://steveaw.wordpress.com/2009/10/23/10-web-2-0-strategies/</guid>
<description><![CDATA[Ten ways of Web 2.0 strategies base on Mr Dion Hinchcliffe concept, I have made a web diagram for th]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Ten ways of Web 2.0 strategies base on <a title="Dion Hinchcliffe Bio" href="http://c2.com/cgi/wiki?DionHinchcliffe" target="_blank">Mr Dion Hinchcliffe </a>concept, I have made a web diagram for the following ways:</p>
<p><img class="alignnone size-full wp-image-164" title="10 Web 2.0 Strategies - Web Diagram  " src="http://steveaw.wordpress.com/files/2009/10/tir0mw.jpeg" alt="10 Web 2.0 Strategies - Web Diagram  " width="510" height="379" /></p>
<p><strong>1<sup>st</sup>: Back to the basics: Your Web site</strong></p>
<p>In the rush to experiment with social media, community features, and sophisticated online services, it’s safe to say that some companies have lost focus. Build a rich, cleanly designed and useful Web site for your customers and they will come. As well, technical skills are still valuable despite the emphasis on “easier” Web development tools.</p>
<p><strong>2<sup>nd</sup>: Web development frameworks (browser, front-end)</strong></p>
<p>Several popular tools: Adobe Flash, Adobe Air, Microsoft Silverlight, and to a certain extent, Java. These tools have reduced the gap between what your computer and your browser can do, make writing code much faster, Web-based, rich, line-of-business applications that we can use now taking lesser time to build compare in the past.</p>
<p><strong>3<sup>rd</sup>: Web development frameworks (browser, back-end)</strong></p>
<p>“<em>We are now seeing a clean break from what has come before to develop scalable, secure applications and services with Web 2.0 best practices,”</em> Hinchcliffe says.</p>
<p>He cites Python and Ruby on Rails (both free) as two top programs. <em>“We call these productivity-oriented frameworks because they can be 10 to 20 times more productive in developing code than older technologies,”</em> he says. <em>“That is enormous because when you are developing software, talent is most of the cost.”</em></p>
<p><strong>4<sup>th</sup>: Collaboration Software</strong></p>
<p>Microsoft’s collaboration software, Sharepoint, which in its early days was a simple document sharing tool, is now chockfull of social networking features, including tools to support blogs, wikis, and a robust interactive community. It’s free version, Windows SharePoint Services, which comes with Windows, you can do BI, reporting, and integration, and it’s an entire application development platform as well.</p>
<p>Google Docs can easily do all the basics, including making bulleted lists, sorting by columns, adding tables, images, comments, formulas, changing fonts and more.</p>
<p>If you want to work and share docs within the team, now every team members can view and make changes at the same time. There’s an on-screen chat window for spreadsheets, and document revisions show you exactly who changed what, and when. We can also add in more details or comments.</p>
<p>Users love the tool because it consolidates information from many applications, and loves it because it’s a single technology they can use for many purposes.</p>
<p><strong>5<sup>th</sup>: SaaS</strong></p>
<p>Software-as-a-service (<strong>SaaS</strong>) keeps growing and growing and growing, <a href="http://www.accountingweb.com/item/107700">experts and analysts say</a>, with many large companies adding SaaS components to on-premise software installations. Salesforce.com, considered the bellwether of the SaaS industry, reported record revenue of $305 million, up 23% from 2008, in its fiscal first quarter ended April 30, 2009. SaaS is winning favor because it’s often 20% cheaper than managing a non-premise application. SaaS is on track to be the dominant model for software by 2012. There are still lots of security issues, but the economics are definitely there. The other sweeping advantage is the flexibility that companies gain by rapidly adding new functionality. The paradigm shift is where you can go acquire a piece of what you need and assemble that into the software that you already own.</p>
<p><strong>6<sup>th</sup>: Cloud computing</strong></p>
<p>It’s only a matter of time before cloud computing gains its place on center stage.</p>
<p>Sure, there are still security and reliability issues, but what aspect of IT doesn’t have that today?</p>
<p>Cloud services, offered by tech giants such as</p>
<ul>
<li><strong><a href="http://code.google.com/appengine/" target="_blank">Google</a></strong></li>
<li><strong><a href="http://aws.amazon.com/ec2/" target="_blank">Amazon </a></strong></li>
<li><strong><a href="http://www.microsoft.com/windowsazure/" target="_blank">Microsoft </a></strong></li>
<li><strong><a href="http://www.salesforce.com/cloudcomputing/" target="_blank">Salesforce</a></strong></li>
</ul>
<p>They are making it relatively painless and certainly cheaper for a company to add infrastructure than if they were doing it themselves. They also gain best practices from the cloud provider. If the company decides it doesn’t need that extra infrastructure in six or 12 months, it simply cancels the service. That’s why enterprise customers are now doing cloud computing pilots, whereas a year ago, CIOs were turning up their noses at the concept.</p>
<p><strong>7<sup>th</sup>: Micro-blogging</strong></p>
<p>Using social networking sites to broadcast news and other information about your company is a pretty darn cheap and widely acceptable way to engage with your community of partners, customers, and prospects. From the IT management side, there’s not much to do and why not educate your executives about the social Web?</p>
<p>“<em>It’s<strong> </strong></em><em>virtually free, except for the labor involved, and you have unprecedented reach into decision makers</em>,” says <strong><a href="http://www.its-your-internet.com/index.php/about-us/founder-jonathan-jaffe.html" target="_blank">Jonathan Jaffe</a></strong>, founder of its-your-internet.com, a New York City-based company that advises organizations on technologies for online marketing.</p>
<p>This will change because as more people use Twitter these individuals will get bombarded, but now there’s a lot of accessibility. IT people are also broadcasting technical problems to the social Web and sometimes getting answers within an hour or two from vendors and experts.</p>
<p><strong>8<sup>th</sup>: Internal social networking</strong></p>
<p>Companies are best off starting internally when experimenting with social media. For one thing, it’s better to make a mistake inside the company than with customers and influencers. For another, employees increasingly prefer to communicate via social media, and now, enterprise social networking tools incorporate security and other requirements that big companies seek.</p>
<p>Leading Web-based applications for internal blogs, micro-blogging, mashups, and wikis include Confluence by <strong><a href="http://www.atlassian.com/" target="_blank">Atlassian</a>, <a href="http://www.socialtext.com/" target="_blank">Socialtext</a></strong>, and the open-source <strong><a href="http://www.mediawiki.org/wiki/MediaWiki" target="_blank">MediaWiki</a></strong>. Such tools are often available at a fraction of the cost of traditional collaboration products (from companies such as Microsoft and IBM).</p>
<p><strong>9<sup>th</sup>: Bridging the gap between developers and finance</strong></p>
<p>This isn’t a technology but a strategy; IT pros should stay close to the people who hold the purse when they are looking into new applications and projects, as always.</p>
<p><strong><em> “</em></strong><em>From my point of view, having developed Web applications for the past 13 years, a key issue I’ve seen everywhere is the communication gap between the financial controller (FC) of the company and the development team members. So my advice is don’t focus too much on the buzzwords. Get in synch with your FC and look at your projects from a business point of view.” </em><strong><a href="http://www.cardiffwebscene.com/profile/DanBridge" target="_blank">Dan Bridge</a></strong>, a UK-based developer</p>
<p><strong>10<sup>th</sup>: Thinking small</strong></p>
<ul>
<li>The beauty of Web 2.0 is      that you don’t have to invest loads of cash or time to experiment.</li>
</ul>
<ul>
<li>Small projects are often      the way to go. In fact, one might say that in today’s world of layoffs,      small is big.</li>
</ul>
<ul>
<li>Check out all the social      media tools and sites that you can and then consider: Could any of these      ideas work in-house or on our public site?</li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Recetario para SMW y extensiones relacionadas]]></title>
<link>http://dialektos.wordpress.com/2009/10/21/guia-de-referencia-rapida-para-smw/</link>
<pubDate>Wed, 21 Oct 2009 17:39:03 +0000</pubDate>
<dc:creator>dialektos</dc:creator>
<guid>http://dialektos.wordpress.com/2009/10/21/guia-de-referencia-rapida-para-smw/</guid>
<description><![CDATA[He aquí una guía de referencia rápida de Semantic Mediawiki y otras extensiones que funcionan sobre ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>He aquí una guía de referencia rápida de Semantic Mediawiki y otras extensiones que funcionan sobre ella:</p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-203" title="smw1" src="http://dialektos.wordpress.com/files/2009/10/smw1.gif" alt="smw1" width="902" height="1319" /></p>
<p style="text-align:center;"><img class="aligncenter size-full wp-image-204" title="smw2" src="http://dialektos.wordpress.com/files/2009/10/smw2.gif" alt="smw2" width="934" height="1317" /></p>
<p>Sacado de <a href="http://postable.net/smwqr/">http://postable.net/smwqr/</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Semantic Forms]]></title>
<link>http://dialektos.wordpress.com/2009/10/21/semantic-forms/</link>
<pubDate>Wed, 21 Oct 2009 17:38:47 +0000</pubDate>
<dc:creator>dialektos</dc:creator>
<guid>http://dialektos.wordpress.com/2009/10/21/semantic-forms/</guid>
<description><![CDATA[Introducción Semantic Forms es una extensión que funciona sobre Semantic Mediawiki, cuyo propósito e]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Introducción</h3>
<p>Semantic Forms es una extensión que funciona sobre Semantic Mediawiki, cuyo propósito es facilitar la creación, edición y búsqueda de artículos con contenido semántico mediante formularios.</p>
<p>Los componentes principales de Semantic Forms son las páginas de definición de dichos formularios, existentes en el namespace Form:. Dichas páginas pueden ser editadas y creadas por cualquier usuario sin necesidad de saber programar. Puedes ser vistas como plantillas para forzar la creación de contenido semántico sin necesidad de usar el lenguaje propio de SMW.</p>
<p>Se pueden editar las páginas con los formularios creados añadiendo una pestaña &#8220;Editar con formulario&#8221;  (Edit with form).  Además Semantic Forms soporta auto-completar en la edición de los campos, de tal forma que los usuarios pueden elegir una opción sin fallos de ortografía o problemas de ambigüedad.</p>
<p>El texto que no tenga contenido semántico se puede incluir en un artículo gracias a una sección que se llama Texto libre (Free text).</p>
<h3>Páginas especiales</h3>
<p>Semantic Forms tiene varias páginas especiales asociadas:</p>
<ul>
<li>Special:CreateProperty &#8211; para crear propiedades.</li>
<li>Special:CreateTemplate &#8211; para crear plantillas.</li>
<li>Special:CreateForm &#8211; para crear formularios.<br />
NOTA: las propiedades, plantillas y formularios no se pueden editar una vez creados.</li>
<li>Special:CreateCategory &#8211; para crear categorías.</li>
<li>Special:CreateClass &#8211; para crear todo lo anterior de una vez (menos flexible, más rápido).</li>
<li>Special:AddData &#8211; para añadir datos mediante los fomularios.</li>
<li>Special:EditData &#8211; para editar artículos mediante los fomularios.</li>
<li>Special:Forms &#8211; lista todos los formularios en la wiki.</li>
<li>Special:Templates &#8211; lista todas las plantillas.</li>
<li>Special:RunQuery &#8211; para realizar una búsqueda.</li>
<li>Special:UploadWindow &#8211; para subir un fichero desde un formulario.</li>
</ul>
<h3>Definiendo formularios</h3>
<p>Los formularios son creados mediante una serie de etiquetas (entre {{{&#8230;}}}) que especifican plantillas y campos dentro de esas plantillas. Las etiquetas permitidas son las siguientes:</p>
<ul>
<li><strong>info</strong> &#8211; Información especial. Etiqueta opcional (al principio del formulario si se pone). Con parámetros:
<ul>
<li>partial form &#8211; indica que el formulario es parcial</li>
<li>add title=&#8230; &#8211; título para la página AddData que use este formulario</li>
<li>edit title=&#8230; &#8211; título para la página EditData que use este formulario</li>
<li>page name=&#8230; &#8211; fórmula para generar automáticamente el nombre del artículo que se crea; por ejemplo se pueden usar &#60;<em>NombrePlantilla</em>[<em>NombreCampo</em>]&#62; o &#60;unique number;start=1&#62;</li>
<li>only include free text &#8211; indica que el texto libre del formulario se mete en un &#60;onlyinclude&#62; en el artículo resultante para que no se transcluya la información semántica.</li>
</ul>
</li>
<li><strong>for template &#8230;</strong> &#8211; Indica el comienzo de una inclusión de una plantilla (el fin es &#60;end template&#62;) y especifica el nombre de la misma (texto después de la etiqueta). Con parámetros:
<ul>
<li>label=&#8230; &#8211; especifica un texto para un cuadro que rodee todos los campos de esta plantilla</li>
<li>multiple &#8211; indica que el usuario puede realizar instancias múltiples de esta plantilla en el formulario. Al usar dicho formulario aparecería el trozo creado por esa plantilla con un botón debajo de &#8220;Añadir otro&#8221; o similar. Para poder almacenar el contenido semántico de estas plantillas instanciadas multiplemente, es recomendable usar la extensión <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Internal_Objects" target="_blank">Semantic Internal Objects</a>.</li>
<li>chooser=&#8230; &#8211; similar a multiple; hace que la plantilla aparezca listada en un desplegable (&#8230;) dentro del formulario para añadir instancias, en lugar de aparecer con un botón Añadir. De esa forma sólo se puede escoger una</li>
<li>chooser caption=&#8230; &#8211; especifica el texto del desplegable</li>
<li>strict &#8211; especifica que sólo los campos del formulario que se correspondan con campos usados por la plantilla deban ser creados como elementos</li>
</ul>
</li>
<li><strong>end template</strong> &#8211; fin de la plantilla</li>
<li><strong>field</strong> &#8211; Especifica un campo a incluir en el formulario, correspondiéndose con un campo de una plantilla. El texto después de la etiqueta es el nombre del campo en la plantilla. Con parámetros:
<ul>
<li>input type=text&#124;textarea&#124;date&#124;datetime&#124;datetime with timezone&#124;radiobutton&#124;checkbox&#124;listbox&#124;checkboxes &#8211; indica el tipo de entrada. Si el campo se corresponde con una propiedad semántica, el formulario tendrá el tipo correcto por defecto (si no, por defecto será text).</li>
<li>size=&#8230; &#8211; el ancho de un campo tipo texto o el alto en un campo tipo listbox</li>
<li>maxlength=&#8230; &#8211; máxima longitud de un campo tipo text o textarea</li>
<li>rows=&#8230; &#8211; filas de un textarea</li>
<li>cols=&#8230; &#8211; columnas de un textarea</li>
<li>mandatory &#8211; el usuario debe rellenar este campo</li>
<li>hidden &#8211; campo oculto en el formulario</li>
<li>restricted &#8211; campo editable sólo para admins/sysops</li>
<li>uploadable &#8211; especifica que al lado del campo debe ir un enlace que permita subir un fichero; aparecerá un popup donde elegiremos la imagen, y después de cerrarse aparecerá el nombre de la misma en el campo</li>
<li>upload filename=&#8230; &#8211; especifica el nombre del fichero que se pondrá a lo que se suba con el campo anterior. Se puede usar la variable &#60;page name&#62; para incluir el nombre de la página generada</li>
<li>autocomplete &#8211; activa el auto-completar para este campo, basado en los valores que tiene esta propiedad. No es necesario incluir este parámetro para el tipo Page (activado siempre)</li>
<li>no autocomplete &#8211; desactiva auto-completar para este campo</li>
<li>autocomplete on property=&#8230; &#8211; activa auto-completar usando los valores (páginas en caso de ser tipo Page o sin tipo) de la propiedad (&#8230;)</li>
<li>autocomplete on category=&#8230; &#8211; lo mismo con las páginas de la categoría (&#8230;)</li>
<li>autocomplete on concept=&#8230; &#8211; lo mismo con las páginas del concepto (&#8230;)</li>
<li>autocomplete on namespace=&#8230; &#8211; lo mismo con las páginas de un namespace (&#8230;)</li>
<li>autocomplete from url=&#8230; &#8211; igual pero cogiendo los valores de la URL (&#8230;)</li>
<li>remote autocompletion &#8211; indica que los valores deben ser consultados del servidor mediante AJAX en lugar de coger los valores de la página.</li>
<li>property=&#8230; &#8211; indica la propiedad semántica a la que corresponde este campo; coge automáticamente el tipo y los valores del autocomplete</li>
<li>default=&#8230; &#8211; valor que trae el campo por defecto. Si ponemos &#8220;now&#8221; en los tipo date, se rellena con la fecha; si ponemos &#8220;current user&#8221; se rellena con el nombre del usuario</li>
<li>values=&#8230; &#8211; especifica una serie de posibles valores que puede tener el campo, mostrados en un desplegable. Sobreescribe los valores de una propiedad</li>
<li>values from category=&#8230; &#8211; lo mismo que values pero coge como valores los nombres de las páginas de la categoría (&#8230;)</li>
<li>values from concept=&#8230; &#8211; lo mismo que el anterior pero para el concepto (&#8230;)</li>
<li>list &#8211; especifica que este campo contiene una serie de valores para autocomplete</li>
<li>delimiter=&#8230; &#8211; especifica el delimitador (caracter o string) si este campo admite una lista de valores. Por defecto es &#8220;,&#8221;</li>
<li>class=&#8230; &#8211; especifica una clase CSS que la entrada de este campo debe tener</li>
</ul>
</li>
<li><strong>choosers</strong> &#8211; Especifica el campo para seleccionar las plantillas marcadas con chooser. Aparece como mucho una vez en la declaración del formulario.</li>
<li><strong>standard input</strong> &#8230; &#8211; Especifica un tipo especial de campos, de entre 8 distintos; como son los botones de Previsualizar y de Guardar. El más importante es &#8220;free text&#8221; (este texto va después de la etiqueta standard input&#124; ) para contener texto sin contenido semántico. Sus parámetros son los siguientes:
<ul>
<li>rows=&#8230;</li>
<li>cols=&#8230;</li>
<li>hidden</li>
<li>restricted</li>
<li>default=&#8230;</li>
<li>preload=&#8230; &#8211; especifica una página cuyos contenidos deben ser precargados en este campo</li>
<li>label=&#8230; &#8211; especifica el texto asociado con este campo</li>
</ul>
</li>
</ul>
<p>Cada tipo de dato en SMW tiene un campo por defecto, y en algunos casos también un tamaño. La tabla con estas relaciones se puede consultar <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Forms#Allowed_input_types_for_data_types" target="_blank">aquí</a>.</p>
<p>Para el tipo de campo free text, podemos usar un editor WYSIWYG. Si tenemos instalada la extensión <a href="http://mediawiki.fckeditor.net/index.php/Main_Page" target="_blank">FCKeditor</a>, nos aparecerá dicho editor en este campo (y solo en este).</p>
<h3>Campos con múltiples valores</h3>
<p>Es posible definir campos semánticos para que admitan varios valores, separados por comas u otro delimitador. Para conseguir esto, la plantilla debe contener la función #arraymap. La llamada genérica a esta función tiene la forma:</p>
<pre>{{#arraymap:valor&#124;delimitador&#124;var&#124;formula&#124;nuevo_delimitador}}</pre>
<p>La función corta el valor por el delimitador, y para cada trozo, aplica la misma regla que aplica formula a var; y para terminar une los resultados usando el nuevo delimitador. Esto resulta muy útil; por ejemplo, si tenemos un formulario para poblar el campo <em>sinonimo</em>, y queremos coger los valores introducidos y meterlos en la página como propiedades, podemos hacer lo siguiente:</p>
<pre>{{#arraymap:{{{sinonimo&#124;}}}&#124;,&#124;xxx&#124;[[Has synonim::xxx]]}}</pre>
<p>Si usamos la página especial CreateTemplate para crear la plantilla, existe una opción para introducir automáticamente esta función parseadora para cada campo que pueda tomar más de un valor. Por cierto, el string \n se convertirá en un salto de línea.</p>
<h3>Campos para Categorías</h3>
<p>Es posible tener unos campos especiales para categorías usando la extensión CategoryTree. Se puede encontrar más información sobre este tipo de campos <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Forms#Category_inputs" target="_blank">aquí</a>.</p>
<h3>Definiendo el final del formulario</h3>
<p>Gracias a la etiqueta <strong>standard input</strong>, podemos modificar los botones que aparecen al final del formulario para editar una página. Los 7 valores permitidos (aparte de free text) son:</p>
<ul>
<li>save &#8211; para el botón de Grabar la página</li>
<li>preview &#8211; para el botón Previsualizar</li>
<li>changes &#8211; para el botón de Mostrar Cambios</li>
<li>summary &#8211; para el texto del campo Resumen</li>
<li>minor edit &#8211; para el checkbox de edición menor</li>
<li>watch &#8211; para el checkbox de Seguir esta página</li>
<li>cancel &#8211; para el enlace Cancelar</li>
</ul>
<p>Para modificar por ejemplo el botón de Grabar podemos escribir la siguiente etiqueta en la definición del formulario, con el texto a introducir en el botón:</p>
<pre>{{{standard input&#124;save&#124;label=Guardar los cambios}}}</pre>
<p>Si no incluímos ninguna etiqueta de estas, los botones y textos aparecerán como en la edición de cualquier artículo. Pero en cuanto incluyamos una sola, aparecerán sólo los standard inputs que hayamos declarado, y en el mismo orden.</p>
<h3>Formulario de ejemplo</h3>
<p>Podemos ver a continuación el código de la definición que genera <a href="http://discoursedb.org/wiki/Special:AddData/Item/Ejemplo" target="_blank">este formulario</a>:</p>
<p><span style="font-family:sans-serif;font-size:13px;line-height:19px;"> </span></p>
<pre style="border:1px dashed #2f6fab;color:black;background-color:#f9f9f9;line-height:1.1em;padding:1em;">{{{info&#124;add title=Add an opinion item&#124;edit title=Edit an opinion item}}}
&#60;div id="wikiPreview" style="display: none; padding-bottom: 25px; margin-bottom: 25px; border-bottom: 1px solid #AAAAAA;"&#62;&#60;/div&#62;
{{{for template&#124;Item}}}
{&#124;
! Author:
&#124; {{{field&#124;author&#124;mandatory}}}
&#124;-
! Source:
&#124; {{{field&#124;source&#124;mandatory}}}
&#124;-
! Date:
&#124; {{{field&#124;date}}}
&#124;-
! URL:
&#124; {{{field&#124;url}}}
&#124;-
! Quote:
&#124; {{{field&#124;quote&#124;input type=textarea}}}
&#124;}
{{{end template}}}

{{{for template&#124;Opinion&#124;label=Opinions for this item&#124;multiple}}}
'''Topic:''' {{{field&#124;1}}}

'''Position:''' {{{field&#124;2&#124;size=55}}}

'''Stance:''' {{{field&#124;3&#124;size=10}}}
{{{end template}}}

{{{for template&#124;Reference&#124;label=Previous opinion items this item refers to&#124;multiple}}}
'''Item name:''' {{{field&#124;1&#124;autocomplete on category=Items}}}
{{{end template}}}

'''Free text:'''

{{{standard input&#124;free text}}}

{{{standard input&#124;summary}}}

{{{standard input&#124;minor edit}}} {{{standard input&#124;watch}}}

{{{standard input&#124;save}}} {{{standard input&#124;preview}}} {{{standard input&#124;changes}}} {{{standard input&#124;cancel}}}
</pre>
<p>Notar la presencia de wikitexto y algo de HTML. Este código se generó usando la página CreateForm y 3 plantillas distintas. La etiqueta wikiPreview se incluye para que la previsualización se haga en la misma página.</p>
<h3>Añadir y editar datos</h3>
<p>El proceso de añadir datos está normalmente estructurado en <strong>2 pasos</strong>; primero el usuario introduce el nombre de un artículo, y segundo es enviado a un formulario para crear o editar dicho artículo, dependiendo de si ya existía o no, asegurando que no se sobreescriba una página. Existen 2 maneras de añadir datos siguiendo este modelo:</p>
<ol>
<li>Usando la función parseadora &#8220;forminput&#8221;, de tal forma que al añadir dicha etiqueta a cualquier página se cree un campo donde irá el título de la página a añadir/editar. Por defecto esta etiqueta se incluye en cada formulario creado mediante <span style="text-decoration:underline;">CreateForm</span>. La llamada genérica a esta función es:
<pre>    {{#forminput:nombre_formulario&#124;tamaño&#124;valor&#124;texto_boton&#124;query_string}}</pre>
<p>Todos los parámetros son opcionales:</p>
<ul>
<li>nombre_formulario &#8211; nombre del formulario de Semantic Forms a usar. Si se deja en blanco, aparecerá un desplegable con todos los disponibles</li>
<li>tamaño &#8211; tamaño del campo texto</li>
<li>valor &#8211; valor por defecto del campo</li>
<li>texto_boton &#8211; texto en el botón Enviar</li>
<li>query_string &#8211; serie de valores que se quieren pasar al formulario; ejemplo: &#8220;namespace=es&#38;Palabra[Tipo]=verbo&#8221;. Podemos hacer que la nueva página sea subpágina de la actual poniendo &#8220;super_page={{PAGENAME}}&#8221;.</li>
</ul>
</li>
<li>Usando la página especial AddPage. Si visitamos <span style="text-decoration:underline;">Special:AddPage</span>, veremos un campo para poner el nombre de la nueva página y un desplegable para seleccionar el tipo de formulario. También podemos visitar <span style="text-decoration:underline;">Special:AddPage/<em>nombre_formulario</em></span> para especificar el tipo. Si queremos especificar el namespace, podemos visitar <span style="text-decoration:underline;">Special:AddPage/<em>nombre_formulario/</em>Namespace:<em>nombre_namespace</em></span>.  Si queremos crear una subpágina basta con poner / en el nombre.<em><br />
</em></li>
</ol>
<p>Podemos seguir otro modelo que realizará el proceso en <strong>1 paso</strong>. Se basa en que el nombre de la página se crea automáticamente añadiendo el parámetro <em>page name</em> dentro de la etiqueta <em>info</em> (definición del formulario). Como se explicó con anterioridad, existen dos tipos de variables que se pueden usar en dicho campo:</p>
<ul>
<li>&#60;NombrePlantilla[NombreCampo]&#62; &#8211; reemplazado por el contenido de es campo</li>
<li>&#60;unique number;start=<em>numero</em>&#62; &#8211; reemplazado por un número que hace el nombre de la página único</li>
</ul>
<p>Para usar este modelo, los usuarios deben ser llevados a <span style="text-decoration:underline;">Special:AddData/nombre_formulario</span>. Si no indicamos el nombre, iremos a la página donde tendremos que indicarlo, y eso sobreescribirá lo que pongamos en form name. Podemos crear esa URL usando la función #formlink en vez de hacerlo directamente, de la siguiente forma:</p>
<pre>{{#formlink:nombre_formulario&#124;texto_enlace&#124;tipo_enlace&#124;query_string}}</pre>
<p>donde el primer, el segundo y el cuarto parámetro van como en #forminput; y tipo_enlace puede ser &#8220;button&#8221;, o &#8220;post button&#8221; para enviar los datos por POST (más robusto con caracteres especiales o muchos parámetros). Ejemplo:</p>
<pre>{{#formlink:&#60;Form Name&#62;&#124;Push This Button&#124;button&#124;title=Semantic Forms&#38;action=formedit#tab=Summary}}</pre>
<h3>Precargar datos en un formulario</h3>
<p>Puede ser interesante que un formulario para crear una página contenga ya algunos campos prefijados a valores determinados. Existen varias maneras de lograr esto:</p>
<ul>
<li>especificando el valor &#8220;default&#8221; para el campo en cuestión</li>
<li>especificando el parámetro preload en standard input&#124;free text para rellenar el campo de texto libre con el contenido de una página</li>
<li>añadiendo &#8220;preload=nombre_pagina&#8221; al campo query_string en la llamada a forminput rellenaremos los campos con los de la página en cuestión</li>
<li>de forma similar podemos hacer lo mismo en el query_string de la URL para AddPage o AddData.</li>
<li>añadiendo &#8220;nombre_plantilla[nombre_campo]=valor&#8221; al query_string en la llamada a forminput rellenaremos el campo con el valor especificado. Podemos repetirlo usando &#38;.</li>
<li>de forma similar podemos hacer lo mismo para AddPage y AddData.</li>
<li>podemos crear nuestro propio manejador, usando el hook &#8220;sfEditFormPreloadText&#8221;. Si otra extensión llama a este hook, puede precargar los datos que quiera. Para poder hacer esto debe tener una cabecera como &#8220;function-name(&#38;$page_contents, $page_title, $form_title)&#8221;.</li>
</ul>
<h3>La pestaña &#8220;Editar con formulario&#8221;</h3>
<p>Hay 3 formas de hacer que aparezca la pestaña en páginas específicas:</p>
<ol>
<li>La forma recomendada, usando categorías. Las categorías son la forma estándar de definir el tipo de una página en Semantic Mediawiki. La forma más fácil de meter una página en una categoría es introduciendo una etiqueta category en la plantilla principal de ese tipo de página. Una vez hecho esto, se debe meter la propiedad &#8220;Has default form&#8221; en la página de la categoría. Se puede hacer automáticamente si se crea la categoría mediante Special:CreateCategory. Se puede ver un ejemplo <a href="http://discoursedb.org/w/index.php?title=Template:Magazine&#38;action=edit" target="_blank">aquí</a> y <a href="http://discoursedb.org/w/index.php?title=Category:Magazines&#38;action=edit" target="_blank">aquí</a>.</li>
<li>Usando namespaces. Poniendo la propiedad &#8220;Has default form&#8221; en la página del namespace (posiblemene nombre_wiki:nombre_namespace) haremos que cada página en el namespace tenga la pestaña.</li>
<li>Usando páginas específicas, poniendo la propiedad &#8220;Page has default form&#8221; en la propia página.</li>
</ol>
<p>Puede interesar renombrar o quitar la otra pestaña &#8220;Editar&#8221;; para ello existen unos flags a modificar en LocalSettings.php o en SF_Settings.php:</p>
<ul>
<li>$sfgRenameEditTabs &#8211; renombra la pestaña &#8220;Editar con formulario&#8221; a &#8220;Editar&#8221;, y la pestaña &#8220;Editar&#8221; a &#8220;Editar código fuente&#8221;</li>
<li>$sfgRenameMainEditTab &#8211; renombra sólo la pestaña &#8220;Editar&#8221; a &#8220;Editar código fuente&#8221;</li>
<li>$wgGroupPermissions[...]['viewedittab'] &#8211; puede ser establecida para distintos tipos de usuarios, de forma que sólo algunos verán el antiguo &#8220;Editar&#8221; Una modificación corriente es ponerlo a false para usuarios tipo &#8216;*&#8217;, y a true para usuarios &#8217;sysop&#8217;.</li>
</ul>
<h3>Enlaces rojos</h3>
<p>Por defecto, los enlaces rojos en Mediawiki (los que apuntan a una página que no existe) nos llevan a la página para añadir un artículo usando el formulario estándar. Sin embargo, si el enlace rojo es el valor para una propiedad semántica, puede apuntar al formulario adecuado para añadir ese tipo de página. Necesitamos:</p>
<ol>
<li>añadir la propiedad &#8220;Has default form&#8221; a la página de dicha propiedad. Esto se puede hacer directamente creando la propiedad mediante Special:CreateProperty</li>
<li>podemos añadir también uno o más &#8220;Has alternate form&#8221; a la página de la propiedad para dar al usuario a elegir cuando pinche en el enlace rojo.</li>
</ol>
<p>Notar que si hemos definido &#8220;Has default form&#8221; para el namespace, al pinchar en un enlace rojo que va a una página de ese namespace, nos llevará al formulario AddData correcto.</p>
<h3>Realizar búsquedas</h3>
<p>Para ello existe la página especial <strong>Special:RunQuery</strong>, que nos mostrará un formulario como el de AddData o EditData.</p>
<h3>Otras características</h3>
<ul>
<li>Convertir formularios largos en formularios multipestaña usando la extensión <a href="http://www.mediawiki.org/wiki/Extension:Header_Tabs" target="_blank">Header Tabs</a>.</li>
<li>Formularios parciales para poder editar las secciones de una página por separado.</li>
<li>Posiblidad de tener la librería YUI (Yahoo UI Javascript) en local en lugar de acceder a yahoo.</li>
<li>Capacidad para definir nuevos campos usando hooks. Leer más <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Forms/Defining_new_inputs" target="_blank">aquí</a>.</li>
<li>Posibilidad de usar Semantic Forms para la revisión de páginas (historia) usando la extensión <a href="http://www.mediawiki.org/wiki/Extension:SemanticHistory" target="_blank">SemanticHistory</a>.</li>
</ul>
<h3>Usando Semantic Forms en tu wiki</h3>
<p>Pasos a seguir para el uso de Semantic Forms ( sacado de http://www.mediawiki.org/wiki/Extension:Semantic_Forms/Example ):</p>
<ol>
<li>Definir estructura: tipos de páginas y datos que contiene cada una</li>
<li>Crear propiedades (Special:CreateProperty)</li>
<li>Crear plantillas (Special:CreateTemplate) &#8211; una o varias por tipo de página; son las que van a albergar la estructura</li>
<li>Crear formularios (Special:CreateForm) &#8211; uno por tipo de página; para rellenar la(s) plantilla(s) que pertenezca(n) a cada tipo</li>
<li>Crear categorías (Special:CreateCategory) &#8211; cada categoría se asocia a un formulario, de forma que los artículos creados con dicho formulario se metan automáticamente en la categoría.</li>
<li>Enlazar formularios &#8211; para que los usuarios puedan acceder a ellos.</li>
<li>Añadir datos (Special:AddData) &#8211; para probar que lo anterior funciona.</li>
</ol>
<p>Fuente: <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Forms" target="_blank">http://www.mediawiki.org/wiki/Extension:Semantic_Forms</a></p>
<p>Problemas comunes: <a href="http://www.mediawiki.org/wiki/Extension:Semantic_Forms#Common_problems" target="_blank">http://www.mediawiki.org/wiki/Extension:Semantic_Forms#Common_problems</a></p>
<p>Wiki ejemplo: <a href="http://www.wikimanga.net/wiki/Wikimanga:Iniciar_art%C3%ADculo" target="_blank">http://www.wikimanga.net/wiki/Wikimanga:Iniciar_artículo</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Semantic MediaWiki (III)]]></title>
<link>http://dialektos.wordpress.com/2009/10/14/semantic-mediawiki-iii/</link>
<pubDate>Wed, 14 Oct 2009 16:17:35 +0000</pubDate>
<dc:creator>dialektos</dc:creator>
<guid>http://dialektos.wordpress.com/2009/10/14/semantic-mediawiki-iii/</guid>
<description><![CDATA[Propiedades En SMW existen las llamadas anotaciones semánticas que tienen un lenguaje especial. Apar]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h3>Propiedades</h3>
<p>En SMW existen las llamadas anotaciones semánticas que tienen un lenguaje especial. Aparte de esto, la edición es igual que en mediawiki.</p>
<p>Las anotaciones semánticas pueden ser vistas como una extensión al sistema de categorías existente en mediawiki. SMW nos permite realizar una anotación en cualquier texto o link para describir su contenido; de tal forma que se convierten en <strong>propiedades</strong> del artículo. Esto permite a los usuarios ir más allá de las categorías, y también que el contenido sea accesible por máquinas.</p>
<p>La sintaxis de una propiedad es la siguiente:</p>
<pre style="padding-left:30px;"><strong>[[<em>propiedad</em>::<em>valor</em>]]</strong></pre>
<p>El artículo donde se incluya mostrará sólo el valor. Por ejemplo, para escribir un enlace a &#8220;Claro&#8221; en el Artículo &#8220;Oscuro&#8221; pondríamos en mediawiki <em>[[Oscuro&#124;Oscuro]]</em>, pero en SMW para indicar que se trata de un antónimo, escribiríamos <em>[[antonimo::Oscuro]]</em>. Para mostrar un texto alternativo al valor de la propiedad, podemos escribir [[propiedad::valor&#124;texto]]</p>
<p>Cada propiedad tiene su artículo en mediawiki, empezando por &#8220;Property:&#8221;. Se pueden ver todos en <em><strong>Special:Properties</strong></em>.</p>
<p>Además de esto, hay que tener en cuenta que ésto se mostrará en el artículo como un hipervínculo, a no ser que la propiedad sea de un tipo específico, en cuyo caso se mostrará como texto normal (preferible en muchas ocasiones, como por ejemplo para una propiedad numérica). Existen varios tipos predeterminados en SMW, como por ejemplo <em>number, </em>que se pueden usar gracias a la propiedad &#8220;has type&#8221;. Lo que tenemos que hacer para declarar una propiedad de un tipo es ir a su página (Property:&#8230;) y escribir por ejemplo [[has type::<em>number</em>]]. El tipo por defecto es Type:Page, por lo que se crea un enlace.</p>
<p>Otra forma de poner las propiedades en un artículo es mediante #set. De esa manera no aparecerá ni como enlace ni como texto. Para propiedades que abarcan varias fechas se puede usar <em>#set_recurring_event</em>.</p>
<h3>Tipos de propiedades y unidades</h3>
<p>Podemos consultar los tipos de datos disponibles en <em><strong>Special:Types</strong></em>. A continuación la lista:</p>
<ul>
<li>Type:Page &#8211; enlaza páginas (por defecto)</li>
<li>Type:String &#8211; texto</li>
<li>Type:Number &#8211; números enteros y decimales con exponente opcional. Permite poner unidades después del número, y las reconocerá si están definidas como unidades.</li>
<li>Type:Boolean &#8211; true/false, yes/no, 1/0</li>
<li>Type:Date &#8211; fecha</li>
<li>Type:Geographic coordinate &#8211; coordenadas</li>
<li>Type:Text &#8211; como String pero sin límite de longitud. Pero no puede ser usado para búsquedas</li>
<li>Type:Code &#8211; como Text pero muestra el valor como texto preformateado en un recuadro</li>
<li>Type:Temperature &#8211; temperatura</li>
<li>Type:URL &#8211; enlace externo</li>
<li>Type:Annotation URI &#8211; relaciones con objetos externos</li>
<li>Type:Email &#8211; link a dirección de email, con <em>mailto</em>.</li>
</ul>
<p>En cualquier propiedad se puede limitar el rango de valores a tomar, usando la propiedad <strong>Property:Allows value</strong> para enumerar los valores permitidos.</p>
<p>Una propiedad podría tener varias más ligadas. Hay dos formas de implementar esto:</p>
<ol>
<li>Crear una página para la propiedad principal (la que podríamos tratar como un objeto) que sería de tipo Type:Page, e incluir el resto de propiedades en dicha página.</li>
<li>Usar una característica de SMW: una propiedad puede tener múltiples tipos, por lo que se puede definir por ejemplo como Type:Page,Type:Date,Type:Date sin problema.</li>
</ol>
<p>Para que una propiedad pueda estar expresada en varias unidades, debemos definir la relación entre ellas, de tal forma que se pueda realizar la conversión. Existen dos casos:</p>
<ol>
<li>Cuando las unidades son directamente  proporcionales (una se obtiene multiplicando la otra por un factor fijo) debemos escribir en la página de la medida (por ejemplo Type:Potencia) lo siguiente:<br />
[[Corresponds to::1 W, Watios, Watts]] #unidad principal<br />
[[Corresponds to::0.001 KW, Kilowatios]] &#8230;<br />
(recordar que para usar dicha unidad de medida se usará [[Has type::<em>Potencia</em>]])</li>
<li>Cuando las unidades no son directamente proporcionales se pueden hacer un par de cosas que escapan al objetivo de este mini tutorial.</li>
</ol>
<h3>Plantillas semánticas</h3>
<p>Las plantillas semánticas son una forma de incluir el lenguaje empleado por SMW sin tener que escribirlo cada vez. Esto tiene varias ventajas: los usuarios no tienen que aprender nuevo lenguaje y las anotaciones se usan de forma consistente.</p>
<p>Por ejemplo podemos crear una plantilla para mostrar gerundio y participio en la página de un verbo, y usarla así: {{formas&#124;<em>gerundio</em>&#124;<em>participio</em>}}. En la página de la plantilla tendríamos que incluir [[Gerundio::{{{1}}}]] y [[Participio:{{{2}}}]] en la parte donde quisiéramos que se mostrase, por ejemplo una tabla. Como era de esperar, el meter la propiedad en la plantilla no hace que esa propiedad sea de la propia plantilla. Para evitar que se muestren en blanco o muestren error campos que no están rellenos, se pueden usar condicionales en la plantilla para que se muestre por ejemplo la fila de una tabla sólo si la propiedad tiene valor asignado (para estas cosas es muy útil la extensión <a href="http://www.mediawiki.org/wiki/Help:Extension:ParserFunctions" target="_blank">ParserFunctions</a>).</p>
<p>Podemos usar <strong>Semantic Forms</strong> para editar el contenido de las plantillas.</p>
<h3>Enlaces a servicios online</h3>
<p>Podemos hacer que una propiedad enlace a un servicio online, como por ejemplo puede ser Google Maps. Para ello tendremos que escribir lo siguiente en la página de la propiedad: [[provides service::online maps]]; siendo online maps un set de enlaces proporcionados por la wiki. Después de realizar esto, aparecerá un signo de interrogación al lado de la propiedad que al pulsarlo nos mostrará los distintos servicios disponibles. Para este ejemplo, siguiendo un criterio de SMW, los enlaces se pondrían en la página <em>Mediawiki:Smw service online maps</em>, siguiendo la siguiente <a href="http://smwforum.ontoprise.com/smwforum/index.php/MediaWiki:Smw_service_online_maps" target="_blank">estructura</a>. La creación de dichas páginas sólo debería estar disponible para administradores y usuariso especiales.</p>
<p>Como se puede apreciar en el enlace anterior, cada línea de la página tiene la forma <strong>texto &#124; enlace</strong>. El texto es lo que se mostrará al pulsar en el icono correspondiente, y el enlace es donde se nos llevará al hacer clic. Como es natural, tendremos que incluir parámetros a esa URL si queremos ir a una página concreta dentro de la web apuntada; estos parámetros son instanciados como $1, $2, $3,&#8230; pudiendo crear cualquier URL por compleja que sea. Dependiendo del tipo de dato que tenga la propiedad, los parámetros son unos u otros (normalmente el más importante es $1, dando el valor de la propiedad &#8220;URL safe&#8221;):</p>
<p style="padding-left:30px;"><strong>Type:Page</strong><br />
$1: nombre del artículo válido en URL; sin espacios y con guiones bajos<br />
<strong>Type:Number</strong> (y tipos con unidades)<br />
$1: valor numérico con puntuación inglesa<br />
$2: valor entero con puntuación inglesa<br />
$3: unidades, si existen<br />
<strong>Type:String</strong> (no Type:Text)<br />
$1: string, válido en URL<br />
<strong>Type:URL, Type:Annotation URI y Type:Email</strong><br />
$1: valor de la URL, URL-encoded (incluye mailto: para Type:Email)<br />
<strong>Type:Geographic coordinate</strong><br />
$1: latitud (grados)<br />
$2: longitud (grados)<br />
$3: latitud (minutos)<br />
$4: longitud (minutos)<br />
$5: latitud (segundos)<br />
$6: longitud (segundos)<br />
$7: latitud (dirección: N o S)<br />
$8: longitud (dirección: N o S)<br />
$9: latitud (grados decimales)<br />
$10: longitud (grados decimales)<br />
$11: signo (- si S) para latitud<br />
$12: signo (- si W) para longitud</p>
<h3>Exportar datos</h3>
<p>Para completar las propiedades de SMW, tenemos varias características que permitirán que las máquinas puedan leer y procesar el contenido semántico de nuestra wiki.</p>
<p>Los usuarios pueden exportar los datos de un artículo desde <strong>Special:ExportRDF</strong> o escribiendo directamente como URL: <strong>&#60;url_wiki&#62;/Especial:ExportRDF/&#60;nombre_artículo&#62;</strong>. (podemos pasarle parámetros por GET; como por ejemplo backlinks=1 o recursive=1 para decirle que artículos a partir del original queremos que enlace, o xmlmime=rdf). Esto generará documentos legibles para máquinas, en formato <strong>OWL/RDF</strong>. También existe un script que exporta todo el contenido semántico: SMW_dumpRDF.php (carpeta maintenance, puede ser ejecutado en un cron periódicamente). Se puede importar un vocabulario externo (p.ej. FOAF) y asociar atributos y relaciones en SMW con dicho lenguaje. Por añadir algo más, la inclusión de un artículo en una categoría se exporta como rdf:type, y la inclusión de una categoría en otra como rdf:subClassOf.</p>
<p>Existen numerosas herramientas que pueden usarse con SMW y la exportación de RDF:</p>
<ul>
<li>Geocoding Tools for Python &#8211; devuelve las coordenadas de un edificio simplemente dándole el nombre del mismo. Se encarga de buscar en varias wikis semánticas.</li>
<li>Tabulator, Longwell, FOAF Explorer &#8211; navegadores RDF</li>
<li>Piggy Bank &#8211; extensión para Firefox</li>
</ul>
<h4><strong>Importar</strong></h4>
<p>En SMW es posible importar y reusar vocabulario que pertenece a otras wikis o a un estándar predefinido, asociando elementos del vocabulario con términos de la wiki. Por ejemplo, para importar foaf:knows (previamente habilitado por el administrador), habrá que escribir en un artículo [[imported from::foaf:knows]] (en imported from veremos los formatos disponibles y las correspondencias entre nombre &#8211; URL). Importar así una propiedad supone definir automáticamente el tipo, por lo que habría que borrar la propiedad has type en caso de existir. Se pueden importar vocabularios y ontologías, usando varios métodos que no voy a explicar aquí, ya que en el manual de SMW vienen extensamente explicados para el que lo necesite.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Wikipedia]]></title>
<link>http://dotmrt.wordpress.com/2009/10/11/wikipedia/</link>
<pubDate>Sun, 11 Oct 2009 21:05:10 +0000</pubDate>
<dc:creator>dotmrt</dc:creator>
<guid>http://dotmrt.wordpress.com/2009/10/11/wikipedia/</guid>
<description><![CDATA[Ülesanne: Oletagem, et ühel päeval heliseb telefon ja toru otsas on Wikipedia looja Jimbo Wales küsi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>Ülesanne</strong>: Oletagem, et ühel päeval heliseb telefon ja toru otsas on Wikipedia looja Jimbo Wales küsimusega: &#8220;Kuidas võiks Wikipediat veelgi paremaks teha?&#8221; Mida talle vastata?</p>
<h4>Mediawiki</h4>
<ul>
<li>No minu esimene probleem oleks kohe WYSIWYG editori puudumine vaikimisi. Inimesed saavad küll artikleid kirjutada, kuid peavad selleks kasutama wiki notatsiooni, mis on küll lihtsam kui HTML, kuid ikkagi vahepealne lahendus teel tõelise WYSIWYG poole. (Kogukonna poolt pakutavatest lisadest parim on <a href="http://www.mediawiki.org/wiki/Extension:FCKeditor_(Official)" target="_blank">FCKeditor</a>.)</li>
</ul>
<ul>
<li>Samuti saaks piltide ja muu meedia lisamist kindlasti lihtsustada kasutades AJAXit.</li>
</ul>
<p>Kuid need on kõik tarkvaralised probleemid, millega olen ise kokku puutunud Mediawikit näppides ja nendega tegeletakse. Tegu rohkem &#8220;nice to have&#8221; asjadega, mitte kriitiliste probleemidega.</p>
<h4>Wikipedia</h4>
<p>Wikipedia peaprobleemiks on sisu kvaliteet, kuna artikleid loovad tavalised inimesed ehk nö mitte-autoriteetsed allikad. Üks Wikipedia loojatest ja de facto juht <a href="http://simple.wikipedia.org/wiki/Problems_of_Wikipedia" target="_blank">Jimmy Wales aga vaidleb selles osas vastu</a>, et suvalist entsüklopeediat ei peaks kasutama peamise infoallikana.</p>
<p>Siinkirjutaja arvates võib kvaliteedi üle virisemine ju õige olla, kuid teisalt võttes ei ole lihtne ette kujutada alternatiivset meetodit sellise eksponentsiaalse infohulga töötlemiseks. Pealegi suur osa infost muutub ja täieneb iga päev ning vaevalt tuleb Entsüklopeedia Kirjastus teile koju Eesti Entsüklopeediasse täiendusi ja muudatusi juurde kirjutama. Klassikalised autoriteetide poolt koostatud entsüklopeediad käsitlevad vaid murdosa kogu teabest ja selles nad ongi head.</p>
<p>Samas saab selle vähemuutuva teabe kindlasti tänapäeval ka Wikipediast lihtsalt kätte. Ja kuna paber maksab, siis paber-entsüklopeediast ka tunduvalt põhjalikumalt. Kui just keegi pole näiteks <a href="http://en.wikipedia.org/wiki/Primates" target="_blank">primaatide</a> peale pahaseks saanud, et nende artiklit ära solkida.</p>
<h4>Wikipedia mudel</h4>
<p>.. on lihtne &#8211; kõik saavad artiklit muuta. Süsteem põhineb oletusel, et <a href="http://en.wikipedia.org/wiki/Reliability_of_Wikipedia#The_Wikipedia_editing_model" target="_blank">palju heatahtlikke infomuutjaid likvideerib ära kuritahtlike vandaalide poolt tekitatud kahju</a>. Seega soga võib lisanduda, kuid ajapikku kvaliteet kumuleerub.<br />
<strong> </strong></p>
<p><strong>Lühidalt</strong>: tõenäoliselt pole ma ainus arvates, et Wikipedia väärtus kaalub kaugelt üle tema mõned pisipuudused.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Generating Wiki Documentation from Entity Framework edmx File]]></title>
<link>http://devio.wordpress.com/2009/10/11/generating-wiki-documentation-from-entity-framework-edmx-file/</link>
<pubDate>Sun, 11 Oct 2009 17:09:39 +0000</pubDate>
<dc:creator>devio</dc:creator>
<guid>http://devio.wordpress.com/2009/10/11/generating-wiki-documentation-from-entity-framework-edmx-file/</guid>
<description><![CDATA[After introducing the XML format of Entity Framework&#8217;s edmx files, let&#8217;s use that knowle]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>After <a href="http://devio.wordpress.com/2009/10/02/structure-and-analysis-of-edmx-files/" target="_blank">introducing</a> the <a href="http://devio.wordpress.com/2009/10/04/structure-and-analysis-of-edmx-files-2/" target="_blank">XML format</a> of <a href="http://devio.wordpress.com/2009/10/05/structure-and-analysis-of-edmx-files-3/" target="_blank">Entity Framework&#8217;s edmx</a> files, let&#8217;s use that knowledge to create a small XSLT style sheet which displays the mappings of tables and entities in a Wiki-style table (which can be used in MediaWiki and SharePoint wikis).<img src="http://static.devio.at/t.gif?http://devio.wordpress.com/2009/10/11/generating-wiki-documentation-from-entity-framework-edmx-file" alt="" width="1" height="1" /></p>
<p>In the XSLT root, we need to declare all <a href="http://devio.wordpress.com/2009/10/02/structure-and-analysis-of-edmx-files/" target="_blank">namespaces</a> used by the edmx to access nodes and attributes:</p>
<pre>&#60;?xml version="1.0" encoding="utf-8" standalone="yes" ?&#62;
&#60;xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:edmx="http://schemas.microsoft.com/ado/2007/06/edmx"
    xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/
				EntityStoreSchemaGenerator"
    xmlns:ssdl="http://schemas.microsoft.com/ado/2006/04/edm/ssdl"
    xmlns:cs="urn:schemas-microsoft-com:windows:storage:mapping:CS"
    xmlns:edm="http://schemas.microsoft.com/ado/2006/04/edm"
    xmlns:a="http://schemas.microsoft.com/ado/2006/04/codegeneration"
    xml:space="default" &#62;
&#60;xsl:output method="html" omit-xml-declaration="yes"  /&#62;

&#60;!-- input file is C:\path\to\Model.edmx --&#62;
</pre>
<p>This XSLT does not start with the mappings section, but with the tables and views inside the Schema definition, and then looks up their Mappings definition:</p>
<pre>&#60;xsl:template match="/"&#62;
  &#60;xsl:apply-templates
    select="edmx:Edmx/edmx:Runtime/edmx:StorageModels/ssdl:Schema" /&#62;
&#60;/xsl:template&#62;
&#60;xsl:template match="ssdl:Schema"&#62;
&#60;html&#62;
  &#60;body&#62;
    &#60;table width="100%"&#62;
      &#60;xsl:apply-templates select="ssdl:EntityType" &#62;
        &#60;xsl:with-param name="namespace" select="@Namespace" /&#62;
      &#60;/xsl:apply-templates&#62;
    &#60;/table&#62;
  &#60;/body&#62;
&#60;/html&#62;
&#60;/xsl:template&#62;
</pre>
<p>This code creates a table row for each database table and its class:</p>
<pre>&#60;xsl:template match="ssdl:EntityType" &#62;
  &#60;xsl:param name="namespace"&#62;&#60;/xsl:param&#62;
      &#60;xsl:variable name="table" select="@Name" &#62;&#60;/xsl:variable&#62;
      &#60;xsl:variable name="map"
        select="/edmx:Edmx/edmx:Runtime/edmx:Mappings/cs:Mapping/
          cs:EntityContainerMapping/
          cs:EntitySetMapping[cs:EntityTypeMapping/
                            cs:MappingFragment/@StoreEntitySet=$table]" /&#62;
      &#60;xsl:variable name="s" select="$map/*/@TypeName" /&#62;
      &#60;xsl:variable name="p"
          select="concat('IsTypeOf(',
            substring($namespace, 1, string-length($namespace) - 5))" /&#62;
      &#60;xsl:variable name="class"
          select="substring($s, string-length($p) + 1,
            string-length($s) - string-length($p) - 1)"&#62;
      &#60;/xsl:variable&#62;
  &#60;tr valign="top"&#62;
    &#60;td &#62;
      [[&#60;xsl:value-of select="@Name"/&#62;]]
    &#60;/td&#62;
    &#60;td&#62;
      &#60;xsl:value-of select="$class" /&#62;
    &#60;/td&#62;
  &#60;/tr&#62;
&#60;/xsl:template&#62;
&#60;/xsl:stylesheet&#62;
</pre>
<p>The [[ ]] notation creates a wiki hyperlink that allows developers to document tables and entities, and link to other documentation.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Inauguro Webs]]></title>
<link>http://xavigonzalez.wordpress.com/2009/10/05/inauguro-webs/</link>
<pubDate>Mon, 05 Oct 2009 22:46:49 +0000</pubDate>
<dc:creator>xavigonzalez</dc:creator>
<guid>http://xavigonzalez.wordpress.com/2009/10/05/inauguro-webs/</guid>
<description><![CDATA[No son gran cosa, no estan muy desarrolladas, y no son complejas. He montado una Mediawiki en el Equ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>No son gran cosa, no estan muy desarrolladas, y no son complejas.</p>
<p><img class="alignnone size-medium wp-image-146" title="wikital" src="http://xavigonzalez.wordpress.com/files/2009/10/wikital.jpg?w=300" alt="wikital" width="300" height="196" /></p>
<p>He montado una Mediawiki en el Equipo de mi casa (ahora ya en Internet), y una pequeña Web en HTML en mi DropBox, para compartir todos los archivos.</p>
<p>Así que si necesitais protección Antivirus, o algun tipo de software para WinXp, entrar en<br />
<a href="http://xavigonzalezbox.3a2.com" target="_blank">Mi Dropbox</a></p>
<p>Por otro lado, mi MediaWiki esta abierta a participación, no dudeis en escribir lo que sea. No hay censura (pero si Anti-Spam xd) <a href="http://xavi73.homelinux.com/mediawiki" target="_blank"></a></p>
<p><a href="http://xavi73.homelinux.com/mediawiki" target="_blank">Xavi Gonzalez Wiki</a></p>
<p>Un saludo!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[MediaWiki:  Criar um formulário e um arquivo PHP para adicionar um usuário.]]></title>
<link>http://alexandre1978.wordpress.com/2009/10/02/mediawiki-criar-um-formulario-e-um-arquivo-php-para-adicionar-um-usuario/</link>
<pubDate>Fri, 02 Oct 2009 13:47:27 +0000</pubDate>
<dc:creator>alexandre1978</dc:creator>
<guid>http://alexandre1978.wordpress.com/2009/10/02/mediawiki-criar-um-formulario-e-um-arquivo-php-para-adicionar-um-usuario/</guid>
<description><![CDATA[Depois de algumas semanas de pequisas, para desenvolver uma página que crie uma conta em um servidor]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Depois de algumas semanas de pequisas, para desenvolver uma página que crie uma conta em um servidor Wiki (software Mediawiki), consegui a seguinte solução.</p>
<p><em><strong>Arquivo frmcreateUser.php</strong></em><br />
<em>Página formulário</em><br />
<code></p>
<pre>&#60;html&#62;
&#60;body&#62;
&#60;form action="createUser.php" method="POST"&#62;
&#60;h2&#62;Formulario para a criacao de usuarios "wiki.claretiano.edu.br"&#60;/h2&#62;&#60;br/&#62;&#60;br /&#62;&#60;br /&#62;
Login: &#60;input type="text" name="login" /&#62;&#60;br /&#62;&#60;br /&#62;
Senha: &#60;input type="text" name="senha" /&#62;&#60;br /&#62;&#60;br /&#62;
E-mail: &#60;input type="text" name="email" /&#62;&#60;br /&#62;&#60;br /&#62;
Nome Real: &#60;input type="text" name="nome" /&#62;&#60;br /&#62;&#60;br /&#62;
Grupo: &#60;input type="text" name="grupo" /&#62;&#60;/br /&#62;&#60;br /&#62;
&#60;input type="submit"&#62;
&#60;/form&#62;</pre>
<pre>&#60;body&#62;
&#60;html&#62;</pre>
<p></code></p>
<p><em><strong>Arquivo createUser.php</strong></em><br />
<em>Cria o usuário e adiciona em um grupo</em></p>
<p><code></p>
<pre>&#60;?php

/**
* Criar conta e promover usuario
*
*@autor Alexandre Silva (alexandre260678@hotmail.com)
*/

$path="/var/www/wiki/wiki";
putenv("MW_INSTALL_PATH={$path}");
require_once ("{$path}/includes/WebStart.php");

$user=User::newFromName($_POST["login"]);

# Testa se o usuario esta em branco
if (! is_object($user)) {
echo ("Usuario invalido.\n");
die();
}

$user-&#62;addToDatabase();
$user-&#62;setPassword( $_POST["senha"] );
$user-&#62;setEmail( $_POST["email"] );
$user-&#62;setRealName( $_POST["nome"] );
$user-&#62;confirmEmail();

# Promove para um grupo
$user-&#62;addGroup($_POST["grupo"]);

$user-&#62;saveSettings();
$ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
$ssUpdate-&#62;doUpdate();

?&#62;</pre>
<p></code></p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
