Fixtures
A fixture is defined as “a piece of equipment or furniture which is fixed in position in a building or vehicle”. In our case a fixture is something attached to the action that processes an HTTP request in order to produce a response.
When processing any HTTP requests there are some optional operations we may want to perform. For example parse the cookie to look for session information, commit a database transaction, determine the preferred language from the HTTP header and lookup proper internationalization, etc. These operations are optional. Some actions need them and some actions do not. They may also depend on each other. For example, if sessions are stored in the database and our action needs it, we may need to parse the session cookie from the HTTP header, pick up a connection from the database connection pool, and - after the action has been executed - save the session back in the database if data has changed.
PY4WEB fixtures provide a mechanism to specify what an action needs so that py4web can accomplish the required tasks (and skip non required ones) in the most efficient manner. Fixtures make the code efficient and reduce the need for boilerplate code.
PY4WEB fixtures are similar to WSGI middleware and BottlePy plugin except that they apply to individual actions, not to all of them, and can depend on each other.
PY4WEB comes with some pre-defined fixtures: sessions, url signing and flash messages will be fully explained in this chapter. Database connections, internationalization, authentication, and templates will instead be just outlined here since they have dedicated chapters.
The developer is also free to add fixtures, for example, to handle a third party template language or third party session logic; this is explained later in the Custom fixtures paragraph.
Using Fixtures
As we’ve seen in the previous chapter, fixtures are the arguments of the decorator
@action.uses(...)
. You can specify
multiple fixtures in one decorator or you can have multiple decorators.
Also, fixtures can be applied in groups. For example:
preferred = action.uses(session, auth, T, flash)
Then you can apply all of them at once with:
@action('index')
@preferred
def index():
return dict()
Usually, it’s not important the order you use to specify the fixtures, because py4web knows well how to manage them if they have explicit dependencies. For example auth depends explicitly on db and session and flash, so you do not even needs to list them.
But there is an important exception: the Template fixture must always be the first one. Otherwise, it will not have access to various things it should need from the other fixtures, especially Inject() and Flash() that we’ll see later.
The Template fixture
PY4WEB by default uses the YATL template language and provides a fixture for it.
from py4web import action
from py4web.core import Template
@action('index')
@action.uses(Template('index.html', delimiters='[[ ]]'))
def index():
return dict(message="Hello world")
Note: this example assumes that you created the application from the scaffolding app, so that the template index.html is already created for you.
The Template object is a Fixture. It transforms the dict()
returned
by the action into a string by using the index.html
template file.
In a later chapter we will provide an example of how to define a custom
fixture to use a different template language, for example Jinja2.
Notice that since the use of templates is very common and since, most likely, every action uses a different template, we provide some syntactic sugar, and the two following lines are equivalent:
@action.uses('index.html')
@action.uses(Template('index.html', delimiters='[[ ]]'))
Also notice that py4web template files are cached in RAM. The py4web caching object is described later on Caching and Memoize.
Warning
If you use multiple fixtures, always place the template as the first one.
For example:
@action.uses(session, db, 'index.html') # wrong @action.uses('index.html', session, db) # right
Be careful if you read old documentations that this need was exactly the opposite in early py4web experimental versions (until February 2022)!
As we’ve already seen in the last paragraph, you can combine many fixtures in one decorator. But you can even extend this decorator by passing different templates as needed. For example:
def preferred(template, *optional):
return action.uses(template, session, auth, T, flash, *optional)
And then:
@action('index')
@preferred('index.html')
def index():
return dict()
This syntax has no performance implications: it’s just for avoiding to replicate a decorator logic in multiple places. In this way you’ll have cleaner code and if needed you’ll be able to change it later in one place only.
The Inject fixture
The Inject fixture is used for passing variables (and even python functions) to templates. Here is a simple example:
my_var = "Example variable to be passed to a Template"
...
@action.uses('index.html', Inject(my_var=my_var))
def index():
...
It will be explained later on Using Inject in the YATL chapter.
The Translator fixture
Here is an example of usage:
from py4web import action, Translator
import os
T_FOLDER = os.path.join(os.path.dirname(__file__), 'translations')
T = Translator(T_FOLDER)
@action('index')
@action.uses(T)
def index(): return str(T('Hello world'))
The string hello world will be translated based on the
internationalization file in the specified “translations” folder that
best matches the HTTP accept-language
header.
Here Translator
is a py4web class that extends
pluralize.Translator
and also implements the Fixture
interface.
We can easily combine multiple fixtures. Here, as example, we make action with a counter that counts “visits”.
from py4web import action, Session, Translator, DAL
from py4web.utils.dbstore import DBStore
import os
db = DAL('sqlite:memory')
session = Session(storage=DBStore(db))
T_FOLDER = os.path.join(os.path.dirname(__file__), 'translations')
T = Translator(T_FOLDER)
@action('index')
@action.uses(session, T)
def index():
counter = session.get('counter', -1)
counter += 1
session['counter'] = counter
return str(T("You have been here {n} times").format(n=counter))
Now create the following translation file translations/en.json
:
{"You have been here {n} times":
{
"0": "This your first time here",
"1": "You have been here once before",
"2": "You have been here twice before",
"3": "You have been here {n} times",
"6": "You have been here more than 5 times"
}
}
When visiting this site with the browser language preference set to English and reloading multiple times you will get the following messages:
This your first time here
You have been here once before
You have been here twice before
You have been here 3 times
You have been here 4 times
You have been here 5 times
You have been here more than 5 times
Now try create a file called translations/it.json
which contains:
{"You have been here {n} times":
{
"0": "Non ti ho mai visto prima",
"1": "Ti ho gia' visto",
"2": "Ti ho gia' visto 2 volte",
"3": "Ti ho visto {n} volte",
"6": "Ti ho visto piu' di 5 volte"
}
}
Set your browser preference to Italian: now the messages will be automatically translated to Italian.
The Flash fixture
It is common to want to display “alerts” to the users. Here we refer to them as flash messages. There is a little more to it than just displaying a message to the view, because flash messages:
can have state that must be preserved after redirection
can be generated both server side and client side
may have a type
should be dismissible
The Flash helper handles the server side of them. Here is an example:
from py4web import Flash
flash = Flash()
@action('index')
@action.uses(flash)
def index():
flash.set("Hello World", _class="info", sanitize=True)
return dict()
and in the template:
...

...

[[if globals().get('flash'):]]

