Permissions
Overview
Permissions can be specific to an implementation guide. Two kinds of permissions are available:
- View Permissions - Grant permission to a user or group to view a particular implementation guide.
- Edit Permissions - Grant permission for a user or group to edit the templates/profiles in a particular implementation guide.
Implementation guides can control who has permissions to edit templates owned by the implementation guide.
- User can indicate that a user can have view and/or edit permissions
- User can indicate that a group can have view and/or edit permissions
- User can indicate that an entire organization can have view and/or edit permissions
- User can indicate that a user or group from another organization can collaborate on templates within the IG.
Requesting Permissions to Access an Implementation Guide
To view and/or edit an IG, you must be granted permission to access. Permission is granted by the Editor of the IG. Only those IGs to which you have access will display in the list of available IGs. IG Editors may allow users to “request access”. The list of IGs shown to the user in the "Request Access" screen includes only IGs that have their “can request access” option enabled. If you have not been granted access, you will see a link below the search field on the Browse Implementation Guides screen to "request access".
Fields in the "Request Access" Window
- Access Level: Indicates if you would like "view" or "edit" permissions to the IG.
- Message: An optional message that is sent to the access manager of the IG.
Request Access to an IG
- Select thee access level you would like to have for the IG
- Optionally, specify a message to send to the access manager.
- Click the "Request" button.
After submitting the request, an email is generated and sent to the access manager of the implementation guide. The email message will include your name and email address, to indicate to the access manager who is requesting access, along with the permission requested and the (optional) custom message.
The message sent to the access manager follows this format:
User <FirstName> <LastName> (<Email>) has requested access to <ImplementationGuide> on <Date>.
The user has requested <Permission> permissions.
Message from user: <Message>
Use this link to grant them permission to the implementation guide: <Link>
Use this link to deny them permission to the implementation guide: <Link>
Note: The request alone does not guarantee that you will be granted permission to an IG; it is the decision of the access manager to grant permissions.
Access Managers and Requests
If an IG is configured to allow access requests, an Access Manager should be specified. An Access Manager is responsible for handling requests from other users to access an IG. Requests to access an IG are
- sent as an email notification to the Access Manager, using the email address associated with the Access Manager's user account
- available in the Trifolia web application, after a user is logged in, by selecting the user's menu in the top-right of Trifolia and selecting "Access Requests".
Viewing/Approving/Denying Access Requests
When a request is made, the email notification sent to the Access Manager includes a link to approve and a link to deny the access request. Upon clicking one of these links
- Trifolia is opened in a browser
- Authentication is initiated (if not already logged in)
- Permissions are either granted or denied (depending on which link the Access Manager selected)
- The user that made the request is notified via email that their permissions have been either granted or denied
In addition to an email notification, the requests can be viewed/approved/denied by selecting the "Access Requests" menu item under the user's menu in the top-right corner of Trifolia.
Note: If no access requests are pending your approval, and you do not have any outstanding requests yourself, the "Access Requests" menu item is not available.
Upon selecting "Access Requests", a pop-up window is displayed with (up to) two separate tabs. The first tab represents access requests that are pending your approval, the second tab represents access requests you have made that are pending another external user's approval.
The "Pending Approvals" tab provides two buttons to "Approve" and "Deny" access requests. Upon selecting one of these actions, the user is (if approved) granted the specified permissions to the IG and emailed a notification, or (if denied) emailed a notification indicating their access request has been denied.


Web & UX/UI Designer
Hello, My name is Ploysai and i'm very please that you visit my portfolio, I'm happy and friendly person and I have a dream once to become designer, I wish my dream could come true with your help, I love to create new ideas and come-up with beautiful and useful design that can give other people happiness, I alway want to find new experience if i have a chance, lastly i really love dogs :) I hope you enjoy my portfolio


When you log into your mailbox, you see a screen view similar to the one below.
|
Option |
Description |
|---|---|
|
Window header |
Displays the Search Bar |
|
Overview pane |
Displays the following: • User Name – the user name under which you logged in • Quota Display – your mailbox quota • Folders – including system folders (Inbox, Sent, Draft, Junk, and Trash) as well as customer folders you created • Searches – search queries that you created and saved for future use • Tags – any tags you have created. Click on a tag to quickly see all messages that are tagged with that tag. |
|
Application tabs |
The applications that you can access are listed in the tabs on this row, such as Mail or Calendar applications. The Help and Log Out links are also available on the right of this bar. |
|
Toolbar |
This bar displays at the top and again under the Content pane and displays the following: Tools Tabs – click a tab to access the different tools available for your account. Action Buttons – click an action button to perform a task available for the application you are currently using. The Move to and Actions fields gives you menu choices available in the application. |
|
Content pane |
The content of this area changes depending on what application is in use. In the Inbox view, it displays all messages or conversations in your Inbox. |
|
Search bar |
Displays the Search and Advanced search area. You can also save searches from here. |
|
Reading pane |
Displays the content of email messages. |
Move to…
The Move to... menu displays the moves that you can make within the application you are in. In this example, In the email application, the message from Dan Pattern is selected and the options for the message are to move to folders in your folder list.
Action…
The More Action... menu displays the different actions that you can make within the application you are in. This example is for when you are the email application.
Navigation Functions Not Available
The following navigating features are not available with the standard ZWC .
Down-arrow menus
Movable sash
Tool tips
Right-click for client features
Folder information


2 Kings 21:1
Manasseh was twelve years old when he began to reign, and reigned fifty and five years in Jerusalem. And his mother's name was Hephzibah.


Tonic
Canopy
Back End Dev
2015
A daily selection of privately personalized reads; no accounts or sign-ups required.
- html
- css
- javascript
I’m a software developer! I can help you build a product , feature or website Look through some of my work and experience! If you like what you see and have a project you need coded, don’t hestiate to contact me.
let's connectCanopy
Back End Dev
2015
A daily selection of privately personalized reads; no accounts or sign-ups required.
Canopy
Back End Dev
2015
A daily selection of privately personalized reads; no accounts or sign-ups required.
Canopy
Back End
2015
A daily selection of privately personalized reads; no accounts or sign-ups required.
Canopy
Back End
2015
A daily selection of privately personalized reads; no accounts or sign-ups required.
Hello I’m a software developer! I can help you build a product , feature or website Look through some of my work and experience! If you like what you see and have a project you need coded, don’t hestiate to contact me.
Let's Connect Get my resumejavascript
html
css
If you have an application you are interested in developing, a feature that you need built or a project that needs coding. I’d love to help with it


