text:
#include "platform_opts_bt.h"
#if UPPER_STACK_VERSION == VERSION_2019
#include <bt_flags.h>
#elif UPPER_STACK_VERSION == VERSION_2021
#include "upperstack_config.h"
#endif
#if F_BT_LE_GATT_CLIENT_SUPPORT
/** Add Includes here **/
#include <string.h>
#include <ancs_client.h>
#include <os_mem.h>
#include <trace_app.h>

/********************************************************************************************************
* local static variables defined here, only used in this source file.
********************************************************************************************************/
/**
 * @brief  ANCS Link control block defination.
 */
typedef struct {
	T_ANCS_DISC_STATE       disc_state;
	bool         write_notify_value;
	uint16_t     hdl_cache[HDL_ANCS_CACHE_LEN];
} T_ANCS_LINK, *P_ANCS_LINK;

/** @brief  ANCS link table */
static P_ANCS_LINK ancs_table;
static uint8_t ancs_link_num;

/**<  ANCS client ID. */
static T_CLIENT_ID ancs_client_id = CLIENT_PROFILE_GENERAL_ID;
/**<  Callback used to send data to app from ANCS client layer. */
static P_FUN_GENERAL_APP_CB ancs_client_cb = NULL;

uint8_t ANCS_UUID128_SRV[16] = {0xd0, 0x00, 0x2d, 0x12, 0x1e, 0x4b, 0x0f, 0xa4, 0x99, 0x4e, 0xce, 0xb5, 0x31, 0xf4, 0x05, 0x79};
const uint8_t ANCS_UUID128_CHAR_CONTROL_POINT[16] = {0xd9, 0xd9, 0xaa, 0xfd, 0xbd, 0x9b, 0x21, 0x98, 0xa8, 0x49, 0xe1, 0x45, 0xf3, 0xd8, 0xd1, 0x69};
const uint8_t ANCS_UUID128_CHAR_NOTIFICATION_SOURCE[16] = {0xBD, 0x1D, 0xA2, 0x99, 0xE6, 0x25, 0x58, 0x8C, 0xD9, 0x42, 0x01, 0x63, 0x0D, 0x12, 0xBF, 0x9F};
const uint8_t ANCS_UUID128_CHAR_DATA_SOURCE[16] = {0xFB, 0x7B, 0x7C, 0xCE, 0x6A, 0xB3, 0x44, 0xBE, 0xB5, 0x4B, 0xD6, 0x24, 0xE9, 0xC6, 0xEA, 0x22};

/**
  * @brief  Used by application, to start the discovery procedure of ANCS.
  * @param[in]  conn_id connection ID.
  * @retval true  send request to upper stack success.
  * @retval false  send request to upper stack failed.
  */
bool ancs_start_discovery(uint8_t conn_id)
{
	APP_PRINT_INFO0("ancs_start_discovery");
	if (conn_id >= ancs_link_num) {
		APP_PRINT_ERROR1("ancs_start_discovery: failed invalid conn_id %d", conn_id);
		return false;
	}
	/* First clear handle cache. */
	memset(ancs_table[conn_id].hdl_cache, 0, 2 * HDL_ANCS_CACHE_LEN);
	ancs_table[conn_id].disc_state = DISC_ANCS_START;
	if (client_by_uuid128_srv_discovery(conn_id, ancs_client_id,
										ANCS_UUID128_SRV) == GAP_CAUSE_SUCCESS) {
		return true;
	}
	return false;
}

/**
  * @brief  Used internal, start the discovery of ANCS characteristics.
  *         NOTE--user can offer this interface for application if required.
  * @param[in]  conn_id: connection ID.
  * @retval true send request to upper stack success.
  * @retval false send request to upper stack failed.
  */
static bool ancs_start_char_discovery(uint8_t conn_id)
{
	uint16_t start_handle;
	uint16_t end_handle;

	APP_PRINT_INFO0("ancs_start_char_discovery");
	start_handle = ancs_table[conn_id].hdl_cache[HDL_ANCS_SRV_START];
	end_handle = ancs_table[conn_id].hdl_cache[HDL_ANCS_SRV_END];
	if (client_all_char_discovery(conn_id, ancs_client_id, start_handle,
								  end_handle) == GAP_CAUSE_SUCCESS) {
		return true;
	}
	return false;
}

/**
  * @brief  Used by application, to set the notifcation flag of notification source.
  * @param[in]  conn_id connection ID.
  * @param[in]  notify  value to enable or disable notify.
  * @retval true send request to upper stack success.
  * @retval false send request to upper stack failed.
  */
bool ancs_set_notification_source_notify(uint8_t conn_id, bool notify)
{
	if (conn_id >= ancs_link_num) {
		APP_PRINT_ERROR1("ancs_set_notification_source_notify: failed invalid conn_id %d", conn_id);
		return false;
	}
	if (ancs_table[conn_id].hdl_cache[HDL_ANCS_NOTIFICATION_SOURCE_CCCD]) {
		uint16_t handle = ancs_table[conn_id].hdl_cache[HDL_ANCS_NOTIFICATION_SOURCE_CCCD];
		uint16_t length = sizeof(uint16_t);
		uint16_t cccd_bits = notify ? 1 : 0;
		if (client_attr_write(conn_id, ancs_client_id, GATT_WRITE_TYPE_REQ, handle,
							  length, (uint8_t *)&cccd_bits) == GAP_CAUSE_SUCCESS) {
			ancs_table[conn_id].write_notify_value = notify;
			return true;
		}
	}
	return false;
}

/**
  * @brief  Used by application, to set the notifcation flag of data source.
  * @param[in]  conn_id connection ID.
  * @param[in]  notify  value to enable or disable notify.
  * @retval true send request to upper stack success.
  * @retval false send request to upper stack failed.
  */
bool ancs_set_data_source_notify(uint8_t conn_id, bool notify)
{
	if (conn_id >= ancs_link_num) {
		APP_PRINT_ERROR1("ancs_set_data_source_notify: failed invalid conn_id %d", conn_id);
		return false;
	}
	if (ancs_table[conn_id].hdl_cache[HDL_ANCS_DATA_SOURCE_CCCD]) {
		uint16_t handle = ancs_table[conn_id].hdl_cache[HDL_ANCS_DATA_SOURCE_CCCD];
		uint16_t length = sizeof(uint16_t);
		uint16_t cccd_bits = notify ? 1 : 0;
		if (client_attr_write(conn_id, ancs_client_id, GATT_WRITE_TYPE_REQ, handle,
							  length, (uint8_t *)&cccd_bits) == GAP_CAUSE_SUCCESS) {
			ancs_table[conn_id].write_notify_value = notify;
			return true;
		}
	}
	return false;
}

/**
  * @brief  Used by application, to get the notifcation attribute.
  * @param[in]  conn_id           connection ID.
  * @param[in]  notification_uid  value to enable or disable notify.
  * @param[in]  p_attribute_ids   Pointer to attribute ids.
  * @param[in]  attribute_ids_len Length of attribute ids.
  * @retval true send request to upper stack success.
  * @retval false send request to upper stack failed.
  */
bool ancs_get_notification_attr(uint8_t conn_id, uint32_t notification_uid,
								uint8_t *p_attribute_ids, uint8_t attribute_ids_len)
{
	bool result = false;
	uint8_t command_id = CP_CMD_ID_GET_NOTIFICATION_ATTR;
	uint16_t length = sizeof(command_id) + sizeof(notification_uid) + attribute_ids_len;
	if (conn_id >= ancs_link_num) {
		APP_PRINT_ERROR1("ancs_get_notification_attr: failed invalid conn_id %d", conn_id);
		return false;
	}
	if (attribute_ids_len > 25) {
		return false;
	}
	if (ancs_table[conn_id].hdl_cache[HDL_ANCS_CONTROL_POINT]) {
		uint8_t buffer[30];
		uint16_t offset = 0;
		memcpy(buffer + offset, &command_id, sizeof(command_id));
		offset += sizeof(command_id);
		memcpy(buffer + offset, &notification_uid, sizeof(notification_uid));
		offset += sizeof(notification_uid);
		memcpy(buffer + offset, p_attribute_ids, attribute_ids_len);
		if (client_attr_write(conn_id, ancs_client_id, GATT_WRITE_TYPE_REQ,
							  ancs_table[conn_id].hdl_cache[HDL_ANCS_CONTROL_POINT],
							  length, buffer) == GAP_CAUSE_SUCCESS) {
			result = true;
		}
	}
	return result;
}

/**
  * @brief  Used by application, to get the app attribute.
  * @param[in]  conn_id           connection ID.
  * @param[in]  p_app_identifier  value to enable or disable notify.
  * @param[in]  p_attribute_ids   Pointer to attribute ids.
  * @param[in]  attribute_ids_len Length of attribute ids.
  * @retval true send request to upper stack success.
  * @retval false send request to upper stack failed.
  */
