|
Cascade
|
The main class for all data requests and other operations. This would generally only be created once on startup of an application. More...
Public Member Functions | |
| CascadeDataLayer (ICascadeOrigin origin, IEnumerable< ICascadeCache > cacheLayers, CascadeConfig config, ICascadePlatform cascadePlatform, ErrorControl errorControl, CascadeJsonSerialization serialization) | |
| CascadeDataLayer main constructor. | |
| async Task< M?> | Get< M > (int id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Get data from cache/origin of model type M and return result or null. | |
| async Task< M?> | Get< M > (string id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Get data from cache/origin of model type M and return result or null. | |
| async Task< M?> | Get< M > (long id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Get data from cache/origin of model type M and return result or null. | |
| Task< OpResponse > | GetResponse< M > (int id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Get a model instance of given model type M and int id with a full detail OpResponse object. | |
| Task< OpResponse > | GetResponse< M > (long id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Get a model instance of given model type M and long id with a full detail OpResponse object. | |
| Task< OpResponse > | GetResponse< M > (string id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Get a model instance of given model type M and string id with a full detail OpResponse object. | |
| async Task< IEnumerable< object >?> | GetCollection< M > (string collectionName) |
| Gets a collection literally ie an enumerable of ids. | |
| Task< OpResponse > | GetCollectionResponse< M > (string collectionName) |
| Gets a collection literally ie an enumerable of ids with the full detail OpResponse. | |
| async Task | ClearCollection< Model > (string collectionName) |
| Clear a collection from all caches. | |
| async Task< IEnumerable< object > > | SetCollection< Model > (string collectionName, IEnumerable< object > ids) |
| Replace a collection with a set of ids in all caches. | |
| async Task< OpResponse > | GetWhereCollectionResponse< Model > (string propertyName, string propertyValue, int? freshnessSeconds=null, int? populateFreshnessSeconds=null) |
| A kind of query like that used for populating HasMany/HasOne associations. Not normally used. | |
| async Task< IEnumerable< M > > | GetWhereCollection< M > (string propertyName, string propertyValue, int? freshnessSeconds=null, int? populateFreshnessSeconds=null) |
| A kind of query like that used for populating HasMany/HasOne associations. Not normally used. | |
| async Task | SetCacheWhereCollection (Type modelType, string propertyName, string propertyValue, IEnumerable< object > collection) |
| Replaces the cached values for HasMany/HasOne like associations. Not normally used. | |
| async Task | SetCacheRecord (object id, object model) |
| Replaces the cached model in all caches. | |
| async Task< IEnumerable< M > > | Query< M > (string? collectionKey, object? criteria=null, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Do a search on the origin with the given model and criteria and cache the resulting collection under the collectionKey. Models are cached and returned, as are populated association models. | |
| async Task< M > | QueryOne< M > (object criteria, string? collectionKey=null, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Do a search on the origin with the given model and criteria for a single record, and cache the resulting collection under the collectionKey. Models are cached and returned, as are populated association models. | |
| Task< OpResponse > | QueryResponse< M > (string collectionName, object criteria, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, bool? hold=null) |
| Do a search on the origin with the given model and criteria and cache the resulting collection under the collectionKey and return full detail OpResponse. Models are cached and returned, as are populated association models. | |
| async Task | Populate (SuperModel model, string property, int? freshnessSeconds=null, bool skipIfSet=false, bool? hold=null) |
| Populates (sets the given association property(s) on the given model each according to their definition attribute (BelongsTo/HasMany/HasOne)) with the resulting model(s) from their internal query(s). | |
| async Task | Populate (SuperModel model, IEnumerable< string > associations, int? freshnessSeconds=null, bool skipIfSet=false, bool? hold=null) |
| Populates (sets the given association property(s) on the given model each according to their definition attribute (BelongsTo/HasMany/HasOne)) with the resulting model(s) from their internal query(s). | |
| async Task | Populate (IEnumerable< SuperModel > models, IEnumerable< string > associations, int? freshnessSeconds=null, bool skipIfSet=false, bool? hold=null) |
| Populates (sets the given association property(s) on the given models each according to their definition attribute (BelongsTo/HasMany/HasOne)) with the resulting model(s) from their internal query(s). This is useful for setting association(s) on a list of models. In future, this could be optimised for when many are associated with the same. | |
| async Task | UpdateHasMany (SuperModel model, string property, IEnumerable< object > models) |
| Replaces the value of the given HasMany property with the given IEnumerable of models and updates the caches appropriately. | |
| async Task | UpdateHasOne (SuperModel model, string property, object value) |
| Replaces the value of the given HasOne property with the given model. Note: This should update the caches with a collection of one, but currently does not. | |
| async Task | SetAssociation (object target, string propertyName, object value) |
| Use this when you only want to set an association property to a value you already have. Consider using UpdateHasMany/UpdateHasOne/UpdateBelongsTo instead. Note that this method does not update the caches, but the more specific methods do. | |
| async Task | SetAssociation (IEnumerable targets, string propertyName, object value) |
| Use this when you only want to set an association property to a value you already have. Consider using UpdateHasMany/UpdateHasOne/UpdateBelongsTo instead. Note that this method does not update the caches, but the more specific methods do. | |
| async Task< M > | Create< M > (M model, IEnumerable< string >? populate=null, bool hold=false) |
| Create and return a model of the given type. An instance is used to pass in the values, and a newly created instance is returned from the origin. Note: the populate option will be removed from all write methods. Instead Create should be called followed by any call(s) to Populate() as required. | |
| Task< OpResponse > | CreateResponse< M > (M model, IEnumerable< string >? populate=null, bool hold=false) |
| Create and return a model of the given type. An instance is used to pass in the values, and a newly created instance is returned from the origin. Note: the populate option will be removed from all write methods. Instead Create should be called followed by any call(s) to Populate() as required. | |
| async Task< M > | Replace< M > (M model) |
| Task< OpResponse > | ReplaceResponse< M > (M model) |
| async Task< M?> | Update< M > (M model, IDictionary< string, object > changes) |
| Task< OpResponse > | UpdateResponse< M > (M model, IDictionary< string, object > changes) |
| async Task | Destroy< M > (M model) |
| Task< OpResponse > | DestroyResponse< M > (M model) |
| async Task< ReturnType > | Execute< ModelType, ReturnType > (string action, IDictionary< string, object > parameters) |
| Task< OpResponse > | ExecuteResponse< ModelType, ReturnType > (string action, IDictionary< string, object > parameters) |
| async Task | EnsureAuthenticated () |
| async Task | ClearLayers () |
| string | SerializeRequestOp (RequestOp op) |
| RequestOp | DeserializeRequestOp (string s) |
| async Task< string > | EnqueueOperation (RequestOp op) |
| IEnumerable< string > | GetChangesPendingList () |
| async Task< IEnumerable< Tuple< string, RequestOp > > > | GetChangesPending () |
| async Task | ClearChangesPending () |
| async Task | ReconnectOnline (Action< string >? progressMessage=null, Action< int >? progressCount=null) |
| void | Hold< Model > (object id) |
| void | Hold (Type modelType, object id) |
| void | Hold< Model > (IEnumerable< Model > models) |
| bool | IsHeld< Model > (object id) |
| void | Unhold< Model > (object id) |
| Task< IEnumerable< object > > | ListHeldIds< Model > () |
| async Task< IEnumerable< object > > | ListHeldIds (Type modelType) |
| void | HoldCollection< Model > (string name) |
| void | HoldCollection (Type modelType, string name) |
| void | UnholdCollection< Model > (string name) |
| bool | IsCollectionHeld< Model > (string name) |
| async Task< IEnumerable< object > > | ListHeldCollections (Type modelType) |
| async Task | UnholdAll () |
Static Public Member Functions | |
| static object | ConvertType (object aSource, Type singularType) |
Public Attributes | |
| readonly CascadeConfig | Config |
Static Public Attributes | |
| const int | FRESHNESS_ANY = Int32.MaxValue |
| static ImmutableArray< Type > | AssociationAttributes |
Properties | |
| long | NowMs [get] |
| Use this timestamp to keep in sync with the framework. Especially useful for testing as time can then be controlled by your origin implementation. Milliseconds since 1970. | |
| bool | ConnectionOnline [get, set] |
| This property determines whether the framework acts in online (true) or offline (false) mode. It can be set to offline at any time, but should not be set to online unless the changes pending list is empty. ReconnectOnline() uploads changes and sets ConnectionOnline=true for you. | |
Events | |
| PropertyChangedEventHandler | PropertyChanged |
| Used for watching properties on this (normally ConnectionOnline) | |
The main class for all data requests and other operations. This would generally only be created once on startup of an application.
|
inline |
CascadeDataLayer main constructor.
| origin | Origin server |
| cacheLayers | Cache layers in order. Typically this would be an instance of a memory cache followed by a file based cache. |
| config | configuration for cascade |
| cascadePlatform | platform specific implementation |
| errorControl | instance for managing exceptions |
| serialization | instance for serializing models |
|
inline |
Clear a collection from all caches.
| collectionName | your chosen name for the collection |
| Model | the type of the collection |
|
inline |
Create and return a model of the given type. An instance is used to pass in the values, and a newly created instance is returned from the origin. Note: the populate option will be removed from all write methods. Instead Create should be called followed by any call(s) to Populate() as required.
| model | |
| populate | |
| hold |
| M |
|
inline |
Create and return a model of the given type. An instance is used to pass in the values, and a newly created instance is returned from the origin. Note: the populate option will be removed from all write methods. Instead Create should be called followed by any call(s) to Populate() as required.
| model | |
| populate | |
| hold |
| M |
|
inline |
Get data from cache/origin of model type M and return result or null.
| id | id of model to get |
| populate | Enumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests |
| freshnessSeconds | freshness for the main object |
| populateFreshnessSeconds | freshness for any populated associations |
| hold | whether to mark the main main object and populated associations to be held in cache (protected from cache clearing and a candidate to be taken offline) |
| M | model type - subclass of SuperModel |
| M | : | class |
|
inline |
Get data from cache/origin of model type M and return result or null.
| id | id of model to get |
| populate | Enumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests |
| freshnessSeconds | freshness for the main object |
| populateFreshnessSeconds | freshness for any populated associations |
| hold | whether to mark the main main object and populated associations to be held in cache (protected from cache clearing and a candidate to be taken offline) |
| M | model type - subclass of SuperModel |
| M | : | class |
|
inline |
Get data from cache/origin of model type M and return result or null.
| id | id of model to get |
| populate | Enumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests |
| freshnessSeconds | freshness for the main object |
| populateFreshnessSeconds | freshness for any populated associations |
| hold | whether to mark the main main object and populated associations to be held in cache (protected from cache clearing and a candidate to be taken offline) |
| M | model type - subclass of SuperModel |
| M | : | class |
|
inline |
Gets a collection literally ie an enumerable of ids.
| collectionName | your chosen name for the collection |
| M | the type of the collection |
| M | : | class |
|
inline |
Gets a collection literally ie an enumerable of ids with the full detail OpResponse.
| collectionName | your chosen name for the collection |
| M | the type of the collection |
|
inline |
Get a model instance of given model type M and int id with a full detail OpResponse object.
| id | id of model to get |
| populate | Enumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests |
| freshnessSeconds | freshness for the main object |
| populateFreshnessSeconds | freshness for any populated associations |
| hold | whether to mark the main main object and populated associations to be held in cache (protected from cache clearing and a candidate to be taken offline) |
| M | : | class |
|
inline |
Get a model instance of given model type M and long id with a full detail OpResponse object.
| id | id of model to get |
| populate | Enumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests |
| freshnessSeconds | freshness for the main object |
| populateFreshnessSeconds | freshness for any populated associations |
| hold | whether to mark the main main object and populated associations to be held in cache (protected from cache clearing and a candidate to be taken offline) |
| M | : | class |
|
inline |
Get a model instance of given model type M and string id with a full detail OpResponse object.
| id | id of model to get |
| populate | Enumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests |
| freshnessSeconds | freshness for the main object |
| populateFreshnessSeconds | freshness for any populated associations |
| hold | whether to mark the main main object and populated associations to be held in cache (protected from cache clearing and a candidate to be taken offline) |
| M | : | class |
|
inline |
A kind of query like that used for populating HasMany/HasOne associations. Not normally used.
| propertyName | Name of foreign key |
| propertyValue | Value of foreign key |
| freshnessSeconds | freshness for the main object |
| populateFreshnessSeconds | freshness for any populated associations |
| Model | the type of the collection |
| M | : | class |
|
inline |
A kind of query like that used for populating HasMany/HasOne associations. Not normally used.
| propertyName | Name of foreign key |
| propertyValue | Value of foreign key |
| freshnessSeconds | freshness for the main object |
| populateFreshnessSeconds | freshness for any populated associations |
| Model | the type of the collection |
|
inline |
Populates (sets the given association property(s) on the given models each according to their definition attribute (BelongsTo/HasMany/HasOne)) with the resulting model(s) from their internal query(s). This is useful for setting association(s) on a list of models. In future, this could be optimised for when many are associated with the same.
| model | model to act on |
| property | nameof(Model.someProperty) |
| freshnessSeconds | |
| skipIfSet | If true and the property is already set, don't do anything (for performance reasons) |
| hold |
|
inline |
Populates (sets the given association property(s) on the given model each according to their definition attribute (BelongsTo/HasMany/HasOne)) with the resulting model(s) from their internal query(s).
| model | model to act on |
| property | nameof(Model.someProperty) |
| freshnessSeconds | |
| skipIfSet | If true and the property is already set, don't do anything (for performance reasons) |
| hold |
|
inline |
Populates (sets the given association property(s) on the given model each according to their definition attribute (BelongsTo/HasMany/HasOne)) with the resulting model(s) from their internal query(s).
| model | model to act on |
| property | nameof(Model.someProperty) |
| freshnessSeconds | |
| skipIfSet | If true and the property is already set, don't do anything (for performance reasons) |
| hold |
|
inline |
Do a search on the origin with the given model and criteria and cache the resulting collection under the collectionKey. Models are cached and returned, as are populated association models.
| collectionKey | |
| criteria | |
| populate | |
| freshnessSeconds | |
| populateFreshnessSeconds | |
| hold |
| M |
|
inline |
Do a search on the origin with the given model and criteria for a single record, and cache the resulting collection under the collectionKey. Models are cached and returned, as are populated association models.
| collectionKey | |
| criteria | |
| populate | |
| freshnessSeconds | |
| populateFreshnessSeconds | |
| hold |
| M |
|
inline |
Do a search on the origin with the given model and criteria and cache the resulting collection under the collectionKey and return full detail OpResponse. Models are cached and returned, as are populated association models.
| collectionKey | |
| criteria | |
| populate | |
| freshnessSeconds | |
| populateFreshnessSeconds | |
| hold |
| M |
|
inline |
Use this when you only want to set an association property to a value you already have. Consider using UpdateHasMany/UpdateHasOne/UpdateBelongsTo instead. Note that this method does not update the caches, but the more specific methods do.
| targets | models to act on |
| propertyName | name of association property to set |
| value |
|
inline |
Use this when you only want to set an association property to a value you already have. Consider using UpdateHasMany/UpdateHasOne/UpdateBelongsTo instead. Note that this method does not update the caches, but the more specific methods do.
| target | model to act on |
| propertyName | name of association property to set |
| value |
|
inline |
Replaces the cached model in all caches.
| id | id of model to replace |
| model | model to replace with. The model type is derived from this |
|
inline |
Replaces the cached values for HasMany/HasOne like associations. Not normally used.
| modelType | type of model |
| propertyName | Name of foreign key |
| propertyValue | Value of foreign key |
| collection | enumerable of ids for the collection |
|
inline |
Replace a collection with a set of ids in all caches.
| collectionName | your chosen name for the collection |
| ids | an enumerable of ids |
| Model | the type of the collection |
| Model | : | class |
|
inline |
| M | : | class |
|
inline |
Replaces the value of the given HasMany property with the given IEnumerable of models and updates the caches appropriately.
| model | |
| property | |
| models |
| ArgumentException |
|
inline |
Replaces the value of the given HasOne property with the given model. Note: This should update the caches with a collection of one, but currently does not.
| model | the main model |
| property | name of the HasOne property on the main model |
| value | the new model for the association |
| ArgumentException |
|
static |


{% extends 'base.html' %} {% block title %} Home Page {%endblock%} {%block content%}
Simple app developed in Flask where you can add users and see all the users who have been entered


Configuring your Apicurio Registry deployment
This chapter explains various configuration options for Apicurio Registry, such as authentication, logging, cloud events, and health checks on OpenShift.
Configuring Apicurio Registry authentication and authorization with Keycloak
This section explains how to manually configure authentication and authorization options for Apicurio Registry using Keycloak.
|
Alternatively, for details on how to configure these settings automatically, see the Apicurio Registry Operator documentation. |
You can enable authentication for the Apicurio Registry web console and core REST API using Keycloak based on OAuth using OpenID Connect (OIDC). The same Keycloak realm and users are federated across the Apicurio Registry web console and core REST API using OpenID Connect so that you only require one set of credentials.
Apicurio Registry provides role-based authorization for default admin, write, and read-only user roles. Apicurio Registry also provides content-based authorization at the schema or API level, where only the creator of the registry artifact can update or delete it. Apicurio Registry authentication and authorization settings are disabled by default.
-
Keycloak is installed and running. For more details, see Getting Started with Keycloak.
-
Apicurio Registry is installed and running.
-
In the Keycloak Admin Console, create a Keycloak realm for Apicurio Registry. By default, Apicurio Registry expects a realm name of
registry
. For more details on creating realms, see Getting Started with Keycloak. -
Create a Keycloak client for the Apicurio Registry API. By default, Apicurio Registry expects the following settings:
-
Client ID:
registry-api
-
Client Protocol:
openid-connect
-
Access Type:
bearer-only
You can use the defaults for the other client settings.
If you are using Keycloak service accounts, the client Access Type must be confidential
instead ofbearer-only
.
-
-
Create a Keycloak client for the Apicurio Registry web console. By default, Apicurio Registry expects the following settings:
-
Client ID:
apicurio-registry
-
Client Protocol:
openid-connect
-
Access Type:
public
-
Valid Redirect URLs:
http://my-registry-url:8080/*
-
Web Origins:
+
You can use the defaults for the other client settings.
-
-
In your Apicurio Registry deployment on OpenShift, set the following Apicurio Registry environment variables to configure authentication using Keycloak:
Table 1. Configuration for Apicurio Registry authentication Environment variable Description Type Default AUTH_ENABLED
If set to
true
, the environment variables that follow are required.String
false
KEYCLOAK_URL
The URL of the Keycloak authentication server to use. Must end with
/auth
.String
None
KEYCLOAK_REALM
The Keycloak realm used for authentication.
String
registry
KEYCLOAK_API_CLIENT_ID
The client ID for the Apicurio Registry REST API.
String
registry-api
KEYCLOAK_UI_CLIENT_ID
The client ID for the Apicurio Registry web console.
String
apicurio-registry
For an example of setting environment variables on OpenShift, see Configuring Apicurio Registry health checks on OpenShift. -
Set the following option to
true
to enable Apicurio Registry user roles in Keycloak:Table 2. Configuration for Apicurio Registry role-based authorization Environment variable Java system property Type Default value ROLE_BASED_AUTHZ_ENABLED
registry.auth.role-based-authorization
Boolean
false
-
When Apicurio Registry user roles are enabled, you must assign Apicurio Registry users to at least one of the following default user roles in your Keycloak realm:
Table 3. Default user roles for registry authentication and authorization Role Read artifacts Write artifacts Global rules Summary sr-admin
Yes
Yes
Yes
Full access to all create, read, update, and delete operations.
sr-developer
Yes
Yes
No
Access to create, read, update, and delete operations, except configuring global rules. This role can configure artifact rules.
sr-readonly
Yes
No
No
Access to read and search operations only. This role cannot configure any rules.
-
Set the following to
true
to enable owner-only authorization for updates to schema and API artifacts in Apicurio Registry:Table 4. Configuration for owner-only authorization Environment variable Java system property Type Default value REGISTRY_AUTH_OWNER_ONLY_AUTHORIZATION
registry.auth.owner-only-authorization
Boolean
false
-
For details on configuring non-default user role names, see Apicurio Registry authentication and authorization configuration options
-
For an open source example application and Keycloak realm, see Docker Compose-based example of using Keycloak with Apicurio Registry
-
For details on how to use Keycloak in a production environment, see the Keycloak documentation
-
For details on custom security configuration, the see Quarkus Open ID Connect documentation
Apicurio Registry authentication and authorization configuration options
Apicurio Registry provides configuration options for authentication using Keycloak with OpenID Connect or using HTTP basic authentication.
Apicurio Registry provides configuration options for authorization, including role-based and content-based approaches. These include role-based authorization for default admin, write, and read-only user roles. Apicurio Registry also provides content-based authorization at the schema or API level, where only the creator of the registry artifact can update or delete it. Apicurio Registry authentication and authorization options are disabled by default.
Apicurio Registry authentication using Keycloak and OpenID Connect
You can set the following environment variables to configure authentication for the Apicurio Registry web console and API using Keycloak:
| Environment variable | Description | Type | Default |
|---|---|---|---|
|
Enables/disables authentication in registry. When set to |
String |
|
|
The URL of the Keycloak authentication server to use. Must end with |
String |
- |
|
The Keycloak realm used for authentication. |
String |
- |
|
The client ID for the Apicurio Registry REST API. |
String |
|
|
The client ID for the Apicurio Registry web console. |
String |
|
Apicurio Registry authentication using HTTP basic
By default, Apicurio Registry supports authentication using OpenID Connect. Users (or API clients) must obtain an access token to make authenticated calls to the Apicurio Registry REST API. However, because some tools do not support OpenID Connect, you can also configure Apicurio Registry to support HTTP basic authentication by setting the following configuration option to true .
|
| Environment variable | Java system property | Type | Default value |
|---|---|---|---|
|
|
Boolean |
|
Role-based authorization in Apicurio Registry
You can set the following option to true
to enable role-based authorization in Apicurio Registry:
| Environment variable | Java system property | Type | Default value |
|---|---|---|---|
|
|
Boolean |
|
You can then configure role-based authorization to use roles found in the user’s authentication token (for example, granted when authenticating using Keycloak), or to use role mappings managed internally by Apicurio Registry.
Using roles from Keycloak
To enable using roles assigned by Keycloak, set the following environment variables:
| Environment variable | Description | Type | Default |
|---|---|---|---|
|
When set to |
String |
|
|
The name of the role that indicates a user is an admin. |
String |
|
|
The name of the role that indicates a user is a developer. |
String |
|
|
The name of the role that indicates a user has read-only access. |
String |
|
When Apicurio Registry is configured to use roles from Keycloak, you must assign Apicurio Registry users to at least one of the following user roles in Keycloak. However, you can configure different user role names using the environment variables in the table above:
| Role name | Read artifacts | Write artifacts | Global rules | Description |
|---|---|---|---|---|
|
Yes |
Yes |
Yes |
Full access to all create, read, update, and delete operations. |
|
Yes |
Yes |
No |
Access to create, read, update, and delete operations, except configuring global rules and import/export. This role can configure artifact rules only. |
|
Yes |
No |
No |
Access to read and search operations only. This role cannot configure any rules. |
Manage roles directly in Apicurio Registry
To enable using roles managed internally by Apicurio Registry, set the following environment variables:
| Environment variable | Description | Type | Default |
|---|---|---|---|
|
When set to |
String |
|
When using internally managed role mappings, users can be assigned a role using the /admin/roleMappings
endpoint in the Apicurio Registry REST API. For more details, see Apicurio Registry REST API documentation.
Users can be granted exactly one role: ADMIN
, DEVELOPER
, or READ_ONLY
. Only users with admin
privileges can grant access to other users.
Apicurio Registry admin-override configuration
Because there are no default admin users in Apicurio Registry, it is usually helpful to configure another way for users to be identified as admins. You can configure this admin-override feature using the following environment variables:
| Environment variable | Description | Type | Default |
|---|---|---|---|
|
Enables the admin-override feature. |
String |
|
|
Where to look for admin-override information. Only |
String |
|
|
The type of information used to determine if a user is an admin. Values depend on the value of the FROM variable, for example, |
String |
|
|
The name of the role that indicates a user is an admin. |
String |
|
|
The name of a JWT token claim to use for determining admin-override. |
String |
|
|
The value that the JWT token claim indicated by the CLAIM variable must be for the user to be granted admin-override. |
String |
|
For example, you can use this admin-override feature to assign the sr-admin
role to a single user
in Keycloak, which grants that user the admin role. That user can then use the /admin/roleMappings
REST API (or associated UI) to grant roles to additional users (including additional admins).
Apicurio Registry artifact owner-only authorization option
You can set the following option to true
to enable owner-only authorization for updates to schema and API artifacts in Apicurio Registry:
| Environment variable | Java system property | Type | Default value |
|---|---|---|---|
|
|
Boolean |
|
Enabling owner-only authorization results in a configuration where users with write access can only modify content that they themselves created. Users will not be able to update or delete artifacts created by other users.
Apicurio Registry anonymous read-only access option
In addition to the two main types of authorization (role-based and owner-based authorization), Apicurio Registry supports an anonymous read-only access option.
To enable anonymous users, such as REST API calls with no authentication credentials provided, to be allowed to make
read-only calls to the REST API, set the following option to true
:
| Environment variable | Java system property | Type | Default value |
|---|---|---|---|
|
|
Boolean |
|
-
For an example of how to set environment variables in your Apicurio Registry deployment on OpenShift, see Configuring Apicurio Registry health checks on OpenShift
-
For details on configuring custom authentication for Apicurio Registry, the see Quarkus Open ID Connect documentation
Configuring Apicurio Registry logging
You can set Apicurio Registry logging configuration at runtime. Apicurio Registry provides a REST endpoint to set the log level for specific loggers for finer grained logging. This section explains how to view and set Apicurio Registry log levels at runtime using the Apicurio Registry /admin
REST API.
-
Get the URL to access your Apicurio Registry instance, or get your Apicurio Registry route if you have Apicurio Registry deployed on OpenShift. This simple example uses a URL of
localhost:8080
.
-
Use this
curl
command to obtain the current log level for the loggerio.apicurio.registry.storage
:$ curl -i localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage HTTP/1.1 200 OK [...] Content-Type: application/json {"name":"io.apicurio.registry.storage","level":"INFO"}
-
Use this
curl
command to change the log level for the loggerio.apicurio.registry.storage
toDEBUG
:$ curl -X PUT -i -H "Content-Type: application/json" --data '{"level":"DEBUG"}' localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage HTTP/1.1 200 OK [...] Content-Type: application/json {"name":"io.apicurio.registry.storage","level":"DEBUG"}
-
Use this
curl
command to revert the log level for the loggerio.apicurio.registry.storage
to its default value:$ curl -X DELETE -i localhost:8080/apis/registry/v2/admin/loggers/io.apicurio.registry.storage HTTP/1.1 200 OK [...] Content-Type: application/json {"name":"io.apicurio.registry.storage","level":"INFO"}
Configuring Apicurio Registry event sourcing
You can configure Apicurio Registry to send events when changes are made to the registry. For example, Apicurio Registry can trigger events when schema and API artifacts are created, updated, deleted, and so on. You can configure Apicurio Registry to send events to your applications and to third-party integrations in this way.
There are different protocols available for transporting the events. The currently implemented protocols are HTTP and Apache Kafka. However, regardless of the protocol, the events are sent using the CNCF CloudEvents specification.
All of the event types are defined in io.apicurio.registry.events.dto.RegistryEventType
. For example, the event types include:
-
io.apicurio.registry.artifact-created
-
io.apicurio.registry.artifact-updated
-
io.apicurio.registry.artifact-rule-created
-
io.apicurio.registry.global-rule-created
You can configure cloud events in Apicurio Registry using Java system properties or equivalent environment variables.
-
You must have an application that you want to send Apicurio Registry cloud events to. For example, this can be a custom application or a third-party application.
Configuring Apicurio Registry event sourcing using HTTP
The example in this section shows a custom application running at http://my-app-host:8888/events
.
-
When using the HTTP protocol, set your Apicurio Registry configuration to send events to a your application as follows:
-
registry.events.sink.my-custom-consumer=http://my-app-host:8888/events
-
-
If required, you can configure multiple event consumers as follows:
-
registry.events.sink.my-custom-consumer=http://my-app-host:8888/events
-
registry.events.sink.other-consumer=http://my-consumer.com/events
-
Configuring Apicurio Registry event sourcing using Apache Kafka
The example in this section shows a Kafka topic named my-registry-events
running on my-kafka-host:9092
.
-
When using the Kafka protocol, set your Kafka topic as follows:
-
registry.events.kafka.topic=my-registry-events
-
-
You can set the configuration for the Kafka producer using the
KAFKA_BOOTSTRAP_SERVERS
environment variable:-
KAFKA_BOOTSTRAP_SERVERS=my-kafka-host:9092
Alternatively, you can set the properties for the kafka producer using the
registry.events.kafka.config
prefix, for example:registry.events.kafka.config.bootstrap.servers=my-kafka-host:9092
-
-
If required, you can also set the Kafka topic partition to use to produce events:
-
registry.events.kafka.topic-partition=1
-
-
For more details, see the CNCF CloudEvents specification
Configuring Apicurio Registry health checks on OpenShift
You can configure optional environment variables for liveness and readiness probes to monitor the health of the Apicurio Registry server on OpenShift:
-
Liveness probes test if the application can make progress. If the application cannot make progress, OpenShift automatically restarts the failing Pod.
-
Readiness probes test if the application is ready to process requests. If the application is not ready, it can become overwhelmed by requests, and OpenShift stops sending requests for the time that the probe fails. If other Pods are OK, they continue to receive requests.
| The default values of the liveness and readiness environment variables are designed for most cases and should only be changed if required by your environment. Any changes to the defaults depend on your hardware, network, and amount of data stored. These values should be kept as low as possible to avoid unnecessary overhead. |
-
You must have an OpenShift cluster with cluster administrator access.
-
You must have already installed Apicurio Registry on OpenShift.
-
You must have already installed and configured your chosen Apicurio Registry storage in Strimzi or PostgreSQL.
-
In the OpenShift Container Platform web console, log in using an account with cluster administrator privileges.
-
Click Installed Operators > Apicurio Registry.
-
On the ApicurioRegistry tab, click the Operator custom resource for your deployment, for example, example-apicurioregistry.
-
In the main overview page, find the Deployment Name section and the corresponding
DeploymentConfig
name for your Apicurio Registry deployment, for example, example-apicurioregistry. -
In the left navigation menu, click Workloads > Deployment Configs, and select your
DeploymentConfig
name. -
Click the Environment tab, and enter your environment variables in the Single values env section, for example:
-
NAME:
LIVENESS_STATUS_RESET
-
VALUE:
350
-
-
Click Save at the bottom.
Alternatively, you can perform these steps using the OpenShift
oc
command. For more details, see the OpenShift CLI documentation.
Environment variables for Apicurio Registry health checks
This section describes the available environment variables for Apicurio Registry health checks on OpenShift. These include liveness and readiness probes to monitor the health of the Apicurio Registry server on OpenShift. For an example procedure, see [configuring-liveness-readiness-probes].
| The following environment variables are provided for reference only. The default values are designed for most cases and should only be changed if required by your environment. Any changes to the defaults depend on your hardware, network, and amount of data stored. These values should be kept as low as possible to avoid unnecessary overhead. |
Liveness environment variables
| Name | Description | Type | Default |
|---|---|---|---|
|
Number of liveness issues or errors that can occur before the liveness probe fails. |
Integer |
|
|
Period in which the threshold number of errors must occur. For example, if this value is 60 and the threshold is 1, the check fails after two errors occur in 1 minute |
Seconds |
|
|
Number of seconds that must elapse without any more errors for the liveness probe to reset to OK status. |
Seconds |
|
|
Comma-separated list of ignored liveness exceptions. |
String |
|
| Because OpenShift automatically restarts a Pod that fails a liveness check, the liveness settings, unlike readiness settings, do not directly affect behavior of Apicurio Registry on OpenShift. |
Readiness environment variables
| Name | Description | Type | Default |
|---|---|---|---|
|
Number of readiness issues or errors that can occur before the readiness probe fails. |
Integer |
|
|
Period in which the threshold number of errors must occur. For example, if this value is 60 and the threshold is 1, the check fails after two errors occur in 1 minute. |
Seconds |
|
|
Number of seconds that must elapse without any more errors for the liveness probe to reset to OK status. In this case, this means how long the Pod stays not ready, until it returns to normal operation. |
Seconds |
|
|
Readiness tracks the timeout of two operations:
If these operations take more time than the configured timeout, this is counted as a readiness issue or error. This value controls the timeouts for both operations. |
Seconds |
|


You’re welcome to republish our articles and graphics for free using the following ground rules. (Please let us know if you republish our stories; it makes us happy!)
See a full list of multimedia republishing terms here. For questions please contact Natalie Choate, director of media relations and partnerships, at<EMAIL_ADDRESS>Select which option you'd prefer and then click "Copy" to copy the story text or story html:


PLEASE LEAVE THIS WEBSITE ALONE


CIM Space
Load
Save
Trace
Trace
Trace through open switches
Trace through voltage levels
Un-Highlight
Options
Internals
3D buildings
Scale bar
Coordinates
Streetview
Load files
×
Browse
Drop files here...
Click the browse button and choose a CIM XML file, or drag a file from your operating system file browser onto the drop zone above.
Server URL
Preset
Equipment Library
Sample Data
Enexis (subset)
Save
×
File name
About
Description
Full model
Difference model
Only new elements as full model


Brockhampton to play Birmingham show
American rap collective Brockhampton will bring their European tour to Birmingham next year.
by Rebecca SayceLed by Kevin Abstract and formed partially through the online forum "KanyeToThe", Brockhampton is a self-described boy band, in an effort to redefine the term.
The European tour announcement follows the boyband's set at Tyler, The Creator's eightth annual Camp Flog Gnaw Carnival and caps off a year in which they released their fifth studio album GINGER.
The band is currently embarking on their biggest North American tour to date, including back-to-back sold-out shows in New York at Madison Square Garden's Hulu Theater alongside Slowthai and 100 gecs.
Formed in 2015, the group is best known for songs such as BOY BYE, NO HALO, VICTOR ROBERTS, IF YOU PRAY RIGHT and more.
The group consists of vocalists Kevin Abstract, Matt Champion, Merlyn Wood, and Dom McLennon, vocalists/producers Joba and Bearface, and producers Romil Hemnani, Jabari Manwa, and Kiko Merley, as well as graphic designer Henock 'HK' Sileshi, photographer Ashlan Grey, web designer Roberto Ontenient, and manager Jon Nunes.
Brockhampton play Birmingham's O2 Academy on May 22.
For more information, click here.


μErlang — MicroErlang¶
This project contains the Compiler
, which converts Erlang source to
compressed bytecode format (.uerl
files).
Also there is the Runtime
— a virtual machine written in C++ which
executes the generated bytecode on the target hardware.
Latest Version¶
At this time there is no released stable version.
Github Link: https://github.com/kvakvs/E4VM
(will be renamed to MicroErlang
later).


@alen If you are in reasonable health, you can get a life insurance policy with a $2 mil payout for about a thousand a year... I think you also ought to walk her through the crypto stuff, but if I croak my wife is walking with 2 mil even if she cant figure out my trail of crypto bread crumbs.


---
layout: post
title: Storyboards thumbnails
date: '2013-08-01T07:39:00+02:00'
categories:
- Storyboards
- Sketchbooks
picture_url: https://film-Storyboards.tumblr.com/post/57060123863/Storyboards-thumbnails
---
Tiny Storyboards Sketches drawn while talking over the phone with director Marc Wilkins about Fost Plus Kites film commercial. The final Storyboards.


WeatherApp
Back
C
Accra, GH
Change Unit (F °)
Weather:
Description:
Feels like
°
Humidity
%
Pressure
mb
Min temp
°
Max temp
°


Activities (act@hkn)
{% for officer in officers %}
{% if officer.department == "Activities" %}
{{officer.name}}
{{officer.personal_email}}
{{officer.title}}
{% endif %}
{% endfor %}
Bridge (bridge@hkn)
{% for officer in officers %}
{% if officer.department == "Bridge" %}
{{officer.name}}
{{officer.personal_email}}
{{officer.title}}
{% endif %}
{% endfor %}
Computing Services (compserv@hkn)
{% for officer in officers %}
{% if officer.department == "Computing Services" %}
{{officer.name}}
{{officer.personal_email}}
{{officer.title}}
{% endif %}
{% endfor %}
Decal (decal@hkn)
{% for officer in officers %}
{% if officer.department == "Decal" %}
{{officer.name}}
{{officer.personal_email}}
{{officer.title}}
{% endif %}
{% endfor %}
Industrial relations (indrel@hkn)
{% for officer in officers %}
{% if officer.department == "Industrial relations" %}
{{officer.name}}
{{officer.personal_email}}
{{officer.title}}
{% endif %}
{% endfor %}
Service (serv@hkn)
{% for officer in officers %}
{% if officer.department == "Service" %}
{{officer.name}}
{{officer.personal_email}}
{{officer.title}}
{% endif %}
{% endfor %}
Student Selations (studrel@hkn)
{% for officer in officers %}
{% if officer.department == "Student Relations" %}
{{officer.name}}
{{officer.personal_email}}
{{officer.title}}
{% endif %}
{% endfor %}
Tutoring (tutoring@hkn)
{% for officer in officers %}
{% if officer.department == "Tutoring" %}
{{officer.name}}
{{officer.personal_email}}
{{officer.title}}
{% endif %}
{% endfor %}


Pairing and Giving Feedback
11/8/14
How did I feel about pairing?
I've read all of the feedback that my pairmates have given me. The reviews given about my performance and role as a pair has given me more insight on how to improve myself and my character. For example, I did not display role model traits as I did not know what to expect in terms of pairing. Thus my peers gave me feedback on how to improve in those aspects. My next few pairing sessions got better and better so I felt I made a significant improvement. This was also the same case for my initial feedback that I had left my pairmates. The first few were less informative and not exactly A.S.K. As I grew as a person and team player, I began giving more and more actionable, specific and kind reviews. I felt quite proud of this as I was never really good at telling people what and what they don't need to work on.
I feel that feedback and reviews that aren't actionable, specific and kind are actually not beneficial at all. Those types of reviews do not benefit the peer as it doesn't target anything specific to work on. It doesn't provide a general guideline as to what is expected of them. It also shows that the reviewer did not spend the time to really analyze their partner's situation. Taking the time to really know what your peer needs to improve on really shows that you care about growth of your partner. It also helps you grow into a team player kind of person.
Lastly,
Pairing is caring.


Who will win the 2019 general election? Latest odds and polls
The December 12 general election is fast approaching as party leaders such Boris Johnson and Jeremy Corbyn battle to be elected Prime Minister
by Lewis Knight, https://www.mirror.co.uk/authors/lewis-knight/It will soon be time for the British public to vote in a general election to decide the political future of the country.
Following further deadlock over how to approach the critical issue of Brexit , MPs in the House of Commons have backed a general election on December 12 to allow people to vote on what comes next.
Prime Minister Boris Johnson leads the Conservative Party in the hopes of increasing their power in Westminster, facing the likes of the Leader of the Opposition and Labour leader Jeremy Corbyn , and Liberal Democrats leader Jo Swinson.
There will also be campaigns from the likes of the Scottish National Party, Plaid Cymru, the Brexit Party, the DUP, Sinn Fein, and the Green Party.
But who is predicted to come out on top?
Here are the latest odds and polls
Who will win the 2019 general election?
The latest odds from bookmakers William Hill show a Conservative Majority most likely at 1/2, with a No Overall Majority at 6/4, followed by a Labour majority at 20/1.
Meanwhile, a Liberal Democrat majority sits at 100/1.
In terms of the most seats, they have Conservatives at 1/25, Labour at 11/1, Liberal Democrats at 50/1, Brexit Party at 250/1, and Greens at 250/1.
Meanwhile, bookmakers Coral have odds on the most seats going to the Conservatives at 1/16, followed by Labour at 10/1, then the Liberal Democrats at 50/1, The Brexit Party at 250/1, and the Green Party at 500/1.
In terms of an overall majority, they have a Conservative Majority at 4/7, followed by No Overall Majority 6/4, a Labour majority at 25/1, Liberal Democrats majority at 200/1, and then a Green Party majority at 1000/1.
Alternatively, Ladbrokes also have the Conservatives set for the most seats at 1/16, with Labour at 10/1, the Liberal Democrats at 50/1, the Brexit Party at 250/1, and the Green Party at 500/1.
They have a Conservative Majority most likely at 4/7, followed by No Overall Majority at 6/4, then a Labour majority at 25/1, a Liberal Democrat majority at 200/1, and a Green Party majority at 1000/1.
It would appear that a Conservative Majority is still most likely, but is very closely followed odds for No Overall Majority.
Polls
Check the Mirror's poll tracker for the latest general election polls .
The General Election is held on December 12, 2019.
Who do you think will win when voters take to the polls? Let us know in the comments below.


Navigation Bar Color Tester: This was built as a way to test colors for a header and footer that I am currently testing for other projects. This sandbox accepts standard HTML Color Names and hexadecimal color values.


Turning ideas into a reality is what my vision as CTO boils down to. Looking at the business model at Tastemakers Africa and the perceived state of the products offered my vision would open new channels to reach customers, streamline relationships with partners and curators, and introduce a tightly integrated platform.
Day 0 - Day 30
- Meet partners and customers listen and take notes
- Learn tech pain points
- Website bugs
- eCommerce
- Essence Festival mini-site
Day 31 - Day 60
- API Development
- Develop tech architecture
Day 61 - Day 90
- Native iOS and Android apps
- Feature development
Vision for Features
Dashboard
Dashboard for curators to manage experiences and in-country customer service. A dashboard open up the possibility for flash events/sales based on data and gives curators the ability to know how many active app users are in-country.
API Driven Business
Develop business applications behind an API. Open API to developers and businesses so Tastemakers Africa experiences can be booked by third parties. For example someone booking a room on Hotels.ng or jumia.com can add-on an insider experience.
Social Features for App
Introducing social features on the app will make for a better user experience. Messaging, trip planning with friends, and installment payments are some of the things I'd like to build.


Overview
Become a childminder
You must complete the tasks below:
| Check before you start | task status |
|---|---|
| Check eligibility, cost and time | {% if data.check_eligibility_cost_time=="done" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Read rules | {% if data.read_rules=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Contact your local council | {% if data.contact_local_council=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Prepare to apply | |
|---|---|
| Prove identity | {% if data.prove_identity=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Check criminal history | {% if data.check_criminal_history=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Check others criminal history | {% if data.check_other_criminal_history=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Get health check | {% if data.get_health_check=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Do childminder training | {% if data.do_childminder_training=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Do paediatric first aid training | {% if data.do_first_aid_training=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Get references | {% if data.get_references=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Apply | |
|---|---|
| Apply to Ofsted | {% if data.apply_to_ofsted=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Prepare home | {% if data.prepare_home=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| After you qualify | |
|---|---|
| Get Ofsted certificate | {% if data.get_certificate=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Prepare for food inspection | {% if data.have_food_inspection=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Get insured | {% if data.get_insured=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Register for tax | {% if data.register_self_employed=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Set up a limited company | {% if data.set_up_limited_company=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |
| Learn childminding rules | {% if data.after_you_pass=="complete" %} {% include "includes/task_status_complete.html" %} {% endif %} |


Chapter 7 The Normal Model
7.1 The Intuition
Last week, we used the average and SD to reduce an entire variable to two summaries. We use the average and SD to fill in the following sentence: “The values are about ________, give or take ________ or so.”
This week, we add an additional assumption. This week, we also say that the histogram of the variable follows the normal curve.
The normal curve is a bell-shaped curve with the particular equation \(f(x) = \frac{1}{{\sqrt {2\pi } }}e^\frac{{ - x ^2 }}{2}\). The details of the equation are not important. It is important, though, to realize that the normal curve is an exact, precise shape. It is not a vague description.
Nonetheless, a lot of numeric variables have histograms that roughly follow the normal curve. If the histogram of a variable is approximately “bell-shaped,” then we can use the normal curve as an approximate description of the histogram.
7.2 Examples
It turns out that many variable’s have a histogram that resembles the normal curve. Because of this, the normal curve can sometimes serve as an effective model for these variables.
For example, NOMINATE ideology scores for Republicans in the 115th Congress roughly follow the normal curve.
However, the ideology scores for both Republicans and Democrats together does not follow a normal curve.
Below are histograms of the ENEP (effective number of electoral political parties) by electoral system type and and the amount social heterogeneity. I overlaid rescaled version of the normal curve to assess how closely the histogram matches the normal curve. Notice that these deviate slightly from the normal curve. “Bell-shaped” is perhaps a small stretch, but not too far off.
7.3 The Empirical Rule
If the variable roughly follows the normal curve (or is “bell-shaped”), then we have the following two rules:
- About 68% of the data (i.e., “most”) fall within 1 SD of the average.
- About 95% of the data (i.e., “almost all”) fall within 2 SDs of the average.
We can evaluate this rule with the parties data above. Some of the nine hisgrams follow the normal curve quite well (e.g., lower-left). Others seem to meaningfully deviate from the normal curve (e.g., middle-left).
The table below shows the actual percent of the variable that falls within one and two SDs of the average for each histogram. As you can see, for the lower-left panel (SMD, Top 3rd), the empircal rule of 68% and 95% matches the actual values of 74% and 98% fairly well. For the middle-left panel (SMD, Middle 3rd), the empirical rule matches the actual values of 87% and 93% less well.
Across all histograms, it seems fair that the empirical rule works as a rough approximation, even for histograms that do not follow the normal-curve closely.
| Electoral System | Social Heterogeneity | within 1 SD | within 2 SDs |
|---|---|---|---|
| Single-Member District | Bottom 3rd of ENEG | 87% | 96% |
| Single-Member District | Middle 3rd of ENEG | 87% | 93% |
| Single-Member District | Top 3rd of ENEG | 74% | 98% |
| Small-Magnitude PR | Bottom 3rd of ENEG | 68% | 97% |
| Small-Magnitude PR | Middle 3rd of ENEG | 73% | 96% |
| Small-Magnitude PR | Top 3rd of ENEG | 76% | 93% |
| Large-Magnitude PR | Bottom 3rd of ENEG | 80% | 98% |
| Large-Magnitude PR | Middle 3rd of ENEG | 77% | 96% |
| Large-Magnitude PR | Top 3rd of ENEG | 65% | 97% |
7.4 The Normal Approximation
If the histogram roughly follows the normal curve, then we can use the normal curve as a model to estimate the percent of the observations that fall in a given range. Just like we add up the area of the bars to compute percentages with a histogram, we add up the area under the normal curve to approximate percentages.
For example, to find the percent of the data between -1 and +2 in the histogram below, we simply need to find the area of the red shape.
7.5 The Normal Table
Unfortunately, the normal curve isn’t a collection of rectangles like a histogram. In this case, we need some understanding of integral calculus and a computer.
Fortunately, we can use a simple of areas-under-the-curve without worrying about calculus.
But there’s a problem: Histograms of variables can have different averages and different SDs. The normal curve only works for a variable with an average of zero and and SD of one.
But there’s a simple solution: We can easily convert to standard units or z-scores to link a histogram with any average and SD to the normal curve. To convert to standard units or z-scores, We simply subtract the average and divide by the SD.
\(z\text{-score} = \dfrac{\text{value} - \text{average}}{\text{SD}}\)
Suppose we have the list \(X = \{1, 2, 3, 4, 5\}\). Then the average is 3, and the SD is about 1.41. We can compute the zscore for the first entry 1 as \(\frac{1 - 3}{1.42} \approx -1.42\). Similarly, we can convert the entire list to z-scores and get \(Z = \{-1.42, -0.71, 0.00, 0.71, 1.42\}\). If you compute the average and SD of the list \(Z\), you will find zero and one, respectively.
These \(z\)-scores have a nice interpretation: They tell you the number of SDs a value falls above (or below) the average. For example, a \(z\)-score of 1.5 corresponds to a value 1.5 SDs above the average. A \(z\)-score of -2.2 refers to a value 2.2 SDs below the average.
So long as we convert to standard units, we can use a normal table to compute any areas of interest under the normal curve.
As an example, the small table below reports the percent of the normal curve between a particular value \(z\) and \(-z\) (i.e., the area “in the middle”). (The normal table on p. A-104 of FPP works the same way. There’s a more complete normal table as an appendix to these notes.)
| z | % between -z and z | Status |
|---|---|---|
| 0.00 | 0% | |
| 0.10 | 8% | |
| 0.20 | 16% | |
| 0.30 | 24% | |
| 0.40 | 31% | |
| 0.50 | 38% | |
| 0.75 | 55% | |
| 1.00 | 68% | Important |
| 1.50 | 87% | |
| 1.64 | 90% | |
| 1.96 | 95% | Important |
| 2.00 | 95% | Important |
| 3.00 | 100% |
7.6 Using a Normal Approximation
To do a normal approximation, follow these steps:
- Draw a picture. This is really important. If you can draw the correct picture, it’s really easy to find the correct approximation.
- Draw the normal curve.
- Label the points of interest. I find it helpful to label the average as well.
- Shade the area of interest.
- Convert the points of interest to z-scores. I like to add the z-scores in parentheses underneath the points of interest.
- Use the Rules of the Normal Curve.
- The normal table gives the area between \(z\) and its opposite \(-z\). See FPP A-104 or the appendix in these notes. Usually start here.
- The area under the entire curve is 100%.
- The curve is symmetric, so that the area above a particular value \(z\) equals the area below its opposite \(-z\).
Let’s see an example.
7.7 Example: The Extremity of Party Leaders
To illustrate the normal approximation, let’s use it to estimate the percent of each party more extreme than their leaders during the 115th Congress.
The histograms below show the ideology of legislators by party.
The table below shows the average and SD by party.
| Party | Average | SD |
|---|---|---|
| Democrat | -0.39 | 0.12 |
| Republican | 0.49 | 0.15 |
The table below lists some of the leaders of each party and their ideology score. For each party leader, we can use two approaches approaches to quickly estimate the percent of the party that is “more extreme” than their leader: inspect the histogram and use the normal approximation.
| Name | Party | Position | Ideology Score | Inspect Histogram | Normal Approximation | Actual |
|---|---|---|---|---|---|---|
| RYAN, Paul D. | Republican | Speaker of the House | 0.56 | |||
| MCCARTHY, Kevin | Republican | Majority Leader | 0.46 | |||
| SCALISE, Steve | Republican | Majority Whip | 0.56 | |||
| McMORRIS RODGERS, Cathy | Republican | Conference Chair | 0.43 | |||
| PELOSI, Nancy | Democrat | Minority Leader | -0.49 | |||
| HOYER, Steny Hamilton | Democrat | Minority Whip | -0.38 | |||
| CLYBURN, James Enos | Democrat | Assistant Democratic Leader | -0.46 | |||
| LEWIS, John R. | Democrat | Senior Chief Deputy Minority Whip | -0.59 |
Let’s start with Paul Ryan. First, his ideology score is 0.56 (more conservative than the average for his party). A quick glance at the histogram for Republicans suggests that about 40% of Republicans are more extreme (more conservative) than Paul Ryan.
Since this histogram roughly follows the normal curve, we can get an even more precise estimate using the normal approximation. First, convert Paul Ryan’s ideology score to standard units. We get \(z = \frac{0.56 - 0.49}{0.15} \approx 0.47\). This means that Paul Ryan is about 0.47 SDs more conservative than average.
To find the percent more extreme than Paul Ryan, start by drawing a picture. Draw the normal curve, add the points of interest, and shade the area of interest.
Next, convert the points of interest to z-scores. The average always becomes zero and 0.56 becomes \(\frac{0.56-0.49}{0.15} = 0.47\).
Finally, use the rules. It’s usually best to start with the normal table, so let’s look up 0.47. There’s no z = 0.47, so just choose the closest, which is z = 0.45. According to the table, the percent between -0.45 and 0.45 is 34.73% or 35%. This is shown in orange below.
If the orange piece “in the middle” is 35%, then there’s 65% left over in two tails together (green plus grey). Notice, though, that these two tails are symmetric and therefore equal. Then each tail has 65%/2 or about 33%.
Therefore, the green area–the area of interest–is about 33%. This means that about 33% of Republican legislators are more extreme than Paul Ryan.


My Servers
To view and edit the emotes for a server, click on the name of it below.
{%- for column in g.guilds | batch(3) %}
{%- for guild in column %}
{%- endfor %}
{%- endfor %}
If the list above is missing the server you want to edit, ensure you have Manage Server permissions on the server.


Product Stuff
Product Name:
Product Price:
Name
Price
{{product.name}}
${{product.price}}
Remove Product
Order Stuff
Name
Price
Qty Available
{{product.name}}
${{product.price}}
{{product.quantity}}
Buy


#Security in time
HashtagSecurity.com has gone a long way since it started over two years ago.
In the depths of my hard drive I found screenshots of older hashtagsecurity.com versions, so I decided to share them with you!
Back when I started it was a blog about pretty much everything that crossed my mind. Having it's roots in my first, now buried blog mohrphium.com which I started during my apprenticeship it wasn't soley focused on security. However, after I got my hands on the domain hashtagsecurity.com, I decided to leave the administration area and get more into infosec.
The first "logo" I created was done during a trainride on my tablet. I was playing with different brush settings on a new painting app and created a "#" that I thought would make a great logo for my new blog.
Original logo on my old wordpress blog:
I'm no designer, that's for sure - but still, I should have known better. After some time, even I noticed that the resolution was crappy, so I imported the jpg file in inkscape, created a svg off it and imported that into blender. Yes, I created my v.1.1 logo in a 3D moddeling application. That should give you a pretty good picture of how 1337 my design skills are.
Over time I rendered different logos, but the last one was this:
The logo was of course not the only thing that changed. In the beginning I often found my blog showing really old posts. It's the typical beginners blogging problem.
- Post - "There is not much here yet, but I'm gonna start writing soon"
- Post - "Sorry for not writing in such a long time, but it's gonna change real soon, promise"
Even though I didn't actually write it that way, the publishing dates speak for themselves.
I still have to force myself from time to time to publish posts, but all in all I got kind of a thing going now.
As every beginning blogger, I wondered if anyone was reading my blog at all. And I still do actually. That's why I added Google Analytics at one point. That was pretty much at the beginning, back when it was still running on wordpress. After Ghost came out, I switched to the nodejs powered new blogging platform and had so many new problems that tracking and analytics wasn't really on my mind anymore.
I tried a few themes but ended up writing my first crappy theme in html,css,js and ghost handles.
This was version 1.0, and it even came with a "mobile version" which only worked in a few browsers correctly as you can see here.
For a first try I thought it acceptable, when in fact it sucked quite much. So I rewrote the whole thing twice, and what you see today is actually v3.1.
Version 2.0 was my first complete rewrite, and though I stuck to the overall design, there was quite a huge change in the codebase.
The big rewrite not only improved my theme, but also my rudimentary CSS,HTML and JS skills allowing me to finally solve many problems with my mobile theme.
Between writing version 2.0 and 3.0 I again found myself wondering if anyone actually read my blog and started to thing about my objective. Why was I writing this stuff? And why was I publishing it for everyone to see? The short answer is, because I like to help people. I love finding the solution to a problem in minutes on somebodies blog and I always wanted to contribute to the open knowledge and source community. Realizing that, I noticed that it doesn't matter how many people read my blog. If it helped even just one person, the post was worth writing it.
I installed Kibana at one point to get a rough overview of visitors from my webservers access logs, but that's about it. I have no need for cookies, tracking or advertisement. The cookies that are created are because of the twitter panel on the right, and I'm not even sure if I'm going to keep that.
I enjoy a clean blog, and that means no ads, no tracking and no click marathons to get the information you want.
After all that, it seems that I found time to look at my logo again. And it's fair to say that I did not like it anymore. So I set out to the task of designing a new one. As I've mentioned before I'm no designer so it took me longer than I'm want to admit. Here are two of the ideas I had that I scribbled on a pink post-it.
Not much? That's because no matter at how many designs of hashtags I looked, I couldn't come up with something I liked.
Finally I fired up blender again and due to a lighting accident I came up with this.
This was actually the first logo I kind of liked. I showed it to a few of my colleagues and they said "Show it to the guys from the graphics department, they can surely give you some good feedback". Oh boy!
I showed it to Nick. He just shook his head and sent me some examples a few minutes later. I mashed them all together to get a better overview, but they where all in high resolution.
After a few mails back and forth, he came up with these two for twitter and one with "Security" instead of just "SEC" for the blog header.
I really liked the red version as well, but since the blog had a blue theme going, I sticked with it in the end. It was a tough decision though!
The new logo inspired me to write version 3.1 and change a few things on the theme. This is how the blog looked like a few days ago, still with the old structure and logo. It's the first minor version update, as it only takes on minor feature changes and overall design. The change from 2.0 to 3.0 had much bigger changes, such as "mobile first" and a complete rewrite of the CSS stylesheet.
For comparison, this is what the previous theme, so to say version 3.0 looked like.
It might not look that different from 2.0, but again there is quite a lot of code I ripped out and completely wrote new.
Of course it's not done yet and I'm always going to be changing it. But I hope at least now it's representable.
If you want to give me some feedback I would appreaciate it. Just put it in the comment section or tweet me @HashtagSecurity.


Create new Project
{[{project.description}]}
Go to Project
Edit Project
Create new Staff member
{[{employee.email}]}
{[{employee.phone}]}
Edit Staff member informations


Package com.welie.blessed
Enum HciStatus
- java.lang.Object
-
- java.lang.Enum<HciStatus>
-
- com.welie.blessed.HciStatus
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Comparable<HciStatus>
public enum HciStatus extends java.lang.Enum<HciStatus>
This class describes the HCI error codes as defined in the Bluetooth Standard, Volume 1, Part F, 1.3 HCI Error Code, pages 364-377. See https://www.bluetooth.org/docman/handlers/downloaddoc.ashx?doc_id=478726,
-
-
Enum Constant Summary
Enum Constants Enum Constant Description ADVERTISING_TIMEOUT
Advertising for a fixed duration completed or, for directed advertising, that advertising completed without a connection being created.AUTHENTICATION_FAILURE
Pairing or authentication failed due to incorrect results in the pairing or authentication procedure.CHANNEL_CLASSIFICATION_NOT_SUPPORTED
The Controller cannot perform channel assessment because it is not supported.COARSE_CLOCK_ADJUSTMENT_REJECTED
The master, at this time, is unable to make a coarse adjustment to the piconet clock, using the supplied parameters.COMMAND_DISALLOWED
The command requested cannot be executed because the Controller is in a state where it cannot process this command at this time.CONNECTION_ACCEPT_TIMEOUT_EXCEEDED
The Connection Accept Timeout has been exceeded for this connection attempt.CONNECTION_ALREADY_EXISTS
A connection to this device already exists and multiple connections to the same device are not permitted.CONNECTION_FAILED_ESTABLISHMENT
The LL initiated a connection but the connection has failed to be established.CONNECTION_LIMIT_EXCEEDED
The Controller is already at its limit of the number of connections it can support.CONNECTION_REJECTED_LIMITED_RESOURCES
A connection was rejected due to limited resources.CONNECTION_REJECTED_NO_SUITABLE_CHANNEL
The Controller could not calculate an appropriate value for the Channel selection operation.CONNECTION_REJECTED_SECURITY_REASONS
A connection was rejected due to security requirements not being fulfilled, like authentication or pairing.CONNECTION_REJECTED_UNACCEPTABLE_MAC_ADDRESS
connection was rejected because this device does not accept the BD_ADDRCONNECTION_TERMINATED_BY_LOCAL_HOST
The local device terminated the connection.CONNECTION_TERMINATED_MIC_FAILURE
The connection was terminated because the Message Integrity Check (MIC) failed on a received packet.CONNECTION_TIMEOUT
The link supervision timeout has expired for a given connection.CONTROLLER_BUSY
The Controller was busy and unable to process the request.DIFFERENT_TRANSACTION_COLLISION
An LMP transaction or LL Procedure was started that collides with an ongoing transaction.ENCRYPTION_MODE_NOT_ACCEPTABLE
The requested encryption mode is not acceptable at this time.ERROR
FAILURE_REGISTERING_CLIENT
Failure to register client when trying to connect.HARDWARE_FAILURE
A hardware failure has occurredHOST_BUSY_PAIRING
The Host is busy with another pairing operation and unable to support the requested pairing.INQUIRY_RESPONSE_TOO_LARGE
The extended inquiry response, with the requested requirements for FEC, is too large to fit in any of the packet types supported by the Controller.INSTANT_PASSED
An LMP PDU or LL PDU that includes an instant cannot be performed because the instant when this would have occurred has passed.INSUFFICIENT_SECURITY
The HCI command or LMP PDU sent is only possible on an encrypted link.INVALID_COMMAND_PARAMETERS
At least one of the HCI command parameters is invalid.INVALID_LMP_OR_LL_PARAMETERS
Some LMP PDU / LL Control PDU parameters were invalid.LIMIT_REACHED
The number of operations requested has been reached and has indicated the completion of the activity (e.g., advertising or scanning).LINK_KEY_CANNOT_BE_EXCHANGED
A link key cannot be changed because a fixed unit key is being used.LMP_OR_LL_ERROR_TRANS_COLLISION
An LMP transaction or LL procedure has collided with the same transaction or procedure that is already in progress.LMP_OR_LL_RESPONSE_TIMEOUT
An LMP transaction failed to respond within the LMP response timeout or an LL transaction failed to respond within the LL response timeout.LMP_PDU_NOT_ALLOWED
A Controller sent an LMP PDU with an OpCode that was not allowed.MAC_CONNECTION_FAILED
The MAC of the 802.11 AMP was requested to connect to a peer, but the connection failed.MAX_NUM_OF_CONNECTIONS_EXCEEDED
The Controller has reached the limit to the number of synchronous connections that can be achieved to a device.MEMORY_FULL
The Controller has run out of memory to store new parameters.OPERATION_CANCELLED_BY_HOST
A request to the Controller issued by the Host and still pending was successfully canceled.PACKET_TOO_LONG
An attempt was made to send or receive a packet that exceeds the maximum allowed packet length.PAGE_TIMEOUT
a page timed out because of the Page Timeout configuration parameter.PAIRING_NOT_ALLOWED
The device does not allow pairingPAIRING_WITH_UNIT_KEY_NOT_SUPPORTED
It was not possible to pair as a unit key was requested and it is not supported.PARAMETER_OUT_OF_RANGE
A parameter value requested is outside the mandatory range of parameters for the given HCI command or LMP PDU and the recipient does not accept that value.PIN_OR_KEY_MISSING
Pairing failed because of a missing PIN, or authentication failed because of a missing Key.QOS_REJECTED
The specified quality of service parameters cannot be accepted and QoS negotiation should be terminatedQOS_UNACCEPTABLE_PARAMETER
The specified quality of service parameters could not be accepted at this time, but other parameters may be acceptable.REMOTE_DEVICE_TERMINATED_CONNECTION_LOW_RESOURCES
The remote device terminated the connection because of low resources.REMOTE_DEVICE_TERMINATED_CONNECTION_POWER_OFF
The remote device terminated the connection because the device is about to power off.REMOTE_USER_TERMINATED_CONNECTION
The user on the remote device terminated the connection.REPEATED_ATTEMPTS
The Controller is disallowing an authentication or pairing procedure because too little time has elapsed since the last authentication or pairing attempt failed.REQUESTED_QOS_NOT_SUPPORTED
The requested Quality of Service is not supported.RESERVED_SLOT_VIOLATION
The current Synchronous negotiation was terminated with the negotiation state set to Reserved Slot Violation.ROLE_CHANGE_NOT_ALLOWED
a Controller will not allow a role change at this time.ROLE_SWITCH_FAILED
A role switch was attempted but it failed and the original piconet structure is restored.ROLE_SWITCH_PENDING
A Role Switch is pending.SCO_AIR_MODE_REJECTED
The air mode requested in the LMP_SCO_link_req PDU has been rejected.SCO_INTERVAL_REJECTED
The interval requested in the LMP_SCO_link_req PDU has been rejected.SCO_OFFSET_REJECTED
The offset requested in the LMP_SCO_link_req PDU has been rejected.SECURE_SIMPLE_PAIRING_NOT_SUPPORTED
The IO capabilities request or response was rejected because the sending Host does not support Secure Simple Pairing even though the receiving Link Manager does.SUCCESS
Command was successfulTYPE0_SUBMAP_NOT_DEFINED
The LMP PDU is rejected because the Type 0 submap is not currently defined.UNACCEPTABLE_CONNECTION_PARAMETERS
The remote device either terminated the connection or rejected a request because of one or more unacceptable connection parameters.UNDEFINED_0x2B
Undefined error codeUNDEFINED_0x31
Undefined errorUNDEFINED_0x33
Undefined errorUNKNOWN_ADVERTISING_IDENTIFIER
A command was sent from the Host that should identify an Advertising or Sync handle, but the Advertising or Sync handle does not exist.UNKNOWN_COMMAND
The controller does not understand the HCI Command Packet OpCode that the Host sent.UNKNOWN_CONNECTION_IDENTIFIER
The connection identifier used is unknownUNKNOWN_LMP_PDU
The Controller has received an unknown LMP OpCode.UNKNOWN_STATUS_CODE
Used when status code is not defined in the classUNSPECIFIED
No other error code specified is appropriate to useUNSUPPORTED_LMP_OR_LL_PARAMETER_VALUE
An LMP PDU or an LL Control PDU contains at least one parameter value that is not supported by the Controller at this time.UNSUPPORTED_PARAMETER_VALUE
A feature or parameter value in the HCI command is not supported.UNSUPPORTED_REMOTE_FEATURE
The remote device does not support the feature associated with the issued command or LMP PDU.
-
Field Summary
Fields Modifier and Type Field Description int
value
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static @NotNull HciStatus
fromValue(int value)
static HciStatus
valueOf(java.lang.String name)
Returns the enum constant of this type with the specified name.static HciStatus[]
values()
Returns an array containing the constants of this enum type, in the order they are declared.
-
-
-
Enum Constant Detail
-
SUCCESS
public static final HciStatus SUCCESS
Command was successful
-
UNKNOWN_COMMAND
public static final HciStatus UNKNOWN_COMMAND
The controller does not understand the HCI Command Packet OpCode that the Host sent.
-
UNKNOWN_CONNECTION_IDENTIFIER
public static final HciStatus UNKNOWN_CONNECTION_IDENTIFIER
The connection identifier used is unknown
-
HARDWARE_FAILURE
public static final HciStatus HARDWARE_FAILURE
A hardware failure has occurred
-
PAGE_TIMEOUT
public static final HciStatus PAGE_TIMEOUT
a page timed out because of the Page Timeout configuration parameter.
-
AUTHENTICATION_FAILURE
public static final HciStatus AUTHENTICATION_FAILURE
Pairing or authentication failed due to incorrect results in the pairing or authentication procedure. This could be due to an incorrect PIN or Link Key.
-
PIN_OR_KEY_MISSING
public static final HciStatus PIN_OR_KEY_MISSING
Pairing failed because of a missing PIN, or authentication failed because of a missing Key.
-
MEMORY_FULL
public static final HciStatus MEMORY_FULL
The Controller has run out of memory to store new parameters.
-
CONNECTION_TIMEOUT
public static final HciStatus CONNECTION_TIMEOUT
The link supervision timeout has expired for a given connection.
-
CONNECTION_LIMIT_EXCEEDED
public static final HciStatus CONNECTION_LIMIT_EXCEEDED
The Controller is already at its limit of the number of connections it can support.
-
MAX_NUM_OF_CONNECTIONS_EXCEEDED
public static final HciStatus MAX_NUM_OF_CONNECTIONS_EXCEEDED
The Controller has reached the limit to the number of synchronous connections that can be achieved to a device.
-
CONNECTION_ALREADY_EXISTS
public static final HciStatus CONNECTION_ALREADY_EXISTS
A connection to this device already exists and multiple connections to the same device are not permitted.
-
COMMAND_DISALLOWED
public static final HciStatus COMMAND_DISALLOWED
The command requested cannot be executed because the Controller is in a state where it cannot process this command at this time.
-
CONNECTION_REJECTED_LIMITED_RESOURCES
public static final HciStatus CONNECTION_REJECTED_LIMITED_RESOURCES
A connection was rejected due to limited resources.
-
CONNECTION_REJECTED_SECURITY_REASONS
public static final HciStatus CONNECTION_REJECTED_SECURITY_REASONS
A connection was rejected due to security requirements not being fulfilled, like authentication or pairing.
-
CONNECTION_REJECTED_UNACCEPTABLE_MAC_ADDRESS
public static final HciStatus CONNECTION_REJECTED_UNACCEPTABLE_MAC_ADDRESS
connection was rejected because this device does not accept the BD_ADDR
-
CONNECTION_ACCEPT_TIMEOUT_EXCEEDED
public static final HciStatus CONNECTION_ACCEPT_TIMEOUT_EXCEEDED
The Connection Accept Timeout has been exceeded for this connection attempt.
-
UNSUPPORTED_PARAMETER_VALUE
public static final HciStatus UNSUPPORTED_PARAMETER_VALUE
A feature or parameter value in the HCI command is not supported.
-
INVALID_COMMAND_PARAMETERS
public static final HciStatus INVALID_COMMAND_PARAMETERS
At least one of the HCI command parameters is invalid.
-
REMOTE_USER_TERMINATED_CONNECTION
public static final HciStatus REMOTE_USER_TERMINATED_CONNECTION
The user on the remote device terminated the connection.
-
REMOTE_DEVICE_TERMINATED_CONNECTION_LOW_RESOURCES
public static final HciStatus REMOTE_DEVICE_TERMINATED_CONNECTION_LOW_RESOURCES
The remote device terminated the connection because of low resources.
-
REMOTE_DEVICE_TERMINATED_CONNECTION_POWER_OFF
public static final HciStatus REMOTE_DEVICE_TERMINATED_CONNECTION_POWER_OFF
The remote device terminated the connection because the device is about to power off.
-
CONNECTION_TERMINATED_BY_LOCAL_HOST
public static final HciStatus CONNECTION_TERMINATED_BY_LOCAL_HOST
The local device terminated the connection.
-
REPEATED_ATTEMPTS
public static final HciStatus REPEATED_ATTEMPTS
The Controller is disallowing an authentication or pairing procedure because too little time has elapsed since the last authentication or pairing attempt failed.
-
PAIRING_NOT_ALLOWED
public static final HciStatus PAIRING_NOT_ALLOWED
The device does not allow pairing
-
UNKNOWN_LMP_PDU
public static final HciStatus UNKNOWN_LMP_PDU
The Controller has received an unknown LMP OpCode.
-
UNSUPPORTED_REMOTE_FEATURE
public static final HciStatus UNSUPPORTED_REMOTE_FEATURE
The remote device does not support the feature associated with the issued command or LMP PDU.
-
SCO_OFFSET_REJECTED
public static final HciStatus SCO_OFFSET_REJECTED
The offset requested in the LMP_SCO_link_req PDU has been rejected.
-
SCO_INTERVAL_REJECTED
public static final HciStatus SCO_INTERVAL_REJECTED
The interval requested in the LMP_SCO_link_req PDU has been rejected.
-
SCO_AIR_MODE_REJECTED
public static final HciStatus SCO_AIR_MODE_REJECTED
The air mode requested in the LMP_SCO_link_req PDU has been rejected.
-
INVALID_LMP_OR_LL_PARAMETERS
public static final HciStatus INVALID_LMP_OR_LL_PARAMETERS
Some LMP PDU / LL Control PDU parameters were invalid.
-
UNSPECIFIED
public static final HciStatus UNSPECIFIED
No other error code specified is appropriate to use
-
UNSUPPORTED_LMP_OR_LL_PARAMETER_VALUE
public static final HciStatus UNSUPPORTED_LMP_OR_LL_PARAMETER_VALUE
An LMP PDU or an LL Control PDU contains at least one parameter value that is not supported by the Controller at this time.
-
ROLE_CHANGE_NOT_ALLOWED
public static final HciStatus ROLE_CHANGE_NOT_ALLOWED
a Controller will not allow a role change at this time.
-
LMP_OR_LL_RESPONSE_TIMEOUT
public static final HciStatus LMP_OR_LL_RESPONSE_TIMEOUT
An LMP transaction failed to respond within the LMP response timeout or an LL transaction failed to respond within the LL response timeout.
-
LMP_OR_LL_ERROR_TRANS_COLLISION
public static final HciStatus LMP_OR_LL_ERROR_TRANS_COLLISION
An LMP transaction or LL procedure has collided with the same transaction or procedure that is already in progress.
-
LMP_PDU_NOT_ALLOWED
public static final HciStatus LMP_PDU_NOT_ALLOWED
A Controller sent an LMP PDU with an OpCode that was not allowed.
-
ENCRYPTION_MODE_NOT_ACCEPTABLE
public static final HciStatus ENCRYPTION_MODE_NOT_ACCEPTABLE
The requested encryption mode is not acceptable at this time.
-
LINK_KEY_CANNOT_BE_EXCHANGED
public static final HciStatus LINK_KEY_CANNOT_BE_EXCHANGED
A link key cannot be changed because a fixed unit key is being used.
-
REQUESTED_QOS_NOT_SUPPORTED
public static final HciStatus REQUESTED_QOS_NOT_SUPPORTED
The requested Quality of Service is not supported.
-
INSTANT_PASSED
public static final HciStatus INSTANT_PASSED
An LMP PDU or LL PDU that includes an instant cannot be performed because the instant when this would have occurred has passed.
-
PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED
public static final HciStatus PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED
It was not possible to pair as a unit key was requested and it is not supported.
-
DIFFERENT_TRANSACTION_COLLISION
public static final HciStatus DIFFERENT_TRANSACTION_COLLISION
An LMP transaction or LL Procedure was started that collides with an ongoing transaction.
-
UNDEFINED_0x2B
public static final HciStatus UNDEFINED_0x2B
Undefined error code
-
QOS_UNACCEPTABLE_PARAMETER
public static final HciStatus QOS_UNACCEPTABLE_PARAMETER
The specified quality of service parameters could not be accepted at this time, but other parameters may be acceptable.
-
QOS_REJECTED
public static final HciStatus QOS_REJECTED
The specified quality of service parameters cannot be accepted and QoS negotiation should be terminated
-
CHANNEL_CLASSIFICATION_NOT_SUPPORTED
public static final HciStatus CHANNEL_CLASSIFICATION_NOT_SUPPORTED
The Controller cannot perform channel assessment because it is not supported.
-
INSUFFICIENT_SECURITY
public static final HciStatus INSUFFICIENT_SECURITY
The HCI command or LMP PDU sent is only possible on an encrypted link.
-
PARAMETER_OUT_OF_RANGE
public static final HciStatus PARAMETER_OUT_OF_RANGE
A parameter value requested is outside the mandatory range of parameters for the given HCI command or LMP PDU and the recipient does not accept that value.
-
UNDEFINED_0x31
public static final HciStatus UNDEFINED_0x31
Undefined error
-
ROLE_SWITCH_PENDING
public static final HciStatus ROLE_SWITCH_PENDING
A Role Switch is pending. This can be used when an HCI command or LMP PDU cannot be accepted because of a pending role switch. This can also be used to notify a peer device about a pending role switch.
-
UNDEFINED_0x33
public static final HciStatus UNDEFINED_0x33
Undefined error
-
RESERVED_SLOT_VIOLATION
public static final HciStatus RESERVED_SLOT_VIOLATION
The current Synchronous negotiation was terminated with the negotiation state set to Reserved Slot Violation.
-
ROLE_SWITCH_FAILED
public static final HciStatus ROLE_SWITCH_FAILED
A role switch was attempted but it failed and the original piconet structure is restored.
-
INQUIRY_RESPONSE_TOO_LARGE
public static final HciStatus INQUIRY_RESPONSE_TOO_LARGE
The extended inquiry response, with the requested requirements for FEC, is too large to fit in any of the packet types supported by the Controller.
-
SECURE_SIMPLE_PAIRING_NOT_SUPPORTED
public static final HciStatus SECURE_SIMPLE_PAIRING_NOT_SUPPORTED
The IO capabilities request or response was rejected because the sending Host does not support Secure Simple Pairing even though the receiving Link Manager does.
-
HOST_BUSY_PAIRING
public static final HciStatus HOST_BUSY_PAIRING
The Host is busy with another pairing operation and unable to support the requested pairing. The receiving device should retry pairing again later.
-
CONNECTION_REJECTED_NO_SUITABLE_CHANNEL
public static final HciStatus CONNECTION_REJECTED_NO_SUITABLE_CHANNEL
The Controller could not calculate an appropriate value for the Channel selection operation.
-
CONTROLLER_BUSY
public static final HciStatus CONTROLLER_BUSY
The Controller was busy and unable to process the request.
-
UNACCEPTABLE_CONNECTION_PARAMETERS
public static final HciStatus UNACCEPTABLE_CONNECTION_PARAMETERS
The remote device either terminated the connection or rejected a request because of one or more unacceptable connection parameters.
-
ADVERTISING_TIMEOUT
public static final HciStatus ADVERTISING_TIMEOUT
Advertising for a fixed duration completed or, for directed advertising, that advertising completed without a connection being created.
-
CONNECTION_TERMINATED_MIC_FAILURE
public static final HciStatus CONNECTION_TERMINATED_MIC_FAILURE
The connection was terminated because the Message Integrity Check (MIC) failed on a received packet.
-
CONNECTION_FAILED_ESTABLISHMENT
public static final HciStatus CONNECTION_FAILED_ESTABLISHMENT
The LL initiated a connection but the connection has failed to be established.
-
MAC_CONNECTION_FAILED
public static final HciStatus MAC_CONNECTION_FAILED
The MAC of the 802.11 AMP was requested to connect to a peer, but the connection failed.
-
COARSE_CLOCK_ADJUSTMENT_REJECTED
public static final HciStatus COARSE_CLOCK_ADJUSTMENT_REJECTED
The master, at this time, is unable to make a coarse adjustment to the piconet clock, using the supplied parameters. Instead the master will attempt to move the clock using clock dragging.
-
TYPE0_SUBMAP_NOT_DEFINED
public static final HciStatus TYPE0_SUBMAP_NOT_DEFINED
The LMP PDU is rejected because the Type 0 submap is not currently defined.
-
UNKNOWN_ADVERTISING_IDENTIFIER
public static final HciStatus UNKNOWN_ADVERTISING_IDENTIFIER
A command was sent from the Host that should identify an Advertising or Sync handle, but the Advertising or Sync handle does not exist.
-
LIMIT_REACHED
public static final HciStatus LIMIT_REACHED
The number of operations requested has been reached and has indicated the completion of the activity (e.g., advertising or scanning).
-
OPERATION_CANCELLED_BY_HOST
public static final HciStatus OPERATION_CANCELLED_BY_HOST
A request to the Controller issued by the Host and still pending was successfully canceled.
-
PACKET_TOO_LONG
public static final HciStatus PACKET_TOO_LONG
An attempt was made to send or receive a packet that exceeds the maximum allowed packet length.
-
ERROR
public static final HciStatus ERROR
-
FAILURE_REGISTERING_CLIENT
public static final HciStatus FAILURE_REGISTERING_CLIENT
Failure to register client when trying to connect. Probably because the max (30) of clients has been reached. The most likely fix is to make sure you always call close() after a disconnect happens.
-
UNKNOWN_STATUS_CODE
public static final HciStatus UNKNOWN_STATUS_CODE
Used when status code is not defined in the class
-
-
Method Detail
-
values
public static HciStatus[] values()
Returns an array containing the constants of this enum type, in the order they are declared. This method may be used to iterate over the constants as follows:for (HciStatus c : HciStatus.values()) System.out.println(c);
- Returns:
- an array containing the constants of this enum type, in the order they are declared
-
valueOf
public static HciStatus valueOf(java.lang.String name)
Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)- Parameters:
name
- the name of the enum constant to be returned.- Returns:
- the enum constant with the specified name
- Throws:
java.lang.IllegalArgumentException
- if this enum type has no constant with the specified namejava.lang.NullPointerException
- if the argument is null
-
fromValue
@NotNull public static @NotNull HciStatus fromValue(int value)
-
-


give me hope before I pay for something else
-
Fuga
Just today a new app has been released. It is very nice and priced decently. I will not name it here. Can you tell us any more information about when things might be right? You say it's an issue with iTunes. And it may be it is as Synergy works with iTunes. But this other app today works perfectly with any art whether originally from ITMS or from wherever I got it. CoverSutra works with all my iTunes art but otherwise I think it's crap. I'd hate to give up on Synergy.
-
Greg Hurrell
See bug #668 for coverage of the cover art problems. I also wrote this weblog post on the subject; here's a snippet:
I am planning on introducing an artificial delay in the next release to work around this problem (see bug #668), although I am still hopeful that Apple will fix the problem in a later iTunes release. In the meantime I've received multiple reports that going back to 7.6 fixes the problem.
Basically, this is an Apple bug introduced in iTunes 7.6.1 and unfortunately still present in 7.6.2. It looks like a timing issue, so my suspicion is that the faster your machine is the more likely you are to see the bug.
I've heard reports like yours of other products which don't have trouble getting art, and reports of other products which do have trouble. Once again I suspect this is a timing thing: those apps which query iTunes immediately for art (like Synergy) are the ones hit by the bug.
As noted in bug #668 and the weblog post linked to above, I have a workaround in mind involving delaying querying iTunes for art. I wish I didn't have to do this as it strikes me as an ugly kludge, but it seems I have no choice. Luckily, I think the delay we're talking about will probably be fairly small (0.1 of a second? 0.25?). The next Synergy release will incorporate this workaround whenever it detects that you're running a buggy version of iTunes; I'm hopeful that Apple will fix the bug soon so that I can remove the hack.
Another option you have in the meantime is dropping back to iTunes 7.6, which doesn't have the bug.
-
Fuga
I appreciate the quick reply and all that you wrote (of which the blog and bug report I had already read about). What I was hoping to hear was some kind of time reference other than what you had previously written: "I am planning ..." and "I have a workaround in mind ..." neither of which says anything is actually being done. Reverting iTunes versions is not an option.
Since the new app is lacking one semi-critical aspect (keyboard control) I will be anxiously waiting for a little while longer, but I fear time is running out for both me and Synergy. CoverSutra is winning fans (me, never) and now this other app.
I have beta tested many apps and so now volunteer if possible.
-
Greg Hurrell
I'm planning on putting out a new release early next week, so if you haven't already, add the Atom feed for bug #668 to your list of subscriptions so that you'll be the first to know when the new version is out.
I will most likely be doing a new release in the stable 3.2 series, as well as a new release in the experimental 3.5 alpha series. And it would be very helpful if you could test to make sure the workaround is effective seeing as my humble old iMac appears to be too slow to actually manifest the bug in iTunes.
-
Fuga
Sounds good!
Ouch. I can not imagine coding blind.
-
Greg Hurrell
Take a look at bug #668 for an update. I've got a preview build on the server and I am looking for help from testers, seeing as I can't reproduce the problem here locally and I'm dependent on others to confirm for me whether the workaround will actually work.
-
Fuga
No good here. Besides no art I have crashes within a few minutes (also had before, with other versions of the standalone app). I went to the trouble of uninstalling all my unsanity haxies. Booted in Safe Mode and then logged in with no startup items loading. Also dis all this with a fresh user. No art. Crashes. Will try another Leopard Intel machine tomorrow.
2.16 GHz Core 2 Duo MacBook 2 GB RAM OS X 10.5.2
Want the crash logs?
-
Greg Hurrell
I suspect that if you look at the crash logs it will be the infamous NSAppleScript bug that's covered in bug #640. Check out that report and if your crash logs look the same then there is no need to send them over as it is already a known issue. Apple is aware of the problem and has announced their intention to ship a fix, but they don't say when. As such, I am officially recommending that people stick with the 3.2 series for now (the 3.2 series doesn't use the new Garbage Collection technology in Leopard, which is where the bug is).
Reply
This topic is now closed.