text:
import json
from xml.etree import ElementTree
import utils
from cloud import Cloud

def toString(c):
	return str(c) if c != None else None

def toBool(c):
	return bool(c) if c != None else None

def toInt(c):
	return int(c) if c != None else None

def toList(c):
	return list(c) if c != None else None

def toDateTime(c):
	"""
	FIXME
	"""
	return None

class TypeabstractPlatformObjectBase(object):
	def __init__(self, val, **p):
		val.update(p)
		self.stored_value = val

	def getValue(self):
		if not self.stored_value:
			return None

		return self.stored_value

	def toJson(self):
		return json.dumps(self.stored_value)

	def toXml(self):
		pass

class TypeAbstractPlatformObject(TypeabstractPlatformObjectBase):
	"""
	Format: attributes
	@id: string
	@systemId: string
	@label: string
	@detail: string
	@restUrl: string
	"""
	def __init__(self, id, systemId, label, detail, restUrl):
		TypeabstractPlatformObjectBase.__init__(self, {
			"id": id,
			"systemId": systemId,
			"label": label,
			"detail": detail,
			"restUrl": restUrl
		})

class TypeDataItemReference(TypeAbstractPlatformObject):
	def __init__(self, id, systemId, label, detail, restUrl):
		TypeAbstractPlatformObject.__init__(self, id, systemId, label, detail, restUrl)

class TypeDataItemCollection(TypeabstractPlatformObjectBase):
	"""
	Format:
	@dataItem: list of DataItemReference
	"""
	def __init__(self, dataItemRefernences):
		for i in dataItemRefernences:
			TypeAbstractPlatformObject(i)
		dict.__init__(self, list(dataItemRefernences))

class TypeAbstractSearchCriteria(TypeabstractPlatformObjectBase):
	"""
	Format:
	attributes
	@pageSize: int
	Specify the number of entries per page of the results, if not specified defaults to MAX_PAGE_SIZE
	@pageNumber: int
	Specify which page of the results to return, if not specified defaults to DEFAULT_PAGE.
	Using the pageNumber pagination property affects which found object
	is returned by the findOne method. For example, pageNumber=1 returns the
	first matching found object, while pageNumber=3 returns the 3rd matching
	found object, etc.
	@sortAscending: boolean
	@sortPropertyName: string
	"""
	def __init__(self, pageSize, pageNumber, sortAscending, sortPropertyName, **p):
		self.pageSize = toInt(pageSize)
		self.pageNumber = toInt(pageNumber)
		self.sortAscending = toBool(sortAscending)
		self.sortPropertyName = toString(sortPropertyName)

		TypeabstractPlatformObjectBase.__init__(self, {
			"pageSize": self.pageSize,
			"pageNumber": self.pageNumber,
			"sortAscending": self.sortAscending,
			"sortPropertyName": self.sortPropertyName
		}, **p)

class TypeDataItemCriteria(TypeAbstractSearchCriteria):
	"""
	Format:
	@name: string
	@alias: string
	@modelId: string
	Model system id.
	@types: list of DataItemType ("ANALOG" / "DIGITAL" / "STRING")
	@readOnly: boolean
	@visible: boolean
	@forwarded: boolean
	@historicalOnly: boolean
	e.g, "name"
	"""
	def __init__(self, **p):
		self.name = toString(p.get("name"))
		self.alias = toString(p.get("alias"))
		self.modelId = toString(p.get("modelId"))
		self.types = toList(p.get("types"))
		self.readOnly = toBool(p.get("readOnly"))
		self.visible = toBool(p.get("visible"))
		self.forwarded = toBool(p.get("forwarded"))
		self.historicalOnly = toBool(p.get("historicalOnly"))

		TypeAbstractSearchCriteria.__init__(self,
			pageSize = p.get("pageSize"),
			pageNumber = p.get("pageNumber"),
			sortAscending = p.get("sortAscending"),
			sortPropertyName = p.get("sortPropertyName"),
			**{
				"name": self.name,
				"alias": self.alias,
				"modelId": self.modelId,
				"types": self.types,
				"readOnly": self.readOnly,
				"visible": self.visible,
				"forwarded": self.forwarded,
				"historicalOnly": self.historicalOnly
			}
		)

class TypeHistoricalDataItemValueCriteria(TypeAbstractSearchCriteria):
	"""
	Format:
	@assetId: string
	@dataItemIds: list
	@  item: string
	@startDate: dateTime
	@endDate: dateTime
	"""
	def __init__(self, assetId, dataItemIds, startDate, endDate):
		self.assetId = toString(assetId)
		self.startDate = toDateTime(startDate)
		self.endDate = toDateTime(endDate)

		dataItemIds = toList(dataItemIds)
		d = []
		self.dataItemIds = []
		if dataItemIds:
			for i in dataItemIds:
				#d.append({"item": str(i)})
				d.append(str(i))
				self.dataItemIds.append(str(i))

		TypeabstractPlatformObjectBase.__init__(self, {
			"assetId": self.assetId,
			"dataItemIds": d,
			"startDate": self.startDate,
			"endDate": self.endDate
		})

class TypeSuccessfulOperation(TypeabstractPlatformObjectBase):
	def __init__(self, p):
		# FIXME: <xs:sequence>
		self.succeeded = []
		for s in toList(p):
			self.succeeded.append({
				"ref": toString(s.get("ref")),
				"id": toString(s.get("id"))
			})

		TypeabstractPlatformObjectBase.__init__(self, self.succeeded)

class TypeFailedOperationDetails(TypeabstractPlatformObjectBase):
	def __init__(self, p):
		# <xs:sequence/>
		TypeabstractPlatformObjectBase.__init__(self, toList(p))

class TypeFailedOperation(TypeabstractPlatformObjectBase):
	def __init__(self, p):
		# FIXME: <xs:sequence>
		self.failures = []
		for s in toList(p):
			self.failures.append({
				"ref": toString(s.get("ref")),
				"message": toString(s.get("message")),
				"details": TypeFailedOperationDetails(s.get("details")).getValue(),
				"sourceOfFailure": toString(s.get("sourceOfFailure")),
				# Attribute
				"code": toString(s.get("code"))
			})

		TypeabstractPlatformObjectBase.__init__(self, self.failures)

class TypeAbstractExecutionResult(TypeabstractPlatformObjectBase):
	def __init__(self, p):
		self.succeeded = TypeSuccessfulOperation(p.get("succeeded")).getValue()
		self.failures = TypeFailedOperation(p.get("failures")).getValue()
		# Attributes
		self.successful = toBool(p.get("successful"))
		self.totalCount = toInt(p.get("totalCount"))

		TypeabstractPlatformObjectBase.__init__(self, {
			"succeeded": self.succeeded,
			"failures": self.failures,
			"successful": self.successful,
			"totalCount": self.totalCount
		})

class TypeExecutionResult(TypeAbstractExecutionResult):
	def __init__(self, p):
		TypeAbstractExecutionResult.__init__(self, p)

class TypeAssetCriteria(TypeAbstractSearchCriteria):
	def __init__(self, **p):
		self.gatewayId = toString(p.get("gatewayId"))
		self.name = toString(p.get("name"))
		self.modelNumber = toString(p.get("modelNumber"))
		self.serialNumber = toString(p.get("serialNumber"))
		self.organizationName = toString(p.get("organizationName"))
		self.locationName = toString(p.get("locationName"))
		self.regionName = toString(p.get("regionName"))
		self.assetGroupName = toString(p.get("assetGroupName"))
		self.systemName = toString(p.get("systemName"))
		self.gatewayName = toString(p.get("gatewayName"))
		self.gatewayOnly = toBool(p.get("gatewayOnly"))
		self.backupAgentsOnly = toString(p.get("backupAgentsOnly"))
		self.packageName = toString(p.get("packageName"))
		self.packageVersion = toString(p.get("packageVersion"))
		self.withoutPackage = toBool(p.get("withoutPackage"))
		self.muted = toBool(p.get("muted"))
		self.conditionId = toString(p.get("conditionId"))
		self.toLastContactDate = toDateTime(p.get("toLastContactDate"))
		self.fromLastContactDate = toDateTime(p.get("fromLastContactDate"))
		#@dataItem: DataItemValueCriteria
		self.hasEventsSince = toDateTime(p.get("hasEventsSince"))
		#@geofence: GeofenceCriteria
		self.showAssetsWithAlarms = toBool(p.get("showAssetsWithAlarms"))
		self.propertyName = toString(p.get("propertyName"))
		#@item: string list
		#@propertyNamesMatchType:PropertyNamesMatchType
		self.propertyValue = toString(p.get("propertyValue"))
		self.includeDetails = toBool(p.get("includeDetails"))
		self.missing = toBool(p.get("missing"))
		self.neverRegistered = toBool(p.get("neverRegistered"))
		self.inMachineStream = toBool(p.get("inMachineStream"))

		TypeAbstractSearchCriteria.__init__(self,
			p.get("assetId"), p.get("dataItemIds"), p.get("startDate"), p.get("endDate")
		)

		TypeabstractPlatformObjectBase.__init__(self, {
			"gatewayId": self.gatewayId,
			"name": self.name,
			"modelNumber": self.modelNumber,
			"serialNumber": self.serialNumber,
			"organizationName": self.organizationName,
			"locationName": self.locationName,
			"regionName": self.regionName,
			"assetGroupName": self.assetGroupName,
			"systemName": self.systemName,
			"gatewayName": self.gatewayName,
			"gatewayOnly": self.gatewayOnly,
			"backupAgentsOnly": self.backupAgentsOnly,
			"packageName": self.packageName,
			"packageVersion": self.packageVersion,
			"withoutPackage": self.withoutPackage,
			"muted": self.muted,
			"conditionId": self.conditionId,
			"toLastContactDate": self.toLastContactDate,
			"fromLastContactDate": self.fromLastContactDate,
			#@dataItem: DataItemValueCriteria
			"hasEventsSince": self.hasEventsSince,
			#@geofence: GeofenceCriteria
			"showAssetsWithAlarms": self.showAssetsWithAlarms,
			"propertyName": self.propertyName,
			#@propertyNamesMatchType:PropertyNamesMatchType
			"propertyValue": self.propertyValue,
			"includeDetails": self.includeDetails,
			"missing": self.missing,
			"neverRegistered": self.neverRegistered,
			"inMachineStream": self.inMachineStream
		})