bool ancs_get_app_attr(uint8_t conn_id, char *p_app_identifier, uint8_t *p_attribute_ids,
					   uint8_t attribute_ids_len)
{
	bool result = false;
	uint8_t command_id = CP_CMD_ID_GET_APP_ATTR;
	uint16_t length = sizeof(command_id) + strlen((const char *)p_app_identifier) + attribute_ids_len +
					  1;
	uint8_t *p_buffer = NULL;
	if (conn_id >= ancs_link_num) {
		APP_PRINT_ERROR1("ancs_get_app_attr: failed invalid conn_id %d", conn_id);
		return false;
	}
	if (ancs_table[conn_id].hdl_cache[HDL_ANCS_CONTROL_POINT]) {
		uint16_t offset = 0;
		p_buffer = os_mem_zalloc(RAM_TYPE_DATA_ON, length);
		memcpy(p_buffer + offset, &command_id, sizeof(command_id));
		offset += sizeof(command_id);
		memcpy(p_buffer + offset, p_app_identifier, strlen((const char *)p_app_identifier));
		offset += strlen((const char *)p_app_identifier);
		p_buffer[offset] = 0;
		offset += 1;
		memcpy(p_buffer + offset, p_attribute_ids, attribute_ids_len);
		if (client_attr_write(conn_id, ancs_client_id, GATT_WRITE_TYPE_REQ,
							  ancs_table[conn_id].hdl_cache[HDL_ANCS_CONTROL_POINT],
							  length, p_buffer) == GAP_CAUSE_SUCCESS) {
			result = true;
		}
	}
	if (p_buffer != NULL) {
		os_mem_free(p_buffer);
	}

	return result;
}

/**
  * @brief  Used by application, to perfome the notication action.
  * @param[in]  conn_id          Connection ID.
  * @param[in]  notification_uid Notification UUID.
  * @param[in]  action_id        Action id.
  * @retval true send request to upper stack success.
  * @retval false send request to upper stack failed.
  */
bool ancs_perform_notification_action(uint8_t conn_id, uint32_t notification_uid, uint8_t action_id)
{
	bool result = false;
	uint8_t command_id = CP_CMD_ID_PERFORM_NOTIFICATION_ACTION;
	uint16_t length = sizeof(command_id) + sizeof(notification_uid) + sizeof(action_id);
	if (conn_id >= ancs_link_num) {
		APP_PRINT_ERROR1("ancs_perform_notification_action: failed invalid conn_id %d", conn_id);
		return false;
	}
	if (ancs_table[conn_id].hdl_cache[HDL_ANCS_CONTROL_POINT]) {
		uint8_t buffer[12];
		uint16_t offset = 0;
		memcpy(buffer + offset, &command_id, sizeof(command_id));
		offset += sizeof(command_id);
		memcpy(buffer + offset, &notification_uid, sizeof(notification_uid));
		offset += sizeof(notification_uid);
		memcpy(buffer + offset, &action_id, sizeof(action_id));
		if (client_attr_write(conn_id, ancs_client_id, GATT_WRITE_TYPE_REQ,
							  ancs_table[conn_id].hdl_cache[HDL_ANCS_CONTROL_POINT],
							  length, buffer) == GAP_CAUSE_SUCCESS) {
			result = true;
		}
	}
	return result;
}

/**
  * @brief  Called by profile client layer, when discover state of discovery procedure changed.
  * @param[in]  conn_id: connection ID.
  * @param[in]  discovery_state: current service discovery state.
  * @retval None
  */
static void ancs_client_discover_state_cb(uint8_t conn_id,  T_DISCOVERY_STATE discovery_state)
{
	bool cb_flag = false;
	T_ANCS_CB_DATA cb_data;
	cb_data.cb_type = ANCS_CLIENT_CB_TYPE_DISC_STATE;

	APP_PRINT_INFO1("ancs_client_discover_state_cb: discoveryState = %d", discovery_state);
	if (ancs_table[conn_id].disc_state == DISC_ANCS_START) {
		switch (discovery_state) {
		case DISC_STATE_SRV_DONE:
			/* Indicate that service handle found. Start discover characteristic. */
			if ((ancs_table[conn_id].hdl_cache[HDL_ANCS_SRV_START] != 0)
				|| (ancs_table[conn_id].hdl_cache[HDL_ANCS_SRV_END] != 0)) {
				if (ancs_start_char_discovery(conn_id) == false) {
					ancs_table[conn_id].disc_state = DISC_ANCS_FAILED;
					cb_flag = true;
				}
			}
			/* No ANCS handle found. Discover procedure complete. */
			else {
				ancs_table[conn_id].disc_state = DISC_ANCS_FAILED;
				cb_flag = true;
			}
			break;
		case DISC_STATE_CHAR_DONE:
			ancs_table[conn_id].disc_state = DISC_ANCS_DONE;
			cb_flag = true;
			break;

		case DISC_STATE_FAILED:
			ancs_table[conn_id].disc_state = DISC_ANCS_FAILED;
			cb_flag = true;
			break;
		default:
			APP_PRINT_ERROR0("Invalid Discovery State!");
			break;
		}
	}

	/* Send discover state to application if needed. */
	if (cb_flag && ancs_client_cb) {
		cb_data.cb_content.disc_state = ancs_table[conn_id].disc_state;
		(*ancs_client_cb)(ancs_client_id, conn_id, &cb_data);
	}
	return;
}

/**
  * @brief  Called by profile client layer, when discover result fetched.
  * @param[in]  conn_id: connection ID.
  * @param[in]  result_type: indicate which type of value discovered in service discovery procedure.
  * @param[in]  result_data: value discovered.
  * @retval None
  */
static void ancs_client_discover_result_cb(uint8_t conn_id,  T_DISCOVERY_RESULT_TYPE result_type,
		T_DISCOVERY_RESULT_DATA result_data)
{
	APP_PRINT_INFO1("gap_client_discover_result_cb: resultType = %d", result_type);
	if (ancs_table[conn_id].disc_state == DISC_ANCS_START) {
		switch (result_type) {
		case DISC_RESULT_SRV_DATA:
			ancs_table[conn_id].hdl_cache[HDL_ANCS_SRV_START] =
				result_data.p_srv_disc_data->att_handle;
			ancs_table[conn_id].hdl_cache[HDL_ANCS_SRV_END] =
				result_data.p_srv_disc_data->end_group_handle;
			break;
		case DISC_RESULT_CHAR_UUID128: {
			uint16_t handle;
			handle = result_data.p_char_uuid128_disc_data->value_handle;
			if (0 == memcmp(ANCS_UUID128_CHAR_CONTROL_POINT, result_data.p_char_uuid128_disc_data->uuid128, 16)) {
				ancs_table[conn_id].hdl_cache[HDL_ANCS_CONTROL_POINT] = handle;
			} else if (0 == memcmp(ANCS_UUID128_CHAR_NOTIFICATION_SOURCE,
								   result_data.p_char_uuid128_disc_data->uuid128, 16)) {
				ancs_table[conn_id].hdl_cache[HDL_ANCS_NOTIFICATION_SOURCE] = handle;
				ancs_table[conn_id].hdl_cache[HDL_ANCS_NOTIFICATION_SOURCE_CCCD] = handle + 1;
			} else if (0 == memcmp(ANCS_UUID128_CHAR_DATA_SOURCE, result_data.p_char_uuid128_disc_data->uuid128,
								   16)) {
				ancs_table[conn_id].hdl_cache[HDL_ANCS_DATA_SOURCE] = handle;
				ancs_table[conn_id].hdl_cache[HDL_ANCS_DATA_SOURCE_CCCD] = handle + 1;
			}
		}
		break;

		default:
			APP_PRINT_ERROR0("Invalid Discovery Result Type!");
			break;
		}
	}

	return;
}

/**
  * @brief  Called by profile client layer, when write result arrived.
  * @param[in]  conn_id: connection ID.
  * @param[in]  type: write type
  * @param[in]  handle: handle of the value in write request.
  * @param[in]  cause: the write result.
  * @param[in]  credits: write commands credit.
  * @retval void
  */
