<!-- 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: '848683645560843494',
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>
Follow Slashdot stories on <a href="http://twitter.com/slashdot">Twitter</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">
<!--
<div class="msg">
<p>
<a href="//slashdot.org/~wooby/journal/friends">wooby's Friends' Journals</a>
</p>
</div>-->
<!--body begin -->
<div class="">
<div class="main-wrap ">
<div class="main-content">
<div id="firehose" class="nothumbs ">
<!-- WIT -->
<a name="articles"></a>
<div id="firehoselist" class="fhroot row ">
<article id="firehose-1604507" data-fhid="1604507" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1604507</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1604507">
<a href="//slashdot.org/index2.pl?fhfilter=spam" onclick="return addfhfilter('spam');">
<img src="//a.fsdn.com/sd/topics/spam_64.png" width="64" height="64" alt="Spam" title="Spam">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1604507" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/99212/fighting-spam-testing-for-human-beings">Fighting Spam: Testing for Human Beings</a></span>
<!--<span class="comments commentcnt-1604507" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1604507">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1604507" datetime="on Thursday February 24, 2005 @04:14AM">on Thursday February 24, 2005 @04:14AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1604507">
<div id="text-1604507" class="p">
<p>I <a href="http://www.exris.com/turing.php">wrote a script</a> to test whether a web visitor is a human being or not. For background info and technical nitty-gritty, read below.</p><p>Programs known as "robots" have been masquerading as real web surfers since the beginning of the Web. Robots can navigate between web pages and servers using hyperlinks just as people do, and can do so very quickly. Most commonly, robots are used to search out data to include in search engines.</p><p>Robots can also be used to more nefarious ends, like gathering e-mail addresses or signing up for thousands of e-mail accounts for use in spamming. The key to fighting spam robots is by including a question or problem in the sign-up process that only a human being can easily answer. This problem has to be easy for a computer to generate, but difficult for a computer to solve.</p><p>For the most part, websites that want to inhibit automated sign-ups include an image in the page containing a code or key. The text in the image is obfuscated to make digital recognition of the key more difficult for OCR software. Check out <a href="http://www.neologic.net/ad/pictures/aim.jpg">an example from AOL's AIM sign-up page</a> or one from <a href="http://www.neologic.net/ad/pictures/yahoo.jpg">Yahoo's.</a> </p><p>What other questions can computers create that they themselves can't easily solve, and are simple enough to use to verify the humanity of web surfers? I asked myself this question, and the result is a PHP script illustrating one approach that uses Google's vast image search feature.</p><p> <a href="http://www.exris.com/turing.php">My script</a> queries <a href="http://images.google.com/">Google Image Search</a> for a group of thumbnail images that match a search for something like "3 kittens." It may also try other nouns and other numbers, for searches like "4 pots" or "5 women." Out of the group of thumbnails Google returns, one is randomly chosen and displayed to the user. The script already knows how many of the object are supposed to be in the picture, because the script originally asked for the image. For the client, though, the question of how many objects are in the picture is technically very computationally difficult. Not only must the would-be robot know what the object looks like, it must know what it looks like from all angles and in all sizes.</p><p>My method is limited by the number of objects a person would be willing to count, which I suspect is somewhere around 10. This means that at the very least, a brute-force attempt of the script would yield a success rate of 10%. It's also limited by the "inaccuracy" of Google Image Search; sometimes the random thumbnail that's chosen has nothing to do with the query. I have yet to collect data as to what percentage of the Google results are relevant, and whether or not this statistic makes the approach viable when the potential for brute-forcing is considered.</p><p>I hope to develop the method and keep track of what thumbnails are presented. Future versions may ask the user whether or not he or she was able to recognize the object. There may be other ways to exploit Google Image Search's potential to test for real people, which I also hope to explore.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1604507" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1603187" data-fhid="1603187" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1603187</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1603187">
<a href="//slashdot.org/index2.pl?fhfilter=os" onclick="return addfhfilter('os');">
<img src="//a.fsdn.com/sd/topics/os_64.png" width="64" height="64" alt="Operating Systems" title="Operating Systems">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1603187" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/98412/screenshots-who-cares">Screenshots: Who Cares?</a></span>
<!--<span class="comments commentcnt-1603187" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1603187">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'violet')" title="Filter Firehose to entries rated violet or better"></span><span class="icon-beaker pop7 " alt="Popularity" title="Filter Firehose to entries rated violet or better" onclick="firehose_set_options('color', 'violet')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1603187" datetime="on Tuesday February 15, 2005 @04:59AM">on Tuesday February 15, 2005 @04:59AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1603187">
<div id="text-1603187" class="p">
<p>Developers of free software operating systems seem obliged to <a href="http://www.fireflybsd.com/screenshots/">provide screenshots</a> of their releases. Most of the time, these screenshots show nothing more than a themed or thinly customized KDE or Gnome setup. Except for OSes aimed directly at Windows switchers, these efforts are worthless and silly.</p><p>Your OS runs a window manager. Congratulations.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1603187" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1602257" data-fhid="1602257" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1602257</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1602257">
<a href="//slashdot.org/index2.pl?fhfilter=appleutilities" onclick="return addfhfilter('appleutilities');">
<img src="//a.fsdn.com/sd/topics/topicaputilities.gif" width="58" height="61" alt="Utilities (Apple)" title="Utilities (Apple)">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1602257" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/97836/writing-floppy-images-in-mac-os-103">Writing Floppy Images in Mac OS 10.3</a></span>
<!--<span class="comments commentcnt-1602257" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1602257">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'violet')" title="Filter Firehose to entries rated violet or better"></span><span class="icon-beaker pop7 " alt="Popularity" title="Filter Firehose to entries rated violet or better" onclick="firehose_set_options('color', 'violet')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1602257" datetime="on Wednesday February 09, 2005 @01:52AM">on Wednesday February 09, 2005 @01:52AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1602257">
<div id="text-1602257" class="p">
<p>An interest in legacy hardware led me to buy a handy USB floppy drive for my Powerbook for creating boot disks for and transferring data to and from machines that for whatever reason don't have a workable CD-ROM or network connection.</p><p>In OS 10.3, Apple merged most of the functionality of "Utilities/Disk Copy" into "Utilities/Disk Utility," though I've found that Disk Utility will not write floppy images. The venerable command-line Unix utility "dd" is required.</p><p>The process is complicated by 10.3's auto mounter, which automatically mounts inserted floppies to<nobr> <wbr></nobr>/Volumes. An attempt to dd an image to the floppy device, which is registered somewhere in<nobr> <wbr></nobr>/dev as disk*, will fail as the system considers the device "in use." The workaround is to unmount the disk from<nobr> <wbr></nobr>/Volumes while retaining its<nobr> <wbr></nobr>/dev entry. As far as I know, this is not possible through Apple's provided GUI utilities. The process I used to dd an image to a floppy follows.</p><ol>
<li> <b>Determine the USB Floppy Drive's<nobr> <wbr></nobr>/dev Entry</b><p>On *nix systems, system devices are represented in<nobr> <wbr></nobr>/dev. Disks, floppy or otherwise, have names like "/dev/disk4." I won't get into the the details of device naming, but suffice to say that in order to write an image to floppy, you must first discover the name of the floppy device.</p><p>To do this, unplug your USB floppy drive and open a Terminal. Navigate to the<nobr> <wbr></nobr>/dev directory with a command like <i>cd<nobr> <wbr></nobr>/dev</i>. Next, determine what disks are present by typing <i>ls disk*</i>. A list of connected drives and partitions will show up.</p><p>Now, plug in your USB floppy. It should be recognized by the system. Do <i>ls disk*</i> again. Comparing the output of the commands before and after you plugged in the drive, you should notice a new entry listed. For me, it's "disk4." For the purposes of this tutorial, I will consider the name of the floppy device<nobr> <wbr></nobr>/dev/disk4, but it may be different on your machine.</p></li><li> <b>Unmount the Floppy Volume</b><p>You can open a new Terminal window with Cmd+N. Navigate to<nobr> <wbr></nobr>/Volumes with <i>cd<nobr> <wbr></nobr>/Volumes</i>. Execute an <i>ls</i>, and the name of the floppy volume should be evident. For the brand of DOS-formatted floppies I have on hand, the name is "UNTITLED." The name of the disk in this directory is also the name of the mounted floppy as it appears in the Finder.</p><p>Now, unmount the<nobr> <wbr></nobr>/Volumes mount with a command like <i>sudo umount UNTITLED</i>, where UNTITLED is the name of the floppy. You should now be able to write directly to the floppy device, as it is no longer mounted.</p></li><li>
<b>Write the Image</b><p>You can now write the image with a command like <i>sudo dd if=/Users/alan/Desktop/image.dsk of=/dev/disk4 bs=32k</i> where "if" equals the location of the image you'd like to write and "of" is the path to the floppy device you determined in step 1.
</p><p>Voila! Following the dd, your disk is ready. It's safe to eject the disk manually or unplug the USB drive. You'll get a warning message about unsafe removal of a device, but it's not a big deal.
</p></li></ol>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1602257" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1598475" data-fhid="1598475" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1598475</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1598475">
<a href="//slashdot.org/index2.pl?fhfilter=journal" onclick="return addfhfilter('journal');">
<img src="//a.fsdn.com/sd/topics/topicjournal.gif" width="58" height="61" alt="User Journal" title="User Journal">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1598475" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/95472/wear-evolving-tools">Wear-Evolving Tools</a></span>
<!--<span class="comments commentcnt-1598475" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1598475">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1598475" datetime="on Thursday January 13, 2005 @03:20AM">on Thursday January 13, 2005 @03:20AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1598475">
<div id="text-1598475" class="p">
<p> <i>"An escalator can never break. It can only become stairs. You would never see an 'Escalator Temporarily Out Of Order' sign, just 'Escalator Temporarily Stairs. Sorry for the convenience.'"</i> -<a href="http://www.mitchhedberg.net/">Mitch Hedberg</a> </p><p>There are simple examples of what might be called "wear-evolving tools" everywhere. A lot of the tools one encounters in the world amount to combinations of other tools. As use takes its toll on a tool, the underlying tools which compose the original emerge. However, the simple tools that emerge can rarely compete with equivalent, new tools designed from the start with a specific purpose. A broken-down car might be considered, at best, a piece of furniture. At the very least it is an ungainly paperweight. Mitch Hedberg's escalator-to-staircase idea is perhaps one of the most elegant examples.</p><p>What if designers accounted for the wear of a tool in its initial design, so that as it became ineffective when used for its original purpose, it became more valuable as some other kind of tool? Often, for safety reasons, they do. The <a href="http://en.wikipedia.org/wiki/Autogyro">autogyro</a>, for instance, is a powered helicopter-like craft. Should its engine fail, it becomes a maneuverable glider.</p><p>I think that the effect of use and the effect of the environment on most objects can be fairly accurately predicted. I have a hunch that if enough effort were put into the design of something, it would be possible to manufacture things which, instead of becoming totally useless with age, simply become something different.</p><p>Imagine engines with only a few "high-level" parts. As these parts wear, they can be used to replace smaller parts in the same engine. The engine could be run indefinitely as long as the highest-level components are replaced as they are worn and shift function.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1598475" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1595685" data-fhid="1595685" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1595685</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1595685">
<a href="//slashdot.org/index2.pl?fhfilter=hardhack" onclick="return addfhfilter('hardhack');">
<img src="//a.fsdn.com/sd/topics/hardhack_64.png" width="64" height="64" alt="Hardware Hacking" title="Hardware Hacking">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1595685" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/93707/mechanical-logic-gates-and-the-tinkertoy-computer">Mechanical Logic Gates and the Tinkertoy Computer</a></span>
<!--<span class="comments commentcnt-1595685" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1595685">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'violet')" title="Filter Firehose to entries rated violet or better"></span><span class="icon-beaker pop7 " alt="Popularity" title="Filter Firehose to entries rated violet or better" onclick="firehose_set_options('color', 'violet')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1595685" datetime="on Thursday December 23, 2004 @03:14AM">on Thursday December 23, 2004 @03:14AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1595685">
<div id="text-1595685" class="p">
<p>I'm on Christmas break and have been spending part of my time reading through AK Dewdney's "The Tinkertoy Computer," a collection of Dewdney's writings and articles from Scientific American and elsewhere.</p><p>Of particular fascination to me is the idea of constructing computers without silicon. Dewdney points out that all matter can be fashioned into a computer. The only variables are size and speed. Silicon and electricity are currently in vogue; they supersede mechanical and electromechanical, and may be replaced by the light or quantum.</p><p>In the 20th century before the transistor, computers were made predominantly from either electrical relays or or vacuum tubes. Konrad Zuse's Z3 was perhaps the most advanced of the relay machines, whereas ENIAC is champion of the vacuum tube.</p><p>In the spirit of <a href="http://en.wikipedia.org/wiki/George_Stibitz">Stibitz's Model K</a> and <a href="http://en.wikipedia.org/wiki/Konrad_Zuse">Zuse's Z2</a>, I ventured to RadioShack on a quest to build a binary addition machine using relays.</p><p>The electronics hobbyist is a dying breed. Visit your local RadioShack and wander towards the parts aisle, and note how the salespeople shy away from you. They won't be selling you a cell phone or a new stereo today. You're on a mission.</p><p>My RadioShack adventure was a success, but I was struck by the prices of the damned things. An individual 5v SPST reed relay cost me $2.69. I knew that transistors were faster, but cheaper too? Oldschoolism isn't cheap. I bought enough for a 1 bit adder. The XOR gate I designed required 5 relays, and a 1 bit adder is basically a glorified XOR gate. As it turned out, I used more relays than planned because the output LEDs required separate circuits. The single SPDT relay I bought, which is necessary as a boolean "not," uses 9V and would blow series-wired lights.</p><p>I'm proud of <a href="http://www.neologic.net/ad/pictures/adder.jpg">the finished product</a> but I'm not sure if making a 4 or 8 bit adder is completely worth it. For an 8 bit adder, I'd be looking at over 40 relays costing over $100.00. Maybe I should build a <a href="http://www.rci.rutgers.edu/~cfs/472_html/Intro/TinkertoyComputer/TinkerToy.html">Tinker Toy computer tic-tac-toe player instead.</a> </p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1595685" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1594129" data-fhid="1594129" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1594129</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1594129">
<a href="//slashdot.org/index2.pl?fhfilter=storage" onclick="return addfhfilter('storage');">
<img src="//a.fsdn.com/sd/topics/storage_64.png" width="64" height="64" alt="Data Storage" title="Data Storage">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1594129" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/92781/you-need-to-restart-your-computer">"You need to restart your computer."</a></span>
<!--<span class="comments commentcnt-1594129" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1594129">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'violet')" title="Filter Firehose to entries rated violet or better"></span><span class="icon-beaker pop7 " alt="Popularity" title="Filter Firehose to entries rated violet or better" onclick="firehose_set_options('color', 'violet')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1594129" datetime="on Monday December 13, 2004 @10:29AM">on Monday December 13, 2004 @10:29AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1594129">
<div id="text-1594129" class="p">
<p> <a href="http://koko.homeunix.org/~alan/maclock.jpg">Woops.</a> </p><p>Today I picked up a wonderful <a href="http://www.archos.com/products/prw_500455.html">20GB bus-powered external hard drive</a>, and it rocks. The only problem: its filesystem.</p><p>An enormous advantage of a USB drive is the fact that it can be plugged into a PC of any type as long as there's a USB connection. The big problem with thumb drives, which is intrinsic to their portability, is the fact that they're all based on FAT - an ancient, MS-DOS filesystem standard that, though ubiquitous, is far behind technologically. More modern filesystems, including Microsoft's own NTFS, employ much more robust error checking and are generally slower to accumulate faults, or "fragments."</p><p>And, though my Mac generally isn't at odds with the drive, I discovered today that with a lot of concurrent reads - say, when using the utility du - the OS has a tendency to just flip out and demand a restart. I've owned my computer for 8 months; this is the first time it's happened.</p><p>It would be possible to format the drive with Apple's journalling HFS+ filesystem, but then I couldn't pop the drive onto Windows machines. Because that's the reason I bought it, I guess there's no more intensive file access in my future.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1594129" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1593987" data-fhid="1593987" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1593987</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1593987">
<a href="//slashdot.org/index2.pl?fhfilter=graphics" onclick="return addfhfilter('graphics');">
<img src="//a.fsdn.com/sd/topics/graphics_64.png" width="64" height="64" alt="Graphics" title="Graphics">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1593987" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/92698/modern-opthamalogy-a-sham">Modern Opthamalogy: A Sham?</a></span>
<!--<span class="comments commentcnt-1593987" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1593987">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1593987" datetime="on Sunday December 12, 2004 @03:25AM">on Sunday December 12, 2004 @03:25AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1593987">
<div id="text-1593987" class="p">
<p>It's possible to correct "myopia," or near-sightedness, with what's known as a "pinhole lens;" by allowing only a small sliver of light enter the eye, the effects of distortion in the lens or cornea are mitigated and once can see clearly if dimly. You can cup your hand into a fist and make a pinhole to look through. Your vision will improve noticeably.</p><p>I was googling for "pinhole glasses" when I happened upon an interesting scientific backwater: theories that modern medicine's correction for myopia <a href="http://www.myopia.org/">actually worsens vision over time</a> and is not only an ineffective but a destructive approach to vision correction. As the site says: <i>"The excessive amount of reading and other close work that we do in our modern society is the real cause of acquired myopia."</i> </p><p>The generally accepted cause of myopia is that it's genetic, though no study has definitively ruled out environmental influence. The <a href="http://en.wikipedia.org/wiki/Myopia">Wikipedia article on myopia</a> mentions a few fringe theories regarding myopia. It is held in some circles that the myopia is caused by "a weakening of the ciliary muscle," as brought on by the need for humans in modern society to constantly read material at close distances such as books and computer screens. The <a href="http://www.myopia.org/myopia2.htm">proponents of this theory</a> maintain that a vast conspiracy to hide this fact, perpetuated by the government and the medical institution, keeps the myopic in a state of continual vision degradation.</p><p>Are corrective lenses a sham? I like to think that modern medicine is above and beyond such blatant debilitation for the purpose of money. And, with <a href="http://news.bbc.co.uk/1/hi/health/1909075.stm">all kinds of crazy studies floating around</a> suggesting various reasons for myopia, I think I'll continue to use my corrective lenses but play it safe and wear my <a href="http://en.wikipedia.org/wiki/Magnet_therapy">magnetic bracelet</a> just in case.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1593987" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1592863" data-fhid="1592863" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1592863</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1592863">
<a href="//slashdot.org/index2.pl?fhfilter=wireless" onclick="return addfhfilter('wireless');">
<img src="//a.fsdn.com/sd/topics/wireless_64.png" width="64" height="64" alt="Wireless Networking" title="Wireless Networking">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1592863" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/92037/open-broadcom-wireless-drivers">Open Broadcom Wireless Drivers</a></span>
<!--<span class="comments commentcnt-1592863" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1592863">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1592863" datetime="on Saturday December 04, 2004 @02:43PM">on Saturday December 04, 2004 @02:43PM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1592863">
<div id="text-1592863" class="p">
<p>Broadcom makes a wireless chipset called the BCM4301. This chipset is in the <a href="http://en.wikipedia.org/wiki/AirPort_Extreme">Airport Extreme</a> hardware from Apple, which is in turn in my Powerbook G4.</p><p>Broadcom has not released any GNU/Linux or otherwise open drivers or a development kit, so no driver for any open OS exists. Basically, this piece of hardware is the only thing preventing me from running a free OS on my laptop.</p><p>There's been a <a href="http://www.petitiononline.com/BCM4301/petition.html">petition</a> for quite a while, but I was happy to find out today that a group <a href="http://sourceforge.net/projects/linux-bcom4301/">over at Sourceforge</a> is actively hacking away. My hopes are high!</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1592863" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1592517" data-fhid="1592517" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1592517</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1592517">
<a href="//slashdot.org/index2.pl?fhfilter=programming" onclick="return addfhfilter('programming');">
<img src="//a.fsdn.com/sd/topics/programming_64.png" width="64" height="64" alt="Programming" title="Programming">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1592517" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/91822/beginner-bash">Beginner Bash</a></span>
<!--<span class="comments commentcnt-1592517" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1592517">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1592517" datetime="on Thursday December 02, 2004 @02:19AM">on Thursday December 02, 2004 @02:19AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1592517">
<div id="text-1592517" class="p">
<p>I've been dabbling in shell scripting the past few weeks. My first project was a <a href="http://www.dyndns.org/">DynDNS</a> <a href="http://www.neologic.net/ad/programs/update.sh">record updater</a>. My <a href="http://www.neologic.net/ad/programs/akill.sh">latest creation</a> is what amounts to an alias for killall; it scans ps output and kills processes matched to a pattern with grep.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1592517" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1592507" data-fhid="1592507" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1592507</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1592507">
<a href="//slashdot.org/index2.pl?fhfilter=mozilla" onclick="return addfhfilter('mozilla');">
<img src="//a.fsdn.com/sd/topics/mozilla_64.png" width="64" height="64" alt="Mozilla" title="Mozilla">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1592507" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/91817/writing-firefox-extensions">Writing Firefox Extensions</a></span>
<!--<span class="comments commentcnt-1592507" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1592507">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1592507" datetime="on Thursday December 02, 2004 @12:26AM">on Thursday December 02, 2004 @12:26AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1592507">
<div id="text-1592507" class="p">
<p>I discovered today that <a href="http://extensions.roachfiend.com/howto.php">writing extensions</a> for <a href="http://www.mozilla.org/products/firefox/">Firefox</a> is a ridiculously straight-forward process.</p><p>The actual coding is done in JavaScript, while the presentation is handled through Mozilla's <a href="http://en.wikipedia.org/wiki/XUL">XUL</a>.</p><p>I can see myself getting into programming these hard-core. Awesome extensions to follow!</p><p>If you're running Firefox, there's <a href="https://update.mozilla.org/extensions/?application=firefox">a site where you can download extensions by the dozen</a>.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1592507" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1592345" data-fhid="1592345" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1592345</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1592345">
<a href="//slashdot.org/index2.pl?fhfilter=software" onclick="return addfhfilter('software');">
<img src="//a.fsdn.com/sd/topics/software_64.png" width="64" height="64" alt="Software" title="Software">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1592345" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/91713/multi-distro-linux-livecd">Multi-distro Linux LiveCD</a></span>
<!--<span class="comments commentcnt-1592345" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1592345">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1592345" datetime="on Wednesday December 01, 2004 @12:16AM">on Wednesday December 01, 2004 @12:16AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1592345">
<div id="text-1592345" class="p">
<p>I got an IM today from a friend of mine with the question "I'd like to put multiple Linux LiveCD ISOs on one disc, and then be able to select at boot which one to start up."</p><p>Various micro and utility OSes might be stuffed onto a CD this way - Damn Small Linux, Slax, or Derek's Boot and Nuke are just a few that might be used.</p><p>I knew immediately that this was possible, but it took some research to determine exactly how it can be done.</p><p> <a href="http://www.linuxquestions.org/questions/showthread.php?s=&threadid=224186">This LinuxQuestions.org thread</a> goes through the details of the process. It's possible to use the RIP Linux distro as a host OS and load the distros up at boot with a custom GRUB setup.</p><p> <a href="http://www.ultimatebootcd.com/">Ultimate Boot CD</a> is a pre-made multiboot CD, and can be modified to payload Linux distros. <a href="http://cdshell.org/">CD Shell</a> is another solution, and probably the best; it's a "scriptable menu-system" that can be tailored to load kernels from a selection screen at boot.</p><p>It's easiest to put together a multi-distro live cd if you have access to a Linux machine, but it's possible to accomplish on Windows using software like <a href="http://www.daemon-tools.cc/dtcc/portal/portal.php">Daemon Tools</a>.</p><p>I have yet to put together a CD of my own, but when I do it will probably have Boot and Nuke and Slax.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1592345" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1592007" data-fhid="1592007" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1592007</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1592007">
<a href="//slashdot.org/index2.pl?fhfilter=books" onclick="return addfhfilter('books');">
<img src="//a.fsdn.com/sd/topics/books_64.png" width="64" height="64" alt="Books" title="Books">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1592007" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/91505/calculating-the-probability-of-gods-existence">Calculating the Probability of God's Existence</a></span>
<!--<span class="comments commentcnt-1592007" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1592007">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1592007" datetime="on Monday November 29, 2004 @04:11AM">on Monday November 29, 2004 @04:11AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1592007">
<div id="text-1592007" class="p">
<p>Today in the car I heard an interview with Steven Unwin, a guy who in <a href="http://www.amazon.com/exec/obidos/tg/detail/-/0761526846/qid=1101714375/sr=8-1/ref=sr_8_xs_ap_i1_xgl14/103-3462677-9632669?v=glance&s=books&n=507846">his new book</a> claims to have come up with a number representing the probability of God's existence. That number? 67%.</p><p>The interviewer threw a lot at Unwin, and his responses were knowledgeable and coherent. He was familiar with <a href="http://en.wikipedia.org/wiki/Pascal's_wager">Pascal's wager</a> and <a href="http://en.wikipedia.org/wiki/Leibniz#Theodicy_and_optimism">Leibniz's take on theodicy</a>.</p><p>I haven't read Unwin's book, but I'm prepared to dismiss it outright. I just don't think that there exists objective, quantitative data that can be plugged into some formula. This whole approach of Unwin's reminds me of something I read in <a href="http://en.wikipedia.org/wiki/Zen_and_the_Art_of_Motorcycle_Maintenance">Zen and the Art of Motorcycle Maintenence</a>.</p><p>In Zen, Pirsig argues that the difference between good science and bad science is not the difference between applying the scientific method correctly and applying it incorrectly. His grand treatise on quality posits that an external, "prior-knowledge" - the ability of any given scientist to judge the quality of any observations he or she will plug into the Scientific Method - is what truly makes or breaks any scientific inquiry. Thus, even the seemingly most objective theories are really skewed by a force acting at a level higher than the tools of science.</p><p>My instinct tells me this Unwin fellow exerts "prior-knowledge" in the book and in his theories when picking and choosing data to apply, but I have yet to find out. I'll definitely be reading this book.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1592007" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1591899" data-fhid="1591899" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1591899</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1591899">
<a href="//slashdot.org/index2.pl?fhfilter=journal" onclick="return addfhfilter('journal');">
<img src="//a.fsdn.com/sd/topics/topicjournal.gif" width="58" height="61" alt="User Journal" title="User Journal">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1591899" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/91437/numbers-stations">Numbers Stations</a></span>
<!--<span class="comments commentcnt-1591899" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1591899">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1591899" datetime="on Sunday November 28, 2004 @03:09AM">on Sunday November 28, 2004 @03:09AM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1591899">
<div id="text-1591899" class="p">
<p>For nearly 40 years there have been recurring, odd broadcasts at shortwave frequencies. Called <a href="http://en.wikipedia.org/wiki/Numbers_station">Numbers stations,</a> they are presumed to be some technique for world governments to contact operatives. These kinds of broadcasts are characterized by extraneous, random blips and a synthesized voice speaking strings of seemingly random letters and numbers.</p><p>No government has commented officially on their existence or purpose.</p><p>Simon Mason, the author of a book on the subject, <a href="http://www.simonmason.karoo.net/appeal.htm">has listed on his site a number of recordings</a> that listeners across the globe have submitted.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1591899" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1591887" data-fhid="1591887" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1591887</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1591887">
<a href="//slashdot.org/index2.pl?fhfilter=programming" onclick="return addfhfilter('programming');">
<img src="//a.fsdn.com/sd/topics/programming_64.png" width="64" height="64" alt="Programming" title="Programming">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1591887" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/91430/anti-patterns-common-programming-pitfalls">Anti-Patterns: Common Programming Pitfalls</a></span>
<!--<span class="comments commentcnt-1591887" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1591887">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'indigo')" title="Filter Firehose to entries rated indigo or better"></span><span class="icon-beaker pop6 " alt="Popularity" title="Filter Firehose to entries rated indigo or better" onclick="firehose_set_options('color', 'indigo')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1591887" datetime="on Saturday November 27, 2004 @11:23PM">on Saturday November 27, 2004 @11:23PM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1591887">
<div id="text-1591887" class="p">
<p>I did a little research today into the nature of "shared libraries," and the differences between static and dynamic libraries. In doing so, I stumbled upon a <a href="http://en.wikipedia.org/wiki/DLL_hell">Wikipedia articled entitled "DLL-Hell"</a>, an article which describes in depth the problem of managing dynamic shared libraries, particularly on Windows systems.</p><p>Apparently, DLL-Hell is just one of many "<a href="http://en.wikipedia.org/wiki/Anti-pattern">anti-patterns</a>," or programming practices that can lead to flawed software.</p><p>Examples of anti-patterns include God-objects, magic numbers, and my favorite: spaghetti code.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1591887" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article><article id="firehose-1591867" data-fhid="1591867" data-fhtype="journal" class="fhitem fhitem-journal article usermode thumbs grid_24">
<span class="sd-info-block" style="display: none">
<span class="sd-key-firehose-id">1591867</span>
<span class="type">journal</span>
</span>
<header>
<span class="topic" id="topic-1591867">
<a href="//slashdot.org/index2.pl?fhfilter=netscape" onclick="return addfhfilter('netscape');">
<img src="//a.fsdn.com/sd/topics/topicnetscape.gif" width="64" height="64" alt="Netscape" title="Netscape">
</a>
</span>
<h2 class="firehose">
<span class="article-ribbon story-ribbon">Journal</span>
<span id="title-1591867" class="story-title"><a href="//slashdot.org/index2.pl?fhfilter=journal" title="Filter to journal" class="skin">Journal:</a> <a onclick="return toggle_fh_body_wrap_return(this);" rel="nofollow" href="//slashdot.org/journal/91418/running-ncsa-mosaic-on-netbsd">Running NCSA Mosaic on NetBSD</a></span>
<!--<span class="comments commentcnt-1591867" style="display:none">0</span>-->
<!-- comment bubble -->
</h2>
<div class="details" id="details-1591867">
<span class="story-details">
<span class="story-views">
<span class="sodify" onclick="firehose_set_options('color', 'violet')" title="Filter Firehose to entries rated violet or better"></span><span class="icon-beaker pop7 " alt="Popularity" title="Filter Firehose to entries rated violet or better" onclick="firehose_set_options('color', 'violet')"><span></span></span>
</span>
</span>
<span class="story-byline">
Journal
by
<a href="//slashdot.org/~wooby">wooby</a>
<time id="fhtime-1591867" datetime="on Saturday November 27, 2004 @05:17PM">on Saturday November 27, 2004 @05:17PM</time>
</span>
</div>
</header>
<div class="body" id="fhbody-1591867">
<div id="text-1591867" class="p">
<p>Last night I occupied myself with the process of compiling <a href="http://archive.ncsa.uiuc.edu/SDG/Software/Mosaic/NCSAMosaicHome.html">NCSA Mosaic.</a> </p><p>Fortunately, <a href="http://www.seanm.ca/mosaic/">this guy</a> has modified the Makefile to work on most modern systems. He compiled on Linux, but I found that his version compiled painlessly on my system once I'd installed the OpenMotif package.</p><p>Browsing is quick and pages are tolerable yet mangled.</p><p>Mosaic, the development of which ended in 1997 at version 2.7, is the direct predecessor of Netscape and considered the grandfather of web browsers. Spyglass Inc., a commercial venture that marketed NCSA technologies, licensed its Mosaic version, Spyglass Mosaic, to Microsoft in 1995. The result was Internet Explorer.</p>
</div>
</div>
<aside class="novote">
</aside>
<footer class="clearfix meta article-foot">
<div class="story-controls">
</div>
<div class="story-tags">
<span class="tright tags"><menu type="toolbar" class="edit-bar">
<span id="tagbar-1591867" class="tag-bar none">
</span>
<!--
<a class="edit-toggle" href="/my/login/" onclick="show_login_box();return false;">
<span class="icon-tag btn collapse"></span>
</a>
-->
<div class="tag-menu">
<input class="tag-entry default" type="text" value="apply tags">
</div>
</menu></span>
</div>
</footer>
</article>
</div>
<!-- LOWER PAGINATION -->
<div class="row">
<div class="paginate" id="fh-pag-div">
<div class="menu2" id="fh-paginate">
<a class="prevnextbutdis" href="#" onclick="return false;">« Newer</a>
<a class="prevnextbutact" href="//slashdot.org/users2.pl?page=1&uid=786765&view=userjournal&fhfilter=%22author%3Awooby%22+journal" >Older »</a>
<span class="inactive more">
</span>
<span class="submit"><a href="//slashdot.org/journal" class="btn">Write in Journal</a></span>
</div>
</div>
</div>
<!-- WIT -->
<span id="itemsreturned" class="row">
</span>
<!-- Slashdot Deals 6 Best Sellers -->
<div class="row">
<div class="deals-wrapper">
<div class="deals-header"><h2>Slashdot Top Deals</h2></div>
<div id="deals-output">
<script id="deals-template" type="text/x-handlebars-template">
{{#each deal}}
<div class="deal">
<a href="{{urlPath permalink}}?&utm_source=slashdot.org&utm_medium=dealfeed-footerfeed&utm_campaign={{slug}}" target="_blank">
<img src="{{main_image}}" alt="" />
</a>
<p class="title"><a href="{{urlPath permalink}}?&utm_source=slashdot.org&utm_medium=dealfeed-footerfeed&utm_campaign={{slug}}" target="_blank">{{title}}</a></p>
<p class="deal-price">{{centConversion price_in_cents}}</p>
</div>
{{/each}}
</script>
</div>
</div>
</div>
<script>
if ( sdAdBlockActive && window.is_euro_union === 0) {
bizx.cmp.ifConsent('', ['all'], function () {
$.ajaxSetup({
cache: true
});
$.getScript( "//a.fsdn.com/sd/js/scripts/min/deals-min.js", function(){
runDealsWidget();
});
});
}
</script>
<!-- End Slashdot Deals 6 Best Sellers -->
<!-- SLASH-4560 NEW AD HERE (dhand) -->
<div id="bottomadspace">
<table id="bottomadtable">
<tr>
<td></td>
</tr>
</table>
</div>
</div>
</div>
</div>
</aside>
</div>
<script type="text/javascript">
firehose_exists = 1;
$(function(){
$('#firehose-filter').focus(function(event){ gFocusedText = this; })
.blur(function(event){
if ( gFocusedText === this ) {
gFocusedText = null;
}
});
apply_updates_when( 'at-end', true);
});
firehose_settings.startdate = "";
firehose_settings.mode = "full";
firehose_settings.fhfilter = "\"author:wooby\" journal";
firehose_settings.orderdir = "DESC";
firehose_settings.orderby = "createtime";
firehose_settings.duration = -1;
firehose_settings.color = "black";
firehose_settings.view = "userjournal";
firehose_settings.viewtitle = "";
firehose_settings.tab = "";
firehose_settings.base_filter = "\"author:wooby\" journal";
firehose_settings.user_view_uid = 786765;
firehose_settings.sectionname = "Main";
firehose_settings.issue = "";
firehose_settings.section = 13;
$('#searchquery').val(firehose_settings.fhfilter);
fh_is_admin = 0;
firehose_sitename = "Slashdot";
firehose_slogan = "News for nerds, stuff that matters";
if (fh_is_admin) {
firehose_update_title_count();
}
firehose_smallscreen = 0;
var firehose_action_time = 0;
var firehose_user_class = 0;
var fh_color = "black";
fh_colors = [ "red", "orange", "yellow", "green", "blue", "indigo", "violet", "black" ];
var fh_colors_hash = new Array(0);
for (var i=0; i< fh_colors.length; i++) {
fh_colors_hash[fh_colors[i]] = i;
}
var fh_view_mode = "full";
firehose_settings.page = 0;
fh_is_admin = 0;
var updateIntervalType = 2;
var inactivity_timeout = 3600;
setFirehoseAction();
var update_time = "2026-08-10 04:18:11";
var maxtime = "2026-08-10 04:18:11";
var insert_new_at = "top";
fh_ticksize = 15;
sitename = 'idle.slashdot.org';
</script>
<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"><a href="//slashdot.org/~wooby/comments">Comments</a></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?893">');
}
</script>
<noscript>
<img src="//slashdot.org/images/njs.gif?891">
</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:'a28c31f12f6c0d0e',t:'MTc4NjMzNTQ5MA=='};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 -->