text:
Finding The Narrow Path
The Fragrance Shed By A Violet
Do You Solemnly Swear
A Price For Genius
Malthus Revisted
I, Claudia
My Name is Saul
The Reluctant Queen
Plausible Liars
Fighting Adam- A 21st Century Look
Integrity Word Cloud Concept with great terms such as virtue code conduct and more.
fighting adam
In the preface to his new book, The Road to Character, author David Brooks states that he wrote this book in order 'to save his soul.' Now that is a phrase that one seldom reads from the pen of a New York Times journalist or any other writers for that matter in this media saturated ocean we swim in. It got my attention.
Employing the Genesis account employed in a 1965 book called The Lonely Man of Faith, Brooks writes of Adam 1 as the man who wants to conquer the world versus Adam 11 who wishes to serve the world. Or Adam 1 with the single goal of success opposing Adam 11 who experiences life as "moral drama" whose "motto is "Charity, love and redemption." His book could be called, Fighting Adam.
Brooks uses a compilation of famous voices examining the Allied victory at the end of the second world war as the platform for his conviction that collective and individual morality in this 21st century has devolved, that it is more difficult to reach humility in our culture than in prior ones. Command Performance was a variety show played to the US wartime troops and is replayed on NPR where the author heard it one evening while driving home. Celebrities from Marlene Dietrich to Bing Crosby, Frank Sinatra, Burgess Meredith and many others who 'intuitively resisted the natural human tendency toward excessive self love', they were unfailingly self -effacing and humble.
In his desire to understand the virtue of humility, Brooks' book examines the lives of people throughout the centuries who successfully defeated Adam 1 in order to let flourish Adam 11; people like Augustine, Dorothy Day, MacArthur, Marshall, George Eliot and Johnny Unitas. The journalist ends his book with a list of attributes he has distilled from his exhaustive study of these lives of men and women who successfully sublimated the selfish, sinful and flawed characteristics of Adam 1. He calls this 'The Humility Code."
Benedict, a layman, wrote his rule in the sixth century in a world where chaos and anarchy were rampant due to the collapse of the Roman Empire. The old order was dissolving, the new an unknown. As a Benedictine Oblate, I am obligated to read sections of the rule on a daily basis. Today we completed the Prologue, my favorite section of the Rule. Containing some of the most lyrical, loving and compelling words ever written by a spiritual master, Benedict begins with an admonition to Listen! And shortly thereafter addresses only those of us willing to enter into battle for the King, Jesus Christ. Military metaphors for spiritual growth are not popular and I doubt that Brooks could see why the notion of war resounded so forcefully to me when I converted to Christianity but there is no better metaphor.
I sympathize with Brooks. I can stand under his desire to assert a methodology for defeating the hateful parts of ourselves because I lived a majority of my life attempting to do just that without any notion of a Christ, any desire or interest in him. True because religion and church were concepts and institutions I had rejected long ago; exactly like Jesus did, I have learned.
"The Church is far stronger now than it was when I was a kid…back then, we went to confession because that's what everyone did…the trials of the last twenty years…these are all good…all collaborating to make a stronger, more vibrant faith." I am paraphrasing the reply made by my spiritual director when I told him of the completely empty churches in Paris, Rome and Florence. As if he were saying that culture is only that, merely a collection of attitudes and behaviors that may never touch the human heart.
Forgive concept: Silhouette of bird flying and broken chains at sunset background
The Razor's Edge of Forgiveness
My Name is Saul: A Novel of the Ancient World $15.75 USDI, Claudia A Novel of the Ancient World $15.75 USDMalthus Revisited $14.99 USDThe Price of Genius $10.99 USDFinding the Narrow Path- Patterns, Faith and Searching $9.69 USDDo You Solemnly Swear? $9.69 USDThe Fragrance Shed By A Violet $10.99 USD
If you would like more information about any of my books please do not hesitate to contact me:
Click here to Contact Lin Wilder


Obtain detailed instructions for process to be followed covering each order from internal routers and departmental procedures manuals to ensure job tasks are performed according to established procedures.
Written instructions will include the type and size of grit to be used, appropriate PSI setting for equipment, proper setup of fixtures into automatic machines, blasting distance from parts to nozzle and any possible areas of restrictions, etc.
Operator will be required to perform various tasks including: inspection of parts to ensure proper masking, load parts into a variety of sandblasting machines, and assure proper/secure placement of parts into fixtures as may be required (depending upon process being used).
Continuously monitor the operation of nozzle (ensuring no blockage exists) and appropriate flow occurs.
Make adjustments to machine or grit-flow as needed.
Perform work activities to obtain acceptable and uniform finishes at various processing stages (initial, in process and final). Depending upon the process being performed, may move parts within cabinet area in back and forth, side-to-side motions in order to remove unwanted finish and/or surface irregularities.
As work is completed, complete all related paperwork i.e. routers, daily log sheets, etc… following standard operating procedures.
Keep work area clean according to 6'S standards.
Adhere to all company safety rules and practices and wears protective equipment as directed.
Perform other job duties as needed or directed by management.
This position requires a minimum of a High School Education, or GED.


MoyaApp is engaged in safeguarding the privacy of our application visitors; in this policy, we explain how we treat and conserve your personal information.
2.1 Personal information submitted to us through our application will be used for the purposes specified in this policy or on the relevant pages of the application.
(n) verify compliance with the terms and conditions governing the use of our application (including monitoring private messages sent through our application private messaging service).
2.3 If you submit personal information for publication on our application, we will publish and otherwise use that information in accordance with the license you grant to us.
2.4 Your privacy settings can be used to limit the publication of your information on our application and can be adjusted using privacy controls on the application.
2.6 All our application financial transactions are handled through our approved payment services provider by SAMA.We will share information with our payment services provider only to the extent necessary for the purposes of processing payments you make via our application, refunding such payments and dealing with complaints and queries relating to such payments and refunds.
3.1 We may disclose your personal information to any of our employees, officers, insurers, professional advisers, agents, suppliers or subcontractors, insofar as reasonably necessary for the purposes set out in this policy.
3.2 We may disclose your personal information to any member of our group of companies (this means our subsidiaries, our ultimate holding company, and all its subsidiaries) insofar as reasonably necessary for the purposes set out in this policy.
4.2 Personal information that you publish on our application or submit for publication on our application may be available, via the internet, around the world. We cannot prevent the use or misuse of such information by others.
4.3 You expressly agree to the transfers of personal information described in this Section 6.
6.2 We will store all the personal information you provide in our secure (password- and firewall-protected) servers.
6.3 All electronic financial transactions entered into through our application will be protected by encryption technology.
6.5 You are responsible for keeping the password you use for accessing our application confidential; we will not ask you for your password (except when you log in to our application).
7.1 We may update this policy from time to time by publishing a new version of our application.
7.3 We may notify you of changes to this policy [by email or through the private messaging system on our application].
9.1 This application is owned and operated by Ierttwa for communication & Information Technology Company, and registered in Saudi Arabia, AlKhobar under CR:2051213743.


text:
Ardhi House, 1st Ngong Avenue, Off Ngong Road
2718050 / 2718050
info@landcommission.go.ke
National Land Commission
Mandate & functions
Former Commissioners
County Coordinators
NLC in the media
Press Releases & Speeches
Land Acts
Review of Grants and Disposition of Public Land
PLIS Public Portal
PLIS Internal Portal
Mandate & function
Land as a factor of production is the most important natural resource that Kenya is endowed with. It is critical to economic, social, political and cultural development. It is also considered as the principal source of livelihood and material wealth by playing host to natural resources. Secure access to land, sustainable land use planning and equitable distribution of land remains immensely important for food and nutrition security, employment, growth of industries, attraction of foreign investors, foreign exchange earnings, and generally the socio-economic development of the country.
National Land Commission derives its mandate from the Constitution of Kenya 2010, the National Land Policy (2009) and acts of Parliament, namely the National Land Commission (NLC) Act, the Land Act and the Land Registration Act, all of 2012. The broad mandate of the National Land Commission can be categorized as provided for in the Constitution:
1. Manage Public land on behalf of the national and county governments, 67(2) a;
2. Recommend a National Land Policy to the national government, 67(2) b;
3. Advise the national government on a comprehensive program for the registration of title in land throughout Kenya, 67(2) c;
4. Conduct research related to land and the use of natural resources, and make recommendations to appropriate authorities, 67(2) d;
5. Initiate investigations, on its own initiative or on a complaint, into present or historical land injustices, and recommend appropriate redress, 67(2) e;
6. Encourage the application of traditional dispute resolution mechanisms in land conflicts, 67(2) f;
7. Assess tax on land and premiums on immovable property in any area designated by law, 67(2) f;
8. Monitor and have oversight responsibilities over Land Use Planning throughout the country, 67(2) h; and 9.
9. Perform any other functions prescribed by national legislation. 6(3)
Powers and functions
In line with the NLC's Act, 2012, the Commission is obligated to exercise all the powers necessary for the execution of its functions under the Constitution, the NLC Act 2012 and any other written law. This translates into excercising its powers in a variety of ways like:
1. Without prejudice to the generality of subsection (1), the Commission shall have powers to;
Gather, by such means as it considers appropriate, any relevant information including requisition of reports, records, documents or any information from any source, including any State organ, and to compel the production of such information where it considers necessary;
Hold inquiries for the purposes of performing its functions under the NLC Act;
Take any measures it considers necessary to ensure compliance with the principles of land policy set out in Article 60 (1) of the Constitution as depicted in box 1 below. These principles continue to guide the work of the Commission.
Welcome to NLC
Message from Vice-Chair
NLC Video
© 2013 - 2019 National Land Commission

redpajama_set_name: RedPajamaCommonCrawl


text:
#!/usr/bin/env node
/* Entrypoint for node module command-line app. Not used for Web IDE */
var fs = require("fs");