static void ancs_client_write_result_cb(uint8_t conn_id, T_GATT_WRITE_TYPE type,
										uint16_t handle,
										uint16_t cause,
										uint8_t credits)
{
	T_ANCS_CB_DATA cb_data;
	uint16_t *hdl_cache;
	hdl_cache = ancs_table[conn_id].hdl_cache;
	cb_data.cb_type = ANCS_CLIENT_CB_TYPE_WRITE_RESULT;

	APP_PRINT_INFO2("ancs_client_write_result_cb: handle=0x%x cause = 0x%x", handle, cause);
	cb_data.cb_content.write_result.cause = cause;

	if (handle == hdl_cache[HDL_ANCS_NOTIFICATION_SOURCE_CCCD]) {
		if (ancs_table[conn_id].write_notify_value == 0) {
			cb_data.cb_content.write_result.type = ANCS_WRITE_NOTIFICATION_SOURCE_NOTIFY_DISABLE;
		} else {
			cb_data.cb_content.write_result.type = ANCS_WRITE_NOTIFICATION_SOURCE_NOTIFY_ENABLE;
		}
	} else if (handle == hdl_cache[HDL_ANCS_DATA_SOURCE_CCCD]) {
		if (ancs_table[conn_id].write_notify_value == 0) {
			cb_data.cb_content.write_result.type = ANCS_WRITE_DATA_SOURCE_NOTIFY_DISABLE;
		} else {
			cb_data.cb_content.write_result.type = ANCS_WRITE_DATA_SOURCE_NOTIFY_ENABLE;
		}
	} else if (handle == hdl_cache[HDL_ANCS_CONTROL_POINT]) {
		cb_data.cb_content.write_result.type = ANCS_WRITE_CONTROL_POINT;
	} else {
		return;
	}

	if (ancs_client_cb) {
		(*ancs_client_cb)(ancs_client_id, conn_id, &cb_data);
	}
	return;
}
/**
  * @brief  Called by profile client layer, when notification or indication arrived.
  * @param[in]  conn_id: connection ID.
  * @param[in]  notify: Whether the data is notification
  * @param[in]  handle: handle of the value in received data.
  * @param[in]  value_size: size of the value in received data.
  * @param[in]  p_value: pointer to the value in received data.
  * @retval APP_RESULT_SUCCESS procedure OK.
  * @retval other procedure exception.
  */
static T_APP_RESULT ancs_client_notify_ind_cb(uint8_t conn_id, bool notify, uint16_t handle,
		uint16_t value_size, uint8_t *p_value)
{
	T_APP_RESULT app_result = APP_RESULT_SUCCESS;
	T_ANCS_CB_DATA cb_data;
	uint16_t *hdl_cache;

	hdl_cache = ancs_table[conn_id].hdl_cache;
	cb_data.cb_type = ANCS_CLIENT_CB_TYPE_NOTIF_IND_RESULT;

	if (handle == hdl_cache[HDL_ANCS_DATA_SOURCE]) {
		cb_data.cb_content.notify_data.type = ANCS_FROM_DATA_SOURCE;
		cb_data.cb_content.notify_data.value_size = value_size;
		cb_data.cb_content.notify_data.p_value = p_value;
	} else if (handle == hdl_cache[HDL_ANCS_NOTIFICATION_SOURCE]) {
		cb_data.cb_content.notify_data.type = ANCS_FROM_NOTIFICATION_SOURCE;
		cb_data.cb_content.notify_data.value_size = value_size;
		cb_data.cb_content.notify_data.p_value = p_value;
	} else {
		return APP_RESULT_SUCCESS;
	}

	if (ancs_client_cb) {
		app_result = (*ancs_client_cb)(ancs_client_id, conn_id, &cb_data);
	}

	return app_result;
}

/**
  * @brief  Called by profile client layer, when one LE link is disconnected.
  * @param[in]  conn_id: connection ID.
  * @retval void
  */
static void ancs_client_disc_cb(uint8_t conn_id)
{
	APP_PRINT_INFO0("gap_client_disc_cb.");
	memset(&ancs_table[conn_id], 0, sizeof(T_ANCS_LINK));
	if (ancs_client_cb) {
		T_ANCS_CB_DATA cb_data;
		cb_data.cb_type = ANCS_CLIENT_CB_TYPE_DISCONNECT_INFO;
		(*ancs_client_cb)(ancs_client_id, conn_id, &cb_data);
	}
	return;
}
/**
 * @brief ANCS Client Callbacks.
*/
const T_FUN_CLIENT_CBS ancs_cbs = {
	ancs_client_discover_state_cb,   //!< Discovery State callback function pointer
	ancs_client_discover_result_cb,  //!< Discovery result callback function pointer
	NULL,      //!< Read response callback function pointer
	ancs_client_write_result_cb,     //!< Write result callback function pointer
	ancs_client_notify_ind_cb,  //!< Notify Indicate callback function pointer
	ancs_client_disc_cb       //!< Link disconnection callback function pointer
};

/**
 * @brief       Add ancs client.
 *
 * @param[in]   app_cb  Callbackto notify client read/write/notify/indicate events.
 * @param[in]   link_num Initialize link number
 * @return Client ID of the specific client module.
 * @retval 0xff failed.
 * @retval other success.
 *
 * <b>Example usage</b>
 * \code{.c}
    void ancs_init(uint8_t link_num)
    {
        ancs_client = ancs_add_client(ancs_client_cb, link_num);
    }
 * \endcode
 */
T_CLIENT_ID ancs_add_client(P_FUN_GENERAL_APP_CB app_cb, uint8_t link_num)
{
	uint16_t size;
	if (link_num > ANCS_MAX_LINKS) {
		APP_PRINT_ERROR1("ancs_add_client: invalid link_num %d", link_num);
		return 0xff;
	}
	if (false == client_register_spec_client_cb(&ancs_client_id, &ancs_cbs)) {
		ancs_client_id = CLIENT_PROFILE_GENERAL_ID;
		APP_PRINT_ERROR0("ancs_add_client Fail !!!");
		return ancs_client_id;
	}
	APP_PRINT_INFO1("ancs_add_client: client ID = %d", ancs_client_id);

	/* register callback for profile to inform application that some events happened. */
	ancs_client_cb = app_cb;
	ancs_link_num = link_num;
	size = ancs_link_num * sizeof(T_ANCS_LINK);
	ancs_table = os_mem_zalloc(RAM_TYPE_DATA_ON, size);

	return ancs_client_id;
}

void ancs_delete_client(void)
{
	if (ancs_table != NULL) {
		os_mem_free(ancs_table);
		ancs_table = NULL;
	}
}
#endif