class CurrentDataItemValueCriteria(dict):
	"""
	Format:
	@name: string
	@alias: string
	@assetId: string
	Asset system id.
	@types: list
	@readOnly: boolean
	@visible: boolean
	@forwarded: boolean
	@historicalOnly: boolean
	@pageSize: int
	@pageNumber: int
	Using the pageNumber pagination property affects which found object
	is returned by the findOne method. For example, pageNumber=1 returns the
	first matching found object, while pageNumber=3 returns the 3rd matching
	found object, etc.
	@sortAscending: bool
	@sortPropertyName: string
	e.g, "name"
	"""
	def __init__(self, criteria):
		dict.__init__(self, criteria)

class Axeda(Cloud):
	"""
	Axeda platform REST APIs
	https://<host>/artisan/apidocs/v1/
	https://<host>/artisan/apidocs/v2/
	"""
	def __init__(self, config):
		Cloud.__init__(self, "Axeda", config)

		if self.get('name') == None:
			assert(False)

		if self.get('username') == None:
			assert(False)

		if self.get('password') == None:
			assert(False)

		if not self.get("asset"):
			assert(False)

		if not self.get("model"):
			assert(False)

		self.config = config

		self.username = self.get('username')
		self.password = self.get('password')
		self.timeout = self.get('timeout')
		self.session_id = None

		if self.get('ssl') != None:
			self.ssl = self.get('ssl')
		else:
			self.ssl = None

		self.debug = config["debug"] if config.get('debug') else False

		# Use json or xml?
		if self.get('json') == None:
			self.json = True
		else:
			self.json = self.get('json')

		if self.ssl == True:
			self.v1_url_prefix = 'https'
			self.v2_url_prefix = 'https'
		else:
			self.v1_url_prefix = 'http'
			self.v2_url_prefix = 'http'
		self.v1_url_prefix += '://' + config['name'] + '/services/v1/rest/'
		self.v2_url_prefix += '://' + config['name'] + '/services/v2/rest/'

		if not self.json:
			self.name_space = 'http://type.v1.webservices.sl.axeda.com'
			ElementTree.register_namespace('', self.name_space)
			#ElementTree.register_namespace('xsi', "http://www.w3.org/2001/XMLSchema-instance")
		else:
			self.name_space = None

	def isDebug(self):
		return self.debug

	def checkParameter(self, opts):
		for o in opts:
			if not o:
				assert(False)

	def setURL(self, api):
		url = self.url_prefix + api

		if False:
			if self.session_id:
				url += '?sessionid=' + self.session_id
			else:
				url += '?username=' + self.username + '&password=' + self.password

		return url

	def setHeaders(self, json = None):
		# Always return json response
		headers = { "Accept": "application/json" }
		if json == True or (json == None and self.json == True):
			headers["Content-Type"] = "application/json"
		else:
			headers["Content-Type"] = "application/xml"
		# By default, return xml response or plain text by certain scripto

		if self.session_id:
			headers["x_axeda_wss_sessionid"] = self.session_id
		else:
			headers["x_axeda_wss_username"] = self.username
			headers["x_axeda_wss_password"] = self.password

		return headers

	def auth(self):
		return Auth(self.config)

	def scripto(self):
		return Scripto(self.config)

	def asset(self):
		return Asset(self.config)

	def dataItem(self):
		return DataItem(self.config)

class Auth(Axeda):
	"""
	API
	https://<host>/services/v1/rest/Auth?_wadl
	"""
	def __init__(self, config):
		Axeda.__init__(self, config, False)
		self.url_prefix = self.v1_url_prefix + 'Auth/'

	def login(self, username = None, password = None, timeout = 1800):
		"""
		Creates a new session (sessionId) for the related authenticated user.

		Note that when Axeda Platform creates a session for a user, a timeout is
		defined for that session. The session will be valid only while the session
		is effective; if the session times out, additional calls to the Web services
		will return "access defined" errors. Your code should implement error
		handling to ensure the session is still valid.
		"""
		if not username:
			username = self.username

		if not password:
			password = self.password

		if not timeout:
			timeout = self.timeout

		url = self.url_prefix + 'login?principal.username=' + username + \
			'&password=' + password + '&sessionTimeout=' + str(timeout)

		if self.json:
			headers = { 'Accept': 'application/json' }
		else:
			headers = None

		r = utils.get(url, headers = headers, ssl = self.ssl)
		if r.status_code != 200:
			return False

		if self.json:
			self.session_id = str(json.loads(r.content)['wsSessionInfo']['sessionId'])
		else:
			self.session_id = str(utils.parse_xml(r.content, 'sessionId', self.name_space))

		if self.session_id:
			return True
		else:
			return False

	def logout(self, sessionid = None):
		"""
		Ends the session for the related user. Invalidates the specified SessionId
		such that it can no	longer be used.
		"""
		if not self.session_id and not sessionid:
			return False

		url = self.url_prefix + 'logout?sessionid='
		if sessionid:
			url += sessionid
		else:
			url += self.session_id

		r = utils.get(url, ssl = self.ssl)
		if r.status_code != 204:
			return False
		else:
			self.session_id = None
			return True

class Scripto(Axeda):
	"""
	API
	https://<host>/services/v1/rest/Scripto/?_wadl
	"""
	def __init__(self, config, sessionid = None):
		Axeda.__init__(self, config)
		self.url_prefix = self.v1_url_prefix + 'Scripto/'
		self.session_id = sessionid

	def execute(self, app, data = None):
		self.checkParameter((app,))

		url = self.setURL('execute/' + app)

		headers = self.setHeaders(json = False)

		r = self.getRequest(url, headers, data)
		if r is not None and r.status_code == 200:
			return r.content
		else:
			return None

class Asset(Axeda):
	"""
	Asset Object APIs
	https://<host>/services/v2/rest/asset?_wadl
	"""
	def __init__(self, config, sessionid = None):
		Axeda.__init__(self, config)
		self.url_prefix = self.v2_url_prefix + 'asset/'
		self.session_id = sessionid

	def find(self, serial_number):
		self.checkParameter((serial_number,))

		url = self.setURL("find")

		headers = self.setHeaders(json = False)

		if False:
			payload = json.dumps({
				"modelNumber": serial_number,
			})
		else:
			payload = \
			'''<AssetCriteria xmlns="http://www.axeda.com/services/v2">
<serialNumber>''' + serial_number + '''</serialNumber></AssetCriteria>'''

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def findOne(self, s):
		"""
		Finds the first Asset that meets the specified criteria.
		"""
		self.checkParameter((s,))
		if not isinstance(s, TypeAssetCriteria):
			assert(False)

		url = self.setURL("findOne")

		headers = self.setHeaders(json = True)

		# FIXME: either mode doesn't working with Axeda but Mashery.
		if True:
			payload = s.toJson()
		else:
			if True:
				payload = \
				'''<?xml version="1.0" encoding="UTF-8"?><AssetCriteria xmlns="http://www.axeda.com/services/v2"><modelNumber>''' + c["modelNumber"] + '''</modelNumber><serialNumber>''' + c["serialNumber"] + '''</serialNumber></AssetCriteria>'''
			else:	# also work with Mashery
				payload = \
				'''<v2:AssetCriteria sortAscending="true" sortPropertyName="name" xmlns:v2="http://www.axeda.com/services/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><v2:modelNumber>''' + c["modelNumber"] + '''</v2:modelNumber><v2:serialNumber>''' + c["serialNumber"] + '''</v2:serialNumber></v2:AssetCriteria>'''

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def findByIds(self, asset_id, fast = True):
		"""
		Finds the specified SDK objects based on the ids provided, and returns an
		unordered list of found objects. This method will accept only platform ids,
		and does not support aternate ids.
		"""
		self.checkParameter((asset_id,))

		if fast:
			url = self.setURL("id/" + str(asset_id))
			headers = self.setHeaders(json = False)
			r = self.getRequest(url, headers)
		else:
			url = self.setURL('findByIds')
			headers = self.setHeaders(json = False)

			if False:
				payload = json.dumps({
					"id": asset_id
				})
			else:
				payload = \
				'''<IdCollection xmlns="http://www.axeda.com/services/v2">
	<id>''' + str(asset_id) + '''</id></IdCollection>'''

			r = self.postRequest('findByIds', headers, payload)

		if r is not None and r.status_code == 200:
			return r.content
		else:
			return None

