<!-- html-header type=current begin -->
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Render IE9 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<script id="before-content" type="text/javascript">
(function () {
if (typeof window.sdmedia !== 'object') {
window.sdmedia = {};
}
if (typeof window.sdmedia.site !== 'object') {
window.sdmedia.site = {};
}
var site = window.sdmedia.site;
site.rootdir = "//slashdot.org";
}());
var pageload = {
pagemark: '797103187203226761',
before_content: (new Date).getTime()
};
function pageload_done( $, console, maybe ){
pageload.after_readycode = (new Date).getTime();
pageload.content_ready_time = pageload.content_ready - pageload.before_content;
pageload.script_ready_time = pageload.after_readycode - pageload.content_ready;
pageload.ready_time = pageload.after_readycode - pageload.before_content;
// Only report 1% of cases.
maybe || (Math.random()>0.01) || $.ajax({ type: 'POST', data: {
op: 'page_profile',
pagemark: pageload.pagemark,
dom: pageload.content_ready_time,
js: pageload.script_ready_time
} });
}
</script>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="fb:admins" content="100000696822412">
<meta property="fb:page_id" content="267995220856">
<meta name="robots" content="noindex">
<meta name="viewport" content="width=1000, user-scalable=yes, minimum-scale=0, maximum-scale=10.0" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<link rel="stylesheet" type="text/css" media="screen, projection" href="//a.fsdn.com/sd/classic.ssl.css?fc755fff6459136e" >
<!--[if IE 8]><link rel="stylesheet" type="text/css" media="screen, projection" href="//a.fsdn.com/sd/ie8-classic.ssl.css?fc755fff6459136e" ><![endif]-->
<link rel="stylesheet" type="text/css" media="screen, projection" href="//a.fsdn.com/sd/u2.ssl.css?fc755fff6459136e" >
<!--[if IE 7]><link rel="stylesheet" type="text/css" media="screen, projection" href="//a.fsdn.com/sd/ie7-classic.ssl.css?fc755fff6459136e" ><![endif]-->
<!-- -->
<!-- SMACKS: NEW CSS -->
<link rel="stylesheet" href="//a.fsdn.com/sd/css/app.css?fc755fff6459136e">
<script src="//a.fsdn.com/con/js/sftheme/cmp-slashdot.js?2026-08-07"></script>
<script>// country.js converted to inline by CF Snippet
window.is_euro_union = 0;
window.country_code2 = "US";
window.region = "CA";
window.prebidOptions = {uids: {ip: "68.99.187.44" }};</script>
<script>
window.bizx.cmp.init({
cmp_id: 12126,
geo: window,
gam_gdpr_technical_delivery: true,
});
bizx.uids.gather();
window.prebidOptions = window.prebidOptions || {};
window.prebidOptions.uids = window.prebidOptions.uids || {};
window.prebidOptions.uids.hem = bizx.uids.getHem();
</script>
<link rel="stylesheet" href="//a.fsdn.com/con/css/sftheme/sandiego/cmp.css?2026-08-07" type="text/css">
<script type='text/javascript'>
var _gaq = _gaq || [];
</script>
<script>
window.SD = {};
window.SD.Ads = {};
var googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
</script>
<!-- AdBlock Check -->
<script>
var sdAdBlockActive = true; var sdUboActive = true;
</script>
<script src="//a.fsdn.com/sd/js/scripts/admanager.js?fc755fff6459136e"></script>
<script src="//a.fsdn.com/sd/js/scripts/asg_embed.js?fc755fff6459136e"></script>
</head>
<body class="anon users2 u2">
<script src="//a.fsdn.com/sd/all-minified.js?fc755fff6459136e" type="text/javascript"></script>
<script type="text/javascript">
(function(){
var regexp=/\s*(?:\d+|many)\s+more\s*/i;
var auto_more_count = 1;
function auto_more(){
var $more_link = $('#more-experiment a');
$more_link.each(function(){
var $lastitem = $('#firehoselist>article.fhitem:visible:last');
if ( Bounds.intersect(window, $lastitem) ) {
!--auto_more_count && (auto_more=undefined);
// don't allow a call till the next paginate gets built and |more_possible|
$(document).unbind('scroll', call_auto_more);
}
});
};
function call_auto_more(){ auto_more && auto_more(); }
$('#more-experiment a').
live('more-possible', function( event ){
var $more_link=$(this);
if ( regexp.test($more_link.text()) ) {
$(document).bind('scroll', call_auto_more);
} else {
$(document).unbind('scroll', call_auto_more);
}
});
})();
</script>
<!--[if lt IE 9]><script src="//a.fsdn.com/sd/html5.js"></script><![endif]-->
<!-- index2_variant ||-->
<!-- html-header type=current end --><!-- header type=current begin -->
<link rel="top" title="News for nerds, stuff that matters" href="//slashdot.org/" >
<link rel="search" title="Search Slashdot" href="//slashdot.org/search.pl">
<link rel="alternate" title="Slashdot RSS" href="https://rss.slashdot.org/Slashdot/slashdotMain" type="application/rss+xml">
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<div id="top_parent"></div>
<a name="topothepage"></a>
<div class="container">
<div class="nav-wrap">
<nav class="nav-primary" role="navigation" aria-label="Global Navigation">
<h2 class="logo">
<a href="//slashdot.org"><span>Slashdot</span></a>
</h2>
<ul class="nav-site">
<li><a href="//slashdot.org"><i class="icon-book" title="Stories"></i><span>Stories</span></a></li>
<li>
<ul class="filter-firehose">
<li class="nav-label">Firehose <i class="icon-angle-right"></i></li>
<li><a href="//slashdot.org/recent">All</a></li>
<li><a href="//slashdot.org/popular">Popular</a></li>
</ul>
</li>
<li><a href="//slashdot.org/polls"><i class="icon-chart-bar" title="Polls"></i><span>Polls</span></a></li>
<!--
<li><a href="//ask.slashdot.org"><i class="icon-question-circle"></i><span>Ask</span></a></li>
<li><a href="//events.slashdot.org"><i class="icon-calendar"></i><span>Events</span></a></li>
-->
<li><a href="https://slashdot.org/software/"><i class="sd-mini"></i> <span>Software</span></a></li>
<li><a href="//slashdot.org/content/"><span>Thought Leadership</span></a></li>
</ul>
<a href="//slashdot.org/submission" class="btn btn-success">Submit</a>
</nav>
<nav class="nav-user" role="navigation" aria-label="user access and account controls">
<div id="main-top-nav-wrapper">
<form id="search" class="form-inline nav-search-form" method="get" action="//slashdot.org/index2.pl">
<!-- //slashdot.org/index2.pl" -->
<div class="form-group">
<label class="sr-only" for="sitesearch">Search Slashdot</label>
<div class="input-group">
<input type="text" id="" class="" name="fhfilter" value="" placeholder="Search">
</div>
</div>
<button type="submit" class="btn icon-search"></button>
</form>
<ul class="user-access">
<li >
<a href="//slashdot.org/my/login" onclick="show_login_box(); return false;"><i class="icon-login"></i><span> Login</span></a>
</li>
<li class="nav-label">or</li>
<li >
<a href="//slashdot.org/my/newuser" ><i class="icon-user-add"></i><span> Sign up</span></a>
</li>
</ul>
</nav>
</div>
<div class="nav-secondary-wrap">
<nav class="nav-secondary" role="secondary-navigation">
<ul>
<li class="nav-label">Topics: </li>
<li><a href="//devices.slashdot.org">Devices</a></li>
<li><a href="//build.slashdot.org">Build</a></li>
<li><a href="//entertainment.slashdot.org">Entertainment</a></li>
<li><a href="//technology.slashdot.org">Technology</a></li>
<li><a href="//slashdot.org/?fhfilter=opensource">Open Source</a></li>
<li><a href="//science.slashdot.org">Science</a></li>
<li><a href="//yro.slashdot.org">YRO</a></li>
<!-- <li><a href="//slashdot.org/topics.pl">more...</a></li> -->
</ul>
</nav>
<nav class="nav-social" role="social navigation">
<ul>
<li class="nav-label">Follow us:</li>
<li><a href="https://rss.slashdot.org/Slashdot/slashdotMain" target="_blank" rel="nofollow"><i class="icon-rss-squared"></i><span class="sr-only">RSS</span></a></li>
<li><a href="https://www.facebook.com/slashdot" target="_blank" rel="nofollow"><i class="icon-facebook-squared"></i><span class="sr-only">Facebook</span></a></li>
<li><a href="https://www.linkedin.com/company/slashdot" target="_blank" rel="nofollow"><i class="icon-linkedin-squared"></i><span class="sr-only">LinkedIn</span></a></li>
<li><a href="https://x.com/slashdot" target="_blank" rel="nofollow"><i><svg style="height:20px;width:20px;margin: 3px 4px 0 4px;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve"><g><path fill="#000000" d="M486,392.599C486,443.97,443.97,486,392.599,486H119.401C68.03,486,26,443.97,26,392.599V119.401 C26,68.031,68.03,26,119.401,26h273.198C443.97,26,486,68.031,486,119.401V392.599z"/><path fill="#F0F0F1" d="M290.425,233.064l110.65-137.91h-32.05l-94.62,117.94l-94.63-117.94H74.125l147.45,183.78l-110.66,137.92 h32.05l94.63-117.95l94.64,117.95h105.65L290.425,233.064z M126.225,120.153h41.55l218,271.7h-41.55L126.225,120.153z"/></g></svg></i><span class="sr-only">Twitter</span></a></li>
<li><a href="https://www.youtube.com/channel/UCsW36751Gy-EAbHQwe9WBNw" target="_blank" rel="nofollow"><i class="icon-youtube-squared">
<!-- width="1792" height="1792" -->
<svg viewBox="0 260 1792 1260" xmlns="http://www.w3.org/2000/svg"><path d="M711 1128l484-250-484-253v503zm185-862q168 0 324.5 4.5t229.5 9.5l73 4q1 0 17 1.5t23 3 23.5 4.5 28.5 8 28 13 31 19.5 29 26.5q6 6 15.5 18.5t29 58.5 26.5 101q8 64 12.5 136.5t5.5 113.5v176q1 145-18 290-7 55-25 99.5t-32 61.5l-14 17q-14 15-29 26.5t-31 19-28 12.5-28.5 8-24 4.5-23 3-16.5 1.5q-251 19-627 19-207-2-359.5-6.5t-200.5-7.5l-49-4-36-4q-36-5-54.5-10t-51-21-56.5-41q-6-6-15.5-18.5t-29-58.5-26.5-101q-8-64-12.5-136.5t-5.5-113.5v-176q-1-145 18-290 7-55 25-99.5t32-61.5l14-17q14-15 29-26.5t31-19.5 28-13 28.5-8 23.5-4.5 23-3 17-1.5q251-18 627-18z"/></svg>
</i><span class="sr-only">Youtube</span></a></li>
<li><a href="https://mastodon.cloud/@slashdot" target="_blank" rel="me nofollow"><i class="icon-mastodon-squared">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg>
</i><span class="sr-only">Mastodon</span></a></li>
<li><a href="https://bsky.app/profile/slashdot.org" target="_blank" rel="nofollow"><i><svg xmlns="http://www.w3.org/2000/svg" role="img" viewBox="0 0 24 24" id="Bluesky--Streamline-Simple-Icons.svg" height="20" width="20" style="margin: 3px 4px 0 4px;"><title>Bluesky</title><path d="M12 10.8c-1.087 -2.114 -4.046 -6.053 -6.798 -7.995C2.566 0.944 1.561 1.266 0.902 1.565 0.139 1.908 0 3.08 0 3.768c0 0.69 0.378 5.65 0.624 6.479 0.815 2.736 3.713 3.66 6.383 3.364 0.136 -0.02 0.275 -0.039 0.415 -0.056 -0.138 0.022 -0.276 0.04 -0.415 0.056 -3.912 0.58 -7.387 2.005 -2.83 7.078 5.013 5.19 6.87 -1.113 7.823 -4.308 0.953 3.195 2.05 9.271 7.733 4.308 4.267 -4.308 1.172 -6.498 -2.74 -7.078a8.741 8.741 0 0 1 -0.415 -0.056c0.14 0.017 0.279 0.036 0.415 0.056 2.67 0.297 5.568 -0.628 6.383 -3.364 0.246 -0.828 0.624 -5.79 0.624 -6.478 0 -0.69 -0.139 -1.861 -0.902 -2.206 -0.659 -0.298 -1.664 -0.62 -4.3 1.24C16.046 4.748 13.087 8.687 12 10.8Z" fill="rgb(17, 133, 254)" stroke-width="1"/></svg></i><span class="sr-only">Bluesky</span></a></li>
</ul>
</nav>
</div>
</div>
<section>
<!--
<div class="message-bar" id="firehose-message-tray">
<span class="icon-quote-left"></span>
<p>
Become a fan of Slashdot on <a href="http://www.facebook.com/pages/Slashdotorg/267995220856">Facebook</a>
</p>
</div>
-->
<div id='embbeded_login_modal' class="hide">
<form action="https://slashdot.org/my/login" method="post" onsubmit="if (global_returnto) { this.returnto.value = global_returnto }" class="embedded"><fieldset style="-webkit-border-radius:10px 10px 0 0;border-radius:10px 10px 0 0;-moz-border-radius:10px 10px 0 0">
<div style='height:25px;'> </div>
<input type="hidden" name="returnto" value="">
<input type="hidden" name="op" value="userlogin">
<p>
<label class="fleft" for="unickname">Nickname:</label>
<input type="text" name="unickname" value="">
</p>
<p>
<label class="fleft" for="upasswd">Password:</label>
<input type="password" name="upasswd">
</p>
<label class="checkbox"><input type="checkbox" name="login_temp" value="yes"> Public Terminal</label>
<br>
<hr>
<input type="submit" name="userlogin" value="Log In" class="fno"> <a href="//slashdot.org/my/mailpassword" class="btn link" onclick="getModalPrefs('sendPasswdModal', 'Retrieve Password', 1); return false;">Forgot your password?</a>
</fieldset></form>
<div class="actions">
<a class="ico close" onclick="hide_login_slider();" href=""><span>Close</span></a>
</div>
</div>
<div class="banner-wrapper"></div>
<div id="top-banner-placeholder"></div>
<a name="main-articles"></a>
<!-- header type=current end --><style type="text/css">
menu, menu * {
text-decoration:none;
}
menu[type=context] {
display:none;
position:absolute;
z-index:10000;
}
menu[type=context]:not(.brief) {
background-color:#dfdfdf;
margin:0;
padding:2px 0.5em;
border-style:solid;
border-width:1px;
border-color:#eeeeee #aaaaaa #aaaaaa #eeeeee;
-moz-border-radius-topright:.7em;
-webkit-border-top-right-radius: 0.7em 0.7em;
}
menu.full[type=context] > a.slash-hover:first-child {
-moz-border-radius-topright:.6em;
-webkit-border-top-right-radius: 0.6em 0.6em;
}
menu.brief[type=context] > a {
-moz-border-radius:.6em;
-webkit-border-radius: 0.6em;
color:#ffffff;
background-color:#000000;
}
/*
span.briefmenu a.tag:not(.datatype) {
padding-left:.5em;
}
*/
/* #tag-menu a, #feedback-menu a { */
menu.tag-menu-admin a {
display:list-item;
list-style:none;
text-align:left;
font-weight:bold;
color:black;
padding:0.1em 0.5em;
margin:-0.1em -0.5em;
cursor:pointer;
}
.tags .edit-bar { position:relative; }
article aside .share .addthis_toolbox { display:block; width:60px; float:left; }
article aside.view_mode .share { min-width:120px; padding-top:.5em; }
#firehose.list article header h2 {padding-left: 20px; !important}
.novote .vote { display:none; }
.vote > a, .votedup > a, .voteddown > a {
display:inline-block;
height:22px;
width:22px;
margin: 2px 10px 0 0;
color:rgb(255,255,255);
text-decoration:none;
line-height:22px;
text-align:center;
font-weight:bold;
font-size:14px;
border-width:1px;
border-style:solid;
border-color:rgba(0,0,0,0.5);
}
.vote > a, .votedup > a, .voteddown > a {color:rgb(0,0,0);}
article.fhitem-submission h2 .vote > a, article.fhitem-submission h2 .votedup > a, article.fhitem-submission h2 .voteddown > a { border-color:rgba(0,0,0,0.15); }
.vote .up, .vote .down, .votedup .up, .votedup .down, .voteddown .up, .voteddown .down { border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; /* text-shadow:0 0 2px #000000; }*/}
article:not(.fhitem-story) .vote .up,article:not(.fhitem-story) .vote .down,article:not(.fhitem-story) .votedup .up,article:not(.fhitem-story) .votedup .down,article:not(.fhitem-story) .voteddown .up,article:not(.fhitem-story) .voteddown .down { /*text-shadow:none !important; */}
.voteddown .down, .votedup .up { margin-right: 10px; text-indent:2px; line-height:24px; }
article:not(.fhitem-story) .votedup .up,article:not(.fhitem-story) .voteddown .down {background: rgb(174,174,174);background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(174,174,174)), to(rgb(193,193,193)));background-image: -moz-linear-gradient(100% 100% 90deg,rgb(193,193,193), rgb(174,174,174) 100%);color:rgb(0,0,0);}
article.fhitem-story .votedup .up,article.fhitem-story .voteddown .down {background: rgb(0,66,66);background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(0,53,53)), to(rgb(0,102,102)));background-image: -moz-linear-gradient(100% 100% 90deg,rgb(0,102,102), rgb(0,53,53) 100%);}
#tag-menu span.var-tag {
font-weight:normal;
color:#444444;
}
menu.reasons-menu a {
padding:0 .25em 0 .25em;
font-size:80%;
-moz-border-radius:.5em;
-webkit-border-radius:.5em;
cursor:pointer;
}
menu.reasons-menu a:hover {
background:rgb(153,153,153);
background:-moz-linear-gradient(100% 100% 90deg, rgb(102,102,102), rgb(153,153,153) 70%) repeat scroll 0 0 rgb(102,102,102);
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(153,153,153)), to(rgb(102,102,102)));
color:#fff;
text-decoration:none;
font-weignt:normal;
}
article.fhitem-story menu.reasons-menu a:hover {
background:#002323 !important;
background:-moz-linear-gradient(100% 100% 90deg, #002323, #005353 70%) repeat scroll 0 0 #002323 !important;
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#005353), to(#002323)) !important;
}
menu.reasons-menu {
display:none;
margin:0;
padding:0;
}
div.fhitem h3 menu.reasons-menu {
margin:0.25em 0 0;
}
div.fhitem h3 menu.reasons-menu a.tag {
font-size:.8em;
}
#tag-menu a.slash-hover,
#feedback-menu a.slash-hover,
.tag-display span.tag:hover,
.tag-display span.tag.trigger {
color:white;
background-color:rgb(0, 85, 85);
}
#tag-menu a.slash-hover span.var-tag {
color:#eee;
}
.tag-entry.default {
color:#ccc;
}
.brief .nix {
margin-top:-1.35em;
margin-left:0px;
margin-top:-1.15em;
text-decoration:none;
line-height:1.35em;
padding:0 2px;
-moz-border-radius:.6em 0 0 .6em;
-webkit-border-radius:.6em 0 0 .6em;
-o-border-radius:.6em 0 0 .6em;
border-radius:.6em 0 0 .6em;
color:#fff !important;
background:transparent !important;
}
.brief .nix:hover {
background:rgb(153,153,153) !important;
background:-moz-linear-gradient(100% 100% 90deg, rgb(102,102,102), rgb(153,153,153) 70%) repeat scroll 0 0 rgb(102,102,102) !important;
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(153,153,153)), to(rgb(102,102,102))) !important;
}
</style>
<menu id="nix-reasons" style="display:none">
<a class="tag">binspam</a><a class="tag">dupe</a><a class="tag">notthebest</a><a class="tag">offtopic</a><a class="tag">slownewsday</a><a class="tag">stale</a><a class="tag">stupid</a>
</menu>
<menu id="nod-reasons" style="display:none">
<a class="tag">fresh</a><a class="tag">funny</a><a class="tag">insightful</a><a class="tag">interesting</a><a class="tag">maybe</a>
</menu>
<menu id="comment-nix-reasons" style="display:none">
<a class="tag">offtopic</a><a class="tag">flamebait</a><a class="tag">troll</a><a class="tag">redundant</a><a class="tag">overrated</a>
</menu>
<menu id="comment-nod-reasons" style="display:none">
<a class="tag">insightful</a><a class="tag">interesting</a><a class="tag">informative</a><a class="tag">funny</a><a class="tag">underrated</a>
</menu>
<menu id="tag-nod-reasons" style="display:none">
<a class="tag">descriptive</a>
</menu>
<menu id="feedback-menu" class="tag-menu-admin" type="context">
<a class="tag">typo</a><a class="tag">dupe</a><a class="tag">error</a>
</menu>
<menu id="tag-menu" class="tag-menu-admin none" type="context">
<!-- <a data-op="!" class="nix">!<span class="var-tag hide"></span></a>-->
</menu>
<script type="text/javascript">
$(function(){
var $CURRENT_MENU, $TAG_MENU=$('#tag-menu'), NOTNOT=/^!!/, IE7=/^7\.0/, TAG_PREFIX=/^\/tag\//;
function get_tag_name( $tag ){
return ($tag.attr('href') || '').replace(TAG_PREFIX, '') || $tag.text().toLowerCase();
}
function trigger_menu( e, selector, $menu, menu_content ){
var $target=$(original_target(e, selector)), in_use=$target.is('.trigger');
if ( $CURRENT_MENU ) {
$CURRENT_MENU.menu('cancel', e);
$CURRENT_MENU = null;
}
if ( !in_use ) {
menu_content && $menu.stop(true, true).hide().html(menu_content);
($CURRENT_MENU=$menu).menu('context', e);
}
return !in_use;
}
function open_menu( trigger, $menu ){
var $trigger=$(trigger), $fhitem=$trigger.closest('.fhitem');
$fhitem.length && user_intent('interest', $fhitem[0]);
$menu.appendTo(document.body).css({ opacity:0 }).show();
var right = $fhitem.offset().left + $fhitem.width(),
global = $trigger.offset(),
local = $menu.offsetParent().offset();
// Ugly IE position hack required:
$.browser.msie && IE7.test($.browser.version) && (local.top = 0);
// pin the menu (horizontally) on-screen
global.left = Math.min(global.left, right-$menu.width());
$trigger.addClass('trigger');
$menu.css({
position: 'absolute',
top: global.top - local.top + $trigger.height(),
left: global.left - local.left,
opacity: 1
});
}
function close_menu( trigger, $menu ){
$menu.hide();
$(trigger).removeClass('trigger');
($CURRENT_MENU===$menu) && ($CURRENT_MENU=false);
}
/* T2 tag context-menu */
var $TAG_MENU=$('#tag-menu'), NOTNOT=/^!!/;
var user_is_admin = 0;
$('a[rel=tag]').live('mousedown',function(ea){
window.open(this.href);
return false;
})
$('.tag-bar .disagree').live('mousedown',function(ee){
var fhitem = $(original_target(ee)).closest('.fhitem')[0],
command = ('!' + $(original_target(ee)).attr("data-tag")).replace(NOTNOT, '');
try { Tags.submit(fhitem, command); } catch ( err ) { }
return false;
})
$('a[rel=tag]').
live('mousedown', function( e ){
return true;
}).
live('click', function( e ){
if ( !logged_in ) {
var target = original_target(e),
tag = $(target).text();
addfhfilter(tag);
}
e.preventDefault();
return false;
});
$TAG_MENU.menu({
cssNamespace: 'slash',
liveTriggers: true,
clickDuration: 300,
start: function( e, ui ){
var $tag = $(ui.trigger),
tag = get_tag_name($tag),
context = firehose_settings && firehose_settings.viewtitle;
// Insert the tagname into the menu items where needed.
$TAG_MENU.find('span.var-tag').text(tag);
$TAG_MENU.find('a.nix').attr('title','not ' + tag);
// non-admins may only delete their own tags
$TAG_MENU.find('a[data-op="-"]').toggle($tag.is('.my'));
// *tagname* in *viewtitle*
$TAG_MENU.find('a[data-op="="]').toggle(!!context);
context && $TAG_MENU.find('span.var-view').text(context);
open_menu($tag, $TAG_MENU);
},
select: function( e, ui ){
var $tag = $(ui.trigger),
tag = get_tag_name($tag),
op = $(ui.event.target).attr('data-op'),
fhitem,
command;
// Global for positioning other things.
$related_trigger = $tag;
switch ( op ) {
case '=':
addfhfilter(tag);
break;
default:
fhitem = $tag.closest('.fhitem')[0];
command = (op + tag).replace(NOTNOT, '');
try { Tags.submit(fhitem, command); } catch ( err ) { }
break;
}
},
stop: function( e, ui ){ close_menu(ui.trigger, $TAG_MENU); }
});
/* T2 feedback context-menu */
/* T2 datatype context-menu (admin-only) */
});
</script>
<!-- SMACKS: BEGIN MAIN CONTENT U2MainView -->
<div class="container">
<div class="main-wrap has-rails">
<div class="main-content">
<section class="grid_24" id="content">
<section id="firehose">
<div class="grid_24">
<table class="data listComments">
<tr>
<th>Subject</th>
<th>Datestamp</th>
<th></th>
<th>Replies</th>
<th></th>
<th></th>
<th>Score</th>
</tr>
<tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=1011881&cid=25559403">Re:Shameless plug?</a> </td><td valign="top"><nobr> *Wednesday October 29, 2008 @03:07PM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 3, Informative</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//mobile.slashdot.org/story/08/10/29/1710220/running-google-android-on-iphone-clones">Running Google Android On iPhone Clones</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=153847&cid=12911355">Re:Has struck my mind before</a> </td><td valign="top"><nobr> *Saturday June 25, 2005 @08:13PM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 2</nobr></td></tr>
<tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=153847&cid=12906189">Has struck my mind before</a> </td><td valign="top"><nobr> *Friday June 24, 2005 @08:37PM</nobr></td><td></td><td valign="top" align="right"><nobr> 6</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//tech.slashdot.org/story/05/06/24/2138205/death-on-demand-drive-tech">Death On Demand Drive Tech</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=151372&cid=12701358">I always did feel guilty...</a> </td><td valign="top"><nobr> *Wednesday June 01, 2005 @10:51PM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//tech.slashdot.org/story/05/06/01/2043242/longhorn-drops-my-prefixes">Longhorn Drops 'My' Prefixes</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=150936&cid=12678117">another critical distinction</a> </td><td valign="top"><nobr> *Monday May 30, 2005 @03:48PM</nobr></td><td></td><td valign="top" align="right"><nobr> 1</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 2</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//apple.slashdot.org/story/05/05/27/200212/ground-rules-for-the-windows-vs-mac-war">Ground Rules for the Windows vs. Mac War</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=150108&cid=12585057">but do they really care?</a> </td><td valign="top"><nobr> *Thursday May 19, 2005 @09:27PM</nobr></td><td></td><td valign="top" align="right"><nobr> 1</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 2</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//slashdot.org/story/05/05/19/2313238/chase-deploying-touchless-credit-cards">Chase Deploying "Touchless" Credit Cards</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=147549&cid=12366647">gentoo is great because...</a> </td><td valign="top"><nobr> *Wednesday April 27, 2005 @08:13PM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//tech.slashdot.org/story/05/04/27/1836227/graphical-gentoo-installer-in-the-works">Graphical Gentoo Installer In The Works</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=146277&cid=12254793">Re:Because it is exhausting</a> </td><td valign="top"><nobr> *Saturday April 16, 2005 @10:51AM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 2</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//tech.slashdot.org/story/05/04/15/220204/minority-report-ui-for-the-military">Minority Report UI For The Military</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=137542&cid=11501370">mandatory script</a> </td><td valign="top"><nobr> *Friday January 28, 2005 @04:56AM</nobr></td><td></td><td valign="top" align="right"><nobr> 1</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 4, Funny</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//yro.slashdot.org/story/05/01/28/031248/man-reportedly-jailed-for-using-lynx">Man Reportedly Jailed for Using Lynx</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=136984&cid=11445511">Re:sniperbots</a> </td><td valign="top"><nobr> *Saturday January 22, 2005 @11:14PM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//hardware.slashdot.org/story/05/01/23/0138245/pentagon-to-send-robot-soldiers-to-iraq">Pentagon To Send Robot Soldiers to Iraq</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=134086&cid=11232041">Re:politics and hype</a> </td><td valign="top"><nobr> *Saturday January 01, 2005 @12:08AM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=134086&cid=11191207">politics and hype</a> </td><td valign="top"><nobr> *Monday December 27, 2004 @11:07AM</nobr></td><td></td><td valign="top" align="right"><nobr> 1</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 3, Insightful</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//tech.slashdot.org/story/04/12/27/1241200/interview-of-the-windows-xp-sp2-dev-team">Interview of the Windows XP SP2 Dev Team</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=132784&cid=11089818">Computer Workshop Ideas</a> </td><td valign="top"><nobr> *Wednesday December 15, 2004 @12:16AM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//ask.slashdot.org/story/04/12/14/1935258/what-interests-high-school-students">What Interests High-School Students?</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=132487&cid=11064903">Catching these</a> </td><td valign="top"><nobr> *Sunday December 12, 2004 @03:38AM</nobr></td><td></td><td valign="top" align="right"><nobr> 2</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 4, Funny</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//hardware.slashdot.org/story/04/12/12/0157247/solar-powered-autonomous-underwater-vehicles">Solar-Powered Autonomous Underwater Vehicles</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=131772&cid=11001704">Re:Others...</a> </td><td valign="top"><nobr> *Sunday December 05, 2004 @01:07PM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//news.slashdot.org/story/04/12/05/168240/beating-roulette-with-computers-lasers">Beating Roulette With Computers & Lasers</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=131716&cid=10998047">Right to Left?</a> </td><td valign="top"><nobr> *Saturday December 04, 2004 @05:51PM</nobr></td><td></td><td valign="top" align="right"><nobr> 2</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//news.slashdot.org/story/04/12/04/1755214/abiword-22-unleashed">AbiWord 2.2 Unleashed</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=131205&cid=10952766">Dung Beetle</a> </td><td valign="top"><nobr> *Tuesday November 30, 2004 @11:22AM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 1</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//science.slashdot.org/story/04/11/30/1438247/things-to-do-before-you-die">Things To Do Before You Die</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=130946&cid=10931580">Re:1 comment?</a> </td><td valign="top"><nobr> *Saturday November 27, 2004 @01:31PM</nobr></td><td></td><td valign="top" align="right"><nobr> 1</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 5, Insightful</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//bsd.slashdot.org/story/04/11/27/1445204/netbsd-20-rc5-tagged">NetBSD 2.0 RC5 Tagged</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=130831&cid=10919789">Re:waste of money.</a> </td><td valign="top"><nobr> *Thursday November 25, 2004 @03:52PM</nobr></td><td></td><td valign="top" align="right"><nobr> 1</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 2</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//yro.slashdot.org/story/04/11/25/1835238/nmap-author-receives-fbi-subpoenas">Nmap Author Receives FBI Subpoenas</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=129429&cid=10797979">Game Industry Union?</a> </td><td valign="top"><nobr> *Friday November 12, 2004 @11:37AM</nobr></td><td></td><td valign="top" align="right"><nobr> 4</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 3, Insightful</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//yro.slashdot.org/story/04/11/12/0537234/electronic-arts-facing-possible-class-action-lawsuit">Electronic Arts Facing Possible Class Action Lawsuit</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=129180&cid=10776331">Re:Enforced Dilution?</a> </td><td valign="top"><nobr> *Wednesday November 10, 2004 @10:40AM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 5, Insightful</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//tech.slashdot.org/story/04/11/10/1320231/ekush-a-cherryos-for-the-windows-world">Ekush: A CherryOS For the Windows World?</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=129075&cid=10769249">This will be fun.</a> </td><td valign="top"><nobr> *Tuesday November 09, 2004 @04:45PM</nobr></td><td></td><td valign="top" align="right"><nobr> 8</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 5, Funny</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//news.slashdot.org/story/04/11/09/1943215/microsoft-takes-on-tivo">Microsoft Takes on TiVo</a></td></tr> <tr class="data_hl2"><td valign="top"><a href="//slashdot.org/comments.pl?sid=128776&cid=10744658">Re:Slackware junkies should give BSD a try..</a> </td><td valign="top"><nobr> *Saturday November 06, 2004 @11:13PM</nobr></td><td></td><td valign="top" align="right"><nobr> 1</nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 3, Informative</nobr></td></tr>
<tr class="data_hl2"><td valign="top" colspan="7" align="right"> attached to <a href="//bsd.slashdot.org/story/04/11/07/0026244/freebsd-53-released">FreeBSD 5.3 Released</a></td></tr> <tr class="data_hl1"><td valign="top"><a href="//slashdot.org/comments.pl?sid=128204&cid=10707222">mentality it brought...</a> </td><td valign="top"><nobr> *Tuesday November 02, 2004 @11:55PM</nobr></td><td></td><td valign="top" align="right"><nobr> </nobr></td><td align="right"></td><td></td><td valign="top"><nobr> 2, Interesting</nobr></td></tr>
<tr class="data_hl1"><td valign="top" colspan="7" align="right"> attached to <a href="//ask.slashdot.org/story/04/11/03/0232240/how-has-the-usa-patriot-act-affected-you">How has the USA PATRIOT Act Affected You?</a></td></tr>
<tr class="data_hl2"><td >
</td>
<td></td><td></td>
<td align="right"></td>
<td align="right"></td>
<td></td>
<td></td>
</tr>
</table>
<span class="void"></span></div>
</section>
</div>
</div>
<!-- SMACKS: BEGIN LEFT RAIL -->
<div class="rail-left">
<nav id="u2tabs" class="left_menu">
<ul>
<li class="home"><a href="//slashdot.org/~wooby">wooby</a></li>
<li class="firehose"><a href="//slashdot.org/~wooby/firehose">Firehose</a></li>
<li class="comments active"><a href="//slashdot.org/~wooby/comments">Comments</a><span></span></li>
<li class="submissions"><a href="//slashdot.org/~wooby/submissions">Submissions</a></li>
<li class="friends"><a href="//slashdot.org/~wooby/friends">Friends</a></li>
<li class="tags"><a href="//slashdot.org/~wooby/tags">Tags</a></li>
<li class="achievements"><a href="//slashdot.org/~wooby/achievements">Achievements</a></li>
</ul>
</nav>
</div>
<!-- SMACKS: END LEFT RAIL -->
<!-- SMACKS: BEGIN RIGHT RAIL -->
<aside id="slashboxes" class="rail-right">
<div id="login_cover" class="hide" onclick="hide_login_box()"></div>
<div id="login_box" class="hide">
<div id="login_box_content">
<div id='embbeded_login_modal' class="hide">
<form action="https://slashdot.org/my/login" method="post" onsubmit="if (global_returnto) { this.returnto.value = global_returnto }" class="embedded"><fieldset style="-webkit-border-radius:10px 10px 0 0;border-radius:10px 10px 0 0;-moz-border-radius:10px 10px 0 0">
<div style='height:25px;'> </div>
<input type="hidden" name="returnto" value="//slashdot.org/~wooby">
<input type="hidden" name="op" value="userlogin">
<p>
<label class="fleft" for="unickname">Nickname:</label>
<input type="text" name="unickname" value="">
</p>
<p>
<label class="fleft" for="upasswd">Password:</label>
<input type="password" name="upasswd">
</p>
<label class="checkbox"><input type="checkbox" name="login_temp" value="yes"> Public Terminal</label>
<br>
<hr>
<input type="submit" name="userlogin" value="Log In" class="fno"> <a href="//slashdot.org/my/mailpassword" class="btn link" onclick="getModalPrefs('sendPasswdModal', 'Retrieve Password', 1); return false;">Forgot your password?</a>
</fieldset></form>
<div class="actions">
<a class="ico close" onclick="hide_login_slider();" href=""><span>Close</span></a>
</div>
</div>
<div class="actions">
<a class="ico close" href="#" onclick="hide_login_box(); return false"><span>Close</span></a>
</div>
</div>
</div>
<script type="text/javascript">logged_in = 0</script>
<article class="mq" id="user_bio">
<header class="title" id="user_bio_title">
<h2><span><a href="//slashdot.org/~wooby" style="text-decoration:none;">wooby</a></span> <span>(786765)</span> <span> <a href="" onclick="show_login_box(); return false;"><img src="//a.fsdn.com/sd/neutral.gif" alt="Log In"></a></span></h2>
</header>
<section class="content" id="user_bio_content">
<ul><li>(email not shown publicly)</li></ul>
</section>
</article>
<article id="achievements-786765" class="nosort">
<header id="achievements-786765-title">
<h2><a href="//slashdot.org/~wooby/achievements">wooby's Achievements</a></h2>
</header>
<section class="b" id="achievements-786765-content">
<ul>
<li>
Years Read
</li>
<li>
Days Read in a Row
</li>
<li>
The Maker
</li>
</ul>
</section>
</article>
<article id="comments-786765" class="nosort">
<header id="comments-786765-title">
<h2><a href="//slashdot.org/~wooby/comments">wooby's Comments</a></h2>
</header>
<section class="b" id="comments-786765-content">
<ul>
<li>
<a href="//slashdot.org/comments.pl?sid=1011881&cid=25559403">Re:Shameless plug?</a>
(Score:3, Informative)
</li>
<li>
<a href="//slashdot.org/comments.pl?sid=153847&cid=12911355">Re:Has struck my mind before</a>
</li>
<li>
<a href="//slashdot.org/comments.pl?sid=153847&cid=12906189">Has struck my mind before</a>
</li>
<li>
<a href="//slashdot.org/comments.pl?sid=151372&cid=12701358">I always did feel guilty...</a>
</li>
<li>
<a href="//slashdot.org/comments.pl?sid=150936&cid=12678117">another critical distinction</a>
</li>
</ul>
</section>
</article>
<article id="friends-786765" class="nosort">
<header id="friends-786765-title">
<h2><a href="//slashdot.org/~wooby/friends">wooby's Friends</a></h2>
</header>
<section class="b" id="friends-786765-content">
<ul>
<li>
<a href="//slashdot.org/~iqaz">iqaz</a>
</li>
<li>
<a href="//slashdot.org/~Trixter">Trixter</a>
</li>
</ul>
</section>
</article>
<article id="submissions-786765" class="nosort">
<header id="submissions-786765-title">
<h2><a href="//slashdot.org/~wooby/submissions">wooby's Submissions</a></h2>
</header>
<section class="b" id="submissions-786765-content">
<ul>
<li>
<a href="//slashdot.org/firehose.pl?op=view&id=1338265">Running Google Android on iPhone Clones</a>
</li>
<li>
<a href="//slashdot.org/firehose.pl?op=view&id=1227073">Google Android is the Real OLPC</a>
</li>
<li>
<a href="//slashdot.org/firehose.pl?op=view&id=1212081">Seamless Server/Client-side Javascript</a>
</li>
</ul>
</section>
</article>
</aside>
<!-- SMACKS: END RIGHT RAIL -->
</section>
</div><!-- footer type=current begin -->
</section>
<footer id="fhft" class="grid_24 nf">
<div id="logo_nf" class="fleft">
<a href="//slashdot.org"><span>Slashdot</span></a>
</div>
<nav role="firehose footer">
<ul class="fright submitstory">
<li class="fright">
<a href="/submit">Submit<span class="opt"> Story</span></a>
</li>
</ul>
</nav>
</footer>
<section class="bq">
<blockquote class="msg grid_24" cite="https://slashdot.org">
<p>I don't have any use for bodyguards, but I do have a specific use for two
highly trained certified public accountants.
-- Elvis Presley</p>
<span class="slant"></span>
</blockquote>
</section>
<footer id="ft" class="grid_24">
<nav class="grid_10" role="footer">
<ul>
<li><a href="//slashdot.org/faq">FAQ</a></li>
<li><a href="//slashdot.org/archive.pl">Story Archive</a></li>
<li><a href="//slashdot.org/hof.shtml">Hall of Fame</a></li>
<li><a href="https://slashdotmedia.com/advertising-and-marketing-services/" rel="nofollow">Advertising</a></li>
<li><a href="https://slashdotmedia.com/terms-of-use/" rel="nofollow">Terms</a></li>
<li><a href="https://slashdotmedia.com/privacy-statement/" rel="nofollow">Privacy Statement</a></li>
<li><a href="//slashdot.org/faq/slashmeta.shtml">About</a></li>
<li><a href="mailto:feedback@slashdot.org">Feedback</a></li>
<li><a href="#" onclick="set_mobile_pref('mobile',1);return false;">Mobile View</a></li>
<li><a href="//slashdot.org/blog">Blog</a></li>
<li><a href="#" id="opt-out-link"></a></li>
<li><button class="btn opt-out" id="opt-out-button" style="display:none">
<img src="//a.fsdn.com/sd/ccpa-optout.png" alt="Icon">
Do Not Sell or Share My Personal Information</button></li>
</ul>
</nav>
<br>
<div class="grid_14 tright tm"><span class="nobr">Copyright © 2026 Slashdot Media. All Rights Reserved.</span></div>
<div class="modal-custom overlay-custom" id="ccpa-modal" style="max-width:100%">
<div class="modal-content modal-content-ccpa">
<span class="close" id="modal-close">×</span>
<div class="modal-header" id="ccpa-modal-content-destination"></div>
</div>
</div>
</footer>
<div class="overlay"></div>
<div class="modal-box">
<a href="#" id="close-modal">Close</a>
<article class="modal-content">
</article>
<footer>
</div>
<div id="modal_cover" class="hide" onclick="hide_modal_box(); return false;"></div>
<div id="modal_box" class="hide">
<div id="modal_box_content"></div>
<header class="n">
<span class="fadeout"></span>
<span class="fadeoutfade"></span>
<span class="pf"><a class="ico close" onclick="hide_modal_box(); return false;" href="#"><span>Close</span></a></span>
<h3 class="pf"><div id="logo"><a href="//slashdot.org">Slashdot</a></div><span id="preference_title"></span></h3>
</header>
</div>
<script type="text/javascript">
window.google_analytics_uacct = "UA-199823890-2";
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-199823890-2']);
_gaq.push(['_setDomainName', '.slashdot.org']);
_gaq.push(['_addIgnoredRef', 'slashdot.org']);
_gaq.push(['_setCustomVar', 1, 'User Type', 'Anon', 3]);
_gaq.push(['_setCustomVar', 2, 'Page','users2', 3]);
// track beta behavior for user
var betamatches = document.cookie.match(/betagroup=(-?\d+)/);
if(betamatches && betamatches[1]) {
if(betamatches[1] == -1) {
_gaq.push(['_setCustomVar', 3, 'Beta-Usage','opt-out', 3]);
} else {
_gaq.push(['_setCustomVar', 3, 'Beta-Usage','unredirected', 3]);
}
}
_gaq.push(['_trackPageview']);
_gaq.push(['_trackPageLoadTime']);
bizx.cmp.ifConsent({purposes: ['storage', 'measurement'], vendors: 'google-analytics'}, function () {
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
});
</script>
<!-- CCM GA Push -->
<script>
if (typeof _ml !== 'undefined' && _ml.us) {
if (_ml.us.tp && _ml.us.tp.length > 0) {
ga('set', 'dimension2', _ml.us.tp[0]);
}
if (_ml.us.pc && _ml.us.pc.length > 0) {
ga('set', 'dimension7', _ml.us.pc[0]);
}
ga('set', 'dimension3', _ml.us.ind);
ga('set', 'dimension4', _ml.us.cr);
ga('set', 'dimension5', _ml.us.cs);
ga('set', 'dimension6', _ml.us.dm);
ga('set', 'dimension8', _ml.us.sn);
}
</script>
<!-- Sticky Ads -->
<script type="text/javascript">
var topBannerViewed = false;
function initSticky(){
if (SD?.Ads?.acceptable_ads_active) {
return;
}
if($('#div-gpt-ad-728x90_a').length > 0 && $('#div-gpt-ad-300x250_a').length > 0 && window.outerWidth >= 1070 && !sdAdBlockActive){
$(window).scroll(function(){
var y = $(document).scrollTop();
var z = y + window.outerHeight;
var navOffset = 0;
var offset = [
$('.nav-wrap').outerHeight(true),
$('.nav-secondary-wrap').outerHeight(true)
];
for(row in offset){
if(offset[row]) navOffset = navOffset + parseInt(offset[row]);
}
$('.adwrap-unviewed').each(function(){
var cls = 'adwrap-sticky';
var toggleCls = 'adwrap';
if($(this).hasClass('railad')) {
if(topBannerViewed){
var topPixels = $(this).offset().top;
navOffset += $('.adwrap').outerHeight();
if(y >= topPixels && y >= navOffset){
$('#slashboxes').css('top', 0).css('position','sticky').css('right',13);
} else {
$('#slashboxes').removeAttr('style');
}
}
return;
}
var topPixels = $(this).offset().top;
if(y >= topPixels && y >= navOffset){
$(this).addClass(cls);
$(this).removeClass('adwrap');
if(cls == 'adwrap-sticky') { //top banner
topBannerViewed = false;
$('#slashboxes').css('top',$(this).outerHeight() || 0).css('position','sticky').css('right',13);
}
if(topBannerViewed) {
$('#slashboxes').css('top', 0).css('position','sticky').css('right',13);
}
}else{
$(this).removeClass(cls);
$(this).addClass(toggleCls);
$('#slashboxes').removeAttr('style');
}
});
if($('.adwrap-viewed-banner').length > 0){
topBannerViewed = true;
$('.adwrap-viewed-banner').removeClass('adwrap-unviewed').removeClass('adwrap-sticky').addClass('adwrap');
}
if($('.adwrap-viewed-railad').length > 0){
$('.adwrap-viewed-railad').removeClass('adwrap-unviewed').removeClass('adwrap-railad-sticky');
$('#slashboxes').removeAttr('style');
}
});
}
}
bizx.cmp.ifConsent({purposes: 'all', vendors: 'google-ads'}, function () {
if (!sdAdBlockActive) {
initSticky();
}
if (SD?.Ads?.acceptable_ads_active) {
// similar to remove* code above in initSticky
$('.adwrap-unviewed').removeClass('adwrap-unviewed').removeClass('adwrap-sticky').addClass('adwrap').removeClass('adwrap-railad-sticky');
$('#slashboxes').removeAttr('style');
}
});
</script>
<style>
#slashboxes .ntv-preview-img-wrapper {
display: block;
margin: 0 auto !important;
width: 100%;
float: none;
text-align: center;
}
#slashboxes strong {
margin-bottom: -5px;
display: block;
}
#slashboxes .ntv-preview-img-wrapper {background: #F7F7F7;}
#slashboxes .nel-image {
float: none;
margin-top: 10px;
}
#slashboxes .p.ntv-body {
text-align: left;
border-top: 1px solid #CCCCCC;
}
#slashboxes .p.ntv-body strong {
display: block;
}
#slashboxes .p.ntv-body .nel-button {
width: 100%;
text-align: center;
margin: 15px 0;
padding: 8px;
}
#slashboxes .p.ntv-body {
background: #fff;
margin: 0;
padding: 10px 10px 1px 10px;
}
#slashboxes article:first-child {
border-radius: 0px !important;
padding-top: 1;
}
#slashboxes article:first-child header {
border-radius: 0px !important;
}
#slashboxes article:first-child h2.story {
padding-left: 10px;
background: #6D4634;
}
#slashboxes .details {
display: none;
}
#slashboxes .ntv-sponsored-disclaimer {
position: relative;
top: 0;
background: #6D4634;
padding-left: 10px;
padding-top: 10px;
margin-left: 0;
}
#slashboxes .ntv-sponsored-disclaimer:before {
display: none;
}
#slashboxes .ntv-sponsored-question {
display: none;
}
#slashboxes .ntv-sponsored-disclaimer a {
float: none;
text-transform: uppercase;
}
</style>
<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];
_paq.push(["setCookieDomain", "*.slashdot.org"]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
function initPiwik() {
(function() {
var u="//analytics.slashdotmedia.com/";
_paq.push(['setTrackerUrl', u+'sd.php']);
_paq.push(['setSiteId', 40]);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'sd.js'; s.parentNode.insertBefore(g,s);
})();
}
function initNels() {
if(window.location.pathname == '/'){
var nelId = (location.search.split('nel_id=')[1] || '').split('&')[0];
var url = '/ajax.pl?op=nel';
if(nelId){
url += '&nel_id='+nelId;
}
$.ajax({
url: url,
type: 'POST',
success: function(html){
$('#firehoselist article').eq(1).after(html);
}
});
}
function showVerticalNEL() {
let res = false;
if(window.location.pathname.indexOf('/story/') >= 0){ // story
res = true;
}
if(window.location.pathname.indexOf('/recent') >= 0 ||
window.location.pathname.indexOf('/popular') >= 0 ||
window.location.pathname.indexOf('/submission/') >= 0){ // submissions
res = true;
}
if(window.location.pathname === '/'){ // home
res = true;
}
return res;
}
if (showVerticalNEL()) {
var nelId = (location.search.split('nel_id=')[1] || '').split('&')[0];
var url = '/ajax.pl?op=nel';
if(nelId){
url += '&nel_id='+nelId;
}
$.ajax({
url: url,
type: 'POST',
success: function(html){
$('#slashboxes').eq(0).prepend(html);
$('#slashboxes .ntv-sponsored-disclaimer a span:first-child').html('Featured Content');
}
});
}
//announcement NEL
if(document.getElementById('announcementText')){
$('#announcementText').hide();
var hlUrl = '/ajax.pl?op=hl_nel';
if(nelId){
hlUrl += '&nel_id='+nelId;
}
$.ajax({
url: hlUrl,
type: 'POST',
success: function(html){
if(html.length < 10){
$('#announcementText').show();
return;
}
$('#announcementText').html(html).show();
},
error: function () {
$('#announcementText').show();
}
});
}
document.addEventListener('click', (e) => {
const el = e.target.closest('[data-dest]');
if (!el) return;
e.preventDefault();
e.stopPropagation();
const url = el.dataset.dest;
const target = el.dataset.target || '_self';
if (target === '_blank') {
window.open(url, '_blank', 'noopener,noreferrer');
}
});
}
let tracking = false;
bizx.cmp.ifConsent({purposes: ['storage', 'measurement'], vendors: 'sdm'}, initPiwik);
initNels();
function trackNelImpressions() {
const nelimps = document.querySelectorAll('img[data-name="nel-impression"]:not([data-nel-processed])');
nelimps.forEach((imp) => {
imp.setAttribute('data-nel-processed', '1'); // prevent re-processing
const imp_url = imp.getAttribute('data-source');
if (!imp_url) {
return;
}
imp.src = imp_url;
});
}
function startTracking(){
if (tracking) return;
tracking = true;
trackNelImpressions();
}
const observer = new MutationObserver(function(mutations) {
if (!tracking) return;
for (const m of mutations) {
for (const node of m.addedNodes) {
if (node.nodeType !== 1) continue; // element only
trackNelImpressions(node);
}
}
});
observer.observe(document.body, { childList: true, subtree: true });
bizx.cmp.ifConsent({purposes: ['storage', 'measurement', 'ads'], vendors: 'sdm'}, function(){
startTracking();
});
<!-- 6sense -->
bizx.cmp.ifConsent({purposes: 'all', vendors: '6sense'}, async() => {
(function(){
var s = document.getElementsByTagName("script")[0];
var b = document.createElement("script");
b.type = "text/javascript";
b.async = true;b.defer=true;b.id='6senseWebTag';
b.src = "https://j.6sc.co/j/58729049-be80-466a-9abf-b3911430bbd8.js";
s.parentNode.insertBefore(b, s);
})();
})
</script>
<script src="//a.fsdn.com/con/js/sandiego/maxnav.js?2026-08-07"></script>
<script data-source="slashdot" src="//a.fsdn.com/con/js/sandiego/floating-unit.js?2026-08-07"></script>
<script id="after-content" type="text/javascript">
(function( $, fn, console ){
$ && fn && $(function(){ fn($, console); });
})(window.jQuery, window.pageload_done, window.console);
</script>
<script type='text/javascript'>
if(!document.location.href.match(/source=autorefresh/)) {
document.write('<img src="//slashdot.org/images/js.gif?718">');
}
</script>
<noscript>
<img src="//slashdot.org/images/njs.gif?175">
</noscript>
<div class="busy genericspinner hide"><span>Working...</span></div>
<script>
var regular_opt_out_link = true;
if (bizx.cmp.show_do_not_sell()) {
regular_opt_out_link = false;
document.getElementById('opt-out-button').setAttribute('style', 'display:inline');
}
if (window.is_euro_union === 1) {
regular_opt_out_link = false;
var elem = '<a href="#" title="Privacy Choices" onclick="bizx.cmp.promptConsent(); return false;">Privacy Choices</a>';
document.getElementById('opt-out-link').innerHTML = elem;
}
if (regular_opt_out_link == true) {
var elem = '<a href="https://slashdotmedia.com/opt-out-choices" title="Opt Out" rel="nofollow">Opt Out</a>';
document.getElementById('opt-out-link').innerHTML = elem;
}
var cmp_modal = document.getElementById('ccpa-modal');
var btn = document.getElementById('opt-out-button');
var span = document.getElementById('modal-close');
btn.onclick = function() {
cmp_modal.style.display = 'block';
};
span.onclick = function() {
cmp_modal.style.display = 'none';
};
</script>
<script>
if(typeof(Storage)!=="undefined"){
window.scrollTo(0,sessionStorage.scrollPos);
$(window).scroll(function () {
//You've scrolled this much:
sessionStorage.scrollPos = $(window).scrollTop();
});
}
$(function(){
$('a').click(function(){
delete sessionStorage.scrollPos;
})
});
// window.onbeforeunload = function () {
// console.log('bakc button clicked');
// delete sessionStorage.scrollPos;
// }
window.onpopstate=function() {
delete sessionStorage.scrollPos;
}
</script>
<script>
var current_time = (new Date()).getTime();
var image_url = 'https://io.narrative.io/?companyId=2440&id=site_name:slashdot.org&id=url:' + window.location.pathname + '&rand=' + current_time;
let hem = bizx.uids.getHem();
if (hem) {
image_url += '&id=hem:' + hem;
}
function naLoad() {
var image = new Image()
image.src = image_url;
image.style.display = "none";
image.style.height = 0;
image.style.width = 0;
document.body.appendChild(image)
}
bizx.cmp.ifConsent({ purposes: 'all', vendors: 'narrative'}, naLoad);
bizx.cmp.ifConsent({ purposes: 'all', vendors: 'xandr'}, function() {
<!-- xandr !-->
!function(e,i){if(!e.pixie){var n=e.pixie=function(e,i,a){n.actionQueue.push({action:e,actionValue:i,params:a})};n.actionQueue=[];var a=i.createElement("script");a.async=!0,a.src="//acdn.adnxs.com/dmp/up/pixie.js";var t=i.getElementsByTagName("head")[0];t.insertBefore(a,t.firstChild)}}(window,document);
pixie('init', '44bba44a-d920-4ad6-ad5c-6142072898f3' );
pixie('event', 'PageView');
})
</script>
<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a28c31e16802490e',t:'MTc4NjMzNTQ4OA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body>
</html>
<!-- footer type=current end -->