[[pass]]
By setting the value of the message in the flash helper, a flash
variable is returned by the action and this triggers the JS in the
template to inject the message in the py4web-flash
DIV which you
can position at your convenience. Also the optional class is applied to
the injected HTML.
If a page is redirected after a flash is set, the flash is remembered. This is achieved by asking the browser to keep the message temporarily in a one-time cookie. After redirection the message is sent back by the browser to the server and the server sets it again automatically before returning the content, unless it is overwritten by another set.
The client can also set/add flash messages by calling:
utils.flash({'message': 'hello world', 'class': 'info'});
py4web defaults to an alert class called info
and most CSS
frameworks define classes for alerts called success
, error
,
warning
, default
, and info
. Yet, there is nothing in py4web
that hardcodes those names. You can use your own class names.
You can see the basic usage of flash messages in the examples app.
The Session fixture
Simply speaking, a session can be defined as a way to preserve information that is desired to persist throughout the user’s interaction with the web site or web application. In other words, sessions render the stateless HTTP connection a stateful one.
In py4web, the session object is also a fixture. Here is a simple example of its usage to implement a counter.
from py4web import Session, action
session = Session(secret='my secret key')
@action('index')
@action.uses(session)
def index():
counter = session.get('counter', -1)
counter += 1
session['counter'] = counter
return "counter = %i" % counter
The counter will start from 0; its value will be remembered and increased every time you reload the page.
Opening the page in a new browser tab will give you the updated counter value. Closing and reopening the browser, or opening a new private window, will instead restart the counter from 0.
Usually the information is saved in the session object are related
to the user - like its username, preferences, last pages visited,
shopping cart and so on. The session object has the same interface
as a Python dictionary but in py4web sessions are always stored using
JSON (JWT specifically, i.e.
JSON Web Token),
therefore you should only store objects that are JSON serializable.
If the object is not JSON serializable, it will be serialized using
the __str__
operator and some information may be lost.
The information composing the session object can be saved:
client-side, by only using cookies (default)
server-side, but you’ll still need minimal cookies for identifying the clients
By default py4web sessions never expire (unless they contain login information, but that is another story) even if an expiration can be set. Other parameters can be specified as well:
session = Session(secret='my secret key',
expiration=3600,
algorithm='HS256',
storage=None,
same_site='Lax',
name="{app_name}_sesson")
Here:
secret
is the passphrase used to sign the informationexpiration
is the maximum lifetime of the session, in seconds (default = None, i.e. no timeout)algorithm
is the algorithm to be used for the JWT token signature (‘HS256’ by default)storage
is a parameter that allows to specify an alternate session storage method (for example Redis, or database). If not specified, the default cookie method will be usedsame_site
is an option that prevents CSRF attacks (Cross-Site Request Forgery) and is enabled by default with the ‘Lax’ option. You can read more about it herename
is the format to use for the session cookie name.
If storage is not provided, session is stored in client-side jwt cookie. Otherwise, we have server-side session: the jwt is stored in storage and only its UUID key is stored in the cookie. This is the reason why the secret is not required with server-side sessions.
Server-side session in memcache
Requires memcache installed and configured.
import memcache, time
conn = memcache.Client(['<IP_ADDRESS>:11211'], debug=0)
session = Session(storage=conn)
Server-side session in Redis
Requires Redis installed and configured.
import redis
conn = redis.Redis(host='localhost', port=6379)
conn.set = lambda k, v, e, cs=conn.set, ct=conn.ttl: (cs(k, v), e and ct(e))
session = Session(storage=conn)
Notice: a storage object must have get
and set
methods and the
set
method must allow to specify an expiration. The redis connection
object has a ttl
method to specify the expiration, hence we monkey
patch the set
method to have the expected signature and
functionality.
Server-side session in database
from py4web import Session, DAL
from py4web.utils.dbstore import DBStore
db = DAL('sqlite:memory')
session = Session(storage=DBStore(db))
Warning
the 'sqlite:memory'
database used in this example
cannot be used in multiprocess environment;
the quirk is that your application will still work but in non-deterministic
and unsafe mode, since each process/worker will have its own independent
in-memory database.
This is one case when a fixture (session) requires another fixture (db). This is handled automatically by py4web and the following lines are equivalent:
@action.uses(session)
@action.uses(db, session)
Server-side session anywhere
You can easily store sessions in any place you want. All you need to do
is provide to the Session
object a storage
object with both
get
and set
methods. For example, imagine you want to store
sessions on your local filesystem:
import os
import json
class FSStorage:
def __init__(self, folder):
self.folder = folder
def get(self, key):
filename = os.path.join(self.folder, key)
if os.path.exists(filename):
with open(filename) as fp:
return json.load(fp)
return None
def set(self, key, value, expiration=None):
filename = os.path.join(self.folder, key)
with open(filename, 'w') as fp:
json.dump(value, fp)
session = Session(storage=FSStorage('/tmp/sessions'))
We leave to you as an exercise to implement expiration, limit the number of files per folder by using subfolders, and implement file locking. Yet we do not recommend storing sessions on the filesystem: it is inefficient and does not scale well.
The Condition fixture
Some times you want to restrict access to an action based on a given condition. For example to enforce a workflow:
@action("step1")
@action.uses(session)
def step1():
session["step_completed"] = 1
button = A("next", _href=URL("step2"))
return locals()
@action("step2")
@action.uses(session, Condition(lambda: session.get("step_completed") == 1))
def step2():
session["step_completed"] = 2
button = A("next", _href=URL("step3"))
return locals()
@action("step3")
@action.uses(session, Condition(lambda: session.get("step_completed") == 2))
def step3():
session["step_completed"] = 3
button = A("next", _href=URL("index"))
return locals()
Notice that the Condition fixtures takes a function as first argument which is called on_request and must evaluate to True or False.
Also notice that in the above example the Condition depends on the Session therefore it must be listed after session in action.uses.
If False, by default, the Condition fixture raises 404. It is possible to specify a different exception:
Condition(cond, exception=HTTP(400))
It is also possible to call a function before the exception is raised, for example, to redirect to another page:
Condition(cond, on_false=lambda: redirect(URL('step1')))
You can use condition to check permissions. For example, assuming you are using Tags as explained in chapter 13 and you are giving group memberships to users, then you can require that users action have specific group membership:
groups = Tags(db.auth_user)
def requires_membership(group_name):
return Condition(
lambda: group_name in groups.get(auth.user_id),
exception=HTTP(404)
)
@action("payroll")
@action.uses(auth, requires_membership("employees"))
def payroll():
return
The URLsigner fixture
A signed URL is a URL that provides limited permission and time to make an HTTP request by containing authentication information in its query string. The typical usage is as follows:
from py4web.utils import URLSigner
# We build a URL signer.
url_signer = URLSigner(session)
@action('/somepath')
@action.uses(url_signer)
def somepath():
# This controller signs a URL.
return dict(signed_url = URL('/anotherpath', signer=url_signer))
@action('/anotherpath')
@action.uses(url_signer.verify())
def anotherpath():
# The signature has been verified.
return dict()
The DAL fixture
We have already used the DAL
fixture in the context of sessions but
maybe you want direct access to the DAL object for the purpose of
accessing the database, not just sessions.
PY4WEB, by default, uses the PyDAL (Python Database Abstraction Layer)
which is documented in the next chapter. Here is an example, please
remember to create the databases
folder under your project in case
it doesn’t exist:
from datetime import datetime
from py4web import action, request, DAL, Field
import os
DB_FOLDER = os.path.join(os.path.dirname(__file__), 'databases')
db = DAL('sqlite://storage.db', folder=DB_FOLDER, pool_size=1)
db.define_table('visit_log', Field('client_ip'), Field('timestamp', 'datetime'))
db.commit()
@action('index')
@action.uses(db)
def index():
client_ip = request.environ.get('REMOTE_ADDR')
db.visit_log.insert(client_ip=client_ip, timestamp=datetime.utcnow())
return "Your visit was stored in database"
Notice that the database fixture defines (creates/re-creates) tables
automatically when py4web starts (and every time it reloads this app)
and picks a connection from the connection pool at every HTTP request.
Also each call to the index()
action is wrapped into a transaction
and it commits on_success
and rolls back on_error
.
The Auth fixture
auth
and auth.user
are both fixtures that depend on
session
and db
. Their role is to provide the action with
authentication information.
Auth is used as follows:
from py4web import action, redirect, Session, DAL, URL
from py4web.utils.auth import Auth
import os
session = Session(secret='my secret key')
DB_FOLDER = os.path.join(os.path.dirname(__file__), 'databases')
db = DAL('sqlite://storage.db', folder=DB_FOLDER, pool_size=1)
auth = Auth(session, db)
auth.enable()
@action('index')
@action.uses(auth)
def index():
user = auth.get_user() or redirect(URL('auth/login'))
return 'Welcome %s' % user.get('first_name')
The constructor of the Auth
object defines the auth_user
table
with the following fields: username, email, password, first_name,
last_name, sso_id, and action_token (the last two are mostly for
internal use).
The auth
object exposes the method:auth.enable()
which
registers multiple actions including {appname}/auth/login
.
It requires the presence of the auth.html
template and the
auth
value component provided by the
_scaffold
app. It also exposes the method:
auth.get_user()
which returns a python dictionary containing the information of the
currently logged in user. If the user is not logged-in, it returns
None
and in this case the code of the example redirects to the
auth/login
page.
Since this check is very common, py4web provides an additional fixture
auth.user
:
@action('index')
@action.uses(auth.user)
def index():
user = auth.get_user()
return 'Welcome %s' % user.get('first_name')
This fixture automatically redirects to the auth/login
page if user
is not logged-in, hence this example is equivalent to the previous one.
The auth
fixture is plugin based: it supports multiple plugin
methods including OAuth2 (Google, Facebook, Twitter), PAM and LDAP.
The Authentication and authorization chapter will show you
all the related details.
Caveats about fixtures
Since fixtures are shared by multiple actions you are not allowed to change their state because it would not be thread safe. There is one exception to this rule. Actions can change some attributes of database fields:
from py4web import action, request, DAL, Field
from py4web.utils.form import Form
import os
DB_FOLDER = os.path.join(os.path.dirname(__file__), 'databases')
db = DAL('sqlite://storage.db', folder=DB_FOLDER, pool_size=1)
db.define_table('thing', Field('name', writable=False))
@action('index')
@action.uses('generic.html', db)
def index():
db.thing.name.writable = True
form = Form(db.thing)
return dict(form=form)
Note that this code will only be able to display a form, to process it after submit, additional code needs to be added, as we will see later on. This example is assuming that you created the application from the scaffolding app, so that a generic.html is already created for you.
The readable
, writable
, default
, update
, and require
attributes of db.{table}.{field}
are special objects of class
ThreadSafeVariable
defined the threadsafevariable
module. These
objects are very much like Python thread local objects but they are
re-initialized at every request using the value specified outside of the
action. This means that actions can safely change the values of these
attributes.
Custom fixtures
A fixture is an object with the following minimal structure:
from py4web.core import Fixture
class MyFixture(Fixture):
def on_request(self, context): pass
def on_success(self, context): pass
def on_error(self, context) pass
For example in the DAL fixture case, on_request starts a transaction, on_success commits it, and on_error rolls it back.
In the case of a template, on_request and on_error do nothing but on_success transforms the output.
In the case of auth.user fixtures, on_request does all the work of determining if the user is logged in (from the dependent session fixture) and eventually preventing the request from accessing the inner layers.
Now imagine a request coming in calling an action with three fixtures A, B, and C. Under normal circumstances above methods are executed in this order:
request -> A.on_request -> B.on_request -> C.on_request -> action
response <- A.on_success <- B.on_success <- C.on_success <-
i.e. the first fixture (A) is the first one to call on_request and the last one to call on_success. You can think of them as layers of an onion with the action (user code) at the center. on_success is called when entering a layer from the outside and on_success is called when exiting a layer from the inside (like WSGI middleware).
If any point an exception is raised inner layers are not called and outer layers will call on_error instead of on_success.
Context is a shared object which contains:
content[‘fixtures’]: the list of all the fixtures for the action.
context[‘processed’]: the list of fixtures that called on_request previously within the request.
context[‘exception’]: the exception raised by the action or any previous fixture logic (usually None)
context[‘output’]: the action output.
on_success and on_error can see the current context[‘exception’] and transform it. They can see the current context[‘output’] and transform it as well.
For example here is a fixture that transforms the output text to upper case:
class UpperCase(Fixture):
def on_success(self, context):
context['output'] = context['output'].upper()
upper_case = UpperCase()
@action('index')
@action.uses(upper_case)
def index(): return "hello world"
Notice that this fixture assumes the context[‘output’] is a string and therefore it must come before the template.
Here is a fixture that logs exceptions tracebacks to a file:
class LogErrors(Fixture):
def __init__(self, filename):
self.filename = filename
def on_error(self, context):
with open(self.filename, "a") as stream:
stream.write(str(context['exception']) + '\n')
errlog = LogErrors("myerrors.log")
@action('index')
@action.uses(errlog)
def index(): return 1/0
Fixtures also have a __prerequisite__ attribute. If a fixture takes another fixture as an argument, its value must be appended to the list of __prerequisites__. This guarantees that they are always executed in the proper order even if listed in the wrong order. It also makes it optional to declare prerequisite fixtures in action.uses.
For example Auth depends on db, session, and flash. db and session are indeed arguments. flash is a special singleton fixture declared within Auth. This means that
action.uses(auth)
is equivalent to
action.uses(auth, session, db, flash)
Why are fixtures not simply functions that contain a try/except?
We considered the option but there are some special exceptions that should not be considered errors but success (py4web.HTTP, bottle.HTTResponse) while other exceptions are errors. The actual logic can be complicated and individual fixtures do not need to know these details.
They all need to know what the context is and whether they are processing a new request or a response and whether the response is a success or an error. We believe this logic keeps the fixtures easy.
Fixtures should not in general communicate with each other but nothing prevents one fixture to put data in the context and another fixture to retrieve that data.
Multiple fixtures
As previously stated, it’s generally not important the order you use to specify the fixtures but it’s mandatory that you always place the template as the first one. Consider this:
@action("index")
@action.uses(A,B)
def func(): return "Hello world"
Pre-processing (on_request
) in the fixtures happen in the sequence they are listed
and then the on_success
or on_error
methods will be executed in reverse order (as
an onion).
Hence the previous code can be explicitly transformed to:
A.on_request()
B.on_request()
func()
B.on_success()
A.on_success()
So if A.on_success() is a template and B is an inject fixture that allows you to add some extra variables to your templates, then A must come first.
Notice that
@action.uses(A)
@action.uses(B)
is almost equivalent to
@action.uses(A,B)
but not quite. All fixtures declared in one action.uses share the same context while fixtures in different action.uses use different contexts and therefore they cannot communicate with each other. This may change in the future. For now we recommend using a single call to action.uses.
Caching and Memoize
py4web provides a cache in RAM object that implements the last recently used (LRU) algorithm. It can be used to cache any function via a decorator:
import uuid
from py4web import Cache, action
cache = Cache(size=1000)
@action('hello/<name>')
@cache.memoize(expiration=60)
def hello(name):
return "Hello %s your code is %s" % (name, uuid.uuid4())
It will cache (memoize) the return value of the hello
function, as
function of the input name
, for up to 60 seconds. It will store in
cache the 1000 most recently used values. The data is always stored in
RAM.
The cache
object is not a fixture and it should not and cannot be
registered using the @action.uses
decorator but we mention it here
because some of the fixtures use this object internally. For example,
template files are cached in RAM to avoid accessing the file system
every time a template needs to be rendered.
Convenience Decorators
The _scaffold
application, in common.py
defines two special
convenience decorators:
@unauthenticated
def index():
return dict()
and
@authenticated
def index():
return dict()
They apply all of the decorators below (db, session, T, flash, auth), use a template with the same name as the function (.html), and also register a route with the name of action followed by the number of arguments of the action separated by a slash (/).
@unauthenticated does not require the user to be logged in.
@authenticated required the user to be logged in.
They can be combined with (and precede) other @action.uses(...)
but
they should not be combined with @action(...)
because they perform
that function automatically.