class DataItem(Axeda):
	"""
	API
	https://<host>/services/v2/rest/dataItem?_wadl
	"""
	def __init__(self, config, sessionid = None):
		Axeda.__init__(self, config)
		self.url_prefix = self.v2_url_prefix + 'dataItem/'
		self.session_id = sessionid

	def create(self, name, model_name, type, alias = ""):
		"""
		Creates a new Data Item.

		@name:
		@model:
		@type:
			DIGITAL
			ANALOG
			STRING
		"""
		self.checkParameter((name, model_name, type))

		if type not in ("DIGITAL", "ANALOG", "STRING"):
			assert(False)

		url = self.setURL("")

		headers = self.setHeaders(json = False)

		if False:
			payload = json.dumps({
				"name": "valvrave_test_string",
				"type": "STRING",
			})
		else:
			payload = \
			'''<v2:DataItem xmlns:v2="http://www.axeda.com/services/v2">
<v2:name>''' + name + '''</v2:name>
<ns85:model id="''' + model_name + '''" xsi:type="ns85:ModelReference" xmlns:ns85="http://www.axeda.com/services/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<v2:type>''' + type + '''</v2:type>
</v2:DataItem>'''

		r = self.putRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def save(self, name, model_name, type, alias = ""):
		"""
		Save a new Data Item.

		Note:
		This same REST call as a create() invokes a Save operation.

		@name:
		@model:
		@type:
			DIGITAL
			ANALOG
			STRING

		Return value:
		{
			"successful":true,
			"totalCount":1,
			"succeeded":[
			{
				"ref":"es2015-Galileo-Gen2||valvrave_test_string3",
				"id":"427"
			}],
			"failures":[]
		}
		"""
		self.checkParameter((name, model_name, type,))

		if type not in ("DIGITAL", "ANALOG", "STRING"):
			assert(False)

		url = self.setURL("")

		headers = self.setHeaders(json = False)

		if False:
			payload = json.dumps({
				"name": "valvrave_test_string",
				"id": "es2015-Galileo-Gen2||valvrave_test_string",
				"type": "STRING",
			})
		else:
			payload = \
			'''<v2:DataItem xmlns:v2="http://www.axeda.com/services/v2">
<v2:name>''' + name + '''</v2:name>
<ns85:model id="''' + model_name + '''" xsi:type="ns85:ModelReference" xmlns:ns85="http://www.axeda.com/services/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<v2:type>''' + type + '''</v2:type>
</v2:DataItem>'''

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def update(self, dataitem_id, name, model_name, type, alias = ""):
		"""
		Updates an existing Data Item.
		"""
		self.checkParameter((dataitem_id, name, model_name, type))

		if type not in ("DIGITAL", "ANALOG", "STRING"):
			assert(False)

		url = self.setURL("id/" + str(dataitem_id))

		headers = self.setHeaders(json = False)

		if False:
			payload = json.dumps(
			{
				"name": name,
				"model": [{
					"objType": "ModelReference", "id": model
				}],
				"type": type
			})
		else:
			payload = \
			'''<v2:DataItem xmlns:v2="http://www.axeda.com/services/v2" systemId="''' + str(dataitem_id) + '''">
<v2:name>''' + name + '''</v2:name>
<ns85:model id="''' + model_name + '''" xsi:type="ns85:ModelReference" xmlns:ns85="http://www.axeda.com/services/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<v2:type>''' + type + '''</v2:type>
<v2:alias>''' + alias + '''</v2:alias>
</v2:DataItem>'''

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return r.content
		else:
			return None

	def delete(self, dataitem_id):
		"""
		Deletes a data item.
		"""
		self.checkParameter((dataitem_id,))

		url = self.setURL("id/" + str(dataitem_id))

		headers = self.setHeaders(json = False)

		r = self.deleteRequest(url, headers)
		if r is not None and r.status_code == 200:
			#return TypeExecutionResult(json.loads(r.content))
			return json.loads(r.content)
		else:
			return None

	def find(self, **s):
		"""
		Finds Data Items based on search criteria.

		@criteria: a complete criteria is defined as:
        alias: (null)
        modelId: (null)
        types: ([])
        readOnly": (null)
        visible": (null)
        forwarded: (null)
        historicalOnly: (null)
        pageSize": (null)
        pageNumber: (null)
        sortAscending: (null)
        sortPropertyName: (null)
		"""
		url = self.setURL("find")

		headers = self.setHeaders(json = True)

		if True:
			payload = json.dumps(s)
		else:
			payload = None

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def findOne(self, **s):
		"""
		Returns the first Data Item found that meets specified search criteria.

		@criteria: See the class Criteria.

		Note:
		Essentially this API equals to find() with pageNumber=1.
		"""
		url = self.setURL("findOne")

		headers = self.setHeaders(json = True)

		if True:
			payload = json.dumps(s)
		else:
			payload = None

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def findByIds(self, dataitem_ids):
		"""
		Finds the specified SDK objects based on the ids provided, and returns an
		unordered list of found objects. This method will accept only platform ids,
		and does not support aternate ids.
		"""
		self.checkParameter((dataitem_ids,))

		url = self.setURL("findByIds")

		headers = self.setHeaders(json = False)

		if False:
			payload = json.dumps({
				"id": dataitem_id
			})
			# FIXME: which one
			payload = json.dumps({
				"dataItem": [{
					"systemId": str(dataitem_id)
				}]
			})
		else:
			payload = '''<IdCollection xmlns="http://www.axeda.com/services/v2">'''
			for i in dataitem_ids:
				payload += '<id>' + str(i) + '</id>'
			payload += '</IdCollection>'

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def findById(self, dataitem_id):
		"""
		Finds an Data Item based on its platform identifier.

		@dataitem_id
		"""
		self.checkParameter((dataitem_id,))

		url = self.setURL("id/" + str(dataitem_id))

		headers = self.setHeaders(json = False)

		r = self.getRequest(url, headers)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def findByAlternateId(self, name, model_name):
		"""
		Finds a Data Item based on the alternate identifier.

		@alternate_id
		The alternate ID of a Data Item takes the following format:
		ModelNumber||dataItemName
		"""
		self.checkParameter((name, model_name))

		alternate_id = model_name + "||" + name
		url = self.setURL(alternate_id)

		headers = self.setHeaders(json = False)

		r = self.getRequest(url, headers)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def findCurrentValues(self, criteria):
		"""
		Returns the current values of the specified Data Items.

		Note:
		For the findCurrentValues method, the assetId input field is required.
		"""
		self.checkParameter((criteria,))

		c = CurrentDataItemValueCriteria(criteria)

		url = self.setURL("findCurrentValues")

		headers = self.setHeaders(json = True)

		if True:
			payload = json.dumps(c)
		else:
			payload = \
			'''<v2:CurrentDataItemValueCriteria sortAscending="true" sortPropertyName="name" xmlns:v2="http://www.axeda.com/services/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v2:assetId>''' + str(criteria['asset_id']) + '''</v2:assetId></v2:CurrentDataItemValueCriteria>'''

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def getSourceDataItems(self, id):
		"""
		Returns the source Data Items associated with the specified source Data Item.
		"""
		self.checkParameter((id,))

		url = self.setURL("id/" + str(id) + "/sourceDataItems")

		headers = self.setHeaders(json = False)

		r = self.getRequest(url, headers)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def getTargetDataItems(self, id):
		"""
		Returns the source Data Items associated with the specified target Data Item.
		"""
		self.checkParameter((id,))

		url = self.setURL("id/" + str(id) + "/targetDataItems")

		headers = self.setHeaders(json = False)

		r = self.getRequest(url, headers)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def findHistoricalValues(self, **p):
		"""
		Returns the historical values of the specified Data Items.
		"""
		url = self.setURL("findHistoricalValues")

		headers = self.setHeaders(json = True)

		if True:
			payload = json.dumps(p)
		else:
			payload = \
			'''<v2:CurrentDataItemValueCriteria sortAscending="true" sortPropertyName="name" xmlns:v2="http://www.axeda.com/services/v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<v2:assetId>''' + str(criteria['asset_id']) + '''</v2:assetId></v2:CurrentDataItemValueCriteria>'''

		r = self.postRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def bulkCreate(self, c):
		"""
		Creates a new Data Item.

		@name:
		@model:
		@type:
			DIGITAL
			ANALOG
			STRING
		"""
		self.checkParameter((c,))

		TypeDataItemCollection(c)

		url = self.setURL("bulk/create")

		headers = self.setHeaders(json = False)

		if False:
			payload = json.dumps({
				"name": name,
				"type": type,
				"model": {
					"id": id,
				},
			})
		else:
			payload = \
			'''<DataItemCollection xmlns="http://www.axeda.com/services/v2">
<dataItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="DataItem">
<name>''' + name + '''</name><model id="''' + model + '''"/><type>''' + type + '''</type>
</dataItem></DataItemCollection>'''

		r = self.putRequest(url, headers, payload)
		if r is not None and r.status_code == 200:
			return json.loads(r.content)
		else:
			return None

	def bulkDelete(self):
		pass

	def bulkSave(self):
		pass

	def bulkUpdate(self):
		pass

redpajama_set_name: RedPajamaGithub


text:
Abbr. selections from SN56
SN56:1 (SA428): Savatthi, bhikkhus
"Develop concentration. A bhikkhu who is concentrated understands things as they really are.
"He understands as it really is: "This is suffering. This is the origin of suffering. This is the cessation of suffering. This is the way leading to the cessation of suffering."
"Do not reflect: 'The world is / is not eternal'; or 'The world is finite / infinite'; 'The soul and the body are the same / [different]'; 'The Tathagata exists / does not exist / both exists and does not exist / neither exists nor does not exist after death'.
"You should reflect: 'This is suffering'; 'This is the origin of suffering'; 'This is the cessation of suffering'; 'This is the way leading to the cessation of suffering'. Because this reflection is beneficial, relevant to the fundamentals of the holy life, and leads to direct knowledge, to enlightenment, to Nibbana.
"Therefore, an exertion should be made to understand: 'This is suffering ... the way leading to the cessation of suffering'."
SN56:11 (SA379): Baranasi, 5 bhikkhus
"'This is the noble truth of suffering', 'This noble truth of suffering is to be fully understood', 'This noble truth of suffering has been fully understood', 'This is the noble truth of the origin of suffering', 'This noble truth of the origin of suffering is to be abandoned', 'This noble truth of the origin of suffering has been abandoned', 'This is the noble truth of the cessation of suffering', 'This noble truth of the cessation of suffering is to be realized', 'This noble truth of the cessation of suffering has been realized', 'This is the noble truth of the way leading to the cessation of suffering', 'This noble truth of the way leading to the cessation of suffering is to be developed', 'This noble truth of the way leading to the cessation of suffering has been developed': thus in regard to things unheard before, there arose in me vision, knowledge in this world: 'This is my last birth.'"
SN56:21 (SA403): Kotigama, bhikkhus
"You and I have roamed and wandered through this long course of samsara.
"That noble truth of suffering, that noble truth of the origin of suffering, that noble truth of the cessation of suffering, that noble truth of the way leading to the cessation of suffering has been understood and penetrated. Craving for existence has been cut off; the conduit of existence has been destroyed; there is no more renewed existence."
SN56:22 (SA390/392): Kotigama, bhikkhus
"Those ascetics who understand these things: these I consider to be ascetics among ascetics."
SN56:31 (SA404): Kosambi, bhikkhus
"The things I have directly known but have not taught you are numerous, while the things I have taught you are few. Why have I taught this? Because this is beneficial, relevant to the fundamentals of the holy life, and leads to direct knowledge. to enlightenment, to Nibbana."
SN56:42 (SA421): Rajagaha, a bhikkhu
"Those who do not understand as it really is: 'This is suffering ... This is the way leading to the cessation of suffering'--they delight in volitional formations, generate volitional formations that lead to birth, aging, death, lamentation, pain, displeasure, despair. They tumble down the precipice of birth ... despair."
SN56:45 (SA405): Vesali, Ananda
"[It is] difficult to pierce with arrowhead the tip of a hair split into strands. But they pierce something even more difficult to pierce as it really is: 'This is suffering ... This is the way leading to the cessation of suffering."
SN56:47 (SA406): Savatthi, bhikkhus
"Sooner would the blind turtle coming to the surface once every hundred years, insert its neck into the yoke with a single hole than the fool who has gone once to the nether world would regain the human state. Because there is no conduct guided by Dhamma, no righteous conduct, no wholesome activity, no meritorious activity. There prevails mutual devouring, the devouring of the weak."
"Venerable sir, compared to the water in the pond, the water drawn out on the tip of the blade of kusa grass is not calculable, does not bear comparison, does not amount even to a fraction."
"So, for a noble disciple, a person accomplished in view who has made the breakthrough, the suffering that has been destroyed and eliminated is more, while that which remains is trifling."
(SA406/SN56:47, 12字) 愚癡凡夫,漂流五趣,復人身難
(SA408/ SN56:8,54字) 汝等應如是論議:『此苦聖諦、此苦集聖諦、此苦滅聖諦、此苦滅道跡聖諦。』如是論議,梵行饒益、正智正覺、正向涅槃。是故於四聖諦,當勤方便。
(SA440/SN56:52,4字) 見諦斷苦。
tagPlaceholderTags: world, canon, indian, east-asian