function getHelp() {
  return [
   "USAGE: espruino ...options... [file_to_upload.js]",
   "",
   "  -h,--help                : Show this message",
   "  -j [job.json]            : Load options from JSON job file - see configDefaults.json",
   "                               Calling without a job filename creates a new job file ",
   "                               named after the uploaded file",
   "  -v,--verbose             : Verbose",
   "  -q,--quiet               : Quiet - apart from Espruino output",
   "  -m,--minify              : Minify the code before sending it",
   "  -t,--time                : Set Espruino's time when uploading code",
   "  -w,--watch               : If uploading a JS file, continue to watch it for",
   "                               changes and upload again if it does.",
   "  -e command               : Evaluate the given expression on Espruino",
   "                               If no file to upload is specified but you use -e,",
   "                               Espruino will not be reset",
   "  --sleep 10               : Sleep for the given number of seconds after uploading code",
   "  -n                       : Do not connect to Espruino to upload code",
   "  --board BRDNAME/BRD.json : Rather than checking on connect, use the given board name or file",
   "  --ide [8080]             : Serve up the Espruino Web IDE on the given port. If not specified, 8080 is the default.",
   "",
   "  -p,--port /dev/ttyX      : Connect to a serial port",
   "  -p,--port aa:bb:cc:dd:ee : Connect to a Bluetooth device by addresses",
   "  -p,--port tcp://192.168.1.50 : Connect to a network device (port 23 default)",
   "  -d deviceName            : Connect to the first device with a name containing deviceName",
   "  --download fileName      : Download a file with the name matching fileName to the current directory",
   "  -b baudRate              : Set the baud rate of the serial connection",
   "                               No effect when using USB, default: 9600",
   "  --no-ble                 : Disables Bluetooth Low Energy (using the 'noble' module)",
   "  --list                   : List all available devices and exit",
   "",
   "  --listconfigs            : Show all available config options and exit",
   "  --config key=value       : Set internal Espruino config option",
   "",
   "  -o out.js                : Write the actual JS code sent to Espruino to a file",
   "  --ohex out.hex           : Write the JS code to a hex file as if sent by E.setBootCode",
   "  --storage fn:data.bin    : Load 'data.bin' from disk and write it to Storage as 'fn'",
   "  --storage .boot0:-       : Store program code in the given Storage file (not .bootcde)",
   "",
   "  -f firmware.bin[:N]      : Update Espruino's firmware to the given file",
   "                               Must be a USB Espruino in bootloader mode",
   "                               (bluetooth is not currently supported).",
   "                               Optionally skip N first bytes of the bin file.",
   "",
   "If no file, command, or firmware update is specified, this will act",
   "as a terminal for communicating directly with Espruino. Press Ctrl-C",
   "twice to exit.",
   "",
   "Please report bugs via https://github.com/espruino/EspruinoTools/issues",
   ""]
}

//override default console.log
var log = console.log;
console.log = function() {
 if (args.verbose)
   log.apply(console, arguments);
}
//Parse Arguments
var args = {
 ports: [], // ports to try and connect to
 config: {}, // Config defines to set when running Espruino tools
 storageContents : {} // Storage files to save when using ohex
};

var isNextValidNumber = function(next) {
 return next && isFinite(parseFloat(next));
}
var isNextValidPort = function(next) {
 return next && next[0]!=='-' && next.indexOf(".js") == -1;
}
var isNextValidFileType = function(next, fileType) {
 return next && next[0]!=='-' && next.indexOf(fileType) >= 0;
}
var isNextValidJSON = function(next) {
 return isNextValidFileType(next, ".json");
}
var isNextValidHEX = function(next) {
 return isNextValidFileType(next, ".hex");
}
var isNextValidJS = function(next) {
 return next && !isNextValidJSON(next) && next.indexOf(".js") >= 0;
}
var isNextValid = function(next) {
 return next && next[0]!=='-';
}

for (var i=2;i<process.argv.length;i++) {
 var arg = process.argv[i];
 var next = process.argv[i+1];
 if (arg[0]=="-") {
   if (arg=="-h" || arg=="--help") args.help = true;
   else if (arg=="-v" || arg=="--verbose") args.verbose = true;
   else if (arg=="-q" || arg=="--quiet") args.quiet = true;
   else if (arg=="-c" || arg=="--color") args.color = true;
   else if (arg=="-m" || arg=="--minify") args.minify = true;
   else if (arg=="-t" || arg=="--time") args.setTime = true;
   else if (arg=="-w" || arg=="--watch") args.watchFile = true;
   else if (arg=="-n" || arg=="--nosend") args.nosend = true;
   else if (arg=="--no-ble") args.noBle = true;
   else if (arg=="--list") args.showDevices = true;
   else if (arg=="--listconfigs") args.showConfigs = true;
   else if (arg=="-p" || arg=="--port") {
     args.ports.push({type:"path",name:next});
     var j = (++i) + 1;
     while (isNextValidPort(process.argv[j])) {
       args.ports.push({type:"path",name:process.argv[j++]});
       i++;
     }
     if (!isNextValidPort(next)) throw new Error("Expecting a port argument to -p, --port");
   } else if (arg=="-d") {
     i++; args.ports.push({type:"name",name:next});
     if (!isNextValid(next)) throw new Error("Expecting a name argument to -d");
   } else if (arg=="--download") {
     i++; args.fileToDownload = next;
     if (!isNextValid(next)) throw new Error("Expecting a file name argument to --download");
   } else if (arg=="--config") {
     i++;
     if (!next || next.indexOf("=")==-1) throw new Error("Expecting a key=value argument to --config");
     var kidx = next.indexOf("=");
     try {
       args.config[next.substr(0,kidx)] = JSON.parse(next.substr(kidx+1));
     } catch (e) {
       // treat as a string
       args.config[next.substr(0,kidx)] = next.substr(kidx+1);
     }
   } else if (arg=="-e") {
     i++; args.expr = next;
     if (!isNextValid(next)) throw new Error("Expecting an expression argument to -e");
   } else if (arg=="-b") {
     i++; args.baudRate = parseInt(next);
     if (!isNextValid(next) || isNaN(args.baudRate)) throw new Error("Expecting a numeric argument to -b");
   } else if (arg=="-j") {
     args.job = "";                                          // will trigger makeJobFile
     if (isNextValidJSON(next)) { i++; args.job =  next; };  // optional
   } else if (arg=="-o") {
     i++; args.outputJS = next;
     if (!isNextValidJS(next)) throw new Error("Expecting a JS filename argument to -o");
   } else if (arg=="--ohex" || arg=="-ohex"/* backwards compat.*/) {
     i++; args.outputHEX = next;
     if (!isNextValidHEX(next)) throw new Error("Expecting a .hex file argument to --ohex");
   } else if (arg=="--storage") {
     i++; var d = next.split(":");
     if (!next || next.indexOf(":")<0) throw new Error("Expecting a fn:file.bin argument to --storage");
     args.storageContents[d[0]] = d[1];
   } else if (arg=="-f") {
     i++; var arg = next;
     if (!isNextValid(next)) throw new Error("Expecting a filename argument to -f");
     arg = arg.split(':', 2);
     args.updateFirmware = arg[0];
     args.firmwareFlashOffset = parseInt(arg[1] || '0');
     if (isNaN(args.firmwareFlashOffset)) throw new Error("Expecting a numeric offset for -f");
   } else if (arg=="--board") {
     i++; args.board = next;
     if (!isNextValid(next)) throw new Error("Expecting an argument to --board");
   } else if (arg=="--ide") {
     args.ideServer = 8080;
     if (isFinite(parseInt(next))) {
       args.ideServer = parseInt(next);
       i++;
     }
   } else if (arg=="--sleep") {
     i++; args.sleepAfterUpload = parseFloat(next);
     if (!isNextValidNumber(next)) throw new Error("Expecting a number argument to --sleep");
   } else throw new Error("Unknown Argument '"+arg+"', try --help");
 } else {
   if ("file" in args)
     throw new Error("File already specified as '"+args.file+"'");
   args.file = arg;
 }
}

// job file injection...
 if (args.job) {
   var job = fs.readFileSync(args.job, {encoding:"utf8"});  // read the job file
   var config = JSON.parse(job);
   for (var key in config) args[key] = config[key];
 }

//Extra argument stuff
args.espruinoPrefix = args.quiet?"":"--] ";
args.espruinoPostfix = "";
if (args.color) {
 args.espruinoPrefix = "\033[32m";
 args.espruinoPostfix = "\033[0m";
}
//this is called after Espruino tools are loaded, and
//sets up configuration as requested by the command-line options
function setupConfig(Espruino, callback) {
 if (args.minify)
   Espruino.Config.MINIFICATION_LEVEL = "ESPRIMA";
 if (args.baudRate && !isNaN(args.baudRate))
   Espruino.Config.BAUD_RATE = args.baudRate;
 if (args.noBle) {
   Espruino.Config.BLUETOOTH_LOW_ENERGY = false;
   Espruino.Config.BLUETOOTH_LOW_ENERGY_DBUS = false;
 }
 if (args.setTime)
   Espruino.Config.SET_TIME_ON_WRITE = true;
 if (args.watchFile && !args.file)
   throw new Error("--watch specified, with no file to watch!");
 if (args.updateFirmware && (args.file || args.expr))
   throw new Error("Can't update firmware *and* upload code right now.");
 if (args.espruino) {  // job file injections
   for (var key in args.espruino) Espruino.Config[key] = args.espruino[key];
 }
 if (args.outputHEX) {
   log("--ohex used - enabling MODULE_AS_FUNCTION");
   Espruino.Config.MODULE_AS_FUNCTION = true;
 }
 if (Object.keys(args.storageContents).length) {
  for (var storageName in args.storageContents) {
    var fileName = args.storageContents[storageName];
    if (fileName=="-")
      args.storageContents[storageName] = { code : true };
    else {
      args.storageContents[storageName] = { data: fs.readFileSync(fileName, {encoding:"utf8"}).toString() };
    }
  }
 }
 if (args.config) {
   for (var key in args.config) {
     console.log("Command-line option set Espruino.Config."+key+" to "+JSON.stringify(args.config[key]));
     Espruino.Config[key] = args.config[key];
   }
 }
 if ( args.ports && args.ports.length ) {
   Espruino.Config.SERIAL_TCPIP=args.ports
    .filter(function(p) {
      return p.name.substr(0,6) === "tcp://";
    })
    .map(function(p) {
      return p.name.trim();
    }
   )
 }
 if (args.showConfigs) {
   Espruino.Core.Config.getSections().forEach(function(section) {
     log(" "+section.name);
     log("==================================".substr(0,section.name.length+2));
     log("");
     if (section.description) {
       log(section.description);
       log("");
     }
     var configItems = Espruino.Core.Config.data;
     for (var configName in configItems) {
       var configItem = configItems[configName];
       if (configItem.section == section.name) {
         var d = configItem.name+" ("+configName+")";
         log(d);
         log("-------------------------------------------------------------------------------".substr(0,d.length+2));
         if (configItem.description) log(configItem.description);
         log("Type: "+JSON.stringify(configItem.type,null,2));
         log("Default: --config "+configName+"="+configItem.defaultValue);
         log("Current: --config "+configName+"="+Espruino.Config[configName]);
         log("");
       }
     }
     log("");
   });
   process.exit(1);
   //Espruino.Core.Config.getSection(sectionName);
 }
 if (args.board) {
   log("Explicit board JSON supplied: "+JSON.stringify(args.board));
   var jsonLoaded = function(json) {
     console.log("Manual board JSON load complete");
     if (json && json.info && json.info.binary_version)
       Espruino.Core.Env.setFirmwareVersion(json.info.binary_version);
     callback();
   }
   Espruino.Config.ENV_ON_CONNECT = false;
   var env = Espruino.Core.Env.getData();
   env.BOARD = args.board;
   if (args.board.indexOf(".")>=0) {
     var data = JSON.parse(require("fs").readFileSync(args.board).toString());
     for (var key in data)
       env[key] = data[key];
     Espruino.callProcessor("boardJSONLoaded", env, jsonLoaded);
   } else { // download the JSON
     Espruino.Plugins.BoardJSON.loadJSON(env, Espruino.Config.BOARD_JSON_URL+"/"+env.BOARD+".json", jsonLoaded);
   }
 } else callback();
}