For the first course I will teach you how to make a delicious and healthy salad. You can complete this salad in five minutes. Perhaps when your friend is still thinking about what to eat, you have already made an appetizing salad. Next, let me share the steps of this dish with you.
First step, you need grab some fresh herb slad into your bowl.
Second step, you need add black pepper，vinegar, cherries and sliced almonds onto your salad.

For the second course I will teach you how to make a delicious and healthy yogurt. You can complete this yogurt in one minute. Next, let me share the steps of this dish with you.
First step, you need pour some yogurt into your bowl.
Second step, you need put some granola onto your yogurt and enjoy it.
For the Final course I will teach you how to make a delicious and healthy toast. You can complete this toast in five minutes. Next, let me share the steps of this dish with you.
First step, you need to put your bread into toaster and to bake it.
Second step, you need to take out the bread and spread the peanut butter as much as you want.


FNB Stadium gates hurriedly opened to avoid stampede
by Penwell DlaminiSecurity guards were forced to open the gates at FNB Stadium as thousands of church members started pushing, trying to make their way in.
As the sounds of Joyous Celebration echoed in the background, the congregants were stuck outside the stadium which was full. As thousands pushed on the gates, and a fear of a stampede became real, and the gates were opened.
"We are here to pray for our country why should we be stopped from doing so," one man shouted from the crowd. The crowd joined the packed stadium for the 2019 National Day of Prayer organised by the Motsepe Foundation.
Different religious formations have been taking turns praying for peace and prosperity for the country. The crowd was treated to various gospel artists including Benjamin Dube, Winnie Mashaba and Rebecca Malope among others.


Preparation time
less than 30 mins
Cooking time
1 to 2 hours
Serves
Serves 4
Preheat the oven to 190C/375F/Gas 5. Make a few shallow slits in the lamb and push in 2-3 sprigs of fresh rosemary and a few slivers of garlic, just enough to add a little flavour without being overbearing. Place in a roasting tin, spread a very little fat over the top and roast in the centre of the oven for 90 minutes, basting occasionally, until the lamb is tender and still pink but not bloody. Immediately remove the rosemary and garlic and rest the lamb somewhere warm for about 20 minutes while you make the gravy.
Pour the raspberry beer into a small pan, set aside a few stalks of redcurrants and add the rest to the pan, then bring slowly to simmering point and cook uncovered until reduced by about one-third, by which time the redcurrants will be tender. Strain beer into a jug, retaining the redcurrants.
Pour off most of the fat from the roasting tin - lamb is fatty meat and you don't want greasy gravy - then heat on top of the stove, stirring in the plain flour to make a smooth roux, and cook it out until brown. Slowly stir in the reserved potato water, then simmer briskly until reduced by half to a thick gravy. Stir in the strained raspberry beer a little at a time until it reaches pouring consistency and is a deep crimson, then season with a pinch of salt to bring out the fruit and finally add the cooked redcurrants.
To serve, carve the lamb in thick slices around the bone and set each slice on a pool of raspberry beer gravy, filling the 'bone hole' with hot redcurrants on the stalk.


This folder contains my profile picture and channel art in a bunch of different formats and resolutions, for the purpose of embedding it in places.


October 30, 2020 · 1 min · CPP


At Everest Farms we raise, produce, source and supply premium export quality beef and lamb to meet the high standards we set for ourselves and those of our partner clients. Our beef and lamb have been raised on New Zealand’s 100% natural grass pastures and our animals live in a natural stress-free environment.
Being from one of the furthest corners of the world brings it own challenges but as a nation with the Kiwi “number 8 wire mentality” and a can-do attitude New Zealand has overcome all obstacles. Our isolation in geographic terms means that our food chain is not compromised by the harmful effects of pollution and our clean green environment make our products taste unique. Our products are rich and full of flavour but they also contain the delicate taste of the subtilties and flavour of the natural environment in which our animals are raised. Our meat is lean, clean and green and coming “from the mountains to the sea” we can deliver anywhere in the world. Our meat processing partner carries all the international accreditations necessary to comply with international standards including Halal certification. We are also able to source and supply export quality fresh produce and seafood to meet your requirements.
In 2002, the Haynes family purchased Everest Farm located in the foot hills of Puketapu, in the Hawkes Bay of New Zealand. The Hawkes Bay region is highly regarded worldwide for the quality of its beef, lamb, fresh produce, wine and tourism.
The New Zealand Singapore Closer Economic Partnership, New Zealand’s Free Trade Agreement with Malaysia and the Hong Kong/China Closer Economic Partnership has opened up a new era for Everest Farms to supply first class export quality beef and Lamb to our clients in Asia and around the world.
At Everest Farms we are uniquely positioned to assist and facilitate overseas investment in New Zealand. This is in the form of Farm partnerships and other business opportunities through our own directors’ knowledge and experience as well as through our network of professional advisors.


Class ObjectReader
Class that implements the read/write of C# objects into streams.
Inheritance
System.Object
ObjectReader
Inherited Members
System.Object.Equals(System.Object)
System.Object.Equals(System.Object, System.Object)
System.Object.GetHashCode()
System.Object.GetType()
System.Object.MemberwiseClone()
System.Object.ReferenceEquals(System.Object, System.Object)
System.Object.ToString()
Namespace: UnityExt.Core.IO
Assembly: UnityExt.Core.dll
Syntax
public class ObjectReader
Constructors
| Improve this Doc View SourceObjectReader(BinaryReader)
Creates a new object reader with a pre-defined BinaryReader
Declaration
public ObjectReader(BinaryReader p_reader)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IO.BinaryReader | p_reader | Reader instance |
ObjectReader(Stream, Boolean)
Creates an object reader into a Stream as text or binary mode.
Declaration
public ObjectReader(Stream p_stream, bool p_text_mode)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IO.Stream | p_stream | Stream to write into |
| System.Boolean | p_text_mode | Flag telling if the objet will be written as text or binary |
ObjectReader(TextReader)
Creates a new object reader with a pre-defined TextReader
Declaration
public ObjectReader(TextReader p_reader)
Parameters
| Type | Name | Description |
|---|---|---|
| System.IO.TextReader | p_reader | Reader instance |
Properties
| Improve this Doc View SourceBaseStream
Internals
Declaration
public Stream BaseStream { get; }
Property Value
| Type | Description |
|---|---|
| System.IO.Stream |
Reader
Reference to the writer object.
Declaration
public IDisposable Reader { get; }
Property Value
| Type | Description |
|---|---|
| System.IDisposable |
Methods
| Improve this Doc View SourceRead()
Reads the contents of the reader/stream and returns the object instance
Declaration
public object Read()
Returns
| Type | Description |
|---|---|
| System.Object | Object instance inside the reader/stream. |
Read<T>()
Reads the contents of the reader/stream and returns the object instance
Declaration
public T Read<T>()
Returns
| Type | Description |
|---|---|
| T | Object instance inside the reader/stream. |
Type Parameters
| Name | Description |
|---|---|
| T | Type of the object |
Reset()
Resets the streams/readers to the initial state
Declaration
public void Reset()