Introduction
Welcome to the Hello Books API
API Endpoint
https://fidelishellobooks.herokuapp.com/api/
Hello Books is a full stack Library management Application.
You can use our API to access the Hello Books API endpoints. Our APIs are RESTful and are designed to be resource-oriented and make use of appropraite HTTP response codes.
You can view code examples of calls to our API endpoints by the right, and you can switch the programming language of the examples with the tabs in the top right.
Authorization
Certain endpoints require authorizationn before they can be accessed
Calls made to APIs needing authorization need the x-access-token header attached. The content of the x-access-token would be a token signed by the server.
# With shell, you can just pass the correct header with each request
curl "https://fidelishellobooks.herokuapp.com/api/v1/example"
-H "x-access-token:
eyJpZCI6MSwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9._V7HLWjHKM_Aplx2nN1pGcJg1LqZKDR5e40mZagrUjc"
the value assigned to
x-access-token
is the token returned from the signin endpoint
The header x-access-token
is the value of the token returned once signin is completed
Hello Books expects for the token to be included in API requests to the server (requiring authorizarion) in a header that looks like the following:
x-access-token: TOKEN_FROM_SERVER
Authentication
For Authentication:
You must first signup on the server
A mail would be sent to your email address to activate your account
You must signin using either your email/username and password supplied
Sign Up
curl -d<EMAIL_ADDRESS>-X POST "https://fidelishellobooks.herokuapp.com/api/v1/users/signup"
Sign Up endpoint
POST https://fidelishellobooks.herokuapp.com/api/v1/users/signup
Sample Response
{
"status": "Success",
"message": "User account created",
"membership": "Blue"
}
Parameters
| Parameter | isRequired | Description |
|---|---|---|
| username | True | Username to be used for login purposes by user |
| password | True | Password to be used for login purposes |
| lastname | True | Surname of user |
| firstname | True | First Name of user |
| True | Email address of user (activation email would be sent here) | |
| phone | false | Phone number of user |
Sign Up Response and Errors
Code Message Description 201 User Account Created User account has been created successfully and activation email has been sent to account 202 User Account Created, Token generation Unsuccessful User account was created, However for some reason activation email has yet to be sent to user 400 Email/Username must be unique The Email address or username is already taken/registered on database 400 {Required} Field {invalid/too short} One of the required fields is invalid or missing 5xx None A server error has occured (from our end)
Our API makes use of the regular HTTP response codes to indicate success or failure. Generally, 2XX range of reply codes mean that the user has been able to signup successfully
Status codes in the 4XX range mostly indicate an error has occured:
Could mean that one or more required fields in your query is missing
Could mean that one or more fields has invalid content
Could also indicate that your email or specified username has already been registered in the system
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Sign In
curl -d "username=sampleuser&password=samplePassword"
-X POST "https://fidelishellobooks.herokuapp.com/api/v1/users/signin"
Sample Response
{
"status": "Successful",
"message": "Signin Successful",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
}
To Signin, you supply the email/username to the username field.
Token generated on sign in only last about a 4 days at best and must be renewed afterwards
Sign In endpoint
POST https://fidelishellobooks.herokuapp.com/api/v1/users/signin
Sign In Parameters
| Parameter | isRequired | Description |
|---|---|---|
| username | True | Either the Username registered with or the email address |
| password | True | Must be the password used to register on the system |
Sign In Response and Errors
Code Message Description 202 Signin Successful User has been signed in on the system and token generated 400 {field} not supplied/invalid The username/email or password is not supplied or is of invalid format 401 Invalid Username or Password No such user exists or either field is invalid 401 Email Address not Verified User Has registered but email has not been activated 5xx Unsuccessful A server error has occured (from our end)
Our API makes use of the regular HTTP response codes to indicate success or failure. Generally, 2XX range of reply codes mean that the user has been able to signup successfully
Status codes in the 4XX range mostly indicate an error has occured:
Could mean that the email address has not yet been verified
Could mean that either the username supplied or password is incorrect (and authentication impossible) or either is missing
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Admin Endpoints
All Endpoints in this category require the authorization header x-access-token
Special access must have been granted to the user for administrative priviledges else all requests would fail
Create New Author
curl -d "firstname=sample&lastname=Author&authorDOB=1992-01-12"
-X POST "https://fidelishellobooks.herokuapp.com/api/v1/authors"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status": "Success",
"message": "Author Created Successfully"
}
Gives admin ability to create a new author
POST https://fidelishellobooks.herokuapp.com/api/v1/authors
Create Author Parameters
| Parameter | isRequired | Description |
|---|---|---|
| firstname | True | First Name of the Author |
| lastname | True | Surname of the Author |
| authorDOB | False | Date of Birth of the Author |
| authorAKA | False | Author's Pen name, defaults to be the Authors FIrstname + Lastname |
Create Author Response and Errors
Code Message Description 201 Created Successfully Author has been created and added to the database successfully (and is available for selection) 400 Incomplete Details Details supplied are incomplete 5xx Unsuccessful A server error has occured (from our end)
The only successful response code here is 201, the message here is unimportant
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Create Book
curl
-X POST "https://fidelishellobooks.herokuapp.com/api/v1/books" -d "authorIds=1&publishyear=2017&bookname=Sample+Book&description=Sample+description+stuff+xyz+abc&image=xyz.jpg&ISBN=1029-1820-1381-11"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status": "Success",
"message": "Book Created Successfully",
"bookID": 1
}
Create a Book based on given parameters
POST https://fidelishellobooks.herokuapp.com/api/v1/books
Create Book Parameters
| Parameter | isRequired | Description |
|---|---|---|
| authorIds | true | A sort of list of author IDs, multiple authors would be a set of comma seperated numbers e.g 1,2,3 as input |
| publishyear | true | A number (or date) which would indacate the publish year of book |
| bookname | true | The name of a book |
| description | true | Description of book |
| image | true | image URL |
| ISBN | true | the International Standard Book Number of the book |
| quantity | false | Number of copies of the book to be added to the library (defaults to 1) |
Create Book Response and Errors
Code Message Description 201 Book Successfully Created Specifies that book has been created and added to the library 400 [No {field} Found] Returns an array of errors (for each field) e.g [{"field":"description","error":"No Description Supplied"},{"field":"authorField","error":"No Authors Selected"}]
400 Book Already Exists When a duplicate ISBN has been entered 5xx Unsuccessful A server error has occured (from our end)
Once a 201 response code is returned, it can be expected that the book has been created and added to the books library
Error code 400 indicate that an error has occured
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Modify Book
curl
-X PUT "https://fidelishellobooks.herokuapp.com/api/v1/books/1" -d "description=This+is+a+new+description+hehe"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status" : "Success",
"message" : "Book Details Updated",
"bookUpdate" :
{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"description" : "This is a new description hehe",
"bookImage" : "xyz.jpg",
"publishYear" : "2017-01-01T00:00:00.000Z",
"isActive" : true,
"createdAt" : "2017-12-14T10:07:58.127Z",
"updatedAt" : "2017-12-14T10:58:12.828Z"
}
}
Modified a Book based on specified parameters
POST https://fidelishellobooks.herokuapp.com/api/v1/books/<ID>
Modify Book Parameters
| Parameter | isRequired | Description |
|---|---|---|
| < ID > | true | The ID of the book to be modified |
| publishyear | false | New value for publish year |
| bookname | false | The modified name of a book |
| description | false | The modified Description of book |
| image | false | the modified image URL |
| ISBN | false | the modified ISBN |
Modify Book Response and Errors
Code Message Description 200 Book Details Updated Specifies that book has been modified successfully 400 No Information Supplied Specifies that API has been called without any active field to be modified 400 ISBN must be unique When a duplicate ISBN has been entered 404 Invalid Book Specifies that API has been called for a book that does not exist (or not book id entered) 5xx Unsuccessful A server error has occured (from our end)
Once a 200 response code is returned, it can be expected that the book has been modified in the library
Error code 400 indicate that No fields have been supplied for modification or ISBN has already been used by another book
Error code 404 indicate that Book ID has not been specified
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Update Book Quantity
curl
-X POST "https://fidelishellobooks.herokuapp.com/api/v1/books/1/quantity" -d "quantity=3"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status" : "Success",
"message" : "Book Updated Successfully",
"addBook" :
{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"bookQuantity" : 4,
"description" : "This is a new description hehe",
"bookImage" : "xyz.jpg",
"publishYear" : "2017-01-01T00:00:00.000Z",
"isActive" : true,
"createdAt" : "2017-12-14T10:07:58.127Z",
"updatedAt" : "2017-12-14T11:35:48.351Z"
}
}
Modified a Book based on specified parameters
POST https://fidelishellobooks.herokuapp.com/api/v1/books/<ID>/quantity
Update Book Quantity Parameters
| Parameter | isRequired | Description |
|---|---|---|
| < ID > | true | The ID of the book to be updated |
| quantity | true | Number of new books to be added (or removed), a negative number indicates reduction in number of books |
Modify Book Quantity Response and Errors
Code Message Description 200 Book Updated Successfully Specifies that number of copies of the book have been changed successfully 400 Missing Information Specifies that API has been called without quantity to be added or removed 404 Invalid Book Specifies that API has been called for a book that does not exist (or not book id entered) 5xx Unsuccessful A server error has occured (from our end)
Once a 200 response code is returned, it can be expected that the book has been modified in the library
Error code 400 indicate that No quantity field was specified
Error code 404 indicate that Book ID has not been specified or book was not found in the library
Create Book Category
curl
-X POST "https://fidelishellobooks.herokuapp.com/api/v1/books/category" -d "categoryName=drama"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status": "Success",
"message": "Category Created Successfully",
"categoryId": 1,
"categoryName": "Drama"
}
Creates a new Category
POST https://fidelishellobooks.herokuapp.com/api/v1/books/category
Create Book Category Parameters
| Parameter | isRequired | Description |
|---|---|---|
| categoryName | true | The Name of the category to be added |
Create Category Responses and Errors
Code Message Description 201 Category Created Successfully Specifies that the category has been created successfully 400 Incomplete Details Specifies that API has been called without Category Name Supplied 400 CategoryName must be unique Specifies that the category name already exists 5xx Unsuccessful A server error has occured (from our end)
Once a 201 response code is returned, it can be expected that the category has been created and added to library
Error code 400 indicate that either the category name is invalid or incomplete details have been entered
Add Books to Category
curl
-X PUT "https://fidelishellobooks.herokuapp.com/api/v1/books/category" -d "categoryId=1&bookId=1"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status": "Success",
"message": "Book Added to Category Successfully"
}
Adds a certain book to a category
PUT https://fidelishellobooks.herokuapp.com/api/v1/books/category
Add Book to Category Parameters
| Parameter | isRequired | Description |
|---|---|---|
| categoryId | true | The Id of the category |
| bookId | true | The Id of the Book to be added |
Add Books to Category Responses and Errors
Code Message Description 200 Book Added to Category Successfully Specifies that the book has been added to the category successfully 400 Incomplete Details Specifies that API has been called without Category Id or Book Id Supplied 400 Invalid Book/Category Specifies that either the bookId or categoryId does not exist on database 5xx Unsuccessful A server error has occured (from our end)
A 200 Indicates that the book has been successfully added to the category
Error code 400 indicate that either the category/book Id is invalid or incomplete details have been entered
Remove Book From Category
curl
-X DELETE "https://fidelishellobooks.herokuapp.com/api/v1/book/category" -d "categoryId=1&bookId=1"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status": "Success",
"message": "Book Removed from Category Successfully",
"book": "1"
}
Removes a certain book from a category
DELETE https://fidelishellobooks.herokuapp.com/api/v1/book/category
Remove Book from Category Parameters
| Parameter | isRequired | Description |
|---|---|---|
| categoryId | true | The Id of the category |
| bookId | true | The Id of the Book to be added |
Remove Books from Category Responses and Errors
Code Message Description 200 Book Removed from Category Successfully Specifies that the book has been removed from the category successfully 400 Incomplete Details Specifies that API has been called without Category Id or Book Id Supplied 400 Invalid Book/Category Specifies that either the bookId or categoryId does not exist on database 5xx Unsuccessful A server error has occured (from our end)
A 200 Indicates that the book has been successfully removed from the category specified
Error code 400 indicate that either the category/book Id is invalid or incomplete details have been entered
Delete Book Category
curl
-X DELETE "https://fidelishellobooks.herokuapp.com/api/v1/books/category" -d "categoryId=1"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status": "Success",
"message": "Category Deleted Successfully",
"deleted": 1,
}
Deletes a Category from the list of categories,
DELETE https://fidelishellobooks.herokuapp.com/api/v1/books/category
Delete Book Category Parameters
| Parameter | isRequired | Description |
|---|---|---|
| categoryId | true | The Id of the category to be deleted |
Delete Category Responses and Errors
Code Message Description 200 Category Deleted Successfully Specifies that the category has been created successfully 400 Incomplete Details Specifies that API has been called without Category Name Supplied 403 Cannot Delete Category, Remove Books from Category First Specifies that there are still books present in the category 5xx Unsuccessful A server error has occured (from our end)
Once a 200 response code is returned, it can be expected that the category has been deleted from the library
Error code 400 indicate that either the category Id is invalid or incomplete details have been entered
Error code 403 indicate that the category cannot be deleted yet
Common Errors
Code Message Description 401 Unauthorized You do not have administrative priviledges (or your previous priviledges have been revoked) 5xx Unsuccessful A server error has occured (from our end)
These errors are common amongst all routes requiring administrative priviledges
The 401 means you do not have access to the endpoint you are tyring to visit (either because you do not have priviledges or cos you do not have a token), check the response to see cause of error
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Common Endpoints
These endpoints are available to everyone who has an authorization token
Get Authors
curl
-X GET "https://fidelishellobooks.herokuapp.com/api/v1/authors"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status": "Success",
"allAuthors":
[{
"id": 1,
"authorFirstName": "Nil",
"authorLastName": "Anonymous",
"authorAKA": "Anonymous",
"dateofBirth": "1900-01-01"
},
{
"id": 2,
"authorFirstName": "sample",
"authorLastName": "Author",
"authorAKA": "sample Author",
"dateofBirth": "1992-01-12"
}]
}
Lists of all authors
GET https://fidelishellobooks.herokuapp.com/api/v1/authors
Get Author Query Parameters
| Parameter | isRequired | Description |
|---|---|---|
| id | false | Author ID, if specified, only details about a particular author are displayed else all authors would be listed |
GET Author Response and Errors
Code Message Description 200 No Authors Request was successful, however, there are no authors on the database 202 None Returns a list of all authors or information about a certain author (including books authored) if id is specified 5xx Unsuccessful A server error has occured (from our end)
Once a 202 response code is returned, expect to receive a list of authors/books authored by an author
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Get Books
curl
-X GET "https://fidelishellobooks.herokuapp.com/api/v1/books/list/1?limit=10"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status" : "Success",
"bookLists" :
[{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"description" : "This is a new description hehe",
"bookImage" : "xyz.jpg",
"publishYear" : "2017-01-01T00:00:00.000Z",
"RatingCount" : "0",
"RatingSum" : null,
"ratingAvg" : null,
"Authors" :
[{
"id" : 1,
"authorAKA" : "Anonymous"
}]
}],
"totalBooksCount" : 1,
"totalPages":1
}
Lists of all Books Created
GET https://fidelishellobooks.herokuapp.com/api/v1/books/list/<page>
Get Books Parameters
| Parameter | type | isRequired | Description |
|---|---|---|---|
| page | param | true | The page number (based of offset) |
| limit | query | true | The number of books expected to be displayed per API call |
| sort | query | false | if specified, sorts the result either Alphabetically or by Rating otherwise sorts from newest first values could be alphabetical ,rating (case insensitive) |
GET Books Response and Errors
Code Message Description 200 None Request was successful, A list of books would be returned (or an empty array) with total number of pages 400 [Invalid {field} sent] Returns an array of errors (for limit or/and page fields) e.g [{"field":"page","error":"Invalid Page sent"},{"field":"limit","error":"Invalid limit sent"}]
5xx Unsuccessful A server error has occured (from our end)
Once a 200 response code is returned, expect to receive a paginated list of books
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Get Books By Category
curl
-X GET "https://fidelishellobooks.herokuapp.com/api/v1/books/category/1?page=1&limit=10"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status" : "Success",
"bookLists" :
[{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"description" : "This is a new description hehe",
"bookImage" : "xyz.jpg",
"publishYear" : "2017-01-01T00:00:00.000Z",
"RatingCount" : "0",
"RatingSum" : null,
"ratingAvg" : null,
"Authors" :
[{
"id" : 1,
"authorAKA" : "Anonymous"
}],
"Categories": [
{
"id": 1,
"categoryName": "Drama"
}
]
}],
"totalBooksCount" : 1,
"totalPages":1
}
Lists of all Books Created and placed in the category
GET https://fidelishellobooks.herokuapp.com/api/v1/books/category/<categoryId>
Get Books By Category Parameters
| Parameter | type | isRequired | Description |
|---|---|---|---|
| categoryId | params | The ID of the category to be sorted by | |
| page | query | false | The page number (based of offset) (defaults to 1) |
| limit | query | false | The number of books expected to be displayed per API call (defaults to 10) |
| sort | query | false | if specified, sorts the result either Alphabetically or by Rating otherwise sorts from newest first values could be alphabetical ,rating (case insensitive) |
GET Books By Category Response and Errors
Code Message Description 200 None Request was successful, A list of books would be returned (or an empty array) with total number of pages 400 [Invalid {field} sent] Returns errors for incomplete details 5xx Unsuccessful A server error has occured (from our end)
Once a 200 response code is returned, expect to receive a paginated list of books
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Basic User Endpoints
These endpoints are basic endpoints which virtually all users have access to
They require authorization
No Special access is required except from the x-access-token
given to you when you Authenticated
Borrow Book
curl
-X POST "https://fidelishellobooks.herokuapp.com/api/v1/users/1/books" -d "duedate=2018-01-01&bookId=1"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status" : "Success",
"message" : "Book Successfully Borrowed",
"lendId" : 1,
"borrowDate" : "2017-12-14T11:59:35.883Z",
"book" : "Sample Book",
"bookId" : 1,
"QuantityLeft" : 3,
"dueDate" : "2018-01-01T00:00:00.000Z"
}
Borrow a Book from the library based on book ID specified and book availability
POST https://fidelishellobooks.herokuapp.com/api/v1/users/<userId>/books
Borrow Book Parameters
| Parameter | isRequired | Description |
|---|---|---|
| < userId > | true | The user Id of the user trying to borrow the book |
| bookId | true | the id of the book to be borrowed from the library |
| duedate | true | The date the book is meant to be due for return |
Borrow Book Response and Errors
Code Message Description 200 Book Unavailable Request was valid. However, you cannot borrow the book as all copies have been borrowed (or are not just available) 200 Max borrow limit reached Request was valid. However, you cannot borrow the book as you have utilized all available loan slots allocated to you (return some books ?) 202 Book Successfully Borrowed States that the book has been borrowed from the library, quantity updated and Your available books to be borrowed have been reduced (till you return one of those borrowed) 400 Invalid Due Date Specifies that the due date specifed is either not a real date or it falls behind current day (due date can't be in the past) 401 Not Allowed Specifies that the You do not exist on the database or your token does not match your records 404 Invalid {Book/User ID} Specifies that API has been called but bookid or/and user id have not been specified 5xx Unsuccessful A server error has occured (from our end)
a 200 status code indicates that the request was entirely valid but no book was available to be borrowed
Once a 202 response code is returned, it can be expected that the book has been borrowed from the library
Error code 4XX indicate that an error has occured from your end (your request or otherwise)
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Return Book
curl
-X PUT "https://fidelishellobooks.herokuapp.com/api/v1/users/1/books" -d "lendId=1&bookId=1"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status" : "Success",
"message" : "Book Returned Successfully",
"lendId" : 1,
"bookDetails" :
{
"Bookname" : "Sample Book",
"BookQuantity" : 4,
"BorrowedDate" : "2017-12-14T11:59:35.883Z",
"DueDate" : "2018-01-01T00:00:00.000Z",
"returnDate" : "2017-12-14T18:26:49.552Z",
"outStanding" : 0
}
}
Return a Book to the library
PUT https://fidelishellobooks.herokuapp.com/api/v1/users/<userId>/books
Return Book Parameters
| Parameter | isRequired | Description |
|---|---|---|
| < userId > | true | The user Id of the user trying to return the book |
| bookId | true | The id of the book to be returned to the library |
| lendId | true | The id from the borrow book table of this particular record |
Return Book Response and Errors
Code Message Description 200 Book Already Returned Request was valid. However, you have previously returned this book to the library 202 Book Returned Successfully States that the book was returned successfully, outstanding days from due date are indicated 400 User/Book not matching records Specifies that the book specied or/and the user don't match records from lend 401 Not Allowed Specifies that the You do not exist on the database or your token does not match your records 404 No records found Indicates that it is impossible to return this book as no record on database matches the lendId provided 404 Invalid {Book/User ID} Specifies that API has been called but bookid or/and user id have not been specified 5xx Unsuccessful A server error has occured (from our end)
a 200 status code indicates that the request was entirely valid but book might have been returned already
Once a 202 response code is returned, the book has successfully been returned
Error code 4XX indicate that an error has occured from your end (your request or otherwise)
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Get Borrowed Books
curl
-X GET "https://fidelishellobooks.herokuapp.com/api/v1/users/1/books"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status" : "Success",
"borrowedBooks" :
[{
"id" : 1,
"borrowDate" : "2017-12-14T11:59:35.883Z",
"dueDate" : "2018-01-01T00:00:00.000Z",
"actualReturnDate" : "2017-12-14T18:26:49.552Z",
"Book" :
{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"bookImage" : "xyz.jpg",
"publishYear":"2017-01-01T00:00:00.000Z"
}
},
{
"id" : 2,
"borrowDate" : "2017-12-15T15:00:35.823Z",
"dueDate" : "2018-01-01T00:00:00.000Z",
"actualReturnDate" : null,
"Book" :
{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"bookImage" : "xyz.jpg",
"publishYear":"2017-01-01T00:00:00.000Z"
}
}]
}
Sample Response (
returned=false
)
{
"status" : "Success",
"borrowedBooks" :
[{
"id" : 2,
"borrowDate" : "2017-12-15T15:00:35.823Z",
"dueDate" : "2018-01-01T00:00:00.000Z",
"actualReturnDate" : null,
"Book" :
{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"bookImage" : "xyz.jpg",
"publishYear":"2017-01-01T00:00:00.000Z"
}
}]
}
Lists of all Books Borrowed by the user (or only those unreturned)
GET https://fidelishellobooks.herokuapp.com/api/v1/users/<userId>/books
Get Borrowed Books Parameters
| Parameter | isRequired | Description |
|---|---|---|
| returned | false | Used to specify if to return all borrowed books or only those unreturned |
GET Borrowed Books Response and Errors
Code Message Description 200 No Borrowed Books Request was valid. However, you have never borrowed any books (or you have returned all books previously borrowed) 202 Indicated successful request and returns a list of borrowed books 401 Not Allowed Specifies that the You do not exist on the database or your token does not match your records 404 Invalid UserId Specifies that API has been called but user id has not been specified or is invalid 5xx Unsuccessful A server error has occured (from our end)
Once a 202 response code is returned, expect to receive a list of borrowed books
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email
Get Borrowed Books (Paginated)
curl
-X GET "https://fidelishellobooks.herokuapp.com/api/v1/users/1/books/list/1?order=false&sort=dateborrowed&limit=10"
-H "x-access-token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjEsInVzZXJuYW1lIjoic2FtcGxldXNlciIsImZpcnN0TmFtZSI6IlNhbXBsZSIsImxhc3ROYW1lIjoiVXNlciIsInJvbGUiOiJVc2VyIiwiaWF0IjoxNTEzMTc1OTQxLCJleHAiOjE1MTM1MjE1NDF9.OPD-w85wL8ELcF8xnX7bDHUqA3yISsS3FIehGsrp0v4"
Sample Response
{
"status" : "Success",
"totalages": 1,
"borrowedBooks" :
[{
"id" : 1,
"borrowDate" : "2017-12-14T11:59:35.883Z",
"dueDate" : "2018-01-01T00:00:00.000Z",
"actualReturnDate" : "2017-12-14T18:26:49.552Z",
"Book" :
{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"bookImage" : "xyz.jpg",
"publishYear":"2017-01-01T00:00:00.000Z"
}
},
{
"id" : 2,
"borrowDate" : "2017-12-15T15:00:35.823Z",
"dueDate" : "2018-01-01T00:00:00.000Z",
"actualReturnDate" : null,
"Book" :
{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"bookImage" : "xyz.jpg",
"publishYear":"2017-01-01T00:00:00.000Z"
}
}]
}
Sample Response (
returned=false
)
{
"status" : "Success",
"borrowedBooks" :
[{
"id" : 2,
"borrowDate" : "2017-12-15T15:00:35.823Z",
"dueDate" : "2018-01-01T00:00:00.000Z",
"actualReturnDate" : null,
"Book" :
{
"id" : 1,
"bookName" : "Sample Book",
"bookISBN" : "1029-1820-1381-11",
"bookImage" : "xyz.jpg",
"publishYear":"2017-01-01T00:00:00.000Z"
}
}]
}
Lists of all Books Borrowed by the user (or only those unreturned)
GET https://fidelishellobooks.herokuapp.com/api/v1/users/<userId>/books/list/<page>
Get Borrowed Books Parameters (Paginated)
| Parameter | isRequired | Description |
|---|---|---|
| page | param | true |
| limit | query | true |
| sort | query | false |
| returned | false | Used to specify if to return all borrowed books or only those unreturned |
GET Borrowed Books Response and Errors (Paginated)
Code Message Description 200 No Borrowed Books Request was valid. However, you have never borrowed any books (or you have returned all books previously borrowed) 202 Indicated successful request and returns a list of borrowed books 400 [Invalid {field} sent] Returns an array of errors (for limit or/and page fields) e.g [{"field":"page","error":"Invalid Page sent"},{"field":"limit","error":"Invalid limit sent"}]
401 Not Allowed Specifies that the You do not exist on the database or your token does not match your records 404 Invalid UserId Specifies that API has been called but user id has not been specified or is invalid 5xx Unsuccessful A server error has occured (from our end)
Once a 202 response code is returned, expect to receive a list of borrowed books
Status codes in the 5XX range mostly indicate the error that has occured is from our end, You could report these errors by sending an email


