Stories
Slash Boxes
Comments

SoylentNews is people

Log In

Log In

Create Account  |  Retrieve Password


Medical Marijuana Users in Canada Can Legally Grow Their Own

Posted by takyon on Thursday February 25 2016, @06:05PM (#1783)
3 Comments
Career & Education

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.

I don't seem to be crazy anymore

Posted by MichaelDavidCrawford on Wednesday February 24 2016, @05:34AM (#1781)
12 Comments
Career & Education

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.

Deadpool Could Become Top-Grossing R-Rated Film of All Time

Posted by takyon on Monday February 22 2016, @10:11PM (#1779)
0 Comments
Business

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.

Soylent Upgrade Greasemonkey/Tampermonkey extension v11

Posted by takyon on Thursday February 18 2016, @12:13AM (#1776)
8 Comments
Code

// ==UserScript==
// @name Soylent Upgrade
// @version 11.0
// @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[^\)]*?)(\)|\])/gi,"$1DOI: <a href='http://search.crossref.org/?q=$2' target='_blank'>$2</a>$3");
    summary.innerHTML = summary.innerHTML.replace(/(\(|\[)open, DOI: (10[^\)]*?)(\)|\])/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);}");
        }
    }
}

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) } }"));

document.getElementsByTagName('head')[0].appendChild(temp); // Add script to page

Haiku