This inspection reports all instances of nested Groovy
synchronized
statements. Nested
synchronized
statements are either useless (if the lock objects are identical) or prone to deadlock.
Powered by InspectorGroovy


Let us cover your next event! We're comfortable with all event types including weddings, concerts, parties, festivals, and parades.
Either come to us or we can come to you. We produce business advertisements, product photography, and provide photo shoots in-studio or on-location.
You need a great video for your business, organization, or original idea - we can help bring your vision to reality.
Founder & CEO, Creative Director
Chief Design Officer, Creative Director
Chief Film Director, Creative Director
Moolou Vision is a full-service media production agency. We believe that strong customer relationships are the foundation of our process from start to finish. Our customers have bold ideas and a desire for quality work delivered on time.


Pmw.ScrolledListBox() - listbox with optional scrollbars
A scrolled listbox consists of a standard listbox widget with optional scrollbars which can be used to scroll the listbox. The scrollbars can be dynamic, which means that a scrollbar will only be displayed if it is necessary. That is, if the listbox does not contain enough entries, the vertical scrollbar will be automatically hidden and if the entries are not wide enough, the horizontal scrollbar will be automatically hidden.
If None, a label component is not created. The default is None.
Otherwise, the size of the megawidget is determined by the width and height of the listbox component, along with the size and/or existence of the other components, such as the label, the scrollbars and the scrollmargin option. All these affect the overall size of the megawidget. The default is 0.
bbox()
method. Without this explicit forwarding, the bbox()
method (aliased to grid_bbox()
) of the hull would be invoked,
which is probably not what the programmer intended.
setlist(())
.
get()
method of the listbox component,
except that if first is None all list
elements are returned.
getvalue()
method.
If textOrList is a string, select only the list item specified.
Otherwise, select only the list items specified by textOrList, which must be a sequence of strings.
size()
method. Without this explicit forwarding, the size()
method (aliased to grid_size()
) of the hull would be invoked,
which is probably not what the programmer intended.
class Demo: def __init__(self, parent): # Create the ScrolledListBox. self.box = Pmw.ScrolledListBox(parent, items=('Sydney', 'Melbourne', 'Brisbane'), labelpos='nw', label_text='Cities', listbox_height = 6, selectioncommand=self.selectionCommand, dblclickcommand=self.defCmd, usehullsize = 1, hull_width = 200, hull_height = 200, ) # Create a group widget to contain the scrollmode options. w = Pmw.Group(parent, tag_text='Scroll mode') w.pack(side = 'bottom', padx = 5, pady = 5) hmode = Pmw.OptionMenu(w.interior(), labelpos = 'w', label_text = 'Horizontal:', items = ['none', 'static', 'dynamic'], command = self.sethscrollmode, menubutton_width = 8, ) hmode.pack(side = 'top', padx = 5, pady = 5) hmode.invoke('dynamic') vmode = Pmw.OptionMenu(w.interior(), labelpos = 'w', label_text = 'Vertical:', items = ['none', 'static', 'dynamic'], command = self.setvscrollmode, menubutton_width = 8, ) vmode.pack(side = 'top', padx = 5, pady = 5) vmode.invoke('dynamic') buttonBox = Pmw.ButtonBox(parent) buttonBox.pack(side = 'bottom') buttonBox.add('yview', text = 'Show\nyview', command = self.showYView) buttonBox.add('scroll', text = 'Page\ndown', command = self.pageDown) buttonBox.add('center', text = 'Center', command = self.centerPage) # Pack this last so that the buttons do not get shrunk when # the window is resized. self.box.pack(fill = 'both', expand = 1, padx = 5, pady = 5) # Do this after packing the scrolled list box, so that the # window does not resize as soon as it appears (because # alignlabels has to do an update_idletasks). Pmw.alignlabels((hmode, vmode)) # Add some more entries to the listbox. items = ('Andamooka', 'Coober Pedy', 'Innamincka', 'Oodnadatta') self.box.setlist(items) self.box.insert(2, 'Wagga Wagga', 'Perth', 'London') self.box.insert('end', 'Darwin', 'Auckland', 'New York') index = list(self.box.get(0, 'end')).index('London') self.box.delete(index) self.box.delete(7, 8) self.box.insert('end', 'Bulli', 'Alice Springs', 'Woy Woy') self.box.insert('end', 'Wallumburrawang', 'Willandra Billabong') def sethscrollmode(self, tag): self.box.configure(hscrollmode = tag) def setvscrollmode(self, tag): self.box.configure(vscrollmode = tag) def selectionCommand(self): sels = self.box.getcurselection() if len(sels) == 0: print 'No selection' else: print 'Selection:', sels[0] def defCmd(self): sels = self.box.getcurselection() if len(sels) == 0: print 'No selection for double click' else: print 'Double click:', sels[0] def showYView(self): print self.box.yview() def pageDown(self): self.box.yview('scroll', 1, 'page') def centerPage(self): top, bottom = self.box.yview() size = bottom - top middle = 0.5 - size / 2 self.box.yview('moveto', middle)
Pmw 1.2 -
5 Aug 2003
- Home
Manual page last reviewed: 30 August 1998


The manual still needs to be written.
For the time being, maybe the old Pyro 3.x manual is helpful.
Also see the wiki page on Pyro 4.


--- layout: post title: "Civil Wardrobe hits the top 300!" --- Civil Wardrobe's one of the top 300 selling books in October! Hooray!


This page is a demonstration of NLI-GO, a natural language library, written in Go, that allows a user to query a database in natural language.
It connects you to DBPedia, a Sparql database that contains data from Wikipedia.
It's scope is still quite limited. For example, in the input field above, you can only ask questions of these types:
Where <PERSON> must be the name of a person in the database, it must consist of 2 or 3 words, each of which must start with a capital.
For example:
Note! The application cannot handle names that belong to multiple persons, yet. If you try, you may see that the data of the persons will get mixed up.


The Pixel 4 now supports RCS messaging on Google Fi
Source: Joe Maring / Android Central
What you need to know
- Google has enabled RCS messaging on Pixel 4 on Google Fi.
- Pixel 4 users can also now use two SIM accounts for different tasks.
- Google Senior Director Sanaz Ahari slipped this info on Twitter.
The Google Pixel 4 is getting a software update that will enable features like RCS messaging and DSDS, according to tweets posted by Sanaz Ahari, Sr. Director of Product & Design at Google. Of course, the Pixel 4's capability to handle the next-gen Rich Messaging Service (RCS) will be dictated by carrier support, but at least now the handset has software capable of the iMessage-like SMS successor.
Ahari also indicated that Google Fi version of the Pixel 4 is the first one to work with RCS, which makes sense since Google Fi partners with Sprint, a carrier that has already declared its support for RCS.
Pixel 4 users with two SIM cards will also see support for Dual-SIM, Dual Standby mode (DSDS). With two SIM cards loaded, users will be able to assign tasks to each carrier network, so phone calls could be placed over one network while text messages are sent over the other. One SIM would be a physical card, and the other would be a number assigned to the Pixel's eSIM.
The Google Pixel 3 and Pixel 3a both support DSDS features, so it was surprising that these did not work on the Pixel 4 at launch. As posted on Reddit, Ahari responds to a user saying that Google "had a bug that was fixed," apparently solving the problem. With Google Fi support for eSIM on the Pixel 4, Fi users could be among the first to load a second SIM card and see the new DSDS capabilities in action.
Google's Flagship
Google Pixel 4
Even more capable than before
The Pixel 4 was designed to be Google's best and most impressive Pixel yet. Recent updates give the phone next-gen RCS messaging and cool dual-SIM support, if you're on the right carrier (hint: Google Fi)
We may earn a commission for purchases using our links. Learn more.


{% extends "base.html" %} {% block title %}
Medieval catalogues > BENEDICTINES > Canterbury-Christ Church > List of books repaired, 1508.
{% endif %}11 identified entries found.
All data was derived from the List of Identifications by Professor Richard Sharpe.
{% if not printing %}
A key to codes used in the List is available (opens in new tab).{% endif %}


RISK ASSESS
Get Started
Disease Index
Breast Cancer
Diabetes
Heart Disease
Kidney Disease
Liver Disease
|
Logout
Heart Disease Prediction
Please enter the patient details
Age in Years
Trest Bps
Cholesterol
Thalach
Old Peak
Sex_0
Sex_1
CP_0
CP_1
CP_2
CP_3
FBS_0
RESTECG_0
RESTECG_1
RESTECG_2
EXANG_0
EXANG_1
SLOPE_0
SLOPE_1
SLOPE_2
CA_0
CA_1
CA_2
THAL_1
THAL_2
THAL_3
Predict