--- layout: page title: "About us" permalink: /pages/about-us/index.html ---
A great About Us page helps builds trust between you and your customers. The more content you provide about you and your business, the more confident people will be when purchasing from your store.
Your About Us page might include:


'Our door is always open' - IMO invite Govt talks as they vote to hold industrial action ballot
by By Digital Desk staffThe Irish Medical Organisation says any industrial action by its members will not take place until next year.
It comes after they last night voted unanimously in favour of holding a ballot for industrial action, up to and including strike action, next month.
The union is seeking pay parity for new entrant consultants and says poor working conditions is leading to mass emigration.
Former IMO President and member of its consultant committee, Dr Matthew Sadlier, says members aren't happy:
"We are looking to hold the ballot before Christmas but obviously with any ballot it takes a number of weeks to organise," he said.
"We will consider the responses, more than likely in the early new year and then at that point in time we will see what form the industrial action would take.
"In the meantime, it the government wants to engage with us on this issue, our door is always open," he added.
READ MORE
'Radical change is unavoidable' - RTÉ chair says change to TV licence fee needed


Our business prides itself on being a family friendly location. Come stop by kids get a free cookie!
Welcome To Salmon Cookies!
Our business prides itself on being a family friendly location. Come stop by kids get a free cookie!
Our salmon is all wild caught with no added hormones! We use these salmon to prepare the tastiest salmon cookies you have ever tasted. Some say "Salmon in a cookie? YUCK" Those people are wrong. They simply never had our salmon cookies.


 Yes, she is a woman but, unlike what many people have said, The Piano is not a feminist film and isn't about women. It is, firstly, about lust, then restriction, and, finally but least importantly, about love. It is a masterpiece saturated in evocative images and a film that succeeds, perhaps, because a woman is behind the scenes. Campion creates an otherworldly place in the forests of New Zealand and she understands the emotional power of eroticism. She doesn't go for what many so-called feminist films employ: she doesn't victimize any of her characters or make any of them criminals, either, which is a great asset to a film that portrays the complexity of the situations we get into because of passion.