Posted by MichaelDavidCrawford on Tuesday February 16 2016, @10:23PM (#1772)
3 Comments
Code

No, not the minimalist poetry, but the Haiku operating system. I was looking around for something productive to do, so I looked in Haiku's Trac. I'm going to work on silencing compiler warnings so as to enable the use of -Werror.

After I do some of that I'll have enough experience with the build that I could fix some real bugs.

My potential consulting client got back to me to say they would have some paying work for me soon. I'd feared they had wandered into the ether; their CEO explained that he'd been really busy. It's a small company.

Tomorrow I'm playing piano at a reception to celebrate the opening of a new housing facility for the homeless of Vancouver. It's not a performance exactly, in that I'll be playing background music for a party.

I don't know a whole hour's worth of material so I'll mostly be improvising.

I can play piano a lot better than I can read written music. It's very painful for me to learn new songs that someone else wrote but by contrast I can wail away at the keyboard, apparently randomly, yet it comes out sounding like real music. That's how I taught myself to play, making random noise at first but then doing more and more of what sounded good with less and less of what sounded bad.

I'm going to get paid for playing! I don't know how much yet but it will be the very first I've been paid for piano. I sing on the street for tips but really I'm not that good, I never make very much. I'm doing pretty good if I can buy a Starbucks every day.

Suggest a Toy jQuery Program?

Posted by MichaelDavidCrawford on Tuesday February 16 2016, @12:06AM (#1771)
3 Comments
Code

I read up on jQuery yesterday and today. I'd like to write a real program, but purely as an exercise. Reading tutorials makes my eyes glaze over.

I contemplated a dead-simple message board, but even that is a little more complex than I want to deal with at first. I'd like to do something about as complex as the pure-JavaScript Conway's Life that I did at http://www.warplife.com/life/mumble/

jQuery looks quite cool, but I trip up on many of the tutorials' practice exercises. I need to write a real program.

Kanye West Begs Silicon Valley for Money After Tweeting Debt

Posted by takyon on Monday February 15 2016, @01:04PM (#1767)
3 Comments
Business

Kanye West wants $1 billion from Facebook’s Mark Zuckerberg

He’s “this generation’s Disney” and technology leaders like Mark Zuckerberg would be doing the world a favor by investing a cool $1 billion in his musical ambitions.

That was the gist of an early Monday tweetstorm by rapper Kanye West, hours after he raised questions about his personal finances with this tweet that hinted he has $53 million worth of debt:

I write this to you my brothers while still 53 million dollars in personal debt... Please pray we overcome... This is my true heart...
— KANYE WEST (@kanyewest) February 14, 2016

In a fresh crop of posts, West made direct pleas to Zuckerberg, chief executive of Facebook Inc., and Larry Page, Alphabet Inc.’s CEO and the co-founder of Google, asking that they funnel some cash into his ideas:

Mark Zuckerberg invest 1 billion dollars into Kanye West ideas
— KANYE WEST (@kanyewest) February 14, 2016

Mark Zuckerberg I know it’s your bday but can you please call me by 2mrw…
— KANYE WEST (@kanyewest) February 15, 2016

World, please tweet, FaceTime, Facebook, instagram, whatever you gotta do to get Mark to support me…
— KANYE WEST (@kanyewest) February 15, 2016

Mark, I am publicly asking you for help…
— KANYE WEST (@kanyewest) February 15, 2016

hey Larry Page I’m down for your help too …
— KANYE WEST (@kanyewest) February 15, 2016

West insinuated that Silicon Valley was full of hypocrites — executives who want to look cool listening to rap, yet never did anything to further growth in the music industry:

All you dudes in San Fran play rap music in your homes but never help the real artists…
— KANYE WEST (@kanyewest) February 15, 2016

The rapper made a thinly veiled reference to Zuckerberg’s education philanthropy — he is part of an investment group that aims to bring cheap, private education to millions of children across Africa and Asia. Frankly, said West, the money could be better spent helping him with his creative efforts, as he claimed to be the “Jordan and Steph Curry of music, meaning I’m the best of 2 generations”

Professional Development

Posted by MichaelDavidCrawford on Sunday February 14 2016, @12:06AM (#1762)
5 Comments
Career & Education

Today I started learning Javascript. This isn't the first time I've tried but I think I'll do it for real this time. Previously I only learned as much as I needed to plug in someone else's script. I also tried to read O'Reilly's "Learning Javascript" but got bored with it. It's an informative book but the writing isn't compelling.

I met a fellow consultant today who said he'd give my contact info to a friend of his who is getting more work than he can handle. He also said that with my existing experience, I should get into DevOps. I'd had the impression that that was more for junior developers but he asserted it was for senior people like me.

My existing website Portland Software Development and Consulting is quite spartan. I had the idea that the simple "design" would associate me with the experts, but an older, wiser colleague says that I should make it more attractive. I plan to use my Javascript to implement responsive design, that is, to make the same pages work well on mobile devices, desktops and laptops.

Just now I added "DevOps" to my list of services, and "JavaScript" to my list of languages. I also moved Python closer to the head of the list. I don't really know JS or DevOps yet but expect I will by the time they show up in the search engines.

I learn best by doing; today someone recommended I learn just a little bit of JS from the tutorials, then Google for everything else I need to do. To that end I am writing Conway's Game of Life in Javascript. It's not online yet, not until I get it actually doing something, but what little I've done so far has taught me a few things.

The consultant I spoke to today took me very seriously. That felt good, real good - though I didn't tell him I was homeless. I don't really look homeless, I try to keep my appearance professional. I don't always succeed but that's what I aim for.

Content, Creativity and Productivity in 2016

Posted by n1 on Friday February 12 2016, @09:10PM (#1761)
2 Comments
Answers

There is an abundance of media and content available online, and in meatspace. This website contributes, and everyone on this site is a part of that. There are 15 stories this site will publish today, none I have touched. We will likely see several hundred comments and dozens of discussions. Many comments will be insightful or interesting, others will be funny, some will be less well received. There will be a small handful of journals like this one.

I try to contribute positively to this site. Perhaps not as much as I could or should, but I would rather do it well and have a constructive experience. When editing stories, I genuinely try to keep a wide scope of interests considered and choose quality submissions. These may not be the most commented on, but my intention is to publish content that is informative or interesting regardless of my own perspective on the subject.

However, most of the content I see and consume is certainly more of the entertainment variety. This is very different from the attitude I have on this site.

I would love to create content that is entertaining, having been in various bands and musical projects for many years in my teens and early 20's. I don't have any concern really over the number of people that would or have seen and enjoyed the music or other content. Some of my favorite musicians have extremely small audiences and short 'careers', it's about the art and expression, creating something from the imagination. It's still sad to see quality music being ignored regardless.

This is the problem. I'd much rather make serious content, to borrow a phrase 'stuff that matters'. People can and do make art and entertaining content far better than I could.

The state of journalism in the entire world is a shambles. There are so many events that need reviewing, context is always missing, contradictory reports are ignored. Every outlet with any reach with full-time 'journalists' are under the control of commercial interests and/or an incoherent bureaucratic mess of government oversight, perhaps wrapped in the guise of independence from government. There are people, by themselves and working with others to improve the situation. The work of people like Tom Secker[1] and Pearse Redmond[2] are quite outstanding examples of independent research and journalism on very important events. The community here seems to be trying. We don't have a big community though, much like Tom and Pearse, the shared perspectives rarely travel beyond a small community.

Options are available to even make a living from writing, I could do it tomorrow. But, I would be writing press releases and other commercial content generation for 'mainstream' consumption. It's not impossible to get work reporting on and for the public sector or political institutions. I can interpret the data, word things however you want to misrepresent it, or direct emphasis to the irrelevant, but that doesn't mean it's a worthwhile or constructive way to spend time and other resources.

Thankfully i've found myself in the situation where my employment is quite flexible, it's very hard work often, but I am not beholden to an employer. I have my morals and ethics and do business a certain way, which is honesty, there is no game. Working for multinationals and smaller companies who are staffed by people with no moral compass, intentionally or by process, i've been there. It's something I can't tolerate or be involved in anymore. A cog in the machine is not the place for me.

There are so many people now, more than ever creating art and writing for a living or as a major part of their lives. Perhaps now just the human experience. I don't feel like I really need to be a part of it, i'd like to spend my energy on the more tangible. It could be amazing, doing something i'm passionate about on a more spiritual sense, being able to focus on the creativity or reporting on current events.

In an ideal world, i'd love to do it all. Entertain, inform and build, be productive. Now though, I don't feel like i'm doing any of that.

The opportunities are numerous, but the downsides are immense. None of the opportunities, which would keep food on my plate, are actually positively contributing to society. Forgetting the aforementioned issues with 'writing' for a living. I can build more houses through subcontracting based on debt [public/private/foreign], for people to buy with more debt, to make sure house prices keep going up so the average home in London costs £1,000,000 by 2020 but the average wage stays around the £25,000 mark. Or it's build a broker/service company, with long winded service contracts and subcontractor agreements to extract as much money as possible from clients and contractors with as minimal obligation, none of it direct, all wrapped up in a nice advertising campaign of bullshit.

It's not about government regulation, it's about systemic corruption of government and the quarterly report obsessed private sector distorting any sense of fair trade and any semblance of actual investigative journalism or reporting. The regulations on smaller businesses don't actually matter as much. The access to discretionary enforcement of the regulations, minimal/zero risk access to multi-million funding, government grants and tailored projects for the 'big' everything. That's before we get onto the just straight up misinformation people in marketing and sales tell as part of their jobs. That's getting closer to the core of the problem.

Back a little more on topic before this hits a thousand words… Bearing all this in mind, I'm lost as to what to do. I'd love to contribute more to this site, it would be a dream to write every day. But really, shouldn't I be building homes for people, not houses for a bank? Shouldn't I be growing food for myself and my neighbors rather than installing some ambient lighting systems in a Michelin star restaurant?

The opportunity is there to make a positive contribution to society, but how can I find a direction?

[1] Tom Secker's work can be found at:
Spy Culture
Investigating the Terror
Boiling Frogs Post
[2] Pearse Redmond's work can be found at:
Porkins Policy Review

Varoufakis & Europe, and velvet

Posted by Yog-Yogguth on Wednesday February 10 2016, @03:34AM (#1756)
4 Comments
News

[Not a big news story but one that set me off ("I've been writing a lot today but all I got was this lousy journal entry"). My own thoughts on velvet revolutions maybe could have made a journal entry but meh the stuff I've got is too obvious. There's other stuff too (the US transsexual the cops murdered (white btw, some ppl must be wearing very strong sunglasses), China reverting to full-on communist dystopia, "Problems of Democracy" (named as a nod to the old US DoD/CIA publication "Problems of Communism"), and something titled "Sinking the Ocean") but all are too complicated and/or unfinished; been hammering away instead of doing sensible things (like checking the 9 SN notifications and 60 or so unread stories, and I'm beat now).]

Quoting the RT news item (might be good to read it all) quoting Varoufakis:

“The European Union is disintegrating, and it is doing so quite fast,” he [Varoufakis] said. “The process of depoliticizing decision making at the heart of Europe, at our core European institutions” has been ongoing for decades, he said, adding that the EU’s “bureaucratic, technocratic decision-making process” has amounted to “authoritarianism.”

I've realized (some time after writing the following but before posting it) that Varoufakis more than likely knows all of this —he's a smart guy afaik— and maybe he thinks he can do better or add a touch to it or promulgate the core of it more widely into the left. Good for him (and maybe everybody else too), not so much in the quote but in the rest of the linked article he gets the main points right and I'm not going to stand in his way but I'll still say what I say (and I think others would too but that's an assumption although a fairly secure one).

The movement Varoufakis is asking for in the article already exists, it's called the alternative right (or new right) and he's more than welcome to join (I know he partially has of sorts with the Syriza & ANEL combo thing) but he has to leave behind his fear of walls because proper walls would and should keep the roof up above our heads :)

I know he wouldn't be the first.

I know of a person who at least claims to be communist/marxist who votes for the same alternative right party as me (a light™ version though, but decidedly not anything like an old-school conservative party and not particularly ideological). The communist is only voting for them because of their stance against immigration. There should be a lot more like him by now. In fact many of the alternative right parties are very much centrist or even leftist on some issues, much more so than one would think from eating the garbage served by MSM as well as all the competing non-alt-right parties.

The simple general summary of alt-right politics is: "people want to keep what they had and which they and those before them fought for, thank you very much".

That might sound conservative but the "conservatives" (in Europe as in the US) are rotting away what should be preserved (the puns are illustrative as well as true so I'll leave them there). Issues like "immigration", and/or welfare, and/or tuition fees, and/or international treaties all point back to the central issue of sovereignty which in turn is tightly coupled with freedom and actual democracy: rule by the people (which is what Varoufakis is asking for).

Also note that the "conservatives" (Republicans, Tories, whatever) are doing the damage together with their "supposed enemies" the social democrats (or still worse: "christian" democrats) and labor movements, even Corbin (and maybe not Yaroufakis either) doesn't seem to get exactly what is going on yet —that's ideology for you.

When you realize they're all operating way past their sell-by date (and they don't keep) you vote alternative. Sucks for those in the US, they've got none but have to make do with weird ones be it Green ("yuck") or Libertarian ("need more meds") or maybe Trump as a King Kong Godzilla hybrid.

[feel free to skip over these personal tidbits]
While I've never been voting to the left myself I've long long ago voted for a socially and partially financially libertarian party before I figured out they (locally, but later on the same happened in Britain) were predominantly idiots and liars pandering to the powers-that-be.

Sure I was a better person back then, perhaps. And I was an even better person when I was a four year old. That's what experience, knowledge, and insight should do to people if you ask me; they should wise up. The fact they don't always do is quite depressing for the rest of us but oh boy must they live charmed lives or be incredibly dense. Sorry to any insulted septuagenarians (I know at least one which should be deeply insulted and rightfully so) but it's true :P
[personal stuff done with]

Anyway the EU in the form as it exists will not, can not, and should not continue to exist. It is more broken that functional and it has created bigger problems than it solved. It has much more in common with nazism and international/soviet communism and their shared feverish and quite deranged dreams of "unity" (under their boot) than anything remotely democratic. The sensible things can be done without them on a completely voluntary opt-in basis. Forced "cooperation" isn't, and neither is forced "charity".

Alternative Internet Archive link. I notice that some people are doing various things to attempt to secure documentation and others again are talking openly about lists of people and actions. A single particularly offensive incident but there are tens of thousands more "hidden" away (even if Rotherham should be unique which is kind of a wild assumption).

The EU is the failure of the totalitarians (authoritarians is too weak a description for them) no matter what political color and ideology they hide behind. We got there quicker than the US that's all.

Now if only more actual nazis, few as they are, could realize that the powers they imagine fighting themselves against are the marriage of the descendants of the old nazis and and the old commies, and if they (as well as the far left) could in such a manner realize their own folly then we would be even better off here in the alt-right camp.

The door is still open for now.

Sort of off topic: if anyone has any particularly insightful to say (or link to) regarding the velvet revolutions at the fall of the Soviet empire then I'm all ears, especially if it's anything non-obvious. Living through it in western Europe (as well as as before it) only goes so far and a few years later I moved elsewhere out of Europe for some years before returning so there might even be things in the aftermath that I've completely missed (although I don't think so).

The situation in Europe is already violent (still mostly from the "refugees") so it won't be exactly the same but there are some similarities, maybe, if the governments know what's good for them.

P.s. fuck Turkey & pipsqueak "Adolf" Erdogan ("Hitler in falsetto"), I hope Russia nukes him (I know they won't, and yes I'm exaggerating) :)