Copyright © 2006 Tail-F Systems AB
Version: {$Id: econfd.erl 78173 2015-02-23 18:35:08Z per $}
An Erlang interface equivalent to the confd_lib_dp C-API (documented in confd_lib_dp(3)).
This module is used to connect to ConfD and provide callback functions so that ConfD can populate its northbound agent interfaces with external data. Thus the library consists of a number of API functions whose purpose is to install different callback functions at different points in the XML tree which is the representation of the device configuration. Read more about callpoints in the ConfD User Guide.cb_action() = cb_action_act() | cb_action_cmd()
It is the callback for #confd_action_cb.action
cb_action_act() = fun((U::#confd_user_info{}, Name::qtag(), KP::ikeypath(), [Param::tagval()]) -> ok) | {ok, [Result::tagval()]} | {error, error_reason()}
It is the callback for #confd_action_cb.action when invoked as an action request.
cb_action_cmd() = fun((U::#confd_user_info{}, Name::binary(), Path::binary(), [Arg::binary()]) -> ok) | {ok, [Result::binary()]} | {error, error_reason()}
It is the callback for #confd_action_cb.action when invoked as a CLI command callback.
cb_authentication() = fun((#confd_authentication_ctx{}) -> ok) | error | {error, binary()}
The callback for #confd_authentication_cb.auth
cb_candidate_commit() = fun((#confd_db_ctx{}, Timeout::integer()) -> ok) | {error, error_reason()}
The callback for #confd_db_cbs.candidate_commit
cb_create() = fun((T::#confd_trans_ctx{}, KP::ikeypath()) -> ok) | {error, error_reason()} | delayed_response
It is the callback for #confd_data_cbs.create. Only used when we use external database config data, e.g. not for statistics.
cb_ctx() = fun((#confd_trans_ctx{}) -> ok) | {ok, #confd_trans_ctx{}} | {error, error_reason()}
The callback for #confd_trans_validate_cbs.init and #confd_trans_cbs.init as well as several other callbacks in #confd_trans_cbs{}
cb_db() = fun((#confd_db_ctx{}, DbName::integer()) -> ok) | {error, error_reason()}
The callback for #confd_db_cbs.lock, #confd_db_cbs.unlock, and #confd_db_cbs.delete_config
cb_exists_optional() = fun((T::#confd_trans_ctx{}, KP::ikeypath()) -> {ok, Reply}) | {ok, Reply, #confd_trans_ctx{}} | {error, error_reason()} | delayed_response
This is the callback for #confd_data_cbs.exists_optional. The exists_optional callback must be present if our YANG model has presence containers or leafs of type empty.
cb_find_next() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), FindNextType::integer(), PrevKey::key()) -> {ok, Reply}) | {ok, Reply, #confd_trans_ctx{}} | {error, error_reason()} | delayed_response
This is the callback for #confd_data_cbs.find_next.
cb_find_next_object() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), FindNextType::integer(), PrevKey::key()) -> {ok, Reply}) | {ok, Reply, #confd_trans_ctx{}} | {ok, Objects, TimeoutMillisecs::integer()} | {ok, Objects, TimeoutMillisecs::integer(), #confd_trans_ctx{}} | {error, error_reason()} | delayed_response
Optional callback which combines the functionality of find_next() and get_object(), and adds the possibility to return multiple objects. It is the callback for #confd_data_cbs.find_next_object. For a detailed description of the two forms of the value list, please refer to the "Value Array" and "Tag Value Array" specifications, respectively, in the XML STRUCTURES section of the confd_types(3) manual page.
cb_get_attrs() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), [Attr::integer()]) -> {ok, [{Attr::integer(), V::value()}]}) | {ok, not_found} | {error, error_reason()} | delayed_response
This is the callback for #confd_data_cbs.get_attrs.
cb_get_elem() = fun((T::#confd_trans_ctx{}, KP::ikeypath()) -> {ok, Reply}) | {ok, Reply, #confd_trans_ctx{}} | {error, error_reason()} | delayed_response
This is the callback for #confd_data_cbs.get_elem.
cb_get_log_times() = fun((#confd_notification_ctx{}) -> {ok, {Created::datetime(), Aged::datetime() | not_found}}) | {error, error_reason()}
The callback for #confd_notification_stream_cbs.get_log_times
cb_get_next() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), Prev::term()) -> {ok, Reply}) | {ok, Reply, #confd_trans_ctx{}} | {error, error_reason()} | delayed_response
This is the callback for #confd_data_cbs.get_next. Prev is the integer -1 on the first call.
cb_get_next_object() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), Prev::term()) -> {ok, Reply}) | {ok, Reply, #confd_trans_ctx{}} | {ok, Objects, TimeoutMillisecs::integer()} | {ok, Objects, TimeoutMillisecs::integer(), #confd_trans_ctx{}} | {error, error_reason()} | delayed_response
Optional callback which combines the functionality of get_next() and get_object(), and adds the possibility to return multiple objects. It is the callback for #confd_data_cbs.get_next_object. For a detailed description of the two forms of the value list, please refer to the "Value Array" and "Tag Value Array" specifications, respectively, in the XML STRUCTURES section of the confd_types(3) manual page.
cb_get_object() = fun((T::#confd_trans_ctx{}, KP::ikeypath()) -> {ok, Reply}) | {ok, Reply, #confd_trans_ctx{}} | {error, error_reason()} | delayed_response
Optional callback which is used to return an entire object. It is the callback for #confd_data_cbs.get_object. For a detailed description of the two forms of the value list, please refer to the "Value Array" and "Tag Value Array" specifications, respectively, in the XML STRUCTURES section of the confd_types(3) manual page.
cb_lock_partial() = fun((#confd_db_ctx{}, DbName::integer(), LockId::integer(), [ikeypath()]) -> ok) | {error, error_reason()}
The callback for #confd_db_cbs.lock_partial
cb_move_after() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), PrevKeys::{value()}) -> ok) | {error, error_reason()} | delayed_response
This is the callback for #confd_data_cbs.move_after. PrevKeys == {} means that the list entry should become the first one.
cb_num_instances() = fun((T::#confd_trans_ctx{}, KP::ikeypath()) -> {ok, Reply}) | {ok, Reply, #confd_trans_ctx{}} | {error, error_reason()} | delayed_response
Optional callback, if it doesn't exist it will be emulated by consecutive calls to get_next(). It is the callback for #confd_data_cbs.num_instances.
cb_ok() = fun((#confd_trans_ctx{}) -> ok) | {error, error_reason()}
The callback for #confd_trans_cbs.finish and #confd_trans_validate_cbs.stop
cb_ok_db() = fun((#confd_db_ctx{}) -> ok) | {error, error_reason()}
The callback for #confd_db_cbs.candidate_confirming_commit and several other callbacks in #confd_db_cbs{}
cb_remove() = fun((T::#confd_trans_ctx{}, KP::ikeypath()) -> ok) | {error, error_reason()} | delayed_response
It is the callback for #confd_data_cbs.remove. Only used when we use external database config data, e.g. not for statistics.
cb_replay() = fun((#confd_notification_ctx{}, Start::datetime(), Stop::datetime() | undefined) -> ok) | {error, error_reason()}
The callback for #confd_notification_stream_cbs.replay
cb_set_attr() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), Attr::integer(), Value) -> ok) | {error, error_reason()} | delayed_response
This is the callback for #confd_data_cbs.set_attr. Value == undefined means that the attribute should be deleted.
cb_set_elem() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), Value::value()) -> ok) | {error, error_reason()} | delayed_response
It is the callback for #confd_data_cbs.set_elem. Only used when we use external database config data, e.g. not for statistics.
cb_str_to_val() = fun((TypeCtx::term(), String::string()) -> {ok, Value::value()}) | error | {error, Reason::binary()} | none()
The callback for #confd_type_cbs.str_to_val. The TypeCtx argument is currently unused (passed as 'undefined'). The function may fail - this is equivalent to returning 'error'.
cb_trans_lock() = fun((#confd_trans_ctx{}) -> ok) | {ok, #confd_trans_ctx{}} | {error, error_reason()} | confd_already_locked
The callback for #confd_trans_cbs.trans_lock. The confd_already_locked return value is equivalent to {error, #confd_error{ code = in_use }}.
cb_unlock_partial() = fun((#confd_db_ctx{}, DbName::integer(), LockId::integer()) -> ok) | {error, error_reason()}
The callback for #confd_db_cbs.unlock_partial
cb_val_to_str() = fun((TypeCtx::term(), Value::value()) -> {ok, String::string()}) | error | {error, Reason::binary()} | none()
The callback for #confd_type_cbs.val_to_str. The TypeCtx argument is currently unused (passed as 'undefined'). The function may fail - this is equivalent to returning 'error'.
cb_validate() = fun((T::#confd_trans_ctx{}, KP::ikeypath(), Newval::value()) -> ok) | {error, error_reason()} | {validation_warn, Reason::binary()}
It is the callback for #confd_valpoint_cb.validate.
cb_validate_value() = fun((TypeCtx::term(), Value::value()) -> ok) | error | {error, Reason::binary()} | none()
The callback for #confd_type_cbs.validate. The TypeCtx argument is currently unused (passed as 'undefined'). The function may fail - this is equivalent to returning 'error'.
cb_write() = fun((#confd_trans_ctx{}) -> ok) | {ok, #confd_trans_ctx{}} | {error, error_reason()} | confd_in_use
The callback for #confd_trans_cbs.write_start and #confd_trans_cbs.prepare. The confd_in_use return value is equivalent to {error, #confd_error{ code = in_use }}.
cb_write_all() = fun((T::#confd_trans_ctx{}, KP::ikeypath()) -> ok) | {error, error_reason()} | delayed_response
This is the callback for #confd_data_cbs.write_all. The KP argument is currently always [], since the callback does not pertain to any particular data node.
completion_action() = fun((U::#confd_user_info{}, CliStyle::int(), Token::binary(), CompletionChar::int(), IKP::ikeypath(), CmdPath::binary(), Id::binary(), TP::term(), Extra::term()) -> [string() | {info, string()} | {desc, string()} | default])
datetime() = {C_DATETIME::integer(), DateAndTime}
The value representation for yang:date-and-time, also used in the API functions for notification streams.
namespace() = atom()
tagpath() = [qtag()]
A tagpath() is a list describing a path down into the schema tree.
I.e. as opposed to an ikeypath(), it has no instance information.
Additionally the last (top) element is not [NS|XmlTag]
as in
ikeypath(), but only XmlTag
- i.e. it needs to be combined with
a namespace to uniquely identify a schema node. The other elements
in the path are qualified - or not - exactly as for ikeypath().
tagval() = {qtag(), value() | start | stop | leaf | {start, Index::integer()}}
This is used to represent XML elements together with their values, typically in a list representing an XML subtree as in the arguments and result of the 'action' callback. Typeless elements have the special "values" 'start' (opening container or list element), 'stop' (closing container or list element), 'leaf' (leaf with type "empty"), or {start, Index} (opening list element with CDB Index instead of key value(s) - only valid for CDB access). The qtag() tuple element may have the namespace()-less form (i.e. tag()) for XML elements in the "current" namespace. For a detailed description of how to represent XML as a list of tagval() elements, please refer to the "Tagged Value Array" specification in the XML STRUCTURES section of the confd_types(3) manual page.
type() = term()
Identifies a type definition in the schema.
| action_set_timeout/2 | Extend (or shorten) the timeout for the current action callback invocation. |
| controlling_process/2 | Assigns a new controlling process Pid to Socket. |
| data_reply_error/2 | Reply an error for delayed_response. |
| data_reply_found/1 | Reply 'found' for delayed_response. |
| data_reply_next_key/3 | Reply with next key for delayed_response. |
| data_reply_next_object_tag_value_array/3 | Reply with tagged values and next key for delayed_response. |
| data_reply_next_object_value_array/3 | Reply with values and next key for delayed_response. |
| data_reply_next_object_value_arrays/3 | Reply with multiple objects, each with values and next key, plus cache timeout, for delayed_response. |
| data_reply_not_found/1 | Reply 'not found' for delayed_response. |
| data_reply_ok/1 | Reply 'ok' for delayed_response. |
| data_reply_tag_value_array/2 | Reply a list of tagged values for delayed_response. |
| data_reply_value/2 | Reply a value for delayed_response. |
| data_reply_value_array/2 | Reply a list of values for delayed_response. |
| data_set_timeout/2 | Extend (or shorten) the timeout for the current callback invocation. |
| decrypt/1 | Decrypts a value of type tailf:des3-cbc-encrypted-string or tailf:aes-cfb-128-encrypted-string. |
| init_daemon/6 | Starts and links to a gen_server which connects to ConfD. |
| notification_replay_complete/1 | Call this function when replay is done. |
| notification_replay_failed/2 | Call this function when replay has failed for some reason. |
| notification_send/3 | Send an XML notification. |
| pp_kpath/1 | Pretty print an ikeypath. |
| pp_value/1 | Pretty print a value. |
| register_action_cb/2 | Register action callback on an actionpoint. |
| register_authentication_cb/2 | Register authentication callback. |
| register_data_cb/2 | Register the data callbacks. |
| register_db_cbs/2 | Register extern db callbacks. |
| register_done/1 | This function must be called when all callback registrations are done. |
| register_notification_stream/2 | Register notif callbacks on an streamname. |
| register_range_data_cb/5 | Register data callbacks for a range of keys. |
| register_trans_cb/2 | Register transaction phase callbacks. |
| register_trans_validate_cb/2 | Register validation transaction callback. |
| register_valpoint_cb/2 | Register validation callback on a valpoint. |
| set_daemon_d_opaque/2 | Set the d_opaque field in the daemon which is typically used by the callbacks. |
| set_debug/3 | Change the DebugLevel and/or Estream for a running daemon. |
| start/0 | Starts the econfd application. |
| stop_daemon/1 | Silently stop a daemon. |
action_set_timeout(Uinfo::#confd_user_info{}, Seconds::integer()) -> ok | {error, Reason::term()}
Extend (or shorten) the timeout for the current action callback invocation. The timeout is given in seconds from the point in time when the function is called.
controlling_process(Socket::term(), Pid::pid()) -> ok | {error, Reason::term()}
Assigns a new controlling process Pid to Socket
data_reply_error(Tctx::#confd_trans_ctx{}, Error::error_reason()) -> ok | {error, Reason::term()}
Reply an error for delayed_response. Like data_reply_value() - only used in combination with delayed_response.
data_reply_found(Tctx::#confd_trans_ctx{}) -> ok | {error, Reason::term()}
Reply 'found' for delayed_response. Like data_reply_value() - only used in combination with delayed_response.
data_reply_next_key(Tctx::#confd_trans_ctx{}, Key, Next::term()) -> ok | {error, Reason::term()}
Reply with next key for delayed_response. Like data_reply_value() - only used in combination with delayed_response.
data_reply_next_object_tag_value_array(Tctx::#confd_trans_ctx{}, Values::[TV::tagval()], Next::term()) -> ok | {error, Reason::term()}
Reply with tagged values and next key for delayed_response. Like data_reply_value() - only used in combination with delayed_response, and get_next_object() callback.
data_reply_next_object_value_array(Tctx::#confd_trans_ctx{}, Values, Next::term()) -> ok | {error, Reason::term()}
Reply with values and next key for delayed_response. Like data_reply_value() - only used in combination with delayed_response, and get_next_object() callback.
data_reply_next_object_value_arrays(Tctx::#confd_trans_ctx{}, Objects, TimeoutMillisecs::integer()) -> ok | {error, Reason::term()}
Reply with multiple objects, each with values and next key, plus cache timeout, for delayed_response. Like data_reply_value() - only used in combination with delayed_response, and get_next_object() callback.
data_reply_not_found(Tctx::#confd_trans_ctx{}) -> ok | {error, Reason::term()}
Reply 'not found' for delayed_response. Like data_reply_value() - only used in combination with delayed_response.
data_reply_ok(Tctx::#confd_trans_ctx{}) -> ok | {error, Reason::term()}
Reply 'ok' for delayed_response. This function can be used explicitly by the erlang application if a data callback returns the atom delayed_response. In that case it is the responsibility of the application to later invoke one of the data_reply_xxx() functions. If delayed_response is not used, none of the explicit data replying functions need to be used.
data_reply_tag_value_array(Tctx::#confd_trans_ctx{}, TagVals::[tagval()]) -> ok | {error, Reason::term()}
Reply a list of tagged values for delayed_response. Like data_reply_value() - only used in combination with delayed_response, and get_object() callback.
data_reply_value(Tctx::#confd_trans_ctx{}, V::value()) -> ok | {error, Reason::term()}
Reply a value for delayed_response. This function can be used explicitly by the erlang application if a data callback returns the atom delayed_response. In that case it is the responsibility of the application to later invoke one of the data_reply_xxx() functions. If delayed_response is not used, none of the explicit data replying functions need to be used.
data_reply_value_array(Tctx::#confd_trans_ctx{}, Values) -> ok | {error, Reason::term()}
Reply a list of values for delayed_response. Like data_reply_value() - only used in combination with delayed_response, and get_object() callback.
data_set_timeout(Tctx::#confd_trans_ctx{}, Seconds::integer()) -> ok | {error, Reason::term()}
Extend (or shorten) the timeout for the current callback invocation. The timeout is given in seconds from the point in time when the function is called.
decrypt(X1::binary()) -> {ok, binary()} | {error, {Ecode::integer(), Reason::binary()}}
Decrypts a value of type tailf:des3-cbc-encrypted-string or tailf:aes-cfb-128-encrypted-string. Requires that econfd_maapi:install_crypto_keys/1 has been called in the node.
init_daemon(Name::atom(), DebugLevel::integer(), Estream::io_device(), Dopaque::term(), Ip::ip(), Port::integer()) -> {ok, Pid::pid()} | {error, Reason::term()}
Starts and links to a gen_server which connects to ConfD. This gen_server holds two sockets to ConfD, one so called control socket and one worker socket (See confd_lib_dp(3) for an explanation of those sockets.)
The gen_server is used to install sets of callback Funs. The gen_server state is a #confd_daemon_ctx{}. This structure is passed to all the callback functions.
The daemon context includes a d_opaque element holding the Dopaque term - this can be used by the application to pass application specific data into the callback functions.
The Name::atom() parameter is used in various debug printouts and is also used to uniquely identify the daemon.
The DebugLevel parameter is used to control the debug level. The following levels are available:
notification_replay_complete(Nctx::#confd_notification_ctx{}) -> ok | {error, Reason::term()}
Call this function when replay is done
notification_replay_failed(Nctx::#confd_notification_ctx{}, ErrorString::binary()) -> ok | {error, Reason::term()}
Call this function when replay has failed for some reason
notification_send(Nctx::#confd_notification_ctx{}, DateTime::datetime(), TagVals::[tagval()]) -> ok | {error, Reason::term()}
Send an XML notification.
pp_kpath(IKP::ikeypath()) -> io_list()
Pretty print an ikeypath.
Pretty print a value.
register_action_cb(Daemon::pid(), ActionCbs::#confd_action_cb{}) -> ok | {error, Reason::term()}
Register action callback on an actionpoint
register_authentication_cb(Daemon::pid(), AuthenticationCb::#confd_authentication_cb{}) -> ok | {error, Reason::term()}
Register authentication callback. Note, this can not be used to *perform* the authentication.
register_data_cb(Daemon::pid(), DbCbs::#confd_data_cbs{}) -> ok | {error, Reason::term()}
Register the data callbacks.
register_db_cbs(Daemon::pid(), DbCbs::#confd_db_cbs{}) -> ok | {error, Reason::term()}
Register extern db callbacks.
register_done(Daemon::pid()) -> ok | {error, Reason::term()}
This function must be called when all callback registrations are done
register_notification_stream(Daemon::pid(), NotifCbs::#confd_notification_stream_cbs{}) -> {ok, #confd_notification_ctx{}} | {error, Reason::term()}
Register notif callbacks on an streamname
register_range_data_cb(Daemon::pid(), DataCbs::#confd_data_cbs{}, Lower::[Lower::value()], Higher::[Higher::value()], IKP::ikeypath()) -> ok | {error, Reason::term()}
Register data callbacks for a range of keys.
register_trans_cb(Daemon::pid(), TransCbs::#confd_trans_cbs{}) -> ok | {error, Reason::term()}
Register transaction phase callbacks. See confd_lib_dp(3) for a thorough description of the transaction phases. The record #confd_trans_cbs{} contains callbacks for all of the phases for a transaction. If we use this external data api only for statistics data only the init() and the finish() callbacks should be used. The init() callback must return 'ok', {error, String}, or {ok, Tctx} where Tctx is the same #confd_trans_ctx that was supplied to the init callback but possibly with the opaque field filled in. This field is meant to be used by the user to manage user data.
register_trans_validate_cb(Daemon::pid(), ValidateCbs::#confd_trans_validate_cbs{}) -> ok | {error, Reason::term()}
Register validation transaction callback. This function maps an init and a finish function for validations. See seme function in confd_lib_dp(3) The init() callback must return 'ok', {error, String}, or {ok, Tctx} where Tctx is the same #confd_trans_ctx that was supplied to the init callback but possibly with the opaque field filled in.
register_valpoint_cb(Daemon::pid(), ValpointCbs::#confd_valpoint_cb{}) -> ok | {error, Reason::term()}
Register validation callback on a valpoint
set_daemon_d_opaque(Daemon::pid(), Dopaque::term()) -> ok
Set the d_opaque field in the daemon which is typically used by the callbacks
set_debug(Daemon::pid(), DebugLevel::integer(), Estream::io_device()) -> ok
Change the DebugLevel and/or Estream for a running daemon
start() -> ok | {error, Reason::term()}
Starts the econfd application.
stop_daemon(Daemon::pid()) -> ok
Silently stop a daemon
Generated by EDoc, Jun 22 2015, 15:10:59.


We will only use your personal information in accordance with government privacy policy. Please be polite, concise and to the point. Please do not be abusive — abusing your council devalues the service for all users. Writing your message entirely in block capitals makes it hard to read, as does a lack of punctuation. Remember to come back on the site to rate and comment about the service te progress the give feed-back where possible.


This report (to see full report, click
here) contains an exploratory analysis of loan data from Prosper.
Prosper is
a peer-to-peer lending marketplace in which prospective borrowers post loan listings while investors select specific
listings to then invest in. Investors can select loans based on a variety of factors, such as: the loan amount, the loan
rating, the borrower’s salary, or the borrower’s number of past inquiries.
I investigated this dataset (which ranged from 2006 - 2014) using R and exploratory data analysis techniques, and discovered interesting
relationships between various variables. I also created many beautiful, informative, and revealing plots using the
awesome ggplot library.
My favorite 3 images from the report:
The above figure is the first plot in this report.
It is important because it is a clear example of how Prosper drastically changed much of its loan servicing
procedures in 2009. In my original, first-pass analysis of the Prosper loan data, I included every single loan.
However, I soon realized that there were distinct differences in loans based on whether they originated before or
after 2009. For example, the Prosper rating variables (“ProsperRating [numeric]” and “ProsperRating [Alpha]”), as
well as “EstimatedEffectiveYield”, “EstimatedLoss”, and “EstimatedReturn”, are only applicable for loans originating
in July 2009 (i.e. in Q3 2009) or later. In contrast, “CreditGrade” is only applicable for loans originating in 2008 or
earlier.
In this figure, we can see that servicing fee (a new variable that I created) was originally a variable rate prior to
2009, and then became fixed at a set rate of 5% afterwards. This figure visibly demonstrates, and therefore justifies,
that the loans in the Prosper dataset should be separated into two groups: those originating either prior to Q3 2009,
or in/after Q3 2009.
The above figure shows Annual Return vs. Estimated Return, with subplots and colors based on the Prosper rating.
This is a great plot for several reasons. First, it shows how both Annual Return (one of the variables I calculated)
and Estimated Return have a dependence on Prosper rating. Second, it shows that Annual Return and Estimated Return are
very similar when the loan rating is high, but diverge greatly as loan rating becomes worse. Third, it shows the different
ranges in a loan’s annual return, ranging from as low as -100% (i.e. the entire principal is lost, in addition to lost
interest revenue) to as high as 40% for some of the very risky loans (e.g. E and HR-rated loans). Fourth, it shows that many loans that
had negative Estimated Return values actually ended up having postive Annual Returns.
The main take-home message of this figure is that the actual annual return from a loan is not necessarily well-predicted
by Prosper’s Estimated Return, particularly for lower rated loans.
The above figure shows the percentage of each loan paid, on the y-axis, vs. the number of months since the
loan originated, on the x-axis, with sub-figures for each loan term. As stated in the bottom of the figure,
darker points depict open loans, while lighter points depict closed loans that ended up in defaulted or charged-off status.
I included this figure as the last final plot because it showed that “good” loans can be differentiated from loans that
ultimately went “bad” based on the borrower’s repayment progress. Looking at this figure, I can clearly see that with even
a simple machine learning algorithm, we can determine whether a loan will eventually be completely paid back or not. If we
plot the loan in question in the above figure, we can see whether it falls in the “good” “trend” or the “bad” “trend” (with
“trend” in quotation marks, as these points represent loans captured at a single instance in time, rather than indicating some
kind of rate or progress). From the analysis done in this report, borrower behavior (i.e. loan repayment progress) seems to
be one of the most useful indicators of a loan’s final status.


Last updated: 2021-09-24
Checks: 7 0
Knit directory: myTidyTuesday/
This reproducible R Markdown analysis was created with workflowr (version 1.6.2). The Checks tab describes the reproducibility checks that were applied when the results were created. The Past versions tab lists the development history.
Great! Since the R Markdown file has been committed to the Git repository, you know the exact version of the code that produced these results.
Great job! The global environment was empty. Objects defined in the global environment can affect the analysis in your R Markdown file in unknown ways. For reproduciblity it’s best to always run the code in an empty environment.
The command set.seed(20210907)
was run prior to running the code in the R Markdown file. Setting a seed ensures that any results that rely on randomness, e.g. subsampling or permutations, are reproducible.
Great job! Recording the operating system, R version, and package versions is critical for reproducibility.
Nice! There were no cached chunks for this analysis, so you can be confident that you successfully produced the results during this run.
Great job! Using relative paths to the files within your workflowr project makes it easier to run your code on other machines.
Great! You are using Git for version control. Tracking code development and connecting the code version to the results is critical for reproducibility.
The results in this page were generated with repository version c12a2df. See the Past versions tab to see a history of the changes made to the R Markdown and HTML files.
Note that you need to be careful to ensure that all relevant files for the analysis have been committed to Git prior to generating the results (you can use wflow_publish
or wflow_git_commit
). workflowr only checks the R Markdown file, but you know if there are other scripts or data files that it depends on. Below is the status of the Git repository when the results were generated:
Ignored files:
Ignored: .Rhistory
Ignored: .Rproj.user/
Ignored: catboost_info/
Ignored: data/2021-09-08/
Ignored: data/CNHI_Excel_Chart.xlsx
Ignored: data/CommunityTreemap.jpeg
Ignored: data/Community_Roles.jpeg
Ignored: data/YammerDigitalDataScienceMembership.xlsx
Ignored: data/acs_poverty.rds
Ignored: data/fmhpi.rds
Ignored: data/grainstocks.rds
Ignored: data/hike_data.rds
Ignored: data/us_states.rds
Ignored: data/us_states_hexgrid.geojson
Ignored: data/weatherstats_toronto_daily.csv
Untracked files:
Untracked: code/YammerReach.R
Untracked: code/work list batch targets.R
Untracked: figure/
Note that any generated files, e.g. HTML, png, CSS, etc., are not included in this status report because it is ok for generated content to have uncommitted changes.
These are the previous versions of the repository in which changes were made to the R Markdown (analysis/CanadaWindTurbines.Rmd
) and HTML (docs/CanadaWindTurbines.html
) files. If you’ve configured a remote Git repository (see ?wflow_git_remote
), click on the hyperlinks in the table below to view the files as they were in that past version.
| File | Version | Author | Date | Message |
|---|---|---|---|---|
| Rmd | c12a2df | opus1993 | 2021-09-24 | adopt viridis H color palette |
The data this week comes from the Government of Canada.
Download the weekly data and make available in the tt
object.
tt <- tt_load("2020-10-27")
Downloading file 1 of 1: `wind-turbine.csv`
Let’s take an initial look at the format of the data available. There is a single table this week. Some records appear to be missing.
tt$`wind-turbine`
# A tibble: 6,698 x 15
objectid province_territory project_name total_project_ca~ turbine_identif~
<dbl> <chr> <chr> <dbl> <chr>
1 1 Alberta Optimist Wind~ 0.9 OWE1
2 2 Alberta Castle River ~ 44 CRW1
3 3 Alberta Waterton Wind~ 3.78 WWT1
4 4 Alberta Waterton Wind~ 3.78 WWT2
5 5 Alberta Waterton Wind~ 3.78 WWT3
6 6 Alberta Waterton Wind~ 3.78 WWT4
7 7 Alberta Cowley North 19.5 CON1
8 8 Alberta Cowley North 19.5 CON2
9 9 Alberta Cowley North 19.5 CON3
10 10 Alberta Cowley North 19.5 CON4
# ... with 6,688 more rows, and 10 more variables:
# turbine_number_in_project <chr>, turbine_rated_capacity_k_w <dbl>,
# rotor_diameter_m <dbl>, hub_height_m <dbl>, manufacturer <chr>,
# model <chr>, commissioning_date <chr>, latitude <dbl>, longitude <dbl>,
# notes <chr>
tt$`wind-turbine` %>%
vis_miss()
The turbine identifier and year of objectid
1451 is consistent with the other St. Lawrence project_name
turbines. We will impute the missing value to the dataset as St. Lawrence.
Where turbine rated capacity is missing, the total rated capacity will be assumed to be spread uniformly across all turbines in a project if the model of the turbine is the same. This is the case for Armow Wind Project, South Kent Wind Farm, and Skyway8.
Commissioning_dates are spread in some cases across two or three or even as many as seven years. for the purposes of this analysis, I am going to parse out the right-most, last, date as the allOnlineDate
as an integer.
windTurbine <- tt$`wind-turbine` %>%
mutate(project_name = if_else(objectid == 1451,
"St. Lawrence",
project_name
)) %>%
group_by(project_name) %>%
mutate(
turbine_rated_capacity_k_w =
if_else(is.na(turbine_rated_capacity_k_w),
total_project_capacity_mw * 1000 / n(),
turbine_rated_capacity_k_w
)
) %>%
ungroup() %>%
mutate(allOnlineDate = as.integer(str_sub(
commissioning_date,
str_length(commissioning_date) - 3,
str_length(commissioning_date)
))) %>%
mutate(manufacturer = if_else(str_detect(manufacturer, "Acciona"),
"Acciona",
manufacturer
))
vis_dat(windTurbine)
The notes contain valuable insights. Some specifications may have changed since installation. In other cases, the dataset presented here has other technical assumptions.
windTurbine %>%
filter(!is.na(notes)) %>%
distinct(project_name, notes, province_territory) %>%
knitr::kable(caption = "Canada Wind Farm Data Notes") %>%
kable_minimal(c("striped", "hover", "responsive"))
| province_territory | project_name | notes |
|---|---|---|
| Alberta | Kettles Hill | This farm consists of three different hub heights; with three 50 m turbines, five 60 m turbines, and twenty-seven 67 m turbines. No information available on which turbines fall into which category |
| British Columbia | Pennask | Derated from 3200 kW |
| British Columbia | Shinish | Derated from 3200 kW |
| British Columbia | Moose Lake | Derated from 4200 kW |
| Nova Scotia | Little Brook | Hub height approximated from manufacturer specifications |
| Nova Scotia | Brookfield | Hub height approximated from manufacturer specifications |
| Nova Scotia | Goodwood | Turbine height approximated from manufacturer specifications |
| Nova Scotia | Digby Limited | Turbine height approximated from manufacturer specifications |
| Nova Scotia | Marshville Limited | Hub height approximated from manufacturer specifications |
| Nova Scotia | Tiverton Riverhurst | Turbine height assumed from turbine model |
| Nova Scotia | Spiddle Hill | Turbine height assumed |
| Nova Scotia | Creignishrear | Turbine height assumed based off turbine model |
| Nova Scotia | Irish Mountain | Turbine height estimated |
| Nova Scotia | Millbrook | Assumed turbine height based on similar projects/turbines |
| Nova Scotia | Truro Heights | Turbine height assumed from turbine model |
| Nova Scotia | Cheticamp | Turbine height assumed from turbine model |
| Nova Scotia | Fitzpatrick | Turbine derated from 1600 kW. Turbine height approximated from manufacturer specfications |
| Nova Scotia | Kemptown | Turbine uprated from 1600 kW |
| Nova Scotia | Limerock | Turbine uprated from 1600 kW |
| Nova Scotia | North Beaver Bank Community Wind | Turbine derated from 2000 kW |
| Nova Scotia | Point Aconi | Assumed turbine model based on rated output. Assumed turbine height based on turbine model |
| Nova Scotia | Baddeck | Turbine derated from 2000 kW |
| Nova Scotia | Pictou Landing | Assumed turbine height based on turbine model and similar projects |
| Ontario | Clear Creek | Turbine height approximated |
| Ontario | Cultus | Turbine height approximated |
| Ontario | Frogmore | Turbine height approximated |
| Ontario | Chatham | 4 of the turbines have 93 ft rotor diameter. Not known which turbines have the smaller rotor |
| Ontario | Raleigh Wind Energy Centre | Assumed XLE model. Rotor diameter approximated. |
| Ontario | Dufferin Wind | Turbines are derated to levels of 2750/2565/2470/1600/1482/1388/1336 to a farm total of 91.4 MW |
| Ontario | Grand Renewable Wind | Wind farm consists of 65 turbines with a nameplate capacity of 2221 kW and 2 turbines with a capacity of 2126 kW. Unknown which turbines have capacity of 2126 kW. |
| Ontario | Skyway 8 | All turbines are identical, but 2 operate at 1815 kW and 3 at 1950 kW. No information on which turbines operate at what output. |
| Ontario | South Kent Wind Farm | Some turbines derated such that the farm has a maximum operating capacity of 270 MW |
| Ontario | Armow Wind Project | Some turbines derated such that the farm has an maximum operating capacity of 180 MW |
| Ontario | Bow Lake Wind Project | Turbines uprated from 1600 kW |
| Ontario | Port Ryerse | Turbines derated from 3000 kW |
| Ontario | Belle River | Some turbines derated such that wind farm has maximum capacity of 100 MW |
| Ontario | North Kent Wind Farm | Turbine derated from 3200 kW |
A count of turbines by manufacturer.
windTurbine %>%
group_by(manufacturer) %>%
summarize(
Turbines = n(),
`Total Installed Capacity in kW` = sum(turbine_rated_capacity_k_w)
) %>%
arrange(desc(Turbines)) %>%
knitr::kable(caption = "Canada Wind Power Turbine Manufacturers") %>%
kable_minimal(c("striped", "hover", "responsive"))
| manufacturer | Turbines | Total Installed Capacity in kW |
|---|---|---|
| Vestas | 1834 | 3542350 |
| GE | 1725 | 2819540 |
| Siemens | 1248 | 2902736 |
| Enercon | 960 | 2193980 |
| Senvion | 643 | 1354450 |
| NEG Micon | 132 | 99000 |
| Acciona | 74 | 177000 |
| Nordex | 20 | 26000 |
| Suzlon | 15 | 31500 |
| Vensys | 9 | 12300 |
| Gamesa | 8 | 16000 |
| Windmatic | 6 | 390 |
| DeWind | 5 | 10000 |
| Samsung Renewable Energy | 4 | 10000 |
| Northwind | 3 | 300 |
| Turbowinds | 3 | 1800 |
| Bonus | 2 | 300 |
| EWT | 2 | 1800 |
| Lagerwey | 2 | 1500 |
| Leitwind | 1 | 1500 |
| Pfleiderer | 1 | 650 |
| Tacke | 1 | 600 |
Lets build an area chart showing the growth in capacity with an inset map:
western_turbines <- filter(windTurbine, province_territory %in% c("Alberta", "British Columbia", "Manitoba", "Saskatchewan"))
p1 <- western_turbines %>%
select(
province_territory,
allOnlineDate,
turbine_rated_capacity_k_w
) %>%
group_by(province_territory, allOnlineDate) %>%
summarize(
SumCapacity = sum(turbine_rated_capacity_k_w),
.groups = "drop"
) %>%
complete(allOnlineDate,
province_territory,
fill = list(SumCapacity = 0)
) %>%
group_by(province_territory) %>%
mutate(CumSumCapacity = cumsum(SumCapacity)) %>%
ungroup() %>%
ggplot() +
geom_area(aes(
x = allOnlineDate,
y = CumSumCapacity / 1000,
fill = province_territory
), show.legend = FALSE) +
scale_y_continuous(
labels = scales::comma_format(),
position = "right",
expand = c(0, 0)
) +
scale_x_continuous(
limits = c(1995, 2019),
expand = c(0, 0)
) +
labs(
y = "", x = "", fill = "",
title = "Wind Power in Canada's Western Provinces",
subtitle = "Cumulative sum of MW of power capacity installed at project completion",
caption = "Data: Government of Canada | Visualization: @jim_gruman"
)
Where are these turbines?
Can we take a look at turbines in the western provinces?
adapted from Jake Kaupp’s TidyTuesday submission this week on the Maritime provinces
western_provinces <- ne_states("Canada", returnclass = "sf") %>%
filter(name %in% c("Alberta", "British Columbia", "Manitoba", "Saskatchewan"))
wp_box <- st_bbox(western_provinces)
western_bbox <- matrix(c(wp_box[1], wp_box[3], wp_box[2], max(western_turbines$latitude) + 1), nrow = 2, ncol = 2)
western_hwy <- western_bbox %>%
opq(timeout = 6000) %>%
add_osm_feature(
key = "highway",
value = c("primary", "secondary", "tertiary", "secondary_link", "tertiary_link")
) %>%
osmdata_sf()
western_hwy_clipped <- st_intersection(western_hwy$osm_lines, western_provinces)
p2 <- ggplot() +
geom_sf(data = western_provinces, inherit.aes = FALSE, color = "#2F394D", fill = "white") +
geom_sf(data = western_hwy_clipped, inherit.aes = FALSE, color = "#403d58", size = 0.1) +
geom_point(data = western_turbines, aes(x = longitude, y = latitude, color = province_territory), alpha = 0.4, size = 4, show.legend = FALSE) +
geom_richtext(aes(
x = -130, y = 58.4,
label = "The wind turbines built since 1995 as part of
larger wind farm projects in British Columbia,
 Alberta, Saskatchewan and Manitoba."
), fill = "white", hjust = 0, label.color = NA, size = 5, color = "#464950", family = "Roboto Condensed") +
labs(x = "", y = "") +
scale_size_area(max_size = 6) +
theme_map()
ggdraw(p1) +
draw_plot(p2, 0, .3, .7, .7)
And my tweet from that week:
tweetrmd::include_tweet("https://twitter.com/jim_gruman/status/1321922270072328192")
Built this week's #TidyTuesday set into a quick inset map of Western Canada's wind turbines with {cowplot}. code @ https://t.co/DvWAyxrsU4 #r4ds #rstats pic.twitter.com/ILa3qiXQDI
— Jim Gruman📚🚵♂⚙ (@jim_gruman) October 29, 2020
sessionInfo()
R version 4.1.1 (2021-08-10)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19043)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] cowplot_1.1.1 ggtext_0.1.1 rnaturalearth_0.1.0
[4] sf_1.0-2 osmdata_0.1.6 kableExtra_1.3.4
[7] visdat_0.5.3 naniar_0.6.1 tidytuesdayR_1.0.1
[10] forcats_0.5.1 stringr_1.4.0 dplyr_1.0.7
[13] purrr_0.3.4 readr_2.0.1 tidyr_1.1.3
[16] tibble_3.1.4 ggplot2_3.3.5 tidyverse_1.3.1
[19] workflowr_1.6.2
loaded via a namespace (and not attached):
[1] readxl_1.3.1 backports_1.2.1 systemfonts_1.0.2
[4] workflows_0.2.3 selectr_0.4-2 plyr_1.8.6
[7] sp_1.4-5 splines_4.1.1 listenv_0.8.0
[10] usethis_2.0.1 digest_0.6.27 foreach_1.5.1
[13] htmltools_0.5.2 yardstick_0.0.8 viridis_0.6.1
[16] parsnip_<IP_ADDRESS>0 fansi_0.5.0 magrittr_2.0.1
[19] tune_0.1.6 tzdb_0.1.2 recipes_0.1.16
[22] globals_0.14.0 modelr_0.1.8 gower_0.2.2
[25] extrafont_0.17 vroom_1.5.5 R.utils_2.10.1
[28] extrafontdb_1.0 svglite_2.0.0 hardhat_0.1.6
[31] rsample_0.1.0 dials_0.0.10 colorspace_2.0-2
[34] rvest_1.0.1 textshaping_0.3.5 haven_2.4.3
[37] xfun_0.26 crayon_1.4.1 jsonlite_1.7.2
[40] survival_3.2-11 iterators_1.0.13 glue_1.4.2
[43] gtable_0.3.0 ipred_0.9-12 webshot_0.5.2
[46] R.cache_0.15.0 tweetrmd_0.0.9 Rttf2pt1_1.3.9
[49] future.apply_1.8.1 scales_1.1.1 infer_1.0.0
[52] DBI_1.1.1 Rcpp_1.0.7 viridisLite_0.4.0
[55] gridtext_0.1.4 units_0.7-2 bit_4.0.4
[58] GPfit_1.0-8 proxy_0.4-26 lava_1.6.10
[61] prodlim_2019.11.13 httr_1.4.2 wk_0.5.0
[64] ellipsis_0.3.2 farver_2.1.0 R.methodsS3_1.8.1
[67] pkgconfig_2.0.3 nnet_7.3-16 sass_0.4.0
[70] dbplyr_2.1.1 utf8_1.2.2 here_1.0.1
[73] labeling_0.4.2 tidyselect_1.1.1 rlang_0.4.11
[76] DiceDesign_1.9 later_1.3.0 cachem_1.0.6
[79] munsell_0.5.0 cellranger_1.1.0 tools_4.1.1
[82] cli_3.0.1 generics_0.1.0 broom_0.7.9
[85] evaluate_0.14 fastmap_1.1.0 ragg_1.1.3
[88] yaml_2.2.1 bit64_4.0.5 knitr_1.34
[91] fs_1.5.0 s2_1.0.6 future_1.22.1
[94] whisker_0.4 R.oo_1.24.0 xml2_1.3.2
[97] compiler_4.1.1 rstudioapi_0.13 curl_4.3.2
[100] e1071_1.7-8 reprex_2.0.1 lhs_1.1.3
[103] bslib_0.3.0 stringi_1.7.4 highr_0.9
[106] rgeos_0.5-7 gdtools_0.2.3 hrbrthemes_0.8.0
[109] lattice_0.20-44 rnaturalearthhires_0.2.0 Matrix_1.3-4
[112] markdown_1.1 styler_1.6.1 classInt_0.4-3
[115] conflicted_1.0.4 vctrs_0.3.8 tidymodels_0.1.3
[118] pillar_1.6.2 lifecycle_1.0.0 furrr_0.2.3
[121] jquerylib_0.1.4 httpuv_1.6.3 R6_2.5.1
[124] promises_<IP_ADDRESS> KernSmooth_2.23-20 gridExtra_2.3
[127] parallelly_1.28.1 codetools_0.2-18 MASS_7.3-54
[130] assertthat_0.2.1 rprojroot_2.0.2 withr_2.4.2
[133] parallel_4.1.1 hms_1.1.0 grid_4.1.1
[136] rpart_4.1-15 timeDate_3043.102 class_7.3-19
[139] rmarkdown_2.11 git2r_0.28.0 pROC_1.18.0
[142] lubridate_1.7.10


Marie Note
Posts
Tags
About
About
Share
Follow
Jekyll로 블로그 만들기
지킬로 블로그 만들기.
20 Jun 2021
posts
#web
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus
web (1)


Who I AM
My name is Mine, I am a computer science student at the National University of Engineering. Some know me as LIBROAPP.
What I Do
I have basic knowledge of cybersecurity, game development, software development and I am currently an aspiring full stack developer. I have experience in the programming languages Javascript, Python and C#. I also have knowledge of Html, CSS3 and Bootstrap, some experiencie on app deployment using Firebase Hosting. I have contributed to the development of the website of the INT study group, where I am currently a member.
Blog
At the moment, how much with some projects that I have developed as a team and individually. These are some:


| Home | Libraries | People | FAQ | More |
Timer(定时器)库提供了timer类来测量时间的流逝，progress_timer类用于报告已经流逝的时间，progress_display类用于显示当前进度。
© Copyright Beman Dawes, 2001
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at www.boost.org/LICENSE_1_0.txt)
07 November, 2007


--- layout: post title: Game Development, where is directX going? ---
From gamespot, Microsoft announced a new toolkit that would work across Microsoft platforms to develop games. I can certainly understand that the scope is far bigger than just directX technologies, but how is that going to merge into the developer toolkit? And will we ever see an official way to let homebrew software running on .net work on an Xbox console?
One last question, I’ve still not heard of WinFS relations to gaming… I strongly think that a winfs store for game “saves” is going to provide for a great way to manage game sessions, be it on a usb memory card, or on your hard drive. How will it be possible, through one development platform, to target the full power of winfs, some subset of it on Xbox2, and the nothing we have on winNTx?
I know, I’m asking too many questions :)


--- layout: post title: IDE of the future, Richard is going to get what he wants tags: [visual-studio] ---
As I was reading Cyrus’ comments on embedding IDE editors in visual studio, and the realm of domain specific languages, it reminds me of the discussion I had with Richard about the IDE Future. Just thought I would get this back on the front line J
Blog offline, this post delivery might be delayed.


Before Change
n_points = gs.shape(points)[0]
if weights is None:
weights = gs.ones((n_points, 1))
weights = gs.array(weights)
mean = points[0]
if point_type == "vector":
weights = gs.to_ndarray(weights, to_ndim=2, axis=1)
mean = gs.to_ndarray(mean, to_ndim=2)
if point_type == "matrix":
weights = gs.to_ndarray(weights, to_ndim=3, axis=1)
mean = gs.to_ndarray(mean, to_ndim=3)
if n_points == 1:
return mean
sum_weights = gs.sum(weights)
sq_dists_between_iterates = []
iteration = 0
sq_dist = gs.array([[0.]])
var = gs.array([[0.]])
while iteration < max_iter:
condition = ~gs.logical_or(
gs.isclose(var, 0.),
gs.less_equal(sq_dist, epsilon * var))
if not (condition or iteration == 0):
break
logs = metric.log(point=points, base_point=mean)
tangent_mean = gs.einsum(einsum_str, weights, logs)
tangent_mean /= sum_weights
estimate_next = metric.exp(tangent_vec=tangent_mean, base_point=mean)
sq_dist = metric.squared_dist(estimate_next, mean)
sq_dists_between_iterates.append(sq_dist)
var = variance(
points=points,
weights=weights,
metric=metric,
base_point=estimate_next,
point_type=point_type)
mean = estimate_next
iteration += 1
if iteration == max_iter:
logging.warning(
"Maximum number of iterations {} reached. "
"The mean may be inaccurate".format(max_iter))
if verbose:
logging.info("n_iter: {}, final variance: {}, final dist: {}".format(
iteration, var, sq_dist))
mean = gs.to_ndarray(mean, to_ndim=2)
return mean
def _ball_gradient_descent(points, metric, weights, max_iter,
After Change
n_points = gs.shape(points)[0]
if weights is None:
weights = gs.ones((n_points,))
//weights = gs.ones((n_points, 1))
// weights = gs.array(weights)
mean = points[0]


Special Application Machines
S - 8 BRUSH MACHINE
This design locates up to 8 independently operating brush heads on a 7 x 12 ft area. Laid out internally like bridle, foil material is safely brushed due to the large strip support surface.
- 10 Minute Brush Change
- Variable Backup Roll Configurations for Cleaning, Satin Finishing, and Graining
- 2 to 8 Heads
- Brush process is visible thru internal illumination and large windows
- Quick brush changes permit use of different brushes fro different finishes


Posted on {{news._source.focusDate}} | By {{news._source.newspaper}} | Tags {{crime}}
{{news._source.summary}}


Written statement to Parliament
Details of phase 2 of the Priority School Building Programme and school condition funding allocations.
Today, my right honourable friend the Minister of State for Schools and I have announced over £6 billion of investment to improve the condition of the school estate. Investing in our school buildings is a key part of the government’s long-term economic plan to secure Britain’s future. It will help to ensure children across the country can enjoy schools which are safe, good quality and fit for learning, and it will help to build a fairer society.
Firstly, we will invest around £2 billion in rebuilding and major refurbishment projects - to address the needs of school buildings in the very worst condition. We can confirm today that 277 schools will have the condition need in one or more of their buildings addressed under the second phase of the Priority School Building Programme . As a result, thousands more pupils will see their learning environments transformed. This is in addition to the 260 schools being rebuilt or having their need addressed under the first phase of the programme.
Secondly, we are announcing today over £4-billion-worth of allocations to schools, local authorities, academy trusts and voluntary-aided partnerships to fund the improvement and maintenance of our schools. For the first time in years, we have reliable information on the condition of school buildings from the property data survey - the most comprehensive survey of the school estate ever undertaken. All of those responsible for schools will now receive funding in proportion to the size and condition of their schools. Where necessary, we are providing additional support to those responsible for schools with the most severe condition need.
We know that being taught in school buildings in poor condition can have an adverse effect on pupil attainment. The reforms we are announcing today are a major step towards ensuring that all children have access to a learning environment which is safe and fit for purpose, no matter where they live.
We recognise that good investment decisions require certainty and stability. This is why the funding we have announced today will cover, for the first time, 3 years - from 2015 to 2016, to 2017 to 2018 - giving local authorities, academy trusts and voluntary-aided partnerships some much-needed certainty. They can now plan effectively and make good strategic investment decisions that deliver the best-possible value for their schools.
Investment decisions have a direct and significant impact on local schools and their pupils, and it is important that those decisions are open and transparent. We want to do more to empower local schools and communities to engage with and hold local decision-makers to account for their investment decisions. So we are announcing today that we will collect information from all bodies responsible for the maintenance of the school estate on how they have used their funding. The information will be simple, high-level and easily accessible to the public.
Today’s announcements bring us much closer to delivering the aims of Sebastian James’s ‘Review of school capital’ - to ensure that our capital investment in the school estate provides excellent value for money and, ultimately, gets money to those schools and pupils that need it most.
Details of today’s announcements will be sent to those who will be receiving funding or investment, and be published on the gov.uk website. Copies will be placed in the House Library.
Published: 9 February 2015


About
Projects
Contact
Hello World, we are software developers!
from Microverse
Some of our projects
Project
Project
Project
Project
Project
Project
Let's work together...
How do you take your coffee?
Ridwan's Github Repository
Alan's Github Repository


Last Week in ManageIQ: Conversations lead to merges!
Hello again. Drew here, covering all of the amazing contributions over the last week in ManageIQ.
Featured
Most weeks we feature PRs that provide a large code change or major upgrade for our users. This week I’m going to feature PRs that expose what it takes to turn 357 commits into 113 Merged PRs.
The answer in short is conversation. Lots and lots of conversation! If you’ve often wondered what it would take to experience the click of the magic green button I would ask you to please take the plunge and build a PR. In doing so you can join us in our conversations toward building a better ManageIQ! If you’re not sure where to start, here is a list of our current issues, we could use all the help you can offer!
Improved
Add features based on supported_api_versions to RedHat provider
Over the course of 68 comments Boris made sure that we could use the SupportedFeaturesMixin to set features that are supported by the RedHat provider based on the API versions.
Service power operations API
Although this technically feels like a new API feature, it is an improvement on the features exposed through our API. Tim spent a good amount of time disscussing the changes needed over a 29 part conversation.
Fixed
Allow to add a containers provider with a port other than 8443
14 separate discussions and now Daniel Korn solved a containers provider port problem. Moving forward, whatever port you set will now be used as the “default” role endpoint.
New
UI: Add Container Templates
With much discussion comes brand new features. Zahi patiently worked through over 32 comments and allowed us all to see Container Templates in the UI.
CRUD for OpenStack Host Aggregates
With extreme attention to detail, sseago chatted 36 different times to hone and build API calls for creating, editing, deleting, and adding/removing hosts for OpenStack Host Aggregates.
Chargeback for container images
Ari had some back and forth, and back and forth and… Voilà! 31 separate conversations allowed all of us to report on the number of hours a container is running.
Deleted
Don’t add a million things to the load path, require with directory
Even with stopping the load of a million things we still need to chat about how to delete them. Brandon deleted that many things from the load_path with a back and forth 12 different times. Yes, this is a deletion from memory and not a code deletion. But it was a million things!
Wrapping up
That’s about all the time we have for this conversation! Many more people discussed many more things on a great many PRs this week. You can check them all out here. Until next time I’m off to discuss what it will take to get my next PR merged!


Parentheses indicates a function. Function is a block of code that when called or invoked, perform task. Imagine a doc that does the same trick only when asked.
A function can take an input called 'arguments' which need to be enclosed in parentheses and separated by commas.
Brackets indicate arrays. Arrays is a collection of data or values where each value has an 'index' or location associated with it.
Brackets are used to store the arrays values and its indexes
For example:
In the above, the array is called 'flavors' which has 3 values and the second value, indicated
by flavor[1] is chocolate. Note: Array's index starts with 0.
The curly braces has many uses in Javascript:
They are used to enclosed a string and they are interchangeables as long as it is consistent. If the string is opened with a single quote then it needs to be closed with single quote too.


Where to Go With Developer Content
Last week I wrote up some initial steps for getting started with marketing a developer focused product. The short of it was quite trying to do “marketing” and just start putting out interesting material. A big part of this is sourcing material from your company’s developers. From there you want to gradually shift it from simply interesting technical posts to things that align with your core beliefs and add value to your customers.
Perhaps the easiest way to do this is by highlighting some examples of it.
Teach them how to
Tindie is a marketplace focused on makers. Browsing their site is simply awesome, there’s everything from fully built things to raw supplies to let me start hacking. The biggest problem though is they don’t tell me how to take advantage of so much on their site. Posts similar to New Relic’s on how they made their awesome conference badges with a ready made shopping list of components would both get me excited and teach me something I didn’t know how to do prior.
Now a lot of this may seem obvious, but its not just about giving a how to. This doesn’t belong in a readme or in product documentation. Instead the activity of regularly crafting relevant stories that stretch how people think about hardware hacking should be a top of mind focus. It also positions you as a thought leader within the space. Right now there is no thought leader for makers, and theres ample opportunity to be that.
Timely content
Chipmaker Spark.io recently hugely capitalized on the Nest acquisition by writing a post only days after of how you can build an open source Nest for $70. I suspect they didn’t have such a post just lying around waiting for the acquisition and instead scrambled to get it all together almost as soon as it occurred.
Over time the opportunity will always present itself in some form to attach yourself to another story. Sometimes this can be related to a direct competitor, sometimes its simply tangential. Being willing to quickly invest time when an opportunity presents itself is key to taking advantage of those opportunities. But please don’t let such opportunities be your only way of capturing attention, there should still be a steady beat and focus.
Let your beliefs come out
Nearly everytime I sit down with some founder or very early employee at a company the vibe and impression I get from them is an order of magnitude stronger than the company’s public persona. At the root of every company trying to do something big is an acute focus on a problem with strong opinions about how to solve them. You don’t win people over by giving middle of the road opinions.
Heroku’s often been an example of being extremely opinionated. For a long time you found bits of this within our product such as with an ephermal filesystem – which in the long term enables scalability. Or with directing the separation of code and config – which helps reproducability for when things go wrong and spinning up new copies of your app.
Again the biggest problem with this opinionation wasn’t that it existed, but that it wasn’t talked about clearly or loudly enough. Its now much clearer and broader in the form of 12 Factor which fully codifies those strong opinions which influence the product, but also has applicability outside of Heroku.
All of the approaches
Doing just one of the above really isn’t enough. Having multiple types of content such as the above three allow you to be much more effective. Of course the way you manage them and distribute them changes based on the type of content, but more on that later.


The file or directory you requested was not found. Please note that this does not mean that it does not exist.


com.cyberfront.crdt.operations
Classes
AbstractOperation
CreateOperation
DeleteOperation
GenericOperationManager
OperationManager
ReadOperation
UpdateOperation
Enums
AbstractOperation.OperationType
OperationManager.StatusType


Pygments
Available formatters
« Back To IndexContents
This page lists all builtin formatters.
Common options
All formatters support these options:
- encoding
New in Pygments 0.6.
If given, must be an encoding name (such as "utf-8"). This will be used to convert the token strings (which are Unicode strings) to byte strings in the output (default: None). It will also be written in an encoding declaration suitable for the document format if the full option is given (e.g. a meta content-type directive in HTML or an invocation of the inputenc package in LaTeX).
If this is "" or None, Unicode strings will be written to the output file, which most file-like objects do not support. For example, pygments.highlight() will return a Unicode string if called with no outfile argument and a formatter that has encoding set to None because it uses a StringIO.StringIO object that supports Unicode arguments to write(). Using a regular file object wouldn't work.
- outencoding
New in Pygments 0.7.
When using Pygments from the command line, any encoding option given is passed to the lexer and the formatter. This is sometimes not desirable, for example if you want to set the input encoding to "guess". Therefore, outencoding has been introduced which overrides encoding for the formatter if given.
Formatter classes
All these classes are importable from pygments.formatters.
BBCodeFormatter
Format tokens with BBcodes. These formatting codes are used by many bulletin boards, so you can highlight your sourcecode with pygments before posting it there.
This formatter has no support for background colors and borders, as there are no common BBcode tags for that.
Some board systems (e.g. phpBB) don't support colors in their [code] tag, so you can't use the highlighting together with that tag. Text in a [code] tag usually is shown with a monospace font (which this formatter can do with the monofont option) and no spaces (which you need for indentation) are removed.
Additional options accepted:
- style
- The style to use, can be a string or a Style subclass (default: 'default').
- codetag
- If set to true, put the output into [code] tags (default: false)
- monofont
- If set to true, add a tag to show the code with a monospace font (default: false).
Short names: bbcode, bb Filename patterns: None
HtmlFormatter
Format tokens as HTML 4  tags within a
 tag, wrapped in a
 tag. The
's CSS class can be set by the cssclass option.
If the linenos option is set to "table", the
 is additionally wrapped inside a
 which has one row and two cells: one containing the line numbers and one containing the code. Example:

1 2

def foo(bar): pass

(whitespace added to improve clarity).
Wrapping can be disabled using the nowrap option.
With the full option, a complete HTML 4 document is output, including the style definitions inside a


Open the console! Press Login to acqure a new token-pair, then try making requests towards the first endpoint, and watch the token change everytime you try to make a request when it's expired!
You won't see the requests hit the Network tab as this example is served by an interceptor! Custom URL however will get through!
The refresh token's lifetime is always 3 times as long as the access tokens! If you wait {{ (lifespan || defaultLifespan) * 3 }} seconds, then your request will fail, and you would have to log in again!


One Place to Raise all your Complaints and help in development of Society.
Easy to use.
So easy to use, as no need to fill big forms.
Track
Track the status of your complaint.
Chat Box
Can even give your complaints as simple as chatting with chat box
Police Department
You can raise you complaint that are concerned with police
department. Some of the common complaints are regarding
theft, missing reports, murder, etc.
Electricity Deparmtent
You can raise you complaint that are concerned with Electric
department. Some of the common complaints are regarding
electricity disruption, transformer repair ,etc..
Postal Department
You can raise you complaint that are concerned with postal
department. Some of the common complaints are regarding
missing letter/courier, wrong parcel, etc.
Municipal Deparmtent
You can raise you complaint that are concerned with police
department. Some of the common complaints are regarding
road maintainance ,street light maintaince ,drainage problems ,etc..


Hello all. My first posting here.
On Monday (with luck) Siemens will be calling to install my smart gas and electric meters on behalf of OVO.
I have opted for the Smart Gateway that talks wirelessly to the Smart Meters and plugs into a spare ethernet port on my router. I should then be able to read data on MyOvo.
Has anyone come across this approach to energy monitoring? I have found little information by Googling apart from some very basic FAQs on the Ovo site. Will I be able to monitor my solar export? Can the data be extracted for use with other systems?
Re: Ovo Smart Gateway >>> associated with Smart Meters.
The Ovo Smart Gateway is now transmitting information via my router and displying the smart meter's grid import data on MyOvo.
Is there anyway of extracting this data for recording purposes?
Re: Ovo Smart Gateway >>> associated with Smart Meters.
I presume there is no web API available to you?
Short of writing a script, possibly in PHP, to run and periodically download the web page and parse and extract the numbers from there, or using a tool like Wireshark to monitor the traffic through your router (assuming it's not encrypted), then I don't know. There have certainly been some cutting comments in many quarters about the data from smart meters actually belonging to the consumer, and the suppliers' unwillingness to allow the consumer access to their own data in its raw state.
You could try asking how you can access your data (other than by reading the meter every 10s!) but I suspect your answer will be a deafening silence.
It may well be that you have no option but to end up installing a parallel monitor to record your own set of data.
Re: Ovo Smart Gateway >>> associated with Smart Meters.
Thank you for your help, Robert, I rather thought that would be the case.
I have a Wattson parallel monitor. That appears to be reading grid imported power at about 10% lower than the actual figure measured by the Ovo set-up. The Ovo site does not capture the exported power (although its smart meter does) which is a disappointment.
Regards, Sterling
Re: Ovo Smart Gateway >>> associated with Smart Meters.
I've just had a look at the Wattson details and, while it's not explicitly stated, there are a couple of things that make me think that it is only measuring current and doesn't use a voltage measurement. This has two effects on accuracy. Clearly, for most types of load, the current, and hence the power, depends on the voltage. For purely resistive loads (heaters), it will go down, so the real power will go down in proportion to voltage2, whereas current - and hence the indicated power - goes down in proportion to voltage. But computer power supplies and the like will likely be 'constant power', so current will go up as voltage falls, so in this case the real power remained constant while the indicated power rose. The second effect is that those computer power supplies, pumps, fluorescent and LED lamps won't have a power factor of 1, so real power is less than the product of voltage and current.
Shameless advert: get an OEM set-up!
Re: Ovo Smart Gateway >>> associated with Smart Meters.
Thank you, Robert
After some assessment, the Wattson is indeed far out from the true readings. You are absolutely correct!
The Smart Gateway provided by Ovo is providing some useful data with 1 minute granularity on results.


Class: Aws::DynamoDB::Types::AttributeValueUpdate
| Inherits: |
Struct
|
| Defined in: |
(unknown) |
Overview
For the UpdateItem operation, represents the attributes to be modified, the action to perform on each, and the new value for each.
You cannot use UpdateItem to update any primary key attributes. Instead, you will need to delete the item, and then use PutItem to create a new item with new attributes.
Attribute values cannot be null; string and binary type attributes must have lengths greater than zero; and set type attributes must not be empty. Requests with empty values will be rejected with a ValidationException exception.
Note: When passingAttributeValueUpdate
as input to a Client method, you can use a vanilla Hash
:
{
value: "value", # value <Hash,Array,String,Numeric,Boolean,IO,Set,nil>
action: "ADD", # accepts ADD, PUT, DELETE
}
Instance Attribute Summary collapse
-
#action ⇒ String
Specifies how to perform the update.
-
#value ⇒ Types::AttributeValue
Represents the data for an attribute.
Instance Attribute Details
#action ⇒ String
Specifies how to perform the update. Valid values are PUT
(default),
DELETE
, and ADD
. The behavior depends on whether the specified
primary key already exists in the table.
If an item with the specified Key is found in the table:
PUT
- Adds the specified attribute to the item. If the attribute already exists, it is replaced by the new value.DELETE
- If no value is specified, the attribute and its value are removed from the item. The data type of the specified value must match the existing value\'s data type.If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set
[a,b,c]
and the DELETE action specified[a,c]
, then the final attribute value would be[b]
. Specifying an empty set is an error.ADD
- If the attribute does not already exist, then the attribute and its values are added to the item. If the attribute does exist, then the behavior ofADD
depends on the data type of the attribute:If the existing attribute is a number, and if Value is also a number, then the Value is mathematically added to the existing attribute. If Value is a negative number, then it is subtracted from the existing attribute.
If you use ADD
to increment or decrement a number value for an item that doesn\'t exist before the update, DynamoDB uses 0 as the initial value.In addition, if you use
ADD
to update an existing item, and intend to increment or decrement an attribute value which does not yet exist, DynamoDB uses0
as the initial value. For example, suppose that the item you want to update does not yet have an attribute named itemcount, but you decide toADD
the number3
to this attribute anyway, even though it currently does not exist. DynamoDB will create the itemcount attribute, set its initial value to0
, and finally add3
to it. The result will be a new itemcount attribute in the item, with a value of3
.If the existing data type is a set, and if the Value is also a set, then the Value is added to the existing set. (This is a set operation, not mathematical addition.) For example, if the attribute value was the set
[1,2]
, and theADD
action specified[3]
, then the final attribute value would be[1,2,3]
. An error occurs if an Add action is specified for a set attribute and the attribute type specified does not match the existing set type.Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the Value must also be a set of strings. The same holds true for number sets and binary sets.
This action is only valid for an existing attribute whose data type is number or is a set. Do not use
ADD
for any other data types.
If no item with the specified Key is found:
PUT
- DynamoDB creates a new item with the specified primary key, and then adds the attribute.DELETE
- Nothing happens; there is no attribute to delete.ADD
- DynamoDB creates an item with the supplied primary key and number (or set of numbers) for the attribute value. The only data types allowed are number and number set; no other data types can be specified.Possible values:
- ADD
- PUT
- DELETE
#value ⇒ Types::AttributeValue
Represents the data for an attribute. You can set one, and only one, of the elements.
Each attribute in an item is a name-value pair. An attribute can be single-valued or multi-valued set. For example, a book item can have title and authors attributes. Each book has one title but can have many authors. The multi-valued attribute is a set; duplicate values are not allowed.


Access data stored in 'REDCap' databases using the Application Programming Interface (API). 'REDCap' (Research Electronic Data CAPture; <https://projectredcap.org>) is a web application for building and managing online surveys and databases developed at Vanderbilt University. The API allows users to access data and project meta data (such as the data dictionary) from the web programmatically. The 'redcapAPI' package facilitates the process of accessing data with options to prepare an analysis-ready data set consistent with the definitions in a database's data dictionary.
| Version: | 2.2 |
| Depends: | R (≥ 3.0.0) |
| Imports: | checkmate, chron, DBI, httr, labelVector, lubridate, readr, stringr, tidyr |
| Published: | 2018-08-01 |
| Author: | Benjamin Nutter [aut, ctb, cre], Stephen Lane [ctb], Will Beasley [ctb], Jeffrey Horner [ctb], Will Gray [ctb], Jeremy Stephens [ctb] |
| Maintainer: | Benjamin Nutter <benjamin.nutter at gmail.com> |
| BugReports: | https://github.com/nutterb/redcapAPI/issues |
| License: | GPL-2 |
| URL: | https://github.com/nutterb/redcapAPI/wiki, https://github.com/nutterb/redcapAPI, https://projectredcap.org |
| NeedsCompilation: | yes |
| Citation: | redcapAPI citation info |
| Materials: | README NEWS |
| In views: | WebTechnologies |
| CRAN checks: | redcapAPI results |
| Reference manual: | redcapAPI.pdf |
| Package source: | redcapAPI_2.2.tar.gz |
| Windows binaries: | r-devel: redcapAPI_2.2.zip, r-release: redcapAPI_2.2.zip, r-oldrel: redcapAPI_2.2.zip |
| OS X binaries: | r-release: redcapAPI_2.2.tgz, r-oldrel: redcapAPI_2.2.tgz |
| Old sources: | redcapAPI archive |
Please use the canonical form https://CRAN.R-project.org/package=redcapAPI to link to this page.


MARIE BAIE DES ANGES (ANGEL SHARKS)(director/writer: Manuel Pradal; cinematographer: Christophe Pollock; cast:Vahina Giocante (Marie), Frederic Malgras (Orso), Jamie Harris (Jimmy, Sailor), Nicolas Welbers (Goran), Swan Carpio (Jurec), Andrew Clover (Sailor), 1997)
Reviewed by Dennis Schwartz
Two things could be said for sure about this movie, which uses mostly nonprofessional actors, that it is disturbingly romantic and it is troublingly inconclusive. It tells a nonlinear, fantasy story, and it does so by stunning visualizations that capture the importunate moodiness about a boy and a girl, both of whom are outcasts, living in the beautiful French Riviera region of Côte d'Azur. It stylishly picks up the angst of the two passive teens, loners, who are prone to violence, boredom, sex, alienation, theft, and mental unbalance. There is no telling narrative to sink one's teeth into the story, but the visceral images and the emptiness of the youth's quest are fully explored in an original way, by the first-time director, Manuel Pradal.
Metaphors abound in this film, so much so that one could overdose on all the heavily intended poetical images and still not find much to sate one's hunger for what this film is ultimately about, which becomes the film's major fault. It starts off by making the beautiful landscape (ocean vistas and richly adorned hills) a metaphor and contrasting that with the ugly souls of all the young people in the film. The landmark rising out of the water from two million years ago in the Baie des Anges becomes the main metaphor for the film, as the bay near Nice has two spurs of jutting rocks called angel wings that are shaped like shark fins-- which have deterred invaders from coming ashore throughout the centuries, as their ships get shipwrecked when navigating on these waters. Also, once a year, the custom used to be that a child had to be sacrificed to appease the Gods. If you want something that is predictable about this unpredictable film, you have it here, you can bet your popcorn money that before the film is over some innocent kid will get it.
If you want to read some politics into this film, you might say that the director was using the local American navy base as a metaphor, showing the mixed-reaction it gets from the locals, as he tried to get at what the local reactions to the base are by showing that there is an undercurrent of disrespect and lack of trust for each other.
Marie (Vahina Giocante, who is a professional ballet dancer-in the Opera de Marseilles), is the troubled 15-year-old girl who is fascinated with picking up American sailors at the local navy base, despite some of the apprehensions she has about their sexual aggressiveness. Orso (Frederic Malgras) is a nonprofessional actor, who plays the troubled 17-year-old, the one seeking a gun, cast as a marginalized local. He falls for Marie and goes on a strange and empty romantic idyll with her.
The pair seem suitable for each other, as their desperate lives keep intersecting, and the two misfits continually pull each other out of predicaments. Nothing is told about their family history and where they come from. They have no conversations. It is as if they came out of nowhere and are only figments of our imagination. The mystery about them, gives them a Camus-like sense of existentialism, it is as if the more modern the story tries to be, the more it can be seen rooted in an old philosophy, a philosophy of fatalism.
The beauty in the film is from the never stopping camerawork, picking up one beautiful scene after another, though what connection this all has to do with the movie is anyone's guess. As I thought this film was about loners versus the group psychology prevailing, whereas the loners can't function with any kind of social measure because their troubling souls can find no place in modern French society to fit in. The trouble with that pat explanation of the film, is that the film doesn't help itself any by overloading the imagery, so that if one wanted to, there could by many other explanations for what the film was about. After a certain point, that becomes an annoying feature of the film, as the two teens lose their humanity and seem to be only symbols for what the director was trying to say. This is possible because of there persistent silence and lack of character development.
 Orso lives by robbing houses and is a peripheral hanger-on with the locals.
The point of the story is, that these two losers have found each other and want to share their disturbed lives together without judgment and modification. Aside from being a stunning film to watch, I could see no beauty in its dark character portrayal of the lovers and the film's overall pessimistic attitudes toward youth. The film had too many missing ingredients in it for it to be impactful; I could hardly remember the main characters just a week later after seeing the film, only remembering how alluring Vahina Giocante was and how beautiful the South of France looks.
REVIEWED ON 1/15/2000 GRADE: C+
Dennis Schwartz: " Ozus' World Movie Reviews"
http://www.sover.net/~ozus
<EMAIL_ADDRESS>© ALL RIGHTS RESERVED DENNIS SCHWARTZ
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


People Table
Create new person
Id
Firstname
Lastname
Birthdate
Date of death
Actions
Wciąż żyje
Read
Update
Delete


Cosmetic clinic put patients at risk with 'dirty' surgical tools and potentially lethal doses of anaesthetic
Bearwood Cosmetic Clinic offered a variety of procedures - including vaginoplasty and liposuction - which staff had not had sufficient training to perform
by Kelly Ashmore, https://www.facebook.com/dudleybclive/A Smethwick cosmetic clinic was stripped of its licence for using dirty surgical equipment and administering potentially lethal doses of anaesthetic.
Bearwood Cosmetic Clinic offered a variety of procedures - including vaginoplasty and liposuction - which staff had not had sufficient training to perform.
The "unsafe" theatre was "not fit for purpose", with live wires exposed and plaster falling out of the walls.
Dust also covered cupboards and trolleys, while "brown reddish stains" which had a "foul smell" were found ingrained into the fabric and structure of a bed used for patients to lay on during procedures.
The unhygienic conditions were uncovered during an unannounced Care Quality Commission inspection in 2018. Findings were published by the health watchdog today (Wednesday, November 14).
Patients were given anaesthetic agents above the recommended dosage, which had put their lives at risk. The report also stated emergency equipment had not been readily available - a resuscitation trolley with defibrillator and emergency drugs were located on a different floor.
Black Country social media
Black Country Live is the brand to trust on social media.
Our Facebook account is a firm favourite, with up-to-the-minute news as well as the odd joke and meme. There's also the small matter of the Black Country Bugle Facebook page.
Then there is Black Country Crime Watch, where people share the latest news and warnings and the brilliant We Love The Black Country group.
You can also follow us on Twitter.
If you just want to feel better about this lovely part of the world, check out the Black Country Live Instagram page.
Newsletter
You can get the latest Black Country news sent direct to your email inbox every day.
The findings prompted chief inspector of hospitals, Ted Baker, to write to providers across the country, raising particular concern regarding the use of anaesthetic during liposuction.
Within two days of the inspection, which took place on November 29 last year, the CQC cancelled the clinic's licence due to the "serious and significant risks" it identified.
The clinic has since closed.


This page describes system requirements and installation instructions for the Server JRE for Windows.
This page has these topics:
See "JDK 8 and JRE 8 Installation Start Here" for general information about installing.
See http://www.oracle.com/technetwork/java/javase/certconfig-2095354.html
for information about supported platforms, operating systems, and browsers.
See "Windows System Requirements for JDK and JRE" for minimum processor, disk space, and memory requirements.
If you have any difficulties, see http://docs.oracle.com/javase/8/docs/technotes/guides/tsgdesktop/index.html
, "Windows Online Installation and Java Update FAQ", or submit a bug report at http://bugreport.java.com/bugreport/
.
For any text in this page that contains the following notation, you must substitute the appropriate update version number for the notation.
version
For example, if you are installing Server JRE 8 update release 21, the following string representing the name of the bundle:
server-jre-8uversion-windows.tar.gz
becomes:
server-jre-8u21
-windows.tar.gz
Install the Server JRE by doing the following:
Download the bundle.
Before the file can be downloaded, you must accept the license agreement.
The archive binaries can be installed by anyone (not only root users), in any location that you can write to.
The .tar.gz
archive file (also called a tarball) is a file that can be simultaneously uncompressed and extracted in one step.
Change directory to the location where you would like the Server JRE to be installed.
Move the .tar.gz
archive binaries to the current directory.
Unpack the tarball and install the Server JRE.
The Server JRE files are installed in a directory called jdk1.8.0_
version
in the current directory.
Delete the .tar.gz
file if you want to save disk space.


Now I am able to mount an NFS fold from Android-x86 running as a KVM guest (VNC as
display). The steps I did:
1. Using eeepc-20090820.iso and install it;
2. Boot to debug mode;
3. modprobe sunrpc lockd nfs;
4. netcfg eth0 dhcp;
5. mount -t nfs -o nolock 192.168.xx.xxx:/path/nfs /sdcard, must use the busybox
mount here, toolbox mount doesn't work in my case, always report "Invalid argument".
I don't know why.
6. then exit the shell so you enter android;
7. Alt+F1 to enter shell again;
8. again: netcfg eth0 dhcp;
9. setprop net.dns1 your-dns-server;
10. route add default gw your-default-gw;
At this point, I am able to browser internet and use OI file manager to access the
files in the nfs shared folder.
The virsh xml file for the VM:


Mary Joan Vobejda
Democrat
Transportation Engineer doing transportation planning work. Employed by Jacobs Engineering
Degrees in Civil and Environmental Engineering from the University of Colorado. Professional Engineering License in Colorado.
80122
I have been facilitator and project manager for 30 years. Developing decision processes for groups gathering to consider major improvements to transportation corridors. I managed the project that completed the I-70 Mountain Corridor Context Sensitive Solutions process for decision making and the Programmatic Environmental Impact Statement. In these groups I have worked with supporters and oppositionist to every type of transportation modal improvement. I have recently led the 16th Street Mall project from a stalemate to a completed Environmental Assessment with a decision which has facilitated the movement forward on those improvements.
Donated money to: When we all Vote; Joe Biden; John Hickenlooper; Amy McGrath
None
I have always believed when people of varying points of view come together to work on a problem the solution can meets everyone's needs, perhaps in new and creative ways. I believe this commission is striving to take on a fundamental issue of equity and I would like to be a part of that movement.
Early in the process, I would promote a transparent and published decision process. This allows everyone to understand, before they invest their time and talent, when and how their input will influence the decision. I would then be a vocal advocate for the agreed upon process over all other issues. If you agree with the process being used, you can advocate for your point of view and, because of the process, the dialogue is fair. As the project manager for very controversial project, it has been my job to engage both sides of the debate. To successfully engage both groups, you have to listen to all sides of an issue. As the project manager, I have always worked as impartial in the solutions, listening to all points of view, and acting as an advocate for the process.
I have studied Decision Science, taught groups about the dynamics of making decisions, developed processes that disagreeing groups have agreed to, and demonstrated to elected officials how powerful a solution is when it is supported by all participants. My approach is to a scientifically proven set of steps to develop the teams, their roles/responsibilities, and the milestones decision points. Then work this process in completely open forums.
Female


8 SECONDS A film review by Mark Takacs Copyright 1994 Mark Takacs
New Line Cinema / rated PG-13 / 104 mins Starring: Luke Perry Steven Baldwin Red Mitchell James Rebhorn Carrie Snodgrass Cynthia Geary Classification: Sports Drama Tak Rating: wait for videotape
One-Line-Summary ---------------- The true story of Lane Frost's rise to the top of the rodeo world.
Tak Plot Summary ---------------- 8 SECONDS--you only have to hang on to the back of that bull for a mere 8 SECONDS. Son of a small Oklahoma rancher, Lane Frost (LUKE PERRY) was an acknowledged artist at managing that time with poise and style. As his reputation grows, he, his wife Kellie Kyle (CYNTHIA GEARY) and his family must learn to cope with all the pressures and hardships of the newfound fame.
Tak Thoughts ------------ Although not a Disney film, 8 SECONDS certainly reminded me of one. Lane Frost was a god-honest rodeo cowboy, and Hollywood loves cowboys right now, which perhaps explains the lovable, light treatment of some heavy issues. There's plenty of drama, but it's all easily resolved and doesn't seem to have weight or consequences to it.
The one issue that *is* dealt with is very heavy-handed. Lane has a strained relationship with his father. Dad is very proud of him, but incapable of praise other than through well-meaning critiques, even when Lane's done it all. Letting people know how you feel is an important message, but seems rather cliched here.
The rodeo action in 8 SECONDS was pretty exciting and well filmed, though I suspect that many of the 8 second rides are a bit drawn out. There's not much effort to explain anything about rodeo, we just know that Lane Frost does it and he's damn good. Why? I don't know and it really wasn't all that important for the story.
My favorite over-heard comment about this movie: "Yeah, I liked it, even though it was high on the cheese-factor."
Yep. We get cheatin' hearts, life on the road, and hard drinkin' buddies who are tough as nails but, gosh, deep down they really *care*. Lane is portrayed as a hard working, patient, generous, kind, and usually thoughtful man. He takes the time to talk to the little kids at the rodeos because he "...wishes that someone had taken the time to do that for him." Gosh ....hearts are a-meltin' everywhere.
In another scene, Lane and buddies have returned from a bar where he abstained from drinking, "No thanks, I'll have a Coke please," literally causing a bar-brawl. Lane endures buddy Tuff's ensuing drunken accusations while calmly flossing his teeth.
The other big fault of 8 SECONDS was the hurried feel. They've included all kinds of life messages and end up sacrificing quality for quantity. Near the end, one important scene got a collective "Whaa?!?" as the audience mentally scrambled to incorporate this newest development. The important details of that scene were only explained by an unseen, hard-to-hear rodeo announcer in the background a few scenes later. Maybe the film makers shoulda followed Lane's advice--"do the best you can in those 8 seconds and then get off".
Tak Rating system: ------------------ You might be disappointed by the cheese and shallow treatment if you go to see 8 SECONDS and pay full price. You'll have a much better experience as a $1.99 rental experience. While an inspiring story of an outstanding sportsman, put 8 SECONDS on your VCR list.
avoid at all costs watch it on cable X wait for videotape see once as a matinee see several times (w/friends) as matinee see once at full price see it several times - full and/or matinee see many times at full price
--<EMAIL_ADDRESS>.
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


| 130 | (A) | Fyve thowsaundez of folke es ferly to tełłe |
| 125 | (C) | ¶ Fyve þowsand of folk . it is meruayle to here |
| 126 | (D) | Fyve thousand of folk is ferly to here |
| 124 | (E) | ¶ Fyue thowsynd of folk . ferly it is to here |
| (Ex) | ---- no text ---- | |
| 129 | (L) | fyf þousand of folke is ferre to here |
| 123 | (P) | Fyue . Mille . of folke was ferly to here |
| 125 | (U) | Fyue thousand of folk / ferly is to here |
| (V) | ---- no text ---- |


Introduction/Metadata
This page contains notes about the lesson in which this webpage was created.
Presentation slides are linked below.
This website was created using Github.
Gitlab was mentioned briefly in class. Perhaps it is possible to create a webpage in Gitlab??
What I learnt
- Documentation is important!
- Documentation is taught in USA universities, but not taught in UK or Singapore universities
- How to make Sublime Text 3 autofill a HTML template
- set the file type to "html" using the file extension or set it at the bottom right corner
- type "html"
- press tab to autocomplete
- Sublime Text has INFINITE UNDOS!
- Sublime Text: By typing the tag name (e.g "li") and pressing tab, you can autofill the whole tag
- Unless you want to be a web designer, you don't need to learn to be an expert in HTML
- File priorities when accessing the default page in a Github Pages page.
- (highest priority first): index.html, index.md, readme.md
- Markdown can include html+css because it is ultimately converted to it
Resources to take a look at during and after the class
- DuckDuckGo
- So that google cant track you
- Picpick
- Screenshot and edit, all in one app
- Portable apps
- This is because windows apps have a habit of bloating the registry
- Available for Notepad++, Github Atom, Sublime Text
- Unavailable for Visual Studio Code.
- Portable freeware
- Shhhh! There are some hacked licences here!
- Gimp, Inkscape
- Image creation and editing tools
- Libreoffice
- Microsoft Office alternative
- Darktable
- Adobe Lightroom alternative


Copyright (c) 2003 SuperDimension Games
This game is played on the following board with the following setup:
|
Since a player can only move stacks up to 4 stones, a multiple movement can only have 4 steps. Because of this board topology (a tesseract projection), there are numerous ways to execute a sequence of 4 steps with a single stack.
| A moving sample The white stack can move from [1] to [4], dropping one white stone of each cell and leaving 2 stones behind. If White makes that move, the remaining stack will turn black, since a black stone will be on top. |
|
| A sample
endgame
White's turn. He can win the game by moving his stack of size 4 into the marked cells. |
Check the official website for Tessaron with lots of information.


| Interface | Description |
|---|---|
| Connect | |
| Database | |
| DspObject | |
| Mode |
| Class | Description |
|---|---|
| DebugLog |
This class handles the collection and output of debugging information.
|
| DspConnect | |
| DspCookies |
This is the cookie manager class.
|
| DspDatabase | |
| DspException |
The root class of all DSP exceptions
|
| DspFactory |
This is used to seed and initialize each page request with the required PageContext,
similar to JspFactory.
|
| DspOpen |
Manager of all open statements.
|
| DspPage |
This class is the default class that all DSP pages extend.
|
| DspPageContext | |
| DspProp | |
| DspReadOnlyException | |
| DspRequest | |
| DspStatement | |
| DspStatementLog | |
| DspStatementScan | |
| DspStatementSql | |
| DspUser | |
| DspWriter | |
| Pool | |
| ServletLog | |
| TargetWriter | |
| ThreadState |
Copyright (c) 2015, Troy D. Heninger


Recorded September 18, 2014
Michelangelos, Hamilton, ON
We asked them for answers to some prudent city building questions. Watch the videos here.
Read our 12 Priorities
{{ question }}


Static Public Member Functions | |
| static | exists ($name) |
| static | isEmpty ($name) |
| static | get ($name, $default= '') |
| static | set ($name, $value, $expiry=self::OneYear, $path= '/', $domain=false, $secure=false, $httponly=true) |
| static | delete ($name, $path= '/', $domain=false, $remove_from_global=false) |
| static | setMulti ($name, $array, $expiry=self::OneYear, $path= '/', $domain=false) |
| static | getAllMulti ($name, $default= '') |
| static | getMulti ($name, $key, $default= '') |
Data Fields | |
| const | Session = null |
| const | OneHour = 3600 |
| const | OneDay = 86400 |
| const | SevenDays = 604800 |
| const | ThirtyDays = 2592000 |
| const | SixMonths = 15811200 |
| const | OneYear = 31536000 |
| const | Lifetime = -1 |
Static class for creation and management of cookies
DESCRIPTION
Some example usage: Style preference, persists only until the browser is closed Cookie::set('style', 'black_and_orange', Cookie::Session); Remember the users email address to pre-fill the login form when they return Cookie::set('rememberme'<EMAIL_ADDRESS>Cookie::ThirtyDays); Tracking cookie that effectively lasts forever Cookie::set('tracking', 'sdfoiwuyo8who8wfhow8fhso4', Cookie::Lifetime, '/', '.domain.com');
|
static |
| $name | ||
| string | $path | |
| bool | $domain | |
| bool | $remove_from_global | Set to true to remove this cookie from this request. |
|
static |
determines if a cookie already exists with this name with any value
| string | $name | the name of the cookie |
|
static |
Get the value of the given cookie. If the cookie does not exist the value of $default will be returned.
| string | $name | |
| string | $default |
|
static |
Unserializes cookie data, set by setMulti, above. If the cookie does not exist the value of $default will be returned.
| string | $name | |
| string | $default |
|
static |
Get the value of an individual item in a cookie set by setMulti. If the cookie does not exist the value of $default will be returned.
| string | $name | |
| string | $key | |
| string | $default |
|
static |
Returns true if there is no cookie with this name or it's empty, or 0, or a few other things. Check http://php.net/empty for a full list.
| string | $name | the name of the cookie |
|
static |
Set a cookie. Silently does nothing if headers have already been sent.
| $name | ||
| $value | ||
| int | $expiry | |
| string | $path | |
| bool | $domain | |
| bool | $secure | |
| bool | $httponly |
|
static |
Set a cookie with multiple values. Essentially, just serializes an array Neat way to set multiple values in one cookie, rather than a bunch. Silently does nothing if headers have already been sent.
| $name | ||
| $array | ||
| int | $expiry | |
| string | $path | |
| bool | $domain |


This work of art reflects life in Ireland at the turn of the last century, and by rejecting euphemism, reveals to the Irish their unromantic reality. Each of the 15 stories offers glimpses into the lives of ordinary Dubliners, and collectively they paint a portrait of a nation.


This image is in the public domain because it was solely created by NASA. NASA copyright policy states that "NASA material is not protected by copyright unless noted".


Sample Annotation Tool for Einstein Vision Object Detection
Please increase screen width to more than 1100px.


SymbolList
stockTrackAngularJsApp
Gets all Symbols from the watch list and position list. All Symbols should be cloned from this list.