systeam 70 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623
<!DOCTYPE html>
<html dir="ltr" lang="en-US">
<head>
<meta charset="UTF-8" />
<title>W3C Systems Team’s Blog</title>
<meta name="viewport" content="width=device-width" />	
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="stylesheet" type="text/css" media="all" href="http://www.w3.org/blog/systeam/wp-content/themes/w3c_blog/style.css" />
<link rel="pingback" href="http://www.w3.org/blog/systeam/xmlrpc.php" />
<!--[if lt IE 9]>
<script src="http://www.w3.org/blog/systeam/wp-content/themes/w3c_blog/html5.js" type="text/javascript"></script>
<![endif]-->

<link rel="alternate" type="application/rss+xml" title="W3C Systems Team’s Blog &raquo; Feed" href="http://www.w3.org/blog/systeam/feed/" />
<link rel="alternate" type="application/rss+xml" title="W3C Systems Team’s Blog &raquo; Comments Feed" href="http://www.w3.org/blog/systeam/comments/feed/" />
<script type='text/javascript' src='http://www.w3.org/blog/systeam/wp-includes/js/jquery/jquery.js?ver=1.4.2'></script>
<script type='text/javascript' src='http://www.w3.org/blog/systeam/wp-content/plugins/collapsing-archives/collapsFunctions.js?ver=1.7'></script>
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://www.w3.org/blog/systeam/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://www.w3.org/blog/systeam/wp-includes/wlwmanifest.xml" /> 
<link rel='index' title='W3C Systems Team’s Blog' href='http://www.w3.org/blog/systeam/' />
<meta name="generator" content="WordPress 3.0.5" />
<style type='text/css'>
    
    </style>
<style type='text/css'>
</style>
<meta id="syntaxhighlighteranchor" name="syntaxhighlighter-version" content="3.1.3" />
</head>

<body class="home blog">
	<header id="branding" role="banner">		
		
					<a href="http://www.w3.org/blog/systeam/" title="W3C Systems Team’s Blog" rel="home"><img src="http://www.w3.org/blog/systeam/wp-content/themes/w3c_blog/images/headers/w3c-header.jpg" width="940" height="198" alt="" /></a>
				</header><!-- #branding -->
			
<div id="wrapper" class="hfeed">
	<div id="header">
		<div id="masthead">			
					
		<h1 id="site-title">		
			<a href="http://www.w3.org/blog/systeam/" title="W3C Systems Team’s Blog" rel="home">W3C Systems Team’s Blog</a>
		</h1>			
			<div id="site-description">		
			      
			</div>
			<nav id="access" role="navigation">
			  				<div class="skip-link screen-reader-text"><a href="#content" title="Skip to content">Skip to content</a></div>
								<div class="menu-header"><ul id="menu-test" class="menu"><li id="menu-item-235" class="menu-item menu-item-type-taxonomy menu-item-235"><a href="http://www.w3.org/blog/systeam/category/open-source-software/">Open Source Software</a></li>
<li id="menu-item-236" class="menu-item menu-item-type-taxonomy menu-item-236"><a href="http://www.w3.org/blog/systeam/category/homegrown-tools/">Homegrown tools</a></li>
<li id="menu-item-237" class="menu-item menu-item-type-taxonomy menu-item-237"><a href="http://www.w3.org/blog/systeam/category/system-policies/">System policies</a></li>
</ul></div>			</nav><!-- #access -->
			<div class="triangle-l"></div>
			<div class="triangle-r"></div>
		</div><!-- #masthead -->
	</div><!-- #header -->

	<div id="main">

		<section id="container">
      
			<div id="content" role="main">
			
<!--	<div id="nav-above" class="navigation">
		<div class="nav-previous"><a href="http://www.w3.org/blog/systeam/page/2/" ><span class="meta-nav">&larr;</span> Older posts</a></div>
		<div class="nav-next"></div>
	</div>
-->




			<article id="post-249" class="post-249 post type-post hentry category-uncategorized">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2011/10/27/list-id-for-filtering-mail/" title="Permalink to List-Id: for filtering mail from W3C lists" rel="bookmark">List-Id: for filtering mail from W3C lists</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2011/10/27/list-id-for-filtering-mail/" title="11:12 pm" rel="bookmark"><span class="entry-date">October 27, 2011</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/gerald/" title="View all posts by Gerald Oskoboiny">Gerald Oskoboiny</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>There are a number of email message headers that people may use to filter messages from W3C lists. The best header to use for this purpose is <code>List-Id:</code> (specified in <a href="http://tools.ietf.org/html/rfc2919">RFC 2919</a>), because this header is intended to remain constant throughout the lifetime of a list.</p>