According to a new book, The U.S. Organ Procurement System, written by economists David Kaserman and A. H. Barnett, there are 80,000 Americans on the organ transplant waiting list. Twenty of them die each day as a direct result of organ shortages; that's over 7,000 each year. These lost lives are not so much an act of God as they are an act of Congress because of its 1984 National Organ Transplant Act, that prohibits payment to organ donors. Reliance on voluntary donations, has been an abject policy failure. It's noteworthy that everyone else involved in the organ transplant business is rewarded handsomely - that includes surgeons, nurses and organ procurement workers.
How might an organ transplant market work? Lloyd Cohen, a law professor at George Mason University, envisions letting people contract in advance to permit the harvesting of any usable organs when they die. The money earned would become a part of their estate. Many people are offended by the notion of human body parts becoming commodities for sale. There's at least a tiny bit of inconsistency because there is a market for human blood, semen and hair.
How many vital things in our lives do we depend on altruism or voluntary donations to provide? Food is vital, water is vital; so are clothing and housing. We don't depend on altruism and voluntary donations to provide these goods. And for good reason - there'd be massive shortages. Why should we depend on altruism or voluntary donations to provide what we may one day need more urgently than food, water, clothing or housing? All objections to organ sales reduce to either nonsense, ignorance or arrogance. Let's look at some of them.
One concern is that if organs are sold rather donated, poor people couldn't afford them. There's a difference between methods of attaining organs and methods of distributing them. For example, poor people need food but Congress hasn't mandated that food prices be zero so that poor people can eat. If Congress did that, there'd be massive shortages and poor people would probably starve.  That same principle can be applied to organ transplants - allow the market to supply organs and if needed subsidize or provide through charity their distribution.
Won't organs be very costly? Kaserman and Barnett and others estimate that the organ shortage would be resolved at a prices of $1,000 to $3,000 per donor. To the extent that markets would eliminate organ shortages, it would significantly reduce health care costs. For example, the cost of kidney dialysis is about $44,000 per year. The cost of kidney transplant and medical care for the first year is about $90,000. After the first year, medical treatments, mostly for immunosuppressant drugs to prevent rejection are $16,000. That means after about two and a half years transplants save the medical system $27,000 per year as opposed to patients remaining on long term dialysis.
Another concern is that if there's a market for organs, poor people will sell their organs and become ill. The proposals made so far provide monetary payments be made for only cadaver organs. But from a strictly ethical point of view, people should be able to dispose of their organs for whatever reason they please. Why? If we agree that people have property rights in themselves, i.e., own themselves, they have a right to dispose of themselves anyway they please so long as they do not violate the property rights of others. I would surely prefer a person who might be unwilling to give me his kidney find motivation to sell me his kidney rather than for me to do without.
Some people have argued that an organ transplant market will lead to murder and the sale of the victim's organs to unscrupulous organ brokers. Murder will remain illegal and punishable. However, when the sale of a commodity is illegal there's a heightened potential for illegal activity and concomitant social disorder. During Prohibition there was far more criminal activity associated with alcohol manufacture, distribution and consumption than there is now. To the extent that prohibition of organ sales reduces their supply, holding all else equal there's greater incentive for illegal activities involving organ transplants, including murder.
The medical profession has traditionally been opposed to organ sales. Their opposition would seem to be in violation of Hippocrates' admonition - primum non nocere. But they've recently taken steps, all be they timid, towards ending the day to day deaths due to organ shortages. At their July 2002 meeting, the American Medical Association voted agreement to commence trials in which payments will be made to organ donors or their families as a means to encourage cadaveric organ collections.
Walter E. Williams
Ideas on Liberty, October 2002


The Action Sheet component should be used when a list of actions or links need to be grouped and hidden behind a button.
The go-action-sheet
element must be accompanied by
go-panel
children.
See Panel for details.
Optional binding that defines the placement of action sheet to render. Current supported positions:
bottom
, right
.
By default, action sheet will render with bottom
set.
If true, shiftLeft
will move the pop up portion of the action sheet to the left and adjust the arrow to the right.
This is useful for items close to the right edge of the page or container.
The action sheet component is split up into two sections. The trigger and the content.
The simplest way to get the action sheet working is with two ng-container
s.
A simple example to show the basic functionality of an action sheet.
This example shows an instance where an accordion is being used inside of an action sheet.
Passing true
to the accordion's
forActionSheet
input is necessary for the accordion's styles
to match the rest of the action sheet.
A simple example to demo different placements defined by placement
.


|
Processor Counter Monitor
|
Public Types | |
| using | Base = std::basic_iostream< CharT, Traits > |
| using | stream_type = typename std::basic_iostream< CharT, Traits > |
| using | buf_type = basic_socketbuf< 16385, CharT, Traits > |
| using | traits_type = typename Base::traits_type |
Public Member Functions | |
| basic_socketstream (int socketFD) | |
| int | open (std::string &hostname, uint16_t port) |
| void | putLine (std::string &line) |
| void | close () |
Protected Attributes | |
| buf_type | socketBuffer_ |


Properties
Private _admin
_admin: boolean = false
Private _cannotRegister
_cannotRegister: boolean = false
Private _color
_color: string = ""
Private _disconnected
_disconnected: boolean = false
Private _game
_game: number = -1
Private _gameClickedLast
_gameClickedLast: number = -1
Private _inGame
_inGame: boolean = false
Private _registered
_registered: boolean = false
Private _session
_session: string = ""
Private _socket
_socket: Socket
Private _startVote
_startVote: boolean = false
Private _username
_username: string = "randomuser"
Sets html title of client.


Within the node-red
section of the package.json file the developer SHOULD indicate the minimum supported version. This must satisfy at least one of the current latest
or maintenance
tagged releases.
eg
"node-red" : {
"version": ">=2.0.0",
}
This is so that users can identify nodes that rely on new features in latest versions of Node-RED.
https://nodered.org/docs/creating-nodes/packaging#packagejson


Buttons
Use Docs UI Kit's custom button styles for actions in forms, dialogs and more with support for multiple sizes, states and more.
Examples
Bootstrap includes several predefined button styles, each serving its own semantic purpose, with a few extras thrown in for more control.
<button class="btn btn-primary" type="button">Primary</button>
<button class="btn btn-secondary" type="button">Secondary</button>
<button class="btn btn-info" type="button">Information</button>
<button class="btn btn-success" type="button">Success</button>
<button class="btn btn-warning" type="button">Warning</button>
<button class="btn btn-danger" type="button">Danger</button>
<button class="btn btn-dark" type="button">Dark</button>
Conveying meaning to assistive technologies
Using color to add meaning only provides a visual indication, which will not be conveyed to users of assistive technologies – such as screen readers. Ensure that information denoted by the color is either obvious from the content itself (e.g. the visible text), or is included through alternative means, such as additional text hidden with the .sr-only
class.
Sizes
Fancy larger or smaller buttons? Add .btn-lg
or .btn-sm
for additional sizes.
<button type="button" class="btn btn-lg btn-primary">Large button</button>
<button type="button" class="btn btn-lg btn-secondary">Large button</button>
Create block level buttons — those that span the full width of a parent — by adding .btn-block
.
<button type="button" class="btn btn-sm btn-block btn-primary">Small</button>
<button type="button" class="btn btn-block btn-primary">Regular</button>
<button type="button" class="btn btn-lg btn-block btn-primary">Large</button>
Active state
Buttons will appear pressed (with a darker background, darker border and inset shadow) when active. There's no need to add a class to <button>
s as they use a pseudo-class. However, you can still force the same active appearance with .active
(and include the aria-pressed="true"
attribute) should you need to replicate the state programmatically.
Primary link
Secondary Link
Disabled state
Make buttons look inactive by adding the disabled
boolean attribute to any <button>
element.
<button type="button" class="btn btn-primary" disabled>Primary button</button>
<button type="button" class="btn btn-secondary" disabled>Secondary Button</button>
Disabled buttons using the
element behave a bit different:

s don't support thedisabled
attribute, so you must add the.disabled
class to make it visually appear disabled.- Some future-friendly styles are included to disable all
pointer-events
on anchor buttons. In browsers which support that property, you won't see the disabled cursor at all. - Disabled buttons should include the
aria-disabled="true"
attribute to indicate the state of the element to assistive technologies.
Link functionality caveat
The .disabled
class uses pointer-events: none
to try to disable the link functionality of
s, but that CSS property is not yet standardized. In addition, even in browsers that do support pointer-events: none
, keyboard navigation remains unaffected, meaning that sighted keyboard users and users of assistive technologies will still be able to activate these links. So to be safe, add a tabindex="-1"
attribute on these links (to prevent them from receiving keyboard focus) and use custom JavaScript to disable their functionality.
Toggle states
Add data-toggle="button"
to toggle a button's active
state. If you're pre-toggling a button, you must manually add the .active
class and aria-pressed="true"
to the <button>
.
<button type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false" autocomplete="off">
Single toggle
</button>


Here are some of the awesome projects I've been working on
Bell Galactic Solutions made history in 2019 when we unveiled the world's first fully primed and operational fusion reactor. But where does the energy to power this reactor come from? Our patented rage-fuel technology allows us to harvest all of the energy in the world generated by hatred of pineapples on pizza. By tapping into this vast source of yet-unclaimed energy we have the power to sustain human greed for centures to come.
In 2106 BGS invented our patented B.E.C. This ingenious device can take any form of biological material and miraculously turn it into energy through a process known as "heat-blasting". Material is inserted into our machine through a special tube, and our organic flames simply incinerate anything and everything inside, the resulting gases and carbon are then used in our clean coal power plants. So far the B.E.C has been used exclusively by the Eternal World Government to dispose of dissidents but we hope to bring it to the rest of the market in the future.


This is a jQuery image scroller with lightbox. The scroll bar/indexes and directional buttons allow for easy navigation of your image gallery. Image click can either open the included lightbox or a regular link. The scroller is also re-sizable and fully configurable through the plugin's parameters.
Features:Installing the scroller within your html page requires the following steps.
Below describes these steps in more detail.
In step 1, to include the css files wt-scroller.css and wt-lightbox.css, simply specify the following lines of code within your  tag:
<link rel="stylesheet" type="text/css" href="wt-scroller.css"/> <link rel="stylesheet" type="text/css" href="lightbox/wt-lightbox.css"/>
In step 2, you will need to include the jquery's library
file, jquery-1.7.1.min.js and jquery's UI file,
jquery-ui-1.8.10.custom.min.js.
Also, you will need to include the scroller's js file named
jquery.wt-scroller.min.js and the optional lightbox's js file, jquery.wt-lightbox.min.js if you plan on using the lightbox.
All files are located within the js directory.
The code below shows how to include them in a html page:

note: the js files with min in its file names are the compressed production versions of the files. If you intend to modify the source code, you will need to look at the non-min development versions of the files and it is recommended that you minify the modified files afterwards.
In step 3, to specify the tags of the scroller itself, refer to the example in the index.html file. In that file, you'll see a block of tag starting and ending with:

 ...