text:
Future Ammonia Technologies: Plasmas, Membranes, Redox
I wrote recently about two pathways for ammonia production technology development: improvements on Haber-Bosch, or electrochemical synthesis.
Last week, I covered some of these Haber-Bosch improvements; next week, I'll write about electrochemical processes. This week, I want to write about some innovations that don't fit this two-way categorization: they don't use electrochemistry and they don't build upon the Haber-Bosch process, and that might be the only thing that links them.
These beautiful misfits, which presented their results at the recent NH3 Energy+ Conference, produce sustainable ammonia using non-thermal plasmas, dense metallic membranes, or solar thermochemical redox cycles.
The two-way categorization was put forward by Grigorii Soloveichik, Program Director at the US Department of Energy's ARPA-E, in his presentation at the NH3 Energy+ conference, and it is a useful simplification – but Soloveichik is well aware that some promising innovations don't fit into either category. One of the projects he oversees, through the REFUEL program, is West Virginia University's (WVU) research into Microwave-Plasma Catalytic Synthesis of Ammonia.
WVU's technology is "a process to convert renewable electricity, water, and air into ammonia using plasma excitation at low temperatures and pressures." While the WVU team did not present at the recent conference, their ARPA-E project description might help to explain what makes plasma technologies unique and promising:
This process is different from both electrochemical conversion processes and catalytic processes like the HB process. In this form of physical activation, the microwave-plasma process can activate nitrogen and hydrogen, generating ions and free radicals that react over the catalyst surface to form ammonia. Under the correct conditions, microwave heating can selectively heat the catalyst to the temperature required for reactions without heating the surrounding area. This combination of a very hot catalyst and cool surroundings leads to overall lower reaction temperatures and improved energy efficiency. The lower pressure required for the process will also simplify the design. Both features enable better integration with renewable energy sources because the system can be turned on and off more quickly.
US Department of Energy, ARPA-E "REFUEL" project: West Virginia University, Renewable Energy to Fuels Through Microwave-Plasma Catalytic Synthesis of Ammonia, December 2016
UNIVERSITY OF MINNESOTA: Atmospheric-Pressure Synthesis of Ammonia Using Non-Thermal Plasma
The University of Minnesota is also developing a plasma technology for ammonia synthesis, and this team did present at the conference: Atmospheric-Pressure Synthesis of Ammonia Using Non-Thermal Plasma. While the different efforts at the University of Minnesota are clearly coordinated, this is not the team using absorption technology to improve Haber-Bosch, but they are all part of the unique and globally significant collection of research efforts into sustainable ammonia synthesis at the University of Minnesota.
Like the absorption-reaction process, the NTP plasma process has the potential to run at lower temperature and lower pressure, making it possible to operate efficiently at smaller scales, to match renewable power sources like wind or solar farms.
Click to enlarge: NTP for ammonia synthesis. Peng et al, Atmospheric-Pressure Synthesis of Ammonia Using Non-Thermal Plasma with the Assistance of Ru-Based Multifunctional Catalyst, November 2017
While WVU uses a microwave plasma, which is one kind of non-thermal plasma, the University of Minnesota is using a dielectric barrier discharge (DBD) plasma. They explain the plasma as "Electrically energized matter in a gaseous state, [including] energetic electrons, ions, atoms and molecules, highly reactive radicals, and quanta of electromagnetic radiation (photons)."
It is important to note the technical limits of alternative technologies like this, because it often challenges accepted wisdom. The Haber-Bosch process is mature and, in modern plants, runs almost at its technical limit: no significant further improvements in energy efficiency are possible with Haber-Bosch. This new plasma technology, by contrast, offers significant potential energy savings: "NTP N-fixation has a theoretical efficiency floor of 0.2 MJ/mol, which is more efficient than the HB method of 0.48 MJ/mol."
The non-thermal plasma (NTP) allows for the synthesis of ammonia at a lower temperature and pressure conditions … the highest ammonia synthesis efficiency achieved was 1.7 g/kWh at 5000V and 26,000 Hz. Results were analyzed in the context of several synergetic effects including the plasma forming mechanism, discharge effects of the catalysts, plasma shielding effects of the mesoporous structure, and other plasma-catalyst interactions. Lastly, a new concept of a two-step dielectric discharge plasma ammonia synthesis method was also proposed, which separates the plasma ionization from the catalytic synthesis and has the potential of improving the NH3 synthesis efficiency.
Peng et al, Atmospheric-Pressure Synthesis of Ammonia Using Non-Thermal Plasma with the Assistance of Ru-Based Multifunctional Catalyst, November 2017
COLORADO SCHOOL OF MINES: Dense Metallic Membrane Reactor Synthesis of Ammonia at Moderate Conditions and Low Cost
Research at Colorado School of Mines (CSM) is also supported by ARPA-E, not through REFUEL but through the program called IDEAS (Innovative Development in Energy-related Applied Science). The CSM project, Low Cost Membrane Reactor Synthesis of Ammonia at Moderate Conditions, makes a simple but significant change to the well-known Haber-Bosch chemical equation:
N2 + 3H2 → 2NH3
N2 + 6H → 2NH3
In traditional ammonia production processes, nitrogen (N2) and hydrogen (H2) compete for identical catalyst sites, and the presence of each inhibits the other, with the overall rate reflecting a compromise. The team proposes decoupling and independently controlling the N2 and H2 dissociation by dedicating one side of the composite membrane to each. In this way, the catalysts may be individually optimized. Highly effective catalysts have been previously demonstrated for H2 dissociation, and the team's focus will be on exploring early transition metals which have shown great promise as catalysts for N2 dissociation.
US Department of Energy, ARPA-E "REFUEL" project: Colorado School of Mines, Low Cost Membrane Reactor Synthesis of Ammonia at Moderate Conditions
Click to enlarge. Fuerst et al, Dense Metallic Membrane Reactor Synthesis of Ammonia at Moderate Conditions and Low Cost, November 2017
As one of the research leaders explained, "Usually, the membrane is used to remove a product from the reactor, pushing the chemical equilibrium towards products. In our case, we're using the membrane to provide one of the reactors to the reactor, specifically atomic hydrogen."
On one side of the membrane, molecular hydrogen (H2) is produced by a reaction like electrolysis or steam methane reformation. On the other side of the membrane, atomic hydrogen (H) feeds the ammonia synthesis reaction. A "process intensification" approach, this technology works by "combining several chemical processing steps into one reactor."
A new concept for ammonia synthesis has been developed using a hydrogen permeable membrane made from cost effective group V metals. This base metal membrane is coupled with asymmetric catalyst coatings to allow hydrogen permeation and nitrogen dissociation on respective membrane surfaces. The combination of the modified nitrogen dissociation surface catalyst and the highly reactive permeating hydrogen allows ammonia to be formed at low pressures and moderate temperatures. Using this concept, we have measured NH3 synthesis rates as high as 6 × 10-9 mol cm-2 s-1 in preliminary experiments at 500 °C and 0.8 bar.
Fuerst et al, Dense Metallic Membrane Reactor Synthesis of Ammonia at Moderate Conditions and Low Cost, November 2017
KANSAS STATE UNIVERSITY: Nitride-Based Step Catalysis for Ammonia Synthesis at Atmospheric Pressure
At Kansas State, the research team led by Peter Pfromm is working on a step-wise process for ammonia synthesis, using a redox (reduction-oxidation) cycle, and has made significant progress since I first wrote about them at the start of this year.
Unlike a catalytic process like Haber-Bosch, where a catalyst promotes one reaction without being chemically altered, the redox process is a repeating loop of three chemical reactions. A metal, in this case manganese, reacts with nitrogen to form a metal nitride, which then reacts with water to form a metal oxide (and release product ammonia), which then reduces to the metal – and the loop begins again.
Formation of metal nitrides to activate dinitrogen is one avenue to ammonia and other nitrogen compounds. Attractive aspects are operation at atmospheric pressure and moderate temperatures, formation of stable chemical intermediates rather than reliance on somewhat sensitive heterogeneous catalysis, and inexpensive materials.
Heidlage et al, Nitride-Based Step Catalysis for Ammonia Synthesis at Atmospheric Pressure, November 2017
Their goal is to develop a "Versatile, Small Scale Solar NH3 Synthesis" technology, using high-temperature concentrated solar power (CSP), between 600 and 1,000 °C, in a scalable, modular reactor that would enable ammonia production "near the end user … perhaps by a single farmer."
Click to enlarge. Heidlage et al, Nitride-Based Step Catalysis for Ammonia Synthesis at Atmospheric Pressure, November 2017
While the CSM membrane technology avoids the nitrogen-hydrogen inhibition at the catalyst by using a two-step reaction (feeding the ammonia reaction with atomic hydrogen), the redox cycle uses a three step cycle. Interestingly, the Pfromm team has also developed a system fed by natural gas (CH4), to co-produce ammonia as well as syngas (carbon monoxide and hydrogen), as well as a system based on a renewable hydrogen input.
UNIVERSITY OF COLORADO, BOULDER: Screening Binary Redox Pairs for Solar Thermochemical Ammonia Synthesis Using Machine Learned Predictions of Gibbs Formation Energies at Finite Temperatures
The Kansas State University technology uses manganese as its metal, cycling between manganese nitride and manganese oxide, but at the University of Colorado, Boulder, researchers are endeavoring to identify the optimal metal to use in a similar redox reaction.
Solar thermochemical ammonia synthesis (STAS) is a reduction/oxidation (redox) cycle which enables the production of ammonia (NH3) from air, water, and concentrated sunlight. In this process, a metal nitride (MN) is oxidized by steam to produce a metal oxide (MO) and NH3; the resulting MO is reduced at high temperature (driven by concentrated solar radiation) and subsequently used to reduce atmospheric nitrogen (N2) and reform the MN and restart the NH3 synthesis cycle.
Bartel et al, Screening Binary Redox Pairs for Solar Thermochemical Ammonia Synthesis Using Machine Learned Predictions of Gibbs Formation Energies at Finite Temperatures, November 2017
Click to enlarge. Bartel et al, Screening Binary Redox Pairs for Solar Thermochemical Ammonia Synthesis , November 2017
They use machine learning to address the "lack of thermochemical data (i.e., Gibbs formation energies at finite temperatures)" so far established for potential redox pairs, "especially nitrides." So far, they have "screened the reaction energetics and thermodynamic stability of all known binary (i.e., monometallic) MN/MO pairs, increasing the number of redox pairs considered for this process by an order of magnitude."
For the skeptics, who believe today's Haber-Bosch is the best ammonia technology mankind can muster, I would politely remind you of the process to identify the viable catalyst in today's mature technology, essentially unchanged in 100 years.
Alwin Mittasch, an assistant to Carl Bosch, began the intense, years-long research drive for an optimal catalyst for Fritz Haber's new ammonia synthesis process in 1909. Over the course of a just few years, he oversaw about 20,000 individual tests and iterations, systematically moving from osmium to uranium and finally to iron, which is essentially what we still use (only decades later did KBR introduce ruthenium).
I imagine Mittasch would have been very glad to have had machine learning tools at his disposal, and I look forward to discovering how far these ammonia synthesis technologies can develop over the next few years.
Sustainable Ammonia
Solar Ammonia
Solar Thermochemical
Future Ammonia Technologies: Electrochemical (part 1)
Bankruptcy for TCEP ends plans for "clean coal" ammonia in US

redpajama_set_name: RedPajamaCommonCrawl


text:
El Club Deportivo Naval fue un club de fútbol de la ciudad de Cartagena, en España. En sus últimos años de existencia cambió su nombre a Cartagena Fútbol Club "B" al ser filial del primer equipo de la ciudad en esos años.

Fue fundado en 1943 como Club Deportivo del Consejo Regulador de las Construcciones Navales, y desapareció en el año 2002.

La máxima categoría que alcanzó el club fue la Tercera División, donde disputó un total de 16 temporadas, aunque su mayor logró fue lograr el Campeonato de España de Aficionados en 1985.

Historia