redpajama_set_name: RedPajamaCommonCrawl


The world has come a long way in a very short space of time since the dawn of the digital age. Where less than thirty years ago things like the internet and cell phones hardly existed, they are now ubiquitous.
They have shrunk the world and they have made things that we were impossible, very simple.
Unfortunately, however, prevailing attitudes and mindsets have taken a little longer to move with the times and as such there are often snobbish attitudes towards the new ways of doing things.
There is a prevailing attitude that studying at a traditional university or college is the way to go, with plenty of old-school people suggesting that online institutions are second-rate. This is not true.
Here are some reasons why studying online is the way.
It goes without saying that bricks and mortar institutions cannot move. If you want to study at a specific one, you need to go there.
You might be lucky enough to be able to, but this is not always possible. With study online you can find the course that works best for you and you can enroll yourself. It doesn't matter if it is run by an institution around the corner or on another continent.
A simple search with the details of hat you are looking to study should produce an avalanche of options. For example, if you were to type something like 'diploma of building and construction management' into a search engine, you might be very surprised by what results are returned.
This will allow you to compare course material, lecturers, requirements and prices and afford you the opportunity to make a decision based on things that matter to you – as opposed to being limited by location.
Because there are no buildings and facilities to maintain, online institutions are able to charge significantly less.
There business models also benefit from the fact that class sizes are not limited by lecture theatre capacity, which means that they can have more students paying less.
There is no compromise on the quality, in fact it is often better, because the professors and lecturers can be paid more. Talk about a win!
For many people studying is something that they want to do in their spare time. This does not apply to everyone, and without a doubt there is a lot to be said for the social side of studying (and partying) at a university, but for those who work by day and study by night, online is a great way to do what you need to do, from the comfort of your home.
No bricks and concrete footprint. No need to print course material. No need to travel to and from campus.
No need for air conditioners and generators and the utilities that are needed to power a modern tertiary institution. It is a win for the world as you study from home without increasing your carbon footprint.


Need a New Website? Is Your Website Generating Leads?
Professional, custom, mobile-friendly websites built for any business budget.
Need a Comprehensive Digital Marketing Plan?
There's more than paid search and content creation. Strengthen your online presence and drive sales for your business with real tactics that work.
RMS Media is a premier web design, software development and digital marketing company located in Northeast Ohio. We specialize in helping small businesses build a strong online presence by developing professional, responsive websites at a budget that works for them.
We offer custom budget-friendly website development, search engine optimization (SEO), local programmatic display advertising, search engine marketing (PPC), .NET software development (ASP.NET, VB.NET, C#), business listing submission and general technical consulting services.
We are also a provider of new media and prepress systems, as well as outsourced development services to the publishing industry.
Professional, budget-friendly websites paired with personal hands-on service.
Make it easier for customers to find you online, and drive leads and sales.
When a customer searches online, are they finding you or your competitors?
RMS is up for the task! After many years of service RMS relaunched our newly polished website and the response has been overwhelmingly positive. The relaxed, no hassle process of revamping the site produced impressive results and they continue to support us with any and all updates that we may require. Thank you for your continued excellence!
We launched our completely revamped website in 2017. We could not be happier with the way the site turned out, and with our RMS Media experience. RMS transformed our graphically outdated website into a modern and incredibly attractive site. Working with RMS was simple, the process went smoothly, and they continue to support us with website updates quickly and efficiently.
Since switching our website to RMS Media, we have seen an increase in website traffic, phone calls and website contact form submissions. I feel more jobs have closed this year because of the new web site. This past June I was booking jobs for this November!


Here is the finest double CD available of one the greatest of all jazz singers. Washingtonian Mildred Rinker (1907-1951) took her first married name to become, as "Mildred Bailey", the first truly great white jazz singer. In every way she was a big star; she was built on a huge scale, and she outsold all other jazz ladies of the 30s apart from Billie Holiday. Mildred Bailey was known as "The Rockin' Chair Lady" after her great success with Hoagy's Carmichael's classic, and that provides the title for Retrospective's tribute. Here are quite simply the 52 finest recordings she made, spanning from her first-ever disc in 1929 (What Kind O' Man Is You?), through her golden years of the 30s to her full 1947 version of one of her key songs All Of Me.
This is a superb collection of material by Mildred Bailey, a tremendously tuneful and swinging singer, accompanied by some of the best orchestras and jazz musicians of the time. Although somewhat neglected these days, in the 1930s and into the '40s she was second only to Billie Holiday as the best-known and respected female jazz singer in America (i.e. in the world). Yet she died alone and broke, aged just 48 in 1951. Record producer and talent-spotter John Hammond called her "one of the three or four greatest singers in jazz! Her legendary temper and occasional spitefulness disguised what her friend Bing Crosby called "a heart as big as Yankee Stadium" Her foul-mouthed rages and (deserved) reputation for being 'difficult to work with undoubtedly contributed to her lack of commercial success. But just as important, in a time when female singers were expected to be conventionally 'attractive' was the matter of her size: "She was fat" said the writer Bucklin Moon, going on to suggest, "she must have felt somehow that if only she were successful she might see someone else when she looked in the mirror. That she didn't like what she did see was apparent to anyone who knew her."
It seems that Mildred Bailey, like so many fine singers of the past, is in danger of being forgotten these days, despite her outstanding recording career. This double CD from Retrospective is therefore very welcome and I hope will help to restore Ms Bailey to her deserved place in the pantheon of female jazz singers, up there with Ella, Billie Holiday and Sarah Vaughan.
Born in 1907, Mildred Bailey (nee Rinker) came from a mixed, partly Native American background and all her siblings entered the music business, most famously brother Al, who became with Crosby and Harry Barris, one of Paul Whiteman's Rhythm Boys. She recorded the song that gives this collection its title, and is the opening track, Hoagy Carmichael's ROCKIN' CHAIR in 1937 and it was a big success, but her recording career began as a singer with Eddie Lang & His Orchestra (WHAT KIND O' MAN IS YOU? (another Carmichael composition) in 1929. Two years later she was recording with Glen Gray's Casa Loma Orchestra and Matty Malneck (memorable versions of GEORGIA ON MY MIND and HOME) before joining Paul Whiteman, where she met the musician who was to be a big influence on her and a very successful musical collaborator, as well as her third husband, xylophonist Red Norvo. The mid thirties also saw her recording with Benny Goodman and with her own orchestra which included both Dorsey brothers and Bunny Berigan, as well as an outfit fronted by Norvo. The two tracks with the latter, SMOKE DREAMS and I'VE GOT MY LOVE TO KEEP ME WARM are enhanced by the arrangements of Eddie Sauter and her interpretations are sublime.


Enable or edit an email template for a new event in Licensing Management Platform (LMP).
You can generate only one message for each event.
Click Administration > Branding > Email Templates.
Select the email template to add.
Specify the desired settings for this template.
Locate the privacy statement you want to modify and click Edit.
Make the changes. You can use any of the variables available in the list.


text:
Cold Springs Mountain bezeichnet mehrere Erhebungen in den Vereinigten Staaten:

 Cold Springs Mountain (Elko County, Nevada, 2287 m), im Humboldt National Forest
 Cold Springs Mountain (Elko County, Nevada, 2466 m)

Siehe auch:
 Cold Spring Mountain

redpajama_set_name: RedPajamaWikipedia


An age in the past, the world's two greatest Mages fought a bloody war to a draw that slew them both.
In the time since, the Kingdom of Vishni has known quiet, and the Swarm beyond the mountains has grown in strength and numbers. Now, with the Time of Prophecy at hand, dark forces move to fulfil ancient visions.
Two men, born to poverty but bearing the blood of those ancient Mages, will rise to decide the fate of both Swarm and Kingdom as the fires of this ancient conflict rise anew.
I own every Glynn Stewart book published so far except his stand alone volumes. I was gratified to see Children of Prophecy was every bit as good as his other works.