You can use this as a template and copy and paste it onto your own page, but will have to modify it accordingly with your own image information. Section 3 will describe this step in detail.
Finally in step 4, you will need to instantiate a javascript function call to get the scroller initialized. An additional javascript function call to initial the lightbox is needed only if the lightbox is used. The example code looks like this below:

This will instantiate the scroller and lightbox using the default parameters. Section 5 will describe instantiation with custom parameters.
back to topIn order to add or change content to the scroller, you will have to specify a set of tags for each image within the scroller's html tags. The list of images is represented as a list tag
 and each image is represented by a list item tag
.
Below is an example of what the tags would look like for an image. You will have to repeat this for as many images as needed for your scroller.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut consequat.

The example above shows that each image entry begins with an opening and closing
 tag. Within the
 tag, there is an  tag specifying an image's url as its href value. This is the image url use for the lightbox if lightbox is used. Also, the attribute rel within the  tag is used purely to mark links for the lightbox. The value for rel can be anything as long as it matches the lightbox initialization call as shown later in Section 5.
If you are not planning on using the lightbox, you can specify instead a regular link to be opened when the image is clicked. You can also specify a link target here. In addition, if you do not wish to have a link associated with the image, you can omit this  altogether.
Next, within the  tag, there is an  representing the slide's image.
And finally, the
 tag represents the caption associated with the slide. You can specify text description within the tags. If you do not want a caption with a particular slide, you can omit the
 tag.
back to topThis section will describe how to add different types of content for the lightbox. Currently, the lightbox supports image, flash, iframe, ajax, and inline content.
Since the lightbox works on links ( tags), you will need to assign a value to the href attribute as to where to locate the specific content.
First, to add an image to the lightbox, you will need to assign the url of your image to the href attribute of the  tag.
Below shows an example of using image for the lightbox.

To add flash content to the lightbox, you will need to assign the url of your swf file to the href attribute of the  tag. You can also assign a specific width and height value by using the url variable of boxwidth and boxheight.
Below shows an example of using flash for the lightbox with a set width and height.

To add inline content to the lightbox, you will need to assign the id name to the href attribute of the  tag. The id name should reference the id of a tag in your page where you want the html content to come from. Again, you can assign a width and height value by using the url variable of boxwidth and boxheight.
Below shows an example of using inline content for the lightbox. Be sure to include # sign in front of the id name.

To add an iframe to the lightbox, you will need to assign an url to the href attribute of the  tag. Also, you need to specify an url variable named boxtype and assign it the value iframe. Again, you can assign a width and height value by using the url variable of boxwidth and boxheight.
Below shows an example of using iframe for the lightbox.

Finally, to add an ajax page to the lightbox, you will need to assign your ajax page url to the href attribute of the  tag. Also, you need to specify an url variable named boxtype and assign it the value ajax. Furthermore, you can add other request variables at the end of the url for your ajax page to process.
Below shows an example of using ajax for the lightbox.
  back to top
You can change some common attributes of the scroller and lightbox through their plugin parameters. Below is an example of the attributes being specified with corresponding values.

note: if you want to leave a parameter with its default value, you can omit that parameter in the javascript call.
The table below describes each attribute in more detail:
| Attribute Name | Description | Default Value | Possible Values |
|---|---|---|---|
| num_display | The number of slide displayed at a time. | 3 | Any positive number. |
| slide_width | The width of each slide. | 300 | Any positive number. |
| slide_height | The height of each slide. | 200 | Any positive number. |
| slide_margin | The margin between each slide. | 1 | Any number. |
| button_width | The width of the directional buttons. | 35 | Any positive number. |
| ctrl_height | The height of the scrollbar or index bar. | 25 | Any positive number. |
| margin |
The margin around the scroller. note: The left and right margin is not use if the directional buttons are displayed. Also, the bottom margin is not use if either the scrollbar or index bar is displayed. |
10 | Any number. |
| auto_scroll | Specify if auto scroll rotation is on. | true | true, false. |
| delay | The time delay in milliseconds for auto scroll rotation. | 4000 | Any positive number. |
| scroll_speed | The scrolling speed in milliseconds. | 1000 | Any positive number. |
| easing | The easing used for scrolling transition. | "" | Please visit jQuery Easing Plugin for a list of all available easing. |
| auto_scale | Specifies if slide images are automatically scaled to fit centerly within slide window. | false | true, false. |
| move_one | Specifies if slides move by one per scroll. note: Move by one does not apply when ctrl_type is set to index. |
false | true, false. |
| ctrl_type | Specifies the type of navigation control used for the lower panel of the scroller. | "scrollbar" | "scrollbar", "index", "none" |
| display_buttons | To specify if the directional buttons are visible. | true | true, false. |
| mouseover_buttons | To specify if the directional buttons appears on mouseover and hides on mouseout. | false | true, false. |
| display_caption | To specify if the slide captions are visible. | true | true, false. |
| mouseover_caption | To specify if the captions appears on mouseover and hides on mouseout. note: Mouseover only works if caption_position is inside. |
false | true, false. |
| caption_effect | The caption effect used for mouseover caption. | "slide" | "slide", "fade", "none". |
| caption_align | The alignment of the captions. | "bottom" | "top", "bottom". |
| caption_position | The position of the captions. | "inside" | "inside", "outside". |
| cont_nav | Specifies if the directional buttons allow for continuous navigation. | true | true, false. |
| shuffle | To specify if slides are in random order. | false | true, false. |
| mousewheel_scroll | To specify if mousewheel scroll is enabled. | false | true, false. |
| Attribute Name | Description | Default Value | Possible Values |
|---|---|---|---|
| rotate | Specifies if image rotation is on. | true | true, false. |
| delay | The time delay in milliseconds for image rotation. | 4000 | Any positive number. |
| duration | The duration in milliseconds for change transition. | 600 | Any positive number. |
| display_number | Specifies if the image number is visible. | true | true, false. |
| display_dbuttons | Specifies if the directional buttons are visible. | true | true, false. |
| display_timer | Specifies if the delay timer bar is visible. | true | true, false. |
| display_caption | Specifies if the caption box is visible. | true | true, false. |
| caption_position | The position of the caption box. | "outside" | "inside", "outside". |
| cont_nav | Specifies if the directional buttons allow for continuous navigation. | true | true, false. |
| auto_fit | Specifies if the lightbox auto scale to fit browser window. | true | true, false. |
| easing | Specifies the easing used for content change transition. | "" | Please visit jQuery Easing Plugin for a list of all available easing. |
| type | Used only if using ajax, specifies if request is by get or post. | "GET" | "GET", "POST". |
For help or questions regarding this file, please contact me using the email form on my profile page.
back to top


|
Apache Ignite.NET
|
Pluggable Ignite component. Should have parameterless constructor. More...
Public Member Functions | |
| T | GetPlugin< T > () |
| Gets the plugin instance. More... | |
| void | Start (IPluginContext< TConfig > context) |
| Starts the plugin provider. More... | |
| void | Stop (bool cancel) |
| Stops the plugin provider. More... | |
| void | OnIgniteStart () |
| Called when Ignite has been started and is fully functional. More... | |
| void | OnIgniteStop (bool cancel) |
| Callback to notify that Ignite is about to stop. More... | |
Properties | |
| string | Name [get] |
| Gets the plugin name. Plugins can be retrieved by name via IIgnite.GetPlugin<T>. More... | |
| string | Copyright [get] |
| Gets the copyright information. More... | |
Ignite plugins are loaded according to IgniteConfiguration.PluginConfigurations.
| TConfig | : | IPluginConfiguration |
| T Apache.Ignite.Core.Plugin.IPluginProvider< in in TConfig >.GetPlugin< T > | ( | ) |
| T | Plugin instance type. |
| T | : | class |
| void Apache.Ignite.Core.Plugin.IPluginProvider< in in TConfig >.OnIgniteStart | ( | ) |
| void Apache.Ignite.Core.Plugin.IPluginProvider< in in TConfig >.OnIgniteStop | ( | bool | cancel | ) |
| cancel | if set to true , all ongoing operations should be canceled. |
| void Apache.Ignite.Core.Plugin.IPluginProvider< in in TConfig >.Start | ( | IPluginContext< TConfig > | context | ) |
IPluginContext<T>.Ignite can be null until OnIgniteStart is called.
| context | The context. |
| void Apache.Ignite.Core.Plugin.IPluginProvider< in in TConfig >.Stop | ( | bool | cancel | ) |
| cancel | if set to true , all ongoing operations should be canceled. |
|
get |
|
get |