A nineteenth century woman named Ada (Holly Hunter) brings her daughter, Flora (Anna Paquin), to New Zealand. Ada is mute, presumably by choice, and is arranged to wed Stewart (Sam Neill), a British man she has never met. When she arrives in New Zealand, her husband refuses to take her beloved piano, her only source of expression, back to his house. He says it is too heavy.  Stewart does not realize the piano, over Ada's mute years, has become synonymous to her heart and soul. Without it, she has no means of speaking in the language of emotion and is completely miserable and soulless.
There is an uneasiness between Ada and Stewart already. Baines (Harvey Keitel), a British immigrant who has abandoned his native land's customs in favor of Maori attitudes of freedom, offers Stewart a good amount of land for the piano after he takes Ada to the beach and hears her play. Some of cinematographer Stuart Dryburgh's most beautiful images here are those of Ada with her piano on a deserted expanse of the beach. Baines is struck by Ada's frightening intimacy with her piano and becomes attracted to her. Ada refuses to give her piano, her soul, to this man, an illiterate. Stewart becomes angry and tells her she must make sacrifices for her family.
The piano, which is explored in great, stunning detail by Dryburgh's camera, is sold to Baines in exchange for the land. He requests lessons from Ada but when she consents, he will not play.  She will "earn" her piano back key by key if she lifts her dress and lies with him. At first, she refuses. She finally accepts the offer; I'm not sure whether if it was in a state of longing for her piano or a state of longing for sex.  It's too easy to say she simply falls in love with Baines. In the end, she does have a deep love for him but she attains it gradually: first she lies with him for her piano; soon, it is simply for her desire; later, it becomes an entanglement of love and sex, maybe even of rebellion.
Stewart is portrayed as a cold man at first and Baines, an obsessed man. The Piano makes them deeper. This is a thick film and we sympathize with Stewart who cannot win Ada's love or sexual attention, and we are allowed to witness the unexpected tenderness of Baines.  Flora is mischievous and her decisions are strange. She is outspoken and tattles on her mother and Baines, which leads to the most shattering sequence in the entire film.
Shot very dramatically, this sequence has Stewart, who trusted Ada to stay away from Baines, chopping off her finger with an ax. We, thankfully, don't see the actual violent act but, even more painful, we see Ada's face turning blue and her absolute horror.
In the climactic scene, Baines, Ada, and Flora sail away from New Zealand and away from Stewart to live together. Ada demands her "spoiled" piano be thrown overboard and, in a suicidal attempt, gets her foot caught in the rope. In a scene as haunting as the one previously mentioned, Ada is tugged to the bottom of the ocean. For several moments, she simply waits to die. Suddenly, she realizes what she has done and wishes to live. When she finally makes her way to the surface, she has been mysteriously redeemed. Her soul (her piano) lies disintegrating at the bottom of the sea and she no longer is repressed. Her piano-playing need not be her only source of expression and pleasure anymore: she has discovered life, love, and passion.
Perhaps I have made The Piano seem sentimental and gooey. It is moody, definitely, but it is not melodramatically romantic. It is romantic, yes, and it sees love and passion as salvation, but it also sees love and lust as clawing. The Piano is about bondage and this is highlighted by everything from the women's tight corsets to the inner struggle within the characters. By Jane Campion's screenplay not giving the outlet of language to Ada, Holly Hunter is repressed somewhat. In one of the best performances I've seen this decade, or of any decade for that matter, Hunter says everything with her face, body, and fingers. One critic suggested that people are imagining Hunter's physical expressions, however, Ada becomes real, despite the character's enigmatic aura.
Hunter, though she gives the film's stand-out performance, is not the only gifted actor in The Piano. Let's not forget Harvey Keitel and Sam Neill, men who are bound: Keitel's character by sexual and romantic obsession; Neill's by jealousy and sexual inadequacy. And Anna Paquin is strange and precocious as Ada's daughter who must stand up for her mother but is repressed by her humorous knack for telling tall-tales and her desire to lie and tell her mother's secrets.
Stuart Dryburgh, using the photographic technique known as Autochrome, supplies a great deal of overwhelming intensity, mysticism, and otherworldliness to The Piano. There are moments when the film is warm and glowing with red, and other times when it is cold and dark blue. Dryburgh is even able to shoot the bizarre intimacy between Ada and her piano, Ada and her daughter, and Ada and Baines. There is a certain beauty about Ada's fingers gently caressing and falling upon piano keys. The Piano is a fiercely erotic film and there are scenes between Ada and Baines that are heated and detailed. These scenes are really graphic, the most graphic I've ever seen, but they are not gratuitous or pornographic and Dryburgh lights and frames them without flaw. His photography catches every nuance of New Zealand and the faces of The Piano's characters.
Jane Campion is one of the few greatly acclaimed and successful female directors around (I refer not to women's directorial ability but to their obscurity in the field; sadly, I remember only Lina Wertmuller as another such successful and talented female director, but she worked ages ago). There is both a universality and complexity to The Piano and it is one of those rare films that is multi-faceted, shaking, and engaging. Campion's point of view on the world is extremely fascinating and is different from a male's perspective. She is one of the greatest directors, male or female, of the ‘90s decade and The Piano is one of the most haunting and poetic films I've ever seen.
By Andrew Chan
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


HEAD
printf("
")
=======
printf("
")
Enter Cynosure in the above syntax
Run
>>>>>>> b3d8e40c64e4dbd802cf185fbe38566d338cfdcb


< Back
This page presents the various options on the terminals and wires. Try to create some wires from each terminal. Look at the source to see how to use them.
1. Default options
2. Drawing methods (bezier,straight,bezierArrows,arrows)
3. Changing directions
4. Changing colors
5. Changing the size of the wire
6. Using different editing direction
7. Not editable
8. Maximum number of wires (1,2,3)


{% extends "base.html" %} {# VARIABLES IN: donor - just .location of current guy this time folder - selected folder sink - selected sink user_rating - class Rating username - logged on guy's name ratings - list of class Ratings previous_sink - previous sink VARIABLES OUT: later. plus maybe i can kill some of them #} {% block content %} {% if previous_sink %}
please rate the sink above to load your selected sink:
{% if folder %}
{{donor}}/{{folder}}/{{sink}}
{% else %}
{{donor}}/{{sink}}
{% endif %}
Tip: Not every bad rating is valid. If you know how to protect yourself
from remakes then check out a poorly rated sink and rate it yourself.
{{donor}}/{{folder}}/{{sink}}
{% elif average>= 1.5 %}{{donor}}/{{folder}}/{{sink}}
{% elif average>0 %}{{donor}}/{{folder}}/{{sink}}
{% else %}{{donor}}/{{folder}}/{{sink}}
{% endif %} {% else %} {% if average >= 2.0 %}{{donor}}/{{sink}}
{% elif average>= 1.5 %}{{donor}}/{{sink}}
{% elif average>0 %}{{donor}}/{{sink}}
{% else %}{{donor}}/{{sink}}
{% endif %} {% endif %}Total Downloads = {{downloads}}
Compress all your sink drawings to a zipfile and send them to me
at:
<EMAIL_ADDRESS>I don't care if we already have 10 versions of a sink. Just send everything you have.
The team here at silicatewastes.com would like to remind everyone that
washing your hands in sinks gets rid of viruses, unlike when you
download sinks above and get viruses. It's the ultimate
irony.


Michael Wimsatt's GitHub blog
So, now that we’ve all survived the end of the world, it feels like we could use a statistical discussion of our collective mortality. Right? No? Actually I’ve wanted to do this ever since I came across xkcd’s clever use of actuarial tables. Also, I wanted an excuse to try out the Facebook Open Graph API.
So, I’m going to use cold, hard statistics to tell my friends when they can expect to die. Not any particular friend, mind you, but some statistical sampling of them. I even worked with my friend Scott to whip up a little web app that anyone can do to get the same basic stats that xkcd pulled together.
It’s really amazing how quickly you can discover new tools and techniques when you’re exploring. Most of the tools listed above were not on the agenda, but they seemed to solve the problems I had or enable us to take the project a step further.
The basic code for downloading data and processing it is here, lightly documented (at best) as usual.
When I finally downloaded the data and calculated ages, my 491 or so friends dwindled to 146 in the analysis population. I don’t know if anything about a person who would suppress a birth year (age) that would necessarily skew the data, but that is certainly a source of potential error.
However, out of that population I was able to derive the following statistical predictions:
There is a 5% chance of someone dying within 0.12 years (by 2013). There is a 50% chance of someone dying within 1.64 years (by 2014). There is a 95% chance of someone dying within 5.88 years (by 2018). There is a 5% chance of everyone dying within 67.26 years (by 2080). There is a 50% chance of everyone dying within 72.11 years (by 2085). There is a 95% chance of everyone dying within 78.3 years (by 2091). Probability of all dying in 1.0 year: <0.001% Probability of a death within 1.0 year: 33.50%
It’s kind of scary to think someone I care about has a 50% chance of being gone in 20 short months. It’s also hard no to ascribe that to a specific person in my mind, although that’s not strictly valid, given that these numbers reflect the aggregate risk of accidents, premature illness and a whole host of age-related death-dealing ailments.
I also wanted to plot the lifetime footprint of my current Facebook friends a la xkcd’s astronaut analysis. Unfortunately, I was unable to find a computationally efficient way to develop an analytical solution, so I fell back to the trusty Monte Carlo simulation. From that, however, I was quickly able to develop “die-off” curves at 5%, 50% and 95% probabilities. I also added a “birth” curve to describe my Facebook friends coming into the world.
So, we came into the world beginning in 1937 (with a huge pickup in the 70’s). And we’ll all (probably) be gone by 2091. Not a bad run…
If you want to try it yourself, head on over to Actuarize, but please be patient. This is a low-volume web app.
comments powered by Disqus


An outline is a line drawn around an element - outside the border. This can be use to make an element "stand out".
The CSS outline properties specify the style, color, and width of an outline.
This element has a thin black border and a double outline that is 10px wide and green.
An outline is a line that is drawn around elements (outside the borders) to make the element "stand out".
However, the outline property is different from the border property - The outline is NOT a part of an element's dimensions; the element's total width and height is not affected by the width of the outline.
The outline-style
property specifies the style of the outline.
The outline-style
property can have one of the following values:
dotted
- Defines a dotted outlinedashed
- Defines a dashed outlinesolid
- Defines a solid outlinedouble
- Defines a double outlinegroove
- Defines a 3D grooved outline. The effect depends on the outline-color valueridge
- Defines a 3D ridged outline. The effect depends on the outline-color valueinset
- Defines a 3D inset outline. The effect depends on the outline-color valueoutset
- Defines a 3D outset outline. The effect depends on the outline-color valuenone
- Defines no outlinehidden
- Defines a hidden outline
The following example first sets a thin black border around each <p> element, then it shows the different outline-style
values:
p {
border: 1px solid black;
outline-color: red;
}
p.dotted {outline-style: dotted;}
p.dashed {outline-style: dashed;}
p.solid {outline-style: solid;}
p.double {outline-style: double;}
p.groove {outline-style: groove;}
p.ridge {outline-style: ridge;}
p.inset {outline-style: inset;}
p.outset {outline-style: outset;}
Result:
A dotted outline.
A dashed outline.
A solid outline.
A double outline.
A groove outline. The effect depends on the outline-color value.
A ridge outline. The effect depends on the outline-color value.
An inset outline. The effect depends on the outline-color value.
An outset outline. The effect depends on the outline-color value.
Note: None of the OTHER CSS outline properties described below will have ANY effect unless the outline-style property is set! |
The outline-color
property is used to set the color of the outline.
The color can be set by:
p {
border: 1px solid black;
outline-style: double;
outline-color: red;
}
Result:
A colored outline.
The outline-width
property specifies the width of the outline.
The width can be set as a specific size (in px, pt, cm, em, etc) or by using one of the three pre-defined values: thin, medium, or thick.
p {border: 1px solid black;}
p.one {
outline-style: double;
outline-color: red;
outline-width: thick;
}
p.two {
outline-style: double;
outline-color: green;
outline-width: 3px;
}
Result:
A thick outline.
A thinner outline.
To shorten the code, it is also possible to specify all the individual outline properties in one property.
The outline
property is a shorthand property for the following individual outline properties:
outline-width
outline-style
(required)outline-color
p {
border: 1px solid black;
outline: 5px dotted red;
}
Result:
An outline.


Your name: Email address: Where do you want to go today? I don't know Disneyland Bill Gate's house Back to bed What kind of movies do you like? Horror Science Fiction Romance Comedy
I don't know Disneyland Bill Gate's house Back to bed
Horror Science Fiction Romance Comedy
How many salesmen does it take to change a light bulb? Who cares?  One Two Three Only one. But today, and today only.
Who cares?  One Two Three Only one. But today, and today only.
Any comments?


| Action |
Behavior |
| ○ button |
Collapse current submenu |
| △ button |
Display context-sensitive help |
| × button |
Expand current submenu, or adjust item to next value |
| up button |
Selects the previous item in the menu |
| right button |
For menu items that adjust a value, selects the next value |
| right analog stick |
Secondary adjustment, if any, for current menu item (e.g. rotate camera) |
| left button |
For menu items that adjust a value, selects the previous value |
| left analog stick |
For a menu item that adjusts a value, left-right motion of the analog stick moves the value down-up. For a menu item that adjusts two values, left-right motion adjusts the first value and down-up motion adjusts the second value. |
| down button |
Selects the next item in the menu |
| OPTIONS button |
Shows or hides the on-screen controller menu |
| Menu System |
| Name | Description |
| Pause | Pause or unpause simulation |
| Buffer | Select a buffer to display
| Name | Description |
| Color | The RGB channels of the back buffer |
| Alpha | The alpha channel of the back buffer |
| Depth | Depth values from 0 to 1 (black to white) |
|
| Camera Controls | Left stick moves, right stick rotates |
| Reset Camera | Bring camera to original orientation |
| Seconds Elapsed | This is the apparent time since the start of the simulation. It can be adjusted with either the left stick or d-pad |
| Lighting | Options pertaining to lighting
| Name | Description |
| Light Position | Left stick moves |
| Clear Color | Color to clear the back buffer
| Name | Description |
| Black | Black |
| Blue | Blue |
| Green | Green |
| Aqua | Aqua |
| Red | Red |
| Magenta | Magenta |
| LightGreen | LightGreen |
| LightGray | LightGray |
|
| Light Color | Color of directional light
| Name | Description |
| Black | Black |
| Blue | Blue |
| Green | Green |
| Aqua | Aqua |
| Red | Red |
| Magenta | Magenta |
| LightGreen | LightGreen |
| LightGray | LightGray |
|
| Ambient Color | Color of ambient light
| Name | Description |
| Black | Black |
| Blue | Blue |
| Green | Green |
| Aqua | Aqua |
| Red | Red |
| Magenta | Magenta |
| LightGreen | LightGreen |
| LightGray | LightGray |
|
|
| Fast depth clear | If this is enabled, the main scene's depth buffer will be cleared by explicitly setting all dwords in its HTILE buffer to a 'clear' value, rather than by rendering full-screen geometry with a 'clear' state flag. The advantage to clearing the HTILE buffer is that it is not possible for the hardware to drop down to a 'slow path' without warning if one of many graphics states is set imperfectly before the clear. Moreover, clearing the HTILE buffer does not itself change graphics state, and so there is no danger that changes to a 'clear' function will silently affect subsequent graphics commands |
| Shadow fast clear | Use HTILE to clear shadow depth buffer |
| HTILE | Are HTILE buffers used? |
| Shadow map size | Length of shadow map edge in world space |
| Use Shader Resource Table | Choose SRT or non-SRT shader resource bindings |
| Use DCC | Is Delta Color Compression used? |
| Command Line Options |
| Name | Description | Default Value | Minimum Value | Maximum Value |
| buffers | number of render targets to allocate for round-robin display | 3 | 2 | 3 |
| dcc | is there a DCC buffer for the render targets? | false | | |
| stencil | is there a stencil buffer for the depth render targets? | false | | |
| htile | is there an htile buffer for the depth render targets? | true | | |
| microSecondsPerFrame | 0=use OS clock, >0=use fixed microseconds per frame | 0 | 0 | 100000 |
| displayBuffer | which buffer to display: the RGB channels of color buffer, alpha channel of color buffer, depth buffer, or stencil buffer | 0 | 0 | 3 |
| cameraControls | false: camera controls are disabled, true: camera controls are enabled | true | | |
| displayTimings | false: do not display frame timings, true: display frame timings | true | | |
| clearColor | color to clear the backbuffer to | 0 | 0 | 7 |
| lightColor | color of the direct light in the scene | 7 | 0 | 7 |
| ambientColor | color of the ambient light in the scene | 1 | 0 | 7 |
| log2CharacterWidth | log2 of the character width in pixels | 3 | 3 | 5 |
| log2CharacterHeight | log2 of the character height in pixels | 4 | 3 | 5 |
| lookAtPosition | position for camera to look from | 0.000000 0.000000 2.500000 | -10.000000 -10.000000 -10.000000 | 10.000000 10.000000 10.000000 |
| lookAtTarget | position of target for camera to look at | 0.000000 0.000000 0.000000 | -10.000000 -10.000000 -10.000000 | 10.000000 10.000000 10.000000 |
| lookAtUp | direction that camera considers to be up | 0.000000 1.000000 0.000000 | -1.000000 -1.000000 -1.000000 | 1.000000 1.000000 1.000000 |
| lightPosition | position of light in scene | -1.500000 4.000000 9.000000 | -10.000000 -10.000000 -10.000000 | 10.000000 10.000000 10.000000 |
| lightTarget | position of target for light in scene | 0.000000 0.000000 0.000000 | -10.000000 -10.000000 -10.000000 | 10.000000 10.000000 10.000000 |
| lightUp | direction that light considers to be up | 0.000000 1.000000 0.000000 | -1.000000 -1.000000 -1.000000 | 1.000000 1.000000 1.000000 |
| interruptOnFlip | false: raise interrupt somewhat before flip, true: raise interrupt on flip | true | | |


Clothings
Accessories
Cosmetics
Clothings
Track Order
Help
Upgrade
0
PLACE ORDER
ADIDAS City Blr Black Cl Dark
Rs.2499
Rs. 1500
(-40%)
Add To Cart
ADIDAS Neo Sd Light
Rs.1399
Rs. 840
(-40%)
Add To Cart
ADIDAS Galaxy 3 Black
Rs.5999
Rs. 3300
(-45%)
Add To Cart
ADIDAS Freelift Cl Black
Rs.1299
Rs. 715
(-45%)
Add To Cart
NIKE City Blr Black Cl Dark
Rs.2499
Rs. 1500
(-40%)
Add To Cart
NIKE Neo Sd Light
Rs.1399
Rs. 840
(-40%)
Out Of Stock
NIKE Galaxy 3 Black
Rs.5999
Rs. 3300
(-45%)
Add To Cart
NIKE Freelift Cl Black
Rs.1299
Rs. 715
(-45%)
Add To Cart
W City Blr Black Cl Dark
Rs.2499
Rs. 1500
(-40%)
Add To Cart
W Neo Sd Light
Rs.1399
Rs. 840
(-40%)
Add To Cart
W Galaxy 3 Black
Rs.5999
Rs. 3300
(-45%)
Out Of Stock
W Freelift Cl Black
Rs.1299
Rs. 715
(-45%)
Add To Cart


Class: Deployment
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Deployment
- Defined in:
- rails/app/models/deployment.rb
Overview
Copyright 2014, Dell
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Constant Summary
- ERROR =
-1
- PROPOSED =
0
- COMMITTED =
1
- ACTIVE =
2
- STATES =
{ PROPOSED => "proposed", COMMITTED => "committed", ACTIVE => "active", ERROR => "error" }
Class Method Summary (collapse)
Instance Method Summary (collapse)
- - (Boolean) active?
- - (Boolean) annealable?

- - (Boolean) error?
- - (Boolean) proposable?
-
- (Object) propose
attempt to stop a proposal that's in transistion.
- - (Boolean) proposed?
- - (Object) state
- - (Object) state_name(s)
-
- (Object) status
returns a hash with all the deployment error status information.
-
- (Boolean) system?
is this a system deployment?.
Class Method Details
+ (Object) state_name(s)
40 41 42 43 |
# File 'rails/app/models/deployment.rb', line 40 def self.state_name(s) raise("#{state || 'nil'} is not a valid Deployment state!") unless s and STATES.include? s I18n.t(STATES[s], :scope=>'node_role.state') end |
+ (Object) system
49 50 51 |
# File 'rails/app/models/deployment.rb', line 49 def self.system Deployment.find_by!(system: true) end |
Instance Method Details
- (Boolean) active?
66 67 68 69 |
# File 'rails/app/models/deployment.rb', line 66 def active? committed? && node_roles.not_in_state(NodeRole::ACTIVE).count == 0 end |
- (Boolean) annealable?
79 80 81 |
# File 'rails/app/models/deployment.rb', line 79 def annealable? committed? && !active? && !error? end |
- (Object) available_nodes
62 63 64 |
# File 'rails/app/models/deployment.rb', line 62 def available_nodes nodes end |
- (Object) available_roles
58 59 60 |
# File 'rails/app/models/deployment.rb', line 58 def available_roles Role.active - roles end |
- (Object) commit
105 106 107 108 109 110 111 112 113 114 115 |
# File 'rails/app/models/deployment.rb', line 105 def commit Deployment.transaction do node_roles.in_state(NodeRole::PROPOSED).each { |nr| nr.commit! } if proposed? write_attribute("state",COMMITTED) save! end end Run.run! self end |
- (Boolean) committed?
71 72 73 |
# File 'rails/app/models/deployment.rb', line 71 def committed? read_attribute('state') == COMMITTED end |
- (Boolean) error?
87 88 89 90 |
# File 'rails/app/models/deployment.rb', line 87 def error? committed? && node_roles.in_state(NodeRole::ERROR).count > 0 end |
- (Boolean) proposable?
83 84 85 |
# File 'rails/app/models/deployment.rb', line 83 def proposable? !system? end |
- (Object) propose
attempt to stop a proposal that's in transistion. Do this by changing its state from COMMITTED to PROPOSED.
119 120 121 122 123 124 125 |
# File 'rails/app/models/deployment.rb', line 119 def propose Deployment.transaction do raise "Cannot recall a system deployment" if system? write_attribute("state",PROPOSED) save! end end |
- (Boolean) proposed?
75 76 77 |
# File 'rails/app/models/deployment.rb', line 75 def proposed? read_attribute('state') == PROPOSED end |
- (Object) state
91 92 93 94 95 96 97 98 |
# File 'rails/app/models/deployment.rb', line 91 def state case when proposed? then PROPOSED when active? then ACTIVE when error? then ERROR else COMMITTED end end |
- (Object) state_name(s)
45 46 47 |
# File 'rails/app/models/deployment.rb', line 45 def state_name(s) self.class.state_name(s) end |
- (Object) status
returns a hash with all the deployment error status information
101 102 103 |
# File 'rails/app/models/deployment.rb', line 101 def status node_roles.each { |nr| s[nr.id] = nr.status if nr.error? } end |
- (Boolean) system?
is this a system deployment?
54 55 56 |
# File 'rails/app/models/deployment.rb', line 54 def system? read_attribute("system") end |


Summary:
The text of the article would go here. This is just some text we've taken from the api.gov.au playbook.
Look for evidence that your community has been consulted, and have actively participated. Don’t mistake silence for acceptance. Not all members of your community need to have responded, but alarm bells should ring if none of them have.
If you’ve done an exceptionally good job, your community might unanimously agree to your proposal. If this doesn’t happen, look for evidence of suggestions coming from the community, and that they have been carefully considered by your people.
Check who was consulted against your stakeholder plan. Not all your stakeholders need to be consulted, but you should be happy with the reason why any weren’t.
You should check to make sure that the views from the community are genuinely reflective of the entire community, and not a segment with a vested interest.
Look for evidence that community members from different backgrounds, with different capabilities and perspectives are consulted. Don’t be biased by the people who talk the loudest, have been there the longest, or who have invested the most. In a community, everyone’s view is equally important.


{% extends 'layout.html' %} {% block pageTitle %} NHS login - Add a delegate {% endblock %} {% block content %}
To allow someone else to act on your behalf, you will need to tell us their:
You may not need to tell us all these details but doing so will help us to find the person quicker.
{{ details({ "text": "Where can I find my NHS number?", "HTML": "An NHS number is a 10 digit number, like<PHONE_NUMBER>.
You can find your NHS number on any document sent to you by the NHS. This may include:
Ask your GP practice for help if you can't find your NHS number.
" }) }} {{ button({ "text": "Continue", "href": "delegate-name" }) }}


Introduction.
There is a possibility to edit existing users. Simply when you enter Users tab search for the certain user that you would like to edit and press Edit icon.
General Settings
When you first open the account edition page you will see General Settings.
In this page you can make additional changes to the user like email, roles and password. Also you can see, Clear and Regenerate Key API Key.
Moreover there are Lifetime Stats collected by the Spree. You can see the following:
- Total Sales - It defines how much the user has spent money in your shop.
- Orders - Shows the number how many orders the user has bought.
- Average Order Value - It shows the average price that the user spent in your shop.
- Store Credits - You can get more information about Store Credits below.
- Member Since - Shows the date when the user created an account on your page.
Addresses
In this section you can manage addresses (Shipping and Billing) defined by the user during the checkout. There are also Lifetime Stats visible on the bottom of this page. When you make changes in addresses, you have to press Update button in order to save the changes, also if you don’t want to save them simply press Cancel button.
Orders
There is a simply review of all orders created by the user. There are also Lifetime Stats visible on the bottom of this page. Few options are worth to mention:
- Completed at - This is the date when the user created certain order.
- Number - This is an unique ID for a certain order, also you can move directly to the order when you click the ID.
- State - It shows current state for the certain order, you can find more about order state here.
- Total - It shows total price for the certain order.
Items
Very simlar to Orders tab, however, few more options are present here about the items purchased by the user:
- Completed at - This is the date when the user created certain order for the item.
- Description - States the information about certain item, full name of the product, its SKU number and image.
- Price - Price without taxes and shipping cost.
- Quantity - Total number of purchased product.
- Total - It shows total price for the certain order.
- State - As previously aformentioned above there is more information here.
- Order # - It shows order’s unique ID that hyperlinks you to order’s details.
Store Credits
Firstly, to add store credits to the User, you have to create a Category which you can learn about more here. Once you create a category you can assign Store Credits to the Users by simply, clicking Edit on certain User and pressing Store Credit in right panel.
You will see Store Credit panel. Like in every other tab in the User’s account you can see Lifetime Stats.
To add Store Credits press Add Store Credit. At this point, you can choose value that the User will receive, set Category and describe something important within Memo field. Memo field is visible to all other admins that will edit Store Credits added by you. Then just press Create button to accept your changes or simply press Cancel to exit without saving the changes.
Now you can see how the Store Credits are assigned to the user. New options are visible here:
- Credited - Value that shows how much Store Credits has been added to the User account.
- Used - Amount of Store Credits spent.
- Category - Category that Store Credits were assigned to.
- Created By - The Admin’s email that added Store Credits to the certain User.
- Issued On - Date of granting Store Credits.
As an Admin you are able to edit or delete Store Credits previously assigned to the User.
Editing Store Credits will present you the same options like adding them.
Those Store Credits are visible to the User in few places during checkout. It’s worth to mention that the User is not forced to use Store Credits during Payment step - the Spree default. Spree gives a user choice to pay full price with Credit Card or use Store Credits.
Once the User decides to use the Store Credits there is a possibility to cancel this choice.
If the user use Store Credits and the amount will not cover whole order’s price, rest will be charged off the Credit Card or PayPal.
Once the order has been placed there is recapitulation of the order. The user can see the following: Billing Adress, Shipping Address, Shipment method which is previously chosed by the user, Payment Information - here, the user can see if and how much of Store Credits has been spent on the order, Items purchased and information about order’s payment.
As an Admin you are able to check how the user paid for the order. Simply choose order that you would like to inspect and follow to Payments tab. If you don’t know yet how to find this tab you can find out here. Admin has to capture the payment manually by default. In order to enable Automatic Payment Capture for the future payments we strongly recommend to read about it here.
Also as an Admin you can observe used Store Credits in Users -> Store Credits.


A simple class that wraps a pyplot ax and modify its coordinate formatter to show the pixel value.
A function to modify the coordinate formatter of pyplot to display the pixel value. This is usually called when moving the mouse above the plotted image.
Wraps pyplot imshow function for the ax selected and modify the coordinate formatter to show the pixel value as well. All the usual parameters can be passed to imshow.
Creating a particular colormap with transparency.
Only values equal to 255 will have a non zero alpha channel. This is typically used to overlay a binary result on initial data.
Parameters
color: the color to use for non transparents values (ie. 255).
opacity: opacity value to use for visible pixels.
Returns
mycmap: a fully transparent colormap except for 255 values.
Compute the min and max values in a numpy data array.
The min and max values are calculated based on the histogram of the array which is limited at both end by the cut parameter (0.0002 by default). This means 99.98% of the values are within the [min, max] range.
Parameters
data: the data array to analyse.
cut: the cut off value to use on the histogram (0.0002 by default).
nb_bins: number of bins to use in the histogram (256 by default).
Returns
(min, max): a tuple containing the min and max values.
Apply flat field correction to an image.
Parameters
img: the image to correct.
ref: the reference image (without sample).
dark: the dark image (thermal noise of the camera).
Returns
flat: the flat field corrected image (between 0 and 1).
Histogram of a data array.
Compute and plot the gray level histogram of the provided data array.
Parameters
data: the data array to analyse.
nb_bins: the number of bins in the histogram.
data_range: the data range to use in the histogram, (0,255) by default.
show: boolean to display the figure using pyplot (defalut True).
save: boolean to save the figure using pyplot (defalut False).
prefix: a string to use in the file name when saving the histogram as an image (defaut ‘data’).
density: a boolean to control wether the histogram is plotted using the probability density function, see numpy histogram function for more details (default False).
Cast a numpy array into 8 bit data type.
This function change the data type of a numpy array into 8 bit. The data values are interpolated from [min, max] to [0, 255]. Both min and max values may be chosen manually or computed by the function find_min_max.
Parameters
data: the data array to cast to uint8.
min: value to use as the minimum (will be 0 in the casted array).
max: value to use as the maximum (will be 255 in the casted array).
Returns
data_uint8: the data array casted to uint8.
Save a 2D image with pyplot.
This function displays a 2D numpy array (or a slice of a 3D array) using pyplot and save it to the disk as a png image. The interpolation is disabled and the vertical origin is set to the bottom of the image.
Parameters
image: the 2d data array to show and save.
name: a string to use as the file name (without the extension)
dpi: image resolution (default 100).
colormap: the colormap tp use in matplotlib format (default gray).
verbose: boolean to enable verbose mode (default False).
The vtk_anim module define a set of classes to generate 3d animations with vtk in the form of a series of png images.
Bases: pymicro.view.vtk_anim.vtkAnimation
Animate the camera around the vertical axis.
This class can be used to generate a series of images (default 36) while the camera rotate around the vertical axis (defined by the camera SetViewUp method).
Execute method called to rotate the camera.
Bases: pymicro.view.vtk_anim.vtkAnimation
Bases: pymicro.view.vtk_anim.vtkAnimation
Bases: pymicro.view.vtk_anim.vtkAnimation
Bases: pymicro.view.vtk_anim.vtkAnimation
instruction block exectued when a TimerEvent is captured by the vtkRotateActorAroundZAxis.
If the time is not in [start, end] it just returns. Otherwise the transform matrix corresponding to the rotation around the Z-axis is computed and applied to the actor.
Bases: pymicro.view.vtk_anim.vtkAnimation
Bases: pymicro.view.vtk_anim.vtkAnimation
Add some plane actors corresponding to a list of (hkl) planes to a grain actor.
Add a 3d plane inside another object.
This function adds a plane inside another object described by a mesh (vtkunstructuredgrid). The method is to use a vtkCutter with the mesh as input and the plane as the cut function. An actor is returned. This may be used directly to add hkl planes inside a lattice cell or a grain.
Parameters
plane: A VTK implicit function describing the plane to add.
grid: A VTK unstructured grid in which the plane is to be added.
opacity: Opacity value of the plane actor.
Returns
A VTK actor.
Add a 3d plane and display its normal inside another object.
This function adds a plane inside another object described by a mesh (vtkunstructuredgrid). It basicall call add_plane_to_grid and also add a 3d arrow to display the plane normal.
Parameters
plane: A VTK implicit function describing the plane to add.
grid: A VTK unstructured grid in which the plane is to be added.
opacity: Opacity value of the plane actor.
normal_length: The length of the plane normal vector.
Returns
A VTK assembly with the plane and the normal.
Transform the actor (or whole assembly) using the specified orientation. Here we could use the three euler angles associated with the orientation with the RotateZ and RotateX methods of the actor but the components of the orientation matrix are used directly since they are known without any ambiguity.
| Parameters: |
|
|---|
Transform the actor (or whole assembly) using the specified translation.
| Parameters: |
|
|---|
Build an actor for the cartesian axes.
Parameters:
length: The arrow length of the axes (1.0 by default)
axisLabels: Specify the axes labels (xyz by default), use axisLabels = None to hide the axis labels
fontSize: Font size for the axes labels (20 by default)
Returns
A VTK assembly representing the cartesian axes.
vtk helper function to draw a box of a given size.
Function to draw a circle in a 3d scene.
| Params tuple center: | |
|---|---|
| the center of the cricle. | |
| Params float radius: | |
| the radius of the circle. | |
| Params tuple normal: | |
| the normal to the plane of the circle. | |
| Params float resolution: | |
| the resolution in degree. | |
| Return vtkActor: | |
| The method return a vtkActor that can be directly added to a 3d scene. |
This method create an actor running a contour filter through the given data set.
The data set can be equally given in numpy or VTK format (it will be converted to VTK if needed). The method may require a fair amount of memory so downsample your data if you can.
| Params data: | the dataset to map, in numpy or VTK format. |
|---|---|
| Params float value: | |
| numeric value to use for contouring. | |
| Params color: | the solid color to use for the contour actor. |
| Params diffuseColor: | |
| the diffusive color to use for the contour actor. | |
| Params float opacity: | |
| the opacity value to use for the actor (1.0 by default). | |
| Params bool discrete: | |
| use vtkDiscreteMarchingCubes if True (False by default). | |
| Returns: | The method return a vtkActor that can be directly added to a renderer. |
Create the 3D representation of the atoms in a given crystal, taking into account the crystal lattice and the basis which can be composed of any motif.
| Parameters: |
|
|---|---|
| Returns: | The method return a vtk actor with all the crystal atoms. |
vtk helper function to draw a bounding box around a volume.
Create an isosurface and map it with an elevation filter.
| Parameters: |
|
|---|---|
| Returns vtkActor: | |
The method return an actor that can be directly added to a renderer. |
Creates a 3d representation of a crystallographic grain.
This method creates a vtkActor object of the surface mesh representing a Grain object. An optional list of crystallographic planes can be given
| Params grain: | the Grain object to be shown in 3d. |
|---|---|
| Params list hklplanes: | |
| the list of HklPlanes object to add to the assembly. | |
| Params bool show_normal: | |
| show also the normal to the hkl planes if True. | |
| Params float plane_opacity: | |
| set the opacity of the grain actor. | |
| Params bool show_orientation: | |
| show also the grain orientation with a vtkAxesActor placed at the grain center if True. | |
| Params int N: | the number of colors to use in the colormap. |
| Returns: | a vtkAssembly of the grain mesh and the optional hkl planes. |
create a black and white colormap.
Parameters
table_range: 2 values tuple (default: (0,255)) start and end values for the table range.
Returns
A vtkLookupTable from black to white.
Create a VTK look up table similar to matlab’s hot.
Parameters
table_range: 2 values tuple (default: (0,255)) start and end values for the table range.
Returns
A vtkLookupTable from white to red.
Create a VTK look up table similar to matlab’s hsv.
Parameters
N: int, number of colors in the table.
table_range: 2 values tuple (default: (0,255)) start and end values for the table range.
Returns
A vtkLookupTable.
invert a VTK lookup table.
Parameters
ref_lut: The lookup table to invert.
Returns
A reverse vtkLookupTable.
Create a VTK look up table similar to matlab’s jet.
Parameters
N: int, number of colors in the table.
table_range: 2 values tuple (default: (0,255)) start and end values for the table range.
Returns
A vtkLookupTable from blue to red.
Create the 3D representation of a crystal lattice.
The lattice edges are shown using a vtkTubeFilter and the atoms are displayed using spheres. Both tube and sphere radius can be controlled. Crystal orientation can also be provided which rotates the whole assembly appropriately.
The origin of the actor can be t=either specified directly using a tuple or set using a string as follow:
- mid the middle of the lattice cell(s)
l = Lattice.cubic(1.0)
cubic = lattice_3d(l)
ren = vtk.vtkRenderer()
ren.AddActor(cubic)
render(ren, display=True)
| Parameters: |
|
|---|---|
| Returns: | The method return a vtk assembly combining lattice edges and vertices. |
Create the 3D representation of a crystal lattice. HklPlanes can be displayed within the lattice cell with their normals. A single vtk actor in form of an assembly is returned. Additional parameters are passed to the lattice_3d method to control how the lattice is pictured.
l = Lattice.cubic(1.0)
o = Orientation.from_euler([344.0, 125.0, 217.0])
hklplanes = Hklplane.get_family('111')
cubic = lattice_3d_with_planes(l, hklplanes, show_normal=True, \
plane_opacity=0.5, crystal_orientation=o)
s3d = Scene3D()
s3d.add(cubic)
s3d.render()
| Parameters: |
|
|---|---|
| Returns: | The method return a vtkAssembly that can be directly added to a renderer. |
Create the 3D representation of crystal lattice edges.
Parameters
grid: vtkUnstructuredGrid The vtkUnstructuredGrid instance representing the crystal lattice.
tubeRadius: float Radius of the tubes representing the atomic bonds (default: 0.02).
tubeColor: vtk color Color of the tubes representing the atomis bonds (default: grey).
Returns
The method return a vtk actor for lattice edges.
Create a mesh representation of a crystal lattice.
A vtkUnstructuredGrid instance is used with a hexaedron element corresponding to the lattice system. Any number of cells can be displayed (just one by default).
| Parameters: |
|
|---|---|
| Returns: | A vtkUnstructuredGrid with (m x n x p) hexaedron cell representing the crystal lattice. |
Create a vtk representation of a the lattice points.
A vtkPoints instance is used to store the lattice points, including the points not on the lattice corners according to the system centering (may be P, I, F for instance).
| Parameters: |
|
|---|---|
| Returns: | A vtkPoints with all the lattice points ordered such that the first 8*(m*n*p) points describe the lattice cells. |
Create the 3D representation of crystal lattice atoms.
Parameters
grid: vtkUnstructuredGrid The vtkUnstructuredGrid instance representing the crystal lattice.
sphereRadius: float Size of the spheres representing the atoms (default: 0.1).
sphereColor: vtk color Color of the spheres representing the atoms (default: blue).
Returns
The method return a vtk actor for lattice vertices.
vtk helper function to draw a line in a 3d scene.
Read a STL file and return the corresponding vtk actor.
| Parameters: |
|
|---|---|
| Returns: | the 3d solid in the form of a vtk actor. |
This method construct an actor to map a 3d dataset.
It requires a fair amount of memory so downsample your data if you can (it may not be visible at all on the resulting image).
Parameters
data: the dataset to map, in numpy or VTK format.
function: VTK implicit function where to map the data.
lut: VTK look up table (default: gray_cmap).
cell_data: boolean to map cell data or point data if False (True by default)
Returns
The method return a vtkActor that can be directly added to a renderer.
This method construct an actor to map a 3d dataset.
1/8 of the data is clipped out to have a better view of the interior. It requires a fair amount of memory so downsample your data if you can (it may not be visible at all on the resulting image).
data = read_image_data(im_file, size)
ren = vtk.vtkRenderer()
actor = map_data_with_clip(data)
ren.AddActor(actor)
render(ren, display=True)
Parameters
data: the dataset to map, in numpy or VTK format.
lut: VTK look up table (default: gray_cmap).
cell_data: boolean to map cell data or point data if False (True by default)
Returns
The method return a vtkActor that can be directly added to a renderer.
Transform a 3d numpy data array into a vtk uniform grid with scalar data.
Parameters
data: the 3d numpy data array.
cell_data: boolean to assign cell data or point data ito the grid (True by default)
Returns
The method return a vtkUniformGrid with scalar data initialized from the provided numpy array.
Write out the random color map in paraview xml format.
This method print out the XML declaration of the random colormap. This may be saved to a text file and used in paraview.
| Parameters: |
|
|---|
Create a VTK lookup table with random colors.
The first color can be enforced to black and usually figure out the image background. The random seed is fixed to 13 in order to consistently produce the same colormap.
| Parameters: |
|
|---|---|
| Returns: | A vtkLookupTable lookup table with N random colors. |
vtk helper function to read a 3d data file. The size is needed in the form (x, y, z) as well a string describing the data type in numpy format (uint8 is assumed by default). Lower file left and little endian are assumed.
Parameters
file_name: the name of the file to read.
size: a sequence of three numbers describing the size of the 3d data set
header_size: size of the header to skip in bytes (0 by default)
data_type: a string describing the data type in numpy format (‘uint8’ by default)
verbose: verbose mode (False by default)
Returns
A VTK data array
Render the VTK scene in 3D.
Given a vtkRenderer, this function does the actual 3D rendering. It can be used to display the scene interactlively and/or save a still image in png format.
Parameters
ren: the VTK renderer with containing all the actors.
ren_size: a tuple with two value to set the size of the image in pixels (defalut 600x600).
display: a boolean to control if the scene has to be displayed interactively to the user (default True).
save: a boolean to to control if the scene has to be saved as a png image (default False).
name: a string to used when saving the scene as an image (default is ‘render_3d.png’).
key_pressed_callback a function (functions are first class variables) called in interactive mode when a key is pressed.
Setup the camera with usual viewing parameters.
The camera is looking at the center of the data with the Z-axis vertical.
Parameters
size: the size of the 3d data set (100x100x100 by default).
Create a 3d actor representing a numpy array.
Given a 3d array, this function compute the skin of the volume. The scalars can be mapped to the created surface and the colormap adjusted. If the data is in numpy format it is converted to VTK first.
| Parameters: |
|
|---|---|
| Returns: | a vtk actor that can be added to a rendered to show the 3d array. |
Create an actor representing the boundaries separating different values of a given array.
| Parameters: |
|
|---|---|
| Returns: | a VTK actor containing the boundaries. |
Create a 3d actor of all the grains in a labeled numpy array.
Given a 3d numpy array, this function compute the skin of all the grains (labels > 0). the background is assumed to be zero and is removed. The actor produced is colored by the grain ids using the random color map, see rand_cmap.
Parameters
data: a labeled numpy array.
num_colors: number of colors in the lookup table (2048 by default)
Returns a vtk actor that can be added to a rendered to show all the grains colored by their id.
Create a 3d actor representing a mesh.
| Parameters: |
|
|---|---|
| Returns: | a vtk actor that can be added to a rendered to show the 3d array. |
Create a 3d schematic represenation of X-ray slits.
The 3d represenation is made of 4 corners of the given size along the Y and Z axes.
Parameters:
size: a (X,Y,Z) tuple giving the size of the illuminated volume. The first value of the tuple is not used.
x_slits: position of the slits along the X axis (0 be default).
Returns:
A vtk assembly of the 4 corners representing the slits.
Create a 2D text actor to add to a 3d scene.
| Params int font_size: | |
|---|---|
| the font size (20 by default). | |
| Params tuple color: | |
| the face color (black by default). | |
| Params str hor_align: | |
| horizontal alignment, should be ‘left’, ‘center’ or ‘right’ (center by default). | |
| Params tuple coords: | |
| a sequence of two values between 0 and 1. |
:returns an actor for the text to add to a renderer.
Function to get the VTK data type given a numpy data type.
| Parameters: | type (str) – The numpy data type like ‘uint8’, ‘uint16’... |
|---|---|
| Returns: | A VTK data type. |
Volume rendering for a 3d array using standard ray casting.
| Parameters: |
|
|---|---|
| Returns: | The method return a vtkVolume that can be added to a renderer. |
Create a 3d schematic represenation of a Fresnel zone plate.
The 3d represenation is made of a number or concentric rings separated by a specific distance which control the X-ray focalisation.
Parameters:
thk: ring thickness (50 by default).
sep: ring spacing (25 by default).
Returns:
A vtk assembly of the rings composing the Fresnel zone plate.