Mediocrity loves company, and the way it leverages the weak-minded is through highly selective compassion. But so long as you have no memory, no power of reason and no experience of life, this selective compassion sounds, well, compassionate.
I have a new favorite word: mediocracy. It means ‘rule by mediocre people’. I like it because it describes one facet of what I call Total Insanity – or that system under which we are, for now, living.
Under a mediocracy there are no objective standards. There are just feelings. It can – and will – use them to justify everything from opening the floodgates to an invasion of Europe, to feeling the pain of a 52-year-old father of seven who abandoned his family so he could live authentically as a six-year-old girl.
By waving the flag of selective compassion, mediocracy is forever misty-eyed at some new reason to undermine real culture, decency, manliness, and discipline.
However, what it hates more than anything is achievement. It talks about achievement, but only in a bland, touchy-feeling sort of way. In reality, its achievements are merely expressions of new ways to facilitate being weak and deluded; or roundabout ways of expressing such things in terms of ‘compassion’.
New no-tackle rugby
When you understand the agenda, it all gets quite dull after a while. But I was amused to see where the guns of compassion have now fixed their sights: school rugby.
The problem with rugby – at least within the context of schools – according to the self-appointed gurus of gush, apparently, is tackling.
In a Guardian piece about a letter – one breathlessly entitled UK health experts call for ban on tackling in school rugby – we are told: “The letter is the first stage of a campaign that will include a petition on the change.org website which, if it receives 100,000 signatures, will trigger the consideration of a debate by MPs on the issue.”
Now the gush police love online petitions. You can get 100,000 people to sign practically anything if you make it sound worthy enough. So long as it doesn’t require any effort or financial input on the part of those whose buttons you are pressing, they will press yours in return to give you the votes you need.
The driver for this new round of tosh is the fact that ‘more than 70 doctors and health experts have called for a ban on tackling in school rugby games.’
Most people who read the article will just scan the list of names featuring the title Doctor and think it must be a good cause. But, in reality, the document has two core signatures: those of two professors in areas which sound more related to social engineering than to anything physical (Sport and Masculinities – whatever that is – and Public Health Research and Policy).
The remaining signatures are ‘supporting’, of which two are actual practicing doctors (i.e. people who receive patients).
The rest are academics in such hard-hitting disciplines as Institute of Human Identity (Dr. Charles Silverstein) and Health Inequalities Group (Robin Ireland). The closest most of these people will have come to a sporting injury will be a paper cut from picking up a dissertation from the wrong angle.
This, clearly, has nothing to do with rugby and everything to do with imposing yet more unreality on the human tribe.
I was not a rugby player myself; I preferred soccer and athletics at school. But I have played rugby, and I am bright enough to understand one of its key features: it is meant to hurt. That’s why boys play it.
Getting punched and kicked when you’re nine is no great tragedy. Living in a hermetically sealed, bubble-wrapped environment without punches and slaps and kicks until you are twenty-something, and having no chance to test yourself, to build up stamina, courage, strength and will: that is a tragedy.
By the time these social engineers finish with school rugby, there will be no goal posts; you’ll just pass the ball around in a big circle making sure everyone gets a turn – being particularly careful to see that people in wheelchairs get two turns. You’ll score a try by explaining how much you feel you deserve one. But it won’t be a try for your side. The points will be shared among the players on the basis of who is most deserving. And when it’s over everyone will get a medal.
https://www.rt.com/op-edge/334733-education-mediocrity-rugby-feelings-compassion/
I've been in my current job for about a year and a half now, and it looks like I need to have a plan B. Things may improve, but it's unclear how and when they might.
It's about two and a half years since I started to look for the current job I have now. One thing I've noticed since then is the decline in the quality of recruitment agencies and consultants. In my previous role I was involved in recruiting, and so had to deal with them from the other end.
I registered with some agencies back then that never removed me from their database despite having been asked and during all that time I get daily spam for completely inappropriate jobs in completely inappropriate locations. The most absurd was for someone to operate an industrial furnace. I'm a software engineer (of sorts).
What is most incredible now is that I received a completely unsolicited email, out of the blue from someone I don't recall ever talking to inviting me to apply for a position, in the wrong location, with a major American company. He didn't hide the company name or the job details. He just emailed me the company name, location and job specs uninvited! I don't suppose that this supplier of very expensive printer ink would be too happy if they knew.
I did not furnish him with a reply.
There was a functionally-illiterate email a couple of days ago from an agency I registered with over five years ago. Spelling? Punctuation? Grammar? A sentence? Look and see.
Hi
Im looking for a couple of Software Engineers to work within a leading edge R&D organisation in Cambridge on long term contract. Im seeking experience of build, make file, GNU tools and C.
I was interested to know if you could be interested , please let me know
So I replied and he blurted out the name of the company, and would you believe I know people who have just run away from there screaming.
It's a small world, and shrinking.
So I get a letter from AT&T letting me know they're upgrading the network in my area and will no longer be supporting 2G devices. Alas, my Nokia N900 must be replaced.
I ordered a Jolla phone off Ebay from a guy in Italy. Brand new in the box. Got the SIM card and everything transferred over all official-like at the AT&T store. Works fine so far.
I've never owned an Android or Apple phone and my N900 replaced a 7-year old Razr so the whole swipe/gestures thing was new to me. Apparently Jolla designed SailFish O/S to be easy to use w/ one hand (finger?). After installing 3 rounds of updates, I took the tutorial on how to use gestures to navigate the interface.
About half-way through the tutorial, it suddenly struck me how far we've really come, when we had to ask a stranger for the time.
One of the worst aspects of being homeless is being sick and homeless. I'm staying at the shelter, so I have a place to sleep at night, but I can't just stay in bed, they roust us out in the morning.
Portland has Right 2 Dream Too - "The Tent Camp" - a homeless shelter operated by the homeless themselves. It's forward thinking in that it permits one to sleep during the day. So I get up in the morning, eat breakfast, then go to R2D2 and sleep all day.
Today I've decided to stay up all night. I'm at Starbucks now, I will go to Shari's later. I was doing some open source work for haiku, but now I feel too out of it mentally to work competently. So I reload various web pages - kuro5hin, soylent, facebook - trying to entertain myself.
At least I don't have salmonella. I did once, that was awful. To have the shits when one is homeless would totally suck.
My case manager told me my housing paperwork "has been processed". He does not know what that means in terms of actually being accepted but will try to find out tomorrow.
Andre is a good guy, but it still perplexes me that the mental health clinic thinks I need a case manager. Am I really that crazy?
Sometimes I look back upon the manifestoes I've written and conclude, yes I really am that crazy.
// ==UserScript==
// @name Soylent Upgrade
// @version 12.0
// @grant none
// @match http://soylentnews.org/*article.pl*
// @match http://*.soylentnews.org/*article.pl*
// @match https://soylentnews.org/*article.pl*
// @match https://*.soylentnews.org/*article.pl*// @match http://soylentnews.org/*submit.pl*
// @match http://*.soylentnews.org/*submit.pl*
// @match https://soylentnews.org/*submit.pl*
// @match https://*.soylentnews.org/*submit.pl*// @match http://soylentnews.org/*admin.pl*
// @match http://*.soylentnews.org/*admin.pl*
// @match https://soylentnews.org/*admin.pl*
// @match https://*.soylentnews.org/*admin.pl*// @match http://soylentnews.org/*comments.pl*
// @match http://*.soylentnews.org/*comments.pl*
// @match https://soylentnews.org/*comments.pl*
// @match https://*.soylentnews.org/*comments.pl*// @match http://soylentnews.org/*journal.pl*
// @match http://*.soylentnews.org/*journal.pl*
// @match https://soylentnews.org/*journal.pl*
// @match https://*.soylentnews.org/*journal.pl*
// ==/UserScript==// User Options:
var simplifyChars = true; // Change to false if you don't want stylized quotation marks, ellipses, etc. to be replaced
var stripEmail = false; // Remove auto-filled email from submission
var doiChecker = true; // Add Crossref search to DOIs in the summary// End User Options
/* ! http://mths.be/fromcodepoint v0.1.0 by @mathias */
if (!String.fromCodePoint) { (function() { var defineProperty = (function() { try { var object = {}; var $defineProperty = Object.defineProperty; var result = $defineProperty(object, object, object) && $defineProperty; } catch(error) {} return result; }()); var stringFromCharCode = String.fromCharCode; var floor = Math.floor; var fromCodePoint = function() { var MAX_SIZE = 0x4000; var codeUnits = []; var highSurrogate; var lowSurrogate; var index = -1; var length = arguments.length; if (!length) { return ''; } var result = ''; while (++index < length) { var codePoint = Number(arguments[index]); if ( !isFinite(codePoint) || codePoint < 0 || codePoint > 0x10FFFF || floor(codePoint) != codePoint ) { throw RangeError('Invalid code point: ' + codePoint); } if (codePoint <= 0xFFFF) { codeUnits.push(codePoint); } else { codePoint -= 0x10000; highSurrogate = (codePoint >> 10) + 0xD800; lowSurrogate = (codePoint % 0x400) + 0xDC00; codeUnits.push(highSurrogate, lowSurrogate); } if (index + 1 == length || codeUnits.length > MAX_SIZE) { result += stringFromCharCode.apply(null, codeUnits); codeUnits.length = 0; } } return result; }; if (defineProperty) { defineProperty(String, 'fromCodePoint', { 'value': fromCodePoint, 'configurable': true, 'writable': true }); } else { String.fromCodePoint = fromCodePoint; } }()); }// Add "Quote This" buttons to all initially visible comments
var spans = document.getElementsByTagName("span");
for (var x=0; x<spans.length; x++)
{
if (spans[x].id.indexOf("reply_link_")==0)
{
var button = document.createElement("span");
button.setAttribute("class","nbutton");
var p = document.createElement("p");
var b = document.createElement("b");
var a = document.createElement("a");
// Set the href of the "Quote This" button to the href of the "Reply to This" button, with the escaped contents of the post added to URL and any [domain.names] following links in the post cut out:
a.setAttribute("href",spans[x].getElementsByTagName("a")[0].href.replace("#post_comment","&postercomment="+escape("<blockquote>"+document.getElementById("comment_body_"+spans[x].id.replace("reply_link_","")).innerHTML.replace(/<\/a>\s\[.*?\..*?\]/g,"<\/a>")+"<\/blockquote>\n\n")+"#post_comment"));
// To Do: Shorten URLs longer than 2000 characters
a.appendChild(document.createTextNode("Quote This"));
b.appendChild(a);
p.appendChild(b);
button.appendChild(p);
spans[x].parentNode.insertBefore(button, spans[x].nextSibling);
spans[x].parentNode.insertBefore(document.createTextNode(" "), spans[x].nextSibling); // Divider
}
}// DOI checker in the summary
if (doiChecker && window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/article\.pl/)!=-1)
{
var summary = document.getElementById("articles").getElementsByClassName("intro")[0];
summary.innerHTML = summary.innerHTML.replace(/(\(|\[)DOI: (10[^\s]*)(\)|\])/gi,"$1DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
summary.innerHTML = summary.innerHTML.replace(/(\(|\[)open, DOI: (10[^\s]*)(\)|\])/gi,"$1open, DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
var summary2 = document.getElementById("articles").getElementsByClassName("full")[0];
summary2.innerHTML = summary2.innerHTML.replace(/(\(|\[)DOI: (10[^\s]*)(\)|\])/gi,"$1DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
summary2.innerHTML = summary2.innerHTML.replace(/(\(|\[)open, DOI: (10[^\s]*)(\)|\])/gi,"$1open, DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
}// Empty email input area, but only on submission page
if (stripEmail && window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/submit\.pl/)!=-1)
{
var boxes = document.getElementsByTagName("input");
for (var x=0; x<boxes.length; x++)
{
if (boxes[x].name == "email")
{
boxes[x].value = "";
}
}
}// Add title case button next to title/subj field on Story Submissions, Submission Preview, and Story Preview
if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/(submit|admin)\.pl/)!=-1)
{
var boxes = document.getElementsByTagName("input");
for (var x=0; x<boxes.length; x++)
{
if (boxes[x].name == "title" || boxes[x].name == "subj")
{
boxes[x].id = "storyTitle";
var button = document.createElement("input");
button.setAttribute("type","button");
button.setAttribute("value","Title Case");
button.setAttribute("title","Convert title to title case.");
button.setAttribute("onclick","document.getElementById('storyTitle').value=document.getElementById('storyTitle').value.replace(/^\\s/gi,'').replace(/\\b([a-z])/gi,function(m, p1){return p1.toUpperCase();}).replace(/\\b(at|of|is|and|to|in|by|as|its|be|the|on|a|an|but|or|for)\\b/gi,function(m, p1){return p1.toLowerCase();}).replace(/^([a-z])/gi,function(m, p1){return p1.toUpperCase();}).replace(/:\\s([a-z])/gi,function(m, p1){return ': '+p1.toUpperCase();}).replace(/([a-z])['\u2019]([a-z])/gi,function(m, p1, p2){return p1+'\\''+p2.toLowerCase();}).replace(/\\bx(86|64)\\b/gi,'x$1').replace(/\\s$/gi,'');");
boxes[x].parentNode.insertBefore(button, boxes[x].nextSibling);
if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/admin\.pl/)!=-1 || boxes[x].name == "subj")
{
boxes[x].parentNode.insertBefore(document.createElement("br"), boxes[x].nextSibling);
}
else
{
boxes[x].parentNode.insertBefore(document.createTextNode(" "), boxes[x].nextSibling);
}
}
}
}// Add warning for creating a story in the past
if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/admin\.pl/)!=-1)
{
var boxes = document.getElementsByTagName("input");
for (var x=0; x<boxes.length; x++)
{
if (boxes[x].name == "op" && (boxes[x].value == "save"))
{
// New onclick extracts the post date, compares to the current date, and only submits if the post date is in the future or the user overrides the warning:
boxes[x].setAttribute("onclick","var d = new Date(document.getElementById('slashstoryform').elements['time'].value.replace(/\\s/,'T')); var a = true; if (d < Date.now()){a = confirm('Are you sure you want to post a story '+(Math.round((Date.now()-d)/60000))+' minutes in the past?');} if (a) {st_submit(this);}");
}
}
}// Add draft capabilties to story submission form
if (window.location.href.search(/https?\:\/\/.*soylentnews\.org.*?\/submit\.pl/)!=-1)
{
var boxes = document.getElementsByTagName("textarea");
for (var x=0; x<boxes.length; x++)
{
if (boxes[x].name == "story")
{
var p = document.createElement("p");// Save Draft button
var button = document.createElement("input");
button.setAttribute("type","button");
button.setAttribute("value","Save Draft");
button.setAttribute("onclick","saveSoydraft();");
p.appendChild(button);p.appendChild(document.createTextNode(" "));
// Discard Draft button
var button = document.createElement("input");
button.setAttribute("type","button");
button.setAttribute("id","discardDraft");
button.setAttribute("value","Discard");
// Disable the Discard Draft button onload if no draft is available
if(!localStorage.getItem("soydraft"))
{
button.setAttribute("disabled","disabled");
}
else
{
button.setAttribute("onclick","discardSoydraft();");
}
p.appendChild(button);p.appendChild(document.createTextNode(" "));
// Autosave checkbox
var span = document.createElement("span");
span.setAttribute("id","autosaveBar");
// Hide autosave checkbox onload if no draft is available
if (document.getElementById("storyTitle").value == "" && boxes[x].value == "")
{
if(localStorage.getItem("soydraft"))
{
span.setAttribute("style","visibility:visible;");
}
else
{
span.setAttribute("style","visibility:hidden;");
}
}
span.appendChild(document.createTextNode("Autosave?"));
var checkbox = document.createElement("input");
checkbox.setAttribute("type","checkbox");
checkbox.setAttribute("id","autosave");
checkbox.setAttribute("value","");
checkbox.setAttribute("onclick","if (this.checked==false){autosaveOff();} else {autosaveOn();}");
checkbox.setAttribute("style","vertical-align:middle;");
span.appendChild(checkbox);
span.appendChild(document.createTextNode(" "));
p.appendChild(span);// "Saved." text will appear and fade out whenever a draft is saved
var span2 = document.createElement("span");
span2.setAttribute("id","autosaveState");
span2.setAttribute("style","opacity:0;");
span2.appendChild(document.createTextNode("Saved."));
p.appendChild(span2);boxes[x].parentNode.insertBefore(p, boxes[x]);
// Load draft if it exists, but only if workspace is clear
if (document.getElementById("storyTitle").value == "" && boxes[x].value == "")
{
if(localStorage.getItem("soydraft"))
{
document.getElementById("storyTitle").value = decodeURI(JSON.parse(localStorage.getItem("soydraft"))[0]);
document.getElementById("primaryskid").value = JSON.parse(localStorage.getItem("soydraft"))[1];
document.getElementById("tid").value = JSON.parse(localStorage.getItem("soydraft"))[2];
boxes[x].value = decodeURI(JSON.parse(localStorage.getItem("soydraft"))[3]);
}
}
}
}
}var boxes = document.getElementsByTagName("textarea");
for (var x=0; x<boxes.length; x++)
{
if (boxes[x].name == "introtext" || boxes[x].name == "bodytext" || boxes[x].name == "story")
{
var temp = boxes[x].value; // Retrieve textarea contents
temp = temp.replace(/<\/p><p>/g,"<\/p>\n\n<p>"); // Add newlines between paragraphs
temp = temp.replace(/<br>\s?<br>/g,"<\/p>\n\n<p>"); // Convert double break tags to paragraph tags
temp = temp.replace(/<\/blockquote><p>/g,"<\/blockquote>\n\n<p>"); // Add newlines after blockquotes
temp = temp.replace(/<\/p><blockquote>/g,"<\/p>\n\n<blockquote>"); // Add newlines before blockquotes
temp = temp.replace(/<blockquote><div><p>/g,"<blockquote><div>\n\n<p>"); // Add newlines within start of blockquotes
temp = temp.replace(/<\/p><\/div><\/blockquote>/g,"<\/p>\n\n<\/div><\/blockquote>"); // Add newlines within end of blockquotes
temp = temp.replace(/<\/blockquote><blockquote>/g,"<\/blockquote>\n\n<blockquote>"); // Add newlines between two blockquotes
temp = temp.replace(/<p class="byline">\s/i,"<p class=\"byline\">"); // Remove extra space from byline
temp = temp.replace(/<p>\s/g,"<p>"); // Remove extra space from start of paragraph
temp = temp.replace(/\s<\/p>/g,"<\/p>"); // Remove extra space from end of paragraph
temp = temp.replace(/<\/li><li>/g,"<\/li>\n<li>"); // Add newlines between list items
temp = temp.replace(/(<\/li>)(<\/[u|o]l>)/g,'$1\n$2'); // Add newline after last list item
temp = temp.replace(/(<\/p>)(<[u|o]l>)/g,'$1\n$2'); // Add newlines before lists
temp = temp.replace(/<p>\[...\]/g,"<p>[...] "); // Add space within beginning of foreshortened paragraph
while (temp.indexOf(" ")!=-1)
{
temp = temp.replace(/ /g," "); // Replace double spaces with single spaces
}
if (simplifyChars)
{
temp = temp.replace(/\u2018/g,"'"); // 'LEFT SINGLE QUOTATION MARK' (U+2018) to (U+0027)
temp = temp.replace(/\u2019/g,"'"); // 'RIGHT SINGLE QUOTATION MARK' (U+2019) to (U+0027)
temp = temp.replace(/\u201C/g,"\""); // 'LEFT DOUBLE QUOTATION MARK' (U+201C) to (U+0022)
temp = temp.replace(/\u201D/g,"\""); // 'RIGHT DOUBLE QUOTATION MARK' (U+201D) to (U+0022)
temp = temp.replace(/\u2026/g,"..."); // 'HORIZONTAL ELLIPSIS' (U+2026) to (U+002E) x3
}
boxes[x].value = temp;
boxes[x].rows = 32; // Expand textarea height to 32 rows
}
var toolbar = document.createElement("div");// Blockquote button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","Blockquote");
tempbutton.setAttribute("title","Wrap \u003Cblockquote\u003E tags around the selected text.");
tempbutton.setAttribute("onclick","addBlockquote(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);// Paragraph and Line break buttons
var tempspan = document.createElement("span");
tempspan.setAttribute("id","htmlFormatButtons");
if (document.getElementById("posttype") && document.getElementById("posttype").selectedIndex == 0)
{
tempspan.setAttribute("style","display:none;"); // Hide if initial post type option is "Plain Old Text"
}
if (document.getElementById("posttype"))
{
document.getElementById("posttype").addEventListener("change", function() {if (document.getElementById('posttype').selectedIndex == 0) {document.getElementById('htmlFormatButtons').style.display = 'none'} else {document.getElementById('htmlFormatButtons').style.display = 'inline'}}); // Change visibility of these buttons based on value of post type
}
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","P");
tempbutton.setAttribute("title","Wrap \u003Cp\u003E tags around the selected text.");
tempbutton.setAttribute("onclick","addPara(document.getElementsByTagName('textarea')["+x+"]);");
tempspan.appendChild(tempbutton);
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","BR");
tempbutton.setAttribute("title","Insert a line break.");
tempbutton.setAttribute("onclick","addBreak(document.getElementsByTagName('textarea')["+x+"]);");
tempspan.appendChild(tempbutton);
toolbar.appendChild(tempspan);// HR button, if editing a story
if (boxes[x].name == "introtext" || boxes[x].name == "bodytext" || boxes[x].name == "story")
{
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","HR");
tempbutton.setAttribute("title","Insert a horizontal rule.");
tempbutton.setAttribute("style","text-decoration:underline overline;");
tempbutton.setAttribute("onclick","addHRule(document.getElementsByTagName('textarea')["+x+"]);");
tempspan.appendChild(tempbutton);
toolbar.appendChild(tempspan);
}// URL button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","URL");
tempbutton.setAttribute("title","Create a hyperlink around the selected text.");
tempbutton.setAttribute("style","text-decoration:underline;");
tempbutton.setAttribute("onclick","addHyperlink(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);
toolbar.appendChild(document.createTextNode(" "));// Bold button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","B");
tempbutton.setAttribute("title","Bold");
tempbutton.setAttribute("style","font-weight:bold;");
tempbutton.setAttribute("onclick","addBold(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);// Italic button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","I");
tempbutton.setAttribute("title","Italic");
tempbutton.setAttribute("style","font-style:italic;");
tempbutton.setAttribute("onclick","addItalic(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);// Strike button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","S");
tempbutton.setAttribute("title","Strikethrough");
tempbutton.setAttribute("style","text-decoration:line-through;");
tempbutton.setAttribute("onclick","addStrike(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);toolbar.appendChild(document.createTextNode(" ")); // Divider
// Code button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","Code");
tempbutton.setAttribute("title","Wrap \u003Cecode\u003E tags around the selected text.");
tempbutton.setAttribute("style","font-family:monospace;");
tempbutton.setAttribute("onclick","addEcode(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);// Teletype button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","TT");
tempbutton.setAttribute("title","Wrap \u003Ctt\u003E (teletype, i.e. monospace) tags around the selected text.");
tempbutton.setAttribute("style","font-family:monospace;");
tempbutton.setAttribute("onclick","addTT(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);// Small button, if editing a story
if (boxes[x].name == "introtext" || boxes[x].name == "bodytext" || boxes[x].name == "story")
{
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","\u0073\u1D0D\u1D00\u029F\u029F");
tempbutton.setAttribute("title","Wrap \u003Csmall\u003E tags around the selected text.");
// tempbutton.setAttribute("style","font-size:75%;");
tempbutton.setAttribute("onclick","addSmall(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);
}toolbar.appendChild(document.createTextNode(" ")); // Divider
// Superscript button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","x\u00B2");
tempbutton.setAttribute("title","Superscript");
tempbutton.setAttribute("style","font-family:monospace;");
tempbutton.setAttribute("onclick","addSuper(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);// Subscript button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","x\u2082");
tempbutton.setAttribute("title","Subscript");
tempbutton.setAttribute("style","font-family:monospace;");
tempbutton.setAttribute("onclick","addSubsc(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);toolbar.appendChild(document.createTextNode(" ")); // Divider
// Ordered list button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","1. List");
tempbutton.setAttribute("title","Insert an ordered list or convert newline-separated text into an ordered list.");
tempbutton.setAttribute("onclick","addOrdlist(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);// Unordered list button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","\u2022 List");
tempbutton.setAttribute("title","Insert an unordered list or convert newline-separated text into an unordered list.");
tempbutton.setAttribute("onclick","addUnordlist(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);toolbar.appendChild(document.createElement("br")); // Divider
// Create 7 macro buttons
for (var i=1; i<=7; i++)
{
// Create macros if they don't exist
if(!localStorage.getItem("soymacro"+i))
{
localStorage.setItem("soymacro"+i,JSON.stringify(["M"+i,"string","Sample Text"]));
//localStorage.setItem("soymacro"+i,JSON.stringify(["M"+i,"regexp","/a/gi","b"]));
}
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("id","soymacros"+x+"button"+i);
tempbutton.setAttribute("value",JSON.parse(localStorage.getItem("soymacro"+i))[0]);
if (JSON.parse(localStorage.getItem("soymacro"+i))[1]=="string")
{
if (JSON.parse(localStorage.getItem("soymacro"+i))[2].length < 40)
{
tempbutton.setAttribute("title","Insert or replace selected text with: " + JSON.parse(localStorage.getItem("soymacro"+i))[2]);
}
else
{
tempbutton.setAttribute("title","Insert or replace selected text with: " + JSON.parse(localStorage.getItem("soymacro"+i))[2].substring(0,40)+"...");
}
tempbutton.setAttribute("onclick","macroChoose(document.getElementsByTagName('textarea')["+x+"],"+i+");");
}
else
{
tempbutton.setAttribute("title","Replace text matched by the regular expression: " + JSON.parse(localStorage.getItem("soymacro"+i))[2] + " with: " + JSON.parse(localStorage.getItem("soymacro"+i))[3]);
tempbutton.setAttribute("onclick","macroChoose(document.getElementsByTagName('textarea')["+x+"],"+i+");");
}
toolbar.appendChild(tempbutton);
}
// Create macros edit button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","Edit");
tempbutton.setAttribute("title","Configure user macros or discard changes.");
tempbutton.setAttribute("onclick","if (document.getElementById('macrobar"+x+"').style.display == 'none') {document.getElementById('macrobar"+x+"').style.display = 'block'; macrobarInit("+x+");} else {document.getElementById('macrobar"+x+"').style.display = 'none'; if (p = document.getElementById('postercomment')) { var x = p.offsetTop; while (p = p.offsetParent) {x += p.offsetLeft;} window.scrollTo(0,x-75);}}");
toolbar.appendChild(tempbutton);toolbar.appendChild(document.createElement("br")); // Divider
// Despace button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value","Despace");
tempbutton.setAttribute("title","Delete newlines within the selection.");
tempbutton.setAttribute("onclick","despace(document.getElementsByTagName('textarea')["+x+"]);");
toolbar.appendChild(tempbutton);// Symbol button
var tempbutton = document.createElement("input");
tempbutton.setAttribute("type","button");
tempbutton.setAttribute("value",":-)");
tempbutton.setAttribute("title","Insert a symbol.");
tempbutton.setAttribute("onclick","if (document.getElementById('smilebar"+x+"').style.display == 'none') {document.getElementById('smilebar"+x+"').style.display = 'block'} else {document.getElementById('smilebar"+x+"').style.display = 'none'; if (p = document.getElementById('postercomment')) { var x = p.offsetTop; while (p = p.offsetParent) {x += p.offsetLeft;} window.scrollTo(0,x-75); } }");
toolbar.appendChild(tempbutton);
boxes[x].parentNode.insertBefore(toolbar, boxes[x].nextSibling);// Symbol list
var smilebar = document.createElement("div");
smilebar.setAttribute("style","-moz-user-select:none; -webkit-user-select:none; display:none; font-size:16pt; max-height:240px; overflow:auto; padding:0.5em;");
smilebar.setAttribute("id","smilebar"+x);
var smiles = ["\u0026amp;","\u0026lt;","\u0026gt;"];var codes = [[161,169],[171,172],[174],[176,177],[180,183],[187,191],[215],[224,255],[402],[629],[632],[916],[920],[931],[934],[937],[945,946],[956],[960],[963],[8216,8221],[8226],[8230],[8251],[8364],[8478],[8482],[8528,8542],[8585],[8592,8652],[8712,8716],[8721],[8730],[8733,8734],[8736],[8743,8749],[8756,8757],[8773],[8776],[8800,8805],[8834,8837],[8984],[9760],[9762,9765],[9770],[9773,9775],[9784,9794],[9812,9831],[9833,9842],[9850],[9855,9861],[9874,9877],[9882,9885],[9888,9893],[9913],[9940],[9962],[9971],[9981],[9992,10087],[65533],[127744,127756],[127759],[127775,127776],[127797],[127801],[127804,127812],[127817],[127820,127822],[127828,127831],[127838,127839],[127843],[127849],[127855],[127860,127867],[127891],[127904,127911],[127918],[127939],[127942],[127977],[128025],[128074,128078],[128123,128131],[128137,128142],[128148,128150],[128152],[128158],[128161,128164],[128168,128170],[128172],[128176,128177],[128187],[128189,128190],[128193,128194],[128197],[128203,128204],[128206],[128214],[128225,128227],[128231,128233],[128241],[128244],[128246],[128250,128252],[128259],[128266,128270],[128273,128276],[128278,128280],[128286],[128293,128299],[128302,128303],[128509,128565],[128659],[128684,128685]];
for (var i=0; i<codes.length; i++) { if (codes[i].length > 1) { for (var j=codes[i][0]; j<=codes[i][1]; j++) { smiles[smiles.length] = String.fromCodePoint(j); } } else { smiles[smiles.length] = String.fromCodePoint(codes[i][0]); } } // Populate smiles array with code ranges converted to individual characters
smiles = smiles.concat(["xD",":-)",":^)","(^_^;)","(\u00A0\u0361\u00B0\u00A0\u035C\u0296\u00A0\u0361\u00B0)","(\u00A0\u0361\u007E\u00A0\u035C\u0296\u00A0\u0361\u00B0)\uFEFF","\u00AF\u005C\u005F(\u30C4)\u005F\u002F\u00AF","(\u256F\u00B0\u25A1\u00B0\uFF09\u256F\uFE35\u00A0\u253B\u2501\u253B","(\u30CE\u0CA0\u76CA\u0CA0)\u30CE\u5F61\u253B\u2501\u253B","(\u0060\uFF65\u03C9\uFF65\u00B4)","\u0CA0_\u0CA0","\u0295\u2022\u1D25\u2022\u0294","(\u3065\uFFE3\u00A0\u00B3\uFFE3)\u3065","\u0669(\u204E\u275B\u1D17\u275B\u204E)\u06F6","\u30FD\u0F3C\u0E88\u0644\u035C\u0E88\u0F3D\uFF89","(\uB208\u2038\uB208)","\u006F(\u3003\uFF3E\u25BD\uFF3E\u3003)\u006F","\u0028\u0028\u30FE\u0028\u2267\u76BF\u2266\uFF1B\u0029\u30CE\uFF3F\u0029\u0029","\u30FD\u0028\u002A\u2312\u2207\u2312\u002A\u0029\uFF89","\u0028\u2267\u2207\u2266\u0029\u002F"]); // Add in arbitrary emoticons
for (var i=0; i<smiles.length; i++)
{
var smile = document.createElement("span");
smile.setAttribute("style","cursor:pointer; padding:2px; white-space:nowrap;");
smile.setAttribute("onclick","addSmile(document.getElementsByTagName('textarea')["+x+"],'"+smiles[i].replace("\u005C","\u005C\u005C")+"');");
smile.appendChild(document.createTextNode(smiles[i]));
smilebar.appendChild(smile);
if (i+1<smiles.length)
{
smilebar.appendChild(document.createTextNode(" "));
}
}
toolbar.parentNode.insertBefore(smilebar, toolbar.nextSibling);// Create macro configuration interface
var macrobar = document.createElement("div");
macrobar.setAttribute("style","display:none; padding:0.5em;");
macrobar.setAttribute("id","macrobar"+x);
var table = document.createElement("table");
var tr = document.createElement("tr");
var th = document.createElement("th");
th.appendChild(document.createTextNode("Name"));
tr.appendChild(th);
var th = document.createElement("th");
th.appendChild(document.createTextNode("Type"));
tr.appendChild(th);
var th = document.createElement("th");
th.appendChild(document.createTextNode("String | Expression"));
tr.appendChild(th);
var th = document.createElement("th");
th.setAttribute("title","Only used with expressions. Parenthesized substring matches (e.g. '$1') can be used.");
th.setAttribute("style","cursor:help;");
th.appendChild(document.createTextNode("Expression Replace"));
tr.appendChild(th);
table.appendChild(tr);
for (var i=1; i<=7; i++)
{
var tr = document.createElement("tr");// Macro name
var td = document.createElement("td");
var name = document.createElement("input");
name.setAttribute("type","text");
name.setAttribute("id","soymacros"+x+"name"+i);
td.appendChild(name);
tr.appendChild(td);// Macro type
var td = document.createElement("td");
var rad = document.createElement("input");
rad.setAttribute("type","radio");
rad.setAttribute("name","soymacros"+x+"type"+i);
rad.setAttribute("id","soymacros"+x+"type"+i+"S");
td.appendChild(rad);
td.appendChild(document.createTextNode(" String "));
var rad = document.createElement("input");
rad.setAttribute("type","radio");
rad.setAttribute("name","soymacros"+x+"type"+i);
rad.setAttribute("id","soymacros"+x+"type"+i+"E");
td.appendChild(rad);
td.appendChild(document.createTextNode(" Expression "));
tr.appendChild(td);// Field A
var td = document.createElement("td");
var f1 = document.createElement("input");
f1.setAttribute("type","text");
f1.setAttribute("id","soymacros"+x+"fieldA"+i);
td.appendChild(f1);
tr.appendChild(td);// Field B
var td = document.createElement("td");
var f1 = document.createElement("input");
f1.setAttribute("type","text");
f1.setAttribute("id","soymacros"+x+"fieldB"+i);
td.appendChild(f1);
tr.appendChild(td);table.appendChild(tr);
}
macrobar.appendChild(table);var p = document.createElement("p");
var save = document.createElement("input");
save.setAttribute("type","button");
save.setAttribute("value","Save");
save.setAttribute("title","Save any edits to the macro configuration.");
save.setAttribute("onclick","macrobarSave("+x+");");
p.appendChild(save);
p.appendChild(document.createTextNode(" "));
var guide = document.createElement("a");
guide.setAttribute("href","https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions");
guide.setAttribute("target","_blank");
guide.appendChild(document.createTextNode("Regexp Guide"));
p.appendChild(guide);
macrobar.appendChild(p);toolbar.parentNode.insertBefore(macrobar, toolbar.nextSibling);
}var temp = document.createElement("script");
// Add selection handling function
temp.appendChild(document.createTextNode("function getSelection(textarea) { if ('selectionStart' in textarea) { if (textarea.selectionStart != textarea.selectionEnd) { return [textarea.selectionStart,textarea.selectionEnd]; } } } "));// Add comment formatting buttons
temp.appendChild(document.createTextNode("function addBlockquote(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<blockquote>'+area.value.substring(sel[0],sel[1])+'<\/blockquote>' + area.value.substring(sel[1]); } } function addPara(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<p>'+area.value.substring(sel[0],sel[1])+'<\/p>' + area.value.substring(sel[1]); } } function addBreak(area) { if ('selectionStart' in area) { var pos = area.selectionStart; area.value = area.value.substring(0,area.selectionStart) + '<br>' + area.value.substring(pos); area.focus(); area.setSelectionRange(pos+4,pos+4) } } function addHRule(area) { if ('selectionStart' in area) { var pos = area.selectionStart; area.value = area.value.substring(0,area.selectionStart) + '<hr>' + area.value.substring(pos); area.focus(); area.setSelectionRange(pos+4,pos+4) } } function addHyperlink(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { url = prompt('URL:', 'https://'); area.value = area.value.substring(0,sel[0]) + '<a href=\"'+url+'\">'+area.value.substring(sel[0],sel[1])+'<\/a>' + area.value.substring(sel[1]); } } function addBold(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<b>'+area.value.substring(sel[0],sel[1])+'<\/b>' + area.value.substring(sel[1]); } } function addItalic(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<em>'+area.value.substring(sel[0],sel[1])+'<\/em>' + area.value.substring(sel[1]); } } function addStrike(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<strike>'+area.value.substring(sel[0],sel[1])+'<\/strike>' + area.value.substring(sel[1]); } } function addEcode(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<ecode>'+area.value.substring(sel[0],sel[1])+'<\/ecode>' + area.value.substring(sel[1]); } } function addTT(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<tt>'+area.value.substring(sel[0],sel[1])+'<\/tt>' + area.value.substring(sel[1]); } } function addSmall(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<small>'+area.value.substring(sel[0],sel[1])+'<\/small>' + area.value.substring(sel[1]); } } function addSuper(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<sup>'+area.value.substring(sel[0],sel[1])+'<\/sup>' + area.value.substring(sel[1]); } } function addSubsc(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + '<sub>'+area.value.substring(sel[0],sel[1])+'<\/sub>' + area.value.substring(sel[1]); } } "));// Add list creation functions
temp.appendChild(document.createTextNode("function addOrdlist(area) { if ('selectionStart' in area) { if (area.selectionStart != area.selectionEnd) { area.value = area.value.substring(0,area.selectionStart) + '<ol><li>' + area.value.substring(area.selectionStart,area.selectionEnd).replace(/\\n/g,'<\/li>\\n<li>').replace(/\\n<li><\\/li>/g,'') + '<\/li><\/ol>' + area.value.substring(area.selectionEnd); } else { temp = '<ol>'; while(listitem = prompt('Enter a list item. Leave the box empty or press Cancel to complete the list:', '')) { temp += '<li>' + listitem + '<\/li>\\n'; } area.value = area.value.substring(0,area.selectionStart) + temp.substring(0,temp.length-1) + '<\/ol>' + area.value.substring(area.selectionStart); } } } function addUnordlist(area) { if ('selectionStart' in area) { if (area.selectionStart != area.selectionEnd) { area.value = area.value.substring(0,area.selectionStart) + '<ul><li>' + area.value.substring(area.selectionStart,area.selectionEnd).replace(/\\n/g,'<\/li>\\n<li>').replace(/\\n<li><\\/li>/g,'') + '<\/li><\/ul>' + area.value.substring(area.selectionEnd); } else { temp = '<ul>'; while(listitem = prompt('Enter a list item. Leave the box empty or press Cancel to complete the list:', '')) { temp += '<li>' + listitem + '<\/li>\\n'; } area.value = area.value.substring(0,area.selectionStart) + temp.substring(0,temp.length-1) + '<\/ul>' + area.value.substring(area.selectionStart); } } }"));// Add macro functions
temp.appendChild(document.createTextNode("function macroChoose(area,x) { if (JSON.parse(localStorage.getItem('soymacro'+x))[1]=='string') { macroString(area,x); } else { macroRegexp(area,x); } }"));
temp.appendChild(document.createTextNode("function macroString(area,x) { var sel = getSelection(area); if (sel && sel[0] != sel[1]) { area.value = area.value.substring(0,sel[0]) + JSON.parse(localStorage.getItem('soymacro'+x))[2] + area.value.substring(sel[1]); } else if ('selectionStart' in area) { var pos = area.selectionStart; area.value = area.value.substring(0,area.selectionStart) + JSON.parse(localStorage.getItem('soymacro'+x))[2] + area.value.substring(pos); area.focus(); area.setSelectionRange(pos+JSON.parse(localStorage.getItem('soymacro'+x))[2].length,pos+JSON.parse(localStorage.getItem('soymacro'+x))[2].length); } }"));
temp.appendChild(document.createTextNode("function macroRegexp(area,x) { var sel = getSelection(area); if (sel && sel[0] != sel[1]) { var reg = JSON.parse(localStorage.getItem('soymacro'+x))[2]; area.value = area.value.substring(0,sel[0]) + area.value.substring(sel[0],sel[1]).replace(new RegExp(reg.substring(reg.indexOf('/')+1,reg.lastIndexOf('/')), reg.substring(reg.lastIndexOf('/')+1)),JSON.parse(localStorage.getItem('soymacro'+x))[3]) + area.value.substring(sel[1]); } }"));
temp.appendChild(document.createTextNode("function macrobarInit(x) { for (var y=1; y<=7; y++) { document.getElementById('soymacros'+x+'name'+y).value = JSON.parse(localStorage.getItem('soymacro'+y))[0]; if (JSON.parse(localStorage.getItem('soymacro'+y))[1]=='string') { document.getElementById('soymacros'+x+'type'+y+'S').checked = true; } else { document.getElementById('soymacros'+x+'type'+y+'E').checked = true; } document.getElementById('soymacros'+x+'fieldA'+y).value = JSON.parse(localStorage.getItem('soymacro'+y))[2]; if (JSON.parse(localStorage.getItem('soymacro'+y))[1]!='string') { document.getElementById('soymacros'+x+'fieldB'+y).value = JSON.parse(localStorage.getItem('soymacro'+y))[3]; } else { document.getElementById('soymacros'+x+'fieldB'+y).value = ''; } } }"));
temp.appendChild(document.createTextNode("function macrobarSave(x) { for (var y=1; y<=7; y++) { if (document.getElementById('soymacros'+x+'type'+y+'S').checked == true) { localStorage.setItem('soymacro'+y,JSON.stringify([document.getElementById('soymacros'+x+'name'+y).value,'string',document.getElementById('soymacros'+x+'fieldA'+y).value])); } else { localStorage.setItem('soymacro'+y,JSON.stringify([document.getElementById('soymacros'+x+'name'+y).value,'regexp',document.getElementById('soymacros'+x+'fieldA'+y).value,document.getElementById('soymacros'+x+'fieldB'+y).value])); } } document.getElementById('macrobar'+x).style.display = 'none'; var boxes = document.getElementsByTagName('textarea'); for (var z=0; z<boxes.length; z++) { for (var y=1; y<=7; y++) { document.getElementById('soymacros'+z+'button'+y).value = JSON.parse(localStorage.getItem('soymacro'+y))[0]; if (JSON.parse(localStorage.getItem('soymacro'+y))[1]=='string') { if (JSON.parse(localStorage.getItem('soymacro'+y))[2].length < 40) { document.getElementById('soymacros'+z+'button'+y).title = 'Insert or replace selected text with: ' + JSON.parse(localStorage.getItem('soymacro'+y))[2]; } else { document.getElementById('soymacros'+z+'button'+y).title = 'Insert or replace selected text with: ' + JSON.parse(localStorage.getItem('soymacro'+y))[2].substring(0,40)+'...'; } } else { document.getElementById('soymacros'+z+'button'+y).title = 'Replace text matched by the regular expression: ' + JSON.parse(localStorage.getItem('soymacro'+y))[2] + ' with: ' + JSON.parse(localStorage.getItem('soymacro'+y))[3]; } } } }"));// Add despace function
temp.appendChild(document.createTextNode("function despace(area) { var sel = getSelection(area); if (!(sel[0] == 0 && sel[1] == 0)) { area.value = area.value.substring(0,sel[0]) + area.value.substring(sel[0],sel[1]).replace(/\\r/g,' ').replace(/\\n/g,' ').replace(/\\s\\s/g,' ').replace(/\\s\\s/g,' ').replace(/\\s\\s/g,' ').replace(/\\s\\s/g,' ').replace(/\\s\\s/g,' ') + area.value.substring(sel[1]); } }"));// Add unicode insertion function
temp.appendChild(document.createTextNode("function addSmile(area, smile) { if ('selectionStart' in area) { var pos = area.selectionStart; area.value = area.value.substring(0,pos) + smile + area.value.substring(pos); area.focus(); area.setSelectionRange(pos+smile.length,pos+smile.length) } }"));// Add save submission function
temp.appendChild(document.createTextNode("function saveSoydraft() { try {window.clearTimeout(timer);} catch(e){} var boxes = document.getElementsByTagName('textarea'); for (var x=0; x<boxes.length; x++) { if (boxes[x].name == 'story') { if (document.getElementById('storyTitle').value!=''||boxes[x].value!='') { document.getElementById('autosaveBar').style.visibility='visible'; document.getElementById('autosaveState').style.transition='opacity 0s'; document.getElementById('autosaveState').style.opacity='1'; document.getElementById('autosaveState').offsetWidth = document.getElementById('autosaveState').offsetWidth; document.getElementById('autosaveState').style.transition='opacity 1s'; document.getElementById('autosaveState').style.opacity='0'; localStorage.setItem('soydraft',JSON.stringify([encodeURI(document.getElementById('storyTitle').value),document.getElementById('primaryskid').value,document.getElementById('tid').value,encodeURI(boxes[x].value)])); document.getElementById('discardDraft').removeAttribute('disabled'); document.getElementById('discardDraft').setAttribute('onclick','discardSoydraft();'); } else { alert('There is no title or story to save.'); } break; } } }"));// Add discard submission function
temp.appendChild(document.createTextNode("function discardSoydraft() { autosaveOff(); document.getElementById('autosave').checked=false; document.getElementById('autosaveBar').style.visibility='hidden'; localStorage.removeItem('soydraft'); document.getElementById('discardDraft').setAttribute('disabled','disabled'); document.getElementById('discardDraft').removeAttribute('onclick'); }"));// Add autosave functions
temp.appendChild(document.createTextNode("function autosaveOn() { var boxes = document.getElementsByTagName('textarea'); for (var x=0; x<boxes.length; x++) { if (boxes[x].name == 'story') { boxes[x].onkeydown = function() {try {window.clearTimeout(timer);} catch(e){} timer = window.setTimeout(function() { if(document.getElementById(\"autosaveBar\").style.visibility==\"visible\") {saveSoydraft();} }, 3000);}; } } document.getElementById('storyTitle').onkeydown = function() {try {window.clearTimeout(timer);} catch(e){} timer = window.setTimeout(function() { if(document.getElementById(\"autosaveBar\").style.visibility==\"visible\") {saveSoydraft();} }, 3000);}; }"));
temp.appendChild(document.createTextNode("function autosaveOff() { var boxes = document.getElementsByTagName('textarea'); for (var x=0; x<boxes.length; x++) { if (boxes[x].name == 'story') { try {window.clearTimeout(timer);} catch(e){} boxes[x].onkeydown = null; } } document.getElementById('storyTitle').onkeydown = null; }"));document.getElementsByTagName('head')[0].appendChild(temp); // Add script to page
Alcoholic soda was a $116 million business in 2015
Who needs plain ol’ soda when you can have one with a boozy kick? That’s become the mantra of many beverage marketers (and, in turn, many thirsty adults). Yes, hard soda is a thing — a $116 million thing, in fact: That’s the rough sales total for this emerging category in 2015, according to market researcher IRI.
The trend started primarily with alcoholic root beers — specifically, a craft-brewery brand called Not Your Father’s Root Beer, which dominated the category last year (it accounted for $92 million of the $116 million in sales). But it’s now spreading to the major players in the beverage world. Anheuser-Busch InBev has its Best Damn Root Beer brand. And earlier this year, MillerCoors launched Henry’s Hard Soda, a brand that takes as its inspiration one Henry Weinhard, a 19th-century brewer who made a name for himself in Portland, Ore., and who once suggested running beer through the city’s drinking fountains. In other words, Henry liked to have a good time.
Trigger Warning: This content is too spicy for SoylentNews.
Georgetown Law Professors Say Students Are “Traumatized” by Criticisms of Scalia, Demand “Remedies”
On the day the death of Justice Antonin Scalia was announced, Georgetown Law School issued an official statement and press release headlined “Georgetown Law Mourns the Loss of U.S. Supreme Court Justice Antonin Scalia.” It quoted the school’s dean, William M. Treanor, heaping unqualified praise on the highly controversial justice.
“Scalia was a giant in the history of the law, a brilliant jurist whose opinions and scholarship profoundly transformed the law,” Dean Treanor pronounced. “Like countless academics, I learned a great deal from his opinions and his scholarship. In the history of the Court, few justices have had such influence on the way in which the law is understood.” Moreover, “he cared passionately about the profession, about the law and about the future. … We will all miss him.” It went on and on in that vein.
[...] Two Georgetown law professors, Mike Seidman and Gary Peller, disagreed with Dean Treanor’s glowing assessment of Scalia and said so. That night, Seidman posted a brief email to the dean and faculty noting: “Our norms of civility preclude criticizing public figures immediately after their death.” As a result, said Seidman, “all I’ll say is that I disagree with these sentiments and that expressions attributed to the ‘Georgetown Community’ in the press release issued this evening do not reflect the views of the entire community.”
A full two days after Scalia’s death, Professor Peller wrote an email — first to the dean and the faculty, and thereafter to the entire law school — explaining his dissent from the dean’s praise. Like a huge number of Americans generally, and legal professionals particularly, Professor Peller viewed Scalia’s role on the Supreme Court as toxic in the extreme, and he explained why.
Professor Peller wrote that he was “put off” by the official statement praising Scalia, and that he “imagine[s] many other faculty, students, and staff, particularly people of color, women, and sexual minorities, cringed at [the] headline and at the unmitigated praise with which the press release described a jurist that many of us believe was a defender of privilege, oppression, and bigotry, one whose intellectual positions were not brilliant but simplistic and formalistic.” He added that Scalia “was not a legal figure to be lionized or emulated by our students. He bullied lawyers, trafficked in personal humiliation of advocates, and openly sided with the party of intolerance in the ‘culture wars’ he often invoked. In my mind, he was not a ‘giant’ in any good sense.”
So far, so good: right? The Georgetown dean lionized Scalia as a “brilliant jurist” from whom we all learned so very much and whom we will “all miss,” while a law professor objected to that view and argued that Scalia was actually a destructive presence on the Court. That sounds to me like exactly the sort of debate that one should find at a major U.S. law school, the sort of debate thinking adults have on a daily basis. Vehement criticisms of Scalia have long been, and still are, commonplace; The New Yorker’s Jeffrey Toobin this week wrote that Scalia “devoted his professional life to making the United States a less fair, less tolerant, and less admirable democracy.”
But two conservative law professors on the Georgetown faculty are indignant that this debate took place at all. The right-wing duo, Randy Barnett and Nick Rosenkranz (a senior Rubio adviser), sent their own email denouncing Peller’s anti-Scalia statement: not on substantive grounds that he was wrong on the merits about Scalia, but insisting that he had no right to criticize Scalia at all.
They began with an incredibly petty accusation that Professor Peller broke the law school’s rules in posting his statement; it was, they said, “in violation of the stated policies governing such emails.” By contrast, the two professors boasted, they “sought and received permission to post this response in an attempt to remedy the harm caused by the initial breach of our norms.”
After they each recounted fond personal memories they shared with Justice Scalia (“We had lunch together at his favorite pizza place, AV Ristorante. … We once sang a song together, believe it or not: Oh, Danny Boy”), they jointly moved to the crux of their grievance: It was “simply cruel beyond words” to subject these two professors to criticisms of their beloved hero. They literally said that:
To hear from one’s colleagues, within hours of the death of a hero, mentor, and friend, that they resent any implication that they might mourn his death — that, in effect, they are glad he is dead — is simply cruel beyond words.
They added, “But, though the insult and cruelty of our colleagues was grievous, at least only two of us had to bear it.” We had to bear it.
[...] For some reason, national pundits who love to denounce “PC” campus censorship and parade around as free speech crusaders obsessively focus on left-wing censorship while ignoring other kinds of campus viewpoint-suppression that are far more common. As I’ve documented repeatedly, the most common form of campus censorship — punishment and other official limitations imposed on activists working against Israeli occupation of Palestine — is almost always completely ignored in this pundit debate.
Indeed, it’s common for those seeking to suppress left-wing views on college campuses to invoke exactly the same “safe space” rhetoric. As we noted last week in reporting on the growing criminalization of the BDS movement, the University of Illinois student who led the campaign to have Steven Salaita fired for his pro-Gaza tweets, himself a former AIPAC intern, told the New York Times when justifying this campaign: “Hate speech is never acceptable for those applying for a tenured position; incitement to violence is never acceptable. … There must be a relationship between free speech and civility.” Another “pro-Israel” student demanding Salaita’s firing said, “It’s about feeling safe on campus.” This is seen over and over: “PC” censorship is almost always depicted as a left-wing phenomenon even though it is directed at least as commonly at the Left as it is wielded by them.
Read the rest!
Medical Marijuana Users in Canada Can Legally Grow Their Own Weed Now
Medical marijuana patients in Canada are free to grow their own plants after a Federal Court judge ruled the current laws forbidding that are unconstitutional.
Under former prime minister Stephen Harper, the Conservative government banned cannabis patients from growing their own supply, forcing them to purchase weed from licensed producers. Previously, patients were permitted to grow under the Marihuana Medical Access Regulations (MMAR) program.
The restrictions were challenged by four British Columbia residents, who claimed they were a violation of Charter rights. On Wednesday, Judge Michael Phelan sided with the plaintiffs in a Vancouver courtroom. He has suspended his decision for six months to give the Liberal government time to create new legislation. In the meantime, Canadians with licenses to produce marijuana under the MMAR can continue to do so.
Ontario patient Kyle Morrison, 36, who suffers from arthritis and herniated discs stemming from a workplace injury, told VICE he's relieved to hear the news. Morrison has had an MMAR license for the last five years allowing him to be in possession of 15 plants. He wants to continue to grow his own pot. "I [raise] my own poultry... I hunt. I basically don't buy meat from a grocery store, and I don't want to smoke grocery store cannabis," he said. Morrison, who also suffers from mental health issues, said he wanted his children to be free to grow medical marijuana should they require it in the future.
Longtime pot activist and patient Tracy Curley told VICE the news was "really, really good," but she suspects the Crown prosecutor will appeal the decision.
Others have commented on this, I don't think it is my imagination. I sometimes have the problem when I am delusional, that I think I'm just fine.
It is an odd experience. Actually rather dull. There have been times that I've yearned for sanity. Now I have sanity but it has come at the cost of not being able to write. Maybe they were paranoid manifestos but at least I had something to do.
The madness is likely to return; that is the nature of my condition. There are many things I can do to prevent that happening, but the madness will find some other way, a way that I do not anticipate.
There are two things that led to this. I was sleeping excessively, and getting depressed, so I requested the antidepressant imipramine from my psychiatrist. It is very old, and not commonly used anymore - my pharmacy had to special-order it - but my experience is that it works well for me.
I've been regulating my sleep better. Too much sleep makes me depressed, too little sleep makes me either manic or psychotic.
A while back I happened across a man and a woman at a crosswalk. I told them both that I was a Secret Service Agent, and that it was my job to protect the President. I am absolutely serious. About an hour after that, I admitted myself voluntarily to a psychiatric hospital but when they saw how loopy I was, they changed my status to involuntary.
Even so I am unable to sleep completely regularly, not like most people. I don't get tired when I need to sleep. My friend Rod said "It's like dying of dehydration because you don't feel thirsty". It really is very much like that.
I got some good sleep last night, even so I felt sleepy at breakfast this morning, so I slept all day at the Right 2 Dream Too tent camp - it is a homeless shelter operated by the homeless themselves, with the unique service that one can sleep there during the day.
I could have gone to dinner at the rescue mission, then entered the bed lottery, but then I'd be sleeping too much, that would make me depressed, so instead I'm going to sit up and drink coffee at an all-night restaurant. Despite that I have the money to pay for my coffee, there are two friendly and affectionate waitresses that give me free coffee, and often free meals. They like me, they enjoy my company.
The best way to be homeless is not to appear homeless. We can take showers and wash our clothes, there are facilities for that. I'm pretty good about shaving and brushing my teeth.
There are some people who have no choice. They are too far gone mentally. Rudy complained to me that he could not get a job despite having a hospitality degree; he could be a top restaurant chef. But the reason he is unemployed is that he smells bad, and pushes around a shopping cart loaded with trash.
The reason I'm unemployed is because of what I write. It would make sense were I to take offline what I could, like the stuff on my own website, or the stuff at Kuro5hin - Rusty would remove it were I to ask. But I don't. I want others to understand the nature of mental illness. I feel it is important to maintain the historical record.
It is my birthday tomorrow, the 24th. I'll be 52. That doesn't seem right, I still think like a teenager, but my hair is gray, I can't see close-up any more and I have all manner of unexplainable aches and pains.
What is most upsetting to me is that it appears unlikely I will ever have children. Bonita didn't want to have kids. She had reasons not to, but I am not at liberty to share them with you. That was a tough decision - what did I want more? Children, or Bonita? I chose Bonita. Now I think I should not have married her, for many reasons, not just my childlessness.
There are some men who father children when they are older than I, but it is uncommon, as I would have to court and marry a much-younger woman.
There is a woman I like, who obviously likes me, but she is hesitant. She enjoys my visits but so far that's all there has been. I kissed her on the hand once though, and she smiled.
Maybe one of those waitresses tonight. Maybe I can contrive to kiss _her_ on the hand. Women like that, they grow up dreaming of being fairy tale princesses but hand-kissing is long out of style. I am completely convinced that I am the only man who ever kisses women's hands anymore.
http://deadline.com/2016/02/deadpool-risen-the-witch-race-weekend-box-office-1201705730/
“It’s a Deadpool world and we’re just living in it,” beamed 20th Century Fox distribution chief Chris Aronson this morning. The Marvel anti-hero movie hasn’t calmed down with weekend 2 of $55M and a 10-day total of $235.4M, with a big assist from star Ryan Reynolds, who continues promoting. Yesterday, his satirical Deadpool Kanye-esque rant against Saturday Night Live exec producer Lorne Michaels went viral, clocking 2.4M YouTube views.
[...] Could Deadpool topple The Passion Of The Christ ($370.8M) to become the top-grossing R-rated film of all-time? The Tim Miller-directed superhero movie thru Sunday will be running 11% ahead of Mel Gibson’s New Testament title through its second weekend. Yeah, it’s an apples to oranges comparison given the discrepancy between the two titles’ crowds. Passion reaped seven weekends of double-digit million dollar grosses from the Lenten faithful back in 2004. A Friday Imax matinee at Edwards Valencia Cinema, 30 minutes north of Hollywood, drew mostly couples to the raunchy Marvel film. But there’s a lot of back-to-back franchise competition this spring. Just look at what’s standing in Deadpool‘s way: London Has Fallen, 10 Cloverfield Lane, The Divergent Series: Allegiant and Batman v. Superman. With all these brand titles, you’d think it was summer. Many in the business feel $350M is within reach for Deadpool, which would put it nose-to-nose with American Sniper, the second highest grossing R-rated film at the domestic B.O.