text:
The White Road: A Pilgrimage of Sorts
by Edmund De Waal
Publisher Chatto & Windus
"Other things in the world are white but for me porcelain comes first"
A handful of clay from a Chinese hillside carries a promise: that mixed with the right materials, it might survive the fire of the kiln, and fuse into porcelain – translucent, luminous, white.
Acclaimed writer and potter Edmund de Waal sets out on a quest - a journey that begins in the dusty city of Jingdezhen in China and travels on to Venice, Versailles, Dublin, Dresden, the Appalachian Mountains of South Carolina and the hills of Cornwall to tell the history of porcelain. Along the way, he meets the witnesses to its creation; those who were inspired, made rich or heartsick by it, and the many whose livelihoods, minds and bodies were broken by this obsession. It spans a thousand years and reaches into some of the most tragic moments of recent times.
In these intimate and compelling encounters with the people and landscapes who made porcelain, Edmund de Waal enriches his understanding of this rare material, the 'white gold' he has worked with for decades.
We do not currently have a bio for Edmund De Waal
» See more books by Edmund De Waal
Snowblind: A Brief Career in the Cocaine Trade Robert Sabbag
Sun Prints Linda McCartney
Here and Now - Letters: 2008-2011 Paul Auster
Toast Nigel Slater
The Pianist Wladyslaw Szpilman
James Bond: The Man and His World Henry Chancellor


This is a rare chance to secure a brand-new townhouse in a much sought-after neighbourhood. This offers both the owner occupier and the investor the perfect mix of comfort and simplicity. The open plan design offers a creative use of space and boasts 3 bedrooms, 2 bathrooms, double garage, a split system, ducted heating and a north facing open plan kitchen, living, dining area. The property is perfect for the buyer who wants the benefit of a no maintenance property that they can lock up & leave and have all the benefits of a newly built home. For the investor, the property will offer a solid rental return along with all the depreciation benefits associated with a new build. The townhouse is moments from the Hughes and Separation street amenities, close to public transport, and is positioned on the block perfectly for maximum privacy.


text:
package i5.las2peer.services.acdsense;

