*
* This function does not take ownership of the |data_prd|. The
* function copies the members of the |data_prd|.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_DATA_EXIST`
* DATA or HEADERS has been already submitted and not fully
* processed yet.
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* The |stream_id| is 0.
* :enum:`NGHTTP2_ERR_STREAM_CLOSED`
* The stream was already closed; or the |stream_id| is invalid.
*
* .. note::
*
* Currently, only one DATA or HEADERS is allowed for a stream at a
* time. Submitting these frames more than once before first DATA
* or HEADERS is finished results in :enum:`NGHTTP2_ERR_DATA_EXIST`
* error code. The earliest callback which tells that previous
* frame is done is :type:`nghttp2_on_frame_send_callback`. In side
* that callback, new data can be submitted using
* `nghttp2_submit_data()`. Of course, all data except for last one
* must not have :enum:`NGHTTP2_FLAG_END_STREAM` flag set in
* |flags|. This sounds a bit complicated, and we recommend to use
* `nghttp2_submit_request()` and `nghttp2_submit_response()` to
* avoid this cascading issue. The experience shows that for HTTP
* use, these two functions are enough to implement both client and
* server.
*/
NGHTTP2_EXTERN int nghttp2_submit_data(nghttp2_session *session, uint8_t flags,
int32_t stream_id,
const nghttp2_data_provider *data_prd);
/**
* @function
*
* Submits PRIORITY frame to change the priority of stream |stream_id|
* to the priority specification |pri_spec|.
*
* The |flags| is currently ignored and should be
* :enum:`NGHTTP2_FLAG_NONE`.
*
* The |pri_spec| is priority specification of this request. ``NULL``
* is not allowed for this function. To specify the priority, use
* `nghttp2_priority_spec_init()`. This function will copy its data
* members.
*
* The ``pri_spec->weight`` must be in [:enum:`NGHTTP2_MIN_WEIGHT`,
* :enum:`NGHTTP2_MAX_WEIGHT`], inclusive. If ``pri_spec->weight`` is
* strictly less than :enum:`NGHTTP2_MIN_WEIGHT`, it becomes
* :enum:`NGHTTP2_MIN_WEIGHT`. If it is strictly greater than
* :enum:`NGHTTP2_MAX_WEIGHT`, it becomes :enum:`NGHTTP2_MAX_WEIGHT`.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* The |stream_id| is 0; or the |pri_spec| is NULL; or trying to
* depend on itself.
*/
NGHTTP2_EXTERN int
nghttp2_submit_priority(nghttp2_session *session, uint8_t flags,
int32_t stream_id,
const nghttp2_priority_spec *pri_spec);
/**
* @function
*
* Submits RST_STREAM frame to cancel/reject the stream |stream_id|
* with the error code |error_code|.
*
* The pre-defined error code is one of :enum:`nghttp2_error_code`.
*
* The |flags| is currently ignored and should be
* :enum:`NGHTTP2_FLAG_NONE`.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* The |stream_id| is 0.
*/
NGHTTP2_EXTERN int nghttp2_submit_rst_stream(nghttp2_session *session,
uint8_t flags, int32_t stream_id,
uint32_t error_code);
/**
* @function
*
* Stores local settings and submits SETTINGS frame. The |iv| is the
* pointer to the array of :type:`nghttp2_settings_entry`. The |niv|
* indicates the number of :type:`nghttp2_settings_entry`.
*
* The |flags| is currently ignored and should be
* :enum:`NGHTTP2_FLAG_NONE`.
*
* This function does not take ownership of the |iv|. This function
* copies all the elements in the |iv|.
*
* While updating individual stream's local window size, if the window
* size becomes strictly larger than NGHTTP2_MAX_WINDOW_SIZE,
* RST_STREAM is issued against such a stream.
*
* SETTINGS with :enum:`NGHTTP2_FLAG_ACK` is automatically submitted
* by the library and application could not send it at its will.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* The |iv| contains invalid value (e.g., initial window size
* strictly greater than (1 << 31) - 1.
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
*/
NGHTTP2_EXTERN int nghttp2_submit_settings(nghttp2_session *session,
uint8_t flags,
const nghttp2_settings_entry *iv,
size_t niv);
/**
* @function
*
* Submits PUSH_PROMISE frame.
*
* The |flags| is currently ignored. The library handles the
* CONTINUATION frame internally and it correctly sets END_HEADERS to
* the last sequence of the PUSH_PROMISE or CONTINUATION frame.
*
* The |stream_id| must be client initiated stream ID.
*
* The |nva| is an array of name/value pair :type:`nghttp2_nv` with
* |nvlen| elements. The application is responsible to include
* required pseudo-header fields (header field whose name starts with
* ":") in |nva| and must place pseudo-headers before regular header
* fields.
*
* This function creates copies of all name/value pairs in |nva|. It
* also lower-cases all names in |nva|. The order of elements in
* |nva| is preserved. For header fields with
* :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME` and
* :enum:`NGHTTP2_NV_FLAG_NO_COPY_VALUE` are set, header field name
* and value are not copied respectively. With
* :enum:`NGHTTP2_NV_FLAG_NO_COPY_NAME`, application is responsible to
* pass header field name in lowercase. The application should
* maintain the references to them until
* :type:`nghttp2_on_frame_send_callback` or
* :type:`nghttp2_on_frame_not_send_callback` is called.
*
* The |promised_stream_user_data| is a pointer to an arbitrary data
* which is associated to the promised stream this frame will open and
* make it in reserved state. It is available using
* `nghttp2_session_get_stream_user_data()`. The application can
* access it in :type:`nghttp2_before_frame_send_callback` and
* :type:`nghttp2_on_frame_send_callback` of this frame.
*
* The client side is not allowed to use this function.
*
* To submit response headers and data, use
* `nghttp2_submit_response()`.
*
* This function returns assigned promised stream ID if it succeeds,
* or one of the following negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_PROTO`
* This function was invoked when |session| is initialized as
* client.
* :enum:`NGHTTP2_ERR_STREAM_ID_NOT_AVAILABLE`
* No stream ID is available because maximum stream ID was
* reached.
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* The |stream_id| is 0; The |stream_id| does not designate stream
* that peer initiated.
* :enum:`NGHTTP2_ERR_STREAM_CLOSED`
* The stream was already closed; or the |stream_id| is invalid.
*
* .. warning::
*
* This function returns assigned promised stream ID if it succeeds.
* As of 1.16.0, stream object for pushed resource is created when
* this function succeeds. In that case, the application can submit
* push response for the promised frame.
*
* In 1.15.0 or prior versions, pushed stream is not opened yet when
* this function succeeds. The application must not submit frame to
* that stream ID before :type:`nghttp2_before_frame_send_callback`
* is called for this frame.
*
*/
NGHTTP2_EXTERN int32_t nghttp2_submit_push_promise(
nghttp2_session *session, uint8_t flags, int32_t stream_id,
const nghttp2_nv *nva, size_t nvlen, void *promised_stream_user_data);
/**
* @function
*
* Submits PING frame. You don't have to send PING back when you
* received PING frame. The library automatically submits PING frame
* in this case.
*
* The |flags| is bitwise OR of 0 or more of the following value.
*
* * :enum:`NGHTTP2_FLAG_ACK`
*
* Unless `nghttp2_option_set_no_auto_ping_ack()` is used, the |flags|
* should be :enum:`NGHTTP2_FLAG_NONE`.
*
* If the |opaque_data| is non ``NULL``, then it should point to the 8
* bytes array of memory to specify opaque data to send with PING
* frame. If the |opaque_data| is ``NULL``, zero-cleared 8 bytes will
* be sent as opaque data.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
*/
NGHTTP2_EXTERN int nghttp2_submit_ping(nghttp2_session *session, uint8_t flags,
const uint8_t *opaque_data);
/**
* @function
*
* Submits GOAWAY frame with the last stream ID |last_stream_id| and
* the error code |error_code|.
*
* The pre-defined error code is one of :enum:`nghttp2_error_code`.
*
* The |flags| is currently ignored and should be
* :enum:`NGHTTP2_FLAG_NONE`.
*
* The |last_stream_id| is peer's stream ID or 0. So if |session| is
* initialized as client, |last_stream_id| must be even or 0. If
* |session| is initialized as server, |last_stream_id| must be odd or
* 0.
*
* The HTTP/2 specification says last_stream_id must not be increased
* from the value previously sent. So the actual value sent as
* last_stream_id is the minimum value between the given
* |last_stream_id| and the last_stream_id previously sent to the
* peer.
*
* If the |opaque_data| is not ``NULL`` and |opaque_data_len| is not
* zero, those data will be sent as additional debug data. The
* library makes a copy of the memory region pointed by |opaque_data|
* with the length |opaque_data_len|, so the caller does not need to
* keep this memory after the return of this function. If the
* |opaque_data_len| is 0, the |opaque_data| could be ``NULL``.
*
* After successful transmission of GOAWAY, following things happen.
* All incoming streams having strictly more than |last_stream_id| are
* closed. All incoming HEADERS which starts new stream are simply
* ignored. After all active streams are handled, both
* `nghttp2_session_want_read()` and `nghttp2_session_want_write()`
* return 0 and the application can close session.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* The |opaque_data_len| is too large; the |last_stream_id| is
* invalid.
*/
NGHTTP2_EXTERN int nghttp2_submit_goaway(nghttp2_session *session,
uint8_t flags, int32_t last_stream_id,
uint32_t error_code,
const uint8_t *opaque_data,
size_t opaque_data_len);
/**
* @function
*
* Returns the last stream ID of a stream for which
* :type:`nghttp2_on_frame_recv_callback` was invoked most recently.
* The returned value can be used as last_stream_id parameter for
* `nghttp2_submit_goaway()` and
* `nghttp2_session_terminate_session2()`.
*
* This function always succeeds.
*/
NGHTTP2_EXTERN int32_t
nghttp2_session_get_last_proc_stream_id(nghttp2_session *session);
/**
* @function
*
* Returns nonzero if new request can be sent from local endpoint.
*
* This function return 0 if request is not allowed for this session.
* There are several reasons why request is not allowed. Some of the
* reasons are: session is server; stream ID has been spent; GOAWAY
* has been sent or received.
*
* The application can call `nghttp2_submit_request()` without
* consulting this function. In that case, `nghttp2_submit_request()`
* may return error. Or, request is failed to sent, and
* :type:`nghttp2_on_stream_close_callback` is called.
*/
NGHTTP2_EXTERN int
nghttp2_session_check_request_allowed(nghttp2_session *session);
/**
* @function
*
* Returns nonzero if |session| is initialized as server side session.
*/
NGHTTP2_EXTERN int
nghttp2_session_check_server_session(nghttp2_session *session);
/**
* @function
*
* Submits WINDOW_UPDATE frame.
*
* The |flags| is currently ignored and should be
* :enum:`NGHTTP2_FLAG_NONE`.
*
* The |stream_id| is the stream ID to send this WINDOW_UPDATE. To
* send connection level WINDOW_UPDATE, specify 0 to |stream_id|.
*
* If the |window_size_increment| is positive, the WINDOW_UPDATE with
* that value as window_size_increment is queued. If the
* |window_size_increment| is larger than the received bytes from the
* remote endpoint, the local window size is increased by that
* difference. If the sole purpose is to increase the local window
* size, consider to use `nghttp2_session_set_local_window_size()`.
*
* If the |window_size_increment| is negative, the local window size
* is decreased by -|window_size_increment|. If automatic
* WINDOW_UPDATE is enabled
* (`nghttp2_option_set_no_auto_window_update()`), and the library
* decided that the WINDOW_UPDATE should be submitted, then
* WINDOW_UPDATE is queued with the current received bytes count. If
* the sole purpose is to decrease the local window size, consider to
* use `nghttp2_session_set_local_window_size()`.
*
* If the |window_size_increment| is 0, the function does nothing and
* returns 0.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_FLOW_CONTROL`
* The local window size overflow or gets negative.
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
*/
NGHTTP2_EXTERN int nghttp2_submit_window_update(nghttp2_session *session,
uint8_t flags,
int32_t stream_id,
int32_t window_size_increment);
/**
* @function
*
* Set local window size (local endpoints's window size) to the given
* |window_size| for the given stream denoted by |stream_id|. To
* change connection level window size, specify 0 to |stream_id|. To
* increase window size, this function may submit WINDOW_UPDATE frame
* to transmission queue.
*
* The |flags| is currently ignored and should be
* :enum:`NGHTTP2_FLAG_NONE`.
*
* This sounds similar to `nghttp2_submit_window_update()`, but there
* are 2 differences. The first difference is that this function
* takes the absolute value of window size to set, rather than the
* delta. To change the window size, this may be easier to use since
* the application just declares the intended window size, rather than
* calculating delta. The second difference is that
* `nghttp2_submit_window_update()` affects the received bytes count
* which has not acked yet. By the specification of
* `nghttp2_submit_window_update()`, to strictly increase the local
* window size, we have to submit delta including all received bytes
* count, which might not be desirable in some cases. On the other
* hand, this function does not affect the received bytes count. It
* just sets the local window size to the given value.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* The |stream_id| is negative.
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
*/
NGHTTP2_EXTERN int
nghttp2_session_set_local_window_size(nghttp2_session *session, uint8_t flags,
int32_t stream_id, int32_t window_size);
/**
* @function
*
* Submits extension frame.
*
* Application can pass arbitrary frame flags and stream ID in |flags|
* and |stream_id| respectively. The |payload| is opaque pointer, and
* it can be accessible though ``frame->ext.payload`` in
* :type:`nghttp2_pack_extension_callback`. The library will not own
* passed |payload| pointer.
*
* The application must set :type:`nghttp2_pack_extension_callback`
* using `nghttp2_session_callbacks_set_pack_extension_callback()`.
*
* The application should retain the memory pointed by |payload| until
* the transmission of extension frame is done (which is indicated by
* :type:`nghttp2_on_frame_send_callback`), or transmission fails
* (which is indicated by :type:`nghttp2_on_frame_not_send_callback`).
* If application does not touch this memory region after packing it
* into a wire format, application can free it inside
* :type:`nghttp2_pack_extension_callback`.
*
* The standard HTTP/2 frame cannot be sent with this function, so
* |type| must be strictly grater than 0x9. Otherwise, this function
* will fail with error code :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_INVALID_STATE`
* If :type:`nghttp2_pack_extension_callback` is not set.
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* If |type| specifies standard HTTP/2 frame type. The frame
* types in the rage [0x0, 0x9], both inclusive, are standard
* HTTP/2 frame type, and cannot be sent using this function.
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory
*/
NGHTTP2_EXTERN int nghttp2_submit_extension(nghttp2_session *session,
uint8_t type, uint8_t flags,
int32_t stream_id, void *payload);
/**
* @struct
*
* The payload of ALTSVC frame. ALTSVC frame is a non-critical
* extension to HTTP/2. If this frame is received, and
* `nghttp2_option_set_user_recv_extension_type()` is not set, and
* `nghttp2_option_set_builtin_recv_extension_type()` is set for
* :enum:`NGHTTP2_ALTSVC`, ``nghttp2_extension.payload`` will point to
* this struct.
*
* It has the following members:
*/
typedef struct {
/**
* The pointer to origin which this alternative service is
* associated with. This is not necessarily NULL-terminated.
*/
uint8_t *origin;
/**
* The length of the |origin|.
*/
size_t origin_len;
/**
* The pointer to Alt-Svc field value contained in ALTSVC frame.
* This is not necessarily NULL-terminated.
*/
uint8_t *field_value;
/**
* The length of the |field_value|.
*/
size_t field_value_len;
} nghttp2_ext_altsvc;
/**
* @function
*
* Submits ALTSVC frame.
*
* ALTSVC frame is a non-critical extension to HTTP/2, and defined in
* is defined in `RFC 7383
* <https://tools.ietf.org/html/rfc7838#section-4>`_.
*
* The |flags| is currently ignored and should be
* :enum:`NGHTTP2_FLAG_NONE`.
*
* The |origin| points to the origin this alternative service is
* associated with. The |origin_len| is the length of the origin. If
* |stream_id| is 0, the origin must be specified. If |stream_id| is
* not zero, the origin must be empty (in other words, |origin_len|
* must be 0).
*
* The ALTSVC frame is only usable from server side. If this function
* is invoked with client side session, this function returns
* :enum:`NGHTTP2_ERR_INVALID_STATE`.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory
* :enum:`NGHTTP2_ERR_INVALID_STATE`
* The function is called from client side session
* :enum:`NGHTTP2_ERR_INVALID_ARGUMENT`
* The sum of |origin_len| and |field_value_len| is larger than
* 16382; or |origin_len| is 0 while |stream_id| is 0; or
* |origin_len| is not 0 while |stream_id| is not 0.
*/
NGHTTP2_EXTERN int nghttp2_submit_altsvc(nghttp2_session *session,
uint8_t flags, int32_t stream_id,
const uint8_t *origin,
size_t origin_len,
const uint8_t *field_value,
size_t field_value_len);
/**
* @function
*
* Compares ``lhs->name`` of length ``lhs->namelen`` bytes and
* ``rhs->name`` of length ``rhs->namelen`` bytes. Returns negative
* integer if ``lhs->name`` is found to be less than ``rhs->name``; or
* returns positive integer if ``lhs->name`` is found to be greater
* than ``rhs->name``; or returns 0 otherwise.
*/
NGHTTP2_EXTERN int nghttp2_nv_compare_name(const nghttp2_nv *lhs,
const nghttp2_nv *rhs);
/**
* @function
*
* A helper function for dealing with NPN in client side or ALPN in
* server side. The |in| contains peer's protocol list in preferable
* order. The format of |in| is length-prefixed and not
* null-terminated. For example, ``h2`` and
* ``http/1.1`` stored in |in| like this::
*
* in[0] = 2
* in[1..2] = "h2"
* in[3] = 8
* in[4..11] = "http/1.1"
* inlen = 12
*
* The selection algorithm is as follows:
*
* 1. If peer's list contains HTTP/2 protocol the library supports,
* it is selected and returns 1. The following step is not taken.
*
* 2. If peer's list contains ``http/1.1``, this function selects
* ``http/1.1`` and returns 0. The following step is not taken.
*
* 3. This function selects nothing and returns -1 (So called
* non-overlap case). In this case, |out| and |outlen| are left
* untouched.
*
* Selecting ``h2`` means that ``h2`` is written into |*out| and its
* length (which is 2) is assigned to |*outlen|.
*
* For ALPN, refer to https://tools.ietf.org/html/rfc7301
*
* See http://technotes.googlecode.com/git/nextprotoneg.html for more
* details about NPN.
*
* For NPN, to use this method you should do something like::
*
* static int select_next_proto_cb(SSL* ssl,
* unsigned char **out,
* unsigned char *outlen,
* const unsigned char *in,
* unsigned int inlen,
* void *arg)
* {
* int rv;
* rv = nghttp2_select_next_protocol(out, outlen, in, inlen);
* if (rv == -1) {
* return SSL_TLSEXT_ERR_NOACK;
* }
* if (rv == 1) {
* ((MyType*)arg)->http2_selected = 1;
* }
* return SSL_TLSEXT_ERR_OK;
* }
* ...
* SSL_CTX_set_next_proto_select_cb(ssl_ctx, select_next_proto_cb, my_obj);
*
*/
NGHTTP2_EXTERN int nghttp2_select_next_protocol(unsigned char **out,
unsigned char *outlen,
const unsigned char *in,
unsigned int inlen);
/**
* @function
*
* Returns a pointer to a nghttp2_info struct with version information
* about the run-time library in use. The |least_version| argument
* can be set to a 24 bit numerical value for the least accepted
* version number and if the condition is not met, this function will
* return a ``NULL``. Pass in 0 to skip the version checking.
*/
NGHTTP2_EXTERN nghttp2_info *nghttp2_version(int least_version);
/**
* @function
*
* Returns nonzero if the :type:`nghttp2_error` library error code
* |lib_error| is fatal.
*/
NGHTTP2_EXTERN int nghttp2_is_fatal(int lib_error_code);
/**
* @function
*
* Returns nonzero if HTTP header field name |name| of length |len| is
* valid according to http://tools.ietf.org/html/rfc7230#section-3.2
*
* Because this is a header field name in HTTP2, the upper cased alphabet
* is treated as error.
*/
NGHTTP2_EXTERN int nghttp2_check_header_name(const uint8_t *name, size_t len);
/**
* @function
*
* Returns nonzero if HTTP header field value |value| of length |len|
* is valid according to
* http://tools.ietf.org/html/rfc7230#section-3.2
*/
NGHTTP2_EXTERN int nghttp2_check_header_value(const uint8_t *value, size_t len);
/* HPACK API */
struct nghttp2_hd_deflater;
/**
* @struct
*
* HPACK deflater object.
*/
typedef struct nghttp2_hd_deflater nghttp2_hd_deflater;
/**
* @function
*
* Initializes |*deflater_ptr| for deflating name/values pairs.
*
* The |max_deflate_dynamic_table_size| is the upper bound of header
* table size the deflater will use.
*
* If this function fails, |*deflater_ptr| is left untouched.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
*/
NGHTTP2_EXTERN int
nghttp2_hd_deflate_new(nghttp2_hd_deflater **deflater_ptr,
size_t max_deflate_dynamic_table_size);
/**
* @function
*
* Like `nghttp2_hd_deflate_new()`, but with additional custom memory
* allocator specified in the |mem|.
*
* The |mem| can be ``NULL`` and the call is equivalent to
* `nghttp2_hd_deflate_new()`.
*
* This function does not take ownership |mem|. The application is
* responsible for freeing |mem|.
*
* The library code does not refer to |mem| pointer after this
* function returns, so the application can safely free it.
*/
NGHTTP2_EXTERN int
nghttp2_hd_deflate_new2(nghttp2_hd_deflater **deflater_ptr,
size_t max_deflate_dynamic_table_size,
nghttp2_mem *mem);
/**
* @function
*
* Deallocates any resources allocated for |deflater|.
*/
NGHTTP2_EXTERN void nghttp2_hd_deflate_del(nghttp2_hd_deflater *deflater);
/**
* @function
*
* Changes header table size of the |deflater| to
* |settings_max_dynamic_table_size| bytes. This may trigger eviction
* in the dynamic table.
*
* The |settings_max_dynamic_table_size| should be the value received
* in SETTINGS_HEADER_TABLE_SIZE.
*
* The deflater never uses more memory than
* ``max_deflate_dynamic_table_size`` bytes specified in
* `nghttp2_hd_deflate_new()`. Therefore, if
* |settings_max_dynamic_table_size| >
* ``max_deflate_dynamic_table_size``, resulting maximum table size
* becomes ``max_deflate_dynamic_table_size``.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
*/
NGHTTP2_EXTERN int
nghttp2_hd_deflate_change_table_size(nghttp2_hd_deflater *deflater,
size_t settings_max_dynamic_table_size);
/**
* @function
*
* Deflates the |nva|, which has the |nvlen| name/value pairs, into
* the |buf| of length |buflen|.
*
* If |buf| is not large enough to store the deflated header block,
* this function fails with :enum:`NGHTTP2_ERR_INSUFF_BUFSIZE`. The
* caller should use `nghttp2_hd_deflate_bound()` to know the upper
* bound of buffer size required to deflate given header name/value
* pairs.
*
* Once this function fails, subsequent call of this function always
* returns :enum:`NGHTTP2_ERR_HEADER_COMP`.
*
* After this function returns, it is safe to delete the |nva|.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_HEADER_COMP`
* Deflation process has failed.
* :enum:`NGHTTP2_ERR_INSUFF_BUFSIZE`
* The provided |buflen| size is too small to hold the output.
*/
NGHTTP2_EXTERN ssize_t nghttp2_hd_deflate_hd(nghttp2_hd_deflater *deflater,
uint8_t *buf, size_t buflen,
const nghttp2_nv *nva,
size_t nvlen);
/**
* @function
*
* Deflates the |nva|, which has the |nvlen| name/value pairs, into
* the |veclen| size of buf vector |vec|. The each size of buffer
* must be set in len field of :type:`nghttp2_vec`. If and only if
* one chunk is filled up completely, next chunk will be used. If
* |vec| is not large enough to store the deflated header block, this
* function fails with :enum:`NGHTTP2_ERR_INSUFF_BUFSIZE`. The caller
* should use `nghttp2_hd_deflate_bound()` to know the upper bound of
* buffer size required to deflate given header name/value pairs.
*
* Once this function fails, subsequent call of this function always
* returns :enum:`NGHTTP2_ERR_HEADER_COMP`.
*
* After this function returns, it is safe to delete the |nva|.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_HEADER_COMP`
* Deflation process has failed.
* :enum:`NGHTTP2_ERR_INSUFF_BUFSIZE`
* The provided |buflen| size is too small to hold the output.
*/
NGHTTP2_EXTERN ssize_t nghttp2_hd_deflate_hd_vec(nghttp2_hd_deflater *deflater,
const nghttp2_vec *vec,
size_t veclen,
const nghttp2_nv *nva,
size_t nvlen);
/**
* @function
*
* Returns an upper bound on the compressed size after deflation of
* |nva| of length |nvlen|.
*/
NGHTTP2_EXTERN size_t nghttp2_hd_deflate_bound(nghttp2_hd_deflater *deflater,
const nghttp2_nv *nva,
size_t nvlen);
/**
* @function
*
* Returns the number of entries that header table of |deflater|
* contains. This is the sum of the number of static table and
* dynamic table, so the return value is at least 61.
*/
NGHTTP2_EXTERN
size_t nghttp2_hd_deflate_get_num_table_entries(nghttp2_hd_deflater *deflater);
/**
* @function
*
* Returns the table entry denoted by |idx| from header table of
* |deflater|. The |idx| is 1-based, and idx=1 returns first entry of
* static table. idx=62 returns first entry of dynamic table if it
* exists. Specifying idx=0 is error, and this function returns NULL.
* If |idx| is strictly greater than the number of entries the tables
* contain, this function returns NULL.
*/
NGHTTP2_EXTERN
const nghttp2_nv *
nghttp2_hd_deflate_get_table_entry(nghttp2_hd_deflater *deflater, size_t idx);
/**
* @function
*
* Returns the used dynamic table size, including the overhead 32
* bytes per entry described in RFC 7541.
*/
NGHTTP2_EXTERN
size_t nghttp2_hd_deflate_get_dynamic_table_size(nghttp2_hd_deflater *deflater);
/**
* @function
*
* Returns the maximum dynamic table size.
*/
NGHTTP2_EXTERN
size_t
nghttp2_hd_deflate_get_max_dynamic_table_size(nghttp2_hd_deflater *deflater);
struct nghttp2_hd_inflater;
/**
* @struct
*
* HPACK inflater object.
*/
typedef struct nghttp2_hd_inflater nghttp2_hd_inflater;
/**
* @function
*
* Initializes |*inflater_ptr| for inflating name/values pairs.
*
* If this function fails, |*inflater_ptr| is left untouched.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
*/
NGHTTP2_EXTERN int nghttp2_hd_inflate_new(nghttp2_hd_inflater **inflater_ptr);
/**
* @function
*
* Like `nghttp2_hd_inflate_new()`, but with additional custom memory
* allocator specified in the |mem|.
*
* The |mem| can be ``NULL`` and the call is equivalent to
* `nghttp2_hd_inflate_new()`.
*
* This function does not take ownership |mem|. The application is
* responsible for freeing |mem|.
*
* The library code does not refer to |mem| pointer after this
* function returns, so the application can safely free it.
*/
NGHTTP2_EXTERN int nghttp2_hd_inflate_new2(nghttp2_hd_inflater **inflater_ptr,
nghttp2_mem *mem);
/**
* @function
*
* Deallocates any resources allocated for |inflater|.
*/
NGHTTP2_EXTERN void nghttp2_hd_inflate_del(nghttp2_hd_inflater *inflater);
/**
* @function
*
* Changes header table size in the |inflater|. This may trigger
* eviction in the dynamic table.
*
* The |settings_max_dynamic_table_size| should be the value
* transmitted in SETTINGS_HEADER_TABLE_SIZE.
*
* This function must not be called while header block is being
* inflated. In other words, this function must be called after
* initialization of |inflater|, but before calling
* `nghttp2_hd_inflate_hd2()`, or after
* `nghttp2_hd_inflate_end_headers()`. Otherwise,
* `NGHTTP2_ERR_INVALID_STATE` was returned.
*
* This function returns 0 if it succeeds, or one of the following
* negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_INVALID_STATE`
* The function is called while header block is being inflated.
* Probably, application missed to call
* `nghttp2_hd_inflate_end_headers()`.
*/
NGHTTP2_EXTERN int
nghttp2_hd_inflate_change_table_size(nghttp2_hd_inflater *inflater,
size_t settings_max_dynamic_table_size);
/**
* @enum
*
* The flags for header inflation.
*/
typedef enum {
/**
* No flag set.
*/
NGHTTP2_HD_INFLATE_NONE = 0,
/**
* Indicates all headers were inflated.
*/
NGHTTP2_HD_INFLATE_FINAL = 0x01,
/**
* Indicates a header was emitted.
*/
NGHTTP2_HD_INFLATE_EMIT = 0x02
} nghttp2_hd_inflate_flag;
/**
* @function
*
* .. warning::
*
* Deprecated. Use `nghttp2_hd_inflate_hd2()` instead.
*
* Inflates name/value block stored in |in| with length |inlen|. This
* function performs decompression. For each successful emission of
* header name/value pair, :enum:`NGHTTP2_HD_INFLATE_EMIT` is set in
* |*inflate_flags| and name/value pair is assigned to the |nv_out|
* and the function returns. The caller must not free the members of
* |nv_out|.
*
* The |nv_out| may include pointers to the memory region in the |in|.
* The caller must retain the |in| while the |nv_out| is used.
*
* The application should call this function repeatedly until the
* ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and
* return value is non-negative. This means the all input values are
* processed successfully. Then the application must call
* `nghttp2_hd_inflate_end_headers()` to prepare for the next header
* block input.
*
* The caller can feed complete compressed header block. It also can
* feed it in several chunks. The caller must set |in_final| to
* nonzero if the given input is the last block of the compressed
* header.
*
* This function returns the number of bytes processed if it succeeds,
* or one of the following negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_HEADER_COMP`
* Inflation process has failed.
* :enum:`NGHTTP2_ERR_BUFFER_ERROR`
* The header field name or value is too large.
*
* Example follows::
*
* int inflate_header_block(nghttp2_hd_inflater *hd_inflater,
* uint8_t *in, size_t inlen, int final)
* {
* ssize_t rv;
*
* for(;;) {
* nghttp2_nv nv;
* int inflate_flags = 0;
*
* rv = nghttp2_hd_inflate_hd(hd_inflater, &nv, &inflate_flags,
* in, inlen, final);
*
* if(rv < 0) {
* fprintf(stderr, "inflate failed with error code %zd", rv);
* return -1;
* }
*
* in += rv;
* inlen -= rv;
*
* if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) {
* fwrite(nv.name, nv.namelen, 1, stderr);
* fprintf(stderr, ": ");
* fwrite(nv.value, nv.valuelen, 1, stderr);
* fprintf(stderr, "\n");
* }
* if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) {
* nghttp2_hd_inflate_end_headers(hd_inflater);
* break;
* }
* if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 &&
* inlen == 0) {
* break;
* }
* }
*
* return 0;
* }
*
*/
NGHTTP2_EXTERN ssize_t nghttp2_hd_inflate_hd(nghttp2_hd_inflater *inflater,
nghttp2_nv *nv_out,
int *inflate_flags, uint8_t *in,
size_t inlen, int in_final);
/**
* @function
*
* Inflates name/value block stored in |in| with length |inlen|. This
* function performs decompression. For each successful emission of
* header name/value pair, :enum:`NGHTTP2_HD_INFLATE_EMIT` is set in
* |*inflate_flags| and name/value pair is assigned to the |nv_out|
* and the function returns. The caller must not free the members of
* |nv_out|.
*
* The |nv_out| may include pointers to the memory region in the |in|.
* The caller must retain the |in| while the |nv_out| is used.
*
* The application should call this function repeatedly until the
* ``(*inflate_flags) & NGHTTP2_HD_INFLATE_FINAL`` is nonzero and
* return value is non-negative. If that happens, all given input
* data (|inlen| bytes) are processed successfully. Then the
* application must call `nghttp2_hd_inflate_end_headers()` to prepare
* for the next header block input.
*
* In other words, if |in_final| is nonzero, and this function returns
* |inlen|, you can assert that :enum:`NGHTTP2_HD_INFLATE_FINAL` is
* set in |*inflate_flags|.
*
* The caller can feed complete compressed header block. It also can
* feed it in several chunks. The caller must set |in_final| to
* nonzero if the given input is the last block of the compressed
* header.
*
* This function returns the number of bytes processed if it succeeds,
* or one of the following negative error codes:
*
* :enum:`NGHTTP2_ERR_NOMEM`
* Out of memory.
* :enum:`NGHTTP2_ERR_HEADER_COMP`
* Inflation process has failed.
* :enum:`NGHTTP2_ERR_BUFFER_ERROR`
* The header field name or value is too large.
*
* Example follows::
*
* int inflate_header_block(nghttp2_hd_inflater *hd_inflater,
* uint8_t *in, size_t inlen, int final)
* {
* ssize_t rv;
*
* for(;;) {
* nghttp2_nv nv;
* int inflate_flags = 0;
*
* rv = nghttp2_hd_inflate_hd2(hd_inflater, &nv, &inflate_flags,
* in, inlen, final);
*
* if(rv < 0) {
* fprintf(stderr, "inflate failed with error code %zd", rv);
* return -1;
* }
*
* in += rv;
* inlen -= rv;
*
* if(inflate_flags & NGHTTP2_HD_INFLATE_EMIT) {
* fwrite(nv.name, nv.namelen, 1, stderr);
* fprintf(stderr, ": ");
* fwrite(nv.value, nv.valuelen, 1, stderr);
* fprintf(stderr, "\n");
* }
* if(inflate_flags & NGHTTP2_HD_INFLATE_FINAL) {
* nghttp2_hd_inflate_end_headers(hd_inflater);
* break;
* }
* if((inflate_flags & NGHTTP2_HD_INFLATE_EMIT) == 0 &&
* inlen == 0) {
* break;
* }
* }
*
* return 0;
* }
*
*/
NGHTTP2_EXTERN ssize_t nghttp2_hd_inflate_hd2(nghttp2_hd_inflater *inflater,
nghttp2_nv *nv_out,
int *inflate_flags,
const uint8_t *in, size_t inlen,
int in_final);
/**
* @function
*
* Signals the end of decompression for one header block.
*
* This function returns 0 if it succeeds. Currently this function
* always succeeds.
*/
NGHTTP2_EXTERN int
nghttp2_hd_inflate_end_headers(nghttp2_hd_inflater *inflater);
/**
* @function
*
* Returns the number of entries that header table of |inflater|
* contains. This is the sum of the number of static table and
* dynamic table, so the return value is at least 61.
*/
NGHTTP2_EXTERN
size_t nghttp2_hd_inflate_get_num_table_entries(nghttp2_hd_inflater *inflater);
/**
* @function
*
* Returns the table entry denoted by |idx| from header table of
* |inflater|. The |idx| is 1-based, and idx=1 returns first entry of
* static table. idx=62 returns first entry of dynamic table if it
* exists. Specifying idx=0 is error, and this function returns NULL.
* If |idx| is strictly greater than the number of entries the tables
* contain, this function returns NULL.
*/
NGHTTP2_EXTERN
const nghttp2_nv *
nghttp2_hd_inflate_get_table_entry(nghttp2_hd_inflater *inflater, size_t idx);
/**
* @function
*
* Returns the used dynamic table size, including the overhead 32
* bytes per entry described in RFC 7541.
*/
NGHTTP2_EXTERN
size_t nghttp2_hd_inflate_get_dynamic_table_size(nghttp2_hd_inflater *inflater);
/**
* @function
*
* Returns the maximum dynamic table size.
*/
NGHTTP2_EXTERN
size_t
nghttp2_hd_inflate_get_max_dynamic_table_size(nghttp2_hd_inflater *inflater);
struct nghttp2_stream;
/**
* @struct
*
* The structure to represent HTTP/2 stream. The details of this
* structure are intentionally hidden from the public API.
*/
typedef struct nghttp2_stream nghttp2_stream;
/**
* @function
*
* Returns pointer to :type:`nghttp2_stream` object denoted by
* |stream_id|. If stream was not found, returns NULL.
*
* Returns imaginary root stream (see
* `nghttp2_session_get_root_stream()`) if 0 is given in |stream_id|.
*
* Unless |stream_id| == 0, the returned pointer is valid until next
* call of `nghttp2_session_send()`, `nghttp2_session_mem_send()`,
* `nghttp2_session_recv()`, and `nghttp2_session_mem_recv()`.
*/
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_session_find_stream(nghttp2_session *session, int32_t stream_id);
/**
* @enum
*
* State of stream as described in RFC 7540.
*/
typedef enum {
/**
* idle state.
*/
NGHTTP2_STREAM_STATE_IDLE = 1,
/**
* open state.
*/
NGHTTP2_STREAM_STATE_OPEN,
/**
* reserved (local) state.
*/
NGHTTP2_STREAM_STATE_RESERVED_LOCAL,
/**
* reserved (remote) state.
*/
NGHTTP2_STREAM_STATE_RESERVED_REMOTE,
/**
* half closed (local) state.
*/
NGHTTP2_STREAM_STATE_HALF_CLOSED_LOCAL,
/**
* half closed (remote) state.
*/
NGHTTP2_STREAM_STATE_HALF_CLOSED_REMOTE,
/**
* closed state.
*/
NGHTTP2_STREAM_STATE_CLOSED
} nghttp2_stream_proto_state;
/**
* @function
*
* Returns state of |stream|. The root stream retrieved by
* `nghttp2_session_get_root_stream()` will have stream state
* :enum:`NGHTTP2_STREAM_STATE_IDLE`.
*/
NGHTTP2_EXTERN nghttp2_stream_proto_state
nghttp2_stream_get_state(nghttp2_stream *stream);
/**
* @function
*
* Returns root of dependency tree, which is imaginary stream with
* stream ID 0. The returned pointer is valid until |session| is
* freed by `nghttp2_session_del()`.
*/
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_session_get_root_stream(nghttp2_session *session);
/**
* @function
*
* Returns the parent stream of |stream| in dependency tree. Returns
* NULL if there is no such stream.
*/
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_stream_get_parent(nghttp2_stream *stream);
NGHTTP2_EXTERN int32_t nghttp2_stream_get_stream_id(nghttp2_stream *stream);
/**
* @function
*
* Returns the next sibling stream of |stream| in dependency tree.
* Returns NULL if there is no such stream.
*/
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_stream_get_next_sibling(nghttp2_stream *stream);
/**
* @function
*
* Returns the previous sibling stream of |stream| in dependency tree.
* Returns NULL if there is no such stream.
*/
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_stream_get_previous_sibling(nghttp2_stream *stream);
/**
* @function
*
* Returns the first child stream of |stream| in dependency tree.
* Returns NULL if there is no such stream.
*/
NGHTTP2_EXTERN nghttp2_stream *
nghttp2_stream_get_first_child(nghttp2_stream *stream);
/**
* @function
*
* Returns dependency weight to the parent stream of |stream|.
*/
NGHTTP2_EXTERN int32_t nghttp2_stream_get_weight(nghttp2_stream *stream);
/**
* @function
*
* Returns the sum of the weight for |stream|'s children.
*/
NGHTTP2_EXTERN int32_t
nghttp2_stream_get_sum_dependency_weight(nghttp2_stream *stream);
/**
* @functypedef
*
* Callback function invoked when the library outputs debug logging.
* The function is called with arguments suitable for ``vfprintf(3)``
*
* The debug output is only enabled if the library is built with
* ``DEBUGBUILD`` macro defined.
*/
typedef void (*nghttp2_debug_vprintf_callback)(const char *format,
va_list args);
/**
* @function
*
* Sets a debug output callback called by the library when built with
* ``DEBUGBUILD`` macro defined. If this option is not used, debug
* log is written into standard error output.
*
* For builds without ``DEBUGBUILD`` macro defined, this function is
* noop.
*
* Note that building with ``DEBUGBUILD`` may cause significant
* performance penalty to libnghttp2 because of extra processing. It
* should be used for debugging purpose only.
*
* .. Warning::
*
* Building with ``DEBUGBUILD`` may cause significant performance
* penalty to libnghttp2 because of extra processing. It should be
* used for debugging purpose only. We write this two times because
* this is important.
*/
NGHTTP2_EXTERN void nghttp2_set_debug_vprintf_callback(
nghttp2_debug_vprintf_callback debug_vprintf_callback);
#ifdef __cplusplus
}
#endif
#endif /* NGHTTP2_H */


