Module pancake
Toolkit for writing Lua filters for Pandoc.
Synopsis:
pancake = require 'pancake'
Pancake aims to work with Pandoc ≥ v2.0.4. However, it has only been tested with v2.9–v2.18, and only on Linux and macOS.
Tip:
Pancake automatically loads Pandoc’s modules (e.g., pandoc.system
) into
the global namespace; this is useful when you are using older versions of
Pandoc, which do not do this automatically. So, you may want to load it
before setting up a per-function or per-module environment.
Info:
- Copyright: 2022 Odin Kroeger
- Release: 1.0.0b17
- License: MIT
- Author: Odin Kroeger
Metadata
| VERSION | Pancake’s version. |
System
| PATH_SEP | The path segment separator used by the operating system. |
| EOL | The end of line sequence typically used on the given operating system. |
Type-checking
| type_match (val, decl) | Check whether a value is of a type. |
| type_check (...) | Decorator that adds type checks to a function. |
Errors
| asserter ([fin[, msgh]]) | Create a custom assertion function. |
| protect (func) | Decorator that runs a function in protected mode. |
| unprotect (func) | Decorator that raises an error if a function returns a fail value. |
Tables
| copy (val) | Make a deep copy of a value. |
| keys (tab) | Get the indices and number of items in a table. |
| order (values) | Derive a sorting function from a list of values. |
| sorted (tab[, func[, raw]]) | Iterate over the key-value pairs of a table in a given order. |
| tabulate (iter[, tab[, idx]]) | Tabulate the values that an iterator returns. |
| walk (val, func) | Apply a function to each node of a tree. |
Strings
| split (str, pat[, max[, incl[, plain=false]]]) | Iterate over substrings of a string. |
Variables
| vars_get ([level=2]) | Get a copy of a function’s variables. |
| vars_sub (str, vars) | Substitute variables in strings. |
| env_sub (str) | Substitute environment variables in strings. |
Metatables
| no_case | Metatable that makes indices case-insensitive. |
| no_case.__index (tab, key) | Look up an item. |
| no_case.__newindex (tab, key, val) | Store a new item. |
Prototypes
| Object | Base prototype. |
| Object:clone ([tab[, mt]]) | Delegate to an object. |
| Object:new (...) | Initialise an Object. |
| getterify (tab) | Add getters to a table. |
File I/O
| file_exists (fname) | Check whether a file exists. |
| file_locate (fname) | Locate a file in Pandoc’s resource path. |
| file_read (fname) | Read a file. |
| file_write (fname, ...) | Write data to a file. |
| tmp_fname ([dir[, templ='tmp-XXXXXX']]) | Generate a name for a temporary file. |
| with_tmp_file (func[, dir[, templ]]) | Run a function with a temporary file. |
Paths
| path_join (...) | Join path segments. |
| path_normalise (path) | Normalise a path. |
| path_prettify (path) | Prettify a path. |
| path_split (path) | Split a path into a directory and a filename. |
| project_dir () | Guess the project directory. |
Warnings
| xwarn (...) | Print a message to STDERR. |
Elements
| elem_clone (elem) | Make a shallow copy of a Pandoc AST element. |
| elem_type (elem) | Get the type of a Pandoc AST element. |
| elem_walk (elem, filter) | Walk an AST element and apply a filter to matching elements. |
Options
| Options | An option list. |
| Options:new (...) | Create a new option list. |
| Options:add (...) | Add an option to the list. |
| Options:parse (meta) | Parse options from a metadata block (OO-interface). |
| opts_parse (meta, ...) | Parse options from a metadata block (function interface). |
Metadata
System
- PATH_SEP
- The path segment separator used by the operating system.
- EOL
- The end of line sequence typically used on the given operating system.
Type-checking
- type_match (val, decl)
-
Check whether a value is of a type.
Type Declaration Grammar:
Give one or more Lua type names separated by a pipe symbol (‘|’) to check whether a value is of one of the given types (e.g., ‘string|table’ checks whether the value is a string or a table). ‘’ is short for the list of all types save for
nil
. ‘?T’ is short for ‘T*|nil’ (e.g., ‘?table’ is short for ‘table|nil’).Type = ‘boolean’ | ‘function’ | ‘nil’ | ‘number’ | ‘string’ | ‘table’ | ‘thread’ | ‘userdata’
Type list = [ ‘?’ ], type, { ‘|’, type }
Wildcard = [ ‘?’ ], ‘*’
Type declaration = type list | wildcard
Complex Types:
You can check types of table or userdata fields by declarding a table that maps indices to declarations.
> type_check({1, '2'}, {'number', 'number'}) nil index 2: expected number, got string. > type_check({foo = 'bar'}, {foo = '?table'}) nil index foo: expected table or nil, got string. > type_check('foo', {foo = '?table'}) nil expected table or userdata, got string.
Caveats:
Wrong type names (e.g., ‘int’) do not throw an error, but will always return one.
Parameters:
Returns:
-
bool
true
if the value matches the declaration.Or
-
nil
nil
otherwise. - string An error message.
-
nil
- type_check (...)
-
Decorator that adds type checks to a function.
Only adds type checks if the global
CHECK_TYPES
evaluates as true.Type declaration grammar:
The type declaration syntax is that of type_match, save for that you can use ‘…’ to declare that the remaining arguments are of the same type as the previous one.
Caveats:
- Wrong type names (e.g., ‘int’) do not throw an error.
- Sometimes the strack trace is wrong.
Tip:
-
Obscure Lua errors may indicate that
the quotes around ‘…’ are missing.
Parameters:
Returns:
-
func
A function that adds type checks to another function.
Usage:
store = type_check('*', 'table', '?number', '...')( function (val, tab, ...) local indices = table.pack(...) for i = 1, indices.n do tab[indices[i]] = val end end )
Errors
- asserter ([fin[, msgh]])
-
Create a custom assertion function.
See http://lua-users.org/wiki/FinalizedExceptions.
Parameters:
- fin func Called before an error is thrown. (optional)
- msgh func Given the error and the caller’s variables, should return a new error. (optional)
Returns:
-
func
An assertion function.
Usage:
> local assert = asserter(nil, vars_sub) > function foo () > local bar = 'The bar' > assert(false, '${bar} is to blame!') > end > foo() The bar is to blame! stack traceback: [C]: in function 'error' stdin:3: in function 'foo' (...tail calls...) [C]: in ?
- protect (func)
-
Decorator that runs a function in protected mode.
See http://lua-users.org/wiki/FinalizedExceptions.
Parameters:
- func func A function.
Returns:
-
func
A function running in protected mode.
See also:
Usage:
> foo = protect(function () return 'foo' end) > foo() foo > boo = protect(function () error 'bar!' end) > boo() nil bar!
- unprotect (func)
-
Decorator that raises an error if a function returns a fail value.
Parameters:
- func func A function.
Returns:
-
func
A function that throws an error on failures.
See also:
Usage:
> foo = unprotect(function () return 'foo' end) > foo() foo > boo = unprotect(function () return nil, 'boo.' end) > boo() boo. stack traceback: [C]: in function 'error' stdin:4: in function 'boo' (...tail calls...) [C]: in ?
Tables
- copy (val)
-
Make a deep copy of a value.
- Copies metatables.
- Handles cyclic data.
- Bypasses
__pairs
and__newindex
.
Parameters:
- val A value.
Returns:
-
A deep copy.
Usage:
> foo = {1, 2, 3} > bar = {foo, 4} > baz = copy(bar) > foo[#foo + 1] = 4 > table.unpack(baz, 1) 1 2 3
- keys (tab)
-
Get the indices and number of items in a table.
Tip:
select(2, keys(t)) == #t
checks whether a table is a list.Parameters:
- tab tab A table.
Returns:
- tab The indices.
- int The number of items.
- order (values)
-
Derive a sorting function from a list of values.
Values that are not in the list are sorted lexically.
Parameters:
- values tab Values.
Returns:
-
func
A sorting function.
Usage:
> tab = {a = 3, b = 4, c = 2, d = 1} > for k, v in sorted(tab, order{'d', 'c'}) do > print(k, v) > end d 1 c 2 a 3 b 4
- sorted (tab[, func[, raw]])
-
Iterate over the key-value pairs of a table in a given order.
Parameters:
- tab tab A table.
- func
func
A sorting function.
Defaults to the
sort
metamethod or sorting lexically. (optional) - raw
bool
Bypass
__pairs
metamethod? Done by default if__pairs
is set tosorted
. (optional)
Returns:
-
func
A stateful iterator.
Usage:
> -- Iterating over keys in lexical order. > tab = {c = 3, b = 2, a = 1} > for k, v in sorted(tab) do > print(k, v) > end a 1 b 2 c 3 -- Supplying a sorting function. > for k, v in sorted(tab, order{'c', 'b', 'a'}) do > print(k, v) > end c 3 b 2 a 1 > -- Setting the `sort` metamethod. > mt = {sort = order{'c', 'b', 'a'}} > setmetatable(tab, mt) > for k, v in sorted(tab) do > print(k, v) > end c 3 b 2 a 1 > -- Using `sorted` as `__pairs` metamethod. > mt.__pairs = sorted > for k, v in pairs(tab) do > print(k, v) > end c 3 b 2 a 1
- tabulate (iter[, tab[, idx]])
-
Tabulate the values that an iterator returns.
Parameters:
- iter func An iterator. Must accept, though not honour, the same arguments as next.
- tab tab A table to iterate over. (optional)
- idx An index to start at. (optional)
Returns:
- tab The values returned by the iterator.
- int The number of values.
Usage:
> tab = {a = true, b = true, c = true} > unpack(tabulate(next, tab)) a b c
- walk (val, func)
-
Apply a function to each node of a tree.
- Nodes are only changed if the function returns a non-
nil
value. - The tree is walked bottom-up.
- Handles cyclic data structures.
Parameters:
- val A value.
- func func A function.
Returns:
-
A changed value.
- Nodes are only changed if the function returns a non-
Strings
- split (str, pat[, max[, incl[, plain=false]]])
-
Iterate over substrings of a string.
Caveats:
-
Does not support multi-byte characters.
Parameters:
- str string A string.
- pat string Where to split the string.
- max int Split the string into at most that many substrings. (optional)
- incl string Include separators in substrings? ‘l’ includes them on the left, ‘r’ on the right. If they are included, the iterator never returns the empty string. (optional)
- plain bool Disable pattern matching facilities? (default false)
Returns:
-
func
A stateful iterator.
Usage:
> for s in split('CamelCase', '%f[%u]') do > print(s) > end Camel Case > for s in split('foobar', '[fb]', nil, 'l') do > print(s) > end foo bar
Variables
- vars_get ([level=2])
-
Get a copy of a function’s variables.
Caveats:
-
If a global variable is shadowed by a variable that is neither one of
the function’s local variables nor one of its upvalues, then that variable
is looked up in
_ENV
and the shadowing variable is ignored.Parameters:
- level
int
A stack level > 0, where
vars_get
is at level 1, its caller is at level 2, etc. (default 2)
Returns:
-
table
A mapping of variable names to values.
Usage:
> function bar () > print(vars_get(3).foo) > end > function foo () > foo = 'foo' > bar() > end > foo() foo
- level
int
A stack level > 0, where
- vars_sub (str, vars)
-
Substitute variables in strings.
If a string of characters is placed within braces (‘{…}’) and the opening brace (‘{’) immediately follows a single dollar (‘$’) sign, then that string is interpreted as a variable name and the whole expression is replaced with the value of that variable. Variable names must only consist of letters, numbers, and underscores (‘_’) and must start with a letter or an underscore.
> vars_sub( > '${v1} is ${v2}.', > {v1 = 'foo', v2 = 'bar'} > ) foo is bar.
If a braced string is preceded by two or more dollar signs, it is not interpreted as a variable name and the expression is not replaced with the value of a variable. Moreover, any series of n dollar signs that precedes a pair of braces (e.g.,
$${...}
) is replaced with n – 1 dollar signs.> vars_sub( > '$${var} costs $1.', > {var = 'foo'} > ) ${var} costs $1.
You can lookup values in tables by joining table indices with dots (‘.’).
> vars_sub( > '${foo.bar} is baz.', { > foo = { bar = 'baz' } > } > ) baz is baz.
If a variable name is followed by a pipe symbol (‘|’), then the string between that pipe symbol and the next pipe symbol/closing brace is interpreted as a function name, this function is then given the value of that variable, and the whole expression is replaced with the first value the function returns.
> vars_sub( > '${var|barify} is bar!', { > var = 'foo', > barify = function (s) > return s:gsub('foo', 'bar') > end > } > ) bar is bar!
Variables are substituted recursively.
> vars_sub( > '${foo|barify} is bar.', { > foo = '${bar}', > bar = 'baz', > barify = function (s) return s:gsub('baz', 'bar') end > } > ) bar is bar.
The expression as a whole must evaluate either to a string or a number.
Variables can also be looked up by a function. The function is run in protected mode. If it throws an error,
vars_sub
will returnnil
and the error object thrown by the function. Note, this mode does not support multi-dimensional lookups (${foo.bar}
), pipes (${foo|bar}
), or recursive substitution.> vars_sub( > '${foo} is bar.', > function (key) > if key == 'foo' then return 'bar' end > end > ) bar is bar.
Parameters:
- str string A string.
- vars func or tab A mapping of variable names to values.
Returns:
-
string
A transformed string.
Or
-
nil
nil
if an error occurred. - string An error message.
- env_sub (str)
-
Substitute environment variables in strings.
Uses the same syntax as vars_sub, but without pipes or recursive substitution.
Side-effects:
-
Prints a warning to STDERR if a variable is empty.
Parameters:
- str string A string.
Returns:
-
string
A transformed string.
Or
-
nil
nil
if an error occurred. - string An error message.
Metatables
- no_case
-
Metatable that makes indices case-insensitive.
Usage:
> tab = setmetatable({}, no_case) > tab.FOO = 'bar' > tab.foo bar
- no_case.__index (tab, key)
-
Look up an item.
Parameters:
- tab tab A table.
- key A key.
Returns:
-
The item.
- no_case.__newindex (tab, key, val)
-
Store a new item.
Parameters:
- tab tab A table.
- key A key.
- val A value.
Prototypes
- Object
-
Base prototype.
Tip:
Object(...)
is equivalent toObject:new(...)
. - Object:clone ([tab[, mt]])
-
Delegate to an object.
Set a table’s metatable to a copy of the objects’s metatable, then set the table’s
__index
metavalue to the object. If no table is given, create one. If a metatable is given, override the table’s new metatable with that table. In other words,Object:clone(tab, mt)
is equivalent to
do local mt = update({}, getmetatable(Object), {__index = Object}, mt) setmetatable(tab or {}, mt) end
Caveats:
-
The given table is changed in-place.
Parameters:
- tab tab A table. (optional)
- mt tab A metatable. (optional)
Returns:
-
tab
The table.
Usage:
> Foo = Object:clone({}, {__tostring = function (t) return t.bar end}) > Foo.bar = 'baz' > tostring(Foo) baz > bar = Foo() > tostring(bar) baz > bar.bar = 'bar' > tostring(bar) bar
- Object:new (...)
-
Initialise an Object.
Object:new(...)
is equivalent toupdate(Object:clone(), ...)
.Parameters:
- ... tab Properties.
Returns:
-
Object
An object.
Usage:
> foo = Object:new{foo = 'foo'} > foo.foo foo > bar = foo:new{bar = 'bar'} > bar.foo foo > bar.bar bar
- getterify (tab)
-
Add getters to a table.
Getter protocol:
If an index is not present in a the table, look for a function of the same name in the table’s
getters
metavalue, which must be a table that maps indices to functions. Ifgetters
contains a function of the give name, that function is called with the table as its only argument and whatever it returns is returned as the value of the given index. Ifgetters
does not contain a function of that name, the name is looked up using the table’s old__index
metavalue.Caveats:
- Tables are modified in-place.
- Getters are not inherited.
Parameters:
- tab tab A table.
Returns:
-
tab
The table.
Usage:
> -- Enable getters for an object: > Foo = getterify(Object:clone()) > Foo.foo = 'bar' > mt = getmetatable(Foo) > mt.getters = {bar = function (obj) return obj.foo end} > Foo.bar bar > -- Getters are *not* inherited. > baz = Foo() > baz.foo = 'bam!' > -- The getter is reached via the prototype chain, > -- so it sees Foo.foo, not bar.foo: > baz.bar bar > -- But you can make getters quasi-inheritable: > Foo.clone = function (...) return getterify(Object.clone(...)) end > baz = Foo() > baz.foo = 'bam!' > baz.bar bam! > -- Now every object down the prototype chain is getterified. > bam = baz() > bam.foo = 'BAM!' > bam.bar BAM!
File I/O
- file_exists (fname)
-
Check whether a file exists.
Caveats:
-
Another process may create a file of the given name between the time
file_exists
tries to access that file and the time it returns.Parameters:
- fname string A filename.
Returns:
-
boolean
true
if the file exists.Or
-
nil
nil
if the file does not exist. - string An error message.
- int The error number 2.
Raises:
An error if the file cannot be closed again. - file_locate (fname)
-
Locate a file in Pandoc’s resource path.
Caveats:
-
Absolute filenames are returned as they are.
Parameters:
- fname string A filename.
Returns:
-
string
A filename in Pandoc’s resource path.
Or
-
nil
nil
if the file could not be found. - string An error message.
- file_read (fname)
-
Read a file.
Parameters:
- fname string A filename.
Returns:
-
string
The contents of the file.
Or
-
nil
nil
if an error occurred. - string An error message.
- int An error number.
- file_write (fname, ...)
-
Write data to a file.
If a file of that name exists already, it is overwritten.
Caveats:
-
Data is first written to a temporary file, that file is then renamed
to the given filename. This is safe and secure starting with Pandoc
v2.8. If you are using an older version of Pandoc, the caveats of
with_tmp_file apply.
Moreover, if Pandoc exits because it catches a signal (e.g., because the user presses
Ctrl
-c
), this file will not be deleted. This is a bug in Pandoc.Side-effects:
- Creates and deletes a temporary file.
- Prints warnings to STDERR.
Parameters:
Returns:
-
bool
true
if the data was written to the given file.Or
-
nil
nil
if an error occurred. - string An error message.
- int An error number.
Raises:
An error if no unused temporary filename could be generated in Pandoc < v2.8 or if the temporary directory could not be created in Pandoc ≥ v2.8; the latter error cannot be caught. - tmp_fname ([dir[, templ='tmp-XXXXXX']])
-
Generate a name for a temporary file.
Caveats:
-
Another process may create a file of the same name between the time
tmp_fname
checks whether that name is in use and the time it returns.Parameters:
- dir string A directory to prefix the filename with. (optional)
- templ string A template for the filename. ‘X’s are replaced with random alphanumeric characters. (default 'tmp-XXXXXX')
Returns:
-
string
A filename.
Or
-
nil
nil
if the generated filename is in use. - string An error message.
- with_tmp_file (func[, dir[, templ]])
-
Run a function with a temporary file.
Generates a temporary filename. Does not create that file. If the function raises an error or returns
nil
orfalse
, the file of that name is deleted.Caveats:
-
The temporary file may have been created by another process. If that
file is located within a directory that other users have write access
to (e.g.,
/tmp
), this is a security issue!Moreover, if Pandoc exits because it catches a signal (e.g., because the user presses
Ctrl
-c
), the file will not be deleted. This is a bug in Pandoc.Side-effects:
-
May print error messages to STDERR.
Parameters:
- func func Given the name of the temporary file. Must not change the working directory!
- dir string A directory to prefix the name of the temporary file with. See tmp_fname. (optional)
- templ string A template for the name of the temporary file. See tmp_fname. (optional)
Returns:
-
The values returned by the function.
Raises:
An error if no unused temporary filename could be generated.
Paths
- path_join (...)
-
Join path segments.
Parameters:
- ... string Path segments.
Returns:
-
string
A path.
Usage:
> path_join('foo', 'bar') foo/bar
- path_normalise (path)
-
Normalise a path.
Parameters:
- path string A path.
Returns:
-
string
A normalised path.
Usage:
> path_normalise './foo/./bar//' foo/bar
- path_prettify (path)
-
Prettify a path.
Steps:
- The path is normalised.
- The current working directory is removed from its beginning.
- The user’s home directory is replaced with ‘~’, but only on POSIX systems.
Requires:
-
Pandoc ≥ v2.12 to remove the working directory from a path;
in earlier versions, this step is skipped.
Parameters:
- path string A path.
Returns:
-
string
A prettier path.
Usage:
> path_prettify(env_sub '${HOME}/foo/./bar//') ~/foo/bar
- path_split (path)
-
Split a path into a directory and a filename.
Parameters:
- path string A path.
Returns:
Usage:
> path_split 'foo/bar' foo bar
- project_dir ()
-
Guess the project directory.
The project directory is the directory of the first input file not named ‘-’ (i.e., of the first actual input file). If there is no such file, the project directory is the current working directory.
Requires:
-
The working directory is represented by ‘.’ in Pandoc < v2.8.
Returns:
-
string
A directory.
Warnings
- xwarn (...)
-
Print a message to STDERR.
Printout:
Prefixed with the filename of the script and ‘: ’, and terminated with EOL. Non-string values are coerced to strings.
Message priority:
Messages are only printed if their priority is greater or equal to
PANDOC_STATE.verbosity
.Variable substitution:
If string values contain variable names, they are replaced with the values of the local variables, the upvalues of the calling function, or, if there are no local variables or upvalues of the given names,
_ENV
. See vars_sub for the syntax and vars_get for limitations.Options:
String values starting with an ‘@’ are interpreted as options:
- ‘@error’, ‘@warning’, ‘@info’: Set the message’s priority. (default ‘warning’)
- ‘@noopts’: Turn option processing off. (default on)
- ‘@novars’: Turn variable substitution off. (default on)
- ‘@plain’: Turn variable substitution and option processing off.
- ‘@vars’: Turn variable substitution on.
Options are case-sensitive. Unknown options are ignored silently.
Requires:
-
Pandoc ≥ v2.4 to respect
--quiet
and--verbose
; in earlier versions, those options are ignored.Parameters:
- ... Messages. At least one must be given.
Elements
- elem_clone (elem)
-
Make a shallow copy of a Pandoc AST element.
Parameters:
- elem pandoc.AstElement A Pandoc AST element.
Returns:
-
pandoc.AstElement
The clone.
- elem_type (elem)
-
Get the type of a Pandoc AST element.
Parameters:
- elem pandoc.AstElement A Pandoc AST element.
Returns:
Or
-
nil
nil
if the given value is not a Pandoc AST element. - string An error message.
- elem_walk (elem, filter)
-
Walk an AST element and apply a filter to matching elements.
Differences to Pandoc’s Walkers:
- The filter is applied to the given element itself.
- Changes to the AST, other than returning a new element, are ignored.
- The AST is traversed bottom-up or top-down, but not typewise.
- Support for filter keyword ‘AstElement’, which matches any element, but not lists of elements.
- Documents and metadata are traversed, too.
Direction of Traversal:
Depends on the filter’s
traverse
field:bottomup
: Traverse the AST bottom-up.topdown
: Traverse the AST top-down. (default)
The AST is traversed left-to-right either way.
Parameters:
- elem pandoc.AstElement A Pandoc AST element.
- filter {string=func,...} A filter.
Returns:
-
Typically but not necessarily, a new Pandoc AST element.
Options
- Options
-
An option list.
Prototype:
See also:
- Options:new (...)
-
Create a new option list.
opts = Options:new{name = 'foo'}
is equivalent to:
opts = Options() opts:add{name = 'foo'}
Parameters:
- ... tab Option definitions.
See also:
- Options:add (...)
-
Add an option to the list.
Parameters:
- ... tab Option definitions.
See also:
Usage:
opts = Options() opts:add{ name = 'bar', type = 'number', parse = function (x) if x < 1 then return nil, 'not a positive number.' end return x end }
- Options:parse (meta)
-
Parse options from a metadata block (OO-interface).
Parameters:
- meta pandoc.MetaMap A metadata block.
Returns:
-
tab
A mapping of option names to values.
Or
-
nil
nil
if an error occurred. - string An error message.
See also:
Usage:
> meta = pandoc.MetaMap{ > ['foo-bar'] = pandoc.MetaInlines(pandoc.List{ > pandoc.Str "0123" > }) > parser = Options() > parser:add{ > name = 'bar', > prefix = 'foo', > type = 'number', > parse = function (x) > if x < 1 then return nil, 'not a positive number.' end > return x > end > } > opts = parser:parse(meta) > opts.bar 123 > type(opts.bar) number
- opts_parse (meta, ...)
-
Parse options from a metadata block (function interface).
Option Definition Syntax:
An option definition is a table with the following keys:
name
: (string) An option name.type
: (string) An option type. (default ‘string’)parse
: (func) A parser. (optional)prefix
: (string) A prefix. (optional)
Mapping of Option Names to Metadata Fieldnames:
The name of the metadata field is the name of the option with underscores replaced by dashes. If the option has a prefix, then the fieldname is prefixed with that prefix and a dash after underscores have been replaced with dashes.
In Lua:
fieldname = name:gsub('_', '-') if prefix then fieldname = prefix .. '-' .. fieldname end
Type Declaration Grammar:
Configuration values can be of any of three types:
- ‘number’
- ‘string’
- ‘list’
If an option is declared to be of the scalar types ‘number’ or ‘string’ its value is required to be of the Lua type of the same name. However, values are converted automatically if possible.
If an option is declared to be a ‘list’, its value is required to be a
pandoc.List
. However, if a scalar value is encountered where a list is expected, the value is wrapped in a single-item list automatically.The items of a list must all be of the same type, which is declared by appending ‘<T>’ to the literal ‘list’, where T is either the name of a scalar type or another list declaration; it defaults to ‘string’.
An option can be declared to be of any of a list of types separated by the pipe symbol (‘|’), for example, ‘string|list’. The first type that matches ‘wins’, even if winning requires a type conversion (i.e., ‘string|number’ is, effectively, the same as ‘string’).
Scalar = ‘number’ | ‘string’
List = ‘list’, [ ‘<’, ( scalar | list ), ‘>’ ]
Type = list | scalar
Type list = type, { ‘|’, type }
No type checks or conversions are performed for
nil
.Parse Protocol:
Parsers are given the converted value and should return either a new value or
nil
and an error message. They are not called fornil
.Caveats:
-
Options:add throws an error if it is given a wrong option type
(e.g., ‘int’ or ‘list[number]’).
opts_parse
accepts wrong option types and only throws an error if it encounters an option that is supposed to be of that type.Parameters:
- meta pandoc.MetaMap A metadata block.
- ... Option Option definitions.
Returns:
-
tab
A mapping of option names to values.
See also:
Usage:
> meta = pandoc.MetaMap{ > ['foo-bar'] = pandoc.MetaInlines(pandoc.List{ > pandoc.Str "0123" > }) > opts = opts_parse(meta, { > name = 'bar', > prefix = 'foo', > type = 'number', > parse = function (x) > if x < 1 then return nil, 'not a positive number.' end > return x > end > }) > opts.bar 123 > type(opts.bar) number


Many thanks for using Vulture. For all questions, remarks, bugs, please use bitbucket.
This program could not have been possible without the exceptionnal tools already available such as


Oh, it looks like there ares errors in your form. Sorry for the inconveniences, but we really need some more information about your liability waiver request.
The file you submited is too large. The maximum file size is limited to 500 kB.
The file type you submited is not supported. Please upload a file that is commonly supported ont the web (eg: JPEG, PNG GIF).
An unknown error has occured:
{{e.message||e}}


Version 0.0.2 (Build 3)
Created by Astrian Zheng from China. With ❤.
The source code of ICST is under MIT license. See source code here.
Icon is illustrated by HodenLon.
ICST is using Vue.js and Bootstrap for front-end framework, and Exo2 Font Family for text in ICST's user interface.
You can submit your feedback to ICST project's issues page or write a email to me.
If you think my extension is useful, please consider to donate to me.


--- layout: default title: discordgg.ga Website Snapshots description: This page archives discordgg.ga in forms of snapshot from web.archive.org. ---
This page archives discordgg.ga in forms of snapshot from web.archive.org.
Post-Mortem 1 (fake domain takedown)


{% extends "base.html" %} {% block title %} Flags | sh00t{% endblock %} {% block page %}
No Assessments found. A flag must be associated with an assessment. Create an assessment before creating a flag.
{% else %} {% endif %}| Title | Project | Assessment | Added |
|---|---|---|---|
| {{ flag.title }} | {{ flag.assessment.project.name }} | {{ flag.assessment.name }} | {{ flag.added }} |


Beta This is a test version of the layout of this page. Take the survey to help us improve it
Guidance
A guide to the main academy funding terms and acronyms.
Our series of short training videos and guide to schools revenue funding explain academies funding in more detail.
Further information about academies funding allocations for the 2016 to 2017 academic year is available in the funding allocation pack .
AWPU is the rate local authorities set to allocate basic entitlement funding for all pupils in the funding formula for pre-16 pupils in mainstream schools. It is a compulsory factor which must be used in the funding formula.
For the 2016 to 2017 academic year there must be a single rate of at least £2,000 for primary age pupils. The rate for secondary age pupils is at least £3,000 and local authorities can set different rates for key stage 3 and key stage 4 pupils. More information is available in schools revenue funding 2016 to 2017 operational guide .
Alternative provision ( AP ) academies teach children who are not able to attend a mainstream school. This could be because they have behavioural difficulties, a short- or long-term illness, have been excluded or are a new starter waiting for a mainstream school place.
In the 2016 to 2017 academic year AP academies are allocated funding for every place at a rate of £10,000. Local authorities may pay top-up funding directly to schools and academies to meet extra costs related to the additional educational needs of individual pupils.
The 2016 to 2017 funding allocation pack includes more information about AP funding. More information on AP is also available in the guide to converting to an AP academy and high needs funding arrangements 2016 to 2017 .
AP places in free schools will be funded from a central departmental budget for the first and second year the free school is open. From the third year the cost of the place funding will be met mainly by deductions from the relevant local authorities’ dedicated schools grant ( DSG ), so that the AP they offer is fully integrated into local planning and funding arrangements. More information is available in schools revenue funding 2016 to 2017 operational guide .
The authority proforma tool is the spreadsheet local authorities use to submit their agreed mainstream pre-16 schools block funding formula to EFA .
EFA applies the factors and rates in each authority’s formula to academies’ pupil numbers to calculate their schools block allocation. More information is available in schools revenue funding 2016 to 2017 operational guide .
Also known as AWPU - see AWPU .
The grant is paid in support of local authorities’ schools budget. It is the main source of income for the schools budget. Local authorities are responsible for determining the split of the grant between central expenditure and the individual schools budget ( ISB ) in conjunction with their schools forums.
It is divided into three blocks: the schools block, the high needs block and the early years block. For the schools block, local authorities are responsible for allocating the ISB to individual schools in accordance with the mainstream pre-16 local schools’ funding formula. Academies’ funding for the 2016 to 2017 academic year is based on their local authority’s 2016 to 2017 financial year funding formula.
More information is available in dedicated schools grant ( DSG ): 2016 to 2017 .
Deprivation is a compulsory funding factor in local authorities’ mainstream pre-16 schools block funding formula that directs funding to the most deprived pupils. Local authorities can choose to use free school meals ( FSM ) data and/or the income deprivation affecting children index ( IDACI ). More information is available in schools revenue funding 2016 to 2017 operational guide .
The dedicated schools grant ( DSG ) is divided into three blocks: the schools block, the high needs block and the early years block. The early years block covers the free entitlement for 3 and 4 year olds, and disadvantaged 2 year olds.
This applies to private, voluntary and independent providers and to schools or academies with a nursery class. This is paid directly by local authorities to all early years providers, including academies and maintained schools, through the early years single funding formula ( EYSFF ). More information about early years funding is available.
This is additional funding for early years settings to improve the education they provide for disadvantaged 3 and 4 year-olds. Guidance for local authorities is available.
The route by which local authorities fund early years providers. This is made up of a base rate for each type of provider plus supplements (local funding factors).
This is per pupil funding paid to academies for services that for maintained schools are provided by their local authority, for example school improvement and asset management. For academic year 2016 to 2017 the rate is £77 per pupil. The rate differs for alternative provision ( AP ) settings and special academies. For academic year 2016 to 2017 the rates for AP academies and special academies are £288.75 and £327.25 per place respectively.
Local authorities receive ESG for their maintained school pupils. They also receive ESG retained duties funding to meet their responsibilities for both maintained schools and academies. For 2016 to 2017 academic year this is paid at a rate of £15 per pupil.
We have provided academies with a protection to limit reductions to their budgets in 2016 to 2017 as a result of the changes to ESG . Each academy will have its own level of protection based upon its level of ESG per pupil received in academic year 2015 to 2016, and will lose no more than 3% of their total funding. More information is available in education services grant: 2016 to 2017 .
We will be removing the ESG general funding rate from academic year 2017 to 2018, as announced in the first stage of our consultation on introducing a schools national funding formula . The ESG retained duties will be moved into the dedicated schools grant ( DSG ) and paid to local authorities on a per pupil rate.
Another term for high needs top-up funding - see high needs top-up funding .
This is an optional funding factor in local authorities’ mainstream pre-16 schools block funding formula. EAL pupils may attract funding for up to 3 years after they enter the statutory school system. More information is available in schools revenue funding 2016 to 2017 operational guide .
Local authorities can apply to EFA to use exceptional factors relating to premises in their mainstream pre-16 schools block funding formula. The exceptional factors most frequently approved by EFA are for rents and for joint-use sports facilities. More information is available in schools revenue funding 2016 to 2017 operational guide .
Arrangements by which children from low income households are provided with a free meal while they are at school. Arrangements vary locally.
From September 2014, free school meals have been extended to all pupils in reception to year 2, under the universal infant free school meals (UIFSM) programme.
Local authorities can use the number of pupils eligible for a free school meal in a school as an indicator for the deprivation factor in their mainstream pre-16 schools block funding formula (see deprivation ). Pupils who are eligible for a free school meal under the UIFSM programme due to age do not automatically attract deprivation funding. Eligible pupils must be registered for a free school meal for their school to attract this funding.
Pupils eligible for a free school meal at any point in the previous six years also forms the basis of funding schools receive for the deprivation pupil premium. More information is available in schools revenue funding 2016 to 2017 operational guide .
This is the term used for the general annual grant statement detailing academies’ revenue funding. Funding allocation pack guidance for 2016 to 2017 is available.
Local authorities can use up to 13 funding factors to form their mainstream pre-16 schools block funding formula. Two factors (basic entitlement and deprivation) are compulsory. More information is available in schools revenue funding 2016 to 2017 operational guide .
Revenue funding for academies. Academies are expected to meet their day to day running costs from the GAG .
The dedicated schools grant ( DSG ) is divided into three blocks: the schools block, the high needs block and the early years block. The high needs block covers place funding for special schools/academies and units, top-up funding for high needs pupils, alternative provision and education otherwise than at school, and funding for local authority central SEN services. More information is available in dedicated schools grant: conditions of grant 2016 to 2017 .
This applies to mainstream schools and academies with a designated special unit or resourced provision, plus mainstream special schools and special academies. £10,000 place funding is provided for each agreed pre-16 high needs place. This is paid directly to academies by the EFA and forms part of the budget share for maintained schools. Post-16 high needs places in special units, resourced provision or sixth forms are funded through the national post-16 formula. More information is available in schools revenue funding 2016 to 2017 operational guide and high needs funding arrangements 2016 to 2017 .
For pre-16 pupils, this is paid directly by the commissioning local authority for high needs pupils where the total cost exceeds the following thresholds. In the case of special units, the cost threshold is £10,000 and includes the costs of all pupils’ basic educational entitlement, which is funded through the place funding. If the pupil is not in a unit, the cost threshold is £6,000, which only covers the costs of additional SEN support. More information is available in schools revenue funding 2016 to 2017 operational guide and high needs funding arrangements 2016 to 2017 guidance.
Hospital education places can be found in maintained special schools (usually a particular type of special school known as a hospital school), maintained PRUs (sometimes known as medical PRUs ), special and AP academies and free schools. Often these institutions will have a combination of hospital education places and other high needs ( AP and SEN ) places. The requirement in the current regulations is for hospital education places in maintained schools and PRUs to be funded in 2016 to 2017 at the same level per place as in 2015 to 2016. More information is available in high needs funding arrangements: 2016 to 2017 .
The income deprivation affecting children index ( IDACI ) measures the number of children in a given area who are under the age of 16 and live in low income households. Local authorities’ mainstream pre-16 schools block funding formula can use a combination of IDACI categories and/or free school meals data to allocate their funding under the deprivation factor. Separate per pupil rates can be paid for 6 categories of the IDACI index, and for the primary and secondary phases. For 2016 to 2017 local authorities will use the updated IDACI 2015 bands.
More information can be found in academies funding allocation pack 2016 to 2017 academic year .
A term used to describe funding based on the previous year’s census. For example, funding for 2016 to 2017 for most academies will be based on census data from the autumn 2015 census.
An optional factor in local authorities’ mainstream pre-16 schools block funding formula but only for the 5 local authorities to which it applies (Buckinghamshire, Essex, Hertfordshire, Kent and West Sussex). The purpose of this factor is to support schools that have to pay higher teacher salaries because they are in the London fringe area, and where only part of the authority is in this area. It is applied as a multiplier to relevant factors. More information is available in schools revenue funding 2016 to 2017 operational guide .
The term ‘looked after’ refers to children under 18 who have been provided with care and accommodation by children’s services. For academic year 2016 to 2017 funding the looked after children factor of local authorities’ mainstream pre-16 schools block funding formula covers all children who have been looked after for a day or more in the 2014 to 2015 financial year. More information is available in schools revenue funding 2016 to 2017 operational guide .
An optional funding factor in local authorities’ mainstream pre-16 schools block funding formula, although for academic year 2015 to 2016 it was used by all local authorities. Local authorities can set different lump sums for primary and secondary schools (middle schools receive a weighted average based on the number of year groups in each phase). The maximum lump sum is £175,000, including London fringe uplift. More information is available in schools revenue funding 2016 to 2017 operational guide .
An academy that isn’t a special or AP academy. Its pre-16 pupils are funded through the local mainstream funding formula rather than high needs place funding. Mainstream academies may have a special unit or resourced provision which is funded through high needs place funding, and/or a sixth form which is funded using the national 16-19 funding formula, and/or nursery classes funded through the early years single funding formula ( EYSFF ).
The MFG is a protection against changes in per pupil school budget share ( SBS ) funding between academic years. The amount of protection received by individual academies will depend on the impact of local changes in the mainstream pre-16 schools block funding formula and the effect of these on per pupil rates. The floor remains at -1.5% for 2016 to 2017. More information is available in schools revenue funding 2016 to 2017 operational guide .
An optional funding factor in local authorities’ mainstream pre-16 schools block funding formula. ‘Mobility’ refers to pupils who started the school at an unusual time during the last three academic years, that is not in August or September (or not in January for pupils joining in reception). This factor allows funding to be targeted at schools experiencing levels of pupil mobility in excess of 10% of the whole school cohort. More information is available in schools revenue funding 2016 to 2017 operational guide .
DfE has published proposals for a new national funding formula for schools, high needs and early years funding. In March 2016 DfE published proposals to make the distribution of schools and high needs funding fairer, and in August 2016 DfE published proposals on early years funding reforms. These consultations have now closed.
More information is available in schools national funding formula , high needs funding formula and other reforms and early years funding: changes to funding for 3 and 4 year olds .
An academy’s national non-domestic rates ( NNDR ) are refunded by EFA on receipt of a claim using an online form .
Local authorities will have identified a notional special educational needs ( SEN ) budget in each school budget share. This is called notional because it is not a ring-fenced budget and academies can make their own decisions about how much to spend on SEN support given the needs of their pupils. The notional SEN budget can be used for high incidence, low cost pupils with SEN and to support the first £6,000 additional costs which schools must contribute for high needs pupils. Local authorities can retain funding to provide targeted support to schools whose notional SEN budget is insufficient. More information is available in schools revenue funding 2016 to 2017 operational guide .
EFA pays a general annual grant ( GAG ) to academies in monthly instalments. Remittance advice noted accompany payments. More information is available on the funding payments for academies page.
The PE and sport grant is additional funding given to publicly-funded schools in England to improve physical education (PE) and sport in primary schools. More information about the use of the grant is available in PE and sports premium for primary schools guidance, and information on funding rates for 2016 to 2017 is available in PE and sport premium: funding conditions for 2016 to 2017 guidance.
Funding based on the national 16-19 funding formula. For academies with sixth forms, this might be referred to as sixth form funding. It is also an optional funding factor in local authorities’ mainstream pre-16 schools block funding formula, but can only be used in 2016 to 2017 where the local authority had such a factor in 2015 to 2016. More information is available in schools revenue funding 2016 to 2017 operational guide .
Free schools, studio schools and university technical colleges ( UTCs ) are provided with a post-opening grant to reflect the additional costs in establishing a new publicly-funded school which cannot be met through the general annual grant ( GAG ). The post-opening grant provides funding in two elements as the free school grows: non-staffing resources, paid on a per pupil basis, and a leadership diseconomies grant.
Usually associated with revenue funding for reception to year 11 pupils.
An optional funding factor in local authorities’ mainstream pre-16 schools block funding formula, although it is used by nearly all local authorities. It often acts as a proxy indicator for low level, high incidence special educational needs. More information is available in schools revenue funding 2016 to 2017 operational guide .
An optional funding factor in local authorities’ mainstream pre-16 schools block funding formula. The purpose of this factor is to support schools that have unavoidable extra premises costs because they are a PFI school and/or to cover situations where the PFI ‘affordability gap’ is delegated and paid back to the local authority. More information is available in schools revenue funding 2016 to 2017 operational guide .
EFA carry out a pupil number adjustment ( PNA ) for academies that receive funding based on estimated pupil numbers. The adjustment is calculated using schools census data to make sure funding more accurately reflects the actual pupil numbers present during the year. More information is available on the academies revenue funding allocations page.
Pupil premium is a grant for publically funded schools in England to raise the attainment of disadvantaged pupils. The grant is payable to each pupil who has been eligible for free school meals at any time in the last six years, or who is looked after/adopted from care, or who has been a service child in the last 5 years. More information is available in pupil premium: funding and accountability for schools guidance .
Resourced provision is where education takes place mainly in the classroom, but pupils are either withdrawn to a resource for specialist input or teachers from the resource deliver specialist help to the child within the classroom.
RFDC is the annual collection of pupil data for those institutions funded on estimated pupil numbers, as determined by their funding agreement.
SBS forms the majority of the general annual grant ( GAG ) and is calculated by EFA using the funding factors determined by the local authority. More information is available in the schools revenue funding 2016 to 2017 operational guide .
The dedicated schools grant ( DSG ) is divided into three blocks: the schools block, the high needs block and the early years block. The schools block relates to pupils in national curriculum year groups reception to 11 at mainstream schools and academies who are not in a special unit or resourced provision (who are funded from the high needs block). More information is available in schools revenue funding 2016 to 2017 operational guide .
The schools forum is a body comprising representatives of maintained schools, academies, and early years providers within a local authority area, together with other local partners and stakeholders. The role of the schools forum is to advise the council on matters affecting schools funding – principally the allocation of dedicated schools grant ( DSG ), and the local funding formulae which distribute budgets to schools, early years providers and other maintained education settings. It has some decision making powers, mainly in relation to central schools block expenditure. More information is available in schools forum: a guide for schools and academies .
An optional funding factor in local authorities’ mainstream pre-16 schools block funding formula. Schools that are eligible for sparsity funding must meet two criteria: first, they are located in areas where pupils would have to travel a significant distance to an alternative should the school close, and second, they are small schools. More information is available in schools revenue funding 2016 to 2017 operational guide .
An optional funding factor in local authorities’ mainstream pre-16 schools block funding formula. The purpose of this factor is to support schools which have unavoidable extra costs because the school buildings are on separate sites. Allocations must be based on objective criteria, both for the definition of a split site and for how much is paid. More information is available in schools revenue funding 2016 to 2017 operational guide .
Start-up grant is paid to sponsored academies. From September 2013 this was limited to full sponsored academies only. There are two elements, part A and part B. Part A is a flat rate allocation that is paid in the first year of opening. Part B is a formulaic allocation that is intended to contribute to costs, such as leadership, as a new academy grows towards full capacity. Consequently, part B may be paid over a number of years as the academy grows.
More information is available in the academies funding allocation pack: 2016 to 2017 academic year .
The universal infant free school meals (UIFSM) grant is funding for schools to provide free school meals to all pupils in reception, year 1 and year 2. More information is available in UIFSM: guide for local authorities and schools .
Published: 25 February 2015
Updated: 2 November 2016
From: Education Funding Agency


FADN 303: Web Design
USC Roski School of Art and Design
WEEK 4:
Browser Tools
Aaron Siegel | | Spring 2016
View Source
Inspector
W3C Validator
This tool is provided to evaluate web site code for proper syntax and any errors.
Resources
Chrome DevTools Overview
Firefox Page Inspector
W3C Validator


Every single device is descended from the {@link se.mah.elis.adaptor.building.api.entities.devices.Device} base interface. They are then divided into two categories: {@link se.mah.elis.adaptor.building.api.entities.devices.Sensor}s and {@link se.mah.elis.adaptor.building.api.entities.devices.Actuator}s. The key difference between the two is that a sensor device measures its environment, whereas an actuator manipulates it. The sensor class of devices is further divided into the two {@link se.mah.elis.adaptor.building.api.entities.devices.Detector} and {@link se.mah.elis.adaptor.building.api.entities.devices.Sampler} interfaces, which provide functionality for sampling and event creation. Note that there are some sensors that fall outside of any of those two categories. Furthermore, a device can be both a sensor and an actuator. This is reflected in the API, where for example the {@link se.mah.elis.adaptor.building.api.entities.devices.Thermostat} interface extends both the {@link se.mah.elis.adaptor.building.api.entities.devices.Thermometer}, which is a sensor, and the {@link se.mah.elis.adaptor.building.api.entities.devices.Actuator} interfaces. As is the case with all interfaces, any implementation of those interfaces can choose freely what interfaces to implement, giving way for multi-capable devices.
However, the above isn't entirely true. The {@link se.mah.elis.adaptor.building.api.entities.devices.Gateway} interface, that is used to describe a gateway device isn't considered a device on its own merits. Instead, it is considered a special case of a {@link se.mah.elis.adaptor.building.api.entities.devices.DeviceSet}, with some extra information regarding addressing, identification and so on. In the case where an actual gateway has sensory or actuating capabilities, the proper implementation of such a gateway object would have to implement the gateway class as both a {@link se.mah.elis.adaptor.building.api.entities.devices.Device} and a {@link se.mah.elis.adaptor.building.api.entities.devices.Gateway}.
Also provided in this package are various auxiliary interfaces, that can be used as capabilities to the device objects. One such example is the {@link se.mah.elis.adaptor.building.api.entities.devices.BatteryEquipped} interface.
@since 1.0


{% extends "base.html" %} {% block content %} {% include "questions/question_form.html" with object=object %} {% endblock content %}


Some usage cases are presented via the examples below. Look into the source code of each example's page for the details of implementation.
Simple configuration of a page to animate a serie of radar images.
Overlay of satellite and radar images, inclusive on-off-switch.
Animation of lightnings (defined as a vector source). The lightning symbols can be changed via buttons.
Prove of concept for the usage with Leaflet.
Simple sounding plot with default options.
Parcel lifts can be added to soundings. With a few lines of code, a parcel lift by click is drawn.
The diagram can also be inserted directly into a raw SVG. Here's an example of a A4 print template.
An example of a wide diagram, with an additional ϴe diagram.
Several examples how to style the hodograph.
Tests of each diagram type with external images.
Several examples of the usage of the timeline objects.
Several examples of the usage of the animation object.


public class SimpleServletPostProcessor extends java.lang.Object implements DestructionAwareBeanPostProcessor, ServletContextAware, ServletConfigAware
BeanPostProcessor
that applies initialization and destruction callbacks to beans that
implement the Servlet
interface.
After initialization of the bean instance, the Servlet init
method will be called with a ServletConfig that contains the bean name
of the Servlet and the ServletContext that it is running in.
Before destruction of the bean instance, the Servlet destroy
will be called.
Note that this post-processor does not support Servlet initialization parameters. Bean instances that implement the Servlet interface are supposed to be configured like any other Spring bean, that is, through constructor arguments or bean properties.
For reuse of a Servlet implementation in a plain Servlet container
and as a bean in a Spring context, consider deriving from Spring's
HttpServletBean
base class that
applies Servlet initialization parameters as bean properties, supporting
both the standard Servlet and the Spring bean initialization style.
Alternatively, consider wrapping a Servlet with Spring's
ServletWrappingController
.
This is particularly appropriate for existing Servlet classes,
allowing to specify Servlet initialization parameters etc.
Servlet.init(javax.servlet.ServletConfig)
,
Servlet.destroy()
,
SimpleServletHandlerAdapter
| 构造器和说明 |
|---|
SimpleServletPostProcessor() |
| 限定符和类型 | 方法和说明 |
|---|---|
java.lang.Object |
postProcessAfterInitialization(java.lang.Object bean,
java.lang.String beanName)
Apply this BeanPostProcessor to the given new bean instance after any bean
initialization callbacks (like InitializingBean's
afterPropertiesSet
or a custom init-method). |
void |
postProcessBeforeDestruction(java.lang.Object bean,
java.lang.String beanName)
Apply this BeanPostProcessor to the given bean instance before its
destruction, e.g. invoking custom destruction callbacks.
|
java.lang.Object |
postProcessBeforeInitialization(java.lang.Object bean,
java.lang.String beanName)
Apply this BeanPostProcessor to the given new bean instance before any bean
initialization callbacks (like InitializingBean's
afterPropertiesSet
or a custom init-method). |
boolean |
requiresDestruction(java.lang.Object bean)
Determine whether the given bean instance requires destruction by this
post-processor.
|
void |
setServletConfig(ServletConfig servletConfig)
Set the
ServletConfig that this object runs in. |
void |
setServletContext(ServletContext servletContext)
Set the
ServletContext that this object runs in. |
void |
setUseSharedServletConfig(boolean useSharedServletConfig)
Set whether to use the shared ServletConfig object passed in
through
setServletConfig , if available. |
public void setUseSharedServletConfig(boolean useSharedServletConfig)
setServletConfig
, if available.
Default is "true". Turn this setting to "false" to pass in a mock ServletConfig object with the bean name as servlet name, holding the current ServletContext.
public void setServletContext(ServletContext servletContext)
ServletContextAware
ServletContext
that this object runs in.
Invoked after population of normal bean properties but before an init
callback like InitializingBean's afterPropertiesSet
or a
custom init-method. Invoked after ApplicationContextAware's
setApplicationContext
.
setServletContext
在接口中 ServletContextAware
servletContext
- the ServletContext object to be used by this objectInitializingBean.afterPropertiesSet()
,
ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext)
public void setServletConfig(ServletConfig servletConfig)
ServletConfigAware
ServletConfig
that this object runs in.
Invoked after population of normal bean properties but before an init
callback like InitializingBean's afterPropertiesSet
or a
custom init-method. Invoked after ApplicationContextAware's
setApplicationContext
.
setServletConfig
在接口中 ServletConfigAware
servletConfig
- the ServletConfig
to be used by this objectInitializingBean.afterPropertiesSet()
,
ApplicationContextAware.setApplicationContext(org.springframework.context.ApplicationContext)
public java.lang.Object postProcessBeforeInitialization(java.lang.Object bean, java.lang.String beanName) throws BeansException
BeanPostProcessor
afterPropertiesSet
or a custom init-method). The bean will already be populated with property values.
The returned bean instance may be a wrapper around the original.
The default implementation returns the given bean
as-is.
postProcessBeforeInitialization
在接口中 BeanPostProcessor
bean
- the new bean instancebeanName
- the name of the beannull
, no subsequent BeanPostProcessors will be invokedBeansException
- in case of errorsInitializingBean.afterPropertiesSet()
public java.lang.Object postProcessAfterInitialization(java.lang.Object bean, java.lang.String beanName) throws BeansException
BeanPostProcessor
afterPropertiesSet
or a custom init-method). The bean will already be populated with property values.
The returned bean instance may be a wrapper around the original.
In case of a FactoryBean, this callback will be invoked for both the FactoryBean
instance and the objects created by the FactoryBean (as of Spring 2.0). The
post-processor can decide whether to apply to either the FactoryBean or created
objects or both through corresponding bean instanceof FactoryBean
checks.
This callback will also be invoked after a short-circuiting triggered by a
InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
method,
in contrast to all other BeanPostProcessor callbacks.
The default implementation returns the given bean
as-is.
postProcessAfterInitialization
在接口中 BeanPostProcessor
bean
- the new bean instancebeanName
- the name of the beannull
, no subsequent BeanPostProcessors will be invokedBeansException
- in case of errorsInitializingBean.afterPropertiesSet()
,
FactoryBean
public void postProcessBeforeDestruction(java.lang.Object bean, java.lang.String beanName) throws BeansException
DestructionAwareBeanPostProcessor
Like DisposableBean's destroy
and a custom destroy method, this
callback will only apply to beans which the container fully manages the
lifecycle for. This is usually the case for singletons and scoped beans.
postProcessBeforeDestruction
在接口中 DestructionAwareBeanPostProcessor
bean
- the bean instance to be destroyedbeanName
- the name of the beanBeansException
- in case of errorsDisposableBean.destroy()
,
AbstractBeanDefinition.setDestroyMethodName(String)
public boolean requiresDestruction(java.lang.Object bean)
DestructionAwareBeanPostProcessor
The default implementation returns true
. If a pre-5 implementation
of DestructionAwareBeanPostProcessor
does not provide a concrete
implementation of this method, Spring silently assumes true
as well.
requiresDestruction
在接口中 DestructionAwareBeanPostProcessor
bean
- the bean instance to checktrue
if DestructionAwareBeanPostProcessor.postProcessBeforeDestruction(java.lang.Object, java.lang.String)
is supposed to
be called for this bean instance eventually, or false
if not needed


Toggle navigation
Phase 0 Blog
Home
Blog
Projects
Main Project Page
Electronics
Dev Bootcamp
About
Unit 1
Week 1 Technical - GitHub Overview
Week 1 Cultural - Fireside Chat Response
Week 2 Technical - CSS Classes vs. IDs
Week 3 Technical - Arrays and Hashes
Week 3 Cultural - Learning Style
Unit 2
Week 4 Technical - Enumerable Methods and Map
Week 4 Cultural - Accessibility Design
Week 5 Technical - Ruby Classes
Week 5 Cultural - Pairing and Feedback
Week 6 Technical - OOP Concepts
Week 6 Cultural - Stereotype Threat
Unit 3
Week 7 Technical - Ruby vs JS
Week 7 Cultural - Values
Week 8 Technical - Sorting Algorithms
Week 8 Cultural - Sources of Conflict
Week 9 Technical - Website Updates
Week 9 Cultural - Asking Good Questions


NINE MONTHS A film review by Joan Ellis Copyright 1995 Nebbadoon Syndicate
NINE MONTHS is certainly the longest pregnancy I have ever experienced. It is a very silly movie. Whether it is also funny will depend on you.
Pregnant Becca (Julianne Moore) is stranded in the current stereotype of the young woman who lives with a man she loves in an arrangement that includes hard work and fun, but not marriage or, God forbid, children. Why would the "he" of this movie want responsibility or commitment when the woman of his dreams is already in his bed, and a red Porsche and San Francisco Bay are immediately outside the window of his perfect apartment?
When Becca decides her clock is ticking, she has a tough conversion on her hands in the person of her lover, Samuel, who is played--dare I say the words--by Hugh Grant. For one hour and forty-two minutes we watch Hugh pout, growl, and overact. It would be nice to think he is trying to lift the movie upward, but it is remotely possible that he thinks the audience just can't get enough of him. So overdone is his mugging that the pregnant woman becomes the movie's brightest spot. Actress Julianne Moore is a very appealing actress and has all the right reactions to the ludicrous chaos that surrounds her.
On their first visit to the delivering O.B., Becca and Samuel run smack into Dr. Kosevich (Robin Williams), a newly arrived Russian veterinarian who has recently decided to switch his specialty to babies. Williams causes a lot of spontaneous laughter with his malapropisms. He calls for "Anastasia" to anesthetize and discusses Becca's "Volvo" with gentle discretion.
Williams is very funny here, but he carries the rest of the cast straight into the familiar spectacle of Americans falling from farce to slapstick whenever they try a British specialty. The whole silly thing dissolves finally into a hospital scene full of enough fuzzy love to please Newt and the whole of America's heartland. This might have been a romantic comedy or a zany farce, but no one made the choice, so we have a little of everything and a whole lot of nothing.
And then there's the "incident." Although there can't be many Americans who would be shocked by a celebrity indulging in one-stop shopping, it may not be what people most want from the charming, awkward bumbler they had come to love in FOUR WEDDINGS AND A FUNERAL. The box office will tell whether the laughter that rocks the theater at the sight of his face is derisive or affectionate. It hardly matters; the movie is still a bust.
Let's not blame the whole thing on Hugh Grant. Writer/director Chris Columbus has the distinction of creating three of the most intolerable movies ever made: MRS. DOUBTFIRE and those violent assaults on sensibility, the HOME ALONEs. NINE MONTHS is not as excruciatingly bad as the others. Let's assume Columbus is in a lull.
Film Critic : JOAN ELLIS Word Count : 489 Studio : 20th Century Fox Rating : PG-13 Running Time: 1h42m
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


<div>
The <div> element is used to organize subsets of content into logical groups that are not intended to be or should not be contained as a topic.
Category: Body elements


Before Change
self.name = model
try:
self.converter = load(open(new_path+"converter.bin","rb"))
try:
self.scorer = load(open(new_path+"scorer.bin","rb"))
except:
pass
After Change
// check for scorer
// give always preference to scorer bin files
if os.path.isfile(new_path+"scorer.bin"):
self.scorer = load(open(new_path+"scorer.bin","rb"))
// second preference is given to matrix files
elif os.path.isfile(new_path + "matrix"):
self.scorer = read_scorer(new_path + "matrix")
// if none of the above fits, leave it
else:
pass
// read information from the info-file
self.info = {}
info = codecs.open(new_path+"INFO","r","utf-8").read()


Remains of five more victims of Mexican Mormon killings are buried
RANCHO LA MORA, México: The remains of a Mormon woman and her four children murdered in northern Mexico were taken by road Friday (Nov 8) from their home village to be buried in a family plot in Chihuahua state.
A convoy of vehicles bearing the coffins of Rhonita Miller and her children left Rancho la Mora, in the border area between Mexico's violent northern states of Sonora and Chihuahua, for the family's burial plot in the LeBaron neighborhood in nearby Galeana.
Miller and her children died with four other people in a hail of bullets Monday on a rural road in the lawless region. All had dual US-Mexican citizenship.
Four of the victims were buried in the first of the funerals on Thursday.
Mexican investigators say the victims, three women and six children, could have been mistaken for rivals of a drug trafficking cartel called La Linea.
But relatives -- who have campaigned against the criminal groups that have taken over the area -- insist the attack was deliberate.
"It was not an attack on us, but there is confusion - someone is wanting to send a message and they used our family," said Adrian LeBaron, Miller's father.
On Thursday, relatives and friends of the Mormon community from various parts of the United States attended the funeral service for Dawna Langford and her two children.
Langford, 43, was buried along with her sons Trevor, 11, and Rogan, two.
The attack happened on an isolated dirt road in a region known for turf wars between drug cartels fighting over lucrative trafficking routes to the United States.
Eight children managed to escape, six of them wounded. One 13-year-old boy helped the younger ones hide, then walked 22km home to get help.
The families involved - the Langfords, Millers and LeBarons - are part of a large group of US Mormons who emigrated to Mexico in the late 19th century, fleeing persecution for their traditions, including polygamy.


Hong Kong police storm Polytechnic University as protesters set fires to entrance
by Bradford BetzHong Kong police on Monday stormed Polytechnic University where anti-government protesters have hunkered down for days amid violent clashes with police.
Fiery explosions could be seen inside the university as riot officers entered before dawn Monday. By daybreak, police had made a handful of arrests while protesters remained in control of most of the campus.
Police fired tear-gas barrages late Sunday at protesters outside the campus after an ultimatum to come out expired. The police had surrounded the university to prevent protesters from escaping as they moved in.
The protesters, numbering around 200 people, had assembled an arsenal of petrol bombs and bows and arrows to resist.
An officer from the media liaison team was stuck in the leg by an arrow around 2 p.m. and taken to police headquarters.
The protesters had also set fires on bridges leading to the university to keep police from advancing on their campus stronghold.
Orange flames extended the length of a footbridge over the roadway entrance to the Cross-Harbour tunnel.
Earlier Sunday, police had shut down access to the area and massed to surround the protesters, prompting some to retreat inside the campus while others remained outside to deter any advance.
Another fire was set on a bridge over the toll booths for the tunnel. Protesters have blocked access to the tunnel for days and set fires in the toll booths.
The use of bows and arrows and catapult-launched gasoline bombs threatened to escalate the violence in the more than five-month anti-government demonstrations.
“If people point their fingers at the police and play the blame game, accusing of provoking violence in universities and causing social unrest, we have stressed repeatedly that police officers are in reactive mode,” he said. “If rioters did not commit dangerous and destructive acts, there is no reason for police to respond with force.”
The initial protests were sparked by a bill that would have allowed the extradition of criminal suspects to the mainland. Activists saw it as an erosion of Hong Kong's autonomy under the "one country, two systems" formula implemented in 1997, when Britain returned the territory to China.
CLICK HERE TO GET THE FOX NEWS APP
The bill was withdrawn, but protests have expanded into wider resistance against what has been perceived as the encroachment of Beijing, along with calls for full democracy for the territory.
Fox News' Travis Fedschun and The Associated Press contributed to this report.


Step three: learn about the main child elements of the <mei>
root element: <meiHead>
and <music>
.
Well done! Now, that we have declared a namespace within our root element, all other elements nested in the root element can be resolved according to the MEI namespace by machine-processing.
As already mentioned, you can think of an XML document like a tree that branches from one (outer) root element to nested (inner) child elements. A MEI-encoded file contains at least two structures within the<mei>
root element:
<meiHead>
- contains a set of elements that supply metadata related to the MEI encoding, including
bibliographic information, responsibility statements, encoding standards, or provenance.
<music>
- contains a set of elements that provide for the encoding of the actual musical content.
Beside others, it may comprise structural elements to describe the form of a musical piece (sections,
movements, document groups), or notational elements, like e.g. notes, rest, articluations, or dynamics.
In the editor below, add a <meiHead>
and a <music>
element inside the
<mei>
root element.


{#{% extends "team/base.html" %}#}
{% load user_tags %}
{% load staticfiles %}
{% block css %}
{% endblock %}
{% block pageTitle %}
Bookings
{% endblock %}
{% block content %}
{# #}
| Date |
Booking ID |
LR Number |
Company Name |
Company Code |
Supplier Name |
From |
To |
Lorry No. |
{# {% if not user|has_group:"emp_group3" %}#}
Total Amount to Company |
Party Weight |
Party Rate |
Customer's Balance |
Refund Amt |
TDS |
Billed Customer |
Billed Cust Code |
Invoice Number |
Invoice Date |
{# {% endif %}#}
Total Amount to Owner |
Supplier Weight |
Supplier Rate |
Supplier's Balance |
POD Status |
Invoice Status |
Inward Payment Status |
Outward Payment Status |
Source Office |
Destination Office |
Delivered Date |
Id |
status_color_code |
Color Coding for Booking ID Background
| Full payment received (zgreen) |
|
| POD not yet received (zred) |
|
| POD received but invoice not submitted(zorange) |
|
| POD received and invoice submitted(zpurple) |
|
| Rate details not yet entered(zblue) |
|
{#
#}
{% endblock %}
{% block js %}
{% endblock %}


Healthcare App Development: Top Trends, Features & Types
Developing a custom mobile healthcare application can be challenging. Check out this detailed guide with trends, types, design aspects for building a Healthcare App. We have covered the Features of Patients’ App, Doctors’ App and Healthcare Information Systems. Also we have covered more than 10 Types of Healthcare Apps.
Polluted air is a serious concern for many residents. This is an extreme case where even if you’re not in an area directly impacted by the wildfires, you are still at risk as smoke can travel hundreds of miles from the burning site. In such cases, Doctor on Demand, A leading virtual care provider in the US is proving to be a huge help.
With this app, it is possible to guide thousands of people on what they can do to avoid any harmful effects from the air. It is providing virtual medical help to people who are suffering from troubled breathing, coughing and skin & eye irritation. Apps like Doctor on Demand are a great option and allow those to stay safe inside their home, while still getting the high-quality care they need — 24/7, including weekends.
Due to versatile requirements and ability to assist patients remotely, virtual healthcare app is in a rising demand. If you’re one of those who is looking forward to this as an option, you’ve come to the right place. Or maybe you’ve set your mind on this but not sure what functionalities and features you want to include.
In this blog, we evaluate the healthcare app development for you. We will see what are the necessary features that you should include in your next healthcare app.
Quick Overview
- Types and Features of a Healthcare App
- Patient App
- Doctor App
- Healthcare Information System
-
Examples of Healthcare Apps
- Electronic Health Record App
- Doctor-on-Demand App
- Medication Reminder App
- Symptoms Checker App
- ePrescription App
- Health & Wellness Apps
- Chronic Condition Specific App
- Women Wellness Apps
- Urgent Care App
- Hospital Wayfinding App
Healthcare App Development: Features
Let’s look at some of the prominent features that are important for your healthcare app and discuss them.
Features of Patient App
#1. Appointment: In a world where everything is becoming one-click away, why not book an appointment with a doctor? Booking an online appointment not only saves time by eliminating queue waiting but it is a way more convenient way for both doctors and patients.
This is an integrated and reliable feature in healthcare app that can facilitate timely access to consultation from anywhere in the world by connecting experienced doctors. Here’s how it works:
Step 1: Users registers and fills out the necessary information.
Step 2: Select the doctor as per your requirement.
Step 3: Select the doctor and book an appointment as per the availability. You may also mention brief information about your problems.
Step 4: Once the appointment is confirmed you may view it in the schedule section.
Step 5: Before users actually visit the doctor, they have the option to easily upload and share health-related information and documents online.
To integrate the appointment booking, there are plenty of API + Webhooks available for you to integrate within the app. One such example is Calendly which gives the custom integration within the product.
#2. Telemedicine: Doctors feel telemedicine is an effective way to monitor and treat chronic conditions than the regular 10-minute one-on-one conversation. Currently, healthcare app is drastically changing the way doctor and patients interact with each other in spite of the geographical distance.
Its adoption has increased by 59% in the past year. Telemedicine includes in-app chat through text or video. Here’s how it works:
- Step 1: Answer a few questions regarding symptoms.
- Step 2: Choose an available doctor from the list.
- Step 3: Choose a convenient time-slot for an e-visit.
- Step 4: Receive an e-visit confirmation from a doctor.
- Step 5: Make a video/voice call at an agreed hour.
However, for treatments which rely on physical cue needs an in-person examination. This can be replaced with photo-based consultation. This is for treatments like skin problems, bruises, eye infections, etc. In photo-based consultation, the app allows the patients to take a photograph which is stored on a separate server and can be accessed from the doctor’s app only.
Further, the doctor can diagnose and message appropriate details to the patients. If more information is required, the doctor may schedule a video call and also send lab test orders via the app.
In a survey of medical school HCPs and students, more than 80% of respondents described using mobile devices to communicate with colleagues about patient care via email, text or multimedia message. This clearly demonstrates how critical this feature is for not only patients but doctors as well.
For real-time text, audio or video can be powered through WebRTC and cloud infrastructure. You may also opt for Twilio SDK for real-time communication. Dr-on-Demand uses Twilio APIs for facilitating remote diagnosis.
#3. e-Prescription: With an e-Prescription feature, doctors can generate and send prescriptions without any errors. This saves time along with improvement in communications and patients satisfaction. This also enables doctors to view prescription insurance formulary information and also comprises all the information in electronically-connected pharmacies.
Here’s what this feature can do and why it is an added advantage:
- Generate complete medication list along with dosage and other important details.
- This makes it easy for doctors to understand the patient’s history if they have visited any other doctors in the past.
- This also streamlines workflow processes and provides more mobility. With an e-Prescription feature, prescribers will be able to write and renew prescriptions from just anywhere.
- Tampering with prescriptions is not possible.
- Built-in pharmacy look-up for pharmacies providing the particular drugs.
e-Prescriptions, when integrated with patient’s electronic health records, enables you to log the information. This helps in creating a detailed view of a patient’s care over time.
However, to enable this feature, there are various compliances which you will need to take care about which we will discuss in the architecture section.
- Health Insurance Portability and Accountability Act (HIPAA)
- Health Level 7 International (HL7)
- Food and Drug Administration (FDA)
- U.S. Department of Health and Human Services (HHS)
- HITECH’s Meaningful Use Stage 1 and 2 (MU-1 & MU-2)
- Integrated with EPA (Electronic Prior Authorization), and Certified with EPCS
e-Prescription can be facilitated with Twilio APIs. These APIs can be integrated with the custom product. It can send copies of the e-Prescription through SMS, email or WhatsApp.
#4. EHR: Electronic Healthcare Records is a feature both for patients and doctors. This gives them the facility to access all of their health records in a single space. This feature of data collection and retrieval often includes the following information:
- * Identify and manage a patient record
- * Manage patient demographics
- * Manage problem lists
- * Manage medication lists
- * Manage patient history
- * Manage clinical documents and notes
- * Capture external clinical documents
- * Present care plans, guidelines and protocols
- * Generate and record patient-specific instructions
You may also extend the feature’s usability with remote viewing of medical imaging scans. This works through the uploading and sharing of images through a HIPAA compliant server. In some instances, the remote evaluation of images scans via a medical device has been proven to be just as effective as viewing them at a standard workstation.
#5. Pill Reminder: Patient loyalty towards medication and drugs is a critical factor when it comes to the treatment of chronic disease. With the significant number of people relying upon pharmacological treatments. Failure to regularly take medicine and adhere to treatment regimens may adversely affect both the patient outcomes and healthcare costs.
The core function of this feature is to act as a reminder. It basically sends out push notifications based on the e-prescription. Also, you can craft your own schedule as well.
Popular push notifications integrator are Firebase and Twilio. This collects all the data on how the patient is interacting with the push notifications and reflects the progress on the patient’s dashboard. This makes it highly easier for your doctors to analyze your physical wellness.
#6. One-click Ambulance: This feature is essential for emergency issues arising in untimely situations. One-click ambulance call can be of great help here. This feature let you request the emergency help for yourself, friends or family. This feature notifies the trusted contacts and the hospital along with the precise location. Additionally, you can also find nearby laboratories and pharmacies to seek help in the case of emergency.
#7. Hospital Wayfinding Map: Getting lost inside the hospital is a common problem especially among senior citizens. With multi-speciality infrastructure, losing out on the direction is understandable. This feature makes it easier for visitors to find everything from their physician to their parking spot.
By providing maps and images to the visitors, it is easier for them to find their way around the hospital, thus reducing anxiety.
The Wayfinding Map in itself is an application with the following sub-features:
- Comprehensive indoor maps of the hospital
- Turn-by-Turn indoor navigation
- Parking help on their cell phones. Smart features such as “The Car Saver” function which saves the visitor’s parking locations and provides detailed directions back to their spot.
- Indoor positioning within one to two meters. This navigation platform also assists users with visual landmarks and off-route notifications.
- It can also send relevant location-based text messages pointing to a specific ward/doctor.
The possible technology suggestion for enabling this features are beacons and geofencing.
Features of Doctor App
#1. Doctor’s Profile: One of the critical aspects of the patient’s journey is finding an appropriate physician. Selecting any out of the list isn’t an appropriate option. Doctor’s profile saves time for both patients and doctors. This also improves the accuracy of doctor and patient match-making process.
Here are some of the things which you should keep in mind while developing this feature:
- While showcasing the doctor, it is advisable to include the doctor’s expertise, qualifications, professional degrees and certificates, experience and others.
- It should also provide the exact location of the doctor including their immediate contact details.
- Reviews and ratings from the past users would be an added advantage for first-time patients with that specific physician.
- Apart from this, you may also add the physician’s snapshot along with the workplace/clinic.
There could also be a recommendation engine built using Machine Learning which suggests doctors based on the symptoms and ailments submitted by the patient.
#2. Schedule Management: This feature gives both doctors and patients an effective and reliable appointment booking experience. This feature is exclusively embedded in the dedicated doctors’ app. As we discussed the patient side of appointment booking, let’s discuss from the doctor’s side:
- Doctors can view their appointment requests and types, all this at a single place.
- Appointment reminds doctors of their upcoming appointments.
- It also has options to view the appointment status. They can also add new time slots for immediate patient scheduling.
- They can also cancel appointments by mentioning the reason, if unavailable or have another emergency.
- Through ePrescription, doctors can directly send reports and other related documents to their patients.
- This feature also showcases the patient queue.
#3. Patient’s Dashboard: The patient’s dashboard displays an overview of the clinical as well as personal information of the patient. This page works as a configurable display of critical information related to the patient so as to offer quick and efficient treatment plans.
The dashboard may cover information like patient diagnosis history, lab results, nutritional values, vitals, treatments, prescriptions, radiology documents, etc. You may also develop additional dashboards for graphical representation of the trends in medical diagnosis or department specific view of patient clinical data.
Here are some of the specifications:
- Patient information section which includes personal physical details, clinical details as well as demographic details.
- Room assigned will showcase the assigned room to the patient.
- It also mentions the chief complaints of the patient along with pain level indicator. These details will be updated as needed pre/post doctor’s consultation.
- The medication section will contain the current and new medications that have been prescribed to the patient. The drug & dosage, pharmacy, number of refills, the prescription date and current status of each medication.
- There can also be an additional section where special remarks pertaining to the patient’s medical history can be described such as immunizations, special diseases, allergies, etc.
#4. ePrescription: If you’re not familiar already, this is a technology framework that allows doctors to write and send prescriptions to their patients as well as pharmacies. According to a Surescripts report, 44% of all prescriptions were written electronically in the past year.
ePrescriptions works as a decision support tool giving providers an immediate access to an individual’s medication history and details of their prescription insurance coverage- all in order to make better-informed choices.
At a basic level, e-Prescriptions work as an electronic reference handbook. More sophisticated versions can create and refill prescriptions for patients, manage medications and view patient history, connect to a pharmacy or other drug dispensing site and integrate with an electronic medical record system.
This feature is one of the most sought after since it reduces the number of prescription errors attributed to bad handwriting or illegible faxes.
#5. Clinical Photo Capture: This feature allows doctors to practice high-quality and consistent patient photos in the repeatable process. Furthermore, it helps them to use before and after photos to help convert consultations to procedures and cross-sell aesthetic products and services.
- This feature will eliminate the need for expensive and complicated medical photography equipment.
- This allows doctors to take photographs from any consultation room using on-screen positioning guides and levelling tools to maintain the consistency.
- Customizable photo-sequencing makes sure that the photograph of every patient has the same set of aesthetic prerequisites for the procedure- no angle or position missed.
- Also, the photo management system automatically classifies the patient photos by patient name and demography so that it can be used as cosmetic and dermatic documentation.
Clinical Photo Capture feature can be built through multi-level security protocols that keep their images secure, track who is accessing the system and the actions being taken with the photograph at any moment. This is a HIPAA compliant service which eases out the time-consuming process of photo management.
#5. Decision Support Systems: Mobile apps have turned out to be invaluable tools that support clinical decision-making at the point of care. After every clinical encounter, doctors may not always have answers to the clinical queries. This is where clinical decision-making systems play an important role, especially in evidence-based treatments.
-
Clinical decision support systems clinicians, staff, patients or other individuals with knowledge and person-specific information, intelligently filtered or presented at appropriate times, to enhance health and health care. CDS encompasses a variety of tools to enhance decision-making in the clinical workflow.
-
Clinical treatment guidelines may consist of documents specifying the procedure doctors need to adhere while operating/treating specific diseases.
-
Medical Calculators allows you to enter the values in commonly used formulas to obtain numerical data, such as urinary protein excretion estimation. Other calculators allow you to estimate the severity of a condition such as community-acquired pneumonia in a specific patient based upon the presence or absence of major risk factors.
-
Laboratory test ordering feature allows doctors to order for laboratory tests. Lab tests when done, results are directly sent to the doctors for analysis. Along with this, you can also build a Laboratory Information System which manages patient check-in, order entry, specimen processing, result entry and patient demographics.
Healthcare Information System
The main purpose of the Hospital Information System is to develop and maintain day-to-day records of admission/discharge of patients, list of doctors, report generation, inventory management. Let’s have a look at each of them closely.
#1. Patient Management Systems: These combines the medical data and analysis aspects along with administrative tools to help make a practice or hospital more efficient. This system integrated with patient management and health with the medical practice or hospital management. This enhances the patient experience since it focuses on the patient-doctor relationship rather than just illness.
This system goes beyond the being an EMR & EHR. It includes appointment management, patient information, room allocation, diagnosis, e-Prescriptions, billing records and more.
#2. Doctor Management: This system allows registering the doctors working in the hospital staff. It helps in the allocation and management of doctors and nurses. All this with complete appointment details with patient health records.
#3. Payment Management: With automatic adherence to the appointment system, this system generates the automatic invoice for every patient and keeps records of the payments. This can also help in generating pay-slips for the hospital staff.
#4. Inventory Management: Inventories in the typical hospital environment is managed by the hospital staff in a manual and time-consuming fashion. Such practices are highly prone to human errors.
Inventory management system plays a vital role in automating the supply and medication distribution.
An automated inventory management systems include technologies for tracking and tracing the inventory and devices used each day in a healthcare setting. This can be incorporated by utilizing barcodes and RFID tags for each along with unique tracking number.
You can also add functionality to manage the blood bank along with vital information about their donors. Also, a separate inventory for the automation of medicines.
Electronic Medical/Health Record
It’s a system which collects the patient’s data and stores them in a digital format. This system can be shared across multiple different care settings. This reduces the tedious paperwork and streamlines the healthcare workflow.
Example: One Touch EMR
This is a free EHR app designed for physicians so the workflow mimics the way doctors think. This has some distinct features like patient check-in, online form submission, billing software along with e-Prescription system.
Doctor-on-Demand App
On-demand doctor apps can be a great help to the patients and doctors both. This can also work as a mobile directory which helps in booking appointments online. Some of the additional features could be searching doctors based on name, location or speciality, contacting & booking appointments, explore insurance and billing, etc.
Example: Doctor on Demand
This provides an online service that gives patients an appointment with a physician, psychologist or lactation consultant via their phone, tablet or computer. It also provides video visits for some common conditions and concerns and all physicians are board certified.
Medication Reminder App
If adherence to your medication timetable is an issue due to general forgetfulness, medication reminder apps can help exactly with that. These reminders can be in the form of a vibration or different alarms beeps.
Example: Medisafe Medication Reminder
Symptoms Checker App
Symptoms checker helps a layman person evaluate the symptoms of common health problems. With the preloaded health symptoms, you can check the state of your health instantly.
Example: Symptomate- Symptoms Checker
With Symptomate you can check the symptoms in three easy steps. Enter the symptoms, answer a few questions and check the results.
ePrescription App
ePrescription is the method of electronically sending a prescription to the pharmacy. This eliminates the need for a hard write, fax or phone in prescriptions. ePrescription leaves very little room for errors and saves time both ways.
Example: iPrescribe
With this app, you can prescribe any drug anywhere from your phone. You can also consult PDMP databases, view medication history and get drug/allergy alerts.
Health & Wellness Apps
There has been a sudden rise in the healthcare application which is focused on specific communities. For example, diet, fitness, healthy eating, mental wellness, etc.
Diet App: MyFitnessPal
This offers a huge food database, listing over 5 million different kinds of foods and ingredients. With its inbuilt calorie counter, you can track your day-to-day calories within 5 minutes. It can be integrated with more than 50 devices including Apple Health and Fitbit.
Mental Wellness: 7 Cups: Anxiety & Stress Chat
7 Cups provide anonymous chat for people suffering from anxiety and stress. It provides the confidential conversation with trained volunteer listeners. It connects you with multiple listeners which lets you engage in the guided discussions in chat rooms.
Chronic Condition Specific App
As reported by the Center for Disease control & prevention, more than 75 per cent of all healthcare expenses is linked to chronic conditions some or the other way. Under such circumstances, condition-specific apps can be of great help.
Example: Glooko- Track Diabetes Data
This is a diabetes management platform which helps you understand how your food intake, activity and medication is affecting your blood glucose.
Women Wellness Apps
There are types of apps which are focused solely on healthcare and wellness of women.
Example: Pregnancy & Baby Tracker
This has been used by over 15 million mothers around the world. You just have to simply enter your baby’s due date and it will track your baby’s growth on per day & week basis. Depending upon the baby’s growth, it will suggest you expert tips and helpful articles.
Period Tracker: Clue- Period & Ovulation Tracker
This is a period tracker and ovulation app that uses science and data to help women discover the unique patterns in their menstrual cycle. It lets you track due of the upcoming period, log the birth control and plan for pregnancy.
Urgent Care App
An urgent care app provided by the trusted provider can be a handy tool for people looking help in the emergency. This could be an on-click ambulance, finding and mapping the nearest urgent care facilities and much more.
Example: G1- Call Ambulance
This is an app focused on emergency care. With this, you can call an ambulance in a click and also locate healthcare providers nearby you.
Hospital Wayfinding App
These apps provide indoor mapping platform through indoor turn-by-turn navigation, indoor location-awareness and context-aware messaging to your hospital wayfinding mobile app.
This can be also added to the functionality of tagging parking, check-in and more. Wayfinding Apps have a proven record of improving the patient experience. These uses beacons and geofence around the certain structure to give an accurate positioning.
Conclusion
Healthcare apps are enhancing the effectiveness of healthcare for both patients and doctors. Due to such inherent benefits, healthcare apps are widely being adopted by doctors and patients both.
However, choosing the features and functionalities to include is a critical step considering the specific demands of the users. We hope the above information is useful for you.