text:
'I like to write about stubborn people!': Yiyun Li on her first American novel, Must I Go
The Chinese author has tackled suicide and bereavement in her acclaimed work. Now, 25 years after moving there, she's written her first American novel – and it's an epic.
Yiyun Li. Image: Roger Turesson / Penguin
There's a hurricane blowing into New Jersey when Yiyun Li and I speak over Zoom; she's at her home near Princeton. It seems an appropriate setting to discuss her frequently turbulent new novel, Must I Go, a work in which the memories of one elderly woman cover 70 years of American history, from the immediate post-war period to 2010: a full historical sweep.
That Li manages to create a feeling of intimacy against this backdrop of constant change is testament to why her books are so acclaimed. Her debut was a short fiction collection, A Thousand Years of Good Prayers. Set mostly in modern China, where Li was born in 1972, it was awarded a string of prizes, including the 2006 Guardian First Book and PEN/Hemingway awards. Li's story 'A Sheltered Woman' won the Sunday Times Short Story Award in 2015. In between there have been novels including The Vagrants; a memoir, Dear Friend from My Life I Write to You in Your Life, and most recently a novella, Where Reasons End. This year, Li added a prestigious Windham-Campbell Literature Prize to her list of accolades.
The history behind the writing of Must I Go is a painful one. While Li was working on the novel in 2017, her eldest son took his own life, aged 16. (Li wrote about her own previous breakdown and attempts at suicide in her memoir: a rare foray into autobiography from someone whose preference has been to jettison the personal. As she explains in Dear Friend: "A word I hate to use in English is I. It is a melodramatic word.") Two years after her son's death Where Reasons End unexpectedly appeared, a fiction taking the form of an often playful, sometimes despairing, but always humane dialogue between a bereaved mother and her newly dead son. Must I Go has had, therefore, a long gestation.
Li spent a mandatory year serving in the People's Liberation Army in 1991
It is also Li's first all-American novel (she arrived in the US from China in 1996 to study immunology: science's loss has been literature's gain.) Li went from never having written a story to, in 2005, graduating from the prestigious Iowa Writers' Workshop MFA programme, and becoming the recipient of a MacArthur Foundation 'genius' grant five years after that. She had been a maths prodigy growing up in Bejing, the daughter of a nuclear physicist father and teacher mother; the latter's controlling aspect and its long reach, even after Li emigrated to the US, is much examined in Dear Friend.
Part of the so-called "Tiananmen generation' which came of age during the 1989 student protests, and bore the brunt of subsequent government crackdowns, Li spent a mandatory year serving in the People's Liberation Army in 1991, an experience that is reflected in several of the stories in the collection Gold Boy, Emerald Girl.
Li has said in the past that she first "learned writing" by reading the work of the Irish writer William Trevor, and that without Trevor "there would be no 'me' here." Trevor was not simply a literary inspiration: the pair shared a close friendship until his death in late 2016.
Why wait so long? "You need some accumulation of time to understand a place," Li says of the explicitly American setting and characters of Must I Go. The novel is chiefly set in San Francisco, its catalyst the 1945 UN Peace Conference held in the city. "I was in California for over a decade," she explains. "I thought I would like to write a novel about the Bay area – but not as it is now, rather a time before Silicon Valley – I was struck by how hopeful California must have seemed in 1945, representing the golden future of human history."
It is in this moment of idealism that 16-year-old Lilia, the redoubtable main protagonist of the novel, meets her nemesis, an older man named Roland Bouley. Roland is Canadian, urbane, well-travelled – and Lilia engineers more than one encounter with him. These few meetings will change Lilia's life and yet leave Roland untouched. Early on in the book, we learn that Lilia will go on to have his child, a girl she calls Lucy, whose parentage she never reveals to Roland, nor, until extreme old age, to anyone else. The death of Lucy by suicide when she is a young mother in her twenties forms an undercurrent of grief and yearning running through the novel, which Li tells in flashback.
Lilia, acerbic and aggressive, three times widowed, a mother, grandmother and great grandmother, is now in her 80s and living in a San Francisco retirement home when Roland's diaries are published posthumously. Discovering that she briefly appears (alongside many other women) in a couple of entries, where she is referred to solely by the initial 'L', Lilia furiously sets about annotating Roland's account. The result is like eavesdropping on a private conversation.
Roland, who we only come to know through his gossipy diary, is a man who holds never-to-be-realised ambitions. Aiming to write for posterity, for immortality, he is merely a footnote in history. In thrall from his youth to older, married woman Sidelle Ogden, as the years progress with little to show he brings to mind an ageing gigolo: a witty and flamboyant but rather pathetic figure entirely lacking in self-awareness. Li had great fun writing him.
'I read a lot of 19th and early 20th-century letters and journalism about the Gold Rush and documents of immigrants from all over the world'
"I kept a diary every day for him, in order to get to know his voice" she tells me. "I want the reader to meet him only through his words – and how as a person he is consistently predictable, in that he never loses interest in himself." Roland, even in older age, is "the boy who never grows up", and while his Noel Coward-like comments are very much of an era and a type, Li confesses to having a "soft spot" for him.
While Roland, is, she feels, deeply bound by convention, despite his claims to the contrary, Lilia is the exceptional one, who lives "by intuition." Li sees her heroine as "very American, in a way... she has made up a life story for herself, grabs whatever she can and makes use of it. She is living forward, not looking back, until the end of her life." She laughs. "Her unbendingness frustrated me when I wrote her – the whole writing of Lilia's character was to wrestle with her wilfulness – but I like to write about stubborn people!"
Must I Go moves fluently though different registers and periods. How much research did the novel entail? "It formed two parts - the first was historical – I read a lot of 19th and early 20th-century letters and journalism about the Gold Rush (Lilia comes from settler stock), and documents of immigrants from all over the world; which gave me a real sense of what people sounded like then.
'My brain has banished Chinese. I dream in English. I talk to myself in English. It was a crucial decision to be orphaned from my native language'
The second part was to know every character, and give each an extensive timeline – such as how Roland's parents met, and the birthdays of Lilia's children, even though none of this background information might make it into the finished book.
The overall effect is of a world very much of its time and place, and also one that is perpetually in flux. Lilia are Roland are two people who meet by chance, "in a historical moment – tens of thousands of similar encounters were probably taking place in 1945 in San Francisco at that time." Li adds: "Those characters are further away from me than most characters I've written and it is for that reason I find them so fascinating."
The background to Li's previous books (none of which, by her choice, have so far been translated into Mandarin) is the decades-long aftermath of the Cultural Revolution. Li has said that "My brain has banished Chinese. I dream in English. I talk to myself in English. It was a crucial decision to be orphaned from my native language." In Must I Go her prose seems as far removed from a Chinese context as is possible; it is as burnished as anything by William Maxwell or Henry James.
'Lilia says that when you start writing you feel you can live forever. She has reached a level of living which she did not have in the past'
Those seeking a neat ending will be disappointed: the novel resists closure. Lilia herself is firmly set against such a concept, as she explains in the novel: "I'm hard as the hardest life. Like a settler I've lived through the bumps and wounds and amputations and deaths. I don't mope. Give 'em an axe and hoe and I'll start a garden." And yet, despite this matter-of fact, hardscrabble attitude, Lilia is somehow freed by Roland's diary, according to Li: "Lilia says that when you start writing you feel you can live forever. She has reached a level of living which she did not have in the past." With Li, for whom "privacy was not a concept" back in China, with a lack of physical, emotional and psychological space, writing must also bring a sense of release.
Li is "by nature drawn to storytelling" but is "a solitary reader." Somewhat to her surprise, this March, during the lockdown brought about by the coronavirus pandemic, she started 'Tolstoy Together', a virtual book club in which people all over the world set aside time each day to read a few pages of War and Peace.
The 1,200 page epic is wholly familiar to Li; it is the book she has turned to most often for comfort. She re-reads it every year, with each immersion "revealing new things to me." Eighty-five days after the start of the project, "people were really happy that they had accomplished something, as a structure to anchor their lives... there is a beauty in that, when people from all continents do the same thing on the same day." Random people, purposeful encounters – all very much in the spirit of Must I Go.
Must I Go
Yiyun Li
Richly expansive and deeply moving, an intimate novel of secret lives and painful histories from one of the finest storytellers we have
'This brilliant novel examines lives lived, losses accumulated, and the slipperiness of perception. Yiyun Li writes deeply, drolly, and with elegance about history, even as it's happening. She is one of my favorite writers, and Must I Go is an extraordinary book.' Meg Wolitzer
Lilia Liska is 81. She has shrewdly outlived three husbands, raised five children and seen the arrival of seventeen grandchildren. Now she has turned her keen attention to a strange little book published by a vanity press: the diary of a long-forgotten man named Roland Bouley, with whom she once had a fleeting affair.
Increasingly obsessed by this fragment of intimate history, Lilia begins to annotate the diary with her own rather different version of events. Gradually she undercuts Roland's charming but arrogant voice with an incisive and deeply moving commentary. She reveals to us the surprising, long-held secrets of her past. And she returns inexorably to her daughter, Lucy, who took her own life at the age of 27.
Must I Go is an unconventional epistolary novel, a gleefully one-way correspondence between the very-much-alive Lilia and the long-departed Roland. Though mortality is ever-present, this is ultimately a novel about life, in all its messy glory. Life lived, for the extraordinary Lilia, absolutely on its own terms. With exquisite subtlety and insight, Yiyun Li navigates the twin poles of grief and resilience, loss and rebirth, that compass a human heart.
Dream jobs for book-lovers, from Book Butler to Elephant Librarian
Thinking of a career change in 2022? Here are seven, one hundred per cent real, dream jobs for bibliophiles. Best get your CV polished.
The best books out this week
A new Tessa Hadley novel, Fearne Cotton's self-help guide, and a well-researched exploration of China's rise to power lead our round up.
The Penguin Podcast meets 5 of the biggest debut novelists of 2022
Isy Suttie speaks to five authors about the books they're making a splash with this year.


text:
Q: Switched from 32 to 64bit kernel. How to install 64bit packages? I followed this answer and installed 64bit version of kernel.
uname -m print x86_64, so it's working.