/* Write a file into a Uint8Array in the form that Espruino expects. Return the
address of the next file.
NOTE: On platforms with only a 64 bit write (STM32L4) this won't work */
function setStorageBufferFile(buffer, addr, filename, data) {
  if (!typeof data=="string") throw "Expecting string";
  if (addr&3) throw "Unaligned";
  var fileSize = data.length;
  var nextAddr = addr+32+((fileSize+3)&~3);
  if (nextAddr>buffer.length) throw "File too big for buffer";
  // https://github.com/espruino/Espruino/blob/master/src/jsflash.h#L30
  // 'size'
  buffer.set([fileSize&255, (fileSize>>8)&255,
              (fileSize>>16)&255, (fileSize>>24)&255], addr);
  // 'replacement' - none, since this is the only file
  // 'filename', 8 bytes
  if (filename.length>28) throw "Filename "+JSON.stringify(filename)+" too big";
  buffer.set([0,0,0,0,0,0,0,0,
              0,0,0,0,0,0,0,0,
              0,0,0,0,0,0,0,0,
              0,0,0,0], addr+4);
  for (var i=0;i<filename.length;i++)
    buffer[addr+4+i] = filename.charCodeAt(i);
  // Write the data in
  for (var i=0;i<fileSize;i++)
    buffer[addr+32+i] = data.charCodeAt(i);
  // return next addr
  return nextAddr;
}

/* Convert the given files to the format used by the Storage module,
and return the Intel Hex file for it all. */
function toIntelHex(files) {
  var saveAddress, saveSize;
  try {
    saveAddress = Espruino.Core.Env.getData().chip.saved_code.address;
    saveSize = Espruino.Core.Env.getData().chip.saved_code.page_size *
               Espruino.Core.Env.getData().chip.saved_code.pages;
  } catch (e) {
    throw new Error("Board JSON not found or doesn't contain the relevant saved_code section");
  }
  var buffer = new Uint8Array(saveSize);
  buffer.fill(0xFF); // fill with 255 for emptiness
  var offset = 0;
  for (var filename in files) {
    console.log(`Storage: set ${JSON.stringify(filename)} at ${offset} (${files[filename].length} bytes)`);
    offset = setStorageBufferFile(buffer, offset, filename, files[filename]);
  }
  if (offset>saveSize)
    throw new Error(`Too much code to save (${offset} vs ${saveSize} bytes)`);
  // Now work out intel hex
  function h(d) { var n = "0123456789ABCDEF"; return n[(d>>4)&15]+n[d&15]; }
  function ihexline(bytes) {
    bytes.push(1+(~bytes.reduce((a,b)=>a+b)&255)); // checksum - yay JS!
    return ":"+bytes.map(h).join("")+"\r\n";
  }
  var lastHighAddr = -1;
  var ihex = "";
  for (var idx=0;idx<saveSize;idx+=16) {
    var addr = saveAddress+idx;
    var highAddr = addr>>16;
    if (highAddr != lastHighAddr) {
      lastHighAddr = highAddr;
      ihex += ihexline([2,0,0,4,(highAddr>>8)&255,highAddr&255]);
    }
    var bytes = [
      16/*bytes*/,
      (addr>>8)&0xFF, addr&0xFF,
      0]; // record type
    for (var j=0;j<16;j++) bytes.push(buffer[idx+j]);
    ihex += ihexline(bytes);
  }
  // END OF FILE marker (so don't copy this if you're trying to manually merge files!)
  ihex += ":00000001FF\r\n";
  return ihex;
}

// create a job file from commandline settings
function makeJobFile(config) {
  var job = {"espruino":{}};
  // assign commandline values
  for (var key in args) {
    switch (key) {
      case 'job': // remove job itself, and others set internally from the results
      case 'espruinoPrefix':
      case 'espruinoPostfix':
        break;
      default: job[key] = args[key];  // otherwise just output each key: value
    }
    // write fields of Espruino.Config passed as config
    for (var k in config) { if (typeof config[k]!=='function') job.espruino[k] = config[k]; };
  }
  // name job file same as code file with json ending or default and save.
  var jobFile = isNextValidJS(args.file) ? args.file.slice(0,args.file.lastIndexOf('.'))+'.json' : "job.json";

  if (!fs.existsSync(jobFile)) {
    log("Creating job file "+JSON.stringify(jobFile));
    fs.writeFileSync(jobFile,JSON.stringify(job,null,2),{encoding:"utf8"});
  } else
    log("WARNING: File "+JSON.stringify(jobFile)+" already exists - not overwriting.");
}

//header
if (!args.quiet) {
 var pjson = require(__dirname+'/../package.json');
 console.log(pjson.version);
 log(
   "Espruino Command-line Tool "+pjson.version+"\n"+
   "-----------------------------------\n"+
   "");
}

//Help
if (args.help) {
 getHelp().forEach(function(l) {log(l);});
 process.exit(1);
}

function sendCode(callback) {
  var code = "";
  if (args.file) {
    code = fs.readFileSync(args.file, {encoding:"utf8"});
  }
  if (args.expr) {
    if (code) {
      if (code[code.length-1]!="\n")
        code += "\n";
    } else
      Espruino.Config.RESET_BEFORE_SEND = false;
    code += args.expr+"\n";
  }
  if (Object.keys(args.storageContents).length && !code) {
    code += "\n";
  }
  if (code) {
    var env = Espruino.Core.Env.getData();
    if (!env.info || !env.info.builtin_modules) {
      log("********************************************************************");
      log("* No list of built-in modules found. If you get 'Module not found' *");
      log("* messages for built-in modules you may want to connect to a board *");
      log("* with '-p devicePath' or use '--board BOARDNAME'                  *");
      log("********************************************************************");
    }
    if (!args.outputHEX) {
      // if we're supposed to upload code somewhere ensure we do that properly
      for (var storageName in args.storageContents) {
        var storageContent = args.storageContents[storageName];
        if (storageContent.code) {
          Espruino.Config.SAVE_ON_SEND = 3; // to storage file
          Espruino.Config.SAVE_STORAGE_FILE = storageName; // the filename
          Espruino.Config.LOAD_STORAGE_FILE = 2; // Load the Storage File just written to
        }
      }
    }
    Espruino.callProcessor("transformForEspruino", code, function(code) {
      if (args.outputHEX) {
        log("Writing hex output to "+args.outputHEX);
        var storage = {}
        var hadCode = false;
        for (var storageName in args.storageContents) {
          var storageContent = args.storageContents[storageName];
          if (storageContent.code) {
            storage[storageName] = code;
            hadCode = true;
          } else {
            storage[storageName] = storageContent.data;
          }
        }
        // add code in default place
        if (!hadCode) storage[".bootcde"]=code;
        require("fs").writeFileSync(args.outputHEX, toIntelHex(storage));
      } else {
        // if not creating a hex, we just add the code needed to upload
        // files to the beginning of what we upload
        for (var storageName in args.storageContents) {
          var storageContent = args.storageContents[storageName];
          if (!storageContent.code) {
            code = Espruino.Core.Utils.getUploadFileCode(storageName, storageContent.data)+"\n" + code;
          }
        }
      }
      if (args.outputJS) {
        log("Writing output to "+args.outputJS);
        require("fs").writeFileSync(args.outputJS, code);
      }
      if (!args.nosend)
        Espruino.Core.CodeWriter.writeToEspruino(code, function() {
          if (args.sleepAfterUpload) {
            log("Upload Complete. Sleeping for "+args.sleepAfterUpload+"s");
            setTimeout(callback, args.sleepAfterUpload*1000);
          } else {
            log("Upload Complete");
            callback();
          }
        });
      else
        callback();
    });
  } else {
    callback();
  }
}

/* Download a file from Espruino */
function downloadFile(callback) {
  Espruino.Core.Utils.downloadFile(args.fileToDownload, function(contents) {
    if (contents===undefined) {
      log("Timed out receiving file")
      if (!args.file && !args.updateFirmware && !args.expr) return process.exit(0);
      if (callback) return callback();
    }

    //Write file to current directory
    require("fs").writeFileSync(args.fileToDownload, contents);
    log(`"${args.fileToDownload}" successfully downloaded.`);
    if (!args.file && !args.updateFirmware && !args.expr) return process.exit(0);
    if (callback) return callback();
  });
}

/* Connect and send file/expression/etc */
function connect(devicePath, exitCallback) {
  if (args.ideServer) log("WARNING: --ide specified, but no terminal. Don't specify a file/expression to upload.");
  if (!args.quiet && !args.nosend) log("Connecting to '"+devicePath+"'");
  var currentLine = "";
  var exitTimeout;
  // Handle received data
  Espruino.Core.Serial.startListening(function(data) {
   data = String.fromCharCode.apply(null, new Uint8Array(data));
   currentLine += data;
   while (currentLine.indexOf("\n")>=0) {
     var i = currentLine.indexOf("\n");
     log(args.espruinoPrefix + currentLine.substr(0,i)+args.espruinoPostfix);
     currentLine = currentLine.substr(i+1);
   }
   // if we're waiting to exit, make sure we wait until nothing has been printed
   if (exitTimeout && exitCallback) {
     clearTimeout(exitTimeout);
     exitTimeout = setTimeout(exitCallback, 500);
   }
  });
  if (!args.nosend) {
    Espruino.Core.Serial.open(devicePath, function(status) {
      if (status === undefined) {
        console.error("Unable to connect!");
        return exitCallback();
      }
      if (!args.quiet) log("Connected");
      // Do we need to update firmware?
      if (args.updateFirmware) {
        var bin = fs.readFileSync(args.updateFirmware, {encoding:"binary"});
        var flashOffset = args.firmwareFlashOffset || 0;
        Espruino.Core.Flasher.flashBinaryToDevice(bin, flashOffset, function(err) {
          log(err ? "Error!" : "Success!");
          exitTimeout = setTimeout(exitCallback, 500);
        });
      } else {
        // Is there a file we should download?
        if (args.fileToDownload) {
          // figure out what code we need to send (if any) and download the file
          sendCode(function() {
            downloadFile(function() {
              exitTimeout = setTimeout(exitCallback, 500);
            });
          });
        } else {
          // figure out what code we need to send (if any)
          sendCode(function() {
            exitTimeout = setTimeout(exitCallback, 500);
          });
        }
      }
      // send code over here...

      // ----------------------
     }, function() {
       log("Disconnected.");
       exitCallback();
     });
  } else {
    sendCode(function() {
      exitTimeout = setTimeout(exitCallback, 500);
    });
  }
}