<p>Using other headers to filter mail from our lists may not work as reliably, because the headers may change when we make changes to our email infrastucture or mailing list software.</p>
<p>Today we made a change to our list software to cause it to stop generating <code>Sender:</code> headers, because doing so was causing <a href="http://en.wikipedia.org/wiki/DomainKeys_Identified_Mail">DKIM</a> signatures to fail in some cases, resulting in messages bouncing and people being removed from our mailing lists.</p>
<p>If your email filters were based on the <code>Sender</code> header, please update them to use <code>List-Id</code> instead, as this will provide a more reliable and future-proof means of filtering.</p>
<p>We have a wiki page that provides info on <a href="http://www.w3.org/2006/tools/wiki/EmailClientForMailingListFiltering">how to filter messages based on List-Id in various email clients</a>; additions welcome!</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/uncategorized/" title="View all posts in Uncategorized" rel="category tag">Uncategorized</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2011/10/27/list-id-for-filtering-mail/#comments" title="Comment on List-Id: for filtering mail from W3C lists">1 Comment</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-153" class="post-153 post type-post hentry category-open-source-software">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2010/06/16/why_we_chose_mercurial_as_our_dvcs/" title="Permalink to Why we chose Mercurial as our Decentralized Versioning System" rel="bookmark">Why we chose Mercurial as our Decentralized Versioning System</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2010/06/16/why_we_chose_mercurial_as_our_dvcs/" title="2:34 pm" rel="bookmark"><span class="entry-date">June 16, 2010</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/bertails/" title="View all posts by Alexandre Bertails">Alexandre Bertails</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>After <a href="http://www.w3.org/blog/systeam/2009/12/09/decentralized_versioning_system_at_w3c">having asked the community</a> about which <a href="http://en.wikipedia.org/wiki/Distributed_Version_Control_System">decentralized versioning system</a> W3C should use, we made our <a href="http://dvcs.w3.org/hg">DVCS platform</a> operational a few months ago, powered by <a href="http://mercurial.selenic.com/">Mercurial</a>. The obvious contender was <a href="http://git-scm.com/">Git</a> — here are some of the reasons why we picked Mercurial over Git, in the hope that this analysis can be useful to others.</p>
<p>Choosing a DVCS platform in an organization such as W3C is a lot more complicated than just following the trend, which seems to be in favor of Git today. For example, we had to take into account the tools coming along with the system and the clients available on the various operating systems used by the diverse set of Working Group participants and open source developers, as well as the support offered in third party softwares. Mercurial has clearly a superiority there over Git especially for supported clients under Windows.</p>
<p>A lot of our users are able to use the most advanced features of both DVCS but a significative part of them just want to share files, handle easily what they are doing, deal with conflicts and eventually being driven through a graphical user interface.</p>
<p>We haven&#8217;t heard any request for fancy history modification features: while Git is clearly more powerful in letting you manipulating your history, we liked the simplicity of the Mercurial command set and the availability of several GUI.</p>
<p>We will have to administrate a growing number of repositories. We knew before launching the service that we would have a lot of requests to tweak their configurations. As a result, the Systems Team needed something easy to set up, easy to hack on and also easy to integrate with our existing systems. Indeed, we couldn&#8217;t rely on any external hosting services like <a href="https://github.com/">GitHub</a> or <a href="http://bitbucket.org/">BitBucket</a> as we wanted all our repositories to be tied to our existing W3C accounts (through LDAP).</p>
<p>Looking into the future, we also verified the integration of Mercurial in <a href="http://trac.edgewall.org/">Trac</a> that we are considering using for some of our <a href="http://www.w3.org/Status">open source projects</a> such as our Validators and Unicorn.</p>
<p>Mercurial has offered all those tools for a long time and lots of tutorials are easy to find on the Web.</p>
<p>To summarize, we liked both systems a lot. On the one hand, Git seemed to be more powerful, with more features but offered too much for what we needed. On the other hand, Mercurial came with more tools and seemed really simpler both for our users, and for us in terms of integration with other tools and services.</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/open-source-software/" title="View all posts in Open Source Software" rel="category tag">Open Source Software</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2010/06/16/why_we_chose_mercurial_as_our_dvcs/#comments" title="Comment on Why we chose Mercurial as our Decentralized Versioning System">5 Comments</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-154" class="post-154 post type-post hentry category-open-source-software">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2010/03/01/validator_0_8_6_release/" title="Permalink to Validator 0.8.6 release wraps up a year&#8217;s worth of bug fixes and code clean-up" rel="bookmark">Validator 0.8.6 release wraps up a year&#8217;s worth of bug fixes and code clean-up</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2010/03/01/validator_0_8_6_release/" title="11:35 pm" rel="bookmark"><span class="entry-date">March 1, 2010</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/ted/" title="View all posts by Ted Guild">Ted Guild</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>Over the past year, millions of pages were validated every day using W3C&#8217;s services. We&#8217;d like to thank those who keeping service running smoothly by <a href="http://validator.w3.org/contribute.html">helping other users, carefully reporting problems, and developing code.</a> We&#8217;d especially like to thank <a href="http://fi.linkedin.com/in/vskytta">Ville Skyttä</a> for <a href="http://dev.w3.org/cvsweb/validator/httpd/cgi-bin/check">continuing maintenance of the validator check perl script</a> and <a href="http://hsivonen.iki.fi/">Henri Sivonen</a> for continuing work on the validator.nu code.</p>
<p>Changes in the <a href="http://validator.w3.org/whatsnew.html#v086">0.8.6 release<br />
notes</a> include:</p>
<blockquote>
<ul>
<li> Enhancement: improved error handling and diagnostics for problems</li>
<li> Enhancement: updated <a href="http://qa-dev.w3.org/unicorn/">Unicorn</a> output.</li>
<li> Enhancement: the <abbr title="Evaluation and Report Language">EARL</abbr>/<abbr title="Resource Description Framework">RDF</abbr> output format has been updated to<br />
<a href="http://www.w3.org/TR/2009/WD-EARL10-Schema-20091029/">version 1.0 (20091029 Working Draft)</a>.</li>
<li> Enhancement: support for charsets specified with <a href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=5992"><code>&lt;meta charset="..."&gt;</code> in HTML5 documents</a> has been added (provided that HTML::HeadParser &gt;= 3.60 is installed).</li>
<li> Bug fix: recommended <a href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=6573">system identifier for XHTML 1.1 plus MathML 2.0 documents</a> was incorrect.</li>
<li> Bug fix: direct input whenout overriding doctype or charset <a href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=6747">passed an invalid Content-Type header</a> to the HTML5 validator.</li>
<li> Bug fix: there were <a href="http://www.w3.org/Bugs/Public/show_bug.cgi?id=7000">several errors in the JSON output</a>.</li>
<li> Bug fix: bad DC terms namespace prefix in the XHTML+RDFa &#8220;badge&#8221; example code.</li>
<li> Bug fix: the SOAP API produced invalid XML when giving character encoding suggestions.</li>
<li> … and a whole slew of minor spelling, code cleanup, server error log warning trash, minor performance and the like fixes here and there.  Kudos to <a href="http://perltidy.sourceforge.net/">perltidy</a> and <a href="http://www.perlcritic.org/">perlcritic</a> for many of these.</li>
<li> occurred when decoding Content-Encodings, when cleaning up<br />
markup with Tidy, and when interfacing with the HTML5 validator.</li>
</ul>
</blockquote>
<p>The validator.nu codebase has seen <a href="http://bugzilla.validator.nu/buglist.cgi?query_format=advanced&amp;short_desc_type=allwordssubstr&amp;short_desc=&amp;product=Validator.nu&amp;component=ARIA&amp;component=Browser-based+UI&amp;component=Compound+schemas&amp;component=Controller&amp;component=Datatype+library&amp;component=Documentation&amp;component=General&amp;component=HTML+parser&amp;component=HTML5+schema&amp;component=Image+and+outline+reports&amp;component=MathML+2.0+schema&amp;component=Non-schema+checkers&amp;component=RELAX+NG+back+end&amp;component=SVG+1.1+schema&amp;component=Sample+code&amp;component=Schematron+back+end&amp;component=Test+cases&amp;component=Test+harness&amp;component=Utilities&amp;component=Web+service+formats&amp;component=XHTML+1.0+schema&amp;component=XML+parser&amp;version=HEAD&amp;long_desc_type=substring&amp;long_desc=&amp;bug_file_loc_type=allwordssubstr&amp;bug_file_loc=&amp;bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;resolution=FIXED&amp;resolution=INVALID&amp;resolution=WONTFIX&amp;resolution=LATER&amp;resolution=REMIND&amp;resolution=DUPLICATE&amp;resolution=WORKSFORME&amp;resolution=MOVED&amp;bug_severity=blocker&amp;bug_severity=major&amp;bug_severity=normal&amp;bug_severity=minor&amp;bug_severity=enhancement&amp;priority=P2&amp;rep_platform=All&amp;op_sys=All&amp;emailassigned_to1=1&amp;emailtype1=substring&amp;email1=&amp;emailassigned_to2=1&amp;emailreporter2=1&amp;emailcc2=1&amp;emailtype2=substring&amp;email2=&amp;bugidtype=include&amp;bug_id=&amp;chfieldfrom=2009-03-26&amp;chfieldto=Now&amp;chfield=resolution&amp;chfieldvalue=FIXED&amp;cmdtype=doit&amp;order=Reuse+same+sort+as+last+time&amp;field0-0-0=noop&amp;type0-0-0=noop&amp;value0-0-0=">over 100 fixes and enhancements</a> since our 0.8.5 release in March 2009.</p>
<p>Integration with <a href="http://qa-dev.w3.org/unicorn/">Unicorn</a>, a project which aims to provide the big picture about the quality of a Web page by gathering the results of several tools, has improved.  Unicorn development continues with a <a href="http://lists.w3.org/Archives/Public/public-qa-dev/2009Oct/0000.html">recent release of its own</a> and will be a focus in the coming months.</p>
<hr />
<p>Authors: Dan Connolly and Ted Guild</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/open-source-software/" title="View all posts in Open Source Software" rel="category tag">Open Source Software</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2010/03/01/validator_0_8_6_release/#comments" title="Comment on Validator 0.8.6 release wraps up a year&#8217;s worth of bug fixes and code clean-up">1 Comment</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-155" class="post-155 post type-post hentry category-open-source-software">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2009/12/09/decentralized_versioning_system_at_w3c/" title="Permalink to Decentralized versioning system at W3C" rel="bookmark">Decentralized versioning system at W3C</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2009/12/09/decentralized_versioning_system_at_w3c/" title="8:45 am" rel="bookmark"><span class="entry-date">December 9, 2009</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/dom/" title="View all posts by Dominique Hazaël-Massieux">Dominique Hazaël-Massieux</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>We’ve heard from several groups and individuals that they would like W3C to host a public decentralized versioning repository for W3C-related work items, such as editors drafts, test suites, tools and software.</p>
<p>The goal of such a repository would be to host the reference versions of these items, while allowing as many people as possible to modify, branch, patch the content of the repository, without the hurdles that CVS creates for this kind of cooperation.</p>
<p>As we are looking into experimenting with such a service, we are hitting the question that many others have encountered in that process: which decentralized versioning system to choose?</p>
<p>The main two contenders seems to be Git and Mercurial; Git seems to have a growing number of tools, and more advanced features; Mercurial seems to be easier to use, and possibly easier to set up on a larger number of platforms. Here are some of the comparions we have found in our early investigations:</p>
<ul>
<li><a href="http://code.google.com/p/support/wiki/DVCSAnalysis">Analysis of Git and Mercurial</a> for DVCS support in Google Code</li>
<li><a href="http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/">Git vs. Mercurial: Please Relax</a> by Patrick Thomson</li>
<li><a href="http://www.rockstarprogrammer.org/post/2008/apr/06/differences-between-mercurial-and-git/">The Differences Between Mercurial and Git</a> by Dustin Sallings</li>
</ul>
<p>We’re interested to hear feedback on this question, in particular in the form of sharing experience of using them (inside or outside of the W3C community), and pros and cons of both systems.</p>
<p>We’re trying to have that discussion on our <a href="http://lists.w3.org/Archives/Public/public-qa-dev/">publicly archived mailing list</a> <a href="mailto:public-qa-dev@w3.org">public-qa-dev@w3.org</a> (where I sent <a href="http://lists.w3.org/Archives/Public/public-qa-dev/2009Dec/0010.html">a message similar to this post</a>), but feel free to use blog comments if you find that more practical.</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/open-source-software/" title="View all posts in Open Source Software" rel="category tag">Open Source Software</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2009/12/09/decentralized_versioning_system_at_w3c/#comments" title="Comment on Decentralized versioning system at W3C">6 Comments</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-156" class="post-156 post type-post hentry category-open-source-software">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2009/05/19/tracking_requests/" title="Permalink to Tracking requests" rel="bookmark">Tracking requests</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2009/05/19/tracking_requests/" title="10:12 am" rel="bookmark"><span class="entry-date">May 19, 2009</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/dom/" title="View all posts by Dominique Hazaël-Massieux">Dominique Hazaël-Massieux</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>W3C is a fifteen-years old organization, where plenty of people come to collaborate, with a high variation among them in terms of operating systems, computer proficiency, corporate set up, etc. A number of our users manage to be even more geek than we are in the Systems Team, while for many others, a computer is just a tool that really ought to &#8220;just work&#8221; (which they still often don&#8217;t).</p>
<p>The result of that interesting mix is that we have set up over time a fairly large number of tools to facilitate collaboration: several hundreds of mailing lists, an IRC server with a few handy bots, a fine-grained access control system, a questionnaire system, a flexible editing system combined with a robust mirroring scheme, wikis, blogs, various bug and issues tracking system, etc.</p>
<p>And as all these tools are entirely bug-free and work seamlessly together and for all our users (NOT!), we have always had a need to track requests from our users to create and manage various accounts, set up new instances of these tools, correct or work around bugs, etc.</p>
<p>Over the years, the way we have tracked and managed all these requests has evolved, toward somewhat more formalism as the number of our users and tools grew.</p>
<p>When I joined the Systems Team in 2000, our tracking was entirely based on manual scanning of mails threads sent to one of our internal mailing lists: basically, each of us watched for what looked like a request, checked if anybody had responded to it, and if nobody had and the request was something you could manage, and you had some time on your hands, you would take on it.</p>
<p>Given how informal it was, it actually worked quite well, although over time we added some more purely conventional practices: requiring the use of a specific mailing list of a specific type of requests, adding a <code>[closed]</code> flag to the topic of a thread to signal that the request had been dealt with (so that others could simply delete the thread without bothering reading it).</p>
<p>But as the number of tools and users continued to grow, we started to get complaints that some requests had not been dealt with at all, and it became clear that we lacked overall visibility on what needed to be responded.</p>
<p>Back in 2002, I wrote a quick <a href="http://www.w3.org/2002/12/open-issues.php3">XSLT style sheet</a> that would help us get more visibility on the state of our requests: it took the threaded view of the archive of our request mailing list, and would look for any thread that didn&#8217;t contain a message starting with our now conventional <code>[closed]</code> flag, and would present a report showing all the requests that hadn&#8217;t been closed, as well as those that hadn&#8217;t had an answer at all.</p>
<p>And again, that fairly simple system served us well for quite a few years; some others W3C groups even started re-using it for tracking their issues, and a <a href="http://www.w3.org/2001/sw/WebOnt/Makefile">similar version of the tool based on more Semantic Web technologies</a> was used by a couple of groups to track their specifications&#8217; Last Call comments.</p>
<p>But no matter how well that solution worked, we decided last year that we would finally move to a proper tickets tracking system, the well-known open-source <a href="http://www.bestpractical.com/?">RT</a>, to get the following advantages over our existing hack:</p>
<ul>
<li>get a clear view of who was working on what ticket,</li>
<li>be able to assign a given ticket to someone, even if that person hadn&#8217;t picked it up yet</li>
<li>easily find tickets that were stalled due to lack of responses from the requester (vs. because we didn&#8217;t act on it)</li>
</ul>
<p>The first few months with RT weren&#8217;t quite so rosy, actually, as we had to find ways to integrate it as smoothly as possible in our current procedures and infrastructures, and with our mailing list habits.</p>
<p>Some of the changes we&#8217;ve brought to it include:</p>
<ul>
<li>make it track messages sent as part of a given thread (as identified by the <code>In-Reply-To</code> header) as belonging to the same ticket (even without the id number included) &#8211; with an <a href="http://wiki.bestpractical.com/view/InReplyToParsing">an existing patch</a> to that end;</li>
<li>change the way it modified subject messages (with <a href="http://search.cpan.org/~jesse/RT-Extension-BrandedQueues-0.1/">the Branded Queues extension</a>);</li>
<li>fix partially the way it sends messages and notices through the configuration UI;</li>
<li>make it understand our <code>[closed]</code> convention so that we could continue using mail as our primary way to close a ticket, using a simple &#8220;Scrip&#8221; inspired from <a href="http://wiki.bestpractical.com/view/SetTicketPropertiesViaMail">another RT user&#8217;s contribution</a>.</li>
</ul>
<p>There are still some rough edges &#8211; RT seems to be particularly reluctant to send messages in CC when using the Web interface for some reasons, we need to integrate it better with our existing accounts system so that our users can better follow progress on their requests -, and some user interface and HTTP behaviors problems that make me cringe.</p>
<p>But overall, I think the tool has certainly helped us regain control over our growing number of requests, and is also hopefully steadily allowing us to offer a better experience to our community.</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/open-source-software/" title="View all posts in Open Source Software" rel="category tag">Open Source Software</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2009/05/19/tracking_requests/#respond" title="Comment on Tracking requests">Leave a comment</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-158" class="post-158 post type-post hentry category-open-source-software">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2009/02/16/validator_fuzzy_match/" title="Permalink to Validator Dev Watch: fuzzy matching for unknown elements/attributes" rel="bookmark">Validator Dev Watch: fuzzy matching for unknown elements/attributes</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2009/02/16/validator_fuzzy_match/" title="5:06 pm" rel="bookmark"><span class="entry-date">February 16, 2009</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/ot/" title="View all posts by ot">ot</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<h3>Unknown elements and attributes at top of the validation errors charts</h3>
<p>According to <a href="http://dev.opera.com/articles/view/mama-w3c-validator-research-2/?page=3#errors" title="MAMA: W3C validator research - Opera Developer Community">MAMA&#8217;s survey of validation of a few million web pages</a>, the most common validation error is either “There is no attribute X” or “Element X undefined”. In other words, instances where the document uses elements or attributes which are not standard. As explained in the <a href="http://validator.w3.org/docs/errors.html#ve-76" title="Error Explanations for The W3C Markup Validation Service">Validator&#8217;s documentation of errors</a>, the most likely reasons for these errors are:
</p>
<ol>
<li>typos. The user wrote &lt;acornym&gt; when what was really meant was &lt;acronym&gt;. I am not sure if this is the most common error, but it can be a terribly frustrating one. “What do you mean acronym is not a standard element. Of course it is! Oh, wait, I made a typo…”</li>
<li>Non-standard elements. Again, I don&#8217;t have statistics about which elements/attributes trigger this error most of the times, but I would bet on the &lt;embed&gt; element and the <code>target</code> attribute (which, by the way, is only available in Transitional Doctypes). For those we can&#8217;t do much, other than recommend using another doctype and point to standard ways of using &lt;object&gt; to display flash content.</li>
<li>Case-sensitive XHTML. This one bites me more often than I&#8217;d like to admit. Copy and paste a snippet of code that uses e.g the <code>onLoad</code> attribute, test the functionality in a few browsers – they will gladly oblige – then see the validator throw an error, because of course, in lower-case XHTML, <code>onLoad</code> isn&#8217;t a known attribute. <code>onload</code> is.</li>
</ol>
<p>What makes these errors frustrating is not so much the difficulty they present. Anyone carefully reading the error message <strong>and</strong> the explanation that comes with it will easily fix their markup. Unfortunately, for a number of good and bad reasons, few of us ever read the explanations: those tend to be a bit long, propose possible causes for the problem, and a list of potential solutions – and most people will just ignore or gloss over them.</p>
<h3>Suggestive power</h3>
<p>One way we found of making the validator more user-friendly here is to escalate the most likely solution up into the error message itself. In other words, compare:</p>
<blockquote cite="http://validator.w3.org/check?uri=http://qa-dev.w3.org/wmvs/HEAD/dev/tests/4412-fuzzymatch.xhtml;ss">
<p>  <span class="err_type"><img src="http://validator.w3.org/images/info_icons/error.png" alt="Error" /></span><br />
<em>Line <a href="#line-12">12</a>,<br />
Column 14</em>:<br />
<span class="msg">there is no attribute &#8220;crass&#8221;</span></p>
<p><code>  &#060;spam crass=<strong>&#034;</strong>foo&#034;&#062;typos in attribute and element&#060;/span&#062;</code></p>
<pre>
lenghty explanation here…
</pre>
</blockquote>
<p>with&#8230;</p>
<blockquote cite="http://qa-dev.w3.org/wmvs/HEAD/check?uri=http://qa-dev.w3.org/wmvs/HEAD/dev/tests/4412-fuzzymatch.xhtml;ss">
<p><span class="err_type"><img src="http://validator.w3.org/images/info_icons/error.png" alt="Error" /></span><br />
<em>Line <a href="#line-12">12</a>,<br />
Column 14</em>:<br />
<span class="msg">there is no attribute &#8220;crass&#8221;. Maybe you meant &#8220;class&#8221; or &#8220;classid&#8221;?</span></p>
<p><code>  &#060;spam crass=<strong>&#034;</strong>foo&#034;&#062;typos in attribute and element&#060;/span&#062;</code></p>
<pre>
same lenghty explanation here…
</pre>
</blockquote>
<p>The former is what the latest stable release of the markup validator will output. The latter is what I implemented last week, and can be <a href="http://qa-dev.w3.org/wmvs/HEAD/check?uri=http://qa-dev.w3.org/wmvs/HEAD/dev/tests/4412-fuzzymatch.xhtml;ss" title="[Invalid]<br />
Markup Validation of http://qa-dev.w3.org/wmvs/HEAD/dev/tests/4412-fuzzymatch.xhtml - W3C Markup Validator">tested</a> on our<br />
<a href="http://qa-dev.w3.org/wmvs/HEAD/">test instance of the validator</a>.</p>
<h3>How is it implemented?</h3>
<p> Since the validator is coded in perl, we looked for perl modules implementing algorithm to calculate <a href="http://en.wikipedia.org/wiki/Edit_distance" title="Edit distance - Wikipedia, the free encyclopedia">edit distance</a> between strings. We found <a href="http://search.cpan.org/dist/String-Approx/" title="Jarkko Hietaniemi / String-Approx - search.cpan.org">String::Approx</a>, which implements the <a href="http://en.wikipedia.org/wiki/Levenshtein_distance" title="Levenshtein distance - Wikipedia, the free encyclopedia">Levenshtein algorithm</a>. Take this algorith, plug in a list of all known elements and attributes in HTML, and after moderate hacking, my code would very easily find that &lt;spam&gt; should be  &lt;span&gt;, and some extra tweaking yielded good results suggesting &lt;acornym&gt; could be corrected as &lt;acronym&gt;.</p>
<p>For some reason however, I could not find a way to make the String::Approx algorithm reliably suggest <code>onload</code> as a replacement for <code>onLoad</code> – it seems to consider character substitution as expensive, regardless of the fact that the substitution is from a character to its uppercase equivalent. A trivial additional test took care of this glitch, and we seem to be all set to have a more usable validator at the upcoming release.</p>
<h3>What do you think?</h3>
<p>What do you think of this feature? Would you have implemented it differently?</p>
<p>Any suggestion for a better way to word/present the suggested correction for unknown element/attributes? Any thought on other small improvements to the validator which would dramatically improve its usability?</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/open-source-software/" title="View all posts in Open Source Software" rel="category tag">Open Source Software</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2009/02/16/validator_fuzzy_match/#comments" title="Comment on Validator Dev Watch: fuzzy matching for unknown elements/attributes">11 Comments</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-159" class="post-159 post type-post hentry category-open-source-software">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2009/01/30/link_checker_4_4/" title="Permalink to New Link Checker opens series of open source releases" rel="bookmark">New Link Checker opens series of open source releases</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2009/01/30/link_checker_4_4/" title="1:37 am" rel="bookmark"><span class="entry-date">January 30, 2009</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/ot/" title="View all posts by ot">ot</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>I like writing change logs: that&#8217;s usually a sign that a period of development for one of our tools is ending and that we are about to release the product of weeks, sometimes months, of work. This one is a winner… As we are releasing a new version of the <a href="http://validator.w3.org/checklink" title="W3C Link Checker">W3C Link Checker</a>, the <a href="http://dev.w3.org/cvsweb/perl/modules/W3C/LinkChecker/ChangeLog" title="CVS log for perl/modules/W3C/LinkChecker/ChangeLog">additions to the changelog span almost 400 lines</a> and summarize the work done for more than 2 years: new UI, many bug fixed and a generally more friendly and reliable tool. Kudos to the developers and contributors, including Ville Skyttä, Michael Ernst and Brett Bieber!</p>
<p>For those who would like to play with the new link checker on their own machine (did you know it worked as a command-line tool, too?) or server, the open source code for the latest version (4.4) should very soon be available on <a href="http://search.cpan.org/dist/W3C-LinkChecker/" title="W3C-LinkChecker - search.cpan.org">CPAN</a>. </p>
<p>More W3C tools release should come very soon. In the meantime, tell us how you like this new release of the link checker in the comments, and <em>get involved</em> to make the next release even better: <a href="http://validator.w3.org/docs/checklink.html#csb">comments bug report</a> are welcome, and so are <a href="http://www.w3.org/QA/Tools/Donate" title="W3C Validator Donation Program">Donations to the W3C validator program</a>.</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/open-source-software/" title="View all posts in Open Source Software" rel="category tag">Open Source Software</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2009/01/30/link_checker_4_4/#comments" title="Comment on New Link Checker opens series of open source releases">1 Comment</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-160" class="post-160 post type-post hentry category-open-source-software">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2009/01/26/validator_donation_early_numbers/" title="Permalink to Validator donation program: the first numbers are in!" rel="bookmark">Validator donation program: the first numbers are in!</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2009/01/26/validator_donation_early_numbers/" title="4:35 pm" rel="bookmark"><span class="entry-date">January 26, 2009</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/ot/" title="View all posts by ot">ot</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>A few months ago, when a small group of people gathered to discuss about an idea that would later become the<br />
<a href="http://www.w3.org/QA/Tools/Donate" title="W3C Validator Donation Program">W3C Validator Donation and Sponsorship Program</a>,<br />
one of the “design counstraints” we almost naturally gave ourselves was to strive for transparency. The W3C has sometimes been perceived as closed or secretive &#8211; partly because of its structure<br />
as an industrial consortium where part of the membership value is early confidential access to some information, and in spite of the the fact that all that confidential information is always exposed for all to see through public reviews,<br />
as early as draft stage…
</p>
<p>On the othe hand, in the case of the validators, where all the work is done through<br />
<a href="http://lists.w3.org/" title="W3C Public Mailing List Archives">public mailing-lists</a><br />
and a <a href="http://dev.w3.org/cvsweb/" title="W3C Public CVS Repository">public code repository</a>, it has always been much easier to<br />
share everything with the community, and it felt natural that the funding of validator work through donations and sponsorships would follow<br />
that trend.
</p>
<div style="float: left;width: 120px;text-align: center"><a href="http://www.w3.org/QA/Tools/Donate"><img src="http://www.w3.org/QA/Tools/I_heart_validator_lg" width="101" height="46" alt="I heart Validator" /></a></div>
<p>With the donation program entering its 7th week, and more big things to come, it felt like a good time to start analysing some of the data and sharing them with you. These are all subject to caution, especially given my weak number-crunching abilities and the less-than-stellar chemistry between the paypal UI and me, but they should be interesting nevertheless.</p>
<h3>How much?</h3>
<p>If this was to be a FAQ, there would probably only be a single question: “how much did the program receive so far?” You people are obsessed with money or what? <img src='http://www.w3.org/blog/systeam/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As of today (Jan 26, 2009) our balance is approximately 1900 Euros (2500 US$), with a little above 100 donations received. Not all donations were identified as coming from a specific country, but of the 65% identified donations, a good half came from the USA, followed by Japan, France, and Germany. The Japanese donator were, on average, the most generous (around 35$/avg) while the biggest (250$) and smallest (a number of 1$ donations from people who probably took the “A dollar for every time validation saved your day?” quip too literally) contributions came from the USA. We only had to refund a couple of people, when the small amount would not be enough to cover the fees and taxes taken by Paypal on every transaction – but we thank you all for your help!</p>
<p>The few people with whom I&#8217;ve shared this figure so far have fairly consistently asked whether the amount received isn&#8217;t surprisingly small. Of course, I&#8217;d rather the count were in millions and that we could already achieve <a href="http://meyerweb.com/eric/thoughts/2006/09/25/w3c-change-full-independence/">full independence</a>, but given how we have so far only tapped a small core community of fans and blogger-friends, I think the result has been extremely positive, way beyond the raw numbers:</p>
<ul>
<li>
<p>What actually mattered in this first phase of the program was to raise awareness in the fact that although the validators are free to use, building and maintaining them was far from free for the W3C. We did not really know how the community would react, and the response has been fantastic. Almost everyone learning about the donation program was supportive, and many started spreading the word through blogs, forums, microblogging, etc.</p>
<p> The past weeks have also been a great opportunity to have constructive discussions about W3C, its finances and the validators. Questions and misunderstandings, such as <a href="http://www.w3.org/QA/2008/12/validator_donation_program.html" title="Validator Donation Program: day 2 - W3C Q&amp;A Weblog">whether the W3C is insanely rich</a> or why hosting/bandwidth is not the main cost of the validators (the main cost is human effort) could finally be addressed, and even if the program had not made a penny, for that alone it would have been worth the effort. We need more open dialogue like this around W3C.</p>
</li>
<li>
<p>An unexpected byproduct of the donation program was an incredible raise in goodwill aroun our open source products. With the global economy in a relatively sad state, a lot of the friends of the validators thought “I might not have much cash to spare, but <a href="http://www.w3.org/Status#contribute" title="W3C Open Source Software - How to contribute">maybe I could help</a>?”.</p>
<p>After years of saying, with limited success, that the validators belonged to the community and that their progress depended on the goodwill of all, we&#8217;ve seen a renewed activity around the projects, many people bringing a very positive attitude to discussions, development and bug reporting – in the paraphrased words of a famous orator: “Ask not why this validator is not to your liking, ask what you can do to make it better”.</p>
</li>
</ul>
<h3>What next?</h3>
<p>If things go well, the next few weeks will see us switch gears and push the donation and sponsorship program to another level. Our small team of staff and contributors has been working really hard to prepare new releases of the HTML Validator, CSS Validator and Link Checker, and all three new releases will feature the donation program, as well as our first sponsor(s), prominently:</p>
<ol>
<li><a href="http://qa-dev.w3.org/wmvs/HEAD/">development version of the Markup Validator</a></li>
<li><a href="http://qa-dev.w3.org/wlc/checklink">development version of the Link Checker</a></li>
<li><a href="http://qa-dev.w3.org:8001/css-validator/">development version of the CSS Validator</a></li>
</ol>
<p>These new releases will also make the value of sponsorship much more obvious, and our small team will keep pushing hard to close a deal on the first batch of sponsors: if you think your company should really be in there,  <a href="mailto:&#x76;&#x61;&#x6C;&#x69;&#x64;&#x61;&#x74;&#x6F;&#x72;&#x2D;&#x63;&#x61;&#x6D;&#x70;&#x61;&#x69;&#x67;&#x6E;&#x40;w3.org">Contact Us</a>!. We&#8217;re cooking up cool ideas of validator subscriptions too, and goodies!</p>
<p>This is only the beginning. The past few weeks have shown that a lot of people care about the validators and are ready to help to keep them alive, to keep them growing, to keep them free. We need to keep that good energy going: please keep spreading the word, donate if you haven&#8217;t, talk around you about the sponsorship opportunity, and most important, <strong>get involved</strong> in those projects.</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/open-source-software/" title="View all posts in Open Source Software" rel="category tag">Open Source Software</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2009/01/26/validator_donation_early_numbers/#comments" title="Comment on Validator donation program: the first numbers are in!">2 Comments</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-161" class="post-161 post type-post hentry category-homegrown-tools">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2009/01/20/cumulative_voting_with_jquery/" title="Permalink to Cumulative Voting with JQuery" rel="bookmark">Cumulative Voting with JQuery</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2009/01/20/cumulative_voting_with_jquery/" title="5:07 am" rel="bookmark"><span class="entry-date">January 20, 2009</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/dom/" title="View all posts by Dominique Hazaël-Massieux">Dominique Hazaël-Massieux</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>W3C has its own system designed to create, answer and gather results from votes, strawpolls, registrations, etc., known as WBS; I have been developing and maintaing this system over the past six years &#8211; I&#8217;m hoping to find sometimes the time and energy to make that tool open-source, but given that this requires abstracting many of its W3C-isms, I&#8217;m not holding my breath.  WBS knows a variety of types of questions that can be included in the questionnaires it creates: open comments, radio-selectable list of choices, checkboxes-selectable list of choices, timetable selector, etc. It is also (more or less weel) designed so that new types of questions can be reasonably easily added.  As part of an upcoming survey for W3C Members, it was requested that WBS handles a new type of questions, to support <a href="http://en.wikipedia.org/wiki/Cumulative_voting">cumulative voting</a>.</p>
<p style="float: left;"><img src="/2009/01/wbs-cumulative-1.png" alt="Screenshot of Cumulative Vote in WBS, without Javascript" width="200" height="160" /></p>
<p>Adding the server-side part of that new control was relatively straightforward, thanks to WBS architecture; but given the nature of cumulative voting, it seemed more or less required to complete it with a client-side layer (read &#8220;Javascript&#8221;) to ensure a minimum level of usability.  Although I started writing Javascript almost as soon as I started writing Web pages some twelve years ago, I had grown <a href="http://people.w3.org/~dom/archives/2009/01/jquery-yummy/">wary of doing it</a>; I restarted coding with it lightly over the past two years, but had found it quite cumbersome to write, in particular when wanting to do it properly, that is to say with graceful degradation, events binding, proper DOM operations, etc.  So I figured that if everyone is raving about these new Javascript frameworks, there may be some reason to it and that I would better pay attention &#8211; and thus started using <a href="http://jquery.com/">JQuery</a>, mostly because it happened to be already set up on the W3C site and that I hadn&#8217;t heard or read bad things about it.</p>
<p style="float: left; clear: left;"><img src="/2009/01/wbs-cumulative-2.png" alt="Screenshot of Cumulative Vote in WBS, with Javascript layer" width="200" height="191" /></p>
<p>Sure enough, one hour and a few tutorial pages later, I had written the <a href="/2002/09/wbs/cumulative.js">30 lines of code</a> that were needed to support what I had in mind to ease the interactions with the cumulative voting. Quite impressive! <q>Write less, do more</q> seems to be right on target. The usage of CSS selectors to pick the elements on which you want to act is a bliss.  I did have to tweak the code a bit to improve its performance &#8211; my initial code didn&#8217;t scale well when the number of options on which to vote went up; I fixed it up by relying on <a href="http://lab.distilldesign.com/event-delegation/">event delegation</a>, essentially reducing the number of events binding by attaching the <code>onChange</code> event to the container of the <code>select</code> elements rather than to each of them.  For sake of illustration, let&#8217;s compare the code to the one I would have needed to write without using JQuery (and not mentioning cross-browsers compatibility issues) for the first couple of lines:</p>
<ul>
<li>Without:
<pre class="brush: jscript; title: ; notranslate" title="">window.addEventListener('load', function() {</pre>
</li>
<li>With:
<pre class="brush: jscript; title: ; notranslate" title="">$(document).ready(function() {</pre>
</li>
</ul>
<ul>
<li>Without:
<pre class="brush: jscript; title: ; notranslate" title="">// Adding a line to the list with the total displayed
divs = document.getElementsByTagName(&quot;div&quot;);
for(i=0;i&lt;divs.length;i++) {
  div = divs[i];
  if (div.class=='cumulative') {
    cumulativeSelectors = div.getElementsByTagName(&quot;ul&quot;);
    for (j=0;j&lt;cumulativeSelectors.length;j++) {
      ul = cumulativeSelectors[j];
      if (ul.class==&quot;compare&quot;) {
        li = document.createElement(&quot;li&quot;);
        totalSpan = document.createElement(&quot;span&quot;);
        totalInput = document.createElement(&quot;input&quot;);
        remainingSpan = document.createElement(&quot;span&quot;);
        remainingInput = document.createElement(&quot;input&quot;);
        totalSpan.appendChild(document.createTextNode('Total'));
        remainingSpan.appendChild(document.createTextNode('Remaining'));
        totalSpan.class=remainingSpan.class='label';
        totalInput.disabled = remainingInput.disabled = true;
        li.appendChild(totalSpan);
        li.appendChild(document.createTextNode(':'));
        li.appendChild(totalInput);
        li.appendChild(remainingSpan);
        li.appendChild(remainingInput);
      }
    }
  }
}</pre>
</li>
<li>With:
<pre class="brush: jscript; light: false; title: ; notranslate" title="">// Adding a line to the list with the total displayed
 $(&quot;div.cumulative ul.compare&quot;).append(&quot;&lt;li&gt;&lt;span class='label'&gt;Total&lt;/span&gt;:
 &lt;input disabled='disabled' /&gt; &lt;span class='label'&gt;
Remaining&lt;/span&gt; &lt;input disabled='disabled' /&gt;&lt;/li&gt;&quot;);</pre>
</li>
</ul>
<p>And that&#8217;s taking the less complex part of the code…  I think I&#8217;m going to like coding in Javascript again! I would be curious to read the XForms equivalent of this widget &#8211; any taker?  Possible improvements to my cumulative voting widget include:</p>
<ul>
<li>Packaging it as a <a href="http://ui.jquery.com/">JQuery widget</a> &#8211; this could possibly be useful to others?</li>
<li>Using sliders to give a better visual feedback</li>
<li>Annotating the controls with <a href="http://www.w3.org/WAI/intro/aria">WAI ARIA</a> for improved accessibility and usability</li>
</ul>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/homegrown-tools/" title="View all posts in Homegrown tools" rel="category tag">Homegrown tools</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2009/01/20/cumulative_voting_with_jquery/#comments" title="Comment on Cumulative Voting with JQuery">1 Comment</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	


			<article id="post-162" class="post-162 post type-post hentry category-system-policies">
			<header><h2 class="entry-title"><a href="http://www.w3.org/blog/systeam/2008/09/11/email_address_obfuscation/" title="Permalink to Email address obfuscation in mailing list archives" rel="bookmark">Email address obfuscation in mailing list archives</a></h2></header>

			<div class="entry-meta">
				<span class="meta-prep meta-prep-author">Posted on</span> <a href="http://www.w3.org/blog/systeam/2008/09/11/email_address_obfuscation/" title="2:28 am" rel="bookmark"><span class="entry-date">September 11, 2008</span></a> <span class="meta-sep">by</span> <span class="author vcard"><a class="url fn n" href="http://www.w3.org/blog/systeam/author/gerald/" title="View all posts by Gerald Oskoboiny">Gerald Oskoboiny</a></span>			</div><!-- .entry-meta -->

				<div class="entry-content">
				<p>One of W3C&#8217;s most important system services are our mailing lists and corresponding <a href="http://lists.w3.org/">online archives</a>. Thousands of people participate in these lists, and the archives now contain millions of messages dating back to 1991.</p>
<p>These archives are an essential resource for groups collaborating on standards work, to build shared context and record the history behind various decisions.</p>
<p>Many of our discussion lists are public, with public archives; unfortunately one of the side effects of making these archives public is that the email addresses contained therein can be harvested by spammers looking for new victims.</p>
<p>Occasionally we receive requests to obfuscate or remove email addresses from our archives in an attempt to prevent or delay spammers from harvesting these addresses. We have implemented simple measures to foil the simplest harvesters (replacing each character of the domain name with its corresponding HTML entity) but have been reluctant to remove the email addresses completely because they are an essential part of the record.</p>
<p>Some email address obfuscation methods are more effective than others in preventing spam; usually there is a tradeoff between effectiveness and usability/accessibility for human readers. Most of the obfuscation techniques that preserve the full email address in some form are straightforward to decode and therefore ineffective in the long run as address harvesters are updated to compensate for new obfuscation techniques.</p>
<p>Even if we completely removed the email addresses from our archives, posters would still be subject to spam, since spammers can simply subscribe to our public lists and harvest email addresses as they are distributed in the original email messages. (This fact is noted in <a href="http://groups.google.com/support/bin/answer.py?hl=en&amp;answer=46456">Google Groups&#8217; documentation on its email address masking</a>.)</p>
<p>One option would be to remove email addresses or mask them like Google does (e.g. display <code>gerald@w3.org</code> as <code>ger...@w3.org</code>), and make the original messages available only to authenticated users, for example people who have a W3C Member or Invited Expert account. This would help reduce the amount of spam received by participants in the short term, while making the data available to people we know and trust.</p>
<p>Personally, I feel that doing so is a bad idea. Email addresses are not secrets, and pretending they are is misleading and a waste of effort. If you maintain a web site or blog and participate in online communities like W3C&#8217;s, keeping your email address a secret for an extended period of time will be very difficult, and once it&#8217;s out, it&#8217;s out, as spammers sell or swap lists of millions of addresses with each other.</p>
<p>If you care about your online reputation and want to stand behind what you say, you should <em>want</em> your identity to be associated with the things you write. If not, you can create a disposable email address at one of the thousands of free email hosting sites, and use that when participating in public forums.  (also noted in <a href="http://groups.google.com/support/bin/answer.py?hl=en&amp;answer=46456">Google&#8217;s docs</a>.)</p>
<p>Removing email addresses from our archives has negative consequences besides the human aesthetic and usability aspects: an email address is the best machine-readable way to identify the author of an email message, so omitting it from an archived message causes one of the most important parts of semantic data about the message to be lost.</p>
<p>Meanwhile, spam will continue to come in as addresses are leaked by other means &mdash; the solution to that isn&#8217;t to try to hide from spammers, but to develop better spam-blocking tools, including smart agents that use existing data (such as the history of previous correspondence from your mailboxes and public archives like W3C&#8217;s, and data on various relationships in social networking sites) to generate a list of trusted correspondents.</p>
<p>W3C&#8217;s mailing lists are generally spam-free even though we invite anyone with an email address to provide feedback (subject to the posting policy of the given mailing list) &mdash; this openness is an important part of W3C&#8217;s process, so we invested in the tools needed to make it happen. If others have spam problems they should do likewise!</p>
<p>Giving up on email is not the answer. In the words of <a href="http://www.toad.com/grokmail/antispam.html">John Gilmore</a>,</p>
<blockquote cite="http://www.toad.com/grokmail/antispam.html"><p>We have built a communication system that lets anyone in the world send information to anyone else in the world, arriving in seconds, at any time, at an extremely low and falling cost.  THIS WAS NOT A MISTAKE!  IT WAS NOT AN ACCIDENT!  The world collectively has spent trillions of dollars and millions of person-years, over hundreds of years, to build this system &#8212; because it makes society vastly better off than when communication was slow, expensive, regional, and unreliable.</p>
</blockquote>
<p>What do you think? Is it worth preserving the machine-readability of details like this in our mailing list archives, or should we remove them in the interest of hiding from spammers? (even though that won&#8217;t work in the long run.)</p>
<p>Should we build systems that generate and consume rich semantic data about our world, or hide these details because a few parasites might use the data the wrong way?</p>
							</div><!-- .entry-content -->
	
			<footer class="entry-utility">
									<span class="cat-links">
						<span class="entry-utility-prep entry-utility-prep-cat-links">Posted in</span> <a href="http://www.w3.org/blog/systeam/category/system-policies/" title="View all posts in System policies" rel="category tag">System policies</a>					</span>
					<span class="meta-sep">|</span>
												<span class="comments-link"><a href="http://www.w3.org/blog/systeam/2008/09/11/email_address_obfuscation/#comments" title="Comment on Email address obfuscation in mailing list archives">7 Comments</a></span>
							</footer><!-- .entry-utility -->
		</article><!-- #post-## -->

		
	

				<nav id="nav-below" class="navigation">
					<div class="nav-previous"><a href="http://www.w3.org/blog/systeam/page/2/" ><span class="meta-nav">&larr;</span> Older posts</a></div>
					<div class="nav-next"></div>
				</nav><!-- #nav-below -->
			</div><!-- #content -->
		</section><!-- #container -->


		<div id="primary" class="widget-area" role="complementary">
			

<aside id="search-2" class="widget-container widget_search"><form role="search" method="get" id="searchform" action="http://www.w3.org/blog/systeam/" >
	<div><label class="screen-reader-text" for="s">Search for:</label>
	<input type="text" value="" name="s" id="s" />
	<input type="submit" id="searchsubmit" value="Search" />
	</div>
	</form></aside><aside id="text-3" class="widget-container widget_text"><header><h3 class="widget-title">Role</h3></header>			<div class="textwidget">W3C maintains an internationally distributed network of servers and services that support Public, Member, and Team audiences in pursuit of the Consortium's <a href="http://www.w3.org/Consortium/technology">technical</a> and <a href="http://www.w3.org/Consortium/future">social</a> objectives.</div>
		</aside><aside id="text-4" class="widget-container widget_text"><header><h3 class="widget-title">Design</h3></header>			<div class="textwidget">W3C's systems infrastructure is based almost completely on
  <a href="http://en.wikipedia.org/wiki/Open_source">open source software</a>
  running on <a href="http://www.debian.org/">Debian GNU/Linux</a> servers.</div>
		</aside><aside id="text-5" class="widget-container widget_text"><header><h3 class="widget-title">Status</h3></header>			<div class="textwidget">We try our best to document <a href="http://www.w3.org/2003/08/system-status">known outages and disruptions to our services</a> on the Web; should you encounter a problem with one of our services not documented on that page, please let us know at &lt;<a href="mailto:web-human@w3.org">web-human@w3.org</a>&gt;.</div>
		</aside>		<aside id="recent-posts-2" class="widget-container widget_recent_entries">		<header><h3 class="widget-title">Recent Posts</h3></header>		<ul>
				<li><a href="http://www.w3.org/blog/systeam/2011/10/27/list-id-for-filtering-mail/" title="List-Id: for filtering mail from W3C lists">List-Id: for filtering mail from W3C lists</a></li>
				<li><a href="http://www.w3.org/blog/systeam/2010/06/16/why_we_chose_mercurial_as_our_dvcs/" title="Why we chose Mercurial as our Decentralized Versioning System">Why we chose Mercurial as our Decentralized Versioning System</a></li>
				<li><a href="http://www.w3.org/blog/systeam/2010/03/01/validator_0_8_6_release/" title="Validator 0.8.6 release wraps up a year&#8217;s worth of bug fixes and code clean-up">Validator 0.8.6 release wraps up a year&#8217;s worth of bug fixes and code clean-up</a></li>
				<li><a href="http://www.w3.org/blog/systeam/2009/12/09/decentralized_versioning_system_at_w3c/" title="Decentralized versioning system at W3C">Decentralized versioning system at W3C</a></li>
				<li><a href="http://www.w3.org/blog/systeam/2009/05/19/tracking_requests/" title="Tracking requests">Tracking requests</a></li>
				</ul>
		</aside><aside id="recent-comments-2" class="widget-container widget_recent_comments"><header><h3 class="widget-title">Recent Comments</h3></header><ul id="recentcomments"><li class="recentcomments"><a href='http://www.uwe.ac.uk' rel='external nofollow' class='url'>Martin Sharratt</a> on <a href="http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic/#comment-4467">W3C&#8217;s Excessive DTD Traffic</a></li><li class="recentcomments"><a href='http://www.deluxegames.com' rel='external nofollow' class='url'>Allie Ward</a> on <a href="http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic/#comment-3934">W3C&#8217;s Excessive DTD Traffic</a></li><li class="recentcomments"><a href='http://www.uwe.ac.uk' rel='external nofollow' class='url'>Martin Sharratt</a> on <a href="http://www.w3.org/blog/systeam/2008/02/08/w3c_s_excessive_dtd_traffic/#comment-3933">W3C&#8217;s Excessive DTD Traffic</a></li><li class="recentcomments">Rijk on <a href="http://www.w3.org/blog/systeam/2011/10/27/list-id-for-filtering-mail/#comment-3020">List-Id: for filtering mail from W3C lists</a></li><li class="recentcomments">JJ on <a href="http://www.w3.org/blog/systeam/2008/09/11/email_address_obfuscation/#comment-2898">Email address obfuscation in mailing list archives</a></li></ul></aside><aside id="archives-2" class="widget-container widget_archive"><header><h3 class="widget-title">Archives</h3></header>		<ul>
			<li><a href='http://www.w3.org/blog/systeam/2011/10/' title='October 2011'>October 2011</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2010/06/' title='June 2010'>June 2010</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2010/03/' title='March 2010'>March 2010</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2009/12/' title='December 2009'>December 2009</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2009/05/' title='May 2009'>May 2009</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2009/02/' title='February 2009'>February 2009</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2009/01/' title='January 2009'>January 2009</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2008/09/' title='September 2008'>September 2008</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2008/02/' title='February 2008'>February 2008</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2008/01/' title='January 2008'>January 2008</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2007/11/' title='November 2007'>November 2007</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2007/10/' title='October 2007'>October 2007</a></li>
	<li><a href='http://www.w3.org/blog/systeam/2007/09/' title='September 2007'>September 2007</a></li>
		</ul>
</aside><aside id="meta-2" class="widget-container widget_meta"><header><h3 class="widget-title">Meta</h3></header>			<ul>
						<li><a href="https://www.w3.org/blog/systeam/wp-login.php">Log in</a></li>
			<li><a href="http://www.w3.org/blog/systeam/feed/" title="Syndicate this site using RSS 2.0">Entries <abbr title="Really Simple Syndication">RSS</abbr></a></li>
			<li><a href="http://www.w3.org/blog/systeam/comments/feed/" title="The latest comments to all posts in RSS">Comments <abbr title="Really Simple Syndication">RSS</abbr></a></li>
			<li><a href="http://wordpress.org/" title="Powered by WordPress, state-of-the-art semantic personal publishing platform.">WordPress.org</a></li>
						</ul>
</aside>			
		</div><!-- #primary .widget-area -->

	</div><!-- #main -->

	<footer id="footer" role="contentinfo">
		<div id="colophon">



			<div id="site-info">
				<a href="http://www.w3.org/blog/systeam/" title="W3C Systems Team’s Blog" rel="home">
					W3C Systems Team’s Blog				</a>
			</div><!-- #site-info -->

			<div id="site-generator">
								<a href="http://wordpress.org/"
						title="Semantic Personal Publishing Platform" rel="generator">
					Proudly powered by WordPress.				</a>
			</div><!-- #site-generator -->

		</div><!-- #colophon -->
		<a href="http://www.w3.org/html/logo/" class="footer-html5"><img src="http://www.w3.org/blog/systeam/wp-content/themes/w3c_blog/images/html5-footer.png" alt="HTML5 Logo" /></a>
	</footer><!-- #footer -->

</div><!-- #wrapper -->


<script type='text/javascript' src='http://www.w3.org/blog/systeam/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shCore.js?ver=3.0.83c'></script>
<script type='text/javascript' src='http://www.w3.org/blog/systeam/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts/shBrushJScript.js?ver=3.0.83c'></script>
<script type='text/javascript'>
	(function(){
		var corecss = document.createElement('link');
		var themecss = document.createElement('link');
		var corecssurl = "http://www.w3.org/blog/systeam/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css?ver=3.0.83c";
		if ( corecss.setAttribute ) {
				corecss.setAttribute( "rel", "stylesheet" );
				corecss.setAttribute( "type", "text/css" );
				corecss.setAttribute( "href", corecssurl );
		} else {
				corecss.rel = "stylesheet";
				corecss.href = corecssurl;
		}
		document.getElementsByTagName("head")[0].insertBefore( corecss, document.getElementById("syntaxhighlighteranchor") );
		var themecssurl = "http://www.w3.org/blog/systeam/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shThemeDefault.css?ver=3.0.83c";
		if ( themecss.setAttribute ) {
				themecss.setAttribute( "rel", "stylesheet" );
				themecss.setAttribute( "type", "text/css" );
				themecss.setAttribute( "href", themecssurl );
		} else {
				themecss.rel = "stylesheet";
				themecss.href = themecssurl;
		}
		//document.getElementById("syntaxhighlighteranchor").appendChild(themecss);
		document.getElementsByTagName("head")[0].insertBefore( themecss, document.getElementById("syntaxhighlighteranchor") );
	})();
	SyntaxHighlighter.config.strings.expandSource = '+ expand source';
	SyntaxHighlighter.config.strings.help = '?';
	SyntaxHighlighter.config.strings.alert = 'SyntaxHighlighter\n\n';
	SyntaxHighlighter.config.strings.noBrush = 'Can\'t find brush for: ';
	SyntaxHighlighter.config.strings.brushNotHtmlScript = 'Brush wasn\'t configured for html-script option: ';
	SyntaxHighlighter.defaults['pad-line-numbers'] = false;
	SyntaxHighlighter.defaults['toolbar'] = false;
	SyntaxHighlighter.all();
</script>
</body>
</html>