When tried to install 64bit Chrome, Software Center complained about libcups:amd64. Tried to install it manuelly, but I got
sudo apt-get install libcups2:amd64
.....
.....
The following packages have unmet dependencies:
kde-runtime : Depends: libsmbclient (>= 2:4.0.3+dfsg1) but it is not going to be installed
           Recommends: kubuntu-debug-installer but it is not going to be installed
libcups2:amd64 : Depends: libgssapi-krb5-2:amd64 (>= 1.10+dfsg~) but it is not going to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.

Shouldn't this just work with multiarch? If not, how to install 64bit packages?

redpajama_set_name: RedPajamaStackExchange


Cardi B is will be making her return sooner than many thought she would. After giving birth to baby girl Kulture & pulling out of Bruno Mars 24K Magic Tour she will be hitting the stage at the 2018 MTV Video Music Awards.
MTV made the exciting announcement today on twitter that Bardi will indeed be opening the tar studded awards show. The show will be held on Monday August 20th at Radio City Music Hall. Cardi leads nomination alongside DJ Khaled, & The Carters. Also set to perform is Ariana Grande, Nicki Minaj, Post Malone, Travis Scott, & Jennifer Lopez will be receiving the Video Vanguard Award.
After news engulfed social media on her upcoming presence at the upcoming awards show Cardi had to clear the air. She took to her Instagram stories to let fans know that she will only be opening the show & not be actually performing.


Precision dairy farming technologies provide a variety of functions to dairy farmers. Little is known about dairy producer perception of these technologies. A study was performed to understand dairy producer perception of parameters monitored by precision dairy farming technologies. Calving has potential to be predicted using these same parameters and technologies. A second study was performed using two commercially marketed technologies in calving prediction. In order for these technologies to generate accurate and useful information for dairy farm use, they must accurately quantify these parameters. The final study evaluated the accuracy of five commercially marketed technologies in monitoring feeding, rumination, and lying behaviors.
Borchers, Matthew Richard, "AN EVALUATION OF PRECISION DAIRY FARMING TECHNOLOGY ADOPTION, PERCEPTION, EFFECTIVENESS, AND USE" (2015). Theses and Dissertations--Animal and Food Sciences. 45.


text:
Oil Rises as OPEC Signals Continued Cuts and U.S. Threatens Iran
May 20, 2019 EnergyNow Media
May 20, 2019 by Tsuyoshi Inajima and Alex Longley
(Bloomberg) —
Oil rose after Saudi Arabia and other OPEC+ members signaled their intention to keep supplies constrained, while U.S. President Donald Trump ratcheted up tensions with Iran.
Futures in New York jumped as much as 1.7%, before paring some of those gains. Saudi Energy Minister Khalid Al-Falih urged members of OPEC+ gathered in Jeddah to "stay the course" on output cuts. Meanwhile, just weeks after the U.S. tightened sanctions on Iranian crude exports, Trump tweeted: "If Iran wants to fight, that will be the official end of Iran."
Oil has rallied almost 40% this year as production cuts outweigh demand concerns caused by trade tensions between the U.S. and China. Saudi Arabia and fellow oil producers have to balance their desire to maintain high crude prices with the need to fill any supply gaps caused by rising geopolitical risks and disruptions in Venezuela, Libya and Iran.
"Prices will ultimately need to go higher," but "OPEC is walking a bit of a tightrope here," Morgan Stanley analyst Martijn Rats said in a Bloomberg Television interview. "On the one hand, we have some meaningful risks to supply in a number of countries — Iran, Venezuela, potentially Libya — but then on the other hand, we also have some demand weakness coming through."
West Texas Intermediate crude for June delivery rose as much as $1.05 to $63.81 a barrel on the New York Mercantile Exchange, and traded at $62.96 as of 10:36 a.m. London time. The contract added 1.8% last week, the biggest weekly increase since early April.
The June contract expires on Tuesday. The more actively traded July contract rose to as high as $63.96.
Brent for July settlement climbed 31 cents to $72.52 a barrel on the London-based ICE Futures Europe exchange, after advancing 2.3% last week. The global crude benchmark traded at a $9.38 premium to WTI for the same month. Brent's prompt spread remains in a strong backwardation, indicating tight supply.
"We need to stay the course, and do that for the weeks and months to come," Saudi Arabia's Al-Falih told reporters after the meeting in Jeddah on Sunday. The kingdom "isn't fooled" by crude prices and believes the market is still fragile.
Meanwhile, Russian Energy Minister Alexander Novak sent mixed signals. Russia, the most important non-OPEC partner in the coalition, is ready to consider easing production cuts if the market needs more crude, Novak said. Still, Russia would comply with any agreed output limit in the second half of 2019, he said.
In the U.S., working oil rigs fell by three to 802 last week, the lowest since March 2018, according to oilfield-services provider Baker Hughes. Government data last week showed U.S. crude production dropped for a second week to 12.1 million barrels a day.
Other oil-market news: Saudi Arabia isn't seeing as much demand for oil as expected from Iran's customers, as a lot of crude has been leaving the Persian nation without being accounted for since the U.S. imposed sanctions. OPEC's largest producer also said it does not want a war with Iran but will respond "with strength and determination" if Iran decides to start one. Governments worldwide also see a war as unlikely. The evacuation of some Exxon Mobil Corp. workers from Iraq is " unacceptable and unwarranted" because it has nothing to do with the security situation in the southern part of the country, according to Oil Minister Thamir Ghadhban.
Report highlights utility failures in biggest US gas leak
Oil Giant Chevron Offering Electric Car Charging at Stations
5 Things in World Business Today
Saudis Are Said to Expect Oil Revenue Rising 80% by 2023
Slump in Energy Cuts Value of Canadian Mergers to $243.5 Billion
Nebraska panel denies TransCanada request to amend Keystone XL order
Categories US News Tags Tri-Pinned Post navigation
BP Staff Work From Home as Greenpeace Blockades London HQ


Contact us. Your opinions are important to us. We are trying to find out how to improve our site. We want to know what is right with ultrasound equipment and especially what needs upgrading. If you have a unit and would like to comment on it, feel free to send us an email.


text:
Óscar McFarlane Ortega, né le  à Panama au Panama, est un joueur de football international panaméen, qui évolue au poste de gardien de but.

Biographie

Carrière en club

Carrière en sélection

Avec l'équipe du Panama, il joue 21 matchs (pour aucun but inscrit) depuis 2001.

Il figure dans le groupe des sélectionnés lors des Gold Cup de 2005, de 2007 et de 2009. Il atteint la finale de cette compétition en 2005, en étant battu par les États-Unis.

Palmarès

Notes et références

Liens externes

Footballeur international panaméen
Gardien de but au football
Joueur du Plaza Amador
Joueur du Tauro FC
Joueur du CD Universitario
Joueur du San Francisco FC
Joueur du Sporting San Miguelito
Joueur du Colegio Nacional de Iquitos
Naissance en novembre 1980
Naissance à Panama (ville)


Restorative justice (RJ) and restorative approaches (RAs) are becoming increasingly valued as a way of responding to a wide range of conflicts, including problem behaviour and offending behaviour. The growth in the use of RJ and RAs has been described as a 'global social movement' that sets out to repair harm, reduce conflict and harmonise civil society. This report takes a close look at the implementation of an RJ approach in the challenging environment of children's residential care homes.
7 What happens during a period of residential care?


← Do you act like you believe?
The great folks over at The Simple Way, have compile a list of 50 ways to make a difference in the world. Check it out over here.
Fast for the 2 billion people who live on less than a dollar a day.
Contact your local crisis pregnancy center and invite a pregnant woman to live with your family.
Ask your pastor if someone on your church's sick list would like a visit.
Join an open AA meeting and befriend someone there.


text:
Inter-University Research Institute Corporation National Institutes for the Humanities International Research Center for Japanese Studies
Application Forms / Contact Us
Nihon kenkyū
Nihon kenkyū is a scholarly Japanese-language journal published twice a year by the International Research Center for Japanese Studies. All manuscripts that contribute to the advancement of research on Japanese culture will be considered for publication. Manuscripts submitted will be refereed before publication.
Japan Review
Japan Review is the refereed journal published by the International Research Center for Japanese Studies. Japan Review solicits outstanding manuscripts relating to Japan. It also publishes shorter research notes, review articles as well as annotated translations of important texts.
Images of Japan in Non-Japanese Sources
The Kaigai Nihon-zō Shūsei [Images of Japan in Non-Japanese Sources] brings together illustrations from travel journals and scholarly studies by non-Japanese written in the period from the late Tokugawa to the early Meiji era.
"Japan As Seen from Abroad" Series
The "Ihojin-no-Manazashi" [Japan As Seen from Abroad] series brings together illustrations from works in Japanese studies in non-Japanese languages published from the 1850s to around 1900.
Nichibunken Translation and Publication Support Project
To promote the understanding of Japanese culture overseas, Nichibunken Translation and Publication Support Project has been supporting the translation (and re-translation) of classics and modern classics written in Japanese and publication in other languages.
Catalogue of Nichibunken Library Holdings
These indices catalogue the library collections of the International Research Center for Japanese Studies.
Nichibunken Japanese Studies Series
The Nichibunken Japanese Studies Series contains original research findings, compilations of important manuscripts, and other individual or team research coming out of the International Research Center for Japanese Studies.
Nichibunken Monograph Series
The Nichibunken Monograph Series, authored primarily by faculty members of the International Research Center for Japanese Studies, presents some of the Center's leading research in English.
Nichibunken
Nichibunken has been the Center's Japanese-language public relations periodical since 1988. Published twice annually, it contains essays, reports of research activities and research cooperation, updates on team research projects, and other news and information from faculty and visiting faculty members.
NICHIBUNKEN NEWSLETTER
NICHIBUNKEN NEWSLETTER was first published in 1988 as the Center's English-language newsletter. With essays by researchers relating to Nichibunken, as well as information on programs and outreach activities, this publication is distributed to Japanese studies institutions around the world.
Team Research Reports
Team Research Reports record the research findings of the Center's Team Research Projects.
International Symposium (Proceedings)
International Symposium (Proceedings) record the presentations and discussions held at International Research Symposiums organized by the International Research Center for Japanese Studies.
Overseas Symposium Proceedings
Overseas Symposium Proceedings are compilations of papers of the Overseas Symposiums organized by the International Research Center for Japanese Studies.
Japanese Studies around the World
Japanese Studies around the World is published intermittently and contains information on Japanese studies research being conducted outside of Japan.
Nichibunken Forum Lectures
Nichibunken Forum Reports record proceedings of the Nichibunken Forum, a monthly lecture/discussion program on a Japanese studies theme given in Japanese by a visiting scholar from overseas.
Search Nichibunken publications
(Nichibunken Open Access)
Faculty Publications Archives
Newly Published "NICHIBUNKEN NEWSLETTER" No.99
Newly Published "Nichibunken" No.62
Newly Published Team Research Reports No.137
Submission Guidelines for "Japan Review"
Submission Guidelines for Nihon kenkyū No.60(Deadline for Submissions:30 August, 2019)
Nichibunken Open Access Policy
International Research Center for Japanese Studies : 3-2 Goryo Oeyama-cho, Nishikyo-ku, Kyoto 610-1192 Japan
©2017 International Research Center for Japanese Studies. All rights reserved.


text:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
               "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<title>Base Action Element</title>
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
<meta name="generator" content="Org-mode"/>
<meta name="generated" content="2011-02-01 08:02:44 EST"/>
<meta name="author" content="Rusty Klophaus (@rklophaus)"/>
<meta name="description" content=""/>
<meta name="keywords" content=""/>

<LINK href='../stylesheet.css' rel='stylesheet' type='text/css' />

Base Action Element

Getting Started | API | Elements | Actions | Validators | Handlers | About

Table of Contents

1 Base Action

1 Base Action

In object-oriented parlance, all Nitrogen actions are subclasses
of the base actions. This means that all Nitrogen elements can
use the attributes listed below.

1.1 Attributes

module - (atom)

The module containing the logic for this action. Set automatically.

trigger - (atom)

The id of the Nitrogen element that will trigger this action. Set automatically.

target - (atom)

The id of the Nitrogen element to be referenced by obj('me'). Set automatically.

actions - (list af actions)

A list of actions grouped within this action.

show_if - (boolean)

If set to true, this action will be rendered. Otherwise, it will not.

 Author: Rusty Klophaus (@rklophaus)

 Date: 2011-02-01 08:02:44 EST

HTML generated by org-mode 7.01h in emacs 24


When you're a gardener, it's reassuring to know that you have friends.
Friends such as earthworms (the worms crawl in, the worms crawl out, the worms play pinochle on your snout…).
Not to mention the pollinators, by which I mean mainly the bees.
Also nice—and quite beautiful—are the butterflies and hummingbirds.
Frogs are friends of the garden as well; they eat plenty of harmful insects.
And then there are dragonflies. I'm not sure if they are beneficial or merely benign but they're not harmful, definitely. Also, they are curious and always seem genuinely interested in whatever I am doing.
I haven't said that much about this year's crop of string beans but that's not because there hasn't been a lot to say.
Most notably, both of the varieties we planted matured earlier than expected. Based on the days to maturity listed on the seed packets, the Roma II bush beans would, on average, begin yielding ripe beans on Labor Day; the Amethyst Purple, a filet bean, theoretically would have needed another two weeks after that.
But in general, both types of string bean have been very enthusiastic growers. After pushing out of the ground a few days sooner than average, the seedlings quickly climbed their trellis to a height of two to three feet (and, like the Sugar Snap peas before them, two or three vines reached even higher). Apparently, the long, hot days of July were much to their liking.
Cooler weather (relatively speaking) in August did nothing to slow them down. Daily, the vines grew bushier and bushier (both varieties are of the bush type, after all) and produced many blossoms. These were quickly pollinated (and not just by bees; the flowers attracted many moths and butterflies as well) and by early August, tiny string beans had formed.
By the last week of August—a week early—we harvested our first crop. At the same time, the vines continued to grow higher, blossom regularly and profusely, and produce even more beans. Since they started, we have picked several large baskets full (actually, we use a colander) of sturdy, but tender, beans. We have been preparing them simply, sautéed with butter or, decadently, bacon fat (which adds a smoky flavor). I particularly like the Roma II beans which are meatier than the Amethyst Purple.
All good things must come to end, however. As the season has wound down, the string beans have also slowed and the number of new blossoms diminished. Today, we made what I think will be the final search through the leafy vines to find and pick the remaining beans.
We collected a large bag full of the Amethyst Purple and only a few of the Roma II beans (which was not unexpected; this is, on average, an earlier variety). It is enough for at least two meals during which we will celebrate one of this season's bigger successes.
The cucumber at the west end of the row shriveled up and died. It went very quickly—practically overnight—and with no warning (not that having a warning would have helped). Like before (see August 17, 2013), I pulled the vine out and disposed of it well away from the garden (after salvaging one nearly-ripe cucumber). The remaining four plants look to be okay (not counting the powdery mildew on their leaves).
Each day in the garden, I take a tour of the squash and cucumber vines searching for spotted squash and striped cucumber beetles. Usually, I find them hiding in the blossoms, especially the smaller flowers of the cucumber plants. Bees often spend the night in the larger squash blossoms; I suspect that they do not make good roommates.
When I find the little varmints, I grant them no mercy (and that's probably enough said about that).
After an unusually warm July, we've been experiencing a strangely cool August. It is great for sleeping (no need to run the air conditioner) but it is not so good for the garden. The humidity remains high (unavoidable in the northeast in summer) and, consequently, there is a heavy dew every morning.
Anyone growing cucurbits (squash, cucumbers, melons) knows that these conditions are conducive to powdery mildew. And the evidence in our garden is proof. The leaves of all of the squash plants—summer and winter—are covered with the white fuzz. It seems to be increasing daily, almost as I watch, despite periodic (but, admittedly, infrequent) milk sprays.
Luckily (and so far, so good), the mildew has not affected squash production significantly. New leaf growth is still quite strong, there are plenty of blossoms and the pollinators have not been interrupted. We will still be eating squash for a few weeks (at least) to come.
Where powdery mildew seems to have the greatest negative impact is on the older end of the vine, nearest the roots. This portion of the vine has already produced fruit and its leaves would be dying back anyway. However, the mildew seems to speed up the process. The question has now become, will the rate of mildew progress overtake the vine's growth?
We finished what we thought would be the last of the Sugar Snap peas the other day and I was considering pulling them out in preparation for sowing seeds for green beans. But although there are currently no peas developing, each plant is producing another round of blossoms. We'll wait another few days to see if a late crop forms before we move on. The peas are a short-lived treat and if there is the chance of a few more, I'll take it. There is plenty of time for the string beans.
For the last few days, I have been worried about the slow growth of the tomato plants. The weather conditions up until now have been almost exactly the opposite of what they prefer (cool and wet versus warm and dry). Reassuringly, however, the vines are finally showing signs of life. As of today, they have all reached the second rung of their cages.
Not only are they taller and fuller but the Sungolds have sent forth their first branches of blossoms. The flowers are only just formed and have not yet completely opened but once they do, they are sure to attract bees and other pollinators. After that, it will not be long until we see cherry tomatoes. Of course, we will still have to wait for them to grow and ripen but it is encouraging nonetheless.
All of the tomato plants are sprouting new branches, some which are low on the stem, as far down as the soil surface. Using clippers, we nipped off all new growth lower than about six inches above the ground. This will help keep the lowest portion of the plants dry and exposed to ventilating breezes.
Suckers have also started to form at most of the existing branches. Now, I'm generally a proponent of aggressive pruning and my first reaction was to remove all of them. This is the policy to which I adhered last year and certainly, the tomato vines were much easier to manage and tie to the cages. But they also had fewer branches on which fruit could develop and that may have contributed to last year's meager harvest (I don't think it was the only reason).
This year, I will take a more moderate stance and assess each budding branch individually. If a sucker is located where there are already several branches (or otherwise lush foliage), I will clip it off. Alternatively, if a sucker forms where the plant is sparse, I'll let it grow in. The goal will be a uniformly full plant without undue congestion.
The summer squash plants also seem to have shifted into a higher gear and are beginning to fill out. The only exception is one of the zucchini vines. It otherwise looks normal but is only about half of the size of its sibling. It is like someone hit it with a shrinking ray. Actually, its color is also not as deeply green as its sister plant, which may be an indication that it is struggling. Perhaps a dose of fertilizer to spur its growth?


text:
Born: December 21, 1936 (age 85)
Career: Governor of Oregon, 1991-1995
Secretary of State of Oregon, 1985-1991
Oregon House of Representatives, 1981-1985
Barbara Roberts served as governor of Oregon from 1991-1995, the first woman to hold this position and the only one until the 2016 election of Kate Brown.
Roberts was born on December 21, 1936, in Corvallis, Oregon. She became an advocate for special-needs children after the diagnosis of her son in 1962, and successfully lobbied the Oregon State Legislature to require public schools to guarantee educational rights to special-needs children in 1971.
In 1973, Roberts was elected to Parkrose (Ore.) School Board. She also served as Multnomah County Commissioner in 1978 and was a member of the Mt. Hood Community College Board. She served in the Oregon House of Representatives from 1981-1985, holding the position of majority leader from 1983-1984. She served as Oregon's secretary of state from 1985-1991, and served as governor from 1991-1995.
After her political career, Roberts became the director of the Harvard Program for Senior Executives in State and Local Government and later Portland State University's Hatfield School of Government's Executive Leadership Institute Associate Director of Leadership Development.
National Governors Association. (n.d.). Gov. Barbara Roberts. Retrieved on June 18, 2020, from https://www.nga.org/governor/barbara-roberts/.
The Oregon Encyclopedia. (n.d.). Barbara Kay Roberts (1936-). Retrieved on June 18, 2020 from https://oregonencyclopedia.org/articles/roberts_barbara/#.Xuugb2hKhPY.
Portland State University Commencement Address - June 16, 2007
Inaugural Address - Jan. 14, 1991


Big Buck Bunny tells the story of a giant rabbit with a heart bigger than himself. When one sunny day three rodents rudely harass him, something snaps… and the rabbit ain't no bunny anymore! In the typical cartoon tradition he prepares the nasty rodents a comical revenge.
Big Buck Bunny from Blender Foundation on Vimeo.
A short film about how the smartphone evolved – from some of the early pioneering handhelds to today's most innovative smartphones.
"Pixels", a short film by Patrick Jean and the Paris-based special effects company, One More Production, shows classic arcade characters such as Pac Man, Frogger and the aliens from Space Invaders attack New York City.
The Brooklyn Bridge is destroyed and buildings get slammed by Tetris bricks.
Castigatorul Logorama si La Dama y La Muerte le-am prezentat deja si probabil le-ati vazut. Acum a venit randul sa vedem si celelalte trei animatii nominalizate in categoria Best Short Film, Animated.
La final, mi-ar placea sa imi spuneti carei animatii i-ati fi oferit voi Oscarul. Eu am votat La Dama y La Muerte.
Animatia este nominalizata la Oscar in categoria Best Short Film, Animated.
La Dama y La Muerte (The Lady and The Reaper) prezinta povestea unei batrane care isi traieste ultimele clipe din viata asteptand moartea pentru a-si putea reintalni sotul. Tocmai cand dorinta este pe cale sa i se indeplineasca, femeia se trezeste pe patul de spital unde medicul si asistentele lupta sa o pastreze in viata.
Two guys meet at a bus stop. Unfortunately, they have just missed their bus, which is due only once a week, so they decide to wait for a week.


text:
Business, Patents, Startups
Navigating the Patenting Process: A Step-by-Step Guide for Entrepreneurs
Some legal processes are as simple as showing the proper documentation and filing a form, or even just clicking the appropriate boxes in an online form, and then you are officially employed, affiliated with a business, married, or otherwise legally connected to the entity with which you seek to form a legal relationship. Think about the ease, for example, of obtaining a tax ID number for a new business, a copyright for a written work, or even a marriage certificate. By contrast, lawsuits have a reputation for being emotionally draining. Is getting a patent for an invention easy or difficult? It depends. Much like filing taxes, it requires thorough preparation, and it gets much more complicated if you make mistakes, but with the help of a patent prosecution lawyer, you can maximize your chances of a successful application and avoid the pitfalls of unsound or improperly prepared patent applications.
Step One: Preparing to File Your Patent Application
The process of obtaining and using a patent is called "patent prosecution." Despite its name, the process does not usually involve lawsuits; here the term prosecution means "pursuit," as in seeking a patent. A strong patent application demonstrates not only what the invention is and why it is useful, but also what is original about it. To show what is original about your invention, you must also show what is not original about it. In other words, you must search for prior art. In patent law, "prior art" refers to previously published or unpublished descriptions of projects similar to yours. You must show how your work builds on and differs from previous research and inventions. A patent lawyer can help you to describe the originality and potential impact of your invention clearly and convincingly, but the more research you do even before your first meeting with the lawyer, the better.
Step Two: Filing Your Patent Application
A completed patent application includes a description of the invention, a unit of the invented item, and a set of statements (referred to as claims) about the practical applications of the invention. Working with your lawyer, you should file your application in a timely manner. Since 2009, United States law grant patents on a "first to file" basis. In other words, if two applicants try to patent very similar inventions at around the same time, the patent goes to the person whose application was received first. Even with excellent documentation, it is virtually impossible to determine who invented the item first.
Step Three: Office Action
The Patent Office reviews submitted applications and sends a report called the Office Action to the applicant. This report contains challenges to the applicant's claims about the invention's originality and usefulness. You may respond to the points in the Office action either by reasserting your claims with stronger supporting arguments or by modifying your application according to the reviewers' suggestions. Once the applicant and the Patent Office reach an agreement that the invention is ready to be patented, the patent is granted.
Contact the Rapacke Law Group About Patent Prosecution
Preparing a strong application the first time can help you secure a patent more quickly. Contact the Rapacke Law Group in South Florida for a free consultation.


And as always, we'd love to hear from as to which of the photos is your favorite. Tell us by clicking any of the share buttons below, and posting on your preferred social media channel. Until next month, we hope you have a great Thanksgiving, Tampa!


When do babies start walking on average?
One of the most exciting times for me in my son's first year was when he began to take his first steps. I can remember him now holding off for dear life as he made his way gingerly round out sofa, but at the same time, he was so happy with himself. A baby's first steps is a big milestone in their development, when the milestone happens is purely on the baby. My son was around about 10-11 months when he first started moving around the sofa and about 12-13 months before he was racing around everywhere.
He still bumps into stuff and becomes very unstable when he's tired at 16 months, but his balance is now at a point where he can fly around without assistance from a walker, me or my partner. One of the things we found with our son as he became really good and quick to pull himself up in the early stages of learning to walk, but then became really uncertain on how to sit back down again. We always made sure that we helped him back down just by holding his hand and supporting his bottom so he didn't go down too hard.
There would be several times where he would cry out for us to help him but we were advised not to pick him up and plonk him on his bottom but to show him how to bend his knees and sit back on the floor in a controlled fashion. Soon enough after a week or two, he was able to bend his knees and sit down without going down to hard on his bottom, again this is an achievement as well so we made sure we clapped and said well done.
When our son first started taking his first steps, we went out and purchased a little walker to help him balance himself and it kept his frustration under control because with the aid of the walker he was able to still get to places. There were a few times where he would try to take his hands off and try going solo but after a few steps he would come back to earth with a thud, this is part and parcel of their development I guess.
After our son's first birthday, we ended up having 2 walkers in our flat one ended up going to his nan's as he spends most of the week with his grandparents due to the fact my partner and I both work full time during the week, anyway one of the walkers he received as a birthday gift is really awesome. It's made by V-Tech and goes by the name of "VTech Push and Ride Alphabet Train".
We found that this was our son's favorite toy, not only does it act as a really cool walker it can help with learning too. The trailer detaches from it so this allows a toddler the ability to use it as a walker, or if you attach the trailer this will act as a seat. Our son now sits on it a scoots himself along. As I mentioned the VTech Baby Push and Ride Alphabet Train can help with learning, it comes with alphabet blocks and a book which is attached to the train, I recommend watching the youtube video to find out more.
I can honestly say this, along with his other walker was a real help to get him walking around. I would recommend getting a walker, it doesn't matter what type, but just a walker of some sort to grow their confidence. Once they start being independent and confident with walking there really is no stopping them. Our son now prefers to walk pretty much anywhere and now being almost 17 months old he's strolling around collecting his own toys he wishes to play with and it's his first early stage of some independence and also a sign that he's is not a little baby anymore.
This milestone is one I will never forget it brought a massive smile to my face, again I wasn't there to experience it but seeing the great joy it brought to my son's face will be engraved in my brain for the rest of my life. I've become a firm believer that you have to cherish all these amazing moments through your babies development making sure you embrace them and share the excitement they experience because they are learning something new.


Introducing a new site dedicated to all things related to the Fine and Applied Arts at Chowan!
Chowan University's School of Fine and Applied Arts offers excellent degree programs in Communication Arts, Integrative Studies, Music, and Theater. With top-notch faculty, rich curricular offerings, career fairs, and internships, transitioning into graduate studies or employment opportunities are the natural goals of the educational plan at Chowan.
The Department of Communication Arts includes programs of study which lead to a Minor in Drama, a B.A. or B.S. in Studio Arts, a Pre- Art Therapy Track within the Studio Arts curriculum, a B.S in Graphic Design, a B.S. in Graphic Communications with concentrations in Graphic Design or Business Management, Minors in Graphic Design and Studio Art and an Associate degree in Printing Production and Imaging Technology. Interactive Design, Print Technology, and Packaging Design are heavily embedded within the Graphic Communications program.
Chowan University's Department of Integrative Studies is uniquely designed to allow students the freedom to establish a specialized major that is directly devoted to a student's individual interests and needs when the interests, plans, or abilities overlap multiple academic departments.
Instruction in music theory, performance, music history, ensembles, keyboard, music technology and music education are educational programs that lead to the degrees of a B.A. in Music , B.S. in (K-12) Music Education, a B.A. in Music, Music Industry Emphasis or a Music Minor. The University is an accredited member of NASM. Additionally, the Music Education curriculum is accredited by NCATE and approved by NCDPI.


Check what's on and set up recordings with your voice.
While Vodafone has long abandoned its dreams of a TV service, rival network EE is pressing on with its strange Freeview-bundled-with-some-on-demand-apps box. The hardware now supports Alexa, Amazon's voice-enabled assistant, through an Echo or Echo Dot-equipped speaker. So you can ask, "Alexa, ask EE TV what's on tonight" and hear some suggestions from the Freeview-powered guide. The new Alexa "skill" also supports queries for specific channels and, more importantly, will let you set up recordings, regardless of whether the set-top box is on or in standby mode.
For EE, it's a neat trick. Amazon has long touted Alexa as a key part of its Fire TV and Fire TV stick, however those devices are for on-demand apps only. EE TV is designed to be a single solution for people who still like to tune in to live programming. Alexa, then, could be a valuable addition for people who are struggling to juggle both DVR recordings and VOD libraries. The problem, at least for now, is that the service requires an Echo speaker — with Amazon's Fire TV, you get a purpose-built remote in the box.
Amazon, of course, only cares about expanding the Alexa ecosystem. The company wants its voice-controlled assistant to be everywhere — smartphones, speakers, even washing machines. That proliferation will naturally expand the platform's user base and encourage third-party developers to create new "skills," which in turn will increase Alexa's functionality and encourage people to buy more Alexa-powered products. It's a smart strategy, and one that Google, Apple, Samsung and others have struggled to react to. The question, of course, is whether this will move EE TV units — probably not, but it's a nice gesture for Echo speaker owners.