function sendOnFileChanged() {
  var busy = false;
  var watcher = require("fs").watch(args.file, { persistent : false }, function(eventType) {
    if (busy) return;
    /* stop watching - some apps delete & recreate, so continuing
     to watch would break */
    if (watcher) watcher.close();
    watcher = undefined;
    busy = true;
    console.log(args.file+" changed, reloading");
    setTimeout(function() {
      sendCode(function() {
        console.log("File sent!");
        busy = false;
        // start watching again
        sendOnFileChanged();
      });
    }, 500);
  });
}

/* Start a webserver for the Web IDE */
function startWebIDEServer(writeCallback) {
  var httpPort = args.ideServer;
  var server = require("http").createServer(function(req, res) {
    res.end(`<html>
<body style="margin:0px">
<iframe id="ideframe" src="https://www.espruino.com/ide/" style="width:100%;height:100%;border:0px;"></iframe>
<script src="https://www.espruino.com/ide/embed.js"></script>
<script>
  var ws = new WebSocket("ws://" + location.host + "/ws", "serial");
  var Espruino = EspruinoIDE(document.getElementById('ideframe'));
  Espruino.onports = function() {
    return [{path:'local', description:'Connected Device', type : "net"}];
  };
  Espruino.onready = function(data) { Espruino.connect("local");};
  Espruino.onwrite = function(data) { ws.send(data); }
  ws.onmessage = function (event) { Espruino.received(event.data); };
  ws.onclose = function (event) { Espruino.disconnect(); };
</script>
</body>
</html>
`);
  });
  server.listen(httpPort);
  log("Web IDE is now available on http://localhost:"+httpPort);
  /* Start the WebSocket relay - allows standard Websocket MQTT communications */
  var WebSocketServer = require('websocket').server;
  var wsServer = new WebSocketServer({
    httpServer: server,
    autoAcceptConnections: false
  });
  var ideConnections = [];
  wsServer.on('request', function(request) {
    // request.reject() based on request.origin?
    var connection = request.accept('serial', request.origin);
    ideConnections.push(connection);
    log('Web IDE Connection accepted.');
    connection.on('message', function(message) {
      if (message.type === 'utf8') writeCallback(message.utf8Data);
    });
    connection.on('close', function(reasonCode, description) {
      log('Web IDE Connection closed.');
      var conIdx = ideConnections.indexOf(connection);
      if (conIdx>=0) ideConnections.splice(conIdx,1);
    });
  });

  return {
    write : function(data) {
      ideConnections.forEach(function(connection) { connection.sendUTF(data) });
    }
  };
}

/* Connect and enter terminal mode */
function terminal(devicePath, exitCallback) {
  if (!args.quiet) log("Connecting to '"+devicePath+"'");
  var hadCtrlC = false;
  var hadCR = false;
  var ideServer = undefined;
  process.stdin.setRawMode(true);
  Espruino.Core.Serial.startListening(function(data) {
    data = new Uint8Array(data);
    var dataStr = String.fromCharCode.apply(null, data);
    if (ideServer) ideServer.write(dataStr);

    process.stdout.write(dataStr);
    /* If Espruino responds after a Ctrl-C with anything other
     than a blank prompt, make sure the next Ctrl-C will exit */
    for (var i=0;i<data.length;i++) {
      var ch = data[i];
      if (ch==8) hadCR = true;
      else {
        if (hadCtrlC && (ch!=62 /*>*/ || !hadCR)) {
          //process.stdout.write("\nCTRLC RESET BECAUSE OF "+JSON.stringify(String.fromCharCode.apply(null, data))+"  "+hadCR+" "+ch+"\n");
          hadCtrlC = false;
        }
        hadCR = false;
      }
    }
  });
  Espruino.Core.Serial.open(devicePath, function(status) {
    if (status === undefined) {
      console.error("Unable to connect!");
      return exitCallback();
    }
    if (!args.quiet) log("Connected");
    process.stdin.on('data', function(chunk) {
      if (chunk !== null) {
        chunk = chunk.toString();
        Espruino.Core.Serial.write(chunk);
        // Check for two Ctrl-C in a row (without Espruino doing anything inbetween)
        for (var i=0;i<chunk.length;i++) {
          var ch = chunk.charCodeAt(i);
          if (ch==3) {
            if (hadCtrlC) {
              process.stdout.write("\r\n");
              exitCallback();
            } else {
              // if we had ctrl-c, but didn't receive anything
              setTimeout(function() {
                if (hadCtrlC) process.stdout.write("\nPress Ctrl-C again to exit\n>");
              }, 200);
            }
            hadCtrlC = true;
          }
        }
      }
    });
    process.stdin.on('end', function() {
      console.log("STDIN ended. exiting...");
      exitCallback();
    });

    if (args.ideServer)
      ideServer = startWebIDEServer(function(data) {
        Espruino.Core.Serial.write(data);
      });

    if (args.fileToDownload) {
      // figure out what code we need to send (if any) and download the file
      sendCode(function() {
        downloadFile(function() {
          if (args.watchFile) sendOnFileChanged();
        });
      });
    }
    else {
      // figure out what code we need to send (if any)
      sendCode(function() {
        if (args.watchFile) sendOnFileChanged();
      });
    }
   }, function() {
     log("\nDisconnected.");
     exitCallback();
   });
}

/* If the user's asked us to find a device by name, list
all devices and search */
function getPortPath(port, callback) {
  if (port.type=="path") callback(port.name);
  else if (port.type=="name") {
    log("Searching for device named "+JSON.stringify(port.name));
    var searchString = port.name.toLowerCase();
    var timeout = 5;
    Espruino.Core.Serial.getPorts(function cb(ports, shouldCallAgain) {
      //log(JSON.stringify(ports,null,2));
      var found = ports.find(function(p) { return p.description && p.description.toLowerCase().indexOf(searchString)>=0; });
      if (found) {
        log("Found "+JSON.stringify(found.description)+" ("+JSON.stringify(found.path)+")");
        callback(found.path);
      } else {
        if (timeout-- > 0 && shouldCallAgain) // try again - sometimes BLE devices take a while
          setTimeout(function() {
            Espruino.Core.Serial.getPorts(cb);
          }, 500);
        else {
         log("Port named "+JSON.stringify(port.name)+" not found");
         process.exit(1);
       }
      }
    });
  } else throw new Error("Unknown port type! "+JSON.stringify(port));
}

function tasksComplete() {
  console.log("Done");
  process.exit(0);
}

function startConnect() {
  if ((!args.file && !args.updateFirmware && !args.expr) || (args.file && args.watchFile)) {
    if (args.ports.length != 1)
      throw new Error("Can only have one port when using terminal mode");
    getPortPath(args.ports[0], function(path) {
      terminal(path, tasksComplete);
    });
  } else {
    //closure for stepping through each port
    //and connect + upload (use timeout callback [iterate] for proceeding)
    (function (ports, connect) {
      this.ports = ports;
      this.idx = 0;
      this.connect = connect;
      this.iterate = function() {
        if (idx>=ports.length) tasksComplete();
        else getPortPath(ports[idx++], function(path) {
          connect(path,iterate);
        });
      };
      iterate();
    })(args.ports, connect);
  }
}

function main() {
  setupConfig(Espruino, function() {
    if (args.job==="") makeJobFile(Espruino.Config);
    if (args.ports.length == 0 && (args.outputJS || args.outputHEX)) {
      console.log("No port supplied, but output file listed - not connecting");
      args.nosend = true;
      sendCode(tasksComplete);
    } else if (args.ports.length == 0 || args.showDevices) {
      console.log("Searching for serial ports...");
      var timeout = 5;
      var allPorts = [];
      var outputHeader = false;
      Espruino.Core.Serial.getPorts(function cb(ports, shouldCallAgain) {
        var newPorts = ports.filter(port=> !allPorts.find(p=>p.path==port.path));
        allPorts = allPorts.concat(newPorts);
        // if we're explictly asked for ports, output them
        // else just write it only if verbose
        if (newPorts.length) {
          if (args.showDevices) {
            if (!outputHeader) {
              log("PORTS:");
              outputHeader = true;
            }
            newPorts.forEach(p=>
              log(`  ${p.path}  (${p.description})${p.rssi?` RSSI ${p.rssi}`:""}`));
          } else {
            newPorts.forEach(p=>
              console.log("NEW PORT: "+p.path + " ("+p.description+")"));
          }
        }

        if (!args.showDevices && allPorts.length) {
          if (!args.nosend) log("Using first port, "+JSON.stringify(allPorts[0]));
          args.ports = [{type:"path",name:allPorts[0].path}];
          startConnect();
        } else if (timeout-- > 0 && shouldCallAgain) {
          // try again - sometimes BLE devices take a while
          setTimeout(function() {
            Espruino.Core.Serial.getPorts(cb);
          }, 500);
        } else {
          if (allPorts.length==0) {
            console.error("Error: No Ports Found");
            if (!args.verbose)
              log("  - Try running with --verbose and check for errors initialisting modules");
            process.exit(1);
          } else {
            process.exit(0);
          }
        }
      });
    } else startConnect();
  });
}

// Start up
require('../index.js').init(main);

redpajama_set_name: RedPajamaGithub