El Club Deportivo Naval nace en 1943 con el objetivo inicial de representar al astillero de Cartagena en los Campeonatos de España de empresas, no en vano su primer nombre fue Club Deportivo del Consejo Regulador de las Construcciones Navales. El club cartagenero despuntó en estos torneos en sus primeros años y se hizo con el título en 1945 tras golear 5-0 al Altos Hornos de Sagunto en el antiguo campo de Vallecas. Desde 1946 ya tenía campo propio, el Campo de Los Juncos, y el Consejo Regulador de Construcciones Navales decidió inscribir al equipo en Regional en 1947 y cambió su nombre a Club Deportivo Naval. El estreno en competición oficial fue todo un éxito y el Naval se proclamó campeón de Regional, logrando el ascendo a Tercera División.

El debut en Tercera División fue el 12 de septiembre de 1948 ante el SD Sueca en un partido que acabó sin goles, y la primera victoria llegó en la tercera jornada ante el CD Acero por 2-0. El Naval se enfrentó en esta temporada al entonces llamado Cartagena CF, el equipo más potente de la ciudad, deparando una victoria para cada equipo. La temporada terminó con una meritoria sexta posición en un grupo donde había equipos como Albacete Balompié, Elche CF, CD Eldense o el citado Cartagena CF. En esta misma temporada disputó su único partido de la Copa del Rey, por entonces Copa del Generalísimo, y en el que perdió por 0-4 ante el Cartagena CF.

La temporada siguiente, la 49-50, fue la mejor del club logrando un histórico tercer puesto y quedando a cinco puntos de jugar la Fase de Ascenso a Segunda División. En la temporada 50-51 terminó en séptima posición.

En la temporada 51-52 empieza el primer declive del club, el Naval termina penúltimo pero no desciende porque esa temporada no hubo descensos, y en la siguiente temporada 52-53 vuelve a ser penúltimo y tampoco descendió. Tras la temporada 53-54 el club renuncia a su plaza de Tercera División a pesar de ser decimoquinto sobre dieciocho equipos, y tras tres años en Regional el Naval volvió a descender y dejó de competir. El club buscaba otra orientación deportiva más económica y decidió dedicarse a las categorías infantiles y juveniles, convirtiéndose de esta forma en un club de fútbol base durante muchos años.

No fue hasta 1978 cuando el Naval volvió a inscribirse en categoría Regional, para ser exactos Segunda Regional, gracias al convenio de filiaridad con el Cartagena FC. Cinco años después se logró de nuevo el ascenso a Tercera División en su grupo XIII exclusivamente con equipos de la Región de Murcia y provincias limítrofes. El Naval quedó noveno en su regreso a Tercera División y dio la sorpresa al llevarse Campeonato de España de Aficionados de 1985, y partir de ahí las siguientes temporadas fueron más discretas en cuanto a clasificación. En la temporada 90-91 el Naval queda penúltimo y desciende a Regional.

En regional se cambió el nombre a Cartagena FC "B" y se volvió a ascender por última vez a Tercera División ese mismo año. Tras una meritoria octava posición en la temporada 92-93, el club termminó descendiendo en 1995 a Regional. Tras varios años en el olvido el club terminó por desaparecer en el año 2002.

Campeón de España de Aficionados

El mayor logro del Club Deportivo Naval fue sin duda el Campeonato de España de Aficionados de 1985. El primer equipo, el Cartagena FC ya logró el trofeo en 1978 pero que lo hiciera el Naval fue algo histórico.

Tras quedar campeón regional se enfrentó en primera ronda al CD 501 de Melilla debutando con un contundente 14-1 en el Campo de Los Juncos, suficiente margen para el partido de vuelta que perdió por 4-3. En octavos de final el rival fue el Sporting Mahonés con resultado de 2-0 en Cartagena y otro contundente 1-4 en Mahón. Tocaba cuartos de final y viaje largo para enfrentarse al Artesano de Las Palmas de Gran Canaria; el empate a dos goles en casa dejaba dudas pero el Naval ganó en Canarias 2-3.

El Naval estaba en semifinales y el rival el Sestao SC, empate sin goles en tierras vascas y victoria en casa por 3-2 dieron el pase a la gran final ante el Oviedo Aficionados. Los asturianos se impusieron 3-1 en el partido de ida y parecía muy difícil la gesta, que finalmente se logró con una goleada por 4-1 en un día muy caluroso que influyó en los jugadores visitantes.

El Naval Cartagena y el proyecto EF Ciudad Jardín

En 2013 se fundó el CD Naval Cartagena pero no llegó a cuajar el proyecto. En 2016 nace un nuevo Club Deportivo Naval al amparo del EF Ciudad Jardín, a su vez vivero de bases del FC Cartagena. De momento el club tiene cuatro equipos en categorías inferiores: cadete, infantil, alevín y benjamín.

Palmarés

Torneos Nacionales

 Campeonato de España de Aficionados (1): 1985.

Ascensos a Tercera División

 4 Ascensos a Tercera División (4):  1948; 1984 y 1992.

Torneos amistosos

 Campeonatos de España de empresas (1): 1945.

Presencia Nacional

 Temporadas en Tercera : 16 temporadas.

 Participaciones en Copa del Rey : 1 temporada.

Referencias

Equipos de fútbol de la Región de Murcia
Historia contemporánea de Cartagena
Fútbol en Cartagena
Equipos de fútbol desaparecidos en 2002
Equipos de fútbol desaparecidos de la Región de Murcia

redpajama_set_name: RedPajamaWikipedia


NDT Specialists, Inc. works to many commercial inspection standards including, ASME, AWS, API, AWWA, ASTM to name a few. We also work to many customer specific specifications. We have an extensive library of specifications and would be very capable of accommodating your needs.


text:
Q: Server instances, jest and 'listen EADDRINUSE :::3000' Am new to jest, node and express, and am having a problem with testing my app.
The actual code seems to be working - it's just when passing the server instance to each of the test files (user.test.js and genres.test.js) and running jest, the port is being blocked. I assume it's because I'm creating duplicate instances of the server in each test file, without realising it.
Running jest with the flag --runInBand works, and so does only using one test file, but this doesn't help me understand exactly what's going on.
I've posted example code below, but I'm struggling to cut it down, however I do think most of the code is irrelevant, and it's just down to how I'm passing the server to each file.
Again, apologies for the length, but I think it should be very basic for anyone but me! Thanks.

index.js (.)
const express = require('express');
const app = express();
const genres = require('./routes/genres');
const users = require('./routes/users');
app.use(express.json());
app.use('/api/genres', genres);
app.use('/api/users', users);

const port = process.env.PORT || 3000;

const server = app.listen(port, () => console.log(`Listening on port ${port}...`));
console.log(typeof server);
// export server to be used in test file
module.exports = server;

genres.js (./routes)
const express = require('express');
const router = express.Router();

router.post('/', async (req, res) => {
    res.send('post genre ok');
});

module.exports = router;

users.js (./routes)
const express = require('express');
const router = express.Router();

router.post('/', async (req, res) => {
    res.send('post user ok');
});

module.exports = router;

genres.test.js (./tests)
const request = require('supertest');

let server;

describe('auth tests', () => {

    const exec = async function(){
        return await request(server)
            .post('/api/genres');
    };

    beforeEach(() => {
        server = require('../index');
    });
    afterEach(async () => {
        await server.close();
    });

    describe('POST /', () => {
        it('should return 200', async () => {
            const res = await request(server).post('/api/genres');
            expect(res.status).toBe(200);
        });
    });
});

user.test.js (./tests)
const request = require('supertest');

let server;

describe('user tests', () => {

    const exec = async function(){
        return await request(server)
            .post('/api/user');
    };

    beforeEach(() => {
        server = require('../index');
    });
    afterEach(async () => {
        await server.close();
    });

    describe('POST /', () => {
        it('should return 200', async () => {
            const res = await request(server).post('/api/users');
            expect(res.status).toBe(200);
        });
    });
});

A: Hopefully this (point 2) helps others with this question
It has worked for me, by splitting the app from the server. I'm not sure if this is the right approach, and I'm not 100% sure why it works with the app rather than the server, but all my tests are now passing.
index.js is now app.js:
const express = require('express');
const app = express();
const genres = require('./routes/genres');
const users = require('./routes/users');
app.use(express.json());
app.use('/api/genres', genres);
app.use('/api/users', users);

// export server to be used in test file
module.exports = app;

The server is separated into another file:
const app = require('./app');

const port = process.env.PORT || 3000;

app.listen(port, () => console.log(`Listening on port ${port}...`));

and then the test files import the app rather than the server. therefore each test doesn't create its own instance.
NB: I think - I don't really know how correct this is, but as mentioned, it works

redpajama_set_name: RedPajamaStackExchange