Company profile - Canadian Company Capabilities
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
MNP LLP
Mailing Address:
300-111 Richmond St WTORONTO, Ontario
M5H 2G4
Location Address:
300-111 Richmond St WTORONTO, Ontario
M5H 2G4
Tel.:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Logo
Company Profile
At MNP, it all starts with a relationship. The kind of relationship that helps us better understand your business and offer you sound advice. Your MNP team provides tailored expertise in tax, accounting and a wide range of business advisory services. Whatever your needs, wherever you want to go, MNP will help you get there.
MNPs suite of business services combines industry expertise, market knowledge and professional insight to help businesses achieve their goals, including:
Assurance & Accounting Tax Consulting
Corporate Finance Enterprise Risk Services Investigative & Forensics
Corporate Recovery & Insolvency Valuation & Litigation Support Succession
Full profile
Full profile
Contact information
Company description
524299 - All Other Insurance Related Activities
541690 - Other Scientific and Technical Consulting Services
561611 - Investigation Services
611430 - Professional and Management Development Training
Product / Service / Licensing
Our assurance team knows your organization faces unique challenges and opportunities. We want to provide you with meaningful, reliable financial information to make your job easier and keep your business profitable and competitive.
Our team can meet all of your assurance needs through:
Audits, Reviews and Compilations
Financial Projections and Forecasts
Internal Control Assessments
Performance Measurement
Public Companies
Compliance - Sarbanes-Oxley 404 and Multilateral Instrument 52-109
International Financial Reporting Standards
Our consulting team has worked with organizations and industries across Canada and around the world from the public sector to agriculture to manufacturing to utilities. We can assist you with:
Strategy and Planning
Research and Analytics
Organization and People
Technology
Performance Improvement
Training Solutions
Financial Management
Capital Markets
From debt to equity, from both private and public sources, MNP Corporate Finance finds and secures the right financing for your business.
Mergers, Acquisitions and Divestitures
Look to MNP Corporate Finance for assistance with negotiation, deal structuring, due diligence, financing and post-deal transitional management support.
Private Investor Network
MNP Corporate Finance's extensive private investor network helps bring high-growth companies and committed, long-term private investors together.
Transaction Advisory Services and Due Diligence
A successful sale or purchase depends on strategic thinking and comprehensive due diligence before a deal is finalized. MNP Corporate Finance provides strategic advice at every stage, from identifying appropriate targets for the transaction to advising on the best way to finance a transaction or receive payment. Our team of due diligence specialists can assist with all aspects of the due diligence needed before closing a transaction.
For more than 60 years, MNPs Enterprise Risk specialists have helped businesses mitigate risk and remain profitable and reputable through a diverse suite of services including:
Enterprise Risk Management
CEO/CFO Certification Services
Internal Audit Services
Investigative and Forensic Services
Technology Risk Services
Supply Chain Risk Management
Business Resilience Services
From conducting comprehensive RCMP investigations to leading the global Sarbanes Oxley 404 compliance of major companies, MNP offers strategic planning, analytics and implementation support to help business owners handle risk.
At MNP, our insolvency team has more than 50 years experience helping individuals and businesses recover from times of economic distress to regain control of their finances.
Many individuals and businesses immediately think of bankruptcy when they have financial problems, but there are options.
MNP also conducts assessments that gauge your organization's vulnerability to fraud. Helping you implement anti-fraud controls reduces your organization's exposure to criminal and civil wrongdoing. Our services also protect you from irreparable damage to your reputation and finances.
Our forensic and investigative service offering includes:
Fraud investigations
Fraud risk assessments
Internal controls assessments
Internal audit consulting
Accounting/financial investigations
Employee misconduct
Dispute resolutions
Expert witness testimony
FINTRAC compliance and anti-money laundering consulting
Computer forensics
Due diligence
Civil injunction administration
Insurance claims & litigation support
Whistleblower Hotline service
Whichever path you choose, you have a lot to consider and may feel overwhelmed. Remember, succession planning is a long-term process, not a one-time event. Before you make any decisions, the most important step in this process is finding the right advisor to work with.
At MNP, we bring together specialists from many disciplines to offer you two unique succession packages:
1. The business succession plan
2. The farm succession plan
Both packages cover a wide range of issues, including:
Tax Planning. Is your succession-ownership transfer structure tax-effective? MNP will review the income tax implications associated with the transfer of assets and death.
Business Valuation. What is your business worth? This is an important question to address in your succession plan and one that should be tackled early in the process.
Retirement Planning. To retire comfortably, your plan will include strategies to ensure you have a secure stream of retirement income.
Strategic Business Planning. A three- to five-year business plan is a fundamental base on which to build your succession plan.
Transfer of Management. Your successors must develop management skills to run the business successfully for the future. Without good management, your business will not continue to thrive.
MNP's Tax team provides a full range of business and personal taxation services to a wide range of clients, from the largest multinational companies to owner-managed businesses and individuals. Working with you one-on-one, MNP takes the time to understand your unique situation and deliver the services you need to achieve your goals.
At MNP, our experienced tax advisors offer the following services:
Canadian Corporate Tax Services
Personal Tax Services
International Corporate Tax Services
Indirect Tax Services
Scientific Research & Experimental Development (SR&ED) Tax Services
Mergers & Acquisitions Tax Services
MNP Consulting sharpens your company's competitive edge with practical, skill-based training for all levels of your organization, including current and future leaders. Leadership training programs are designed to enhance and develop the leadership and management competencies necessary for success in tomorrows marketplace.
For those seeking a new career or interested in starting a business, we offer customized skills training to position you above the competition and help you get a strong start.
MNPs team of Chartered Business Valuators and Accredited Appraisers work with our extensive network of industry specialists to deliver independent, concise valuation assessments in a wide range of areas including:
Business Valuations
Intangible Assets
Financial Reporting Requirements
Property Tax Recovery
Third-Party Information Liability Disclaimer
Some of the information on this Web page has been provided by external sources. The Government of Canada is not responsible for the accuracy, reliability or currency of the information supplied by external sources. Users wishing to rely upon this information should consult directly with the source of the information. Content provided by external sources is not subject to official languages, privacy and accessibility requirements.
Contacts
Contact information
Description
Company description
524299 - All Other Insurance Related Activities
541690 - Other Scientific and Technical Consulting Services
561611 - Investigation Services
611430 - Professional and Management Development Training
Products, services and licensing
Product / Service / Licensing
Our assurance team knows your organization faces unique challenges and opportunities. We want to provide you with meaningful, reliable financial information to make your job easier and keep your business profitable and competitive.
Our team can meet all of your assurance needs through:
Audits, Reviews and Compilations
Financial Projections and Forecasts
Internal Control Assessments
Performance Measurement
Public Companies
Compliance - Sarbanes-Oxley 404 and Multilateral Instrument 52-109
International Financial Reporting Standards
Our consulting team has worked with organizations and industries across Canada and around the world from the public sector to agriculture to manufacturing to utilities. We can assist you with:
Strategy and Planning
Research and Analytics
Organization and People
Technology
Performance Improvement
Training Solutions
Financial Management
Capital Markets
From debt to equity, from both private and public sources, MNP Corporate Finance finds and secures the right financing for your business.
Mergers, Acquisitions and Divestitures
Look to MNP Corporate Finance for assistance with negotiation, deal structuring, due diligence, financing and post-deal transitional management support.
Private Investor Network
MNP Corporate Finance's extensive private investor network helps bring high-growth companies and committed, long-term private investors together.
Transaction Advisory Services and Due Diligence
A successful sale or purchase depends on strategic thinking and comprehensive due diligence before a deal is finalized. MNP Corporate Finance provides strategic advice at every stage, from identifying appropriate targets for the transaction to advising on the best way to finance a transaction or receive payment. Our team of due diligence specialists can assist with all aspects of the due diligence needed before closing a transaction.
For more than 60 years, MNPs Enterprise Risk specialists have helped businesses mitigate risk and remain profitable and reputable through a diverse suite of services including:
Enterprise Risk Management
CEO/CFO Certification Services
Internal Audit Services
Investigative and Forensic Services
Technology Risk Services
Supply Chain Risk Management
Business Resilience Services
From conducting comprehensive RCMP investigations to leading the global Sarbanes Oxley 404 compliance of major companies, MNP offers strategic planning, analytics and implementation support to help business owners handle risk.
At MNP, our insolvency team has more than 50 years experience helping individuals and businesses recover from times of economic distress to regain control of their finances.
Many individuals and businesses immediately think of bankruptcy when they have financial problems, but there are options.
MNP also conducts assessments that gauge your organization's vulnerability to fraud. Helping you implement anti-fraud controls reduces your organization's exposure to criminal and civil wrongdoing. Our services also protect you from irreparable damage to your reputation and finances.
Our forensic and investigative service offering includes:
Fraud investigations
Fraud risk assessments
Internal controls assessments
Internal audit consulting
Accounting/financial investigations
Employee misconduct
Dispute resolutions
Expert witness testimony
FINTRAC compliance and anti-money laundering consulting
Computer forensics
Due diligence
Civil injunction administration
Insurance claims & litigation support
Whistleblower Hotline service
Whichever path you choose, you have a lot to consider and may feel overwhelmed. Remember, succession planning is a long-term process, not a one-time event. Before you make any decisions, the most important step in this process is finding the right advisor to work with.
At MNP, we bring together specialists from many disciplines to offer you two unique succession packages:
1. The business succession plan
2. The farm succession plan
Both packages cover a wide range of issues, including:
Tax Planning. Is your succession-ownership transfer structure tax-effective? MNP will review the income tax implications associated with the transfer of assets and death.
Business Valuation. What is your business worth? This is an important question to address in your succession plan and one that should be tackled early in the process.
Retirement Planning. To retire comfortably, your plan will include strategies to ensure you have a secure stream of retirement income.
Strategic Business Planning. A three- to five-year business plan is a fundamental base on which to build your succession plan.
Transfer of Management. Your successors must develop management skills to run the business successfully for the future. Without good management, your business will not continue to thrive.
MNP's Tax team provides a full range of business and personal taxation services to a wide range of clients, from the largest multinational companies to owner-managed businesses and individuals. Working with you one-on-one, MNP takes the time to understand your unique situation and deliver the services you need to achieve your goals.
At MNP, our experienced tax advisors offer the following services:
Canadian Corporate Tax Services
Personal Tax Services
International Corporate Tax Services
Indirect Tax Services
Scientific Research & Experimental Development (SR&ED) Tax Services
Mergers & Acquisitions Tax Services
MNP Consulting sharpens your company's competitive edge with practical, skill-based training for all levels of your organization, including current and future leaders. Leadership training programs are designed to enhance and develop the leadership and management competencies necessary for success in tomorrows marketplace.
For those seeking a new career or interested in starting a business, we offer customized skills training to position you above the competition and help you get a strong start.
MNPs team of Chartered Business Valuators and Accredited Appraisers work with our extensive network of industry specialists to deliver independent, concise valuation assessments in a wide range of areas including:
Business Valuations
Intangible Assets
Financial Reporting Requirements
Property Tax Recovery