text:
Tag Archive for 'Invisible Hand'
The kinship of private equity and small business
in Banking - Investors - Capital and Start-up
Mitt Romney's record in the private equity industry has become part of the election year political debate. The Romney campaign offers it as a positive credential and the Obama campaign has disparaged the industry as a way of casting a negative on Romney's record.
Recently, a former leader in the private equity sector and President Obama's former "car czar" and loyal supporter, Steven Rattner, weighed in with support for private equity by allowing that these firms are completely legitimate and add value to our economic system. But, as if to throw a bone to his former boss, Rattner also pointed out that private equity firms are founded to create wealth, not jobs. Here is one of Rattner's quotes on this issue:
"Bain Capital — like other private equity firms — was founded and managed for profit … earned legally and legitimately. Any job creation was a welcome but a secondary byproduct."
With this pronouncement, Mr. Rattner finds himself in historic company.
In his seminal work, "The Wealth of Nations" (1776), Adam Smith, introduced his now immortal "invisible hand" theory, which proposes that an individual, "led by an invisible hand" in pursuit of "his own interest, frequently promotes that of society more than when he really intends to promote it."
For Smith, who is considered the father of economics, there was no chicken/egg quandary. The chicken – individual self-interest – comes first, followed by the egg – benefit to society. Mr. Rattner, perhaps without intending it, is singing Smith's song in 21st century English: profit first, jobs second.
Nor is there a chicken/egg quandary today. In our capitalist, free-market economic system, the chicken is profit and the egg is jobs. It's superfluous to say that jobs are the secondary byproduct of private equity; jobs are the byproduct of capitalism – period. In fact, the only economic system that has job creation as a founding imperative is communism.
From the very first small business created in America to the millions that have been formed since, from the sole proprietor to the 499-employee high-growth enterprise, all were founded with the nuclear notion of generating profits that will ultimately create wealth. And as essential as employees are to accomplishing a business founder's wealth-creation goal, no pre-start-up entrepreneurial dreamer ever thought, "I want to commit all of my time, energy and resources – and risk everything – so I can create jobs."
Like any venture that takes risks, private equity firms have to make tough business decisions and they make mistakes, which are fair game for critics. But if you're going to malign private equity firms because their founding principle is to create profit and wealth, then you would have to extend that indictment to all 26 million American small businesses.
Led by an invisible hand in pursuit of their own wealth-creation self-interests, America's small businesses benefit society by producing over half of U.S. GDP, creating most of America's new jobs and delivering tens-of-millions of paychecks to their productive and grateful employees every month.
For small business, the chicken is profit and the egg is jobs.
I talked more about the "Profit first - jobs second" business motivation on The Small Business Advocate Show. Click here to listen or download.
Take this week's poll HERE!
The 3/50 Project meets the small business "invisible hand"
in Entrepreneurship, Inspirational and Motivational and Marketing - Branding - Advertising
In Wealth of Nations, the 1776 book that essentially launched modern economics, Adam Smith introduced a concept he called the "invisible hand." Please, allow me to put Smith's 18th century Scottish words into 21st century context: When a business owner works on her business, with the single-minded purpose of only benefiting herself and no one else, that very free market activity actually benefits society, as if by an invisible hand, even when no such benefit was intended.
So, if Smith's idea about business activity is correct, and I think it is, wouldn't it be a good thing to make more of that "invisible hand" stuff happen? Of course, but how do we do that?
Well, duh!! Just do more business with a small business. And if you agree with me that many little invisible hands will benefit society more than a few great big invisible hands, compare this invisible hand leverage opportunity: Big companies in the U.S. are identified as the Fortune 1000, but there are approx. 26 MILLION small businesses in America. Pardon me, but, again - duh!!!
So, next time you have the option of doing business with a small firm, of course, make them earn your business; but add into your consideration the invisible hand effect which proposes that the more local small businesses are successful, the more the local community will be successful. And, as I've always said, what's good for small business is good for the world.
Recently, Cinda Baxter joined me on my radio program, The Small Business Advocate Show, to update us on a great program that promotes business locally, The 3/50 Project. A member of my Brain Trust, Cinda founded the 3/50 Project in 2009 to help strengthen independent brick and mortar small businesses, and it's saving Main Street one small business at a time. Cinda is a former retail store owner turned retail consultant and coach at Always Upward. Take a few minutes to listen to our conversation and, as always, leave your thoughts. Listen Live! Download, Too!


text:
The Snake's Curse
by Zack Davisson in Cursed Houses, Magical Animal Stories Tags: Cursed Houses, kaidan, mysterious animals
Translated from Edo Tokyo Kaii Hyakumonogatari
In North Toyoshima, in the town of Oji, a dealer in hardware named Kumatani Harumachi had a house where five people died in the month of March. In fear of a similar fate, the house had stood empty ever since.
But on August 2nd, the house of Harumachi's younger brother, Tamura Sanmachi, was destroyed in a landslide after heaving flooding brought some seaside cliffs tumbling down. Sanmachi and his wife Aki moved into the abandoned house of his older brother. From the very first night, Aki was besieged with terrible nightmares. It was more than she could handle, and eventually Aki and her husband moved again and had the cursed house torn down.
The curse was said to have begun some two or three years earlier, when Harumachi was working in his back yard. He had decided to remove a saikachi tree, and when he cut it down he saw five snakes pouring out of a hollow in the tree. Even with his wife pleading him to stop, Harumachi swung his hatchet at the snakes and cut off all five of their heads, the flung their bodies into the Keshin river to be washed away.
That same hatchet was later used to murder Harumachi and his entire family, and the neighborhood began to whisper about the snake's curse.
There are many similar legends about the curses of snakes. It was reported in a newspaper that a child was hurt by a snake in Tachimori village while gathering dry grass for horses. In response the village got together and worked to drive all of the snakes from the village, but that night the villagers were tortured by dreams of great masses of snakes crawling over their bodies. The nerves of even the toughest man were severely shaken, and several people went mad.
Previous The Writing of Tanuki Next Goryo Shinko – The Religion of Ghosts


10K White Gold Mens Ladies Genuine Diamond Studs 4 Prong Kite Earrings 0.26 Ct.
10K White Gold Round Diamond Earrings Mens Ladies Pave Set Kite Stud 1/20 ct.
10K Yellow Gold Diamond Studs Concave Kite Pave Mens Ladies Earrings 0.25 Ct.
10K Yellow Gold Real Diamond 3D Square Cube Fluted Studs 6.75mm Earrings 1/3 CT.
10K Yellow Gold Real Diamond Pave Studs Small 13.40mm Kite Earrings 0.50 Ct.
10K Yellow Gold Round Diamond Studs Pave Set Domed Square 7mm Earrings 0.15 Ct.
14k White Gold Genuine Diamond Studs Square-Shape Halo 7mm Kite Earring 0.25 CT.
Black Diamond Earrings 10K White Gold Round Pave Square Design Studs 1 Tcw.
Black Diamond Square Checkered Earrings .925 Sterling Silver Studs 1.20 Ct.
Blue Diamond Kite Earrings 10K White Gold Round Pave Square Studs 0.91 Tcw.
Blue Diamond Square Earrings .925 Sterling Silver Round Pave Studs 0.10 Ct.


Tonight we are engaged in conversation with David Cramer, the creator of My Shortcodes and Caldera Engine.
I identify David's persona and engineering specialty as an "Engine Creator". Behind every amazing race car win you ever saw, there was a team of engineers and grease monkeys behind the scenes that fine-tuned the engine of the car to amazing precision and performance. Driving the efficiency beyond what the original manufacturers ever thought was possible. That's what David Cramer can do with WordPress and the plugins he has created.
He's taken the stock 4 cylinder engine in your typical WordPress installation and given you the ability to drop in a super vortex V8 that can do things with shortcodes that you never thought were possible. We're talking shortcodes within shortcodes here. The Tony Stark ARC reactor of aftermarket WordPress mods and the best part is, that Caldera Engine is a plugin that exports other plugins. It's literally a Plugin Construction Kit.
David is also an active contributor in the PODS plugin, which we will talk with him about on another night. You can read up about it in the meantime and even help to contribute to the beta-testing phase. So pull up a chair, grab a cold one and join me in my conversation with David Cramer.


It should come as no surprise to most of us that the mobile app boom is over. The question is: what's going to replace it?
For my money, it's going to be bots. More precisely, chatbots on messaging platforms like Facebook Messenger, WeChat, SnapChat, etc. All of these platforms are the new content delivery platforms that content marketers need to keep up with. Why you may ask? Well, before I reveal that, let's take a step back and start at the beginning.
What's All This Stuff About Bots Anyway?
Before we dig into the why and then the how, let me explain the different kinds of bots. I like to split bots into two basic types. The first is Artificial Intelligence (AI) based (think Amazon Alexa) and the second is Automated Help (AH) based (like automated phone systems).
AI-based bots use natural language processes of either text or voice to figure out what the user wants. The classic example is asking Alexa to play the latest news or start a kitchen timer. The computing horsepower and skill required to deploy such bots is beyond the average content marketer even if you have CS or engineering degree.
AH-based bots are more like your automated phone system where you press 1 for sales, press 2 for customer support, press 0 for a human, etc. This type is a more list of menus with some AI to recognize voice commands instead of relying on natural language. Implementing these types of bots is a lot easier. There are platforms, like ChatClub, that automate a lot of the development. More on that later when we talk about how we created a bot for one of our clients.
Chatbots have come a long, long way from those annoying automated phone systems. As I mentioned before, the app boom is over. So, where will your potential customers spend most of their time? It turns out mobile messaging apps have now surged past social media apps in popularity. This means that people prefer messaging to posting on feeds or even reading feeds. That makes a lot of sense considering how much social media noise there is out there. In my mind, bots are the new email opt in — you, as the user, choose to get updates.
Now, I'm sure some of you are shaking your head and saying, "apps will never die just like programs did not die on a desktop." True you are but just like desktop apps moving to SaaS based apps, so will mobile apps and here is why. You really don't need most apps to be native just like you don't need desktop apps like a Word processor, Spreadsheet or name your app to be native. On mobile, it's even more interesting since the UI is a lot more restrictive than a desktop — so all those desktop apps just don't translate well to mobile. In fact, most smartphone users download zero apps per month. So what do they use their phones for?
It's only a matter of time before the popular mobile apps (read messaging), figure out how to do exactly what SaaS guys did but catered to what people do on mobile — namely chat with friends, listen to music, check email, look for places to eat, and get directions. The OS vs Messaging App battle is on and since now most Internet usage is mobile for the first time ever. It's time to create a better mobile experience.
There has been a movement afoot to make websites more mobile friendly. This is called Responsive Design and it mostly gets it right. The reason that companies want to reuse what they have already done is the whole build vs buy dilemma. At its essence, build vs buy is about costs to develop and it's now getting more and more costly to develop custom apps. What this means is that brands are going to need to think long and hard about where to spend their development dollars since no one is downloading them.
This give messaging applications an opportunity to provide a SuperApp to do most things people do on mobile — namely chat, search, and purchase. This is a powerful concept since most people are using a chat or messenger platform a lot more than anything else and the average app loses 75% of it's users after one day — not a good ROI for app development at all.
Messaging platforms are a big deal and every content marketer needs to have a strategy on how to create content and engagement on these platforms. The easiest way to start is to pick one of the most popular platforms and create a simple bot. Right now; one of the most popular chat platforms is Facebook Messenger.
One of our clients, Dontari Poe, wanted to create a Chatbot for his Facebook fan page. For that, we choose ChatClub since it's a really simple platform that's free to setup.
ChatClub is a chatbot platform for Messenger. It takes about 5 minutes to set up and does not require a slew of developers, AI experts or UI designers. All you have to do is go to ChatClub, connect your Facebook Messenger account (you can select which page), and get going. Once setup, you can start group chats, multiplayer quizzes, and music streams all for free.
Take a look at our first attempt for Dontari. It took about 5 minutes to set up and about 30 minutes for me to get all the photos created and cropped via Canva. Content always takes the most time.
While you're there, why not like his page? He would appreciate it.
Dontari Poe's chatbot is really simple and does not have much AI in it at all. That's actually a good thing since on mobile, you don't want to have to type on a small keyboard a sentence that the bot can't figure out. Super annoying.
Lazyset: I'm always on Spotify looking for new things to listen. It can be a pain to figure out. Enter Lazyset. This bot will do a custom mix for you and put it right in your Spotify account. It actually works well. Can't wait till Yelp gets a bot to help with those annoying office lunchtime dilemmas like "where should we go to lunch?" First world problems.
GrowthBot: comes from the guys over at HubSpot. It helps you with all your sales and marketing growth needs. It's pretty darn useful and worth checking out. Lots of nifty natural language stuffs that is an AI programmer's nirvana. If you're in the content marketing game, this is the one to keep up with. It's really useful.
EsterBot: Esther Crawford is a San Francisco-based marketer who found an incredibly creative way of using bots to promote her brand. She turned her resume into a chatbot. That's a pretty creative and a lot more of a cool factor than some Times New Roman PDF'ed resume. I jest. She seems more like a Font Awesome kinda gal.
The fact still remains that no amount of fancy interface or shinny new object is going to replace high quality, relevant content. Chatbots are just another way to deliver it. I'm sure there will be a time when users will figure out how to filter out all those new messages from spammy chatbots. For now, I would recommend you experiment with your own chatbot and see how this new platform will get your great content to the people who want to see it.