09/16/2018 HELL, What Is It?
06/11/2017 Satan's Representatives in the U.S.
12/11/2016 Why Are We Here?
11/27/2016 Who is Your God? & Who is Your Savior?
10/23/2016 Who are Citizens of the United States?
06/26/2016 Is it Merely Enough to be an Israelite?
05/15/2016 Where is Your Money?
12/20/2015 HELL, What Is It?
10/11/2015 Is Divine Healing in the Atonement?
01/25/2015 Who Is your God? Who is your Savior?
01/18/2015 Why do we have an Adversary?
01/11/2015 Satan's Representatives In The U.S.A.
09/28/2014 What Happened to Cain?
09/21/2014 Who are Citizens of the United States?
05/25/2014 To Whom Should We Pray?
02/16/2014 What Is The Gospel?
01/26/2014 Who are "The Church"?
Herald of Truth Radio Broadcasts are part of the national and international outreach of Kingdom Identity Ministries. Other phases of this ministry include the distribution and publication of books, tracts, tapes, and other educational material of a lasting nature; a Bible correspondence course; a prison ministry; sponsorship of special meetings; and ministering to a variety of spiritual and material needs of the Saints. Radio time is expensive, this, along with the many books sent free of charge to prisoners, postage, printing, advertising, books, tapes, equipment and other operating costs places a heavy financial burden on this ministry. It is the faithful support and prayers of believers like you who make this all possible. Your tithes and offerings are always appreciated and are used 100% toward furthering the Gospel of the Kingdom. Please keep this ministry in your prayers. Thank you for loving our God, the truth of His Word, and helping to awaken His people.


Can you FaceTime on a iPhone 4S without wifi?
Reset iPhone without Apple ID Yes of course, if you have an iPad, you can still use FaceTime between iPhone and iPad. Usually if you are using an iPhone, it'll automatically register your phone number and you can use your phone number to facetime with others. Also you can use Apple ID(E-mail address) as a way to facetime with others. Go to Settings>FaceTime and select Use your Apple ID... How to Make a Facetime Call on iPhone 5 One important thing to be aware of before you make a Facetime call is that it can use a lot of data if you are not connected to a WiFi network. So either make sure that you are connected to a WiFi network, or understand that you are going to eat through a significant amount of your phone plan's data allowance by making this call.
Will AT&T's iPhone for ever be able to use facetime without wifi Answer: To use FaceTime without a WiFi you will have to subscribe to AT&T internet tethering service, which... how to take restrictions off mac without password 9/05/2013 · Hi I would like to know if you can FaceTime without wifi on a iPhone 4S. I know some carriers don't allow it but I have sprint so i don't know if I can.
How To: Use FaceTime without WiFi (sort of) Posted by Dr. Macenstein on Monday, June 28, 2010 · 1 Comment The braniacs over at DeviceKnit Blog have come up with a pretty clever work around for using FaceTime on the road when you're away from WiFi. how to take weed without smoking 9/07/2011 · To use FaceTime on the iPad, you must find a way to access the Internet using WiFi. One way is a MiFi WiFi hotspot, also available from Verizon. There is a battery powered version, although it may not be from Verizon. Since you already have the account, Verizon may give you a price break. It doesn't hurt to ask.
IPhone facetime without wifi in AT&T by jailbreaking?
9/07/2011 · To use FaceTime on the iPad, you must find a way to access the Internet using WiFi. One way is a MiFi WiFi hotspot, also available from Verizon. There is a battery powered version, although it may not be from Verizon. Since you already have the account, Verizon may give you a price break. It doesn't hurt to ask.
Some of the enhancements of iOS 12, like Group FaceTime and using Animoji or Memoji, also increase the amount of internet bandwidth your iPhone or device needs. If Facetime can't send and receive data fast enough to keep up with your device's demand, the video lags, is choppy and shows other symptoms of a poor connection.
Hi I would like to know if you can FaceTime without wifi on a iPhone 4S. I know some carriers don't allow it but I have sprint so i don't know if I can. Thank you. I know some carriers don't allow it but I have sprint so i don't know if I can.


A picture perfect cabin-in-the-woods, the rustic décor in this cabin showcases that it is spacious yet welcoming and comforting. The separate bedroom includes a queen size log bed. The sofa in the living area faces the gas log fireplace. Enjoy the hummingbirds and other wildlife from your covered deck, which includes a hot tub and gas grill.