DfT category suggester
Description of goods
try:
{{ example }}
,
domestic
international
We're
{{percentage}}%
confident that
‘{{description}}’
is
{{category}}


{% extends "base.html" %} {% block body %}
MetPetDB is a database for metamorphic petrology that is being designed and built by a global community of metamorphic petrologists in collaboration with computer scientists at Rensselaer Polytechnic Institute as part of the National Cyberinfrastructure Initiative and supported by the National Science Foundation.
This project will support the development, implementation and population of MetPetDB with the purpose of:


VERTIGO Fragments Of An Obsession by Ian Low
In the pantheon of film making, there are undoubtable classics that stand out as monumental artifacts of this art form. Some of these remain the standards where new films are measured against and even imitated upon. Citizen Kane, Casablanca and Lawrence of Arabia are such examples of a great tradition of movie making that have been widely praised, liked and even analyzed upon in countless books and articles. Yet, legendary as these films are, there is one motion picture that has reached the heights of such similar classic status, but still remains as one of the least conspicuous among its more illustrious peers. I am referring to Alfred Hitchcock's Vertigo.
Released to muted reviews and disappointing box office receipts, Vertigo has since gained much respect and admiration from all aspects of the film community. Ranging from film historians to the casual fan, Vertigo has now deservedly taken its place among Hitchcock's other classic films as one of the most intriguing of all thriller movies. And certainly, one of the most personal films ever to have emerged from arguably, the best director in this business. Beginning with this movie, Hitchcock managed to create a trilogy of films in successive years that is perhaps, the most remarkable ever attempted by any director. North By Northwest, Psycho and Vertigo feature frequently among critics' best of lists and represents the culmination of Hitchcock's prowess, as well as showcasing his brilliant skills as a film-maker and his extensive knowledge of the language of the cinema.
Part of the mystique of the movie stems from the fact that it is misleading the viewer right from the beginning, the plot seemingly about how James Stewart's character, Scottie Ferguson tries to prevent "Madeline", played by Kim Novak, from succumbing to a supernatural force that threatens to possess and ultimately, overwhelms her. This deception is carried on brilliantly by both the performances and the usually taut direction that Hitchcock imposes on the entire picture. It is not until the middle third of the movie, that Hitchcock surprisingly reveals the mystery in a fashion that completely catches the viewer off guard. From there on, the film shifts to a more personal tone of undesirable and questionable obsession on Scottie's part to transform Judy back into his dream woman that was "Madeline". Yet, the "Madeline" that he seeks never existed at all. It is this irony that provides this film with its unique, almost surrealistic tone and among Hitchcock's works, this is the film that is at once darkly depressing as it is revealingly autobiographical.
Jimmy Stewart has always been known to play the charming and effervescent American ordinary everyday guy, a role that is similarly typified by Tom Hanks today. His winsome smile garnered him with his only Academy award in The Philadelphia Story and his even more famous turn as George Bailey in Capra's It's A Wonderful Life cemented Stewart as the quintessential American hero.  But since he began to work with Hitchcock, Jimmy Stewart began a series of roles that played him against type and character.
In Rear Window, Stewart's L.B. Jefferies's character begins the film as a restless voyeuristic photographer. But by the end of the movie, one tends to forget this questionable aspect of his character as he manages to solve a murder mystery in the process. In Vertigo, however, Stewart plays a character that displays even more flaws then the Jefferies character could ever have. At the beginning, he faces seemingly increasing difficulty in overcoming his fear of heights that was triggered off by his guilt towards causing the death of a fellow police officer. Hitchcock then pulls off an incredible delusion to the audience by deliberately misleading us into thinking that Scottie Ferguson will conquer his fear by falling in love and by resolving the mystery that surrounds "Madeline".
For all his reputation for suspense and thriller films, Hitchcock's ultimate masterpiece does not focus on those two aspects as he does on the personal aspects of his two main characters in the picture. We are allowed a glimpse into the director's mindset and dare I say it, his emotions as he molded Scottie and "Madeline" into human beings that seem at once, frightfully true to life and yet, almost dreamlike in pure visual terms. As the audience, we can certainly identify with Scottie's pursuit of his perfect woman as at one time or another, each one of us had probably wanted to find that same person who can fulfill our ultimate fantasies. The difference is, Scottie manages to come close.
Only close, because his fantasy woman is after all, a masquerade fabricated by his longtime friend Gavin Elster to deliberately lead Scottie into his murderous scheme as an unknowing accomplice and also, as a convenient scapegoat and alibi. Judy, the woman who plays the role of "Madeline" is nothing like the "Madeline" that Scottie envisions. The real Judy is a more earthly woman that seems at once materialistic and bubbly, which contrasts strikingly with the icy cold blonde that is "Madeline", who simply emanates with stylish sophistication. But Scottie is never let into this revelation as early as the audience, so from the moment the truth is made known to the viewer, we are made to observe and follow his emotional trauma in losing "Madeline" and then the joy of rediscovering her in the form of Judy.
The beauty of the picture lies not in watching it for the first time, but from subsequent viewings, when the audience has the intimate knowledge of what has happened. The first half of the movie then takes on multiple layers of meanings and and it becomes a responsibility for the viewer to understand how difficult it is for Kim Novak to play Judy who herself is playing "Madeline". Her movements and gestures are even more impressive with the realization that she herself is putting up an act of deception and deceit. Yet, from the moment Scottie fishes her out of the waters of the Golden Gate bridge, the audience can almost identify with the extreme restraint that is evident in Judy's eyes and that keeps her from revealing herself to Scottie.
Later in Scottie's apartment, we are already well aware of the ruse that Judy is putting up for him. It is convincing to the point that the first time viewer is totally taken in by the deception. You could believe that she was suffering from amnesia, seemingly possessed by a "supernatural spirit" that guides her through the various locations of San Francisco. But seeing it the second time, notice how Novak manages to "act" surprised and shocked in waking up naked in Scottie's room. But for all intents and purposes, she "lets" him bring her there and even "lets" him undresses her in a deliberate attempt to delude him. Throughout the whole charade, Scottie is completely oblivious to the fact that she "knows". It is this idea of irony and deceptive role-play that gives this film an unusual aural of mystery and surrealistic romantiscm.
This is a romance that is unlikely, yet when it does finally occur, at the cliffs where Judy almost overacts her part, we are already under the impression that Scottie is in love with her. Simultaneously, we are equally convinced that Judy, masquerading as "Madeline" is also falling for him. The Hitchcockian touch at resolving this romance is sheer genius as it breaks new ground in the way it treat film lovers on screen. Electing not to provide an avenue for the doomed lovers to escape from, he decides to end the picture almost abruptly at the infamous bell tower scene. It is the same exact spot where earlier on, Scottie first witnesses the "suicidal" fall of Elster's real wife. The same exact scene where Scottie relives his guilt at being unable to prevent a certain death due to his vertigo.
A guilt which is unfairly burdened upon him the second time round as he is only playing a pawn in the midst of a greater murderous scheme. A scheme that involves Judy as "Madeline", a common girl hired by Elster because her looks probably resemble that of Elster's wife. A guilt which would be further complicated by the realization that Judy would herself find herself falling hopelessly for him. At the end of the picture, Hitchcock has to submit Scottie to one last trauma at the bell tower. Right at the moment when Scottie is faced with the most difficult decision of his life, of whether or not to bring Judy to justice or simply carry on the deception and let the past slip by. The appearance of the nun at the top of the bell tower is an inspired decision, a decision apparently made by Samuel Taylor, the main scriptwriter for the film.
A nun represents God, and if the ending is abrupt, the resolvement of Judy's involvement in the murder of the actual "Madeline" is to symbolize the cliched notion that criminals may escape the hands of the law, but not from the hand of God. Her apparent accidental fall may be even more symbolic in the sense that she is re-enacting what she was asked to do by Elster, to pretend to fall to her death to mask the death and murder of his actual wife. The terrific irony here again is she is not acting, but really "doing" it this time. Falling to her own death, which is as real as Elster's wife death was. With that, the film concludes with the everlasting image of Stewart's Scottie standing at the bell tower, looking down on the lifeless body of his de-mystified obsession, a woman who never existed for him. A woman who was manufactured for the purpose of a diabolical crime, and a woman who was in turn, re-manufactured by the very same man she was supposed to deceive.
The re-fashioning of Judy into "Madeline" is itself, worthy of much discussion. The main focal point becomes that of Judy being willing to subject herself to a second of time of role-playing. But whereas the first was due to financial and material benefits, possibly from Elster himself, the second was unquestionably due to the purpose of pleasing Scottie. For by the time she was "rediscovered", the audience can sense her love for him. This is most clearly demonstrated in her reluctance to leave him a goodbye note explaining the whole crime, and willing to play a second round of charade with Scottie. And even after voicing her objections to being remodeled, she eventually subjects herself to Scottie's almost unhealthy desire to see and possess "Madeline" back in the form of another woman who "happens" to look like her. This possession obsession at one time becomes almost surreal. Look at the scene when she finally emerges from the bathroom as the completed "product".
Roger Ebert calls this the single best shot or sequence that Hitchcock has ever done, and I am very inclined to agree. The ghostlike green glow serves as a haunting, almost hallucinating background to Novak's "Madeline" as she proceeds with almost torturous pace towards Scottie. Their eyes locked in almost twin emotions of elation and pain. Elation because both have ultimately satisfied each other's desires.  In a scene where there is no background or ambient noise, just images and Bernard Herrmann's stirring and hauntingly romantic score, it is the ultimate piece of pure cinema anyone has since or will ever conjure up. The moment the two tragic lovers lock and embrace, the camera circles around the both of them, and as it does so, images of San Juan Batista emerge from behind them, as if to indicate that the past has caught up with the present, and later will engulf them to a powerfully emotional and tragic end. Yet, Scottie clings on to her as if he never has lost her, and he is at once willing to believe that she is the same "Madeline" that he has fallen for during the first part of the film. He hesitates only for a brief moment, but once he is convinced that she is "genuine", he embraces her with the utmost of passion that has yet been captured on celluloid.
Perhaps, the optimist would have hoped the film should have ended there. But then, there is always the moral issue of not letting characters getting away with blatant crime, especially when it involves murder. For us, for Hitchcock, the resolution of this film represents one of the best climatic endings to a motion picture. Dark, emotional, tense and frightful, these are the emotions that one goes through together with the two leads as they ascend the steps of the bell tower. Of course, the innovative "Vertigo" shot heightens the tension and gives us a visual simulation of what Scottie is feeling as he looks down towards the depths of the stairs. As Scottie unravels the truth, a truth where Novak's character and the audience are already well aware of, we see his expression of anger and of passion at the same time. Emotions which would have been overplayed by any other actor, Jimmy Stewart manages to convince us equally of his confusion, his guilt, his hurt and his ultimate love for a fabled "woman" from which there is no turning back from. As he reaches the top, he is ultimately faced with his own strong belief of upholding the law, and his equally passionate feelings for a woman who has deceived him and yet, now offer the only real hope of redemption and his only compromised opportunity for a perfect love. And as he contemplates his decision for either justice or love, he is cruelly robbed of that decision as Judy accidentally plunges towards her own demise, a justice meted out by perhaps, in equally "supernatural" manner.
As a motion picture, Vertigo possesses all the necessary technical credentials for a 1958 film. George Tomasini's taut editing, Robert Burks's elegant cinematography, Saul Bass's innovative and hypnotic title designs and of course, Herrmann's score. The importance of how music affects a film has never been understated. Yet somehow, Herrmann's musical soundtrack manages to bring images that Burk's camera could not even capture. The haunting title theme elicits both terror and romance simultaneously, and it is this musical picture that gives the audience a glance into the movie's contents right at the beginning of the credits. Coupled this with the eerie logos supplied creatively by Bass and extreme close-ups of the woman's lips and eye, Vertigo manages to evoke the entire atmosphere of the film in the first few minutes. Herrmann's score is never catchy or tuneful, just long stretches of mesmerizing moods and ambience that complements both story and performances to perfection. At times overbearing, at times tender, this is music that lives up to the high expectations of the director and his actors. Pure cinema such as this could not have been created without the musical strains of Bernard Herrmann and the striking photography of Burk and Hitchcock.
Artistically, films like Citizen Kane and A Birth Of A Nation may have displayed much more cinematic invention in terms of camera techniques and other technical innovations. Vertigo however, propels the film medium further by taking the established cinematic approaches and transcends them by exploring the human emotion on celluloid. To accomplish this requires a director of immense knowledge and skill, and a touch of brilliance. Further, a set of actors who are able to translate the written script into film and then expand on it by giving their own unique touch of humanity and expression. Alfred Hitchcock, James Stewart and Kim Novak together with Samuel Taylor and the crew of Vertigo created a cinematic milestone in 1958 and like the aforementioned film classics, it ranks as a motion picture masterpiece worthy of the highest accolades. In generations to come, Vertigo will only serve as a reminder to the art of the motion picture ... or in Hitchcock's preference, the art of pure cinema.
Ian Low 9th September 1999
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Before Change
Data with added EEG reference channels.
// Check to see that data is preloaded
if not inst.preload:
raise RuntimeError("Data needs to be preloaded.")
if isinstance(ref_channels, str):
ref_channels = [ref_channels]
elif not isinstance(ref_channels, list):
raise ValueError("`ref_channels` should be either str or list of str. "
"%s was provided." % type(ref_channels))
for ch in ref_channels:
After Change
if isinstance(inst, BaseRaw):
inst._cals = np.hstack((inst._cals, [1] * len(ref_channels)))
for pi, picks in enumerate(inst._read_picks):
inst._read_picks[pi] = np.concatenate([picks, [np.max(picks) + 1]])
inst.info._check_consistency()
set_eeg_reference(inst, ref_channels=ref_channels, copy=False)
return inst