I have just received my Yoga C930 today and it have some display issues.
How does one fix this?
First thing, run Lenovo Vantage to make sure everything is up to date, including the BIOS. Sometimes, that'll fix things.
We see this a lot with 4k displays. A lot of software makers haven't updated their products for the higher resolutions.
Thanks seem to be working.


text:
Over 50 staff who slept overnight in Clonakilty Hospital are thanked by HSE
March 2nd, 2018 10:44 AM
By Siobhan Cronin
Snow in Kinsale this morning in a photo sent to us by Cormac Fitzgerald
THE HSE has thanked staff for going beyond the call of duty to ensure they made it to work today.
In a statement issued by Cork Kerry Community Healthcare, 51 staff in Clonakilty - and many more in hospitals around the region - were thanked for their dedication to their jobs.
The statement, issued this morning also points out that all clinics in Cork and Kerry are cancelled for the day.
The HSE adds: 'We wish to advise the public that there will continue to be a significant impact on services today, although staff are doing their utmost keep essential services running. There will be significant challenges for the delivery of services in the coming days and we again thank the public for their understanding and patience. As previously confirmed, all non-essential clinics and appointments are cancelled across Cork and Kerry today.'
It says that 'tremendous efforts are being made to ensure that some public health nurses and home support visits go ahead.'
'However, it will not be possible to make every call we would like to. We'd like to repeat some of the advice issued earlier in the week. This includes asking people, where it is safe to do so, to check on older neighbours and vulnerable people in the community. We'd also like to remind people of the advice onwww.winterready.ie/en/guides/health in dealing with cold weather. This include the advice to · Stay indoors. · Keep at least one room heated to 18 degrees. · Eat well and keep active. · Be mindful of risk of slips, trips and falls. We thank staff who have been working over the past few days, and also thank the other agencies who have enabled them to make it to the most vulnerable, including local authorities, the Defence Forces and the voluntary emergency services.'
It says some the examples of staff going above and beyond in recent days include: - 51 staff have slept at Clonakilty Community Hospital yesterday and last night, having gotten there thanks to the efforts of volunteers and the voluntary defence services. Some staff and management have been on site since Tuesday evening. -
Staff from community hospitalx in Schull and Killarney have stayed in local hotels so that they can work extra shifts to cover colleagues who couldn't make it to work. - In all facilities, staff living close to community hospitals and residential facilities have offered to come in and cover their colleagues who would be travelling distances. -
Public health nurses and home helps have made urgent calls yesterday and will make a limited number of priority calls again today, with the help of Defence Forces and the voluntary emergency services. -
Medical and nursing staff working in acute and residential mental health facilities across Cork and Kerry stayed onsite and overnight in local hotels so that they can be brought to work yesterday and today, coming in hours earlier than they were rostered to, and staying later than their shift to ensure safe service provision at all times. These are just some examples of the lengths staff have gone to in recent days.
Chief Officer of Cork Kerry Community Healthcare Ger Reaney said the response of staff had been exceptional. 'Staff have worked in exceptionally difficult circumstances in recent days. Many staff in community hospitals and residential centres have come in early and slept on site. Home helps and public health nurses have been able to make priority calls in extremely challenging conditions, thanks to the help of the Defence Forces and voluntary emergency services. The dedication of our staff has helped us to support some of the most vulnerable members of the community. There are countless examples of this level of commitment and dedication, and I'd like to thank staff for their exceptional efforts,' he said. ·
All updates about HSE services, local and national, will appear on hse.ie/weatherwarning ·
Winterready.ie also has useful advice on how to deal with the current weather conditions.


each in pigments on paper, comprising: a painting depicting a fuji-musume ('wisteria maiden') dancing between red ferns; and a painting of an oni ('demon') holding a drum and an accounting book, unsigned. Individually framed. 2 pieces.
Sight of the smaller: 9 1/4 x 8 in. The painting of the Fuji musume has some fading to the colors and some discoloration at the corners (possibly from tape). The painting of the oni has creases and the paper has some discoloration (consistent with age). Note: the paintings were not removed from their frames for inspection.


text:
What I Don't Like About Life in the American Police State
Tags: Department of Homeland Security, drones, first amendment, police militarization, police state, private prisons, surveillance
"A patriot must always be ready to defend his country against his government."―Edward Abbey, American author
There's a lot to love about America and its people: their pioneering spirit, their entrepreneurship, their ability to think outside the box, their passion for the arts, etc. Increasingly, however, as time goes by, I find the things I don't like about living in a nation that has long since ceased to be a sanctuary for freedom are beginning to outnumber the things I love.
Here's what I don't like about living in the American police state: I don't like being treated as if my only value to the government is as a source of labor and funds. I don't like being viewed as a consumer and bits of data. I don't like being spied on and treated as if I have no right to privacy, especially in my own home.
I don't like government officials who lobby for my vote only to ignore me once elected. I don't like having representatives incapable of and unwilling to represent me. I don't like taxation without representation.
I don't like being bullied by government bureaucrats, vigilantes masquerading as cops, or faceless technicians. I don't like being railroaded into financing government programs whose only purpose is to increase the power and wealth of the corporate elite. I don't like being forced to pay for wars abroad that serve no other purpose except to expand the reach of the military industrial complex.
I don't like being subjected to scans, searches, pat downs and other indignities by the TSA. I don't like VIPR raids on so-called "soft" targets like shopping malls and bus depots by black-clad, Darth Vader look-alikes. I don't like fusion centers, which represent the combined surveillance efforts of federal, state and local law enforcement.
I don't like being treated like an underling by government agents who are supposed to be working for me. I don't like being threatened, intimidated, bribed, beaten and robbed by individuals entrusted with safeguarding my rights. I don't like being silenced, censored and marginalized. I don't like my movements being tracked, my conversations being recorded, and my transactions being catalogued.
I don't like how the presidency has developed into a neo-monarchy replete with all the luxury and lasciviousness of the feudal lords of old.
I don't like politicians who spend most of their time running for office, fundraising and enjoying being feted by lobbyists and corporations alike. I don't like being kept at a distance from my elected representatives, including the president (a.k.a. the Emperor). I don't like free speech zones, roving bubble zones and trespass laws that restrict Americans' First Amendment rights.
I don't like laws that criminalize Americans for otherwise lawful activities such as holding religious studies at home, growing vegetables in their yard, and collecting rainwater. I don't like the NDAA, which allows the president and the military to arrest and detain American citizens indefinitely. I don't like the Patriot Act, which opened the door to all manner of government abuses and intrusions on our privacy.
I don't like the Department of Homeland Security (DHS), which has become America's standing army in direct opposition to the dire warnings of those who founded our country. I don't like military weapons such as armored vehicles, sound cannons and the like being used against the American citizens. I don't like government agencies such as the DHS, Post Office, Social Security Administration and Wildlife stocking up on hollow-point bullets. And I definitely don't like the implications of detention centers being built that could house American citizens.
I don't like the fact that since President Obama took office, police departments across the country "have received tens of thousands of machine guns; nearly 200,000 ammunition magazines; thousands of pieces of camouflage and night-vision equipment; and hundreds of silencers, armored cars and aircraft."
I don't like America's infatuation with locking people up for life for non-violent crimes. There are over 3,000 people in America serving life sentences for non-violent crimes, including theft of a jacket, siphoning gasoline from a truck, stealing tools, and attempting to cash a stolen check. I don't like paying roughly $29,000 a year per inmate just to keep these nonviolent offenders in prison.
I don't like having my hard-earned taxpayer dollars used against me.
I don't like the partisan nature of politics today, which has so polarized Americans that they are incapable of standing in unity against the government's abuses. I don't like the entertainment drivel that passes for news coverage today.
I don't like the fact that those within a 25-mile range of the border are getting a front row seat to the American police state, as Border Patrol agents are now allowed to search people's homes, intimately probe their bodies, and rifle through their belongings, all without a warrant.
I don't like public schools that treat students as if they were prison inmates. I don't like zero tolerance laws that criminalize childish behavior. I don't like a public educational system that emphasizes rote memorization and test-taking over learning, synthesizing and critical thinking.
I don't like police precincts whose primary purpose—whether through the use of asset forfeiture laws, speed traps, or red light cameras—is making a profit at the expense of those they have sworn to protect. I don't like militarized police and their onerous SWAT team raids.
I don't like Department of Defense and DHS programs that transfer surplus military hardware to local and state police. I don't like government programs that reward cops for raiding homes and terrorizing homeowners. I don't like local police dressing and acting as if they were the military while viewing me as an enemy combatant.
I don't like being treated as if I have no rights.
I don't like cash-strapped states cutting deals with private corporations to run the prisons in exchange for maintaining 90% occupancy rates for at least 20 years. I don't like the fact that American prisons have become the source of cheap labor for Corporate America.
I don't like feeling as if we've come full circle back to a pre-Revolutionary era.
I don't like answering to an imperial president, who operates above the law. I don't like the injustice that passes for justice in the courts. I don't like prosecutors so hell bent on winning that they allow innocent people to suffer for crimes they didn't commit.
I don't like the double standards that allow government officials to break laws with immunity, while average Americans get the book thrown at them. I don't like cops who shoot first and ask questions later. I don't like police dogs being treated with more respect and afforded more rights than American citizens.
I don't like living in a suspect society. I don't like Americans being assumed guilty until they prove their innocence. I don't like the fact that 38 states require that a property owner prove his innocence when police have laid claim to it in a civil forfeiture proceeding, whether or not that individual has done anything wrong.
I don't like technology being used as a double-edged sword against us. I don't like agencies like DARPA developing weapons for the battlefield that get used against Americans back at home. I don't like the fact that drones will be deployed domestically in 2015, yet the government has yet to establish any civil liberties protocols to prevent them from being used against the citizenry.
Most of all, I don't like feeling as if there's no hope for turning things around.
Now there are those who would suggest that if I don't like things about this country, I should leave and go elsewhere. And there are certainly those among my fellow citizens who are leaving for friendlier shores. However, I happen to come from a long line of people who believe in the virtue of hard work and perseverance and in the principle that nothing worthwhile comes without effort.
So I'm not giving up, at least not anytime soon. But I'm also not waiting around for the government to clean up its act. I'm not making any deals with politicians who care nothing about me and mine. To quote Number Six, the character in the British television series The Prisoner: "I will not be pushed, filed, stamped, indexed, briefed, debriefed, or numbered! My life is my own!"
I plan to keep fighting, writing, speaking up, speaking out, shouting if necessary, filing lawsuits, challenging the status quo, writing letters to the editor, holding my representatives accountable, thinking nationally but acting locally, and generally raising a ruckus anytime the government attempts to undermine the Constitution and ride roughshod over the rights of the citizenry.
As I make clear in my book A Government of Wolves: The Emerging American Police State, we're at a crisis point in American history. If we don't get up off our duffs and get involved in the fight for freedom, then up ahead the graveyard beckons. As Martin Luther King Jr. warned, "The hottest places in hell are reserved for those who in a period of moral crisis maintain their neutrality."
Gunny G says:
Reblogged this on BLOGGING BAD w/Gunny G ~ "THE CLINGERS".
The Emperor's New Clothes: The Naked Truth About the American Police State
The Stealing of America by the Cops, the Courts, the Corporations and Congress