text:
Home :: Intelligence :: Library :: News :: 2020 ::
May 2020 Intelligence News
India expels two Pakistani officials for alleged espionage Press TV 31 May 2020 -- India has declared two officials of the Pakistan High Commission in the capital New Delhi as persona non grata for "espionage activities", ordering their expulsion amid deepening tensions between the two nuclear-armed neighbors.
Two Pakistani Officials Detained in India Over Espionage-Related Activities Sputnik 31 May 2020 -- Authorities in India have declared two officials personae non grata for what they described as activities incompatible with their status as members of a diplomatic mission and asked them to leave the country within 24 hours.
On US College Campuses, Student Groups Call for Closure of Beijing-Funded Confucius Institutes VOA 31 May 2020 -- Two of the largest U.S. college campus political organizations are calling for the closure of all Confucius Institutes in the United States, saying the Beijing-funded outposts are part of the Chinese Communist Party's attempt to control discourse on China at American universities.
Mossad Chief Cohen Flew To Egypt for Secret Talks, Report Says Sputnik 30 May 2020 -- Egypt became the first Arab country to establish relations with Israel in 1979, with the two countries engaging in security cooperation in Sinai, and Cairo occasionally helping to mediate between the Israel and the Palestinians.
Busted? Pakistan Reportedly Trying to Spy on India's Defence in Ladakh Via Internet Calls Sputnik 30 May 2020 -- India's Ladakh region has recently witnessed tension, along the 4,000 km long Line of Actual Control India shares with China. Earlier this month, China deployed several troops and heavy vehicles to "reclaim authority" over eastern Ladakh's Galwan Valley - which escalated border related disputes between the two nations.
U.S. Republican Senators Release Transcripts Of Flynn's Calls With Russian Diplomat RFE/RL 30 May 2020 -- Transcripts of phone calls that were pivotal to the U.S. investigation of Russia's 2016 election interference have been declassified and released by Republican senators.
After 3-Plus Years of Wrangling, Transcripts at Heart of Flynn Controversy See Sunlight Senator Grassley 29 May 2020 -- Transcripts of Lt. General Michael Flynn's December 2016 conversations with the Russian ambassador were released today following more than three years of bipartisan requests from Congress and overtures from Flynn's own legal team. Though the transcripts are at the heart of former special counsel Robert Mueller's charges that Flynn had lied to the FBI, they were never made available to his legal team despite repeated requests to evaluate the claim against him.
US Intelligence Chief Releases Flynn-Kislyak Transcript Sputnik 29 May 2020 -- Director of National Intelligence John Ratcliffe said in a statement that he has released the transcript of the December 2016 call between former National Security Advisor Michael Flynn and then-Russian Ambassador to the United States Sergey Kislyak.
DNI Ratcliffe Statement on Declassification of Transcripts Director of National Intelligence 29 May 2020 -- "As the Director of National Intelligence, it is my obligation to review declassification requests with the overarching priority of protecting sources and methods, while also providing transparency whenever possible. Accordingly, today the Office of the Director of National Intelligence declassified transcripts concerning Lt. Gen. Michael Flynn."
US Democrats in House of Representatives Pull Vote on Surveillance Bill Extension Sputnik 28 May 2020 -- Leading Democrats in the US House of Representatives have pulled a vote to reauthorize three surveillance programs, which the Federal Bureau of Investigation views as a vital tool in defending against terrorism, after President Donald Trump urged lawmakers to oppose the bill.
House Democrats Withdraw Controversial Surveillance Authorization Bill VOA 28 May 2020 -- U.S. House Democrats cancelled a scheduled vote on a controversial set of surveillance authorization measures Thursday, citing the threat of a presidential veto looming over their efforts to pass the Foreign Intelligence Surveillance Act (FISA).
Statement by Director of National Intelligence John Ratcliffe Director of National Intelligence 26 May 2020 -- Director of National Intelligence John Ratcliffe today issued the following statement after taking the oath of office to serve as the sixth DNI in our nation's history
Trump Loyalist Sworn in as US Director of National Intelligence VOA 26 May 2020 -- More than nine months after U.S. President Donald Trump first floated his name, John Ratcliffe is taking charge of the country's intelligence operations, promising to live up to the U.S. intelligence community mantra of speaking truth to power, despite his reputation as a Trump loyalist.
Pompeo Blasted by Rep. Eliot Engel for 'Thoughtless' Threat to Cut off Australia From Intel Sharing Sputnik 26 May 2020 -- The US embassy in Australia sought to downplay the statement the top US diplomat made over the weekend, saying Washington had "absolute confidence" in Canberra's ability to protect the security of its telecommunications networks and those of its intelligence partners.
Russian Prosecutor Seeks Lengthy Prison Term For American On Spying Charges RFE/RL 25 May 2020 -- Russian prosecutors have asked a Moscow court to find former Marine Paul Whelan guilty of espionage -- a charge Whelan and U.S. officials vehemently deny -- and sentence him to 18 years in prison.
Grenell: Public Misled 'Too Long', Vows to Declassify More Flynn Documents Sputnik 24 May 2020 -- Acting director of national intelligence Richard Grenell has announced he's working to declassify transcripts of phone calls between former national security adviser Michael Flynn and former Russian ambassador to the UN Sergey Kislyak.
Johnson considers terminating Huawei role in UK 5G network Press TV 23 May 2020 -- Prime Minister, Boris Johnson, is considering terminating the role of Chinese technology giant Huawei's role in the development of the UK's 5G network even before it began.
FBI Director Orders Internal Review of Investigation Into Ex-Trump Adviser Flynn Sputnik 22 May 2020 -- Christopher Wray, director of the US Federal Bureau of Investigation, has called for an after-action review of the agency's investigation into former Trump administration national security adviser Michael Flynn.
Report: Chinese Construction Projects Create Opportunity to Spy on African Leaders VOA 22 May 2020 -- A new report is warning that China may be spying on African government officials from within their own buildings.
Palestinians Stop Sharing Intelligence With CIA Over West Bank Land Grab Plans Sputnik 22 May 2020 -- Palestinians in the West Bank have ceased all security cooperation with both the United States and Israel, while Palestinian security forces have reportedly withdrawn from most of the West Bank, paving the way for a new spike in violence.
Acting DNI Grenell Statement on U.S. Intent to Withdraw from Open Skies Treaty Director of National Intelligence 21 May 2020 -- Acting Director of National Intelligence Richard Grenell today issued the following statement regarding the United States formally submitting its intent to withdraw from the Open Skies Treaty
U.S. Supreme Court Blocks Disclosure Of Material Gathered In Probe Of Russian Election Interference RFE/RL 21 May 2020 -- The U.S. Supreme Court has temporarily prevented the release of secret grand jury testimony gathered during Special Counsel Robert Mueller's investigation into Russian election interference that a House committee has sought for months.
Trump Loyalist Confirmed as Director of National Intelligence VOA 21 May 2020 -- One of U.S. President Donald Trump's most vocal supporters is set to lead the country's intelligence community, overcoming concerns about his experience and a bitter partisan divide to win Senate confirmation.
Twitter's Hiring of China-Linked AI Expert Sparks Concern Radio Free Asia 20 May 2020 -- Commentators have been raising concerns over Twitter's recent hiring of artificial intelligence (AI) star Fei-Fei Li, who has links to the Chinese Communist Party.
Parliament Says Intelligence Agencies Brought Losses To Iran's Auto Makers Radio Farda 19 May 2020 -- The Iranian Parliament (Majles) says the existence of several intelligence agencies in Iran has led to corruption and losses in the country's automobile manufacturing industry.
Senate Intelligence Panel Approves Ratcliffe for National Intelligence Director VOA 19 May 2020 -- The Senate Intelligence Committee approved the nomination Tuesday of Republican Rep. John Ratcliffe for the position of National Intelligence director.
Republican Marco Rubio Named Acting Chair of Senate Intelligence Committee VOA 19 May 2020 -- Republican U.S. Senator Marco Rubio has been tapped to serve as the acting chairman of the powerful Senate Intelligence Committee.
Russia rejects allegations of spying on Germany's Merkel in 2015 Press TV 15 May 2020 -- Russian Foreign Minister Sergei Lavrov has rejected claims by German Chancellor Angela Merkel that Russian hackers spied on her in 2015.
Two Months Later, Czech Probe Into Reports Of Russian Ricin Plot Faces Hurdles RFE/RL 15 May 2020 -- On March 14, Andrei Konchakov arrived at Vaclav Havel International Airport on a flight from Moscow. The 34-year-old Russian had lived in the Czech capital for years, and was recently appointed director of two state-run Russian institutions in Prague, giving him diplomatic status.
India's Investigative Agency Arrests Main Conspirator in Navy Espionage Racket Sputnik 15 May 2020 -- In a major international espionage racket, Pakistani spies recruited agents in the defence establishment of India to collect sensitive and classified information regarding Indian warships, submarines, and data on the location of naval commands. Navy personnel were also accused of spying for Pakistan.
Former Cleveland Clinic Employee and Chinese "Thousand Talents" Participant Arrested for Wire Fraud US Dept. of Justice 14 May 2020 -- Assistant Attorney General for National Security John C. Demers, U.S. Attorney Justin E. Herdman of the Northern District of Ohio, and FBI Cleveland Special Agent in Charge Eric B. Smith announced a former Cleveland Clinic employee was arrested yesterday without incident by law enforcement and had his initial court appearance today.
Trial Begins Of Russian Couple Charged With High Treason Over Wedding Photos RFE/RL 14 May 2020 -- A Russian couple charged with high treason have gone on trial for photographs taken at their wedding five years ago and published online that allegedly revealed the identity of a security operative.
Senator Burr Quits as Committee Chair Amid Stock Sale Probe VOA 14 May 2020 -- North Carolina Republican Sen. Richard Burr has stepped down as chair of the Senate Intelligence Committee while the FBI investigates allegations that he sold stocks using inside information about the coronavirus update.
Senator Richard Burr Steps Down as Intelligence Committee Chair amid FBI Investigation Sputnik 14 May 2020 -- Public disclosures first investigated by ProPublica show the senator sold more than 30 stocks between late January and mid-February. Some of the stocks were in sectors now devastated by the coronavirus outbreak, such as the hotel, restaurant and shipping industries.
China blasts US accusation of hacking COVID-19 research Press TV 14 May 2020 -- China says the United States is smearing the Asian country after Washington alleged that Chinese hackers were attempting to break into US COVID-19 research on developing a vaccine against the contagious disease.
Pompeo Calls on China to Stop Attempts to Steal COVID-19 Research Sputnik 14 May 2020 -- US Secretary of State Mike Pompeo condemned China-affiliated actors of trying to steal research related to the novel coronavirus disease (COVID-19) and called on Beijing to cease such malicious activity, according to a statement issued on Thursday.
The United States Condemns Attempts by PRC-Affiliated Actors to Steal American COVID-19 Research US Dept. of State 14 May 2020 -- The United States condemns attempts by cyber actors and non-traditional collectors affiliated with the People's Republic of China (PRC) to steal U.S. intellectual property and data related to COVID-19 research, as announced in a May 13, 2020 warning by the Federal Bureau of Investigation and the Department of Homeland Security's Cybersecurity and Infrastructure Security Agency.
Capella Space Signs SAR Imagery Contract with the Department of Defense Capella Space 13 May 2020 -- Capella Space will provide on-demand, high-resolution SAR data and analytics for the U.S. Navy
Text of a Notice on the Continuation of the National Emergency on Securing the Information and Communications Technology and Services Supply Chain The White House 13 May 2020
Text of a Letter from the President to the Speaker of the House of Representatives and the President of the Senate The White House 13 May 2020
People's Republic of China (PRC) Targeting of COVID-19 Research Organizations FBI 13 May 2020 -- The Federal Bureau of Investigation (FBI) and Cybersecurity and Infrastructure Security Agency (CISA) are issuing this announcement to raise awareness of the threat to COVID-19-related research. The FBI is investigating the targeting and compromise of U.S. organizations conducting COVID-19-related research by PRC-affiliated cyber actors and non-traditional collectors.
FBI and CISA Warn Against Chinese Targeting of COVID-19 Research Organizations FBI 13 May 2020 -- The Federal Bureau of Investigation (FBI) and the Cybersecurity and Infrastructure Security Agency (CISA) issued a public service announcement today warning organizations researching COVID-19 of likely targeting and network compromise by the People's Republic of China (PRC).
CIA Believes China Tried to Have WHO Delay Global Coronavirus Warning, Report Claims Sputnik 13 May 2020 -- The CIA is the second Western intelligence agency to accuse China of trying to cover up the gravity of the coronavirus outbreak. Last week, German media reported that the federal intelligence service believes Xi Jinping had personally attempted to keep the world unaware of human-to-human virus transmission. Both China and the WHO deny a cover-up.
Russia Requests Czech Police Protection For Alleged Ricin Trafficker RFE/RL 13 May 2020 -- Russia's embassy in the Czech Republic has formally requested Czech police protection for one of its employees -- a Russian diplomat accused in the Czech media of bringing highly toxic ricin to Prague in an alleged plot to poison three senior municipal officials.
Judge Puts Hold on Move to Drop Flynn Case VOA 12 May 2020 -- There is another stunning development in the case of President Donald Trump's former National Security Adviser Michael Flynn.
Judge Expects Outside Parties to Speak on Ex-National Adviser Michael Flynn's Case Sputnik 12 May 2020 -- The order follows the recent announcement of the US Justice Department on 7 May that it was dropping Flynn's case after a comprehensive review of all the facts and circumstances.
US Plans to Accuse China of Hacking COVID-19 Vaccine Research VOA 11 May 2020 -- For months, U.S. officials have been warning about a spike in cyberattacks during the coronavirus pandemic, but they've stopped short of pointing fingers at any one country.
US Security Agencies Reportedly to Warn of Chinese Hackers Seeking to Obtain COVID-19 Vaccine Data Sputnik 11 May 2020 -- Previously, the UK and the US issued a joint warning that hackers from a number of foreign states were reportedly seeking to access COVID-19-related data, including on vaccine research, amid closed borders and lockdowns set in place to thwart the spread of the pandemic.
University of Arkansas Professor Arrested for Wire Fraud US Dept. of Justice 11 May 2020 -- Assistant Attorney General for National Security John C. Demers, David Clay Fowlkes, Acting U.S. Attorney for the Western District of Arkansas, and FBI Special Agent in Charge Diane Upchurch of the FBI Little Rock Field Office announced today that Simon Saw-Teong Ang, 63, of Fayetteville, Arkansas, was arrested on Friday, May 8, 2020, on charges related to Wire Fraud.
Media Out Russian In Alleged Plot To Poison Czech Officials With Ricin RFE/RL 11 May 2020 -- Czech media have identified the man they say is the undercover Russian diplomat who entered the country nearly two months ago with a suitcase containing ricin as part of an alleged plot to poison as many as three Prague officials who had taken actions that angered the Kremlin.
Barr under pressure for dropping case against Trump ex-adviser, Flynn Press TV 09 May 2020 -- US Attorney General William Barr is coming under pressure for dropping the case against former national security adviser at the Trump administration, Michael Flynn.
'Critical Shortcomings': French Foreign Spy Agency Angry at Poor Job Applicants, Report Claims Sputnik 09 May 2020 -- DGSE, France's equivalent to the US Central Intelligence Agency or UK's MI6, is tasked with procuring secret political, military and economic information from foreign targets, and over the past decade has almost doubled in size.
Cybersecurity Firm Links Chinese Group to Cyber Espionage in Southeast Asia Radio Free Asia 08 May 2020 -- A China-based group has quietly carried out cyber espionage against Southeast Asian governments during the past few years, collecting "specific documents," among other data, from infected computers, a cybersecurity company said in a report.
German intelligence doubts US theory about Chinese lab origin of COVID-19: report Global Times 08 May 2020 -- Germany's Federal Intelligence Service (BND) is having doubts regarding Washington's claims that the coronavirus originated in a Chinese laboratory, German magazine Der Spiegel reported. The country's government has not commented on the report yet.
Media Advocates Urge West to Resist China's Censorship After EU Letter Controversy VOA 08 May 2020 -- Press freedom advocates say China's censorship of a letter co-authored by 27 European Union ambassadors that contained a reference to the origins of the coronavirus is another example of how the lack of press freedom in the country has caused problems for the world.
US Justice Dept. drops case against Trump's ex-adviser Flynn Press TV 08 May 2020 -- The US Justice Department has dropped its criminal case against President Donald Trump's former national security adviser Michael Flynn after mounting pressure from Trump and his political allies on the right.
Justice Department Drops Case Against Former Trump Adviser Flynn VOA 07 May 2020 -- The Justice Department on Thursday moved to drop the charges in its long-running criminal case against President Donald Trump's former national security adviser Michael Flynn, ending one of the most politically charged and controversial cases stemming from the now-closed investigation of Russian meddling in the 2016 presidential campaign.
After Being Delayed by White House for Almost a Year, Transcripts from House Intelligence Committee Russia Investigation Released HPSCI 07 May 2020 -- Transcripts Reaffirm Mueller's Findings That Russia Interfered to Hurt Clinton and Help Trump, the Campaign Invited and Made Full Use of Illicit Russian Help, and Trump Lied to Cover It Up White House Would Not Allow Release of All Transcripts for More Than a Year By Holding Up Declassification Process Until this Week
US House Intel Releases Trove of Transcripts From Russia Probe Sputnik 07 May 2020 -- The US House Intelligence Committee released a trove of documents related to its investigations of US President Donald Trump potentially having sought help winning elections from outside the US. The tranche includes 57 witness transcripts from the Russiagate and Ukraine scandal probes.
U.S. Justice Department Dropping Case Against Ex-Trump National-Security Adviser Flynn RFE/RL 07 May 2020 -- The U.S. Justice Department is dropping the criminal charges against former national-security adviser Michael Flynn.
US Justice Department Drops Criminal Case Against Ex-Trump National Security Adviser Michael Flynn Sputnik 07 May 2020 -- As a result of the Russia probe, Flynn struck a plea deal with the FBI, confessing to willingly lying to the agency about his contacts with Russian ambassador to the US, Sergei Kislyak, in 2016. Flynn later withdrew his plea and successfully fought attempts to sentence him in 2020.
German Intelligence is Reportedly Among Mediators in Secret Israel-Hamas Swap Talks Sputnik 06 May 2020 -- Germany's Federal Intelligence Service (BND), a high-ranking Swiss diplomat and a retired Egyptian army general have been mediating between Israel and Hamas on a possible prisoner swap for nearly two years, German newspaper Die Zeit reported Wednesday.
S Korean National Intelligence Service Says 'No Signs' Kim Jong-un Received Heart Surgery Sputnik 06 May 2020 -- After weeks of Kim Jong Un's absence that caused speculations on his health, the North Korean leader reappeared in public on 1 May alive and well.
Ukraine's Security Service Says It Detained Russian Agent RFE/RL 06 May 2020 -- The Ukrainian Security Service (SBU) says it has detained an alleged spy accused of collecting data on a "modern missile system" on behalf of Russia.
U.S. Senate Grills Trump's Director Of Intelligence Nominee Over Russia, China, And Partisanship RFE/RL 06 May 2020 -- U.S. President Donald Trump's nominee for director of national intelligence (DNI) at his Senate confirmation hearing said he believed Russia interfered in the 2016 presidential election and was prepared to meddle again.
Pompeo Says US Intelligence 'Still Figuring Out' Where Coronavirus Began as Trump Blames China Sputnik 06 May 2020 -- The spate of recriminations over the origins of the COVID-19 pandemic escalated last week after the US president accused China of 'concealing' the outbreak and mismanaging its containment, going so far as to claim the pandemic was the result of a leak at the Wuhan Institute of Virology. Chinese officials have forcefully denounced the claims.
Facebook Dismantles IRIB-Linked Disinformation Campaign Radio Farda 06 May 2020 -- The social network Facebook has announced that it has taken down over five hundred Facebook assets that were linked to an IRIB disinformation campaign.
Facebook Removes Hundreds Of Disinformation Accounts Linked To Russia, Iran, Georgia RFE/RL 05 May 2020 -- Facebook has removed hundreds of social-media accounts - more than half of them based in Russia, Iran, and Georgia - after finding they belonged to networks that were running influence campaigns.
Trump Nominee to Lead US Intelligence Promises 'Unvarnished Truth' VOA 05 May 2020 -- More than eight months after he was first tapped to lead U.S. intelligence efforts, Congressman John Ratcliffe repeatedly pledged to skeptical lawmakers that he would abandon partisan politics and provide the president and top policymakers the "unvarnished truth," no matter what they wanted to hear.
Taiwan's intelligence head grilled over Kim Jong-un health remark CNA 04 May 2020 -- Taiwan's intelligence chief has defended his widely cited assessment last Thursday that North Korean leader Kim Jong-un was sick a day before the dictator made an appearance at a May Day celebration.
U.S. intelligence analysts concerned over Trump officials' pressure to link coronavirus with Chinese lab: media People's Daily 01 May 2020 -- Some U.S. intelligence analysts have expressed concern that senior Trump administration officials' pressure to link the coronavirus with a Chinese lab will distort assessments about the virus and they could be used as a political weapon, The New York Times said in a report on Thursday.
Trump says virus may have originated in China lab, threatens tariffs Press TV 01 May 2020 -- US President Donald Trump has threatened China with new tariffs amid the coronavirus outbreak he blames Beijing for.
Trump Says Intelligence Points to COVID-19's Origins in Chinese Lab VOA 01 May 2020 -- U.S. President Donald Trump says he has a "high degree of confidence" the coronavirus pandemic originated in a Chinese laboratory, going beyond a rare, public assessment issued hours earlier by his top intelligence agency.
Trump Claims Former National-Security Adviser Flynn 'Exonerated' RFE/RL 01 May 2020 -- U.S. President Donald Trump has launched a fresh wave of criticism against U.S. law enforcement agents as lawyers for his former national-security adviser, Michael Flynn, disclosed internal FBI documents in their attempt to have Flynn's criminal conviction overturned.
Behind Russia's Coronavirus Fight, a Surveillance State Blooms VOA 01 May 2020 -- In the age of COVID-19, where does the line between security, privacy, and freedom lie?


text:
El necturo (Necturus maculosus) es una especie de anfibio caudado de la familia Proteidae. Tiene un cuerpo largo y cilíndrico, una cola plana, branquias plumosas externas y 2 pares de extremidades, cada una con cuatro dedos. es color marrón, gris, o negro, normalmente con manchas negras. Habita en diversos ambientes de agua dulce. Se alimenta de pequeños animales. Las branquias del necturo se adaptan al contenido de oxígeno del hábitat. En aguas frías y ricas en oxígeno normalmente son pequeñas pero en aguas estancadas y cálidas, tienden a ser considerablemente más grandes.

Referencias

maculosus
Taxones descritos por Constantine Samuel Rafinesque
Animales descritos en 1818