Open Brewery DB is a free API for public information on breweries, cideries, brewpubs, and bottleshops. Currently it is focused to the United States, but future plans are to import world-wide data.
by_state
filter. Currently, you may only search by full state name and not abbreviations.
by_tags
filter.
The API is still in BETA. Sign up to receive updates.
A list of projects which use the Open Brewery DB API.
https://api.openbrewerydb.org/breweries
[
...
{
id: 299,
name: "Almanac Beer Company",
brewery_type: "micro",
street: "651B W Tower Ave",
city: "Alameda",
state: "California",
postal_code: "94501-5047",
country: "United States",
longitude: "-122.306283180899",
latitude: "37.7834497667258",
phone: "4159326531",
website_url: "http://almanacbeer.com",
updated_at: "2018-08-23T23:24:11.758Z",
tag_list: []
},
...
]
by_city
by_name
by_state
by_type
by_tag
by_tags
sort
+
for acending order (default order); -
for decending ordersort=-name,+type,city
https://api.openbrewerydb.org/breweries?by_state=new_york
https://api.openbrewerydb.org/breweries?by_name=cooper
https://api.openbrewerydb.org/breweries?by_tag=patio
https://api.openbrewerydb.org/breweries?by_name=cooper&by_state=new_york
https://api.openbrewerydb.org/breweries?by_state=ohio&sort=type,-name
https://api.openbrewerydb.org/breweries?page=2&per_page=30
https://api.openbrewerydb.org/breweries/5494
{
id: 5494,
name: "MadTree Brewing",
brewery_type: "regional",
street: "3301 Madison Rd",
city: "Cincinnati",
state: "Ohio",
postal_code: "45209-1132",
country: "United States",
longitude: "-84.4239715",
latitude: "39.1563725",
phone: "5138368733",
website_url: "http://www.madtreebrewing.com",
updated_at: "2018-08-24T15:44:22.281Z",
tag_list: [
"patio"
]
}
https://api.openbrewerydb.org/breweries/autocomplete?query=dog
[
{
id: "4263",
name: "Lead Dog Brewing"
},
{
id: "5359",
name: "Boss Dog Brewing"
},
{
id: "5925",
name: "Running Dogs Brewery"
},
...
]
query
https://api.openbrewerydb.org/breweries/search?query=dog
[
{
id: 530,
name: "Diving Dog Brewhouse",
brewery_type: "micro",
street: "1802 Telegraph Ave",
city: "Oakland",
state: "California",
postal_code: "94612-2110",
country: "United States",
longitude: "-122.2698881",
latitude: "37.807739",
phone: "5103061914",
website_url: "http://www.divingdogbrew.com",
updated_at: "2018-08-23T23:27:26.494Z",
tag_list: []
},
...
]
query
I like craft breweries. I particularly like those which allow my dog, are open during the day, and have WiFi so I can work remote with my best buddy. While there are other websites and resources available, none had an easy-to-use, publically-accessible API.
The goal of this project is to keep an up-to-date, curated, and publically available database of breweries for the betterment of the beer community and joy of web developers like myself.
Cheers! 🍻
Created and maintained by Chris J Mears and Wandering Leaf Studios LLC.
Inital dataset from Brewers Association.
Logo via Symbolicons


Platform
All
Technology
All
Summary
- Visually distinct headings help sighted users to more easily find blocks of content and understand the relationship between each block.
- Visually distinct headings can help users to maintain focus, can help them orientate, and help them restore context when it is lost.
- People with a language impairment, learning disability, and/or an impaired memory want layouts that help them follow and understand the content without getting overwhelmed.
How it solves user need
Rather than reading a page from start to finish, users scan content to understand if what they’re looking at is helpful to the task they’re trying to complete. Visually distinct headings help users to make quicker decisions on the usefulness of the section.


Start date is required.
Leave date is required.
Airport Name is required.
Time of Arrival is required.
Number of carry-ons is required.
Number of baggages is required.


Click the Create new net instance button to add new net instances. Click their Train buttons to train them on the XOR data set, and click Run to run the values in the below input fields through the network.
Create new net instance


2017 The Dining Philosophers Problem Resources about blockchain, Ethereum .etc. Definition of statistic in ethstats.net Vivid Explanation of Blockchain Blockchain References Blockchain Glossary Postgraduate Recommendation from NEU to SYSU Blockchain Tutorial
2016 Algorithm(3) Minimum Spanning Tree Algorithm(2) Shortest Path Algorithm(1) Sorting Machine Learning Notes Convolutional Neural Networks for NLP


Class TFOperationDesc
Low-level TensorFlow operation builder
Namespace: TensorFlow
Assembly: TensorFlowSharp.dll
Syntax
public class TFOperationDesc : TensorFlow.TFDisposable
Remarks
This is the low-level API that is used to create operations by manually specificying all the parameters of an operation (inputs, outputs, attribute descriptions) that can then be attached into a graph.
Generally, you will instead be using the methods surfaced in TFGraph that surfaces a C# high-level API that has already been bound to the built-in TensorFlow nodes.
You create instances bound to a graph, add inputs, attributes and so on, and when you are done you can call the FinishOperation(TFStatus) method that will turn this TFOperationDesc into a TFOperation.
Constructors
TFOperationDesc(TFGraph, String, String)
Declaration
public TFOperationDesc (TensorFlow.TFGraph graph, string opType, string operName);
Parameters
| Type | Name | Description |
|---|---|---|
| TFGraph | graph | To be added. |
| System.String | opType | To be added. |
| System.String | operName | To be added. |
Methods
AddControlInput(TFOperation)
Ensure that the operation does not execute before the control operation does.
Declaration
public TensorFlow.TFOperationDesc AddControlInput (TensorFlow.TFOperation control);
Parameters
| Type | Name | Description |
|---|---|---|
| TFOperation | control | Operation that must be executed before running this operation. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
Remarks
A control input is an Operation that must be executed before running the operation
currently being built.
For example, an Assert operation may be added as a control input for this operation. The Assert now behaves as a pre-condition that will always verify itself before running the operation.
AddInput(TFOutput)
Adds the specified input to the operation
Declaration
public TensorFlow.TFOperationDesc AddInput (TensorFlow.TFOutput input);
Parameters
| Type | Name | Description |
|---|---|---|
| TFOutput | input | Input. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | The input. |
AddInputs(TFOutput[])
Adds a series of inputs to the operation.
Declaration
public TensorFlow.TFOperationDesc AddInputs (TensorFlow.TFOutput[] inputs);
Parameters
| Type | Name | Description |
|---|---|---|
| TFOutput[] | inputs | Inputs, this is a params array for your convenience. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
ColocateWith(TFOperation)
Declaration
public TensorFlow.TFOperationDesc ColocateWith (TensorFlow.TFOperation op);
Parameters
| Type | Name | Description |
|---|---|---|
| TFOperation | op | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
FinishOperation(TFStatus)
Turns the operation description into an actual operation in the graph.
Declaration
public TensorFlow.TFOperation FinishOperation (TensorFlow.TFStatus status = null);
Parameters
| Type | Name | Description |
|---|---|---|
| TFStatus | status | Optional status, on failure the operation is not added to the graph. If you pass null (the default), this operation throws on error conditions. |
Returns
| Type | Description |
|---|---|
| TFOperation | The operation on success, or null on error. |
SetAttr(String, TFTensor[], TFStatus)
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, TensorFlow.TFTensor[] tensor, TensorFlow.TFStatus status = null);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| TFTensor[] | tensor | To be added. |
| TFStatus | status | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, TFTensor, TFStatus)
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, TensorFlow.TFTensor tensor, TensorFlow.TFStatus status = null);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| TFTensor | tensor | To be added. |
| TFStatus | status | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, String[])
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, string[] values);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.String[] | values | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, String)
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, string value);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.String | value | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, Single[])
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, float[] values);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.Single[] | values | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, Int64[])
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, long[] values);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.Int64[] | values | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, Int64)
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, long value);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.Int64 | value | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, Boolean[])
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, bool[] values);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.Boolean[] | values | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, Boolean)
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, bool value);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.Boolean | value | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttr(String, Single)
Declaration
public TensorFlow.TFOperationDesc SetAttr (string attrName, float value);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.Single | value | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttribute(String, String)
Sets an attribute on the function to the specified value.
Declaration
public void SetAttribute (string attrName, string value);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | The attribute name. |
| System.String | value | The value for the attribute. |
SetAttrShape(String, TFShape)
Declaration
public TensorFlow.TFOperationDesc SetAttrShape (string attrName, TensorFlow.TFShape shape);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| TFShape | shape | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttrShape(String, TFShape[])
Declaration
public TensorFlow.TFOperationDesc SetAttrShape (string attrName, TensorFlow.TFShape[] shapeList);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| TFShape[] | shapeList | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttrTensorShapeProto(String, IntPtr, UIntPtr, TFStatus)
Declaration
public TensorFlow.TFOperationDesc SetAttrTensorShapeProto (string attrName, IntPtr proto, UIntPtr protoLen, TensorFlow.TFStatus status = null);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| System.IntPtr | proto | To be added. |
| System.UIntPtr | protoLen | To be added. |
| TFStatus | status | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttrType(String, TFDataType[])
Declaration
public TensorFlow.TFOperationDesc SetAttrType (string attrName, TensorFlow.TFDataType[] dataType);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| TFDataType[] | dataType | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetAttrType(String, TFDataType)
Declaration
public TensorFlow.TFOperationDesc SetAttrType (string attrName, TensorFlow.TFDataType dataType);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | attrName | To be added. |
| TFDataType | dataType | To be added. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | To be added. |
SetDevice(String)
Specifies the device for the operation, if one is not provided, the operation is unconstrained.
Declaration
public TensorFlow.TFOperationDesc SetDevice (string device);
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | device | The device to constraint to in this operation. |
Returns
| Type | Description |
|---|---|
| TFOperationDesc | This instance, allows for chaining operation invocations. |