text:
Ben and Dion
Dion Almaer
Jake Archibald's brings Rick and Morty to the PWA Dev Summit
Team Web
I am at the Progressive Web Dev Summit in Amsterdam, surrounded not only by my Chromies, but also great web platform folk from Intel, Mozilla, Microsoft, Opera, and Samsung. We are also joined by awesome developers from all over, and it is interesting to note the issues they are dealing with.
One of them asked me "are you on Team Web?" and I had to ask he thought that meant. It came down to:
Believing in the philosophy behind the Web platform
Engaging and building to make the Web ecosystem better.
You can argue that most want to just get their job done, and that a thriving ecosystem needs the correct incentive structure. You would be correct, and this is why many of us spend a lot of time trying to help the ecosystem so it can better support the various players within it.
However, it is important to be able to note those who are on team web and thus the incentives that they have versus others. It is hard to talk about this without feeling like there is judgement here, but this isn't the point. It can help you understand some of the discussions (e.g. meta frameworks using the web as one projection vs. framework that only runs on the web etc).
What is different about the Web philosophy?
In the universe of computing platforms (of which there are few with momentum) the Web has always been special to me due to its open properties. A typical computing ecosystem will have (at least) a triangle of actors: platform (who sets the design? who gets to be an implementor?), developers who build products on top of the platform, and users.
With closed platforms there is often one controlling platform vendor who calls the shots and sets up the incentive structures and rules for the players. Good ones will make sure to take care of developers and users else they may not get too far, unless the platform is SO valuable itself.
We need to rely on competition between closed platforms in a given market to keep the power dynamic intact.
A great example of this was the early gaming console era. Read Console Wars for a reminder of how ruthless Nintendo was at its peak. They not only chose the games, but also the number cartridges you would get! We often complain about the rules of the app store, but this pales in comparison to other closed platforms.
Fortunately, there was room for Sega and others to find their own piece of the market. Being too strict will naturally allow for competition from a more open partner.
If we look at iOS, there were more forces at play. With the iPhone tied to AT&T, suddenly you saw a coalition of the willing; Verizon (and other carriers), Motorola (and other device manufacturers) are out in the cold when Google rocks up with Android. ⚡
Competing closed platforms can work, but you are relying on strong competition without players becoming too dominant.
The Web is an open platform with standards and multiple platform vendors (browsers) working together. To remain healthy you still require that no one vendor runs the entire show, but this is much easier to do with a meta platform. The meta platform has weaknesses, because it won't be able to jump onto one new capability that is added to one system, but the long term trade off is that you can build experiences that run across more systems. This gives you a diversity in reach, which becomes more important when there are more competing platforms as the cost of rebuilding experiences is prohibitive.
Today, you have a desktop experience that normally means a certain screensize, with mouse and keyboard inputs (touch is already making headway too).
On mobile you have more constraints, whether it be screensize, network, storage or compute.
Fast forward a lil and the inputs will be separated. Screens will be everywhere, with projections onto walls and eyeballs, and sitting on your wrist. The compute and storage may all run from the mixture of you cloud environment and the super computer in your pocket. Voice and gestures will join touch, mice, and keyboards.
We will have to think so differently about delivering our services across all of these. Shits gunna get crazy.
Who will own the dominant platforms? I certainly hope that the Web will be a driving force.
I have been fortunate enough to work for companies that have a strong love of the Web: Google, Mozilla, and even Palm. I have also worked on startups and enterprises where I needed to think in practical terms on what would be best for my customers. This time has been important as it allows me to empathize with those who aren't driven by platform ideology or philosophy.
Mozilla, as a mission driven organization fights for an open web. They fight for it similarly to someone who may fight for democracy. It feels like the best long term vehicle, yet as die hard as these people can be, they also tend to know its warts in detail.
Opera has always been a fierce driver of the Web, and it has been fantastic to see Microsoft's recent work and plans. I am so excited to have all of these companies join the Progressive Web Summit this week, and I feel like people are really coming together and pushing the web platform along quickly.
The fact that no one entity owns the Web is what many hold as the most important value.
If you take a look at other single vendor platforms, you can see the differences. As a single gatekeeper, if the platform provider gets enough market share that developers feel like they need to target it, you end up with:
Charging a developer a percentage to get their experiences into the hands of a user
A series of rules can be setup, including those that favor the platform vendor, and they can always be changed
Censorship of content
A single place for a government to go to sue / get information
It is often the case that platform rules are such that end users don't even understand them. For example, someone was complaining to me about the new Gboard keyboard last week. They were big fans of it, but mad at Google for not providing voice dictation. You can't blame them, it feels like a big sacrifice compared to the default keyboard. Why didn't Google just put that in? It isn't as though they don't have the technology to do so?
Technically though, there is no way to access the microphone, so it is impossible for a third party keyboard to offer this feature. You could argue that it may be in the name of security, but these type of systems make it very hard to break into certain services, and the platform owner weilds a large amount of power.
I will always have a special place for Team Web as it embodies a long term experiment that balances the forces better than anything else I have seen. These platforms have such leverage and global reach that it is important to keep that balance working for all.
So, thank you to everyone who self identifies as a member of Team Web, as well as those of you that are doing great work for the Web regardless of the philosophy.
More from Ben and Dion
now: Google, formerly: Walmart Labs, Set Direction, Ajaxians, webOSians, Mozillans, and more.
Read more from Ben and Dion
Developers @ Shopify; Karaoke Ready


