The REST API Plugin provides the ability to manage Openfire by sending an REST/HTTP request to the server. This plugin’s functionality is useful for applications that need to administer Openfire outside of the Openfire admin console.
REST API clients are implementations of the REST API in a specific programming language.
Copy restAPI.jar into the plugins directory of your Openfire server. The plugin will then be automatically deployed. To upgrade to a new version, copy the new restAPI.jar file over the existing file.
To provide a standard way of accessing the data the plugin is using REST.
| HTTP Method | Usage |
|---|---|
| GET | Receive a read-only data |
| PUT | Overwrite an existing resource |
| POST | Creates a new resource |
| DELETE | Deletes the given resource |
All REST Endpoint are secured and must be authenticated. There are two ways to authenticate:
The configuration can be done in Openfire Admin console under Server > Server Settings > REST API.
To access the endpoints is that required to send the Username and Password of a Openfire Admin account in your HTTP header request.
E.g. Header: Authorization: Basic YWRtaW46MTIzNDU= (username: admin / password: 12345)
To access the endpoints is that required to send the secret key in your header request. The secret key can be defined in Openfire Admin console under Server > Server Settings > REST API.
E.g. Header: Authorization: s3cretKey
Openfire REST API provides XML and JSON as data format. The default
data format is XML.
To get a JSON result, please add “Accept
application/json” to the request header.
If you want to
create a resource with JSON data format, please add “Content-Type:
application/json“.
| Parameter | Optional | Description |
|---|---|---|
| username | No | The username of the user |
| name | Yes | The name of the user |
| Yes | The email of the user | |
| password | No | The password of the user |
| properties | Yes | List of properties. Property is a key / value object. The key must to be per user unique |
| Parameter | Optional | Description |
|---|---|---|
| jid | No | The JID of the roster item |
| nickname | Yes | The nickname for the user when used in this roster |
| subscriptionType | Yes | The subscription type Possible numeric values are: -1 (remove), 0 (none), 1 (to), 2 (from), 3 (both) |
| groups | No | A list of groups to organize roster entries under (e.g. friends, co-workers, etc.) |
| Parameter | Optional | Description |
|---|---|---|
| roomName | No | The name/id of the room. Can only contains lowercase and alphanumeric characters. |
| naturalName | No | Also the name of the room, but can contains non alphanumeric characters. It’s mainly used for users while discovering rooms hosted by the Multi-User Chat service. |
| description | No | Description text of the room. |
| subject | Yes | Subject of the room. |
| password | Yes | The password that the user must provide to enter the room |
| creationDate | Yes | The date when the room was created. Will be automatically set by creation. Example: 2014-07-10T09:49:12.411+02:00 |
| modificationDate | Yes | The last date when the room’s configuration was modified. If the room’s configuration was never modified then the initial value will be the same as the creation date. Will be automatically set by update. Example: 2014-07-10T09:49:12.411+02:00 |
| maxUsers | Yes | the maximum number of occupants that can be simultaneously in the room. 0 means unlimited number of occupants. |
| persistent | Yes | Can be “true” or “false”. Persistent rooms are saved to the database to make their configurations persistent together with the affiliation of the users. Otherwise the room will be destroyed if the last occupant leave the room. |
| publicRoom | Yes | Can be “true” or “false”. True if the room is searchable and visible through service discovery. |
| registrationEnabled | Yes | Can be “true” or “false”. True if users are allowed to register with the room. By default, room registration is enabled. |
| canAnyoneDiscoverJID | Yes | Can be “true” or “false”. True if every presence packet will include the JID of every occupant. |
| canOccupantsChangeSubject | Yes | Can be “true” or “false”. True if participants are allowed to change the room’s subject. |
| canOccupantsInvite | Yes | Can be “true” or “false”. True if occupants can invite other users to the room. If the room does not require an invitation to enter (i.e. is not members-only) then any occupant can send invitations. On the other hand, if the room is members-only and occupants cannot send invitation then only the room owners and admins are allowed to send invitations. |
| canChangeNickname | Yes | Can be “true” or “false”. True if room occupants are allowed to change their nicknames in the room. By default, occupants are allowed to change their nicknames. |
| logEnabled | Yes | Can be “true” or “false”. True if the room’s conversation is being logged. If logging is activated the room conversation will be saved to the database every couple of minutes. The saving frequency is the same for all the rooms and can be configured by changing the property “xmpp.muc.tasks.log.timeout”. |
| loginRestrictedToNickname | Yes | Can be “true” or “false”. True if registered users can only join the room using their registered nickname. By default, registered users can join the room using any nickname. |
| membersOnly | Yes | Can be “true” or “false”. True if the room requires an invitation to enter. That is if the room is members-only. |
| moderated | Yes | Can be “true” or “false”. True if the room in which only those with “voice” may send messages to all occupants. |
| broadcastPresenceRoles | Yes | The list of roles of which presence will be broadcasted to the rest of the occupants. |
| owners | Yes | A collection with the current list of owners. The collection contains the bareJID of the users with owner affiliation. |
| admins | Yes | A collection with the current list of admins. The collection contains the bareJID of the users with admin affiliation. |
| members | Yes | A collection with the current list of room members. The collection contains the bareJID of the users with member affiliation. If the room is not members-only then the list will contain the users that registered with the room and therefore they may have reserved a nickname. |
| outcasts | Yes | A collection with the current list of outcast users. An outcast user is not allowed to join the room again. The collection contains the bareJID of the users with outcast affiliation. |
| Parameter | Optional | Description |
|---|---|---|
| key | No | The name of the system property |
| value | No | The value of the system property |
| Parameter | Optional | Description |
|---|---|---|
| sessionId | No | Full JID of a user e.g<EMAIL_ADDRESS>|
| username | No | The username associated with this session. Can be also “Anonymous”. |
| ressource | Yes | Ressource name |
| node | No | Can be “Local” or “Remote” |
| sessionStatus | No | The current status of this session. Can be “Closed”, “Connected”, “Authenticated” or “Unknown”. |
| presenceStatus | No | The status of this presence packet, a natural-language description of availability status. |
| priority | No | The priority of the session. The valid priority range is -128 through 128. |
| hostAddress | No | Tthe IP address string in textual presentation. |
| hostName | No | The host name for this IP address. |
| creationDate | No | The date the session was created. |
| lastActionDate | No | The time the session last had activity. |
| secure | No | Is “true” if this connection is secure. |
| Parameter | Optional | Description |
|---|---|---|
| clusterSessions | No | Number of client sessions that are authenticated with the server. This includes anonymous and non-anoymous users from the whole cluster. |
| localSessions | No | Number of client sessions that are authenticated with the server. This includes anonymous and non-anoymous users. |
Endpoint to get all or filtered users
GET /users
Payload: none
Return
value: Users
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| search | @QueryParam | Search/Filter by username. This act like the wildcard search %String% |
|
| propertyKey | @QueryParam | Filter by user propertyKey. | |
| propertyValue | @QueryParam | Filter by user propertyKey and propertyValue. Note: It can only be used within propertyKey parameter |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/users
GET http://example.org:9090/plugins/restapi/v1/users?search=testuser
GET http://example.org:9090/plugins/restapi/v1/users?propertyKey=keyname
GET http://example.org:9090/plugins/restapi/v1/users?propertyKey=keyname&propertyValue=keyvalue
If you want to get a JSON format result, please add “Accept: application/json” to the Header.
Endpoint to get information over a specific user
GET /users/{username}
Payload: none
Return
value: User
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/users/testuser
Endpoint to create a new user
POST /users
Payload: User
Return
value: HTTP status 201 (Created)
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type: application/xml
Payload Example 1 (required parameters):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<username>test3</username>
<password>p4ssword</password>
</user>
Payload Example 2 (available parameters):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<username>testuser</username>
<password>p4ssword</password>
<name>Test User</name>
<EMAIL_ADDRESS><properties>
<property key="keyname" value="value"/>
<property key="anotherkey" value="value"/>
</properties>
</user>
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type: application/json
Payload Example 1 (required parameters):
{
"username": "admin",
"password": "p4ssword"
}
Payload Example 2 (available parameters):
{
"username": "admin",
"password": "p4ssword",
"name": "Administrator",
"email"<EMAIL_ADDRESS>"properties": {
"property": [
{
"@key": "console.rows_per_page",
"@value": "user-summary=8"
},
{
"@key": "console.order",
"@value": "session-summary=1"
}
]
}
}
Endpoint to delete a user
DELETE /users/{username}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
DELETE http://example.org:9090/plugins/restapi/v1/users/testuser
Endpoint to update / rename a user
PUT /users/{username}
Payload: User
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPUT http://example.org:9090/plugins/restapi/v1/users/testuser
Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<username>testuser</username>
<name>Test User edit</name>
<EMAIL_ADDRESS><properties>
<property key="keyname" value="value"/>
</properties>
</user>
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPUT http://example.org:9090/plugins/restapi/v1/users/oldUsername
Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<user>
<username>newUsername</username>
<name>Test User edit</name>
<EMAIL_ADDRESS><properties>
<property key="keyname" value="value"/>
</properties>
</user>
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/jsonPUT http://example.org:9090/plugins/restapi/v1/users/testuser
Payload:
{
"username": "testuser",
"name": "Test User edit",
"email"<EMAIL_ADDRESS>"properties": {
"property": {
"@key": "keyname",
"@value": "value"
}
}
}
Endpoint to get group names of a specific user
GET /users/{username}/groups
Payload: none
Return
value: Groups
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/users/testuser/groups
Endpoint to add user to a groups
POST /users/{username}/groups
Payload: Groups
Return
value: HTTP status 201 (Created)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPOST http://example.org:9090/plugins/restapi/v1/users/testuser/groups
Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<groups>
<groupname>Admins</groupname>
<groupname>Support</groupname>
</groups>
Endpoint to add user to a group
POST /users/{username}/groups/{groupName}
Payload: none
Return
value: HTTP status 201 (Created)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username | |
| groupName | @Path | Exact group name |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPOST http://example.org:9090/plugins/restapi/v1/users/testuser/groups/testGroup
Endpoint to remove a user from a groups
DELETE /users/{username}/groups
Payload: Groups
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlDELETE http://example.org:9090/plugins/restapi/v1/users/testuser/groups
Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<groups>
<groupname>Admins</groupname>
<groupname>Support</groupname>
</groups>
Endpoint to remove a user from a group
DELETE /users/{username}/groups/{groupName}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username | |
| groupName | @Path | Exact group name |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlDELETE http://example.org:9090/plugins/restapi/v1/users/testuser/groups/testGroup
Endpoint to lockout / ban the user from the chat server. The user will be kicked if the user is online.
POST /lockouts/{username}
Payload: none
Return
value: HTTP status 201 (Created)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
POST http://example.org:9090/plugins/restapi/v1/lockouts/testuser
Endpoint to unlock / unban the user
DELETE /lockouts/{username}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
DELETE http://example.org:9090/plugins/restapi/v1/lockouts/testuser
Endpoint to get roster entries (buddies) from a specific user
GET /users/{username}/roster
Payload: none
Return
value: Roster
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/users/testuser/roster
Endpoint to add a new roster entry to a user
POST /users/{username}/roster
Payload: RosterItem
Return
value: HTTP status 201 (Created)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPOST http://example.org:9090/plugins/restapi/v1/users/testuser/roster
Payload:
Payload Example 1 (required
parameters):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rosterItem>
<EMAIL_ADDRESS></rosterItem>
Payload Example 2 (available parameters):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rosterItem>
<EMAIL_ADDRESS><nickname>Peter1</nickname>
<subscriptionType>3</subscriptionType>
<groups>
<group>Friends</group>
</groups>
</rosterItem>
Endpoint to remove a roster entry from a user
DELETE /users/{username}/roster/{jid}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username | |
| jid | @Path | JID of the roster item |
Header: Authorization: Basic YWRtaW46MTIzNDU=
DELETE<EMAIL_ADDRESS>Endpoint to update a roster entry
PUT /users/{username}/roster/{jid}
Payload: RosterItem
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | Exact username | |
| jid | @Path | JID of the roster item |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPUT<EMAIL_ADDRESS>Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rosterItem>
<EMAIL_ADDRESS><nickname>Peter Pan</nickname>
<subscriptionType>0</subscriptionType>
<groups>
<group>Support</group>
</groups>
</rosterItem>
Endpoint to get all chat rooms
GET /chatrooms
Payload: none
Return
value: Chatrooms
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| servicename | @QueryParam | The name of the Group Chat Service | conference |
| type | @QueryParam | public: Only as List Room in Directory
set rooms all: All rooms. |
public |
| search | @QueryParam | Search/Filter by room name. This act like the wildcard search %String% |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/chatrooms
GET http://example.org:9090/plugins/restapi/v1/chatrooms?type=all
GET http://example.org:9090/plugins/restapi/v1/chatrooms?type=all&servicename=privateconf
GET http://example.org:9090/plugins/restapi/v1/chatrooms?search=test
Endpoint to get information over specific chat room
GET /chatrooms/{roomName}
Payload: none
Return
value: Chatroom
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| roomname | @Path | Exact room name | |
| servicename | @QueryParam | The name of the Group Chat Service | conference |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/chatrooms/test
GET http://example.org:9090/plugins/restapi/v1/chatrooms/test?servicename=privateconf
Endpoint to get all participants with a role of specified room.
GET /chatrooms/{roomName}/participants
Payload: none
Return
value: Participants
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| roomname | @Path | Exact room name | |
| servicename | @QueryParam | The name of the Group Chat Service | conference |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/chatrooms/room1/participants
Endpoint to create a new chat room.
POST /chatrooms
Payload: Chatroom
Return
value: HTTP status 201 (Created)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| servicename | @QueryParam | The name of the Group Chat Service | conference |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type: application/xml
Payload Example 1 (required parameters):
<chatRoom>
<naturalName>global-1</naturalName>
<roomName>global</roomName>
<description>Global Chat Room</description>
</chatRoom>
Payload Example 2 (available parameters):
<chatRoom>
<roomName>global</roomName>
<naturalName>global-2</naturalName>
<description>Global Chat Room</description>
<subject>global-2 Subject</subject>
<creationDate>2014-02-12T15:52:37.592+01:00</creationDate>
<modificationDate>2014-09-12T15:35:54.702+02:00</modificationDate>
<maxUsers>0</maxUsers>
<persistent>true</persistent>
<publicRoom>true</publicRoom>
<registrationEnabled>false</registrationEnabled>
<canAnyoneDiscoverJID>false</canAnyoneDiscoverJID>
<canOccupantsChangeSubject>false</canOccupantsChangeSubject>
<canOccupantsInvite>false</canOccupantsInvite>
<canChangeNickname>false</canChangeNickname>
<logEnabled>true</logEnabled>
<loginRestrictedToNickname>false</loginRestrictedToNickname>
<membersOnly>false</membersOnly>
<moderated>false</moderated>
<broadcastPresenceRoles>
<broadcastPresenceRole>moderator</broadcastPresenceRole>
<broadcastPresenceRole>participant</broadcastPresenceRole>
<broadcastPresenceRole>visitor</broadcastPresenceRole>
</broadcastPresenceRoles>
<owners>
<owner>owner@localhost</owner>
</owners>
<admins>
<admin>admin@localhost</admin>
</admins>
<members>
<member>member2@localhost</member>
<member>member1@localhost</member>
</members>
<outcasts>
<outcast>outcast1@localhost</outcast>
</outcasts>
</chatRoom>
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type: application/json
Payload Example 1 (required parameters):
{
"roomName": "global",
"naturalName": "global-2",
"description": "Global chat room"
}
Payload Example 2 (available parameters):
```
{
"roomName": "global-1",
"naturalName": "global-1_test_hello",
"description": "Global chat room",
"subject": "Global chat room subject",
"creationDate": "2012-10-18T16:55:12.803+02:00",
"modificationDate": "2014-07-10T09:49:12.411+02:00",
"maxUsers": "0",
"persistent": "true",
"publicRoom": "true",
"registrationEnabled": "false",
"canAnyoneDiscoverJID": "true",
"canOccupantsChangeSubject": "false",
"canOccupantsInvite": "false",
"canChangeNickname": "false",
"logEnabled": "true",
"loginRestrictedToNickname": "true",
"membersOnly": "false",
"moderated": "false",
"broadcastPresenceRoles": {
"broadcastPresenceRole": [
"moderator",
"participant",
"visitor"
]
},
"owners": {
"owner": "owner@localhost"
},
"admins": {
"admin": [
"admin@localhost",
"admin2@localhost"
]
},
"members": {
"member": [
"member@localhost",
"member2@localhost"
]
},
"outcasts": {
"outcast": [
"outcast@localhost",
"outcast2@localhost"
]
}
}
Endpoint to delete a chat room.
DELETE /chatrooms/{roomName}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| roomname | @Path | Exact room name | |
| servicename | @QueryParam | The name of the Group Chat Service | conference |
Header: Authorization: Basic YWRtaW46MTIzNDU=
DELETE http://example.org:9090/plugins/restapi/v1/chatrooms/testroom
DELETE http://example.org:9090/plugins/restapi/v1/chatrooms/testroom?servicename=privateconf
Endpoint to update a chat room.
PUT /chatrooms/{roomName}
Payload: Chatroom
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| roomname | @Path | Exact room name | |
| servicename | @QueryParam | The name of the Group Chat Service | conference |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPUT http://example.org:9090/plugins/restapi/v1/chatrooms/global
Payload:
<chatRoom>
<roomName>global</roomName>
<naturalName>global-2</naturalName>
<description>Global Chat Room edit</description>
<subject>New subject</subject>
<password>test</password>
<creationDate>2014-02-12T15:52:37.592+01:00</creationDate>
<modificationDate>2014-09-12T14:20:56.286+02:00</modificationDate>
<maxUsers>0</maxUsers>
<persistent>true</persistent>
<publicRoom>true</publicRoom>
<registrationEnabled>false</registrationEnabled>
<canAnyoneDiscoverJID>false</canAnyoneDiscoverJID>
<canOccupantsChangeSubject>false</canOccupantsChangeSubject>
<canOccupantsInvite>false</canOccupantsInvite>
<canChangeNickname>false</canChangeNickname>
<logEnabled>true</logEnabled>
<loginRestrictedToNickname>false</loginRestrictedToNickname>
<membersOnly>false</membersOnly>
<moderated>false</moderated>
<broadcastPresenceRoles/>
<owners>
<owner>owner@localhost</owner>
</owners>
<admins>
<admin>admin@localhost</admin>
</admins>
<members>
<member>member2@localhost</member>
<member>member1@localhost</member>
</members>
<outcasts>
<outcast>outcast1@localhost</outcast>
</outcasts>
</chatRoom>
Endpoint to add a new user with role to a room.
POST /chatrooms/{roomName}/{roles}/{name}
Payload: none
Return
value: HTTP status 201 (Created)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| roomname | @Path | Exact room name | |
| name | @Path | The local username or the user JID | |
| roles | @Path | Available roles: owners admins members outcasts |
|
| servicename | @QueryParam | The name of the Group Chat Service | conference |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPOST http://example.org:9090/plugins/restapi/v1/chatrooms/global/owners/testUser
POST<EMAIL_ADDRESS>POST http://example.org:9090/plugins/restapi/v1/chatrooms/global/admins/testUser
POST http://example.org:9090/plugins/restapi/v1/chatrooms/global/members/testUser
POST http://example.org:9090/plugins/restapi/v1/chatrooms/global/outcasts/testUser
POST http://example.org:9090/plugins/restapi/v1/chatrooms/global/owners/testUser?servicename=privateconf
Endpoint to remove a room user role.
DELETE
/chatrooms/{roomName}/{roles}/{name}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| roomname | @Path | Exact room name | |
| name | @Path | The local username or the user JID | |
| roles | @Path | Available roles: owners admins members outcasts |
|
| servicename | @QueryParam | The name of the Group Chat Service | conference |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlDELETE http://example.org:9090/plugins/restapi/v1/chatrooms/global/owners/testUser
DELETE<EMAIL_ADDRESS>DELETE http://example.org:9090/plugins/restapi/v1/chatrooms/global/admins/testUser
DELETE http://example.org:9090/plugins/restapi/v1/chatrooms/global/members/testUser
DELETE http://example.org:9090/plugins/restapi/v1/chatrooms/global/outcasts/testUser
DELETE http://example.org:9090/plugins/restapi/v1/chatrooms/global/owners/testUser?servicename=privateconf
Endpoint to get all system properties
GET /system/properties
Payload: none
Return
value: System properties
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/system/properties
Endpoint to get information over specific system property
GET /system/properties/{propertyName}
Payload: none
Return
value: System property
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| propertyName | @Path | The name of system property |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/system/properties/xmpp.domain
Endpoint to create a system property
POST system/properties
Payload: System Property
Return
value: HTTP status 201 (Created)
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type: application/xmlPOST http://example.org:9090/plugins/restapi/v1/system/properties
Payload Example:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<property key="propertyName" value="propertyValue"/>
Endpoint to delete a system property
DELETE /system/properties/{propertyName}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| propertyName | @Path | The name of system property |
Header: Authorization: Basic YWRtaW46MTIzNDU=
DELETE http://example.org:9090/plugins/restapi/v1/system/properties/propertyName
Endpoint to update / overwrite a system property
PUT /system/properties/{propertyName}
Payload: System property
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| propertyName | @Path | The name of system property |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPUT http://example.org:9090/plugins/restapi/v1/system/properties/propertyName
Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<property key="propertyName" value="anotherValue"/>
Endpoint to get count of concurrent sessions
GET /system/statistics/sessions
Payload: none
Return
value: Sessions count
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/system/statistics/sessions
Endpoint to get all groups
GET /groups
Payload: none
Return
value: Groups
Header: Authorization: Basic YWRtaW46MTIzNDU=
Endpoint to get information over specific group
GET /groups/{groupName}
Payload: none
Return
value: Group
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| groupName | @Path | The name of the group |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/groups/moderators
Endpoint to create a new group
POST /groups
Payload: Group
Return
value: HTTP status 201 (Created)
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type: application/xml
Payload Example:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<group>
<name>GroupName</name>
<description>Some description</description>
</group>
Endpoint to delete a group
DELETE /groups/{groupName}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| groupName | @Path | The name of the group |
Header: Authorization: Basic YWRtaW46MTIzNDU=
DELETE http://example.org:9090/plugins/restapi/v1/groups/groupToDelete
Endpoint to update / overwrite a group
PUT /groups/{groupName}
Payload: Group
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| groupName | @Path | The name of the group |
Header: Authorization: Basic YWRtaW46MTIzNDU=
Header: Content-Type application/xmlPUT http://example.org:9090/plugins/restapi/v1/groups/groupNameToUpdate
Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<group>
<name>groupNameToUpdate</name>
<description>New description</description>
</group>
Endpoint to get all user sessions
GET /sessions
Payload: none
Return
value: Sessions
Header: Authorization: Basic YWRtaW46MTIzNDU=
Endpoint to get sessions from a user
GET /sessions/{username}
Payload: none
Return
value: Sessions
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | The username of the user |
Header: Authorization: Basic YWRtaW46MTIzNDU=
GET http://example.org:9090/plugins/restapi/v1/sessions/testuser
Endpoint to close/kick sessions from a user
DELETE /sessions/{username}
Payload: none
Return
value: HTTP status 200 (OK)
| Parameter | Parameter Type | Description | Default value |
|---|---|---|---|
| username | @Path | The username of the user |
Header: Authorization: Basic YWRtaW46MTIzNDU=
DELETE http://example.org:9090/plugins/restapi/v1/sessions/testuser
Endpoint to send a broadcast/server message to all online users
POST /messages/users
Payload: Message
Return
value: HTTP status 201 (Created)
Header: Authorization: Basic YWRtaW46MTIzNDU=
POST http://example.org:9090/plugins/restapi/v1/messages/users
Payload:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<message>
<body>Your message</body>
</message>
The User Service Plugin provides the ability to add,edit,delete users and manage their rosters by sending an http request to the server. It is intended to be used by applications automating the user administration process. This plugin’s functionality is useful for applications that need to administer users outside of the Openfire admin console. An example of such an application might be a live sports reporting application that uses XMPP as its transport, and creates/deletes users according to the receipt, or non receipt, of a subscription fee.
Copy userservice.jar into the plugins directory of your Openfire server. The plugin will then be automatically deployed. To upgrade to a new version, copy the new userservice.jar file over the existing file.
Access to the service is restricted with a “secret” that can be viewed and set from the User Service page in the Openfire admin console. This page is located on the admin console under “Server” and then “Server Settings”. This should really only be considered weak security. The plugin was initially written with the assumption that http access to the Openfire service was only available to trusted machines. In the case of the plugin’s author, a web application running on the same server as Openfire makes the request.
To administer users, submit HTTP requests to the userservice service. The service address is [hostname]plugins/restapi/userservice. For example, if your server name is “example.com”, the URL is http://example.com/plugins/restapi/userservice
The following parameters can be passed into the request:
| Name | Description | |
|---|---|---|
| type | Required | The admin service required. Possible values are ‘add’, ‘delete’, ‘update’, ‘enable’, ‘disable’, ‘add_roster’, ‘update_roster’, ‘delete_roster’, ‘grouplist’, ‘usergrouplist’. |
| secret | Required | The secret key that allows access to the User Service. |
| username | Required | The username of the user to ‘add’, ‘delete’, ‘update’, ‘enable’, ‘disable’, ‘add_roster’, ‘update_roster’, ‘delete_roster’. ie the part before the @ symbol. |
| password | Required for ‘add’ operation | The password of the new user or the user being updated. |
| name | Optional | The display name of the new user or the user being updated. For ‘add_roster’, ‘update_roster’ operations specifies the nickname of the roster item. |
| Optional | The email address of the new user or the user being updated. | |
| groups | Optional | List of groups where the user is a member. Values are comma delimited. When used with types “add” or “update”, it adds the user to shared groups and auto-creates new groups. When used with ‘add_roster’ and ‘update_roster’, it adds the user to roster groups provided the group name does not clash with an existing shared group. |
| item_jid | Required for ‘add_roster’, ‘update_roster’, ‘delete_roster’ operations. | The JID of the roster item |
| subscription | Optional | Type of subscription for ‘add_roster’, ‘update_roster’ operations. Possible numeric values are: -1(remove), 0(none), 1(to), 2(from), 3(both). |
The following example adds a user
The following example adds a user, adds two shared groups (if not existing) and adds the user to both groups.
The following example deletes a user and all roster items of the user.
http://example.com:9090/plugins/restapi/userservice?type=delete&secret=bigsecret&username=kafka
The following example disables a user (lockout)
http://example.com:9090/plugins/restapi/userservice?type=disable&secret=bigsecret&username=kafka
The following example enables a user (removes lockout)
http://example.com:9090/plugins/restapi/userservice?type=enable&secret=bigsecret&username=kafka
The following example updates a user
The following example adds new roster item with subscription ‘both’ for user ‘kafka’
The following example adds new roster item with subscription ‘both’ for user ‘kafka’ and adds kafka to roster groups ‘family’ and ‘friends’
The following example updates existing roster item to subscription ‘none’ for user ‘kafka’
The following example deletes a specific roster item<EMAIL_ADDRESS>for user ‘kafka’
The following example gets all groups
http://example.com:9090/plugins/restapi/userservice?type=grouplist&secret=bigsecret
Which replies an XML group list formatted like this:
<result>
<groupname>group1</groupname>
<groupname>group2</groupname>
</result>
The following example gets all groups for a specific user
http://example.com:9090/plugins/restapi/userservice?type=usergrouplist&secret=bigsecret&username=kafka
Which replies an XML group list formatted like this:
<result>
<groupname>usergroup1</groupname>
<groupname>usergroup2</groupname>
</result>
* When sending double characters (Chinese/Japanese/Korean etc) you
should URLEncode the string as utf8.
In Java this is done
like this
URLEncoder.encode(username, “UTF-8”));
If the strings are encoded incorrectly, double byte characters will
look garbeled in the Admin Console.
The server will reply to all User Service requests with an XML result page. If the request was processed successfully the return will be a “result” element with a text body of “OK”, or an XML grouplist formatted like in the example for “grouplist” and “usergrouplist” above. If the request was unsuccessful, the return will be an “error” element with a text body of one of the following error strings.
| Error String | Description |
|---|---|
| IllegalArgumentException | One of the parameters passed in to the User Service was bad. |
| UserNotFoundException | No user of the name specified, for a delete or update operation, exists on this server. For ‘update_roster’ operation, roster item to be updated was not found. |
| UserAlreadyExistsException | A user with the same name as the user about to be added, already exists. For ‘add_roster’ operation, roster item with the same JID already exists. |
| RequestNotAuthorised | The supplied secret does not match the secret specified in the Admin Console or the requester is not a valid IP address. |
| UserServiceDisabled | The User Service is currently set to disabled in the Admin Console. |
| SharedGroupException | Roster item can not be added/deleted to/from a shared group for operations with roster. |


About Me
I am a Professor in School of Computer Science at Northwestern Polytechnical University, Xi’an, China. I am also with National Engineering Laboratory for Integrated Aero-Space-Ground-Ocean Big Data Application Technology, China.
I received a bachelor and a PhD degree at Beihang University, Beijing, China, in 2004 and 2011 respectively; then worked at Fujitsu Beijing R&D center for one year and at University of Adelaide for four years. Since 2017, I have been working as a Professor at Northwestern Polytechnical University.
My research is focused on Computer Vision, Machine Learning and Artificial Intelligence. Recently, I am particularly interested in Cross-media Intelligence, OCR and Instance-level Recognition. Some of my work have been published on top-tier journals and conferences on CV and AI, including TPAMI, IJCV, TIP, TGRS, TNNLS, TMM, CVIU, CVPR, ICCV, ECCV, AAAI and IJCAI.
News
2020/02/26 One TMM paper accepted.
2020/02/25 Two papers accepted by CVPR 2020.
2019/11/12 参加CSIG图像图形中国行-陕西科技大学站，并作报告。
2019/11/11 One AAAI paper (the first author is an undergraduate student) and one TIP paper got accepted.
2019/11/11 I served as a local co-chair for PRCV 2019. Our team presented 2 orals and 1 poster as well. conference website
2019/08/30 I co-organized a PR (IF=5.898) special issue on vision and language. Submission deadline: 12 February 2020. callfor
2019/08/27 参加ChinaMM2019讲习班，并作报告：“结合外部知识的视觉理解与推理”。
2019/08/14 Our team won the 3rd place in the plain reid track of the ICCV 2019 Challenge on Computer Vision for Wildlife Conservation. leaderboard, code
2019/07/25 参加CSIG“青年科学家论坛”，并作报告：“文本图像读取和图像语义理解”。
2019/07/23 One paper accepted by ICCV 2019.
2019/06/10 参加CCF-CV走进高校——“计算机视觉前沿技术及应用”报告会，并做题为“图像语义理解与视觉问答”的报告
2019/05/28 Our team was the 4th place in Task2.1 "Scene text recognition (Latin only)" of ICDAR2019 Robust Reading Challenge on Arbitrary-Shaped Text. leaderboard
2019/05/18 We won the 1st place in Task2 "Text Line Recognition in the Signboard" of ICDAR 2019 Robust Reading Challenge on Reading Chinese Text on Signboard, jointly with South China University of Technology and University of Adelaide. leaderboard, code
2019/04/12 I co-organized a VALSE 2019 Workshop on "Combining Vision and Language". link
2018/12/03 I co-organized an ACCV 2018 workshop on "Combining Vision and Language". link
2018/11/18 参加CSIG多媒体智能分析前沿论坛，担任学术沙龙主席并做报告：“场景文字检测与识别方向上的探索”。
2018/11/17 参加CCF-CV走进高校系列报告会，并做报告：“先见之明与他山之石——大数据时代下知识迁移的探索与实践”。
2018/09/01 We were the 3rd place in the fashion product search track of JD AI Fashion-Challenge, ChinaMM, 2018. leaderboard
Recruiting Research Students
I am actively recruiting Post-doc, PhD and Master students. Please contact me via email.
诚挚欢迎有志于从事计算机视觉、自然语言处理、机器学习和人工智能前沿方向研究的同学加入我的团队，报考我的硕士、博士和博士后。请通过邮件与我联系。
本课题组学术气氛热烈浓厚，与国内外众多一流高校有着长期密切的交流合作。我会为每位研究生安排一名国内外知名年轻学者作为共同导师，联合培养。
每位博士生和部分优秀硕士生均有6-24个月出国研修机会。课题组每年会参加Valse论坛。资助每一位有论文录用的学生去国外开会。
本实验室拥有一流的科研环境，配有超算服务器20余台，高性能GPU近百块，满足大规模机器学习算法模型的训练与测试。另为每个研究生单独配有一台GPU工作站，用于日常程序调试。
对于有意进入本课题组实习的优秀本科生，希望能保证在实验室工作一年以上并且每周16个小时的工作时间。


My two cents on digital pathology
Hello there! As someone who has been working in the pathology AI field for some time, I have seen firsthand how important it is to create accurate and reliable models. These models have the potential to revolutionize patient care and medical research, but they can only reach their full potential if a few key components are in place.
The three components that I have found to be essential are quality control (QC), generalizability, and proper validation.
When developing an AI model, it’s critical to ensure that the data used is of high quality and that there are no issues with data collection or preprocessing. This step is crucial because poor data quality can lead to inaccurate and unreliable models.
Generalizability is also vital when creating AI models. It’s essential to ensure that the model can perform well on data that it has never seen before. By creating a generalizable model, we can ensure that the model will be useful in a wide range of applications and not just on the data set that was used to train it.
Finally, proper validation is crucial when developing AI models. The model should be tested on various data sets to ensure that it is not overfitting or underfitting the data. Proper validation ensures that the model is reliable, repeatable, and can be used in real-world applications.
Through my work in pathology AI, I have come to the conclusion that these components are essential to the success of any AI model. They may seem like challenges to overcome, but with the right planning, these components can be addressed, leading to reliable and robust models. I will explain these in further details in the next blog posts.
I want to emphasize that AI models will be doomed to fail if quality control, generalizability, and validation are not considered. If you ever want to make sure that your models are deployable, they have to meet this criteria.
If you’re interested in learning more about creating robust AI solutions for whole slide images, Keep reading my blog and reach out to me for any help!
Comments


Loan amount
Interest Rate
Amortized
years
months
Compounding period
{{ option.text }}
Term years
months
Start date
Adjustment date
Payment frequency
{{ option.text }}
Regular payment
{{ regularPayment }}
Preferred payment
schedule
pdf
Payment
Date
Interest
Principal
Balance
{{payment.paymentNumber}}
{{payment.date | formatDate}}
{{payment.interest | formatMoney}}
{{payment.principal | formatMoney}}
{{payment.balance | formatMoney}}


Latest Exchange rates
change nav
Exchange Platform
Home
Account
Advertisements
Statistics Center
Logout
Business
Industry
Rate
Timestamp
Back


A good way to look at what HTML CSS and the DOM is to use the house analogy. HTML can be seen as the structure of the website and is like the different parts of a house. For example a webpage in HTML is split up into different sections, just as a house
is split into different rooms, HTML organises these sections.
More
Grid based design is breaking the layout of the page into different boxes. By doing this it is really easy to layout the page and work out what is going to go where and how to do it. A page might not always look like it
is sitting on a grid, but if you break it down and draw boxes round the sections, you'll soon see that it is.
More
A responsive website is an approach to web design that allows the site to be viewed from all different devices no matter the size. This is particularly important as we live in an age where people want and can get information on the go, and designing a user-friendly responsive site can make the difference on how your information is relayed to customers.
More
JavaScript compares differently to HTML and CSS as it is used for website functionality, this means it is able to process data and tells a page how to behave, where as HTML dictates structure, i.e. how the contents is divided, and CSS dictates style, i.e. how the page looks.
More
Problem Solving is an important skill to have when coding. This weeks technical blog reflects on the problem solving techniques that have been introduced to me and how well I utilise them as well as the method my brain follows when I'm blocked on a simple problem. There's more array lingo thrown in there too.
More
Very short and brief technical blog this week about Javascript language and the use cases for parentheses, brackets, braces, double quotes and single quotes.
More
Scope is the context in which values and expressions are "visible," or can be referenced to in your code. In Javascript there is two types of scope: local and global.
More


{% extends "account/base.html" %} {% load i18n %} {% load crispy_forms_tags %} {% block head_title %}{% trans "Account" %}{% endblock %} {% block inner %}
{% trans 'Warning:'%} {% trans "You currently do not have any e-mail address set up. You should really add an e-mail address so you can receive notifications, reset your password, etc." %}


{% extends 'layout.html' %} {% block body %}
Page not found. You can go back to the previous page, or return home.


EOS Network Could Remain Congested Due to EIDOS Airdrop
by Christine VasilevaThe EOS network is currently operating with the sole purpose of distributing a new digital coin, EIDOS. The coin, widely traded on exchanges already, offers a chance for generating almost guaranteed income from its sale.
EOS Network Runs on Borrowed Resources
The EOS network ground to a halt from November 1 to November 8. Now, activity has recovered, but research by crypto exchange Coinbase reveals that the bulk of activity is based on lending resources. Most transactions are still supporting the EIDOS simulated mining and airdrop, while only large accounts with a lot of EOS at stake are capable of buying CPU resources to run their distributed apps.
“Currently, we’re observing around 95% of all EOS transfer actions are related to the EIDOS contract. Because each transfer counts towards the amount of CPU used in a block, this spike in transfer actions caused the EOS network to enter congestion mode,” stated the Coinbase team.
Essentially, the EOS network is being used as a free money printer. Prior to October 31, several actors bought up network resources – CPU, RAM, and NET. The CPU usage price spiked by 10,000% right after the EIDOS airdrop started. The spike itself may have happened because of speculation on network resources.
Thus, large-scale resource owners could pay to acquire EIDOS, then sell it on an exchange for USDT. EIDOS’s market price is showing extreme volatility, dropping from around $0.056 right after the start of the scheme, to $0.021, due to the constant selling pressure. The EOS token price has remained relatively unchanged at around $3.55.
EIDOS has also grown its presence on exchanges, reaching a listing on Bithumb Global. The EIDOS mania has been spreading through WeChat, as EOS services started offering EIDOS to their clients.
Enumivo Project Defended Airdrop as ‘Price Discovery’ Mechanism
The Enumivo project, the predecessor to EIDOS, came out with a rather dramatic rationale for the airdrop. The organizers even encouraged dumping the asset, to cause the price to drop to a level that balances the airdrop.
The airdrop organizers even present the airdrop as a use case for EOS and encourage the users to send coins to the smart contract and receive EIDOS in return, as well as their EOS back.
For the airdrop, the early adopters and those with resources gained access to more EIDOS, thus making the project look like a Ponzi scheme, where an exchange token is being sold to create demand for mining.
The opinions on the airdrop are split, with EOS proponents heavily critical of the prospect of only using EOS for a ‘get rich quick’ scheme. Others have grabbed the opportunity to turn the network into a direct source of income. The EIDOS mining process has been automated, thus making it easier to spread the scheme to more users.
What do you think about the EIDOS airdrop? Share your thoughts in the comments section below!
Images via Shutterstock, Twitter: @enumivo, @crypto_iwad
The Rundown


Created by Celina M' and K' Elvis,S' Jetsapel, E' Zhuwao,
In these examples we will use a 200 pixels high container, to better demonstrate the align-items property.
The center value aligns the flex items in the middle of the container.
The flex-start value aligns the flex items at the top of the container:
When using align-items or align-self, the flex-start value will align flex items at the starting edge of the cross-axis of the flex container. Learn More
The flex-end value aligns the flex items at the bottom of the container
The stretch value stretches the flex items to fill the container (this is default):
TThe baseline value aligns the flex items such as their baselines aligns
Note: the example uses different font-size to demonstrate that the items gets aligned by the text baseline:
The align-content property is used to align the flex lines
In these examples we use a 600 pixels high container, with the flex-wrap property set to wrap, to better demonstrate the align-content property.
The space-between value displays the flex lines with equal space between them:
The space-around value displays the flex lines with space before, between, and after them:
The stretch value stretches the flex lines to take up the remaining space (this is default):
The center value displays display the flex lines in the middle of the container:
The flex-start value displays the flex lines at the start of the container.
The flex-end value displays the flex lines at the end of the container.


| F_1_panel.levelplot {lattice} | R Documentation |
These are the default panel functions for levelplot
and
contourplot
. Also documented is an alternative raster-based
panel function for use with levelplot
.
panel.levelplot(x, y, z, subscripts, at = pretty(z), shrink, labels, label.style = c("mixed", "flat", "align"), contour = FALSE, region = TRUE, col = add.line$col, lty = add.line$lty, lwd = add.line$lwd, border = "transparent", border.lty = 1, border.lwd = 0.1, ..., col.regions = regions$col, alpha.regions = regions$alpha, identifier = "levelplot") panel.contourplot(...) panel.levelplot.raster(x, y, z, subscripts, at = pretty(z), ..., col.regions = regions$col, alpha.regions = regions$alpha, interpolate = FALSE, identifier = "levelplot")
x, y, z |
Variables defining the plot. |
subscripts |
Integer vector indicating what subset of |
at |
Numeric vector giving breakpoints along the range of
|
shrink |
Either a numeric vector of length 2 (meant to work as both x and y components), or a list with components x and y which are numeric vectors of length 2. This allows the rectangles to be scaled proportional to the z-value. The specification can be made separately for widths (x) and heights (y). The elements of the length 2 numeric vector gives the minimum and maximum proportion of shrinkage (corresponding to min and max of z). |
labels |
Either a logical scalar indicating whether the labels are to be
drawn, or a character or expression vector giving the labels
associated with the
|
label.style |
Controls how label positions and rotation are determined. A value
of |
contour |
A logical flag, specifying whether contour lines should be drawn. |
region |
A logical flag, specifying whether inter-contour regions should be filled with appropriately colored rectangles. |
col, lty, lwd |
Graphical parameters for contour lines. |
border |
Border color for rectangles used when |
border.lty, border.lwd |
Graphical parameters for the border |
... |
Extra parameters. |
col.regions |
A vector of colors, or a function to produce a vecor of colors, to
be used if |
alpha.regions |
numeric scalar controlling transparency of facets |
interpolate |
logical, passed to |
identifier |
A character string that is prepended to the names of grobs that are created by this panel function. |
The same panel function is used for both levelplot
and
contourplot
(which differ only in default values of some
arguments). panel.contourplot
is a simple wrapper to
panel.levelplot
.
When contour=TRUE
, the contourLines
function is used to
calculate the contour lines.
panel.levelplot.raster
is an alternative panel function that
uses the raster drawing abilities in R 2.11.0 and higher (through
grid.raster
). It has fewer options (e.g., can only
render data on an equispaced grid), but can be more efficient. When
using panel.levelplot.raster
, it may be desirable to render the
color key in the same way. This is possible, but must be done
separately; see levelplot
for details.
Deepayan Sarkar<EMAIL_ADDRESS>levelplot
,
level.colors
,
contourLines
require(grid) levelplot(rnorm(10) ~ 1:10 + sort(runif(10)), panel = panel.levelplot) suppressWarnings(plot(levelplot(rnorm(10) ~ 1:10 + sort(runif(10)), panel = panel.levelplot.raster, interpolate = TRUE))) levelplot(volcano, panel = panel.levelplot.raster) levelplot(volcano, panel = panel.levelplot.raster, col.regions = topo.colors, cuts = 30, interpolate = TRUE)


Vision Baptist Missions is a ministry of Vision Baptist Church. A unique church founded by a veteran missionary specifically for the training and sending of missionaries around the world.
Jeff Bush became the General Director of Vision Baptist Mission on May 13th, 2012. Prior to this assignment the Bush family faithfully served the Lord for 8 years in Argentina, South America. During their time in Argentina God blessed their efforts resulting in five churches, a radio ministry, and a Bible college to train those called to the ministry.
His proven missionary experience and success aids him as he is actively involved in training our church planting missionaries. Bro. Jeff’s leadership also greatly accelerates our current mobilization ventures. We are thankful for God’s leading in their lives and His placing of this family in this ministry.
Jeff has a heart and mind to lead our missionaries in their pre-field ministry, mobilization, and to become successful missionaries once they arrive to the field.
Austin Gardner is the founding Pastor of Vision Baptist Church and a veteran missionary of Peru, South America for over 20 years. The Lord blessed his ministry and allowed him to train pastors and leaders in the ministry that have started over 80+ churches all over the world. He is a sought after speaker on missions and travels extensively as a part of his continuing ministry of training missionaries.
He has started multiple schools for ministry including the Peru Bible College and the Our Generation Training Center which continues to train young men and women pursuing a life of full-time world missions.
Connect with him at austingardner.net or by email.
Vision Baptist Missions is an independent Baptist mission board that stands for traditional Baptist values and doctrine. To view our full statement of faith click the link below.
Download Statement Of FaithVision Baptist Missions currently has a family of 39 missionaries either working or preparing to work in fields all over the world.
Find a missionary


WITNESS LIST
Public Education Committee
October 12, 2017 - 10:00 AM
Hurricane Harvey Financial Losses and Response
On:
Barajas, Rene (Houston ISD)
Belew, Kara (TEA)
BONTON, MICHELLE (Self; Texas charter schools assoc and the rhodes school)
Byer, Von (Texas Education Agency)
Clore, Paul (Gregory-Portland ISD)
Dupre, Charles (Fort Bend ISD)
Esparza, Mike (Comptroller)
Fagen, Elizabeth (Humble ISD)
Gonzales, Melissa (Self; Refugio ISD)
Hargrove, Pauline (Little Cypress- Mauriceville CISD)
Kemp, Mark (Aransas Pass ISD)
Killgo, Jay (Vidor ISD)
Mann, Laurie (Comptroller)
McKinney, Sharon (Port Aransas Independent School District)
McLarty, Paul (Clear Creek Independent School District)
Mircovich, Troy (Ingleside ISD)
Morath, Mike (TEA)
Patterson, Stephen (Orangefield ISD)
Woods, Charles (Alief Independent School District)
Registering, but not testifying:
On:
Henricksen, Aaron (Legislative Budget Board)
Lopez, Leonardo (Texas Education Agency)
MacLaurin, Andy (LBB)
Stoltz, Candace (Texas education agency)
1


MENU
Home
Grafico
Banner
Calendario
Graficos com slide
Grafico com drilldown
Menu
Recursos
Sistema de testes. Grafico, banners e calendario
Menu
Grafico
Menu
Banner
Menu
Calendario
Menu
Grafico com slide
Menu
Grafico
Menu
Menu Responsivo
Open Menu
Fashion
Men
Shirts
Jackets
Chinos & Trousers
Jeans
T-Shirts
Underwear
Women
Jackets
Knits
Jeans
Dresses
Blouses
T-Shirts
Underwear
Children
Boys
Girls
Electronics
Camera & Photo
TV & Home Cinema
Phones
PC & Video Games
Furniture
Living Room
Sofas & Loveseats
Coffee & Accent Tables
Chairs & Recliners
Bookshelves
Bedroom
Beds
Upholstered Beds
Divans
Metal Beds
Storage Beds
Wooden Beds
Children's Beds
Bedroom Sets
Chests & Dressers
Home Office
Dining & Bar
Patio
Jewelry & Watches
Fine Jewelry
Fashion Jewelry
Watches
Wedding Jewelry
Engagement Rings
Bridal Sets
Women's Wedding Bands
Men's Wedding Bands


This pattern is useful for problems for which no deterministic solution strategies are known. In Blackboard several specialised sub-systems assemble their knowledge to build a possibly partial or approximate solution.
See the paper http://chat.carleton.ca/~narthorn/project/patterns/BlackboardPattern-display.html


| Products | Price | Quantity | Total | |
|---|---|---|---|---|
Vegetable’s Package |
$55.00 |
|
$110.00 | |
Fresh Garden Vegetable |
$39.00 |
|
$39.99 | |
Organic Bananas |
$69.00 |
|
$69.99 |


revapi.sh
--extensions=org.revapi:revapi-java:0.7.0,org.revapi:revapi-reporter-text:0.5.0 (1)
--old path/to/guava-17.0.jar (2)
--new path/to/guava-18.0.jar (3)
-Drevapi.java.missing-classes.behavior=report (4)
Revapi Standalone
This is a CLI for Revapi. Revapi has 2 intended audiences - library authors who would like to make sure they don’t break their users' codebase unintentionally, but also library users that want to make sure that upgrading a library won’t break their code. The first group of users is best served by the Revapi’s maven plugin, while the second group can leverage this CLI tool.
Invocation
The tool can be used to compare the API changes in two pairs of archives. Both old and new version of the API consist of the set of the API archives and another set of "supplementary" archives - which are supposed to complement the API - basically these are the dependencies of the API archives.
Revapi standalone CLI can be either supplied with the JAR files of the archives to compare or it can be told their Maven coordinates and it will download the archives and figure out its dependencies on its own.
Because Revapi is all based around extensions, the invocation must include the set of extensions to be used during the analysis - these are supplied using the Maven coordinates of the extensions.
Let’s take a look at an example invocation - comparing Guava 17.0 to Guava 18.0.
First, let’s try that using the file-based approach:
-
This is a comma-separated list of extensions to use - in here we’re using the java extension to check the API changes in the java code in the archives and a simple reporter that outputs the changes to standard output. The extensions are identified by their Maven GAVs.
-
The path to the old version of the API, in our case Guava 17.0.
-
The path to the new version of the API, in our case Guava 18.0.
-
This is a little bit of configuration required for the API check to not fail on the missing classes. We’re not supplying any "supplementary archives", i.e. the dependencies of the Guava library and so it may happen that some classes that contribute to the API are not present in the "main" archives.
|
Note
|
The report behavior will be the default as of revapi-java extension version 0.5.3 . |
Now, let’s try the same but using the maven coordinates for the guava libraries:
revapi.sh
--extensions=org.revapi:revapi-java:0.5.2,org.revapi:revapi-reporting-text:0.3.4 (1)
--old-gavs com.google.guava:guava:17.0 (2)
--new-gavs com.google.guava:guava:18.0 (3)
-Drevapi.java.missing-classes.behavior=report (4)
-
The same as in the previous example, this is the list of extensions to use during the API check
-
The old archive(s) specified as comma-separated list of maven coordinates
-
The new archive(s) specified as comma-separated list of maven coordinates
-
This is still required because some of the deps of Guava are optional and therefore not present on the classpath.
The CLI is equipped with a simple help on the available commands, just invoke it with -h
.


This function must be the first function to call, and it returns a CURL easy handle that you must use as input to other easy-functions. curl_easy_init initializes curl and this call MUST have a corresponding call to curl_easy_cleanup when the operation is complete.
If you did not already call curl_global_init, curl_easy_init does it automatically. This may be lethal in multi-threaded cases, since curl_global_init is not thread-safe, and it may result in resource problems because there is no corresponding cleanup.
You are strongly advised to not allow this automatic behaviour, by calling curl_global_init yourself properly. See the description in libcurl of global environment requirements for details of how to use this function.
|


Overview
Critboard for Canvas@UD is designed to be used in conjunction with a Canvas Assignment requiring students to upload an image as their assignment submission. Submitted images can then be sorted based on criteria established during class. Sorting images during class gives all students a chance to better understand the criteria along which their submissions will be judged. The Critboard tool also streamlines the grading process, by assigning points for each category based on the shelf it is placed on.
How to Use this Page
The glossary on the left should help you understand what the features of the tool are, and how these are intended to be used. Step-by-Step instructions for setting up and using the Critboard as well as an FAQ can be located in the accordion panels below. Click on a panel's title to expand it.
Step-by-Step
- Installing Critboard (at UD)
- Launch Canvas, and browse to the course in which you wish to use the Critboard
- Click the Settings link located at the bottom of the Canvas navigation menu, located at the left side of the screen.
- Click on the Apps tab.
- Click the Critboard button, and take careful note of the key and secret, located at the bottom of the App description text.
- Click the blue Add Tool button.
- In the window that pops up, enter the key and secret.
- Refresh your browser window, and check to see that a Critboard link has been added to the Canvas navigation menu.
- To re-order the links in the navigation menu, visit the Navigation tab and drag the links to the desired locations.
- Installing Critboard (at xxx.instructure.com)
- Request a key : secret by completing this form. You will receive a key and secret via email. Please allow a few days for processing, as requests are vetted manually. UD LTI Apps are not available to for-profit institutions.
- Once you have a key and secret, copy this xml configuration url onto your clipboard: https://apps.ats.udel.edu/canvas/critboard/critboard_shared.xml
- Follow the instructions here: How do I configure an External App for a course using a URL?
- You will be asked to authorize use of a course-specific API token. You must accept the authorization request to use the app. Only click the accept (login, OK, submit...) button ONCE. There may be a brief delay while the process is completed.
- When the installation is complete, you will see a mostly blank page asking you to select or create an assignment requiring a file upload submission. You are now ready to proceed to the next step.
- Create an Assignment
- In the Canvas navigation menu, click the Assignments link. This should open even if the link appears gray.
- Click the blue +Assignment button.
- In the Create Assignments UI locate the Submission Type selector, and choose Online. Under entry options, select File Uploads.
- Optionally restrict File upload types to permite jpg, jpeg, gif, png.
- Configure the remaining assignment options as desired.
- When you are ready, publish the assignment. Unpublished assignments will not be visible to students, even though as the instructor, you can see them.
- Critique submitted images
- Click on the Critboard link in the navigation menu.
- Select an assignment from the assignnment drop-down list. Only assignments that accept file upload submissions will appear in the list.
- Submitted images will appear as thumbnails.
- Enter a comma delimited list of Rubric Tab titles in the Rubric Elements field. For instance, if you wish to critique submissions based on lighting, composition and use of negative space, your tab titles might be lighting, composition, negative space.
- Click the Create Rubric Tabs button.
- Tabs will appear. Click tabs to confirm that a copy of each uploaded image appears in each tab.
- Sort the images in each tab based on the criteria you have chosen. Best images should go on the top shelf, weaker ones on the bottom shelf. You can drag the images from shelf to shelf with your mouse, or use the open full link (visible on mouse-over) to view a larger version of any single image, and choose a shelf radio button.
- Additional tabs can be added at any time by entering a single tab label, and clicking Add Tab.
- Save your work
Once you have finished your critique, there are several ways to preserve a record of what you have done.
- The Save Crit button will save a copy of your tabs to the Canvas file system. Links to each saved sort will be generated in the Student View of the Critboard Tool.
- The Download Crit button can be used to download a copy of your tabs in an html file.
- The Compile Grades tab will award each student 5 points for each top shelf appearance of his/her submitted image, 3 for the middle shelf, and 1 for the bottom. Grades will be posted directly to the Canvas gradebook. Rubric scores will appear as comments in the gradebook and speed grader.
- If you do not see a Compile Grades button, it is likely that one or more of your students submitted multiple images. You must delete the extra image or images before compiling grades. To delete an image, locate the delete button, visible only in 'full view'.
FAQ
Click on a question to reveal its answer
- I created an assignment with a submission type of file upload, and I can see it when I launch the Critboard, but my students can't see it. What's wrong?
- Be sure your assignment is published.
- Why doesn't the Critboard create rubric tabs to match the rubric I created for my assignment in Canvas?
- This tool was designed for faculty who wish to critique images interactively with students. The philosophy is that rubrics should not be carved in stone before the critique even begins. We recommend NOT providing a Canvas rubric at all when creating an assignment to be used with this tool.


--- layout: page title: Nagios Plugins tags: - Linux - Nagios - Scripts status: publish type: page published: true meta: _wp_page_template: default _edit_lock: "1264628683" _edit_last: "1" --- These are some of the Nagios plugins i wrote which may be useful for you. You may download them via http://www.nagiosexchange.org too. All plugins are released under GPLv2 license.
Usage: check_imap_mailbox [PARAMETERS]
Parameters:
--host=[HOSTNAME] : Name or IP address of IMAP server
--user=[USERNAME] : Username to connect with
--pass=[PASSWORD] : Password to connect with
--folder=[IMAP FOLDER] : The IMAP folder to check
Download latest version: [download#2]
Usage: check_jk_status [PARAMETERS]
Parameters:
--host=[HOSTNAME] : Name or IP address of JK management interface
--balancer=[JK BALANCER] : Name of the JK balancer
Download latest version: [download#1]
Usage: check_foundry_ports [PARAMETERS]
Parameters:
--host=[HOSTNAME] : Hostname or IP-Address of Foundry device
--community=[SNMP COMMUNITY] : SNMP community string
--port=[INTERFACE NR] : The interface number to check (1,2,3,22,...)
Download latest version: [download#3]


littleBits: An Innovation in Education With Just a Little Further to Go
A couple of weeks ago, a friend of mine introduced me to the amazing world of littleBits. I had been taking an electrical engineering course last semester, spending lots of time in lab playing with circuits, so I was especially excited to see such an innovative product that made it so easy for kids to explore the world of electronics and build their own toys out of them!
littleBits is like LEGOs for electronics: they have a variety of different electrical components that snap together with magnetics to create all sorts of different circuits. For example, you could snap the power source component, the knob component, and the LED component, and as you turn the knob, the LED will turn dimmer and brighter. littleBits has already developed all sorts of creative bits, as they call them, to create a wide variety of electronic circuits, including motion sensor inputs to DC motor outputs. You can see all of them here
A thoughtful, innovative product
I took some time to look through their website and think about their product, and I’m deeply impressed by what they’ve been able to create so far. Here’s why I think littleBits is an amazing educational product.
No annoying obstacles to slow you down
The most difficult thing when you start something new is often the small, but numerous hurdles you must surpass as you begin. When you want to start exercising, you have to find a gym, get a membership, and perhaps learn the basic exercise movements. When you first learn to code, you may have to find the right learning materials, install various applications, and get your environment set up. In electronic circuits, you have to buy the right parts, have a basic understanding of electricity (in particular Ohm’s Law), and be prepared to spend some frustrating time debugging your circuit. Each of these small obstacles present opportunities for you to stop and just give up.
littleBits eliminates these tiny inhibitors and lowers the barrier for children to begin playing with electronics. No more need to verify all your breadboard connections and check your spec sheet to see that all the pins are in the right places; littleBit’s fantastic magentic snap ensures that your connections are always correct! littleBits clearly worked hard to optimize on this front, and I think their work will pay off, as younger children have much less patience than adults, and even we have difficulty sticking through with new things!
A lower barrier to experimentation results in greater innovation
The magnetic snap on the little bits allows you to quickly assemble and disassemble the bits. This allows for children to easily experiment and build all kinds of creative products. In the past decade, the ease with which internet applications can now be built has resulted in an explosion in innovation in the internet industry. Similarly, I believe littleBits will enable many more children to create incredible toys and projects with electronics than ever before.
Quick trial and error allows for learning by exploration and discovery
Most importantly, littleBits seems to have been designed for kids to learn through exploration and discovery. I can imagine that most kids would be able to pick up some littleBits and figure out how they work in a short amount of time, just by putting things together and seeing how they work. I believe this aspect of the product is perhaps most significant, because it results in learning, without the children feeling like they’re really learning anything — it’s just play to them! And that’s the best kind of activity to foster a life of intellectual curiosity and lifelong learning, because it demonstrates that learning is fun.
Still improvements to be made
However, while thinking about the product, I found that there are still a few areas in which littleBits could do better.
Prohibitively expensive
The biggest disappointment I had with littleBits was with their pricing. If you buy the bits in kits, then they’re about $9-10 per bit, and they are even more expensive if you buy them individually. I’m not an expert in electronics, so it isn’t clear to me what a reasonable price for these components would be, but from the perspective of a consumer, littleBits is currently prohibitively expensive. If I wanted to create a project with any moderate amount of complexity, I’m sure I would at least need one or two dozen bits, which would end up costing me up to two hundred dollars! littleBits will have to bring their prices down before they can tap into the mainstream consumer market.
Memory modules will expand the range of projects
I also worry that the set of bits that littleBits currently has doesn’t offer sufficient replay value to justify their costs. While they have a simple model of power, input, output, and wiring modules, I would imagine that one would quickly become bored of playing with the bits, because there are only so many combinations that can be created.
What littleBits needs to do is add the fundamental concept of memory and storage to their components. Doing so would explode the possibilities for what could be created — the vast majority of electronic components today require the use of memory, and the few that do not (e.g., a guitar amp) probably couldn’t easily be made with littleBits. Including memory would allow projects to become stateful, opening a entire new world of applications.
In Conclusion
I commend the team behind littleBits for all the work they’ve put into creating such a simple and educational product. Simplifying a product is one of the hardest things to do and especially so for engineers! I think littleBits has the potential to be very successful in the future, but there are still a few small things that I believe need to be resolved, but when they do, I’m sure they will have an outstanding market entrance.


Invites
addInvites, clearInvites, createInvite, fake, info, inviteCodes, inviteDetails, invites, leaderboard, removeInvites, restoreInvites, subtractFakes, subtractLeaves
Ranks
addRank, ranks, removeRank
Config
config, interactiveConfig, inviteCodeConfig, memberConfig, permissions
Info
botInfo, credits, getBot, help, members, ping, prefix, setup, support
Premium
export, premium, tryPremium
Moderation
ban, caseDelete, caseView, check, clean, cleanShort, cleanText, kick, mute, punishmentConfig, purgeUntil, softBan, strikeConfig, unban, unmute, warn
Other
graph, makeMentionable, mentionRole


YAHOOOOOOOOOO You Are Successfully Registered!!!!!!!!!!!!!!!!
Check Your Mail for Confirmation
Wait For Prove!!..
{% extends "base.html" %} {%block navbar%} Score: {{score}} Rank: {{rank}}
{%endblock%} {% block content %}


subject
EBOOKS CATALOG AFBXQRPG4WN
FREDY DAVIS
Total documents: 465 files
Recent share at: December 14, 2016
subject
View Documents Repository YD09WBVNNNSN0SQ
DELORES ROSENBAUM DVM
Total documents: 464 files
Recent share at: October 03, 2016
subject
View Books Repository KNAFWMMEMC9N
ANGELINE BAUMBACH
Total documents: 381 files
Recent share at: October 10, 2016
subject
View Catalog YHW56KFYMWF098N
BETTIE GREENFELDER SR 1
Total documents: 421 files
Recent share at: October 27, 2016
subject
View Documents Repository HKWPBZPVMAZTD
BLAISE HERMANN
Total documents: 411 files
Recent share at: October 17, 2016
subject
View eBooks Repository ZVCZ6YRKQJ2GH
MILLER GUTMANN
Total documents: 463 files
Recent share at: October 12, 2016
subject
View Books Archive IWWHARTZAQCEEQM
ISOBEL BATZ 1
Total documents: 465 files
Recent share at: October 12, 2016
subject
View Documents Repository I0ZCTDF8
BRENNON DECKOW
Total documents: 374 files
Recent share at: October 13, 2016
subject
View Documents Archive 1OHCFK9BKIF9
REYNA BRADTKE 1
Total documents: 377 files
Recent share at: January 13, 2017
subject
View Documents Archive Z5XDCUMBYXIRGP
ELOY GLEICHNER 1
Total documents: 375 files
Recent share at: November 21, 2016
subject
View Directory MSOE7XLGRUXDZP
HESTER TURNER 1
Total documents: 360 files
Recent share at: November 06, 2016
subject
View Documents Catalog CZIPH4AAW
BENJAMIN RAYNOR DDS 1
Total documents: 354 files
Recent share at: September 24, 2016
subject
View Documents Archive YW9BMSNC
PROF KIRSTEN HODKIEWICZ IV
Total documents: 416 files
Recent share at: August 06, 2016
subject
View Docs Archive N2BLLGLB3
SHANY JOHNSTON 1
Total documents: 382 files
Recent share at: October 03, 2016
subject
View Books Catalog 89DCI5HFUU
PROF SIERRA EMARD 2
Total documents: 368 files
Recent share at: September 29, 2016
subject
View eBooks Directory TFNBPFO1HW5
DAIJA RUSSEL
Total documents: 429 files
Recent share at: November 18, 2016
subject
View Books Repository KMLBCKOMQID
CLOVIS LAKIN V
Total documents: 366 files
Recent share at: November 20, 2016
subject
View Docs Repository KOQH3QGHWEWK85


This section of the tutorial will walk you through how we model Nephelometers, how you can build/model a Nephelometer, and how we can evaluate Nephelometers across a wide range of conditions using this tool.
# Make imports
import opcsim
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticks
import seaborn as sns
%matplotlib inline
# turn off warnings temporarily
import warnings
warnings.simplefilter('ignore')
# Let's set some default seaborn settings
sns.set(context='notebook', style='ticks', palette='dark', font_scale=1.75,
rc={'figure.figsize': (12,6), **opcsim.plots.rc_log})
In OPCSIM, we define a Nephelometer using two parameters: the wavelength of light used in the device and its viewing angle. Unlike photometers and some optical particle counters, most low-cost commercial nephelometers gather light across as wide a range of angles as possible. This minimizes some of the uncertainty associated with the Mie resonance and allows manufacturers to use cheap photo-detectors while still gathering enough signal to distinguish from noise.
To build a Nephelometer, simply initialize using the
opcsim.Nephelometer
class:
# init a nephelometer with a 658 nm laser, gathering light from between 7-173 degrees
neph = opcsim.Nephelometer(wl=0.658, theta=(7., 173))
neph
<opcsim.models.Nephelometer at 0x104701160>
Nephelometers gather the total scattered light from many anglees across an entire aerosol distribution. Typically, users of low-cost nephelometers co-locate their device with a reference device of higher (or known) quality and simply compare the output signal from the nephelometer to the integrated mass value (i.e. \(PM_1\), \(PM_{2.5}\), or \(PM_{10}\)) from the reference device. To keep things as simple and realistic as possible, we follow this approach.
To calibrate a nephelometer in OPCSIM, you provide an aerosol
distribution to the calibrate
method - the actual mass values for
\(PM_1\), \(PM_{2.5}\), and \(PM_{10}\) are calculated
exactly and the total scattered light is computed as well. The ratio
between the total scattered light and each of the mass loadings are
stored as calibration factors and are used again when evaluating
previously unseen distributions.
To calibrate our nephelometer above to a synthetic distribution of Ammonium Sulfate:
d1 = opcsim.AerosolDistribution("AmmSulf")
d1.add_mode(n=1e4, gm=125e-3, gsd=1.5, refr=complex(1.521, 0), kappa=0.53, rho=1.77)
# calibrate the nephelometer at 0% RH
neph.calibrate(d1, rh=0.)
We can explore the calibration factors that were just determined - the units are a bit arbitrary, since we don’t consider the intensity/power of the laser as we assume it is constant. Thus, these units are something like \(cm^2/(\mu g/ m^3)\)
neph.pm1_ratio
1.1744058563022677e-08
Similarly, we get ratio’s for \(PM_{2.5}\) and \(PM_{10}\):
neph.pm25_ratio
1.174352137965417e-08
neph.pm10_ratio
1.1743521375694491e-08
The entire point of this tool is to be able to simulate what would
happen under different circumstances. To do so, we use the evaluate
method, which takes an AerosolDistribution as an argument (as well as an
optional relative humidity) and returns the total scattered light,
\(PM_1\), \(PM_{2.5}\), and \(PM_{10}\).
# evaluate the same distribution we used to calibrate
neph.evaluate(d1, rh=0.)
(4.4544608528839e-07, 37.92948433439533, 37.93121934108556, 37.9312193538752)
# evaluate the same distribution we used to calibrate, but at a higher RH
neph.evaluate(d1, rh=85.0)
(2.0830803505720823e-06,
177.3731235580573,
177.38123712884374,
177.3812371886531)
What if we went ahead and tried to evaluate on a totally unseen distribution? Let’s go ahead and evaluate on an urban distribution:
d2 = opcsim.load_distribution("urban")
d2
AerosolDistribution: urban
First, let’s determine the actual \(PM_1\), \(PM_{2.5}\), and \(PM_{10}\) loadings for this distribution:
print ("PM1 = {:.2f} ug/m3".format(d2.cdf(dmin=0., dmax=1., weight='mass', rho=1.65)))
print ("PM2.5 = {:.2f} ug/m3".format(d2.cdf(dmin=0., dmax=2.5, weight='mass', rho=1.65)))
print ("PM10 = {:.2f} ug/m3".format(d2.cdf(dmin=0., dmax=10., weight='mass', rho=1.65)))
PM1 = 8.97 ug/m3
PM2.5 = 9.00 ug/m3
PM10 = 9.00 ug/m3
Next, let’s evaluate the Nephelometer:
neph.evaluate(d2, rh=0.)
(1.7166105544467465e-07,
14.61684259521375,
14.617511212784953,
14.617511217713684)
So, we’re off by about a factor of 2, in part due to differences in assumed density and in part due to the fact the urban distribution scatters less light per unit mass than our calibration aerosol.


New Label:
Your Labels:
Input a transaction hash or an Ethereum address to find out more details about it.
Protect your browser cookies from surveillance and malicious applications and websites.


This documentation relates to Opera's now deprecated .oex Extension API framework for Opera versions <= 12.15 and also provided by our OEX2NEX shim library.
For the latest Opera Extensions API documentation for Opera versions > 12.15 please consult the latest Opera Extensions API documentation online.
The <widget>
element is the container element under which the rest of the elements of the config.xml file go. The following attributes are associated with it.
id
: A URL that uniquely identifies the widget or extension.
id
is set automatically by the Opera extensions repository when a new extension is uploaded. id
attribute during development to avoid installing multiple instances of the same extension.version
: Specifies a version of the extension.<?xml version="1.0" encoding="utf-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" id="http://example.com/myExtension" version="1.0">
...
</widget>


In addition to the 'Dateset created' (above) and the 'Temporal coverage' in tab 'Temporal and spatial coverage', one or more other periods may be important to the formation of the dataset. Think, for example, of the date on which the project was closed, when this date is much later than the date on which the digital files were completed (select "issued" from the menu) or the date on which entries were changed (select "modified").
Note: The date on which the digital files were closed should be recorded in 'Dataset created'.
Note: The fields 'Date Submitted' (date of deposit) and 'Date Available' (expiration of a temporary embargo on access) are automatically created by the archive.
Always use the first field for a specific date. Use the free text field only for other date information, such as a date range.
| Issued | 2004 |
| Date | 2006-02-21 – 2006-03-31 (data collection) |
| Date | Opgravingsperiode: maart - oktober 2003 |


Spring Film Reviews A film review by Michael John Legeros Copyright 1995 Michael John Legeros
Contents ========
i. BYE BYE, LOVE ii. DOLORES CLAIBORNE iii. MAJOR PAYNE iv. MAN OF THE HOUSE v. MIAMI RHAPSODY vi. ROOMMATES vii. SHALLOW GRAVE
Introduction ============
Lots to see this weekend. Some of what's new includes ANCHORESS, DOLORES CLAIBORNE, EXOTICA, FEDERAL HILL, MARTHA AND ETHEL, MURIEL'S WEDDING, MAJOR PAYNE, SATAN'S BREW, and TALL TALE: THE UNBELIEVABLE ADVENTURES OF PECOS BILL. Check local listings and, then on Monday night, sit back and enjoy the most exciting evening of the year, when Mujibur & Sirajul host the 67th Annual Academy Awards.
BYE BYE, LOVE 106 min. / Rated "PG" =============
The latest twist on the PARENTHOOD formula stars Paul Reiser, Matthew Modine, and Randy Quaid as a trio of divorced dads trying to adjust to the demands of dating. The cast is extra-appealing, but the film fails in so many ways that it hardly seems worth the trip. (Said problems range from extraneous plotting to oppressive product plugs.) If there's a single reason to see this film, it's to catch Randy Quaid's hilarious Blind Date From Hell with Janeane Garofalo (CLERKS).
Grade: D+
DOLORES CLAIBORNE 131 min. / Rated "R" =================
Another one of the "good" Stephen King films, and a fine companion piece to THE SHAWSHANK REDEMPTION. Director Taylor Hackford (AN OFFICER AND A GENTLEMAN) and writer Tony Gilroy expand the bestseller-- about a feisty New England woman (Kathy Bates) facing her second accusation of murder-- by introducing an adult daughter (Jennifer Jason Leigh) who does not appear in the novel.
Purists may scoff, but the added conflict works. Sure, the film gets heavy-handed in spots--as well as a bit too tidy toward the end--but the warmth of the source material still shines through. A fine showcase for the talents of the cast, which includes Christopher Plummer as the local investigator. Great cinematography by Gabriel Beristain, too.
TRIVIA: By my count, this is the 34th adaptation of a Stephen King story for film or television.
Grade: B+
MAJOR PAYNE Rated "PG-13" ===========
Homey the Clown as a soldier. That's the idea behind this silly, rude, and ultimately hilarious comedy about a strict military officer (Damon Wayans) assigned to a platoon of junior ROTC cadets. What sounds dangerously uplifting is really nothing more than two hours of Damon Wayans spouting insults and excrement jokes. Set in the same universe as the Three Stooges-- where anything can happen and usually does-- this is critic-proof comedy at its best.
Based on THE PRIVATE WAR OF MAJOR BENSON (1955).
Grade: C+
MAN OF THE HOUSE 98 min. / Rated "PG" ================
Forget the ads that promise slapstick and silliness, Disney's MAN OF THE HOUSE is really just a kiddie-drama about a single mom, her son, and her fiance. Farrah Fawcett is the mom, Jonathan Taylor Thomas is the son, and they *both* sleepwalk through their parts. Chevy Chase plays the the fiance and he plays it straight.
The story appears to have been written for an audience under twelve. Parents may appreciate the refreshingly inoffensive story, but it's a long sit for the rest of us. Even us former Indian Guides.
Grade: D+
MIAMI RHAPSODY 95 min. / Rated "PG-13" ==============
Go see it. First-time writer/director David Frankel has made his own Woody Allen movie, albeit one with a younger cast and brighter locales. Forget WHEN HARRY MET SALLY, this is the Allen homage to beat! Sarah Jessica Parker stars a young, single woman who becomes increasingly neurotic as she discovers that everyone in her family is having an affair.
The plot is predictable, sure, but the tone is light, and the jokes are fresh. The superb supporting cast includes Gil Bellows, Antonio Banderas, Kevin Pollak, Paul Mazursky, and, yes, Mia Farrow.
I've seen it twice.
Grade: A-
ROOMMATES 108 min. / Rated "PG" =========
Yet another mild drama, this one starring Peter Falk in heavy latex as a ninety-something Polish immigrant who moves in with his 25 y.o. medical student grandson (D. B. Sweeney). Though Falk is fun to watch, there isn't much of an edge to the story. Characters come and go, situations happen, and each person gets fleshed out just enough to be interesting, but not necessarily engrossing. Tastefully directed by Peter Yates (BREAKING AWAY).
Grade: B
SHALLOW GRAVE Not Rated =============
Three flat-mates, one body, and a suitcase full of money are the motivations behind this tepid thriller from Scotland. Director Danny Boyle has visual style to spare, but his characters are too unappealing to be interesting. How can you care about people that you don't even like to watch? Grisly fun in spots; quite boring the rest of the time.
Grade: C-
-- Michael J. Legeros Raleigh, North Carolina
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Corporate Banking application provides features to administer and manage non personal accounts online.


Behat is a BDD framework for PHP
Feature: Event calendar
In order to announce upcoming events
As an event manager
I need to maintain a public event calendar
Scenario: Create event
Given I am logged in as an event manager
When I visit the dashboard
And I click on 'Add event'
And I enter the title 'Summer training'
And I enter the date '2015-08-01'
And I click on 'Save'
Then I should see 'Event has been created'
Feature: Product highlights
In order to promote specific products
As a marketing manager
I need to highlight products on the homepage
Scenario: View product highlights
Given I have 3 product highlights
When I visit the frontpage
Then I should see 3 highlighted products
Feature: < title >
In order to < business objective >
As a < user role or persona >
I need to < some action >
Scenario:
Given < a precondition >
When < some action >
And < some other action >
Then < a testable outcome >
But < something else we can test >
Scenario: Show number of likes
Given I am logged in as <user>
When I visit the profile of <friend>
And I click on "Like"
Then I should see <number> likes
Examples:
| user | friend | number |
| Cindy | Cindy | 0 |
| Thomas | Cindy | 1 |
| Thomas | Cindy | 1 |
| Roger | Cindy | 2 |
| Roger | Thomas | 1 |
Scenario:
Given the following users exist:
| username | email |
| Cindy |<EMAIL_ADDRESS>|
| Thomas |<EMAIL_ADDRESS>|
| Roger |<EMAIL_ADDRESS>|
{ "require": { "behat/behat": "3.0.*@stable", "drupal/drupal-extension": "~3.0" }, "minimum-stability": "stable", "config": { "bin-dir": "bin/" } }
$ composer install
default: suites: default: contexts: - FeatureContext - Drupal\DrupalExtension\Context\DrupalContext - Drupal\DrupalExtension\Context\MessageContext - Drupal\DrupalExtension\Context\MinkContext extensions: Behat\MinkExtension: goutte: ~ Drupal\DrupalExtension: blackbox: ~ api_driver: 'drupal'
$ ./bin/behat --init
features/ features/bootstrap/FeatureContext.php
$ ./bin/behat -di Given I am not logged in Given I am logged in as :name Given a/an :type (content )with the title :title When I visit :path When I click :link When I enter :value for :field When I press the :button button Then I should see the text :text Then I should not see the link :link
More than 100 built-in steps!
Given I am not logged in Given I am an anonymous user
Given /^(?:|I )am on (?:|the )homepage$/
Feature: Frontpage In order to have an overview of the website As an anonymous user I want to see relevant information on the frontpage Scenario: Anonymous user can see the frontpage Given I am not logged in When I am on the homepage Then I should see the text "Welcome, earthling."
$ ./bin/behat Feature: Frontpage In order to have an overview of the website As an anonymous user I want to see relevant information on the frontpage Scenario: Anonymous user can see the frontpage Given I am not logged in When I am on the homepage Then I should see the text "Welcome, earthling." 1 scenario (1 passed) 3 steps (3 passed) 0m0.99s (29.56Mb)
Then I should get a :code HTTP response Then I should see text matching "<regex>" Then I should see :number "<element>" elements Given the cache has been cleared Given I run cron Given I run drush :command Given I wait for AJAX to finish
Then I should see the text "Page not found" Then I should see the welcome message Then I should see 5 blog posts
$ ./bin/behat 1 scenario (1 undefined) 5 steps (4 passed, 1 undefined) 0m5.47s (42.90Mb) --- FeatureContext has missing steps. Define them with these snippets: /** * @Then I should see the welcome message */ public function iShouldSeeTheWelcomeMessage() { throw new PendingException(); }
$ ./bin/behat --append-snippets 1 scenario (1 undefined) 5 steps (4 passed, 1 undefined) 0m5.47s (42.90Mb) `I should see the welcome message` definition added
/** * @Then I should see :number blog posts */ public function assertBlogPostCount($number) { $this->assertSession()->elementsCount('css', 'div.blog', $number); }
See MinkContext and DrupalContext


WebGL makes it possible to display amazing realtime 3D graphics in your browser but what many people don't know is that WebGL is actually a rasterization API, not a 3D API.
Let me explain.
WebGL only cares about 2 things. Clipspace coordinates and colors. Your job as a programmer using WebGL is to provide WebGL with those 2 things. You provide 2 "shaders" to do this. A Vertex shader which provides the clipspace coordinates and a fragment shader that provides the color.
Clipspace coordinates always go from -1 to +1 no matter what size your canvas is. Here is a simple WebGL example that shows WebGL in its simplest form.
// Get A WebGL context
var canvas = document.getElementById("canvas");
var gl = canvas.getContext("experimental-webgl");
// setup a GLSL program
var program = createProgramFromScripts(gl, ["2d-vertex-shader", "2d-fragment-shader"]);
gl.useProgram(program);
// look up where the vertex data needs to go.
var positionLocation = gl.getAttribLocation(program, "a_position");
// Create a buffer and put a single clipspace rectangle in
// it (2 triangles)
var buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array([
-1.0, -1.0,
1.0, -1.0,
-1.0, 1.0,
-1.0, 1.0,
1.0, -1.0,
1.0, 1.0]),
gl.STATIC_DRAW);
gl.enableVertexAttribArray(positionLocation);
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
// draw
gl.drawArrays(gl.TRIANGLES, 0, 6);
Here's the 2 shaders
<script id="2d-vertex-shader" type="x-shader/x-vertex">
attribute vec2 a_position;
void main() {
gl_Position = vec4(a_position, 0, 1);
}
</script>
<script id="2d-fragment-shader" type="x-shader/x-fragment">
void main() {
gl_FragColor = vec4(0, 1, 0, 1); // green
}
</script>
This will draw a green rectangle the entire size of the canvas. Here it is
Not very exciting :-p
Again, clipspace coordinates always go from -1 to +1 regardless of the size of the canvas. In the case above you can see we are doing nothing but passing on our position data directly. Since the position data is already in clipspace there is no work to do. If you want 3D it's up to you to supply shaders that convert from 3D to clipspace because WebGL is only a rasterization API.
For 2D stuff you would probably rather work in pixels than clipspace so let's change the shader so we can supply rectangles in pixels and have it convert to clipspace for us. Here's the new vertex shader
<script id="2d-vertex-shader" type="x-shader/x-vertex">
attribute vec2 a_position;
uniform vec2 u_resolution;
void main() {
// convert the rectangle from pixels to 0.0 to 1.0
vec2 zeroToOne = a_position / u_resolution;
// convert from 0->1 to 0->2
vec2 zeroToTwo = zeroToOne * 2.0;
// convert from 0->2 to -1->+1 (clipspace)
vec2 clipSpace = zeroToTwo - 1.0;
gl_Position = vec4(clipSpace, 0, 1);
}
</script>
Now we can change our data from clipspace to pixels
// set the resolution
var resolutionLocation = gl.getUniformLocation(program, "u_resolution");
gl.uniform2f(resolutionLocation, canvas.width, canvas.height);
// setup a rectangle from 10,20 to 80,30 in pixels
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
10, 20,
80, 20,
10, 30,
10, 30,
80, 20,
80, 30]), gl.STATIC_DRAW);
And here it is
You might notice the rectangle is near the bottom of that area. WebGL considers the bottom left corner to be 0,0. To get it to be the more traditional top left corner used for 2d graphics APIs we just flip the y coordinate.
* gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);
And now our rectangle is where we expect it.
Let's make the code that defines a rectangle into a function so we can call it for different sized rectangles. While we're at it we'll make the color settable.
First we make the fragment shader take a color uniform input.
<script id="2d-fragment-shader" type="x-shader/x-fragment">
precision mediump float;
+uniform vec4 u_color;
void main() {
* gl_FragColor = u_color;
}
</script>
And here's the new code that draws 50 rectangles in random places and random colors.
var colorLocation = gl.getUniformLocation(program, "u_color");
...
// Create a buffer
var buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.enableVertexAttribArray(positionLocation);
gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);
// draw 50 random rectangles in random colors
for (var ii = 0; ii < 50; ++ii) {
// Setup a random rectangle
setRectangle(
gl, randomInt(300), randomInt(300), randomInt(300), randomInt(300));
// Set a random color.
gl.uniform4f(colorLocation, Math.random(), Math.random(), Math.random(), 1);
// Draw the rectangle.
gl.drawArrays(gl.TRIANGLES, 0, 6);
}
}
// Returns a random integer from 0 to range - 1.
function randomInt(range) {
return Math.floor(Math.random() * range);
}
// Fills the buffer with the values that define a rectangle.
function setRectangle(gl, x, y, width, height) {
var x1 = x;
var x2 = x + width;
var y1 = y;
var y2 = y + height;
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
x1, y1,
x2, y1,
x1, y2,
x1, y2,
x2, y1,
x2, y2]), gl.STATIC_DRAW);
}
And here's the rectangles.
I hope you can see that WebGL is actually a pretty simple API. While it can get more complicated to do 3D that complication is added by you, the programmer, in the form of more complex shaders. The WebGL API itself is 2D and fairly simple.
If you're 100% new to WebGL and have no idea what GLSL is or shaders or what the GPU does then checkout the basics of how WebGL really works.
Otherwise from here you can go in 2 directions. If you are interested in image procesing I'll show you how to do some 2D image processing. If you are interesting in learning about translation, rotation and scale then start here.


Activity Portal
Home
Branch
Degree
Faculty
Student
Activity
Hello,
Admin !
Branch
Add Branch
×
Branch details succesfully Added!
Branch Name
Computer Engineering
Mechanical Engineering
Electrical Engineering
Edit Branch
Branch Name:
Update Details