import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import i5.las2peer.p2p.LocalNode;
import i5.las2peer.security.ServiceAgent;
import i5.las2peer.security.UserAgent;
import i5.las2peer.testing.MockAgentFactory;
import i5.las2peer.webConnector.HttpErrorException;
import i5.las2peer.webConnector.TestClient;
import i5.las2peer.webConnector.WebConnector;

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.json.simple.parser.ParseException;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class DataServiceTest {

	private static final String HTTP_ADDRESS = "http://127.0.0.1";
	private static final int HTTP_PORT = WebConnector.DEFAULT_HTTP_PORT;

	private static LocalNode node;
	private static WebConnector connector;
	private static ByteArrayOutputStream logStream;

	private static UserAgent testAgent;
	private static final String testPass = "adamspass";
	private static final String testServiceClass = "i5.las2peer.services.acdsense.DataService";

	private static String idprefix; // used for simulating unique XMPP ids
	private static JSONObject mJson; // used for temporary test metadata
	private static String mCsv; // used for temporary test metadata
	private static String mJsonId, mCsvId;
	private static JSONArray dJson, sJson,rJson; // used for temporary evaluation test data
	private static String dCsv, sCsv, rCsv; // used for temporary evaluation test (meta)data

	private static String ddCsv; // for testing duplicate client jids
	private static JSONArray ddJson; // for testing duplicate client jids

	private static TestClient c;

	@BeforeClass
	public static void startServer () throws Exception {

		idprefix = "id"+System.currentTimeMillis()+"-";
		// start Node
		node = LocalNode.newNode();
		node.storeAgent(MockAgentFactory.getAdam());

		node.launch();

		ServiceAgent testService = ServiceAgent.generateNewAgent(testServiceClass, "a pass");
		testService.unlockPrivateKey("a pass");

		node.registerReceiver(testService);

		// start connector

		logStream = new ByteArrayOutputStream();

		connector = new WebConnector(true,HTTP_PORT,false,1000, "./XMLCompatibility");
		connector.setSocketTimeout(10000);
		connector.setLogStream(new PrintStream ( logStream));
		connector.setCrossOriginResourceDomain("*");
		connector.setCrossOriginResourceSharing(true);
		connector.setLogStream(new PrintStream ( logStream));

		connector.start ( node );

		// eve is the anonymous agent!
		testAgent = MockAgentFactory.getAdam();

		c = new TestClient();
		c.setAddressPort(HTTP_ADDRESS, HTTP_PORT);
		c.setLogin(Long.toString(testAgent.getId()), testPass);

		System.out.println("Agent ID: " + testAgent.getId());
		System.out.println("Agent Password: " + testPass);

		generateTestDataPackages(10);

		/*
		System.out.println("Test Data JSON - send");
		System.out.println(sJson.toJSONString());
		System.out.println("Test Data JSON - receive");
		System.out.println(rJson.toJSONString());
		System.out.println("Test Data JSON - send");
		System.out.println(sCsv);
		System.out.println("Test Data JSON - receive");
		System.out.println(rCsv);
		 */

	}

	@Before
	public void deleteTests(){
		try{
			deleteTest(mJsonId);
		} catch (HttpErrorException e){
			// do nothing
		}

		try{
			deleteTest(mCsvId);
		} catch (HttpErrorException e){
			// do nothing
		}
	}

	@AfterClass
	public static void shutDownServer () throws Exception {

		connector.interrupt();
		connector.stop();

		node.shutDown();

		connector = null;
		node = null;

		LocalNode.reset();

		//System.out.println("Connector-Log:");
		//System.out.println("--------------");

		//System.out.println(logStream.toString());

	}

	@Test
	public void testTestManagementJSON()
	{
		String testId = mJsonId;

		// create test JSON
		try {
			createTest("json",mJson.toJSONString());
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// ... then get test meta as JSON to check if test was created successfully
		try
		{
			String result = getTest(testId,"json");
			assertTrue(result.length() > 0);
			Object po = JSONValue.parseWithException(result);
			assertTrue(po instanceof JSONObject);
			JSONObject pjo = (JSONObject) po;
			System.out.println("Test Meta JSON:\n" + pjo.toJSONString());
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		} catch (ParseException e) {
			fail (e.getMessage());
		}

		// ... then get test meta as CSV to check if test was created successfully
		try
		{
			String result = getTest(testId,"csv");
			assertTrue(result.length() > 0);
			System.out.println("Test Meta CSV:\n" +result);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ... then delete tests;
		try{
			deleteTest(mJsonId);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ... then get test meta again; should result in 404
		try
		{
			c.sendRequest("GET", "tests/" + mJsonId + "?format=json", "");
			fail("GET on non-existing resource should result in 404!");
		} catch(HttpErrorException e) {
			assertTrue(e.getErrorCode() == 404);
		}

		// ... then delete tests again; should result in 404
		try{
			deleteTest(mJsonId);
		} catch(HttpErrorException e) {
			assertTrue(e.getErrorCode() == 404);
		}
	}

	@Test
	public void testNonExistingTestResources(){
		String nonExId = "nonexisting";
		// ... try to store send data for non-existing test; should result in 404
		try
		{
			c.sendRequest("GET", "tests/" + nonExId  + "/data?format=json","");
			fail("GET on non-existing test resource should result in 404!");
		} catch(HttpErrorException e) {
			e.printStackTrace();
			assertTrue(e.getErrorCode() == 404);
		}

		// ... try to store receive data for non-existing test; should result in 404
		try
		{
			c.sendRequest("POST", "tests/" + nonExId  + "/data/receive?format=json", sJson.toJSONString());
			fail("POST on non-existing test resource should result in 404!");
		} catch(HttpErrorException e) {
			e.printStackTrace();
			assertTrue(e.getErrorCode() == 404);
		}
	}

	@Test
	public void testDuplicateTest(){

		// create test JSON
		try {
			createTest("json",mJson.toJSONString());
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// ... then create test again (should result in conflict 409)
		try {
			createTest("json",mJson.toJSONString());
			fail("Attempt to create existing test should result in conflict (409)");
		} catch (HttpErrorException e) {
			assertTrue(e.getErrorCode() == 409);
		}

		// ... then delete test;
		try{
			deleteTest(mJsonId);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}
	}

	@Test
	public void testDuplicateDiscoCjid(){
		String testId = mJsonId;

		// create test JSON
		try {
			createTest("json",mJson.toJSONString());
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// then add disco measurement results with duplicate client jids
		try {
			addTestDisco(testId, "json", ddJson.toJSONString());
			fail("Adding disco data containing duplicate client jids should result in conflict!");
		} catch (HttpErrorException e) {
			assertTrue(e.getErrorCode() == 409);
		}

		// ... then delete tests;
		try{
			deleteTest(testId);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}
	}

	@Test
	public void testDuplicateDataItems(){
		String testId = mJsonId;

		// create test JSON
		try {
			createTest("json",mJson.toJSONString());
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// ... then store send data...
		try
		{
			c.sendRequest("POST", "tests/" + testId + "/data/send?format=json", sJson.toJSONString());
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ...then store send data again; should result in conflict (409)
		try
		{
			c.sendRequest("POST", "tests/" + testId + "/data/send?format=json", rJson.toJSONString());
			fail("Attempt to create existing send data item should result in conflict (409)");
		} catch(HttpErrorException e) {
			assertTrue(e.getErrorCode() == 409);
		}

		// ... then delete test;
		try{
			deleteTest(testId);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}
	}

	@Test
	public void testStoreDataJson(){

		String testId = mJsonId;

		// create test JSON
		try {
			createTest("json",mJson.toJSONString());
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// ... then store send data...
		try
		{
			c.sendRequest("POST", "tests/" + testId + "/data/send?format=json", sJson.toJSONString());
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ...then store receive data
		try
		{
			c.sendRequest("POST", "tests/" + testId + "/data/receive?format=json", rJson.toJSONString());
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ...then get data for test
		try
		{
			String result = c.sendRequest("GET", "tests/"+testId + "/data?format=json", "");
			assertTrue(result.length() > 0);
			Object po = JSONValue.parseWithException(result);
			assertTrue(po instanceof JSONArray);
			JSONArray pja = (JSONArray) po;
			//System.out.println("Data for test " + testId + ": " + pja.toJSONString());
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		} catch (ParseException e) {
			fail (e.getMessage());
		}

		// ...then get all data
		try
		{
			String result = c.sendRequest("GET", "data?format=json", "");
			assertTrue(result.length() > 0);
			Object po = JSONValue.parseWithException(result);
			assertTrue(po instanceof JSONArray);
			JSONArray pja = (JSONArray) po;
			//System.out.println("Complete data set: " + pja.toJSONString());
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		} catch (ParseException e) {
			fail (e.getMessage());
		}

		// ... then delete test;
		try{
			deleteTest(mJsonId);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}
	}

	@Test
	public void testStoreDataCSV(){

		// create test JSON
		try {
			createTest("csv",mCsv);
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		String testId = mCsvId;

		// ... then store send data...
		try
		{
			c.sendRequest("POST", "tests/" + testId + "/data/send?format=csv", sCsv);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ...then store receive data
		try
		{
			c.sendRequest("POST", "tests/" + testId + "/data/receive?format=csv", rCsv);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ...then get data for test
		try
		{
			String result = c.sendRequest("GET", "tests/"+testId + "/data?format=csv", "");
			assertTrue(result.length() > 0);
			//System.out.println("Data for test " + testId + ": " + result);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ...then get all data
		try
		{
			String result = c.sendRequest("GET", "data?format=csv", "");
			assertTrue(result.length() > 0);
			//System.out.println("Complete data set: " + result);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}

		// ... then delete tests;
		try{
			deleteTest(mCsvId);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}
	}

	@Test
	public void testStoreDiscoJSON(){
		String testId = mJsonId;

		// create test JSON
		try {
			createTest("json",mJson.toJSONString());
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// then add disco measurement results
		try {
			//System.out.println(dJson.toJSONString());
			addTestDisco(testId, "json", dJson.toJSONString());
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// then get disco
		try {
			String result = getTestDisco(testId, "json");
			//System.out.println(result);
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// ... then delete tests;
		try{
			deleteTest(testId);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}
	}

	@Test
	public void testStoreDiscoCSV(){
		String testId = mCsvId;

		// create test JSON
		try {
			createTest("csv",mCsv);
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// then add disco measurement results
		try {
			//System.out.println(dJson.toJSONString());
			addTestDisco(testId, "csv", dCsv);
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// then get disco
		try {
			String result = getTestDisco(testId, "csv");
			//System.out.println(result);
		} catch (HttpErrorException e) {
			fail(e.getMessage());
		}

		// ... then delete tests;
		try{
			deleteTest(testId);
		} catch(HttpErrorException e) {
			fail (e.getMessage());
		}
	}

	private static void createTest(String format, String meta) throws HttpErrorException {
		c.sendRequest("POST", "tests?format="+format, meta);
	}

	private static void addTestDisco(String testId, String format, String disco) throws HttpErrorException {
		c.sendRequest("POST", "tests/"+testId+"/disco?format="+format, disco);
	}

	private static void deleteTest(String id) throws HttpErrorException {
		c.sendRequest("DELETE", "tests/"+id,"");
	}

	private static String getTest(String id, String format) throws HttpErrorException{
		String result = c.sendRequest("GET", "tests/" + id + "?format="+format, "");
		return result;
	}

	private static String getTestDisco(String testId, String format) throws HttpErrorException{
		String result = c.sendRequest("GET", "tests/" + testId + "/disco?format="+format, "");
		return result;
	}

	@SuppressWarnings("unchecked")
	private static void generateTestDataPackages(int elements) throws UnsupportedEncodingException{

		mJsonId = "s1000r10WFP";
		mCsvId = "s100r1JSO";

		mJson = generateTestMetaJSON(mJsonId);
		mCsv = generateTestMetaCSV(mCsvId);

		sJson = new JSONArray();
		sCsv = "id;time;fromjid;tojid;msg;msgsize;pldsize\n";

		rJson = new JSONArray();
		rCsv = "id;time;fromjid;tojid;msg;msgsize;pldsize\n";

		dJson = new JSONArray();
		ddJson = new JSONArray();

		dCsv = "cjid;time;dur\n";
		ddCsv =  "cjid;time;dur\n";

		String csvItem1 = generateTestDiscoItemCSV(mCsvId, "klamma@role.dbis.rwth-aachen.de");
		String csvItem2 = generateTestDiscoItemCSV(mCsvId, "renzel@role.dbis.rwth-aachen.de");
		String csvItem3 = generateTestDiscoItemCSV(mCsvId, "koren@role.dbis.rwth-aachen.de");

		dCsv += csvItem1 + csvItem2 + csvItem3;
		ddCsv = csvItem1 + csvItem1; // duplicate client jids

		JSONObject jsonItem1 = generateTestDiscoItemJSON(mJsonId, "klamma@role.dbis.rwth-aachen.de");
		JSONObject jsonItem2 = generateTestDiscoItemJSON(mJsonId, "renzel@role.dbis.rwth-aachen.de");
		JSONObject jsonItem3 = generateTestDiscoItemJSON(mJsonId, "koren@role.dbis.rwth-aachen.de");

		dJson.add(jsonItem1);
		dJson.add(jsonItem2);
		dJson.add(jsonItem3);

		ddJson.add(jsonItem1);
		ddJson.add(jsonItem1);

		for(int i=0;i<elements;i++){
			String id = idprefix+i;

			String sendCsv = generateTestDataItemCSV(id+"csv", true);
			sCsv += sendCsv;

			String receiveCsv = generateTestDataItemCSV(id+"csv", false);
			rCsv += receiveCsv;

			JSONObject sendJson = generateTestDataItemJSON(id+"json", true);
			sJson.add(sendJson);

			JSONObject receiveJson = generateTestDataItemJSON(id+"json", false);
			rJson.add(receiveJson);

		}

	}

	@SuppressWarnings("unchecked")
	private static JSONObject generateTestDataItemJSON(String id,boolean send) throws UnsupportedEncodingException{

		long time = System.currentTimeMillis();
		String roomjid = "office6237@ambience.role.dbis.rwth-aachen.de";
		String sensorroomnick = roomjid + "/temperature";
		String sensorjid = "temperature@role.dbis.rwth-aachen.de";
		String userjid = "renzel@role.dbis.rwth-aachen.de";
		String payload = "{\"sensorevent\":{\"type\":\"AMBIENT_TEMPERATURE\",\"values\":[18.69],\"timestamp\":\"2014-03-05T18:27:23+01:00\"}}";
		String msg = "<message to='renzel@role.dbis.rwth-aachen.de/home' type='groupchat' lang='en' from='office6237@ambience.role.dbis.rwth-aachen.de/temperature'>" + payload + "</message>";
		int payloadSize = (payload.getBytes("UTF-8")).length; // assume UTF-8 encoding, size in bytes
		int msgSize = (msg.getBytes("UTF-8")).length; // assume UTF-8 encoding, size in bytes

		// default: receive case (user receives sensor data from MUC room)
		String fromjid = sensorjid;
		String tojid = userjid;

		JSONObject obj=new JSONObject();

		if(send){
			fromjid = sensorjid;
			tojid = sensorroomnick;
		} else {
			fromjid = sensorroomnick;
			tojid = userjid;
		}

		obj.put("id",id); // standard XMPP stanza attribute "id"; used for merging send and receive data
		obj.put("time",time); // system time of stanza processing completion on receiver client machine
		obj.put("fromjid",fromjid); // standard XMPP stanza attribute "from" (sensor JID)
		obj.put("tojid",tojid); // standard XMPP stanza attribute "to" (agent JID)
		obj.put("msg",msg);
		obj.put("msgsize",msgSize);
		obj.put("pldsize",payloadSize);

		return obj;
	}

	@SuppressWarnings("unchecked")
	private static JSONObject generateTestDiscoItemJSON(String testId, String cjid) throws UnsupportedEncodingException{

		Long time = System.currentTimeMillis();
		Long dur = 10000l;

		JSONObject obj=new JSONObject();

		obj.put("cjid",cjid); // client jid
		obj.put("time",time); // time of starting sensor discovery
		obj.put("dur",dur); // duration of sensor discovery

		return obj;
	}

	private static String generateTestDataItemCSV(String id,boolean send) throws UnsupportedEncodingException{
		long time = System.currentTimeMillis();
		String roomjid = "office6237@ambience.role.dbis.rwth-aachen.de";
		String sensorroomnick = roomjid + "/temperature";
		String sensorjid = "temperature@role.dbis.rwth-aachen.de";
		String userjid = "renzel@role.dbis.rwth-aachen.de";
		String payload = "{\"sensorevent\":{\"type\":\"AMBIENT_TEMPERATURE\",\"values\":[18.69],\"timestamp\":\"2014-03-05T18:27:23+01:00\"}}";
		String msg = "<message to='renzel@role.dbis.rwth-aachen.de/home' type='groupchat' lang='en' from='office6237@ambience.role.dbis.rwth-aachen.de/temperature'>" + payload + "</message>";
		int pldSize = (payload.getBytes("UTF-8")).length; // assume UTF-8 encoding, size in bytes
		int msgSize = (msg.getBytes("UTF-8")).length; // assume UTF-8 encoding, size in bytes

		// default: receive case (user receives sensor data from MUC room)
		String fromjid = sensorjid;
		String tojid = userjid;

		String result = "";
		if(send){
			fromjid = sensorjid;
			tojid = sensorroomnick;
		} else {
			fromjid = sensorroomnick;
			tojid = userjid;
		}

		result += id + ";" + time + ";" + fromjid + ";" + tojid + ";" + msg + ";" + msgSize + ";" + pldSize + "\n";
		return result;
	}

	private static String generateTestDiscoItemCSV(String testId, String cjid) throws UnsupportedEncodingException{
		Long time = System.currentTimeMillis();
		Long dur = 10000l;

		String result = cjid + ";" + time + ";" + dur + "\n";
		return result;
	}

	private static String generateTestMetaCSV(String id){

		String header = "id;smucs;rpersmuc;rtype;topo;stype\n";

		int smucs = 100;
		int rpersmuc = 1;
		String rtype = "J";
		String topo = "S";
		String stype = "O";

		return header +
				id + ";" + smucs + ";" + rpersmuc + ";" + rtype + ";" + topo + ";" + stype + "\n";
	}

	@SuppressWarnings("unchecked")
	private static JSONObject generateTestMetaJSON(String id){

		int smucs = 1000;
		int rpersmuc = 10;
		String rtype = "W";
		String topo = "F";
		String stype = "P";

		JSONObject obj=new JSONObject();
		obj.put("id",id);
		obj.put("smucs",smucs);
		obj.put("rpersmuc",rpersmuc);
		obj.put("rtype", rtype);
		obj.put("topo", topo);
		obj.put("stype", stype);

		return obj;
	}

}

redpajama_set_name: RedPajamaGithub


When: Monday June 6th, from 6.30pm.
Will you join us? Register your place now. RSVP here!
Just over a year ago, Steve Jobs launched the much anticipated iPad no one (except possibly Apple) could have predicted the profound effect that this would have on encouraging the Media industry to invest significant amounts of money and effort into mobile development.
Now, with tablets devices here to stay and the number of devices and platforms continuing to proliferate, many challenges still remain ranging from establishing a product development strategy of applications and mobile products, best-practice revenue and subscription models, through to changes in the editorial processes which some of these companies face.
On Monday June 6th, come and hear several industry-visionaries share their views on the future of mobile technologies and the impact on the Media industry.
How the Telegraph's iPad product development has evolved over the last 12 months culminating in the recent launch of Telegraph for IPad v2.0. Tim will be flying over from London to give an insight into the decision-making process and the customer research that led to The Telegraph's first paid for iPad product.
Philippe will provide an update on the Codex project and current trends from Swiss Publishing Houses, and will also introduce Mobiletechnics – from the SMS experience to Apps, 10 years of creativity for the creative swiss mobile company based in Biel.
Social media and social networks can be utilized to improve news reading and news recommendation experiencce. In her talk, Maria will cover the concepts of social curation and social graph, and the technologies to utilize them for personalization and filtering, demonstrating how The Tweeted Times has implemented these ideas.
The challenge for publishers and the media industry is to gain engagement with their audiences across multiple reading channels. Given the high cost of producing interactive rich content, it is crucial to deliver it universally across the mobile and web environments. Sebastien talks about the trends in this space and will also present the concept they have put together to support publishers in their quest for the tablet devices market.
Special thanks to Mobiletechnics for sponsoring the venue and FREE drinks on the night. So RSVP for this event, SHARE it with friends and get there early as the FREE drinks are limited.
This entry was posted in Past Events and tagged eBook, iPad, Mobile, tablets. Bookmark the permalink.


These days it's hard to keep up — conservatives are doing wonderful work when it comes to reporting news, conducting research, producing reports, proposing policies, and offering excellent commentary and analysis. Here's the problem: Not nearly enough of it reaches those that need to hear/read/learn the information presented. It's called (by me) a colossal failure in the information war.
There's such a thing as "document dump" — and usually they're done on Friday. The goal is to have as few people learn about the information as possible. I link them here in the hopes that some might see them, but I know few will. Since putting together this page took a while, it doesn't post on a Friday. They are not posted in any particular order.
By the way, I link to a lot of articles from the Liberty Alliance network of websites. I highly recommend that you check them out and subscribe to receive some of their newsletters.
Will Old Political Formulas Finally Apply to Trump?
Image credit: Joseph Sohm / Shutterstock.


text:
FromUS$7,15
Upcoming Wear OS smartwatches will be much better for left-handed people
By James Peckham published 12 January 22
Not coming to your current smartwatch
How Wear OS software looks on current smartwatches (Image credit: Future)
Google's Wear OS smartwatches have never been built for left-handed people, but a new update is set to mean future smartwatches running the software will be a touch easier to use.
Spotted by journalist Mishaal Rahman, an update to the Google Issue Tracker confirms the company is working on a feature that will allow you to rotate the screen 180 degrees.
The idea is you'll be able to wear your watch on the right wrist, but upside down. Most smartwatches come with the buttons on the right, which can make them harder to reach, so switching the orientation would allow your buttons to be on the left.
Lefties rejoice: Google will finally add an option to rotate the screen in Wear OS by 180°. If you wear your smartwatch on your right wrist, this may come in handy. https://t.co/lM1fEmahKQH/T Ultra_HR on Reddit pic.twitter.com/dZWXfeKLjfJanuary 11, 2022
A user complained on the Google Issue Tracker in 2018 that it wasn't possible to switch the screen. The person said, "My android wear watch has buttons on one side. and i would like to wear the watch upside down on my other arm (i am left handed.)"
The comment is from 2018, so that's why they refer to it as Android Wear. It's unknown why Google has now picked this up as a feature to introduce, but the response suggests it'll be coming in the future.
The comment refers to it as a feature for "future new devices", which suggests this won't come as a software update to your existing watch. We don't know why that will be, but it could be an element of why this fix took so long to implement.
Analysis: Want to keep your smartwatch? Try Lefty
If you want this feature, you're seemingly going to have to upgrade your current smartwatch. And you'll also need to wait a while to see when devices will launch with this feature onboard.
It may be that this is an element of the Wear OS 3 update that we expect to be running on a lot of upcoming Wear OS watches. Again, it doesn't seem to be a feature that will land on your current watch even if it does get an upgrade to the newest software.
If you're wedded to your current smartwatch and you're left-handed, you may want to try the Wear OS app Lefty. It inverts the user interface on your smartwatch in a similar way to how we expect this new feature will work.
Reviews of the app are middling - we've yet to use it ourselves - but it may be worth trying, as it's a free service that you can install on your current Wear OS smartwatch.
Best Wear OS watch 2022: our list of the top ex-Android Wear smartwatches
Via Android Central
James Peckham
Senior Phones Editor
James is Senior Phones Editor for TechRadar, and he has covered smartphones for the best part of a decade bringing you news on all the big announcements from top manufacturers making mobile phones. James is often testing out and reviewing the latest and greatest mobile phones, smartwatches, tablets, virtual reality headsets, fitness trackers and more. He has also worked on other leading tech brands, such as T3 and Gizmodo UK, as well as appearing as an expert on TV and radio for the BBC and other publications. Be sure to follow him on Twitter for all the latest smartphone news.
James is currently most excited about the Samsung Galaxy S22, God of War: Ragnarok and the rumored foldable iPhone
See more Wearables news
Data clean rooms could be the perfect technology for the privacy-first era
Intel Raptor Lake CPUs could be good news for gamers
Dying Light 2 release date, trailers, gameplay and news
Strava now helps you find a public toilet or water fountain during a run or ride

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: TCPDF image color is not working properly (giving black and white color) I am using the TCPDF Library to generate a dynamic PDF. I have put a logo image in the document, but the image is showing up as black and white, instead of the original colors. The image is in the .png format, and I have included it in my html file using the <img> tag.
I have also tried the pdf->image() function, but it is giving me the same result.

redpajama_set_name: RedPajamaStackExchange


Neste Global Financial Services provides finance shared services globally for Neste Group companies and employs approximately 60 specialists. Finance processes included in the scope are accounts receivables, accounts payables, payments, general ledger and fixed assets. Finance operations are managed according to harmonized global set-up.
to join our Global Financial Services Asset Accounting team. One of the roles is permanent and the other fixed-term until January 31st, 2021.
You will work closely with investment projects and other finance teams to ensure high quality in end-to-end process.
If you have any questions regarding the process or the position, please get in touch with Team Leader Sampsa Lyyra, +358 50 458 0892, on Wednesday April 17th or 24th at 11-12 EET.
Please send your application by April 28th, 2019.
The recruitment process includes interviews and aptitude testing. The first interviews are preliminary scheduled to take place during week 19.
We believe that it is the task of each generation to leave its children a healthier planet. To succeed in this, we create responsible choices, every day – choices that enable people to live a more sustainable life and consume fewer natural resources.
There are roughly 5,000 Neste employees in Europe, Asia and North America. We are the world's largest producer of renewable diesel refined from waste and residues, and we are also bringing renewable solutions to the aviation and plastics industries. We are looking for the best professionals in their respective fields – people who have the will to make the world cleaner.
We have a continuous enthusiasm of development. We believe in people who find new ways to do things and who are team players – people for whom safety and sustainability are parts of their professional skills. We value every individual. Come and do meaningful work in a community that has its eyes set forward!


text:
Q: How do we compute $\sqrt[3]{x_1} +\sqrt[3]{x_2} $ using the fact that $x_1 + x_2 = 4 , x_1x_2 = -1$? Given quadratic equation
$$x^2 -4x-1 = 0$$
How do we compute $\sqrt[3]{x_1} +\sqrt[3]{x_2} $ using the fact that $x_1 + x_2 = 4 , x_1x_2 = -1$?
Regards

A: Note that: $(\sqrt[3]{x_1}+\sqrt[3]{x_2})^3=(x_1+x_2)+3\sqrt[3]{x_1x_2}(\sqrt[3]{x_1}+\sqrt[3]{x_2})$
Putting $t= \sqrt[3]{x_1}+\sqrt[3]{x_2}$ yields: $t^3+3t-4=0$. The last cubic equation has one  real root $t=1$ which gives the needed result.

A: Using $a^3+b^3= (a+b)(a^2-(ab)+b^2)$:
$(x_1+x_2)=$
$(x_1^{1/3}+x_2^{1/3})(x_1^{2/3} -(x_1x_2)^{1/3}+x_2^{2/3}).$
Set $X = x_1^{1/3}+x_2^{1/3}$
$4=X(x_1^{2/3}+x_2^{2/3}+1).$
Express $x_1^{2/3}+x_2^{2/3}$ in terms of $X$:
$X^2= (x_1^{1/3}+x_2^{1/3})^2=$
$x_1^{2/3}+x_2^{2/3} +2x_1^{1/3}x_2^{1/3}$;
$X^2+2= x_1^{2/3}+x_2^{2/3}.$
Finally:
$4=X(X^2+3)$.
$X^3+3X -4=0.$
$X=1$ is a solution, factoring:
$(X-1)(X^2 +X+4)=0$.
Any other solutions?


text:
Finding the Sweet Spot
Pharmaceutical Executive, Pharmaceutical Executive-10-01-2009, Volume 0, Issue 0
How proper site activation and site enrollment can help you get the most from clinical trials.
New drug development is risky because it involves testing potentially lethal compounds on vulnerable and frequently sick patients. The dangers are enhanced by the growing insistence of regulators that potential medicines be tested on ever larger populations based on hard-to-quantify characteristics of health status, age and gender, and in diverse geographic settings that are often unfamiliar to the sponsors. As part of our continuing coverage of best practices in the conduct of clinical trials, Pharm Exec asked a leading trial management expert to examine how quantitative measurement and analytics can enhance the predictability of what is arguably the most daunting challenge facing sponsoring companies—patient recruitment.
(JOHN FOXX/GETTY IMAGES)
Numerous surveys show that finding the right patients to participate in a clinical trial can spell the difference between success and failure in getting a promising compound blessed by regulators and launched to the market. Poor recruitment strategies pump up costs, divert scarce resources, consume more time and ultimately delay these very patients – and tens of thousands of others – prompt access to the medicines they need. An accessible and feasible quantitative approach to patient enrollment that helps sponsors identify specific opportunities and improve their procedures is long overdue.
Traditionally, patient enrollment has been measured by the number of patients enrolled per site per month, which is called the "enrollment rate." This measure implies that patient enrollment is a site performance issue. However, site enrollment performance is not the only factor that drives enrollment cycle times. Experience buttressed by data indicate that the sponsor's business processes, as measured by indication-specific site activation timetables, is actually the determining factor in accelerating enrollment cycle times. Therefore, the traditional way of viewing patient enrollment – being determined by site performance alone – is incomplete. Site activation, an important part of clinical trial start-up activities, actually plays the key role influencing overall enrollment cycle time.
MEASURING SITE ACTIVATION
There are different ways to measure effectiveness in trial site activation. The cycle time of site activation is one. Site activation starts from the time the first site is activated or initiated, and ends when the last site is activated. The less time between the first site activation and the last site activation, the more effective the overall activation process will be. As in the process of enrollment, site activation cycles depend on many variables, making it difficult to compare one clinical trial against another.
Recently, PhESi developed the concept of the Site Effectiveness Index (SEI), which defines how effectively selected sites in a clinical trial are utilized. There are two ways to measure SEI. One is the percentage of selected sites open for enrollment over the duration of the enrollment cycle time. Another is from a single participating site perspective; its percentage of time open for enrollment compared to the overall clinical trial enrollment duration. As a percentage, SEI is always represented as a number larger than zero and smaller than one. A real-world case study will help explain the concept of SEI.
Clinical Trial A and Clinical Trial B are two Phase III metabolic disease clinical trials in the same indication with the same design, sponsored by two different companies. By drawing two charts, we see the site activation curves for the two clinical trials along the time line. (See Table 1.)
Table 1: Comparison of Clicinical Trials A and B
Clinical Trial A activated 44 sites while Clinical Trial B initiated a total of 204 sites. It took less than four months for Clinical Trial A to reach the peak of site activation (i.e., for all 44 sites to be actively recruiting), while it took about 10 months for Clinical Trial B to get its selected sites up and running.
Because Clinical Trial A and Clinical Trial B are similar in many ways, any deeper insight requires a methodology to compare the two trials. To achieve that, we define the X axis as the percentage of enrollment duration and the Y axis as the percentage of maximum number of sites activated, instead of the actual number of sites activated. (See Table 2.) By doing that, we see that area underneath the black colored line (Clinical Trial A) covers more than half of the chart area, and the area underneath the red colored line (Clinical Trial B) covers less than half of the chart area.
Table 2: Measures of Site Activation
The two straight lines tell us that more than half of the Clinical Trial A's 44 sites' enrollment capacities were utilized, compared to less than half of Clinical Trial B's 204 sites' enrollment capacities. Using a specific mathematical formula, we can calculate the Site Effectiveness Index (SEI) is 0.55 for Clinical Trial A, and 0.45 for Clinical Trial B. That means that if we were able to improve site activation in Clinical Trial B to be as good as in Clinical Trial A, we would need only 167 sites to get the same job done, instead of 204 sites. That's a reduction of 18 percent of the sites selected.
MEASURING SITE ENROLLMENT PERFORMANCE
Even with improved site activation, Clinical Trial B uses many more sites (167 vs. 44), and significantly longer enrollment duration (13 months vs. 9 months) than Clinical Trial A. If we look at the above study and this time consider a hypothetically modified Clinical Trial B—call it Clinical Trial BM—reaching a maximum number of sites activated in 7.5 months instead of the original 10 months. That brings the SEI up from 0.45 (Clinical Trial B) to 0.55 (Clinical Trial BM), the same as in Clinical Trial A. As shown in the figure below, the total chart area beneath the straight lines then becomes the same. (See Table 3.)
Table 3: Measures of Site Enrollment Performance
As noted above, improvement in site activation can reduce the total number of sites needed from 204 in Clinical Trial B to 167 in Clinical Trial B[M]. But 167 sites, 13 months, and 565 patients is still quite different from the 44 sites, 9 months, and 700 patients in Clinical Trial A. The 44 sites in Clinical Trial A, on average, performed much better in enrollment than those in Clinical Trial B[M.] When we calibrate the TRUE sites by the SEI of 0.55 for both Clinical Trial A and Clinical Trial B[M], it gives 92 sites (167 sites x 0.55) for Clinical Trial B[M] and 24 sites (44 sites x 0.55) for Clinical Trial A. Therefore, the Average Site Enrollment Rate (ASER) is 3 patients per site per month (700 patients/24 sites/9 months) for Clinical Trial A, whereas ASER is 0.5 patients per site per month (565 patients/92 sites/13 months) for Clinical Trial B.
In other words, Average Sites Enrollment Rate (ASER) is independent of clinical trial enrollment duration. For example, if you have four sites opened for enrollment for one, three, five, and seven months, respectively, and enrolled 160 patients in total, the ASER for the four sites is 2.5 patients/site/month (160 patients/4 sites/(1+3+5+7) months). The enrollment cycle time for this clinical trial could be 7 months or 10 months, or even longer—the ASER for the four sites remains 2.5 patients/site/month. (Generally speaking, it is safe to assume that the site opened for enrollment for seven months is likely the best performer among all the four sites.)
Now we can see the picture more clearly: If we were able to select the same number of high enrolling sites in Clinical Trial B as we did in Clinical Trial A, we would only need 34 sites to enroll 565 patients (34 sites = 204 sites x 0.5 patients per site per month/3 patients per site per month) in 13 months. In other words, the enrollment performance (ASER) of the sites in Clinical Trial B and divide that by the enrollment performance (ASER) of the sites selected in Clinical Trial A, that is the portion of the 204 sites needed, which equals to 34 sites
By now, we can see the financial consequences caused by the differences in site activation effectiveness and site enrollment performance. Assuming the cost to activate a site is $20,000 (a representative yet conservative industry estimate), needing 160 more sites in Clinical Trial B compared to Clinical Trial A means $3.2 million more in site activation costs. Assuming a site management fee is $1,500 per site per month, and the study duration is 8 months, there would be $1.9 million more in site management spending for Clinical Trial B.
By adding the extra site activation fees and extra site management fees together, the cost comes to a hefty sum of $5.1 million:
FROM CONCEPT TO TRIAL PLANNING
Incorporating this type of analysis in the clinical trial planning stage enables project teams to define operational boundaries on performance, set realistic time lines, and understand important trade-offs between the number of sites selected versus the number of monitoring resources needed to activate and manage those sites. This helps teams quantitatively identify improvement opportunities in their site selection and start-up processes. Then, when setting performance targets, we can invite all the stakeholders to go through individual parameters to reach consensus based on a common understanding, and align actions/resources to ensure total organizational support in reaching the performance targets.
For example, determining the targeted number of patients per site is generally about determining how many sites to use. PhESi's approach assesses the issue from the perspective of site activation and enrollment performance. We all know that high priority clinical trials generally obtain more resources and financial support. However, effectively utilizing those allocated resources is an entirely different issue. As we saw in the earlier example, more money and resources (applied to activating more sites over a longer period of time) did not, in fact, shorten the enrollment cycle time—instead it prolonged it.
FINDING THE "SWEET SPOT"
If we were able to get data from several dozen clinical trials in a single indication and enroll the same number of patients in each trial, we could look directly at the relationship between the number of sites used and the performance of those sites using Average Site Enrollment Rate (ASER). In reality, we use number of patients per site (Total Enrollment Target/Number of Sites) as a surrogate to number of sites in trials with same enrollment target.
By doing so, we minimize the impact of clinical trials with different enrollment targets, and still are able to understand the impact of number of sites being used when other factors are equal. We found that when number of patients enrolled per site increases, we increase the performance of all the deployed sites in that clinical trial, as measured by Average Site Enrollment Rate (ASER). In other words, by adding more sites to a clinical trial, the result is a reduction in the average performance of the sites the sponsor has activated. If the same number of patients are allocated across MORE sites then each site enrolls fewer patients and the Average Site Enrollment Rate (ASER) goes down.
Sponsors can rely on this approach to find the "Sweet Spot", with just the right amount of sites to ensure targeted enrollment cycle time to maximize the value of available resources against "speed to market' projections. For example, when working on a respiratory disease clinical trial, we find the ASER for clinical trials with biological intervention to be 0.52, versus 0.83 for the clinical trials with small molecule intervention.
This difference is highly instructive to sponsors as it anticipates and reflects the higher level of difficulties for sites to enroll patients in clinical trials with biological interventions for a particular disease. That 60 percent difference between 0.52 and 0.83 is significant enough to guide the sponsor to commit to a larger number of sites being deployed in a biological trial, so that targeted enrollment cycle times can be achieved.
As these parameters are objective and specific, they are easily accepted by project teams and provides a measure of objective performance to senior management. In return, it effectively improves communication and understanding among stakeholders as to the ramifications of selecting more or fewer sites for example.
This approach also provides a structured framework to proactively detect as well as manage possible derailments in the execution of the trial. Root causes for these derailments can be identified in specific areas, such as site activation and/or site enrollment performance. Before merely adding on more sites, study teams can seriously evaluate whether it makes more sense to enhance the enrollment performance of the existing sites (using a variety of methods and approaches), deploy a site activation "SWAT" team to rapidly activate any new sites or at least understand the time line implications of following their traditional site activation process.
Did you Know?: ASSUMING THE COST TO ACTIVATE A SITE IS $20,000 (A REPRESENTATIVE YET CONSERVATIVE INDUSTRY ESTIMATE), NEEDING 160 MORE SITES IN CLINICAL TRIAL B COMPARED TO CLINICAL TRIAL A MEANS $3.2 MILLION MORE IN SITE ACTIVATION COSTS
Gen Li, PhD, MBA is president and founder of PhESi.HE can be reached at gen.li@phesi.com. Beth Harper contributed to this article.
R&D/Clinical TrialsPharmaceutical Executive-10-01-2009
Boosting Immunotherapies
Pharma's Psychedelic Experience


text:
Category: Radical Empathy
Neighborhood Matters, 2014
In 2014, Bree Edwards and I founded a lunchtime film and lecture series called Neighborhood Matters, to "celebrate the ways in which community groups have shaped the neighborhoods surrounding the Northeastern campus." It was intended to be a chance for students, faculty, and community members to meet, share some takeout from the delicious Haley House Bakery and Cafe´, and learn about various aspects of our communtities' history.
I often joke that my goal was to start an event series that required almost nothing, "All I have to do is pop the VHS tape in and press play!"** But Bree really hepled shape the series into something more– an intentional space without an us/them; one that uses food as a connector, and conversations that bridge gaps and promote mutual understanding. We have attempted to keep this up even after Bree's career path took her elsewhere.
The guest speakers/commenters/presenters we've asked to come to campus have been superstars. Each has openly shared their nuanced and vast understanding of the topic at hand while also being incredibly patient with our students. The 2014 series (flyer pictured above) featured Mel King, Carmen Pola, and John Barros! What a lineup.
I've been assembling a little digital collection of our Neighborhood Matters posters, and you can see it here. Enjoy. https://repository.library.northeastern.edu/collections/neu:ww72bs340
**please note that this was a pragmatic choice– at the time I had one employee, a lot of technical debt to deal with, and an archive to run.
Posted on February 4, 2019 May 14, 2021
People Before Highways event at the State House
On January 25th 2019 Karilyn Crockett, author of People before Highways, led a group of the original activists from across the region to the Massachusetts State House to commemorate the 50thanniversary of the pivotal 1969 fight to stop I-95 and the Inner Belt. Chris Lisinski captured the populist legacy of the anti-highway movement organizers in the following article for the State House News Service.
The event had everything: it brought history out of the Archives/off the pages and into the State House, included activists sharing lessons learned and anecdotes, elected officials took the time to learn and understand, linked Boston's public transit/traffic woes to past struggles and successes, and was wrapped with elements of art/music (drumming and trees and laundry lines full of wishes.) So happy to have played a tiny supporting role in this event.
Article: https://www.statehousenews.com/?login=yes&trial=yes&path=cms/news.aspx&yr=2019&select=2019162
Radical Empathy in New England Archivists Newsletter
Sam Strain interviewed me about Radical Empathy for an article in New England Archivists Newsletter 45:2, Spring 2018. She did a great job making me sound smart!
This is the text of the article.
At the Spring 2018 NEA / A.R.T. Joint Meeting in New Haven, one session focused on exploring personal and professional responses to Michelle Caswell and Marika Cifor's foundational text "From Human Rights to Feminist Ethics: Radical Empathy in the Archives." As a member of Inclusion & Diversity Committee, I met with panelist Giordana Mecagni of Northeastern University Archives and Special Collections to unpack some of the session's content. We discussed radical empathy and its role in providing framework to center affective responsibilities in our work, and to help bring new voices to the table.
Sam Strain : How would you define radical empathy to someone unfamiliar with the concept?
Giordana Mecagni: Caswell and Cifor explain four affective responsibilities:
Archivist to the creator
Archivist to the subject of records
Archivist to the user
Archivist to the community
We came up with this fifth affective responsibility, archivist to archivist – a focus on accountability and mutual support of our colleagues.
Radical empathy means a shift in thinking from a legalistic, rights-based framework to an approach more aligned with feminist ethics of care and an understanding of the web of mutual affective responsibility. [It means] shifting from 'what are we legally allowed to do with these records?' to 'we care for these records, these records affect us, and our work affects those who are their subject or creators.'
Radical empathy provides a framework to look at power dynamics, rather than relying on ad hoc experiences and 'gut feelings.' Panels like this provide a space to talk about how radical empathy can be enacted in many diverse real-world archival settings.
SS: What impact does the concept of radical empathy have on your day to day archival work? Does it have any ramifications for specific workflows, such as description and access, acquisitions and collections management, or supervisory techniques?
GM: In a way, it's easy for me to think about radical empathy in my daily work, coming from an archive where we collect and make available the history of underrepresented communities. [I operate in] a context in which all of my work – from acquisition to community outreach – are based on continued relationships. [For example], even if this set of records was collected twenty years ago, we are still beholden as the keepers of those records, and the history of that community. With that comes a large amount of responsibility.
[In recent years], we've been shifting into the model of a community archive, emphasizing [community] partnerships. That started with simple things, like not charging partners a fee for scans. If it's their history [we're collecting], then we should be able to provide access to that history, for free. We've also streamlined entry into the building, and focused on providing ready-reference services; simple things to do in a feminist ethics of care. There's also a need to understand power dynamics, and to start having conversations about how specifically we can help racial justice and equity happen in Boston. According to community partners, there's a giant gap between what general folks in the community understand about Boston's history and the way it's talked about. Archives are meant to problematize by providing nuance and varying perspectives.
There are things we can do tangibly, practically, and immediately, to shift the conversation towards celebrating people of color and activists who have done amazing work in the past – voices [which] are oftentimes erased. [We can also] work to provide activists, people who are on the ground and in the community right now, with the kind of tools that can actually help them.
SS : What does archival work based on a feminist ethics of care look like our field now? Who's doing that kind of work?
GM : It's interesting – there's what's going on now, and there's all the work that started this idea. [People like] my predecessor, Joan Krizack – who got the diversity award from SAA – was doing radical work. People who were doing new documentation strategies back in the day built these wonderful collections of the people's history. They may not have been talking about radical empathy, but they were talking about relationships, they were talking about community, they were talking about not cherry-picking, they were talking about looking at a community from all aspects. Those folks are acknowledged by Caswell and Cifor as laying the groundwork for this kind of work.
SS : Do you think there's any stigma on this kind of approach to archival work? Do you think centering a more empathetic and care-focused ethic in our work will meet push-back in our profession?
GM : I don't think anyone is against empathy. [However],I think when we shift [the conversation] from 'we're all going to be nice to each other' and move on to looking at interactions between people as being professionally problematic, that's where the push-back is going to be. There's so much of our field that needs to be looked at hyper-critically. Through this lens, it's easy to start seeing all of the places where our field is really complacent, in allowing racial stereotypes to continue, and in [perpetuating] white supremacy.
We talk a lot about diversity and inclusion, but the way we value collections needs to be looked at critically. The way some large institutions value archival collections both monetarily and in prestige – really does favor the overrepresented. If you're not reflected in the archives, that's problematic. The idea of neutrality has been a giant flash-bang in our profession; if you're dealing with people, there is no neutral. Archives are people.
SS : How do you feel understanding of radical empathy can be integrated into graduate level archival education?
GM : [As a graduate student], I don't remember learning anything about donor relations, or even how to acquire, which was a challenge [in the workplace]. I never, ever got a lesson [that taught me] what to do when the widow of the person whose papers you're collecting starts crying, and that happens all the time. These are people, people with lives – and that's something we don't address in library school; the people aspect of things.
Thinking about graduate education, what does a change in the field look like? What would it take to center people in the equation? I think that most neoliberal institutions – including universities – see the ability to maintain and develop relationships to care for the community as valuable skills. I think that's what it would take – to see those sorts of skills valued [in graduate archival education], rather than the ability to do nice, pretty EAD encoding.
Having recently graduated with an MLIS from Simmons College, I am hopeful that our field can continue to grow and change, and that frameworks like Caswell and Cifor's can be used to open new dialogues in archival education, while interrogating traditional methods. I look to the work of my classmates – especially student presenters and organizers of the DERAIL Forum – as an example of the potential to shift paradigms in our profession as we enter the field.
As a member of the Inclusion & Diversity Committee, I feel that it's necessary to continue to make space to have professional conversations about our affective obligations to the creators, subjects, and users of records, as well as our wider communities. In our ongoing work to make NEA a more inclusive and welcoming organization, I hope that we can help strengthen mutually supportive archivist to archivist relationships among our members.
Brown, M. (2017). Confronting the Curriculum: Incorporating Radical Empathy into Archival Training. Presented at the Diversity, Equity, Race, Accessibility, and Identity in LIS (DERAIL) Forum.
Caswell, M., & Cifor, M. (2016). From Human Rights to Feminist Ethics: Radical Empathy in the Archives. Archivaria, 82 , 23-43.
Jimerson, R. C. (2007). Archives for All: Professional Responsibility and Social Justice. The
American Archivist, 70 (2), 252-281.
Note: This interview has been condensed and edited for clarity.
"Community Engaged" projects
Gross corporate "community engagement" image from the internet. Who wears a suit while gardening?
During the #d4d Design for Diversity Conference, Case study presenters talked about developing DH projects that are ethically embedded in the community. Wanting to learn a little more about the topic, I googled around and found guidelines for both "Community Engaged" and "Ethically Community Engaged" projects. Both had similar types of mild suggestions, such as 'humility,' 'mitigating harm,' 'engaging across boundaries' and 'respecting self-determination.' Obvious, right?
What was missing from the reports and guidelines I skimmed was any perspective from the impacted community 'partner.' Are they not asked for feedback?
The exception was in this "Characteristics of quality Community-Engaged Scholarship" from Pepperdine (this report is worth reading), but is just a citation.
It looks like this book "Service-Learning Through Community Engagement:What Community Partners and Members Gain, Lose, and Learn From Campus Collaborations"
by Lori Gardinier might shed some light on the community's perspective, so I will put it on my list of books to read at some point.
#d4d case study presenters and conference attendees had some interesting ideas about forming an ethical community engagment certification (like LEED!) program. I have collated them and will post later.
East Boston Speaks: School Desegregation, October 2
I'm helping organize this event with a bunch of educators and neighborhood activists. Please come!
New York Streets, West End, Villa Victoria, Tent City, Stop the Highway: Battlegrounds of "progress" vs. community control in Boston's neighborhoods
Here is a presentation I gave at the Old South Meeting House September 12, 2017, for the Paul Revere Society on HOLC maps. Click on "tools" and "speaker notes" for my talk.


text: this is page head


text:
Reviews// Championship Manager 2010
Posted 25 Sep 2009 17:15 by Tim Smith
Companies: Beautiful Game Eidos
Games: Championship Manager 2010
Football - the business - has changed an awful lot since Championship Manager made its debut in 1992. With the sometimes sinister appearance of Directors of Football and 'General' Managers hovering over the shoulders of the team manager (hello Kevin Keegan, Dennis Wise doth lurk behind you with a different team selection...), and seemingly taking away the responsibility for who to pursue in the transfer market and general undermining of power, well...who, in their right mind, would be a football manager? You would!
Championship Manager 2010 offers you the opportunity to assume the role of team manager, along with all the responsibilities that come with it. Granted, the board of directors of your chosen club will let you know if they're satisfied (or otherwise) at regular intervals, but at least you will be made aware of the feedback, and there'll be no boardroom interference in choosing team tactics, buying players et al. No, that's all the responsibility of the manager.
Sure, you will have to delegate certain tasks to others: for example, you can't go scouting around the globe for players to improve your squad yourself, and there are aspects of training and fitness for which you'll have to employ others to administer. At the beginning of your career, everything and everyone you need to get to matchday one in a fit state is at your fingertips. If you overlook something, CM2010 will point it out to you, so at least you've been made aware that you haven't selected a sufficient number of substitutes or assigned penalty-taking responsibilities. If you choose not to make any changes, the saving grace of all football management games - auto pick - does it for you.
CM2010 has been taken apart and put back together with great care by developer Beautiful Game Studios, and there are no bits left over. Indeed, and unlike an Ikea-bought wardrobe, there's a lot more than initially meets the eye once the game's installation and multiple screens of sponsors are gone. CM2010's release date means that some of the later deals in the summer transfer window will not be featured in the game, but post-release, a September update is available from the game's [url=www.championshipmanager.co.uk]official website[/url]. There's little doubt that, come winter, and the end of the next transfer window, there will be another downloadable update.
Beautiful Game - unlike some developers - has remembered that real-life football comes in 3D, and has implemented an in-game match progress screen using all three dimensions! After you've selected your team and its tactics, you can watch the match play out on screen. No boring panels of text here, Brian. Similarly, there is no real emphasis on the tickertape feature so beloved of other football management games; just a briefly visible and unobtrusive comment when a significant event occurs. The in-game action looks a little Sensible Soccer-esque, if the Sensible teams were a bit taller and had gone on a proper footballer's diet instead of having chips with everything, the little fatties that they are.
A novel feature, one that's new to the Championship Manager brand, is CM Season Live, wherein you are invited to take control of a club during a selection of mid-season points, using real world data. At the time of writing, there have been no CM Season Live updates available to download, so unfortunately I cannot tell you exactly how it works.
The upshot is that there will be clubs from the top 10 European countries available to save from the ignominy of a relegation dogfight, and teams to propel to promotion, play-offs or European competition. When the download becomes available, I'm gonna go for a team marooned in mid-table mediocrity and see where I can take them. At least if I avoid relegation, I will not get the boot.
Hopefully. After all, if your favourite team is top of the league at the end of say, January 2010, the only way is down, so don't risk it. That's part of the reason that I elected to take charge of Kotka, Finland club, FC KooTeePee - the nearest phonetic to 'cutie pie' available in CM2010, incidentally.
-1- 2 next >>
michael 26 Sep 2009 09:53
why isnt this on the ps3
KEN MORLEY 14 Oct 2009 15:31
I'VE GOT A TIP TOP COMPUTER AND THE GAME IF GREAT BUT FAR TOO SLOW AND I HAVE 4000 RAM :-( CANT WAIT FOR FM 2010
Spog 15 Oct 2009 19:42
Really poor review. I am very surprised to be honest - but totally pathetic!
Posting of new comments is now locked for this page.
A Plague Tale: Innocence Review
Persona 3: Dancing in Moonlight / Persona 5: Dancing in Starlight Review
Civilization VI (Switch) Review
SEGA Mega Drive Classics - Switch Review
Spyro Reignited Trilogy Review
Hitman 2 Review
The Council: Episode 4: Burning Bridge Review
Valkyria Chronicles 4 Review
Yakuza Kiwami 2 Review
Marvel's Spider-Man Review


At Wilson Laycraft, we're noted for our experience as senior trial, corporate, and family law counsel. Our services range from general practice to highly specialized areas of law, with significant experience in civil litigation, administrative, insurance, tax, tribunals, regulatory law matters, and divorce and family law.
Our lawyers have a thorough knowledge of the complexities of corporate and commercial law. Our litigators frequently conduct trials and appeals in superior courts throughout western Canada.


text:
Ryder Johnson Fund Donates to First Responders in Tragic Search
A family photo of the late Ryder Johnson.
Michael Roberts | June 28, 2018 | 6:45am
On January 17, 2016, twenty-year-old Ryder Johnson vanished after a day of work at Eldora ski resort, prompting a search that involved hundreds of people and even more tears, as well as a $100,000 reward offered by his father, Rick Johnson, for information about his whereabouts. The mystery lingered until August 2017, when skeletal remains found near South Boulder Creek east of Gross Reservoir were positively identified as Ryder's.
Along the way, Rick and his wife, Cindy, established Ryder's Fund, a charitable enterprise that honors him and the many people who spent hours looking for him. And now the fund has announced that it will provide financial support to volunteer first responders with the Boulder County Sheriff's Office, which headed up the search effort, and creating a reserve-crisis-fund initiative.
"There's no question that at some point in our community, there will be a mass incident," says Chris Coker, CEO of the Boulder YMCA, which administers Ryder's Fund under the auspices of its endowment committee. "The sheriff's department will be the major agency responding, and they don't have a reserve to take care of officers who may become victims."
Ryder Johnson ID'd From Human Remains, Family Saddened, Relieved
Ryder Johnson's Dad on Huge $100K Reward for Info About Missing Son
Ryder Johnson, Missing Eldora Staffer: "He Is Not in Trouble," Family Writes
The fund previously offered a helping hand to just such a law enforcer — Jeff Pelle, son of longtime Boulder County Sheriff Joe Pelle, who was one of five Douglas County deputies shot during a New Year's Eve incident in Highlands Ranch involving gunman Matthew Riehl, a mentally disturbed man who ambushed the officers following a call to 911.
Eldora General Manager Brent Tregaskis, a fund contributor, poses alongside Cindy and Rick Johnson under a sign for a run rechristened in Ryder's name.
YMCA of Boulder Valley
"Jeff was off-duty for a long time," Coker points out. "When these first responders are injured, their costs go up dramatically in their house. People think workers' comp will take care of that, but it doesn't cover everything. And most police, fire and emergency people have side jobs, because we don't pay them what they really should be getting paid. When they're injured on the job, their workers' comp doesn't take care of the money you were making from plumbing or painting or whatever your side job was. That goes away. So they wrote a check to help Jeff with those extra costs."
Mental health has been another focus of the fund, which has provided gifts to Attention Homes, a facility that aids youth in crisis, and an unnamed couple who moved to Longmont in the hope of providing an addiction-free environment for their nineteen-year-old son. In addition, the fund gave $5,000 to a young woman suffering from depression and other issues so that she could attend a medical/heath retreat.
Also benefiting was a YMCA program Coker describes as "teens being peer mentors for teens." He adds that "Ryder grew up at the Y. He played hockey here, so there was a natural family connection."
This link extends to the way the YMCA handles the fund, which currently exceeds $250,000. Coker stresses that "nothing goes to overhead — 100 percent of it goes straight to the people the fund is trying to help. It fits so well with what we do at the Y that we're thrilled we can be part of it, and I think that because of what it's doing and the Johnsons' place in the community, it will go on for a very, very long time."
Just as Ryder himself should have been able to do. Click to donate to Ryder's Fund.
Michael Roberts has written for Westword since October 1990, serving stints as music editor and media columnist. He currently covers everything from breaking news and politics to sports and stories that defy categorization.
Facebook: Michael Roberts
Twitter: @mikerobertscolo


text:
Wojkowe (ukrainisch ; russische Entsprechung /) ist der Name mehrerer Orte in der Ukraine:

 Siedlung städtischen Typs in der Oblast Donezk, Stadtkreis von Charzysk, siehe Wojkowe

 Dorf in der Autonomen Republik Krim, Rajon Lenine, siehe Wojkowe (Lenine)
 Dorf in der Autonomen Republik Krim, Rajon Perwomajske, siehe Wojkowe (Perwomajske)
 Dorf in der Oblast Donezk, Rajon Starobeschewe, siehe Wojkowe (Starobeschewe)

 ehemaliger Name eines Dorfes in der Oblast Dnipropetrowsk, Rajon Solone, siehe Kwitytsche
 ehemaliger Name eines Dorfes in der Oblast Kiew, Rajon Shuriwka, siehe Wojtowe (Shuriwka)

 ehemaliges Dorf in der Oblast Kiew, Rajon Poliske, siehe Wojkowe (Poliske)

redpajama_set_name: RedPajamaWikipedia


text:
Best-picks
Best Mobile Business Simulation Games
By John Corpuz 2019-06-04T00:45:00Z
Found your own mega-corporation, run a brewery and more with these mobile business and management games.
Unleash Your Inner Mogul with These Games
The mobile gaming revolution has brought just about every gaming genre — from first person shooters to war games and empire builders — to our smartphones and tablets, as you'll see if you peruse our top-rated games for Android and iOS. But not all games are about battle and conflict. Some tap into the more constructive side of gaming. Business simulations, city builders and other management games let you unleash the mogul within. Found your own mega-corporation, build a town from the ground up, or sail the starry dark of space in search of fortune with these 20 business and management games for your mobile device.
Pocket City (Android, iOS: $3.99)
A pint-sized city builder without the pitfalls of free-to-play monetization, Pocket City (Android, iOS) captures the magic of a proper urban planning game like SimCity, but in a mobile-friendly package. As mayor of a fledgling town, it's up to you to see to the needs of your citizens, laying down roads, zones, and utilities to attract new residents while keeping an eye on your tax income, spending, traffic congestion, and other variables. It may sound like a handful, but a lot of information is accessible in easy-to-read infographics and charts. With a quick look at your city's needs and problems, you can get waste no time addressing issues that pop up. Pocket City includes a progression system that unlocks new buildings and upgrades as you level up your city; there's also a light layer of sidequests and objectives to satisfy as your city keeps growing.
Project Highrise (Android, iOS: $3.99)
Construct the skyscraper of your dreams in Project Highrise (Android, iOS), a building management sim that's made the jump from PC to mobile devices. You build, manage and develop your own high rise tower over hours of gameplay that includes adding restaurants, stores, apartments, and offices, all while trying to balance the budget and keep your tenants happy. Players can engage in a variety of story scenarios or play the game in sandbox mode, and the mobile version of the game comes with all of the extra content added into the PC version, such as the Tokyo Towers, Miami Malls, and Las Vegas expansion packs.
Tropico (iOS: $11.99)
It's time to lead the people to prosperity in Tropico, the infamous tongue-in-cheek simulation that puts you in command of your own Cold War island paradise. As the island's newly elected ruler, you'll have to balance your economy, tourism, global considerations and local politics, doing whatever it takes to stay in power and assure a bright future for your island nation. Featuring a redesigned interface for tablet play, Tropico includes a basic and advanced tutorial to quickly show budding dictators the ropes, while a campaign mode has you achieving objectives and unlocking new islands to play in. You can step into the shoes of historical presidents, revolutionaries and dictators, or even customize your own avatar's traits and unleash them upon the world in an expansive sandbox mode. An update earlier this year added iPhone support for the iPhone 6s and later.
Stardew Valley (Android, iOS: $7.99)
For something less intense than deciding the fate of entire nations, check out Stardew Valley (Android, iOS), the hit indie farming RPG which has finally made the jump from PC to mobile phones. Players inherit a run-down old farm, which they can turn into the farm of their dreams. You plant crops, bring in the harvest, and reinvest your profits into expanding your farm and adding livestock. The game is more than just farming, though, with a neighboring community to visit and befriend, fishing spots to explore, and caves full of monsters and resources to check out.
Farming Simulator 18 (Android, iOS: $4.99)
Test your green thumb with the mobile port of Farming Simulator 18 (Android, iOS), a hardcore farming sim that's all about delivering a crunchy but playable mobile farming simulator. Players plant and harvest different varieties of crops, manage livestock, and go behind the wheel of a fleet of high end agricultural vehicles from a variety of real-world tractor makers. You can play through the game solo with AI assistants providing backup, but the game also supports local multiplayer through Wi-Fi or Bluetooth.
Star Traders: Frontiers (Android, iOS: $4.99)
The Trese Brothers return to the far future with Star Traders: Frontiers (Android, iOS), a rollicking interstellar adventure that's also a business sim in the vein of classics like Elite and Privateer. As inheritor of a Star Trader charter, it's up to you to decide what you'll do with your ancestral vessel, as you navigate through a perilous sector of space. Will you go after dangerous bounties, explore alien worlds, haul valuable cargo, or dabble in the politics of the sector's rival factions? While the original Star Traders RPG was pretty low on the audio and visual frills, Frontiers is a vast improvement, with customizable ships, captains and crew members that you can take into battle or into the nearest trading port.
Prison Architect (Android, iOS: Free)
Design, build and manage your own high-security lockup in the mobile version of Prison Architect (Android, iOS). Players take charge of everything from laying down the cell blocks to managing the staff and keeping the place from rioting. You'll need to balance the happiness and needs of the staff and your prisoners, while at the same time keeping an eye out for security risks — all while trying to keep your fledgling operation within the budget. The game takes the freemium approach on mobile, with players given the basics of the campaign; more story chapters and game features become available through in-app purchases.
Rollercoaster Tycoon 3 (iOS: $4.99)
Can't make it to your favorite theme park for the spring break? No vacation leave banked up for the near future? Well, you can still have a bit of vicarious theme park fun with Roller Coaster Tycoon 3, an iOS game that has you in charge of a theme park, managing its attractions, designing rides and keeping your visitors happy. You can even take a virtual ride on your roller coasters and rides. Roller Coaster Tycoon 3 is a full premium game, which means no pesky timers and in-app purchases to get between you and the fun.
Concrete Jungle (Android, iOS: $4.99)
For a slightly more abstract take, check out Concrete Jungle (Android, iOS), which uses tile-laying and deckbuilding mechanics to simulate the challenges of urban planning. Players must balance housing, economy, and expenditures to develop their city. Houses and apartments score points, while factories and economic buildings can affect the score of adjacent tiles. As your economy grows, you can unlock advanced cards with powerful abilities, but as you use more and more expensive tiles, the minimum score requirement for each row of buildings increases. The game comes with a fully-voiced singleplayer mode, custom games and even a competitive mode where opposing planners try to score points while interfering with the other player's plans.
Steam: Rails to Riches (Android, iOS: $4.99)
Another excellent boardgame port that's also evocative of the business management theme, Steam: Rails to Riches (Android, iOS) challenges players to become the richest railroad baron ever by connecting routes and moving goods while at the same time edging out your competitors. Each turn, players take out loans to fund their operations, bid for turn order, and build tracks, develop towns, and set up shipments, while carefully dividing income between investing for future improvements and collecting victory points for the endgame. The app features different levels of AI difficulty, as well as support for pass-and-play local multiplayer gaming.
Hipster CEO (iOS: $1.99)
Hipster CEO is a tongue-in-cheek parody of the startup world that puts you in the shoes of a budding entrepreneur making your way in the world. Players start out by selecting a product (such as mobile gaming, dating apps or file sharing) as well as a target market, and then you get a small amount of seed capital and an employee, and then it's up to you to get the ball rolling. As your startup evolves, you can hire more staff and specialists, train your personnel or spruce up the office and more, all while keeping an eye on the bottom line, while courting venture capital or holding out for buyout.
Big Chief (Android, iOS: $2.99)
Big Chief (Android, iOS) is another light, tongue-in-cheek parody of startup and corporate culture, combining the Tinder-like swipe gameplay pioneered by Reigns but with a Muppets-esque cartoon aesthetic. Each turn, one of your employees shows up with a brilliant idea (that might also be stupid, illegal, or possibly just boring). Swipe right to accept, or swipe left to fire, and then you'll see how your decisions affect your relations with the public, your employees and shareholders. It's simple tongue-in-cheek fun that's good for a few laughs.
Game Dev Story (Android: $2.49; iOS: $4.99)
Just as it says in the title, Game Dev Story (Android, iOS) gives players the opportunity to craft their own story as a game developer. Granted, the "story" basically involves assigning staff members to craft a video game with stats driving the results. But it's still fairly addictive, especially if you possess some knowledge of the video game industry and its history. This inside baseball element gives the game a lot of appeal, but what keeps you playing is that eager anticipation of results: waiting to see what your staff puts out and the fulfillment of critical praise (or the disappointment of a critical drubbing).
Kairo Land (Android, iOS: Free)
Kairo Land (Android, iOS) is designed to be the new app portal for Kairosoft's rich library of cute, player-friendly light management simulators, with players able to try game demos, buy games, or avail of an all-access subscription mode that lets you play anything in the library on demand. Kairo Land features some of the Japanese publisher's hits such as Grand Prix Story, Pocket League Story, and many other titles, with more being added in periodically.
Transport Tycoon (Android, iOS: $6.99)
Even with the addition of a modern touch UI, this is not exactly the most attractive game on our list. However, if you give it a fair shake, Transport Tycoon (Android, iOS) will consume whole afternoons. With a business loan you need to pay soon, you'll start buying vehicles and setting up the infrastructure on your journey to become the emperor of land, sea and air travel. Each level is a scenario with its own transportation problems to solve, but also act as open sandboxes to indulge in. If you love the freedom to experiment and have an obsession with details, Transport Tycoon is for you.
Fiz: Brewery Management Game (Android, iOS: $1.99)
Beer aficionados will work up a mighty thirst with Fiz: Brewery Management Game (Android, iOS). As head of your own micro-brewery, you start out with a tiny operation selling small batches to local stores. As you grow in experience and develop new brewing recipes, you can make a name for yourself in brewing competitions, discover larger markets and improve your facilities and staff. Behind the cute pixelated exterior and the monotonous chiptune is a decent stat engine that allows you to fiddle with the quality of your beer, track sales figures and feedback and run market research in your quest to become a powerhouse brewery.
Golf Club Manager (Android, iOS: $1.99)
Take control of the finances of a struggling golf club and turn it around into a championship-worthy course in Golf Club Manager (Android, iOS). You'll need to carefully marshal your tiny earnings at the beginning, which requires some strategic thinking when it comes to upgrading your club facilities, spending on advertising and amenities, and building up the reputation of your 18-hole course. While the graphics are pretty basic, there's a good amount of crunch to work through here that should provide an interesting experience for sim game aficionados and golf fans with a strategic bent.
Football Manager 2019 (Android, iOS: $8.99)
Stat junkies will get a blast out of Football Manager 2019 Mobile (Android, iOS), the latest in Sega's long-running soccer sim series. You're in the manager's seat of your own club, making the big choices when it comes to hiring, training, and trading your star players while setting up the perfect lineup and tactics for each match. You can choose from 56 different leagues across 19 different countries, with Russia, China, and the German Bundesliga making their first appearance in the franchise. You'll need more than soccer know-how to triumph, as you also must manage training, trading, and strategy on and off the pitch while keeping fans, players and owners happy and your club's bottom line in the black.
Motosport Manager 3 (Android, iOS: $1.99)
The Motorsport Manager series delivers a strategic but accessible take on Formula 1 racing, and the latest entry, Motorsport Manager 3 (Android, iOS) adds GT and endurance racing to the mix. You manage your racing team to victory by finding winning drivers, negotiating contracts and investing in the kind of research and development that gives your team better rides. You also handle race tactics and pitstop strategy. Additions in this version include the ability to vote on rules changes, invitational tourneys, and dynamic AI teams. And if you've dreamed of racing in Monaco, Motorsport Manager 3 finally brings that venerable course to your smartphone. Can you build your own racing dynasty and dominate the track while keeping the budget balanced and your sponsors happy?
The Westport Independent (Android, iOS: $4.99)
Taking inspiration from Papers Please, The Westport Independent (Android, iOS) is both a political parable and business sim that puts you behind the editor's desk of a newspaper carefully dancing the fine line between telling the truth, selling newspapers and appeasing the censors of the Loyalist Party. Each week, players choose a variety of stories to feature, as well as edit their content to make it more palatable, appealing, accurate or salacious. Once you've set your layout, fixed your advertising, and sent it to the presses, sit back and pay attention to how your staff writers react, as well as check out the mail, propaganda, and thinly-veiled threats from censors and readers. Can you avoid being shut down by the Loyalists? And can you shape the fate of Westport with the power of the news?


Discussion in 'For Sale: Bass Guitars' started by dave79, Aug 5, 2012.
Got the new truss and saddles and now it is all set up with 45-105, 125, 30 DR Sunbeams. Also polished the frets while I had the chance. There are Schaller straplocks on it now.
I'd like to thank everyone at Warwick USA for helping me out and getting this bass up to speed.
I'm pretty torn about keeping it but I'd also like to buy a house. I'm setting it at $2000 shipped CONUS via no fee payment. No offers or trades at this point unless you're showing up at my door with cash.
This is so rare. Someone buy it!
Hah, I wasn't subscribed to this. Anyway, I installed a black Schaller strap lock on the bottom to match the original one. Also the other hole was probably the original position, I need to Google or Talkbass search this but I'd be surprised if that wasn't the case.
Awesome Warwick. Free bump for you!
Woooo, payment sent! Thanks Dave.


text:
Drawer Search
Connect on LinkedIn (opens in new window)
ABI Home
Show sub menu for About ABI
The Afya Way
BCPSS
ABI Schools
Show sub menu for ABI Schools
The Belair-Edison School
Tunbridge Public Charter School
Afya/Brehms Lane Merger
Afya Baltimore Inc. Home
ABI Program
Show sub menu for ABI Program
Academic/Intellectual Health
Physical/Nutritional Health
Social/Emotional Health
Support ABI
Show sub menu for Support ABI
ABI Partners
Health & Wellness Initiative
ABI News & Events
Show sub menu for ABI News & Events
ABI Blog
History of Litigation
Show sub menu for Contact ABI
ABI Highlights
ABI News and Events
Weight and Weightless
When I look back at this blog, which I've been writing for 10 months now, I see a recurring theme: weight. I write about the crushing weight of budget deficits. I write about the burden of the past. I write about carrying my wife's dog, minutes after she died, and what it felt like to feel the weight of her life slip away. I write about the weight of parenthood and how a principal at one of our schools needed to take time to be with her child, stricken with a severe heart problem. I write about the genesis of our schools and our mission to address the childhood obesity epidemic in Baltimore City.
Though I also wrote about other things, I seem to return to the weight of things more often than not. I need to do so again this time, as a myriad of things—bits and pieces of images and reflections and memories—weigh on my mind.
The central paradox of education, it seems to me, is concurrently relieving children of external burdens, to the extent this is possible, so they can have a little space to learn and know and grapple with what Ta-Nehisi Coates refers to as the weight of our history.
Most mornings for the past month I've opened the school day at Brehms Lane. A colleague, Paul Banks, and I play touch-football with a group of 15 or 20 boys before school starts. Paul is the quarterback. I'm the referee. The kids scatter about the field and hustle, play after play, to score or defend, to catch a ball or an elusive runner. We play on a hillside. I recall my own childhood, when I used to play football with my friends. Our field was also a hill, someone's backyard. The best play was to sweep uphill to begin with and then, when the defenders' legs shortened against the incline, switchback in a flash and race down the yard, energized and performance-enhanced by the decline, and whip around the corner, weightless and free, for a score.
Football. America's most popular game. But now television ratings are plummeting for the NFL. There are multiple reasons, including controversy surrounding Anthem-kneeling, an owner calling players inmates, over-exposure, over-commercialization, lack of quality competition. All these things have taken their toll. So, too, has the violence. In the Ravens game last Thursday, a 40-0 win by Baltimore, the two most memorable plays were the vicious hit on Joe Flacco, which knocked him out of the game, and a choking incident. In a different era, mommas were advised not to let their babies grow up to be cowboys. It's football they should fear now. As much as I love the game, it's hard to watch something that leads to destruction of peoples' bodies and brains. Earl Campbell was my favorite player as a kid. He was a singular athlete. He wore tear-away jerseys, so when defenders grabbed on to his massive shoulders they slipped away, holding nothing but shreds of his uniform. Campbell is crippled now, as are many of the other football heroes from my youth. Some have died from the game's after effects.
Tunbridge held a SuperHero Fun Run this Monday. The event was sponsored by the school's PTO. What an event! Friends and family sponsored the little ones, who then ran around in circles, skipping through the air, wondrously weightless, joined by moms and dads and teachers dressed up like Wonder Woman, Bat Man, and various other supernatural, superhuman beings. The music thumped out loud. The sun poured over the lot. The leaves ruffled in the surrounding trees. We barely heard the gunshots just down the street.
At the corner of York Rd. and Woodbourne, one day last week: A woman walking north, many months pregnant, carrying a toddler with one arm, using her belly to assist, holding the hand of still another young one, struggling to keep up, a foot or two behind, a ripped bag of Doritos in his off-hand. I could have turned right-on-red. I should have. The smoke from her cigarette, somehow clamped between two of her fingers, startled me. One woman carrying too much weight, I thought. Green. Go.
Other thoughts: The weight of a former president's hand inappropriately touching a woman, standing beside his wheelchair. The weight of our current president's daily tweets, and their attempt to intervene and disrupt our daily lives. The weight of newsmen and Hollywood men overpowering woman with their weight. Stop.
Every day I step onto the scale. Madness is doing the same thing over and over again and expecting the scale to say something different. So many of my loved ones and colleagues do daily battle with their weight every single day. One friend, through determination and effort, has lost over a hundred pounds in the past year. A husband and wife faced down health problems by changing their diets, their commitment to exercise, the way they think about family. They are thriving! My wife gets up early every morning, long before dawn, to spin and pump it up and sweat: she's engaged in a friendly game of war with weight and she's winning. A young girl cries, I'm told, because her father has told her that she weighs too much. Her mom comforts her, tells her she does not. Mom is right.
Not everyone wins at weight, I know. It's a hard game to play. It's complicated. It's emotional. We can't all be Julia Child, who once quipped, "Everything in moderation…including moderation."
"A calm and humble life will bring more happiness than the pursuit of success and the constant restlessness that comes with it," wrote Albert Einstein, in a hand-written letter to a friend. These few words are worth more than their weight in gold, more even than the $1.56 million they fetched at auction this past week.
ABI Blog: Part & Parcel
3536 Brehms Ln.
2800 Brendan Ave.
Tunbridge PCS
ELEMENTARY & MIDDLE:
5504 York Rd.
Afya Baltimore Inc. (ABI)
Afya Baltimore INC.


text:
N|uu is een bedreigde Khoisantaal die wordt gezien als de eerste Zuid-Afrikaanse taal en werd gesproken door de volkeren die tot de  San worden gerekend. N|uu behoort tot de Tuutaalfamilie, samen met het uitgestorven Xam als naaste verwante taal en Taa als naaste nog gesproken verwante taal. De taal werd vooral gesproken door het ‡khomani-volk in de Kalahariwoestijn in Zuid-Afrika.

Uitsterven
Het N|uu bloeide in de 19e eeuw, maar het werd net als de meeste andere Khoisantalen verdrongen, met name door het Afrikaans en het Nama. Het proces werd versterkt nadat de degenen die de taal spraken in de jaren 1930 naar de steden migreerden en toen omringd waren door niet-N|uu-sprekende mensen. Anno 2022 was er nog maar één moedertaalspreker van het N|uu, Katrina Esau, maar er worden mede door haar inspanningen, lessen gegeven aan kinderen in deze taal. Nederlandse kolonisten worden medeverantwoordelijk geacht voor het verdwijnen van de taal.

Externe link
  N/uu Language Documentation and Revitalisation

Khoisantaalfamilie
Taal in Zuid-Afrika