text:
self-driving car
Uber's self-driving car saw pedestrian before fatal crash, but was programmed not to brake
The National Transportation Safety Board has released its preliminary report from the investigation into the fatal collision between an Uber self-driving vehicle and a pedestrian …
Dashcam video shows Uber driver was looking down moments before self-driving car killed pedestrian
Uber 'likely' not at fault in fatal accident involving its self-driving car
That self-driving bus 'crash' in Las Vegas was even less of a crash than we thought
Mike Wehner
Latest self-driving car
Autonomous cars without human drivers are coming to California next year
The California Department of Motor Vehicles has updated its rules governing self-driving vehicle testing, removing the requirement that a human backup driver be present in …
Congress moves on sweeping self-driving car rules that scrap safety standards
A US House subcommittee will vote Wednesday on a proposal that would sweep away existing rules for self-driving car manufacturers, according to Reuters. The proposal would …
MIT is developing futuristic self-driving cars that can fly you out of traffic
Drones can't stay up in the air for too long because they're limited by battery life. Self-driving cars, on the other hand, are limited by …
Tim Cook finally confirms Apple is working on self-driving cars
Tim Cook has finally confirmed one of the Apple rumors we keep seeing out there: Apple is working on self-driving car technology. The CEO said …
Uber is ignoring California rules on self-driving cars, and the government is pissed
Uber, the quintessential disrupter, has standard method of crashing into a new market: set up shop with low prices and zero permits for drivers; get …
Google has abandoned plans to make its own self-driving car
Google, one of a handful of tech companies at the forefront of the self-driving car revolution, will not make its own autonomous vehicle, according to a …
Google's self-driving car crashed, and humans are responsible
Google is one of the first companies to start testing autonomous vehicles technology. Unlike Tesla, which does it with the help of commercial vehicles, Google's self-driving …
Self-driving Uber rides are coming this summer, and they'll be free of charge
"The reason Uber could be expensive is because you're not just paying for the car — you're paying for the other dude in the car," …
Mercedes-Benz self-driving bus of the future just completed a 12-mile test trip
Self-driving cars will be terribly exciting once they're ready for mass consumption. Carmakers are still refining the software-hardware combinations that will make driverless cars feasible, …
This is Google's first self-driving minivan, but you can't buy one yet
Google on Tuesday confirmed what a couple of recent reports revealed: it's taking its self-driving cars project to the next level. Google isn't manufacturing brand new …
Volvo engineer blasts Tesla's 'unsupervised wannabe' autopilot
Tesla is the talk of the town when it comes to car innovation. Like it or not, Elon Musk's company made a splash in the …
A fleet of autonomous trucks drove hundreds of miles across Europe for a week
We can't purchase our very own self-driving cars just yet. Regulatory hurdles are still in the way and car makers aren't done testing autonomous vehicles …
You can already buy a car with self-driving features for just $22,000
Google may be testing its autonomous cars and teaching it not to hit buses, but other carmakers are already selling vehicles that have self-driving capabilities. Granted, these aren't …
Self-driving taxi service program already in testing in South Korea
It'll be a while until we'll be able to rent self-driving cars or hail driverless taxis, but it's more than clear that the self-driving car is one of …
Making your car autonomous could be as simple as mounting your phone on the dashboard
Ford and Google might be negotiating a major deal concerning self-driving cars, but there might be other ways to smarten up a vehicle without actually …
Google talking to Ford about self-driving cars
The next big thing in automotive will be self-driving cars – make that eco-friendly self-driving cars – and several companies are working on such consumer …
Act surprised: Samsung is following Apple's lead in smart car race
Apple is yet to confirm its Titan car project, but there's plenty of evidence that suggests the iPhone maker is eying the car industry for …
Toyota pours $1B into new Silicon Valley AI company to accelerate self-driving car research
Toyota, whose vehicles travel 1 trillion kilometers every year, won't sit idly by witnessing how Google, Apple, and Tesla shape the future of self-driving cars. …
Apple and Google are going to own the car industry, warns acclaimed sports car designer
Google and Apple have yet to release their own cars, but the two tech companies are already seen as potential tough adversaries for traditional carmakers. According …
Self-driving cars aren't just the future – they're here right now
Do you think of self-driving cars as some futuristic technology that's still decades away? Well, you shouldn't. As a 60 Minutes report from Sunday makes clear, …
Brad Reed
Apple's self-driving car sounds like it's closer to being unveiled than anyone expected
Apple takes its time launching new products, as the company will sometimes reveal in the aftermath of its announcements. Johny Ive and Co. worked on …
Let's laugh at this TechCrunch column on why 'driving your own car will soon be illegal'
There are times when you take a step back and realize just how clueless Silicon Valley is about the way the real world works. This …
This is Uber's self-driving car prototype
It's no secret that Uber is interested in cutting costs by replacing current cars with smart self-driving cars in the future. And it looks like the …
You'll see Google's cute self-driving car on public roads this summer
Google on Friday surprisingly announced that its own self-driving car will soon be ready for public testing. No, you won't be able to start using one yourself, …
You'll soon be able to put your Tesla Model S on 'autopilot'
Tesla's electric cars are a dream come true for some drivers, but that doesn't mean the amazing vehicles can't get even better. In addition to its …
Google might become the next Uber for… Ubers
A running joke in the tech community is to poke fun at all of the new startups that claim to be "an Uber for X," …
1. How does mobile call recording work for business?
2. MacBook Pro M2 Pro iFixit teardown shows improvements and problems
3. The big villain from Marvel's Fantastic Four reboot might've leaked
4. Today's deals: $90 smart TV, $50 JBL earphones, $72 HP Chromebook, $5 smart plugs, more
5. Apple supplier in India now producing components for AirPods
2. Apple's M1 MacBook Air is on sale for $799.99 at Best Buy
3. Best Deals: Tech, laptops, TVs, and more sales
4. 10 deals you can't miss on Saturday: $72 HP Chromebook, $6 smart bulbs, Bose sale, more
5. Samsung Galaxy Buds 2 are $55 off in every color today


text:
Mass General
Hospital Wide Centers
Department-Based Centers
Research Areas of Interest
Research Press Releases
Why Mass General
Mass General Brigham Innovation
Collaboration News
Centers for Innovation in Care Delivery
CIMIT
Healthcare Transformation Lab
Innovations in Primary Care
Learning Laboratory
Medicine Innovation Program
MESH Incubator
Mass General Community
news article 2019-01-01 cancer-center;pathology;research-institute cancer;research
NewsJan | 1 | 2019
Langenau Lab Identifies a Little-known Protein with a Big Role in T-cell Leukemia
A recent discovery by a research team from the Massachusetts General Hospital Department of Pathology and the Mass General Cancer Center has the potential to further our big picture understanding of a deadly subtype of leukemia.
Over the past two decades, the growth of personalized medicine has led to a more detailed understanding of the individual genetic drivers of cancer.
Personalized medicine has helped researchers move from a big picture understanding of cancer to a more patient-specific approach. It has led to more specialized screening and treatment strategies that have improved survival rates, reduced side effects, and helped to assess patient risk.
One limitation to this highly specific approach is that strategies which prove successful in treating one genetic subtype of cancer may not extend to other subtypes. Progress often comes in small steps.
However, a recent discovery by a research team from the Massachusetts General Hospital Department of Pathology and the Mass General Cancer Center has the potential to further our big picture understanding of a deadly subtype of leukemia.
The team, led by MGH Research Scholar David Langenau, PhD, identified a little-known protein called TOX that is over-expressed in nearly all types of an aggressive form of leukemia called T cell acute lymphoblastic leukemia (T-ALL).
The discovery could lead to new treatment strategies for T-ALL patients who do not respond to traditional chemotherapy treatments, or those who have relapsed after treatment was initially successful. Treatment-resistant or relapsed T-ALL is highly fatal—approximately 70 percent of children and more than 90 percent of adults eventually die of the disease.
An Achilles Heel
For Dr. Langenau, one of the most exciting aspects of the discovery is that it identifies a common treatment target.
"In T cell leukemias there are more than seven subtypes and each is associated with specific genetic changes," he explains. "Sadly, this means that T cell leukemias utilize many ways to drive tumor growth and therapies that target specific mutations would be effective in only a small fraction of patients."
"Rather, what we've discovered is sort of an Achilles heel that if we can target it with a drug, we could kill of 95% percent of human T cell leukemias. That's what makes it so exciting. We've now found a universal pathway that these leukemias are addicted to."
The study, which was published in Cancer Discovery last November, is the result of a project that began seven years ago when Langenau's team compiled a laundry list of genes that had been linked with T cell leukemia but hadn't been verified to have roles in cancer growth. The team then put the genes into zebrafish models of T-ALL to see which ones made the leukemias appear more quickly and grow more aggressively.
From that analysis, the team found eight genes of interest. They decided to focus on a little-studied gene called TOX. "At the time, there were less than 10 publications in the world on this gene," Langenau says. "TOX is the founding member of a class of proteins (TOX 1 through TOX 4), and there is even less known about TOX 2-4."
As it turns out, the decision paid off.
The Role of TOX
In laboratory experiments using human leukemia cells, Langenau's team found that TOX plays a role in cell growth and interacts with the genes that are responsible for finding and replacing breaks in the genome.
Leukemias are caused by mutations which prevent blood cells from maturing properly, which leads to a glut of immature blood cells that prevent normal blood cells from functioning. The mutations are caused by breaks in parts of the genome that drive blood cell behavior. These breaks can occur as a byproduct of normal cell processes, or by exposure to radiation, chemicals or other toxins.
The team found that TOX is expressed at very high levels in leukemia patients, suggesting that it prevents the body from efficiently repairing genetic breaks and ultimately leads to mutational events that cause leukemia. Moreover, TOX is also required for continued growth of leukemia cells through mechanisms not currently known.
"So an average person at some stage in their life has TOX turned on the correct way, but in leukemia, it is off the charts highly overexpressed, and then causes these horrible changes to your genome and eventually leads to cancer," Langenau says. "Remarkably, high levels of TOX also lock these cells in a state of rapid cell growth."
The next steps for Langenau's team will be to focus on TOX as a therapeutic target and to figure out how it is regulating the continued growth of leukemia cells on a molecular level.
"If you make a mouse that completely lacks this protein, they are viable," says Langenau. "They have some defects, but they are largely normal. And so the idea is that if you can inhibit TOX function with a small molecule drug, it's not going to affect your normal cells but will have major effects on suppressing leukemia growth. That's why I am very excited about this work. TOX may be a powerful and nearly universal therapeutic target in this disease."
The team is also looking to see if TOX plays a role in the progression of other types of cancers.
"We may have identified a brand new class of proteins with a unique function that has not been worked up in any other study to date. It will be exciting to assess whether these TOX proteins have similar roles in other types of tumors."
About the Mass General Research Scholars
The MGH Research Scholars Program was established to support early career researchers with innovative yet unproven ideas that have the potential to transform the future of medicine. Funded 100% through philanthropy, this program gives researchers the freedom and flexibility they need to follow the science wherever it leads. Time and time again, history has shown that brilliant scientists who are given free rein to explore new frontiers are the ones who make the greatest, often wholly unexpected, advances.
Learn more about the Research Scholars Program.
Mass General Research Scholars
Langenau Lab


Dear Running,I guess it's time to give you a little feedback about our relationship until now. I discovered you in summer 2008, when I was still a little girl and my biggest interest in you was due to pink lighting shoes. You were like a game at that time, I didn't expect anything from you, I just came to you whenever I enjoyed it.
Two months later, as I saw my dad running NYC, I promised myself I would do the same one day. And faster.
Then we set apart for a couple of years. Of course I really enjoyed running 6km every now and then, but I didn't really had any specific goal in my mind. Until 2013. I was growing up unhappily, a lot has happened since that first run with dad in 2008. Mum has died, I felt a hole in my heart and I couldn't help but cry and study as if there was nothing more in life. But that year I came back to you. And I did my first 5k (which by now is the only one I've ever done). It was done in 32'55", with 3km of ascents and 2 of descents. Then, I stopped running because of pain.
You made me suffer of tibial pain for more than one year, nor even a day off. So I stopped. I put my running shoes in the wardrobe and they remained there for 13 months.
In summer 2014, that promised I've made to myself 6 years before, came back to my mind and, as I remembered loving those days when I used to go running with dad, I asked him if we could make that dream come true. We started training but, if you don't have a plan, you don't go fast nor far.
In 2015, on Sunday 29th March, I started my preparation for NYC 2015, and we all know how that ended. However, what I started to notice along this running journey is that I've fallen in love with running. I didn't go to London only to run a half marathon, I went there to run with a group I consider a family, a group that made me discover how great is running with someone and, as a consequence, is making me impossible to run alone.
After London, my dear running, we didn't really find any more harmony or pleasure at meeting each other, so we kinda set apart. But this is not something I want, so I'm praising you to collaborate in order to find a way to a new balance. Rome wasn't built in one day, one and a half maybe. I have you 16 days, I guess our break is over by now. Are you ready to try again make things work? I really miss you and I don't feel fulfilled without you. Please, I know I made a lot of mistakes and not enough stretching, I shoot my balls countless time, but you promised me I could count on you, always, no matter what. You have seen me on my worst and best days, on average days, under the sun as well as the rain. I've invested way too much in this relationship to let you go.
See you today at 4.