Naija News understands that the video was shot in a clinic, it is however not sure if the clinic was in the school.
Naija News also learnt that girl in the sex tape is the daughter of a senior pastor of Calvary Bible Church.
The video, which shows the couple have both penetrative sex and oral sex, is too graphic and cannot be shared here.


NMF algorithm
Posted: 2016-04-22 , Modified: 2016-04-22
Tags: NMF
Posted: 2016-04-22 , Modified: 2016-04-22
Tags: NMF
The setup for alternating minimization is as follows.
The plan is to show this satisfies the conditions needed for approximate gradient descent: each step is correlated with the right direction. We want to find \(\al,\be,\ep\) so that \[ \an{g,A-A^*} \ge \al \ve{A-A^*}^2 + \be \ve{g}^2 - \ep\] (for some norm).
We have to be careful about 2 things.
We proceed in 2 lemmas.
As a first step, show that \[\an{\EE_y \pa{-y\odot \pa{\rc{Ax} -\rc{A^*x}}x^T} , A-A^*}>0.\]
using \(\E y = A^* x\).
Now relax \(x\approx x^*\). (Warning: \(x^*\) simply being close may not imply convergence to \(A^*\) without additional assumptions on \(A^*\), because of nonuniqueness.) \[\begin{align} \EE_{x,y} \an{-D yx^T, A-A^*} &= \EE_{x,y} [-y^T D(A-A^*) x]\\ &= \EE_{x,y} [-y^T DA^*x]-1\\ \end{align}\]The dependencies of the random variables are \(x^* \to y \to x\) (\(\E_y = A^*x^*\)). We can’t simply replace \(\E y = A^*x^*\) because we have to average over \(x\) first, which depends on the decoding. (If we could replace \(y\) like that, we get \(\an{x,x-x^*}_M\).)
Recall that if we’re decoding by multiplying by \(B\), we also have to threshold, \(\text{Th}(Bx)\).
In Theorem 4.1, if \(A\) is biased, then we instead obtain a bound \[ (By)_i - \E x_i = \ub{(By)_i - BA^*x}{\text{w.h.p. }\le 2\la(A) \sfc{\ln r}{n}} + B(A^*-A) x^*. \] For the second term, \[ \ve{B(A-A^*)x}_{\iy} \le |B|_{\iy} \max_i \ve{A_{\cdot i} - A_{\cdot i}^*}_1 \le \la \ep.\] We want to lower bound \[\begin{align} \an{\nb A, A-A^*} &= \sum \fc{y_iA_{ij}^*}{(Ax)_i} - 1\\ &= \sum_i \fc{y_i(A^*x)_i}{(Ax)_i} - 1\\ &= \sum \fc{b_i(A^* x)_i}{(Ax)_i} + \sum_i \fc{(A^*(x^*-x))_i (A^*x)_i}{(Ax)_i} + \sum_{i,j} \pa{(A^*x)_i\sfc{(Ax)_j}{(Ax)_i} - (A^*x)_j\sfc{(Ax)_i}{(Ax)_j}}^2. \end{align}\]We may suppose \(\ve{A_{\bullet i} - A_{\bullet i}^*}\le \rc{\poly\log(n)}\), or something like this.
Try 2: INCORRECT: I mixed up \(x,x^*\) here. \[\an{\nb A, A-A^*} = \an{\pa{y_i \sfc{(Ax)_j}{(Ax)_i} - y_j \sfc{(Ax)_i}{(Ax)_j}}_{ij}, \pa{(A^*x)_i \sfc{(Ax)_j}{(Ax)_i} - (A^*x)_j \sfc{(Ax)_i}{(Ax)_j}}_{ij}}. \] It’s tempting to take \(\E_y\) first, but we can’t do that.
If \(x=x^*, y= A^*x^*\) then we write this as a sum of squares above. (This is probably the same as writing \(\ve{x}_M^2\) from the previous section…) This is Lagrange’s identity.
We want to lower-bound by \[ \al \ve{A-A^*}_F^2 + \be \ve{\pf{y_i}{(Ax)_i}}_2^2 \ve{x}_2^2 - \ep. \]
(5-12)
Idea: use a different potential function. \(L^2\) doesn’t make so much sense here.
Suppose \(x= (1)\) and do MWU. The gradient is \[-\diag\prc{Ax} yx^T = -\fc{y}{a}.\] We get \[a_i' = \fc{a_ie^{-\eta \fc{y_i}{a_i}}}{\sumo kn a_ke^{\eta \fc{y_k}{a_k}}}.\] The metric is \[d_{KL}(y,a) = \sumo in y_i \ln \pf{y_i}{a_i}.\] The decrease is \[\begin{align} d_{KL}(y,a) - d_{KL}(y,a') &= \sumo in y_i \ln\pf{a_i'}{a_i}\\ &=\sumo in y_i \ln \fc{e^{\eta\fc{y_j}{a_j}}}{\sumo jn a_j e^{-\eta \fc{y_j}{a_j}}}\\ &=\sumo in y_i \ln e^{\eta \fc{y_j}{a_j}} - \ln \sumo jn a_j e^{-\eta\fc{y_j}{a_j}} \end{align}\]Sanity check: For \(\eta\to 0\), this is \(\eta(\sum \fc{y_i^2}{a_i}-\sum y_i)>0\) by \(T_2\)’s inequality.


Getting StartedQueryWorkbenchGetting StartedQueryWorkbenchHI, {{ $ctrl.currentUser.username }}!
Sign In
Create an account
User Profile
Create a new project
Sign Out
User Guide
Frequently Asked Questions
Technical Documentation
Application Programming Interface
Contact Us


Defines the AllowedResponseActions property. Defines the AllowedResponseActions property.
Defines the ArchiveTag property. Defines the ArchiveTag property.
Defines the Attachments property. Defines the Attachments property.
Defines the Body property. Defines the Body property.
Defines the Categories property. Defines the Categories property.
Defines the ConversationId property. Defines the ConversationId property.
Defines the Culture property. Defines the Culture property.
Defines the DateTimeCreated property. Defines the DateTimeCreated property.
Defines the DateTimeReceived property. Defines the DateTimeReceived property.
Defines the DateTimeSent property. Defines the DateTimeSent property.
Defines the DisplayCc property. Defines the DisplayCc property.
Defines the DisplayTo property. Defines the DisplayTo property.
Defines the EffectiveRights property. Defines the EffectiveRights property.
Defines the EntityExtractionResult property. Defines the EntityExtractionResult property.
Defines the ExtendedProperties property.
Defines the Flag property. Defines the Flag property.
Defines the HasAttachments property. Defines the HasAttachments property.
Defines the IconIndex property. Defines the IconIndex property.
Defines the Id property. Defines the Id property.
Defines the Importance property. Defines the Importance property.
Defines the InReplyTo property. Defines the InReplyTo property.
Defines the InstanceKey property. Defines the InstanceKey property.
Defines the InternetMessageHeaders property. Defines the InternetMessageHeaders property.
Defines the IsAssociated property. Defines the IsAssociated property.
Defines the IsDraft property. Defines the IsDraft property.
Defines the IsFromMe property. Defines the IsFromMe property.
Defines the IsReminderSet property. Defines the IsReminderSet property.
Defines the IsResend property. Defines the IsResend property.
Defines the IsSubmitted property. Defines the IsSubmitted property.
Defines the IsUnmodified property. Defines the IsUnmodified property.
Defines the ItemClass property. Defines the ItemClass property.
Defines the LastModifiedName property. Defines the LastModifiedName property.
Defines the LastModifiedTime property. Defines the LastModifiedTime property.
Defines the MimeContent property. Defines the MimeContent property.
Defines the NormalizedBody property. Defines the NormalizedBody property.
Defines the ParentFolderId property. Defines the ParentFolderId property.
Defines the PolicyTag property. Defines the PolicyTag property.
Defines the Preview property. Defines the Preview property.
Defines the ReminderDueBy property. Defines the ReminderDueBy property.
Defines the ReminderMinutesBeforeStart property. Defines the ReminderMinutesBeforeStart property.
Defines the RetentionDate property. Defines the RetentionDate property.
Defines the Sensitivity property. Defines the Sensitivity property.
Defines the Size property. Defines the Size property.
Defines the StoreEntryId property. Defines the StoreEntryId property.
Defines the Subject property. Defines the Subject property.
Defines the TextBody property. Defines the TextBody property.
Defines the UniqueBody property. Defines the UniqueBody property.
Defines the WebClientEditFormQueryString property. Defines the WebClientEditFormQueryString property.
Defines the WebClientReadFormQueryString property. Defines the WebClientReadFormQueryString property.
The indexed property to register.
SchemaClass calling this method - workaround for fieldUri registration oterhwise it registers super/parent class static properties as well. TypeScript does not provide a way to detect inherited property, hasOwnProperty returns true for parent static property
The property to register.
Registers properties.
SchemaClass calling this method - workaround for fieldUri registration oterhwise it registers super/parent class static properties as well. TypeScript does not provide a way to detect inherited property, hasOwnProperty returns true for parent static property
The property to register.
SchemaClass calling this method - workaround for fieldUri registration oterhwise it registers super/parent class static properties as well. TypeScript does not provide a way to detect inherited property, hasOwnProperty returns true for parent static property
The property to register.
Indicates whether the property is internal or should be visible to developers.
Name of the XML element.
The property definition.
True if property definition exists.
The URI.
Property definition.
Generated using TypeDoc
Represents the schema for generic items. Represents the schema for generic items.


crossValidate Cross validate prtAction using prtDataSet and cross validation keys.
OUTPUTDATASET = OBJ.crossValidate(DATASET, KEYS) cross
validates the prtAction object OBJ using the prtDataSet
DATASET and the KEYS. DATASET must be a labeled prtDataSet.
KEYS must be a vector of integers with the same number of
elements as DataSet has observations.
The KEYS are are used to parition the input DataSet into
test and training data sets. For each unique key, a test set
will be created out of the corresponding observations of the
prtDataSet. The remaining observations will be used as
training data.
[OUTPUTDATASET, TRAINEDACTIONS] = OBJ.crossValidate(DATASET,
KEYS) outputs the trained prtAction objects TRAINEDACTIONS.
TRAINEDACTIONS will have a length equal to the number of
unique KEYS.
Help for prtAlgorithm/crossValidate is inherited from superclass prtAction


The Portfolio
Browse through the Site Name Portfolio below.
Browse through the Site Name Portfolio below.
Here is some more information about this image that is only revealed once clicked on.
Here is some more information about this image that is only revealed once clicked on.
Here is some more information about this image that is only revealed once clicked on.
Here is some more information about this image that is only revealed once clicked on.
Here is some more information about this image that is only revealed once clicked on.
Here is some more information about this image that is only revealed once clicked on.
Here is some more information about this image that is only revealed once clicked on.
Here is some more information about this image that is only revealed once clicked on.
Here is some more information about this image that is only revealed once clicked on.


|
My Project
|
Module for creating the cartesian topology of the MPI processes and subcommunicators. More...
Data Types | |
| type | cart_comm_1d |
| Type variable for the information of 1D communicator. More... | |
Functions/Subroutines | |
| subroutine, public | mpi_topology_create () |
| Create the cartesian topology for the MPI processes and subcommunicators. | |
| subroutine, public | mpi_topology_destroy () |
| Destroy the communicator for cartesian topology. | |
Variables | |
| integer(kind=4), public | mpi_world_cart |
| Communicator for cartesian topology. | |
| integer(kind=4), public | nprocs |
| integer(kind=4), public | myrank |
| Number of processes and rank ID in MPI_COMM_WORLD. | |
| integer(kind=4), dimension(0:2), public | np_dim |
| Number of MPI processes in 3D topology. | |
| logical, dimension(0:2), public | period |
| Periodicity in each direction. | |
| type(cart_comm_1d), target, public | comm_1d_x |
| Subcommunicator information in x-direction. | |
| type(cart_comm_1d), target, public | comm_1d_y |
| Subcommunicator information in y-direction. | |
| type(cart_comm_1d), target, public | comm_1d_z |
| Subcommunicator information in z-direction. | |
Module for creating the cartesian topology of the MPI processes and subcommunicators.
This module has three subcommunicators in each-direction and related subroutines.


All of the data for tools and course modules are part of thin data gathered using syncthing from schools through internet and manually by our filed tech team somtimes. Tools data correspond to json files logged whenever a student accesses tools section of platform and course module data are from progress csv’s generated every hour capturing activity on course module.
Yes, for some measures this is true. These specific cases are clearly mentioned in the visualisation notes and the documentation. In these cases the graph is meant to be used to compare numbers across different tools or courses in a given school.
There is data source section in this website, where you can download underlying data for these visualisations. These datasets are granular enough to arrive at numbers on visualisations, can easily check for some cases manually in csv files.
This is just not to clutter graph with insignificant numbers. We choose top fifty schools based on the measure under consideration.
Right now this is not available. We will try to accoomodate that in future.


--- layout: default title: "404: Page not found" permalink: 404.html ---
The page you're looking for is on the Dark Side of the Moon.XD
Pink Floyd
/\ ___---
------/ \---
-----/ \---------
-----/ \---___
/ \ ---
/__________\
unknown Head back home to try finding it again.


Product Analyst - New York, NY
About Bread
Bread is a technology company that aims to transform the world of paper credit card applications and hidden interest rates by providing leading point-of-sale financing options for merchants across the e-commerce journey. We build tools, technologies and APIs that allow merchants to integrate an installment loan financing and checkout experience anywhere in their customers' shopping journey. Bread was started in 2015 by financial technology veterans, and has experienced explosive growth to date. We're backed by top investors including Menlo Ventures, Bessemer Venture Partners, Kinnevik, among others.
Responsibilities
As a key member of our Analytics team, this role will work closely with our Product team to develop, improve, and optimize our software. This will involve both 'teaching them to fish' through coaching, reporting, and self-service tools, as well as 'fishing' by providing your own analysis and insights. Responsibilities will span the entire product development lifecycle:
Idea Generation: Analyzing both our B2B and B2C funnels, identifying weak points and brainstorming ways to improve UX and conversion
Prioritization: Working with company leadership, including the C-suite, to identify the highest ROI projects
Product Development and Testing: Collaborating with Product and Engineering as a statistics expert on A/B tests
Product Launch: Building out reporting to monitor the adoption and health of a feature in the wild
Customer Behavior: Conducting in-depth analysis of our customers and how they interact with our existing product
As part of a small team, you'll occasionally take on generalist analytics projects outside of Product, for example, related to customer service or merchant success. This will originally be an individual contributor role, however, there may be opportunities to manage other analysts as the team grows.
Qualifications
2-4 years of experience analyzing product or customer data at a software company
BA in a quantitative field: Stats, Finance, Economics, Math, or Computer Sciences are preferred
Fluency in SQL
Some experience in least one functional programming language, especially R or Python
A working knowledge of statistics, i.e. confidence intervals and linear regression
Experience with funnels and event tracking software, i.e. Heap or Mixpanel
Strong interpersonal skills
Bonus Points
An advanced degree
Experience in financial services or credit
Experience with both B2B and B2C data
Experience with any of our specific analytics stack: Redshift, Postgres, R, Github, Heap, Looker, Zendesk, and Salesforce
Experience with survey data and software
Familiarity with an agile working environment


Cabinets of curiosities (also known in German loanwords as Kunstkabinett, Kunstkammer or Wunderkammer; also Cabinets of Wonder, and wonder-rooms) were notable collections of objects.
The term cabinet originally described a room rather than a piece of furniture. Modern terminology would categorize the objects included as belonging to natural history (sometimes faked), geology, ethnography, archaeology, religious or historical relics, works of art (including cabinet paintings), and antiquities. The classic cabinet of curiosities emerged in the sixteenth century, although more rudimentary collections had existed earlier. In addition to the most famous and best documented cabinets of rulers and aristocrats, members of the merchant class and early practitioners of science in Europe formed collections that were precursors to museums.


--- layout: home ---
If machines are being run on biased data what does that mean for the future of humanity? Especially for those who are targeted? The goal of this project is to highlight and stress the importance of human bias in datasets and what that could mean when it comes to the future of technology.
What does the future look feel like when systems from the government are running on biased data? SAL demonstrates the dangers of biased data in technology. It watches and examines the user all throughout the project and judges them based on corrupt datasets.
I used ML5 and Face++ to help build the profile of the user. ML5 (PoseNet) was used to watch the users movements for certain poses and behavior. Face++ was used to set the users score and estimate their age, race, and gender.
Initially I wanted to have a one page design with the information displayed but the format became very cluttered when prototyping. So, after some revision I settled on a single page with tabs to display different pieces of information relative to the user. This is currently what I've settled on but it is subject to change and I will update this page if it does.
In order to make sure the user experiences some biases I added a single if/else statement to the code to determine the outcome from the beginning. When the user takes their picture SAL will analyze them and determine their race. If they're identified as white they automatically pass. Also, during the pledge of allegiance, SAL takes a photo of the user and if they have their hand over their chest they gain extra points. This was just for the sake of the prototype, in the future iteration the final outcome will be based on various other factors as well.
During the Thesis Popup show I was able to get a lot of feedback from various testers. The main problem I was encountering was that the instructions weren't clear enough. Which often caused the message to get lost through the process. Also, I was told frequently to push it further and make the bias more subtle and not so much in your face. It took away from the purpose and the National Anthem along with the Pledge made it seem like too much of a joke for some users. I have to find the right balance of satire to add to the project.
By making the process extremely bias I was able to have the users experience and feel how it feels to be ruled out by a machine but the approach didn't allow them to feel it the right way. The directness of the bias made it not as impactful. Moving forward I plan on implementing this in a far more subtle and realistic manner.


I'm more of a live-in-the-moment type of person, however, looking forward my immediate goal is to finish this program successfully and hopefully find a good paying job that I can build a career from. I would really like to go to a Blizzcon one of these days but most importantly I'd really love to go visit Japan during the rainy season. Eventually I'd like the opportunity to see my children married and, if I live long enough, bounce a grandchild on my knee.


{% extends "base.html" %} {% block content %}
This application provides helpful financial information for Cottage Labs accounting.


Cupcake the therapy poodle visits patients in hospital to help them feel better
When Karen Simmons, 62, developed epilepsy and had to retire from her job in the ambulance service, her 11 dogs helped her keep going.
But she noticed that one of her pooches, Cupcake, was particularly good in stressful situations.
She decided that Cupcake would make a great therapy dog and now the poodle visits care homes and hospitals to make patients feel better.
Seven-year-old Cupcake has been a therapy dog for four years now and her striking appearance never fails to make people smile.
Cupcake visits the Lister hospital in Stevenage, Hertfordshire, where she puts a smile on both staff and patients’ faces.
Karen, from Cheshunt, Hertfordshire said: ‘As we walk through the hospital corridors, there is a sea of smiles and it makes me happy knowing we are cheering other people up.
‘Cupcake is an amazing dog who is calm and obedient – she is perfect for the job.
Advertisement Advertisement
‘She loves meeting new people, but she is so well trained and would never jump up or bark, she knows exactly how to behave in the hospitals.
‘She goes from patient to patient and puts her head on their laps and it puts a huge smile on their face.’
Karen developed the long-term condition epilepsy in 2012 and had to give up her job but Cupcake and the others helped her.
When she started to improve, she wanted to do something to carry on helping people.
She continued: ‘I was determined to keep on doing my bit to help other people and considering I love dogs so much it only seemed right to appoint the calmest poodle for the job.
‘She has always had something special about her and a natural ability to remain calm in stressful situations.’
Cupcake is registered with Therapy Dogs Nationwide – a charity which assesses dogs and owners for voluntary roles in hospitals, elderly homes and schools.
They have a team of 12 therapy dogs to mentally stimulate, entertain and distract the patients.
All dogs have been vaccinated and patients must use anti-bacterial gel before and after stroking to avoid passing germs between patients.
Karen said: ‘We previously used to visit in nursing homes, so Cupcake is excellent with the elderly – many of which have dogs of their own at home.
‘A visit from Cupcake helps them when they are missing their pet and allows them to forget they are in hospital for a while.
Advertisement Advertisement
‘It is fantastic to see patients’ faces light up as she walks in the room and they are always impressed with her coat.’
‘It can be hot in the hospital, so I have to keep on top of her grooming, but I recently started experimenting with colours which the patients adore.’
Jane Shaw, who is the Patient Experience Project Coordinator, at the Lister Hospital, said: ‘Hospital days can be long and a bit boring for patients, but a visit from Cupcake and the other dogs is a real highlight.
‘Patients’ faces light up when they see Cupcake and her visits give them a touch of normality and helps alleviate stress and anxiety.
‘Sometimes staff tell us that the first time they have seen a smile from a patient is when Cupcake walks on to the ward.
‘It isn’t just the patients, but the staff too who are thrilled to see Cupcake.
‘They have very busy and intense jobs and seeing Cupcake gives them a moment to regroup and re-energise before they return to a busy day.
‘Cupcake and the other dogs brighten up everyone’s day and we are so grateful for their visits.’


The Early Novels Database (END) "generates high-quality metadata about novels published between 1660 and 1850 in order to make early works of fiction more available
to both traditional and computational modes of humanistic study."
This visualization utilizes a 1700-1790 subset of the metadata to computationally explore connections
between the early novel and any epigraphs within.
The visualization’s design was inspired by the open-source HBO Recycling Program visualization.


A channel to discuss trading. For useful links and more info click the pinned messages to the right.
100 messages
Before 05-Dec-19 12:00 AM
hyperDEX26-Jun-19 11:33 AM
We just need 1000 people with 0.1BTC and we all market buy at the same time
Cryptoon26-Jun-19 11:34 AM
Tell me when
hyperDEX26-Jun-19 11:34 AM
I wish i could afford lamb, im down to stale ramen
Hollowman900026-Jun-19 11:34 AM
Guess I trolled a little hard last night
2
2
Tek26-Jun-19 11:35 AM
lmao
Hollowman900026-Jun-19 11:35 AM
Some tears in DM
3
3
2
hyperDEX26-Jun-19 11:35 AM
Has anyone looked at Tesla?
That’s the tankening?
There needs to be more blood if that’s nightmarish
Weak stomaches
grewalsatinder26-Jun-19 11:50 AM
For the best secure phone, go to a local mobile shop and ask:
"I need a phone which doesn't have:
- sim
- esim
- gps
- microphone
- wifi
- bluetooth"
You'll get a landline.(edited)
1
Cryptoon26-Jun-19 11:51 AM
are landlines still a thing even? Thought those were mostly voip devices anyway nowadays
grewalsatinder26-Jun-19 11:51 AM
may be for some who doesn't have mobiles
Hollowman900026-Jun-19 11:52 AM
Secure phone, hollotel
grewalsatinder26-Jun-19 11:52 AM
I remember about half my life in India I used PCO and ISD for local and remote calls.
To date, 126 million units of Nokia 3310 has been sold worldwide. The Nokia 3310 is a GSM mobile phone announced on 1 September 2000, and released in the fou...


Are you sure?
Yes! Humans vibrate while asleep - due to heartbeats, snoring, breathing, etc. Spiders treat vibrations as a danger signal, and so would quickly retreat from a slumbering body. In addition, beds don't feature any spider-friendly prey - so there is no motivation for the spider to come on to you.
Spider experts concede that a sleeping person could swallow a spider, but it would be a strictly random and extremely unlikely event.
References
- Scientific American - Fact or Fiction? People Swallow 8 Spiders a Year While They Sleep
- Cracked - The 6 Most Frequently Quoted Bull**** Statistics


Your tweet should include:
#WomenToTech #mentor
Let us know that you're signing up to our platform as a mentor
{% elif request.url_rule|string == url_for('showMenteeSignup')|string %}#WomenToTech #Mentee
Let us know that you're signing up to our platform as a mentee
{% endif %}-langs:
{% if request.url_rule|string == url_for('showMentorSignup')|string %}Let us know which languages you know
{% elif request.url_rule|string == url_for('showMenteeSignup')|string %}Let us know which languages you know or are learning
{% endif %}-skills:
{% if request.url_rule|string == url_for('showMentorSignup')|string %}Let us know what other programming skills you have
{% elif request.url_rule|string == url_for('showMenteeSignup')|string %}Let us know what other programming skills you have or want to improve
{% endif %}-offer:
Let us know what type of help you would be able able to offer your mentee
{% elif request.url_rule|string == url_for('showMenteeSignup')|string %}-seek:
Let us know what you are looking to get out of the mentoring relationship
{% endif %}


Today Mexican authorities announced the capture of Joaquin "Chapo" Guzman Loera, the alleged leader of the Sinaloa Cartel. The Sinaloa Cartel is designated a Significant Foreign Narcotics Trafficker by the U.S. Government.
Attorney General Holder stated: "Today's apprehension of Joaquin "Chapo" Guzman Loera by Mexican authorities is a landmark achievement, and a victory for the citizens of both Mexico and the United States. Guzman was one of the world's most wanted men and the alleged head of a drug-running empire that spans continents. The criminal activity Guzman allegedly directed contributed to the death and destruction of millions of lives across the globe through drug addiction, violence, and corruption. We salute the Government of Mexico, and the professionalism and courage of the Mexican authorities, for this arrest. We are pleased that we were able to work effectively with Mexico through the cooperative relationship that U.S. law enforcement agencies have with their Mexican counterparts. We look forward to ongoing cooperation, and future successes."
Secretary of Homeland Security Johnson stated: "The operation led by the Mexican government overnight to capture Joaquin "Chapo" Guzman Loera is a significant victory and milestone in our common interest of combating drug trafficking, violence and illicit activity along our shared border. We congratulate our Mexican partners in this achievement and we will continue to work collaboratively with them to ensure a border region that is safe and secure, for the communities and citizens of both our nations."


About Us
PREBOOMING is one of the most professional water sports goods like the snorkeling ,diving ,surfing and swimming products manufacturer in China. We design, produce and sell full face snorkeling masks, snorkeling fins, diving wetsuit, diving mask&fin&snorkel, neoprene gloves, neoprene boots, sup, surfboard leash, rash guard, swimming goggles and swimming caps.
Nowadays, PREBOOMING has customers in USA, Europe, South America, Australia, New Zealand ,Canada,etc. We could do OEM and ODM service for you. Olny you have any requirements,please let us know and feel free to contact us. Thank you.


Polar Blue is currently building a game engine for our original pre-medieval video game, Andromeda
See Our WorkApp Development Team is currently on reserve until we people to work on apps.
See Our WorkThis team is currently working on a laser tag system. Check out what they have come up with so far.
See Our Work


BREAKDOWN A film review by Michael John Legeros Copyright 1997 Michael John Legeros
(Paramount) Directed by Jonathan Mostow Written by Jonathan Mostow and Sam Montgomery, based on the story by Mostow Cast Kurt Russell, J.T. Walsh, Kathleen Quinlan, M.C. Gainey, Jack Noseworthy, Rex Linn, Ritch Brinkley MPAA Rating "R" (presumably for violence and language) Running Time 95 minutes Reviewed at General Cinemas at Pleasant Valley, Raleigh, NC (26APR97)
==
Here's something that you don't see every day: a Hollywood action- thriller that knows when to say when. Never-aging actors Kurt Russell and Kathleen Quinlan play a California-bound couple, whose bright red, brand-spanking-new Jeep Cherokee (with Massachusetts plates) breaks down on a secondary road, somewhere in the Southwest. A trucker (J.T. Walsh, Our Favorite Heavy) stops and offers them a ride. She goes, he stays, and, not much later, she's nowhere to be found. Russell goes slightly nuts, flags down the trucker, and hears those words that we never want to hear outside of a movie theater: "I've never seen you before in my life." And you can take it from there. (Or watch the trailer, which reveals a bit more.)
BREAKDOWN is balanced on every front, from pacing to photography to suspense to sound effects. (Is there a sweeter music than that of the shifting of truck gears?) Most impressive: director and co-screenwriter Jonathan Mostow actually allows his everyman hero to *behave* like an everyman. (Well, okay, Russell does impersonate Indiana Jones in one scene.) This guy has to think on his feet and, often, he's at a loss for what to do. And while some of his decisions are better than others, *all* of our hero's actions are based on such determined determination that you may catch yourself trying to talk back to the screen! "No, don't do that, do this!" Just rent the whole damn theater for yourself.
Superb.
Grade: A
--
Mike Legeros - Movie Hell http://www.n-vision.com/hell
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


A shrivelled and panting urchin with a corkscrew haircut turned up at Haemoglobin Towers this morning with the latest news of Mrs Gubbins, who we last heard from on 28th April. Apparently, a second raid on her hideout by the Blister Lane Constabulary Dangerous Python Squad was partly successful. Most of the octogenarian fugitive's “minders” perished after being attacked by the snakes and their robot-controlled metal counterparts. Astonishingly, Mrs Gubbins herself made a daring getaway, using her crutches in an inventive way which the urchin was unable to divulge, either through ignorance or inarticulacy. He was able to inform us, however, that our pal has taken refuge in the Tent of the Tundists, who have vowed to protect her if she embraces Tundism. We have sent a greetings card to her. It shows a picture of a decidedly inelegant giraffe standing next to some beetles. Mrs Gubbins is fond of beetles.


Default styling
Variations:
.testVariation
to test
.testVariation.test2Variation
two variation test
:hover
with hover
:focus
with focus
.text:hover
tricky


In the previous episode, we took a look at the ARM template schema, some of the tools that will help get you started in your ARM template journey, and deployed our first template. In this installation, we’ll take a deeper dive into some of the development methods and strategy.
Define Template Scope
Before developing a template, it’s important to define the scope of the template. In extreme cases, this could be the difference between the idea of an “infrastructure in a box” where you deploy a single template for your entire infrastructure vs. deploying separate templates for each resource type as you would in the Portal. Like most things, I think the best strategy is somewhere in the middle, and depends on your needs.
Generally, a good start is to begin your scope at the Resource Group level (however, it is possible to deploy to multiple Resource Groups). Some other things to think about when scoping the template are the region, life-cycle, deployment frequency, resource types, and purpose, of the resources.
For example, we may have an application that requires multiple Virtual Machines with separate roles. The architecture calls for 2 front-end servers, 2 application servers, and 2 back-end servers. You could deploy all 6 servers with a single template, but that could get convoluted and doesn’t provide the flexibility to easily redeploy a single tier. In this case, we can scope the templates to the tier level and separate out the 3 tiers into 3 templates.
Define Resource Property Values
With the template scope defined, the next step is to define the resource property values. These are the settings applied to Azure resources, like a Virtual Network’s address space, or a Virtual Machine’s OS.
Parameters can be used to define values that can change between deployments. The more parameters defined, the more dynamic the template becomes. Resource names are a great example of values that are generally set as parameters.
Variables can be used to reference hard-coded values that can be used multiple times throughout the template and are not going to change throughout deployments. However, defining a resource property as a variable allows us to easily change the value at a later point in time if needed.
Hard-coded values can be used to define settings that are not changing between deployment and are not going to change.
Define a Folder Structure
Determining an organized folder structure can be extremely valuable when developing your templates. As you start digging into more complex templates with multiple references, it’s easy to lose track of your files and end up with code sprawl.
Generally, I start by creating a root folder with a name that specifies the purpose of the template.
Inside the root folder, I place the template “azuredeploy.json” file, along with dedicated folders for the additional files that will be referenced by the template. The “parameters” folder for instance, contains any of the parameters files that are used to deploy the template. Multiple sets of parameters files can be stored inside this folder for separate deployments.
Understanding ARM API Versions
Each resource defined in a template contains an API version reference . Understanding how Azure manages these API versions can save you a lot of headache. Azure releases new API versions that include the latest features or settings available for a resource. However, it’s important to note that when a new API version is released, only certain Azure resources will be included in the release. This means that we can’t just grab the latest API version available and use that value for every resource in the template. It’s important to keep track of these API releases and ensure that templates are kept up to date.
The Azure team maintains a public GitHub repository of the ARM API versions available.
https://github.com/Azure/azure-resource-manager-schemas/tree/master/schemas
Additionally, you can download the deployment schema from the link below and search for the specific resource type and API versions available for that resource.
https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json
Development Scenario and Methods
There are multiple options for developing templates. To demonstrate these options, we’ll create an ARM template to deploy the following architecture. In this example we’re assuming that we have a server based web application that will utilize an Azure SQL database at the data tier.
QuickStart Templates
We’ll start by browsing to the Azure QuickStart Template repository that’s hosted on GitHub. From here, we can search through sample templates for one that suits our needs. One of the sample templates available (shown below) will serve as a great starting point will account for the web application server.
Browse to the following location and download the “azuredeploy.json” and “azuredeploy.parameters.json” files.
https://github.com/Azure/azure-quickstart-templates/tree/master/101-1vm-2nics-2subnets-1vnet
Azure Generated Automation Script Templates
With our web application server taken care of, we need to add in our SQL Server and Database. For these two components, we’ll download the Automation Script template that Azure generates for existing resources.
We’ll start by provisioning an Azure SQL instance within the portal.
Once the SQL deployment is complete, we’ll navigate to the SQL Database resource and browse to the “Automation Script” blade. It’s important to note that the Automation Script will consist of all resources within the same Resource Group.
At the top of the Automation Script blade, we can download the template files to our local machine.
The downloaded template contains a number of reference files:
deploy.ps1 - PowerShell deployment script
deploy.sh - Azure CLI deployment script
deployer.rb - Azure Ruby SDK deployment script
DeploymentHelper.cs - C# class to deploy the template
parameters.json - parameters file for the deployment
template.json - core template file containing all of the resources to be deployed
For now, all we’re going to need from these files are: parameters.json and template.json.
Stitching the Templates Together
Now we need add the Azure SQL components into our template.
When we open up the downloaded template, we find that it consists of a number of resources outside of the Azure SQL Server and Database. In this case these resources include some of the Azure SQL settings that are provided by default and weren’t necessarily defined when we created the database in the Portal. For our purposes, we’ll remove all the resources and parameters outside of the SQL Server and Database. Then we can just copy/paste these sections into our existing template.
Template Reference Documentation
It’s just about time to test our template but let’s validate our downloaded template against the reference documentation. Navigate to the Azure reference documentation (found here) and browse under the “Reference” section to find SQL > Servers. In comparing the downloaded Automation Script template to the reference documentation, we notice that the ”administratorLoginPassword” setting is missing from our template. Since the Automation Script does not download the secure string value, the setting is omitted from the downloaded template. It’s imperative to set a password on the database, so we’ll add this property into our template.
Currently, our template consists of the Azure QuickStart Virtual Network, Subnets, Virtual Machine, Network Interfaces, and the Automation Script downloaded SQL Server and Database which we validated against the template reference documentation. Let’s take a look at this template and deploy it into Azure.
https://github.com/cooperlutz/cooperscloud/tree/master/arm-templates/ntier-VM-AzureSQL
We have all of the components accounted for - as laid out in our diagram - so let’s try deploying it:
Success!
Our template deployed successfully. Now we can take a look at our Resource Group in the Azure Portal and find that it consists of all the resources defined in our architecture.
Continue reading


 Speak to your GP if you have:
Metformin helps keep your blood sugar (glucose) level under control.
It works by:


Left click the grid to set a starting point.
Right click the grid to set a destination.
Click Solve Maze to display the solution.