James Arthur quits Twitter after trolls 'hurt' him with online abuse
Arthur rose to fame in 2012 when he won the ninth series of The X Factor
by James Rodger, https://www.facebook.com/jamesrodgerjournalistJames Arthur has been forced to quit Twitter - after being left "hurt" by trolls online.
The singer said some of the abuse directed at him had gone too far.
The 31-year-old, who shot to fame through ITV1 talent show The X factor, told trolls that if that was their aim, they had won.
Arthur - who has previously spoken about his experience of depression and anxiety - tweeted on Sunday: "Have to be honest some of the things I read on here go a bit too far and quite frankly f***** hurt, if that was your goal you win."
The singer, from Middlesbrough, then continued: "Maybe I should have thicker skin at this point I don't know but either way this is my last tweet, I'm loggin off."
He concluded: "Peace out Twitter friends."
He added: "All posts will be done by digital team moving forward.
"Thanks for all the love and support shown by fans on this platform over the years it's been emotional but I've gotta delete this app."
In a final update, Arthur then tweeted to followers: "Much love and respect JA."
Arthur rose to fame in 2012 when he won the ninth series of The X Factor.


| Package | Description |
|---|---|
| com.cyc.base |
Interfaces for low-level interaction with Cyc; this code is not supported for external developers.
|
| com.cyc.base.cycobject |
Interfaces for representations of Knowledge Base objects such as constants, functional expressions, lists, rules and assertions; this code is not supported for external developers.
|
| com.cyc.base.inference |
Interfaces for working with Cyc inferences; this code is not supported for external developers.
|
| com.cyc.base.kbtool |
Interfaces for common operations for KB content, such as assertion, querying, etc; this code is not supported for external developers.
|
| com.cyc.baseclient |
Reference implementation of the Base Client API; this code is not supported for external developers.
|
| com.cyc.baseclient.cycobject |
Provides the attributes and behavior of Base Client API Knowledge Base objects such as
constants, functional expressions, lists, rules and assertions; this code is not supported for external developers.
|
| com.cyc.baseclient.datatype |
Classes for converting between CycObjects and common data types and quantifications (e.g., time, money); this code is not supported for external developers.
|
| com.cyc.baseclient.inference |
Provides classes for working with Cyc inferences; this code is not supported for external developers.
|
| com.cyc.baseclient.kbtool |
Classes which wrap common operations for KB content, such as assertion, querying, etc; this code is not supported for external developers.
|
| com.cyc.baseclient.util |
Provides a set of utility classes to support the Base Client API Interface; this code is not supported for external developers.
|
| com.cyc.km.query.answer.justification |
Provides the classes specific to working with justifications for Cyc inference answers.
|
| com.cyc.query |
Provides the core classes for constructing, specifying, and running Cyc
queries.
|
| Modifier and Type | Method and Description |
|---|---|
String |
CycAccess.maybeAddLoginRedirect(String urlString,
Fort cyclist,
DenotationalTerm applicationTerm)
Try to enhance
urlString to log
cyclist in and redirect to
the page it would otherwise go to directly. |
| Modifier and Type | Interface and Description |
|---|---|
interface |
CycConstant |
interface |
CycNumber |
interface |
ElMt
Defines the behavior of a Epistemological Level Microtheory (ELMt), which can be
a Constant, NART (Non-Atomic Reified Term) or NAUT (Non-Atomic Unrefied Term).
|
interface |
Fort |
interface |
Nart |
interface |
Naut |
interface |
NonAtomicTerm
NonAtomicTerm is designed to...
|
| Modifier and Type | Method and Description |
|---|---|
DenotationalTerm |
InformationSource.getCycL() |
DenotationalTerm |
NonAtomicTerm.getFunctor() |
| Modifier and Type | Method and Description |
|---|---|
String |
InformationSource.CitationGenerator.getCitationStringForSource(DenotationalTerm source,
CycAccess cycAccess)
Ask Cyc for an image for the citation string to use for the specified source.
|
| Modifier and Type | Method and Description |
|---|---|
DenotationalTerm |
InferenceResultSet.getDenotationalTerm(CycVariable col)
Returns, as a
DenotationalTerm , the value at the current row and at the
column identified by col which should be a
CycVariable in the original query. |
DenotationalTerm |
InferenceResultSet.getDenotationalTerm(int colIndex)
Returns, as a
DenotationalTerm , the value at the current row and at the
column identified by colIndex . |
DenotationalTerm |
InferenceResultSet.getDenotationalTerm(String col)
Returns, as a
DenotationalTerm , the value at the current row and at the
column identified by col . |
| Modifier and Type | Method and Description |
|---|---|
DenotationalTerm |
LookupTool.getTermByName(String termName)
Gets a DenotationalTerm (i.e.
|
| Modifier and Type | Method and Description |
|---|---|
void |
AssertTool.assertGaf(CycObject mt,
DenotationalTerm predicate,
DenotationalTerm arg1,
DenotationalTerm arg2)
Asserts a ground atomic formula (gaf) in the specified microtheory MT.
|
void |
AssertTool.assertIsa(DenotationalTerm instance,
DenotationalTerm aCollection)
Assert that the cycFort is a collection, in the UniversalVocabularyMt.
|
Fort |
AssertTool.findOrCreateIndividual(String IndividualName,
String comment,
DenotationalTerm commentMt,
DenotationalTerm isa)
Finds or creates a new individual term.
|
Object |
LookupTool.getArg1(Fort predicate,
DenotationalTerm arg2,
CycObject mt)
Returns the first arg1 term from gafs having the specified predicate and arg2 values.
|
CycList |
LookupTool.getArg1s(Fort predicate,
DenotationalTerm arg2,
CycObject mt)
Returns the list of arg1 terms from gafs having the specified predicate and arg2 values.
|
| Modifier and Type | Method and Description |
|---|---|
String |
CycClient.maybeAddLoginRedirect(String urlString,
Fort cyclist,
DenotationalTerm applicationTerm)
Try to enhance
urlString to log cyclist in and redirect
to the page it would otherwise go to directly. |
| Modifier and Type | Class and Description |
|---|---|
class |
CycConstantImpl
Provides the behavior and attributes of a Base Client Constant.
|
class |
CycConstantSentence
CycConstantSentence is designed to be an object that represents Sentences that
are single terms (the only known instance of this is #$False.
|
class |
CycNumberImpl
Provides the behavior and attributes of a Base Client Number.
|
class |
ElMtConstant
Provides the container for the ELMt CycConstantImpl (Epistemlogical Level Microtheory
Constant).
|
class |
ElMtCycNaut
Provides the container for the ELMt NAUT (Epistemlogical Level Microtheory
Non Atomic Un-reified Term).
|
class |
ElMtNart
Provides the container for the ELMt NART (Epistemlogical Level Microtheory
Non Atomic Reified Term).
|
class |
FortImpl
This class implements a Cyc Fort (First Order Reified Term).
|
class |
NartImpl
This class implements the behavior and attributes of a
a Base Client NART (Non Atomic Reified Term).
|
class |
NautImpl
NautImpl is designed to...
|
| Modifier and Type | Method and Description |
|---|---|
DenotationalTerm |
InformationSourceImpl.getCycL() |
DenotationalTerm |
NautImpl.getFunctor() |
DenotationalTerm |
NartImpl.getFunctor()
Returns the functor of the NartImpl.
|
| Modifier and Type | Method and Description |
|---|---|
String |
InformationSourceImpl.CycCitationGenerator.getCitationStringForSource(DenotationalTerm source,
CycAccess cycAccess)
Ask Cyc for an image for the citation string to use for the specified source.
|
| Constructor and Description |
|---|
FormulaImpl(DenotationalTerm functor,
Object... args)
Create and return a new CycFormula with the specific functor and args.
|
InformationSourceImpl.CycCitationGenerator(DenotationalTerm style)
Make a new citation generator with the specified style and default markup
language (HTML).
|
InformationSourceImpl.CycCitationGenerator(DenotationalTerm style,
DenotationalTerm markupLanguage)
Make a new citation generator with the specified style and markup language.
|
InformationSourceImpl(DenotationalTerm sourceTerm,
CycAccess cycAccess) |
InformationSourceImpl(DenotationalTerm sourceTerm,
InformationSource.CitationGenerator citationGenerator,
CycAccess cycAccess) |
InformationSourceImpl(DenotationalTerm term,
URL iconURL,
String citationString) |
NautImpl(DenotationalTerm functor,
Object... args) |
| Modifier and Type | Method and Description |
|---|---|
static DenotationalTerm |
MoneyConverter.lookupCycCurrencyTerm(Currency curr) |
| Modifier and Type | Method and Description |
|---|---|
static Currency |
MoneyConverter.lookupCurrency(DenotationalTerm cycTerm) |
| Modifier and Type | Method and Description |
|---|---|
DenotationalTerm |
DefaultResultSet.getDenotationalTerm(CycVariable col)
Returns, as a
DenotationalTerm , the value at the current row and at the
column identified by col which should be a
CycVariableImpl in the original query. |
DenotationalTerm |
AbstractResultSet.getDenotationalTerm(int colIndex)
Returns, as a
DenotationalTerm , the value at the current row
and at the column identified by colIndex . |
DenotationalTerm |
AbstractResultSet.getDenotationalTerm(String col)
Returns, as a
DenotationalTerm , the value at the current row
and at the column identified by col . |
| Modifier and Type | Method and Description |
|---|---|
InferenceWorker |
KbQueryFactory.getInferenceWorker(CycAccess access,
DenotationalTerm kbq,
long timeoutMsecs,
boolean sync)
Create a new instance of InferenceWorker, either synchronous or asynchronous,
that will run the query in the ELMt and with the parameters specified by the
CYC query in the Cyc KB and uniquely denoted by the KBQ parameter.
|
InferenceWorker |
KbQueryFactory.getInferenceWorkerWithSubstitutions(CycAccess access,
DenotationalTerm kbq,
Map<CycVariableImpl,Object> substitutions,
long timeoutMsecs,
boolean sync)
Create a new instance of InferenceWorker, either synchronous or asynchronous,
that will run the query in the ELMt and with the parameters specified by the
CYC query in the Cyc KB and uniquely denoted by the KBQ parameter.
|
InferenceWorker |
KbQueryFactory.getInferenceWorkerWithTreeSubstitutions(CycAccess access,
DenotationalTerm kbq,
Map<CycObject,Object> substitutions,
long timeoutMsecs,
boolean sync)
Similar to
getInferenceWorkerWithSubstitutions , but performs a tree substitution on the query sentence. |
static InferenceWorker |
KbQueryFactory.prepareKBQuery(CycAccess access,
DenotationalTerm kbq,
long timeoutMsecs,
boolean sync)
Create a new instance of InferenceWorker, either synchronous or asynchronous,
that will run the query in the ELMt and with the parameters specified by the
CYC query in the Cyc KB and uniquely denoted by the KBQ parameter.
|
static InferenceWorker |
KbQueryFactory.prepareKBQueryTemplate(CycAccess access,
DenotationalTerm kbq,
Map<CycVariableImpl,Object> substitutions,
long timeoutMsecs,
boolean sync)
Create a new instance of InferenceWorker, either synchronous or asynchronous,
that will run the query in the ELMt and with the parameters specified by the
CYC query in the Cyc KB and uniquely denoted by the KBQ parameter.
|
static InferenceWorker |
KbQueryFactory.prepareKBQueryTreeTemplate(CycAccess access,
DenotationalTerm kbq,
Map<CycObject,Object> substitutions,
long timeoutMsecs,
boolean sync)
Similar to
prepareKBQueryTemplate , but performs a tree substitution on the query sentence. |
| Modifier and Type | Method and Description |
|---|---|
DenotationalTerm |
CycLookupTool.getTermByName(String termName)
Gets a DenotationalTerm (i.e.
|
| Modifier and Type | Method and Description |
|---|---|
void |
CycAssertTool.assertGaf(CycObject mt,
DenotationalTerm predicate,
DenotationalTerm arg1,
DenotationalTerm arg2)
Asserts a ground atomic formula (gaf) in the specified microtheory MT.
|
void |
CycAssertTool.assertIsa(DenotationalTerm instance,
DenotationalTerm aCollection)
Assert that the cycFort is a COLLECTION, in the UniversalVocabularyMt.
|
Fort |
CycAssertTool.findOrCreateIndividual(String IndividualName,
String comment,
DenotationalTerm commentMt,
DenotationalTerm isa)
Finds or creates a new individual term.
|
Object |
CycLookupTool.getArg1(Fort predicate,
DenotationalTerm arg2,
CycObject mt)
Returns the first arg1 term from gafs having the specified PREDICATE and arg2 values.
|
CycList |
CycLookupTool.getArg1s(Fort predicate,
DenotationalTerm arg2,
CycObject mt)
Returns the list of arg1 terms from gafs having the specified PREDICATE and arg2 values.
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
PasswordManager.areLoginCredentialsValid(CycConstantImpl user,
DenotationalTerm applicationTerm,
char[] unencryptedPassword)
Verify that a user/password combination for an application is valid.
|
String |
PasswordManager.lookupPassword(CycConstantImpl user,
DenotationalTerm applicationTerm)
Look up the (encrypted) password for user using application.
|
boolean |
PasswordManager.updatePassword(CycConstantImpl user,
DenotationalTerm applicationTerm,
char[] unencryptedPassword)
Update the password for the specified user and application.
|
| Modifier and Type | Method and Description |
|---|---|
DenotationalTerm |
ProofViewJustification.getAddressee() |
| Modifier and Type | Method and Description |
|---|---|
void |
ProofViewJustification.setAddressee(DenotationalTerm addressee) |
| Constructor and Description |
|---|
QueryImpl(DenotationalTerm id)
Deprecated.
New code should use
Query#Query(com.cyc.kb.KBIndividual)
. |
Copyright © 2013–2015 Cycorp, Inc. All rights reserved.


@* * Copyright 2019 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @(params: Map[String, Any]) @uk.gov.hmrc.hmrcemailrenderer.templates.helpers.html.template_main(params, "Issued: Binding Tariff Information (BTI) ruling") { @uk.gov.hmrc.hmrcemailrenderer.templates.helpers.html.salutation(params)
We have issued your BTI ruling for application @params("reference") for @params("itemName").
Sign into your BTI account on GOV.UK in Binding Tariff Information (Notice 600) to:
Get more information on BTI rulings including how to appeal on GOV.UK in the guide on Binding Tariff Information (Notice 600).
For security reasons we have not included a link with this email.
From Tariff Classification Service
}


Sign Up
Email address
Password
Mobile Phone
Sign up
Verification Code
Verification Code
Verify
Please sign in
Username
Password
Forgot Password?
Sign In
Create Account
Success!
Reset Password
|
Logout


Are you ready?!?
One Player
Two Player
Options
Choose your option
Kindergarten Sight Words
First Grade Sight Words
Second Grade Sight Words
Addition
Subtraction
Player 1 Question Types
Begin Game
Game


The Rutgers University Creation of Games Society is dedicated to researching, learning, understanding, and teaching the techniques and theories used in video game development in an environment which provides for its members a place expand their knowledge of the concepts and in which they may develop and design video games and theories in the field.
JOIN US
We meet every Tuesday night from 7:00 PM to 9:00 PM in the Hill Center Room 252 (The Cave).
Here is an inside look at our meetings!
Click on the images to make them bigger


A Temporal.Calendar object is an immutable Object representing a calendar.
Properties of the Temporal.Calendar Constructor
The Temporal.Calendar prototype:
- has a [[Prototype]] internal slot whose value is %FunctionPrototype%.
- has the following properties:
Temporal.Calendar.prototype
The initial value of Temporal.Calendar.prototype is %Temporal.Calendar.prototype%.
This property has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *false* }.
get Temporal.Calendar [ @@species ]
`Temporal.Calendar[@@species]` is an accessor property whose set accessor function is *undefined*.
Its get accessor function performs the following steps:
1. Return the *this* value.
The value of the *"name"* property of this function is *"get [Symbol.species]"*.
Temporal.Calendar.from ( _item_ )
The `from` method takes one argument _item_.
The following steps are taken:
1. If Type(_item_) is Object, then
1. Return _item_.
1. Let _stringIdent_ be ? ToString(_item_).
1. Return ? GetBuiltinCalendar(_stringIdent_).
This function is the %Temporal.Calendar.from% intrinsic object.
Properties of the Temporal.Calendar Prototype Object
The Temporal.Calendar prototype object
- is the intrinsic object %Temporal.Calendar.prototype%.
- is itself an ordinary object.
- is not a Temporal.Calendar instance and does not have a [[InitializedTemporalCalendar]] internal slot.
- has a [[Prototype]] internal slot whose value is %Object.prototype%.
Temporal.Calendar.prototype.constructor
The initial value of Temporal.Calendar.prototype.constructor is %Temporal.Calendar%.
Temporal.Calendar.prototype[ @@toStringTag ]
The initial value of the @@toStringTag property is the string value `"Temporal.Calendar"`.
This property has the attributes { [[Writable]]: *false*, [[Enumerable]]: *false*, [[Configurable]]: *true* }.
get Temporal.Calendar.prototype.id
`Temporal.Calendar.prototype.id` is an accessor property whose set accessor function is undefined.
Its get accessor function performs the following steps:
1. Let _calendar_ be the *this* value.
1. Return ? CalendarToString(_calendar_).
Temporal.Calendar.prototype.dateFromFields ( _fields_, _options_, _constructor_ )
The `dateFromFields` method takes three arguments, _fields_, _options_, and _constructor_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.yearMonthFromFields ( _fields_, _options_, _constructor_ )
The `yearMonthFromFields` method takes three arguments, _fields_, _options_, and _constructor_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.monthDayFromFields ( _fields_, _options_, _constructor_ )
The `monthDayFromFields` method takes three arguments, _fields_, _options_, and _constructor_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.dateAdd ( _date_, _duration_, _options_, _constructor_ )
The `dateAdd` method takes four arguments, _date_, _duration_, _options_, and _constructor_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.dateSubtract ( _date_, _duration_, _options_, _constructor_ )
The `dateSubtract` method takes four arguments, _date_, _duration_, _options_, and _constructor_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.dateDifference ( _one_, _two_, _options_ )
The `dateDifference` method takes three arguments, _one_, _two_, and _options_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.year ( _date_ )
The `year` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.month ( _date_ )
The `month` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.day ( _date_ )
The `day` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.era ( _date_ )
The `era` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.dayOfWeek ( _date_ )
The `dayOfWeek` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.dayOfYear ( _date_ )
The `dayOfYear` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.weekOfYear ( _date_ )
The `weekOfYear` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.daysInWeek ( _date_ )
The `daysInWeek` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.daysInMonth ( _date_ )
The `daysInMonth` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.daysInYear ( _date_ )
The `daysInYear` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.monthsInYear ( _date_ )
The `monthsInYear` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.isLeapYear ( _date_ )
The `isLeapYear` method takes one argument _date_.
The following steps are taken:
1. Throw an *Error* exception.
Temporal.Calendar.prototype.toString ( )
The following steps are taken:
1. Let _calendar_ be the *this* value.
1. Perform ? RequireInternalSlot(_calendar_, [[InitializedTemporalCalendar]]).
1. Return _calendar_.[[Identifier]].
This function is the %Temporal.Calendar.prototype.toString% intrinsic object.


Free island-wide delivery for orders above $150
appeaseofcake
Cakes
About
Contact
Register
LOGIN
Payment Fail
Payment Successful
Payment id :
Thank you for shopping with us.
Continue Shopping


As WH Prepares For Public Impeachment Hearings, Fretting Most About Bill Taylor
As President Donald Trump’s team braces for public impeachment inquiry testimonies beginning next week, they’ve focused much of their trepidation on the first witness in particular: Ukraine diplomat Bill Taylor.
According to CNN, the White House is wary of the combination of Taylor’s credibility — longtime and current State Department official, veteran, personally recruited by Secretary of State Mike Pompeo — and the damning information he first conveyed behind closed doors.
Trump is so anxious about the upcoming testimony that he barked at Pompeo for hiring Taylor in the first place, a rare rebuke for one of Trump’s preferred secretaries.
Taylor’s closed-door testimony was one of the most damning days for Trump during the impeachment inquiry so far, as he detailed the quid pro quo at the heart of the Ukraine pressure campaign.


|
[Aus: "Heimat des Dilettantismus",
"http://www.henrys.de/daniel/"]
SNMP The Simple Network Management Protocol
When we were young, we wanted to become a pilot, astronaut or a fire engine driver. -Our mothers would laugh at us.
When we were in our pre-teens, we wanted to become programmers.
-Our fathers would laugh at us.
When we became programmers, we wanted to become network administrators.
- The world (our girlfriends included) would laugh at us.
The above is not a figment of our imagination but facts relating to our
daily life. When we started off as programmers we proved our fathers
wrong. Sorry, we could not do the same regarding our mothers. This left
us with the world and our girlfriends to deal with. It took us some
time to devise ways to prove them wrong. But before we let you into our
secret of how to do it, lets try and justify their laughs. Network administrators of yore were perfect nerds, living in
ivory towers(actually dingy low-lit rooms , disconnected from the
world). In short, they were people to be avoided, basically belonging
to class called social rejects. The rationale behind this was very
simple. Network administrators had no control over their networks. The
designation 'Network administrator' sounded glamorous but that was
where the glamour ended. All he was supposed to do was to add/remove
users to the network , add/remove network paraphernalia ( or was it
peripherals?). If he got bored of doing all this, he would set up the
network all over again and life went on. (By the way, the world and his
girlfriend had left him)
The Empire Strikes back
When he coined the title, George Lucas did not even dream that
it may become a mission statement for many a network administrators on
this planet. The network administrator it was high time to take control
of the life (life had become synonymous with routers, bridges and other
peripherals.) To a layman, getting control over his life meant knowing
his wife, family, his pay-check, his dues( however unpleasant they may
seem.) But to a network administrator, it meant knowing the traffic on
his routers, the load on the server etc. But the big question was 'How
does he do it? Simple SNMP ???
Sorry, we did not mean to shock you. We thought that you would
have got impatient reading this stuff and so we decided to get down to
business. SNMP is an acronym for Simple Network Management Protocol. It
belongs to the rare breed of computer jargon which justify their name,
i.e it is actually simple. As seeing is believing let us check out
SNMP.
Imagine a situation where a company has 50 routers , 20
servers and all sorts of network hardware that runs the TCP/IP suite (A
network administrators utopian dream!!). In such a situation questions
like 'What is the load on the server?', 'What time does this loading
take place ?' or 'When to expand the lease line?' etc formed part of
the network administrators nightmare ( almost lead to his downfall). To
add to his sorrow, he had to work with diverse piece of equipment from
diverse companies running equally diverse protocols. Variety is the
spice of life you may say but this is the case of food ( for thought)
getting too spicy. The only thing that was common between the network
elements was that they ran the TCP/IP suite. Therefore TCP/IP formed
the lowest common denominator as it was the only thing we could
standardize on. Beyond this standardization was almost zero, in some
cases it approached the negative index. The Network Administrator had
to figure out a way to manage his network which was running the TCP/IP
suite. Therefore this gained the generic term network management under
TCP/IP. Here is how the Network Administrators went about their work. The first thing he did was to built himself another ivory
tower ( a cleaner one this time). This he named it as the 'Network
Management Station'. He then went about stating the guidelines for the
protocol to be called 'Simple Network Management Protocol (SNMP). The
guidelines were as follows [ in no order of importance]
- The protocol should be cross-platform compatible ( No we DON'T use
JAVA). Put simply, it meant that the rules for talking to a router from
CISCO should not differ from those used to talk to a router from 3COM.
( All trademarks acknowledge)
- The language used ( if any) and the output generated should
not increase the network traffic. Rationale:- Choking of network by the
traffic should not lead the network administrator being fired.
- It should be fast. Faster network always gave the network
administrator a 'high'. Well that is one of the reasons as to why a
network administrator did not buy a Ferrari.
- The system was to work as if it were operating in a
client-server atmosphere with the software running at the network
management station acting as the client and the software running at the
other network elements ( jargonsss.... but basically stuff like
routers, bridge , etc. ) acting as the server. Perfect case of 'cart
drawing the horse". (Taming of the shrew ( or the network)). The
factors or the variables affecting the server were to be stored in a
database.
But before he did all this, he implemented the most important item
on his agenda. He thought life was getting too simple due to all the
'simple' stuff floating around. He decided to rename everything that he
set his eyes on. So the client software became a manager ( to reflect
his new status), the server software became the agent. ( it would have
been a better idea to call them spies because all they do was to pass
on information about the network element). The database seemed to
remind people of likes of ORACLE, SYBASE etc. So he decided to rename
it as the Management Information Base or the MIB. The variables were
formatted using a data definition language called the ASN.1, but more
on this later. The variable itself was renamed as an object. The final
objective of the entire exercise was to present a case of name changed
to protect identity. We recommended you take a break (coffee or
otherwise) because it is going to be a hell of a day today. The Network Administrator had by now renamed most ( if not
all the) factors ( name unchanged) involved in making up a network .
Rule of nature state that every simple answer gives rise to complex
questions. So the question was how does the Network Administrator know
which element he was to communication with? He, therefore went around
drawing a 'tree diagram' of the network. He arranged the factors
involved as part of the tree. The tree diagram was used to
- define administrative relationships
- organize network management data
- assign a unique identifier to every network management variable.
As he was still in the mood to rename things, so he decided to call the
tree as the Structure of Management Information (SMI) . A sample of the
tree diagram (or the SMI) is shown below.
The elements of the SIM were called as Groups or modules.
These groups were nothing but a collection of objects ( the good old
variable) relating to that group. For example the Ethernet module
contained further groups of Ethernet related stuff like DIX, 802.3 and
so on. These were further subdivided to obtain groups or objects as the
case may be. As each module/group and objects were numbered, accessing
them became a child's play ( not necessarily the network
administrator's child) The modules at the end of any node was called
the leaf node ( network administrators are the most eco-friendly people
on the planet)
The elements in the SMI have been assigned numbers. This makes
traversing through the SMI easier. You always travel from the roots up
( or down). For example to access the interfaces 'leaf', we traverse
through root - iso - org - dod - internet - mgmt - mib - interfaces. As
numbering has been enabled to access the same interface all we say is
<IP_ADDRESS>.2.1.2 (eco-friendly again - less waste paper).
Pressing the accelerator
By now, or so we hope you will be able to visualize the setup
of the entire SNMP structure. If you don't then please hit the Page Up
and go through it all over again. If you did understand then it is time
for some action, Let's put all the pieces together. The manager can
seek any data from the agent at any point of time. To do this the
manager sends a UDP packet to the agent. Actually any other protocol
can be used instead of UDP. Despite being unreliable UDP won the battle
for the post of the messenger because of it's ability to have a very
small packet size. This helped fulfill the second guideline of the
specifications. The manager speaks to the agent on port 161 whereas the
agent responds by communicating with the manager on port 162.
The SNMP version 1 has only 5 (unbelievable but true) commands in it's instruction set. They are listed as below
- Get_Request - used to request the value of 1 or more MIB variable
- Get_Next_Request - used to read the next value , works in a sequential way
- Set_Request - used to update one or more MIB value
- Get_Response - Returns an answer to the above 3 commands
- Trap - used to report significant events on the network. Such
events include 'cold or warm restart' or a failed link.
By the way, it reminds us to tell you that the instruction set is
no longer called an instruction set but an SNMP Protocol Data Unit or a
PDU. In the above PDU, the first 3 are generated by the manager. They
are self explanatory . Hence lets not waste disk space talking about
them . The other two are generated by the client. The differentiation
comes in the fact that 'Get_Response' works in the polling mode i.e it
forms the reply to a query from the manager, whereas 'trap' is
generated by the agent only under certain condition independent of the
presence or absence of a query i.e it is interrupt driven. For the
uninitiated, lets put it in a simpler format. Polling (Get_Response) is
akin to you asking your date for kiss. Interrupt driven (Trap) is your
date giving you a kiss without you asking for it.
SNMP version 2 is the latest version of SNMP commercially
available. For once developers have retained the earthly flavor of the
previous version. They struck to their task and have kept the SNMP as
simple as possible. SNMP v2 is just a superset of SNMP v1. The 5 basic
instruction of the SNMP v1 . PDU have been retained though some names
have been changed (moods at play again). Get_Response whereas trap has
been renamed as SNMPv2 - trap. This however does not affect them.
Functionality remain the same. The 'Get' function have also been
strengthened. In SNMP v1 the get_request and get_next request would
fail in case one of the read processes failed. Generation of error
signals was virtually non-existant. However in SNMPv2 request failure
leads to appropriately error messages generation. Besides these 5
instructions, SNMPv2 includes 2 new instruction
- inform request
- get_bulk_request
Inform request is used by a network administrator to talk to his
brethren i.e. network administrator at other network management
stations. Birds of a feather flock together. This enables a large
complex network to be further subdivided into smaller network, each
with his own network management station. Get_Bulk_Request is used to
transfer large block of data from the MIB to the Manager in a single
transfer operation. That's all that consists the PDU of SNMPv2.
Lets turn our attention to the objects that constitute the MIB
of a device . An object is actually a variable which holds information
about a particular device. An object is known by the following
- A unique name, called object identifier ( remember the mood)
- Attributes :- This include
- - data type
- details required for the correct implementation.
- - status information
- Read/Write option available
On deciding the datatypes to be used in SNMP, the designers
remembered their motto of keeping SNMP simple. Therefore only
elementary datatypes like integer or octet strings are available under
SNMP. The only other datatype was the structure which unfortunately
doomed to be renamed as 'Sequence'. These were the specification for
SNMP. The answer was simple , use a Data Definition Language like ASN.1
One of the greatest mystery of our time have been to know how long the
server at our ISP's end has been functioning. This mystery is deepened
by some cryptic message from the help-desk of our ISP, saying that the
server will be shutdown for maintenance. We decided to pip them at the
post by finding out how much time the server was up (or down) This can
be done using the object identifier called 'sysuptime' in the object
called 'system'. The object identifier for sysuptime is <IP_ADDRESS>.2.1.3.
The program given below uses a basic windows socket program. How to
master socket programming has been best explained in our tutorial on sockets programming so check it out. Here we will concentrate only on the bits & bytes that are sent across and received.
We sent a UDP packet on port 161 to the server at VSNL (our
ISP). The IP address of the server is <IP_ADDRESS>, but you can change
it to any IP address you like. Since WindowsNT 4.0 has an in-built SNMP
service, this program can also be tried out using NT. The initial parts
of the program involves a simple Windows socket program and hence is
not explained here. For details on such programs, have a look at our
tutorial on sockets programming. The only section of the code that
might intrigue you with it's presence are the functions 'abc' and
'abc1'. These are our in-house helper functions and are used to write
the trapped bytes to the hard disk. The latter part of the program
deals with the process of sending a data packet to the server. The
various bytes have been explained below.
SNMP.C
#include <windows.h>
#include <stdio.h>
unsigned char kk[1000],ll[1000];
void abc(char *p)
{
FILE *fp=fopen("c:\\snmp\\z.txt","a+");
fprintf(fp,"%s\n",p);
fclose(fp);
}
int ii,dw,jj;
void abc1(unsigned char p)
{
FILE *fp=fopen("c:\\snmp\\z.txt","a+");
fprintf(fp,"%d: %x..%d..%c\n",jj,p,p,p);
fclose(fp);
}
WNDCLASS a;HWND b;MSG c;char aa[200];SOCKET s;struct hostent h;
WSADATA ws;DWORD e;char bb[100];struct sockaddr_in sa;
long _stdcall zzz (HWND,UINT,WPARAM,LPARAM);
int _stdcall WinMain(HINSTANCE i,HINSTANCE j,char *k,int l)
{
a.lpszClassName="a1";
a.hInstance=i;
a.lpfnWndProc=zzz;
a.hbrBackground=GetStockObject(WHITE_BRUSH);
RegisterClass(&a);
b=CreateWindow("a1","SNMP manager",WS_OVERLAPPEDWINDOW,1,1,10,20,0,0,i,0);
ShowWindow(b,3);
while ( GetMessage(&c,0,0,0) )
DispatchMessage(&c);
return 1;
}
long _stdcall zzz (HWND w,UINT x,WPARAM y,LPARAM z)
{
if ( x == WM_LBUTTONDOWN)
{
e=WSAStartup(0x0101,&ws);
sprintf(aa,"WSAStartup e = %ld",e);
s = socket(PF_INET,SOCK_DGRAM,0);
sprintf(aa,"socket s = %ld",s);
sa.sin_family=AF_INET;
sa.sin_addr.s_addr = inet_addr("<IP_ADDRESS>");
sa.sin_port=htons(161);
kk[0]=0x30;
kk[1]=0x25;
kk[2]=2;
kk[3]=1;
kk[4]=0;
kk[5]=4;
kk[6]=6;
kk[7]='p';
kk[8]='u';
kk[9]='b';
kk[10]='l';
kk[11]='i';
kk[12]='c';
kk[13]=0xa1;
kk[14]=0x18;
kk[15]=2;
kk[16]=1;
kk[17]=1;
kk[18]=2;
kk[19]=1;
kk[20]=0;
kk[21]=2;
kk[22]=1;
kk[23]=0;
kk[24]=0x30;
kk[25]=0xd;
kk[26]=0x30;
kk[27]=0xb;
kk[28]=6;
kk[29]=7;
kk[30]=0x2b;
kk[31]=6;
kk[32]=1;
kk[33]=2;
kk[34]=1;
kk[35]=1;
kk[36]=3;
kk[37]=5;
kk[38]=0;
e=sendto(s,kk,39,0,(struct sockaddr *)&sa,sizeof(sa));
sprintf(aa,"SendTo %ld",e);
dw = sizeof(sa);
ii=recvfrom(s,ll,1000,0,(struct sockaddr *)&sa,&dw);
sprintf(aa,"Recv from %d",ii);
abc(aa);
for (jj=0;jj<ii;jj++)
abc1(ll[jj]);
MessageBox(0,"hi","hi",0);
}
if ( x == WM_DESTROY)
PostQuitMessage(0);
return DefWindowProc(w,x,y,z);
}
The first byte we send across to the server (it can also be a
router) at the other end is 0x30. This stands for The Universal
Sequence and is usually the first byte in BER/DER compliant protocols.
If we break up the byte into it's individual bits, we get
The first two bits from the left, when off, imply that the query is
universal, i.e. it applies to all fields. The next bit from the left is
on and that means that the query is a constructed one. The value of the
fourth bit is 16 and that's Sequence in the RFC. So it's a Universal
Sequence.
The next byte in the array holds the size of the total packet, excluding the first two bytes.
The next byte is 0x02, which means that the information that
follows is an Integer, i.e. a number. The byte in kk[3] is the length
of the data and kk[4] is the actual value. The 0x00 there stands for
the version number which is zero.
The byte that comes next is 0x04 which means that the following
data is an octet (8 bit) string. The byte after that holds the length
of the string and next six bytes hold the string itself. The string
'public' stands for the community we belong too; that's just a fancy
way of saying it's our password!
The byte in kk[13] is 0xa1. If we were to break this up into it's constituent bytes, we'd get
When the first three bytes are 101, it means that the data to follow
is Context Specific i.e. you have to look up the documentation and look
for it as it's context changes with every protocol. The last four bits
hold the number, which is 1 in this case. So it's Context Specific 1.
This stands for Get Next Request in the documentation.
The next byte holds the length.
The next three bytes hold the Request ID, which we've set to
one. Kk[15] is 0x02 which means that the data is an Integer. The next
byte is the length and the data itself is 0x01.
The next three bytes contain the error status of the present connection. Since we've just begun talking, it is set to zero.
Right after that we have another three bytes which hold the error index. It too is set to zero.
Now, at kk[26] we have another structure (or sequence if you prefer)
starting up. The byte after that is the length of the data that
follows.
Immediatly after the first structure, we have another one. This
format is maintained so that if you want to ask two questions at the
same time, you can. Simply add another 0x30 after the end of this one
and more data.
After the length byte we have the byte 0x06 which stands for the Object data type. The byte after that is the length.
The next seven bytes are very important.
The ISO, in it's infinite wisdom, has chopped up the Internet into a tree like hierarchy.
Root
|
|-----------|----------------|
ccitt(0) ISO(1) joint-ISO-ccitt(2)
|
org(3)
|
dod(6)
|
internet(1)
|
|------------------------------|-------------------|--------------------|
directory(1) mgmt(2) experimental(3) private(4)
| |
| enterprises(1)
MIB(1)
|
|--------------|--------------|----------|---------|----------|----------|
system(1) interfaces(2) at(3) ip(4) icmp(5) tcp(6) udp(7)
Right at the top is the root, then comes the ISO (1), then org under
ISO (1.3), then the Department of Defense or the dod under org (1.3.6).
Right after that we have the Internet (<IP_ADDRESS>) under the Internet we
have mgmt (<IP_ADDRESS>.2) and under mgmt we have MIB or the Management
Information Database (<IP_ADDRESS>.2.1). Since we're using SNMP which is
used to manage a network system, we have system (<IP_ADDRESS>.2.1). So the
hierarchy we're under is <IP_ADDRESS>.2.1. The last 3, in kk[36], is
Sysuptime under System.
So the bytes from kk[30] to kk[36] hold the hierarchy of our query.
What you may find a little confusing is that the first byte, kk[30], is
0x2b instead of 1.3 as it should be. Actually, this is the ISO being
little clever (for once!). To save transmitting an extra byte, they
decided to multiply the first 1 in <IP_ADDRESS>.2.1.3 with 40 and add it to
the second number i.e. 3. So we get 1*40+3=43 or 0x2b!! Confusing, but
neat.
The last two bytes in the packet are 0x05 and 0x00 which
collectively stand for a NULL value. This is because we can't have an
answer in a query!
The output file provides the key to understanding SNMP. The
contents of the output file is reproduced below to save you the trouble
of actually running the programs and finding the results. The column on
the left are the actual contents of the output file whereas the column
on the right hand side represent the analysis of the bytes that were
'collected' by us.
Z.TXT
Recv from 44 - Inserted by the program and signifies that length of packet is 44 bytes
| 0 | 30 | 48 | 0 | Structure |
| 1 | 2a | 42 | * | Len - 42 |
| 2 | 2 | 2 | | Version number (int) |
| 3 | 1 | 1 | | Len -1 |
| 4 | 0 | 0 | | value - 0 |
| 5 | 4 | 4 | | Community (Octet String) |
| 6 | 6 | 6 | | Len -6 |
| 7 | 70 | 112 | p | |
| 8 | 75 | 117 | u | |
| 9 | 62 | 98 | b | |
| 10 | 6c | 108 | l | |
| 11 | 69 | 105 | i | |
| 12 | 63 | 99 | c | public |
| 13 | a2 | 162 | ¢ | Context Specific 2 |
| 14 | 1d | 29 | | Len -29 |
| 15 | 2 | 2 | | ID (int) |
| 16 | 1 | 1 | | Len -1 |
| 17 | 1 | 1 | | value -1 |
| 18 | 2 | 2 | | Error Status (int) |
| 19 | 1 | 1 | | Len -1 |
| 20 | 0 | 0 | | Value -0 |
| 21 | 2 | 2 | | Error Index (int) |
| 22 | 1 | 1 | | Len -1 |
| 23 | 0 | 0 | | Value -1 |
| 24 | 30 | 48 | 0 | Strucutre |
| 25 | 12 | 18 | | Len -18 |
| 26 | 30 | 48 | 0 | Structure |
| 27 | 10 | 16 | | Len - 16 |
| 28 | 6 | 6 | | Object |
| 29 | 8 | 8 | | Len -8 |
| 30 | 2b | 43 | + | Sysuptime |
| 31 | 6 | 6 | | Len -6 |
| 32 | 1 | 1 | | |
| 33 | 2 | 2 | | |
| 34 | 1 | 1 | | |
| 35 | 1 | 1 | | |
| 36 | 3 | 3 | | |
| 37 | 0 | 0 | | <IP_ADDRESS>.3.0 |
| 38 | 43 | 67 | C | Time Ticks |
| 39 | 4 | 4 | | Len -4 |
| 40 | 0 | 0 | | the time in milliseconds |
| 41 | bc | 188 | ¼ | |
| 42 | c8 | 200 | È | |
| 43 | a4 | 164 | ¤ | |
Lets examine the output now.
The first byte we see is 0x30 which stands, as before, for the
start of a structure (or a sequence). The next byte after that is the
length of the packet to follow. The next three bytes hold an Integer
whose value is zero. This is the version number we sent across in our
query. Now come eight bytes for a string (strings always start with a
0x04) which holds our password.
Byte number 13 is 0xa2. If broken up into it's individual bits it looks like this
Since the first three bits are 101 it means that this is 'Context
Specific'; the last four bits hold the number which is two in this
case. So it is Context Specific 2 which means that this is our asnwer.
The byte after that is the length of the data to follow.
The next three bytes contain an Integer which is the ID of the
packet (it's the same as our ID i.e. it's one). The three bytes after
that hold the Error status, which is still zero and the following three
bytes hold the error index, which is also zero.
Now come two bytes for a structure and it's length. The next two bytes also contains a structure and it's length.
Then we have the number 0x06 which as mentioned before represents an Object. It is immediately followed by it's length.
 The last zero means that the
bytes following it hold the answer to our query about SysUpTime.
Byte 38 contains the number 0x43 which stands for Time Ticks.
The string that follows holds the time, in milliseconds, that the
server <IP_ADDRESS> has been up.
We have not taken the trouble of calculating the corresponding
time in days and hours for a simple reason that the answer obtained
from the server was to large to fit into the calculator provided with
Windows95. We hope that this program infuses in you a desire to use the
various objects provided with SNMP. To do this just replace the object
identifier used in the above program with the desired identifier. Then
you can check the output file for the answer to your query. Do let us
know about your success and travails with SNMP. Also provide us with
your feedback as to how you liked this tutorial.
The above tutorial is a joint effort of
Mr. Vijay Mukhi
Ms. Sonal Kotecha
Mr. Arsalan Zaidi
Mr. Vinesh Kurup
Back to the main page
Vijay Mukhi's Computer
Institute
VMCI, B-13, Everest Building, Tardeo, Mumbai 400 034, India
Tel : 91-22-496 4335 /6/7/8/9
Fax : 91-22-307 28 59
e-mail<EMAIL_ADDRESS>http://www.neca.com/~vmis
|


calibration_curve
with sklearnUsing subsample of covertype dataset
from sklearn.linear_model import LogisticRegressionCV
print(X_train.shape)
print(np.bincount(y_train))
lr = LogisticRegressionCV().fit(X_train, y_train)
# (52292, 54)
# [19036 33256]
lr.C_
array([ 2.783])
print(lr.predict_proba(X_test)[:10])
print(y_test[:10])
# [[ 0.681 0.319]
# [ 0.049 0.951]
# [ 0.706 0.294]
# [ 0.537 0.463]
# [ 0.819 0.181]
# [ 0. 1. ]
# [ 0.794 0.206]
# [ 0.676 0.324]
# [ 0.727 0.273]
# [ 0.597 0.403]]
# [0 1 0 1 1 1 0 0 0 1]
from sklearn.calibration import calibration_curve
probs = lr.predict_proba(X_test)[:, 1]
prob_true, prob_pred = calibration_curve(y_test, probs, n_bins=5)
print(prob_true)
print(prob_pred)
# [ 0.2 0.303 0.458 0.709 0.934]
# [ 0.138 0.306 0.498 0.701 0.926]
\[ BS = \frac{\sum_{i=1}^{n} (\widehat{p} (y_i)-y_i)^{2}}{n}\]
\[ f_{callib}(s(x)) \approx p(y)\]
\[f_{platt} = \frac{1}{1 + exp(-ws(x))}\]
from sklearn.calibration import CalibratedClassifierCV
X_train_sub, X_val, y_train_sub, y_val = \
train_test_split(X_train, y_train,
stratify=y_train, random_state=0)
rf = RandomForestClassifier(n_estimators=100).fit(X_train_sub, y_train_sub)
scores = rf.predict_proba(X_test)[:, 1]
plot_calibration_curve(y_test, scores, n_bins=20)
cal_rf = CalibratedClassifierCV(rf, cv="prefit",
method='sigmoid')
cal_rf.fit(X_val, y_val)
scores_sigm = cal_rf.predict_proba(X_test)[:, 1]
cal_rf_iso = CalibratedClassifierCV(rf, cv="prefit",
method='isotonic')
cal_rf_iso.fit(X_val, y_val)
scores_iso = cal_rf_iso.predict_proba(X_test)[:, 1]
cal_rf_iso_cv = CalibratedClassifierCV(rf, method='isotonic')
cal_rf_iso_cv.fit(X_train, y_train)
scores_iso_cv = cal_rf_iso_cv.predict_proba(X_test)[:, 1]
data = load_breast_cancer()
lr = LogisticRegression(solver='lbfgs', max_iter=10000)
X_train, X_test, y_train, y_test = \
train_test_split(data.data, data.target,
stratify=data.target, random_state=0)
lr.fit(X_train, y_train)
y_pred = lr.predict(X_test)
print(classification_report(y_test, y_pred))
precision recall f1-score support 0 0.91 0.92 0.92 53 1 0.96 0.94 0.95 90 accuracy 0.94 143 macro avg 0.93 0.93 0.93 143 weighted avg 0.94 0.94 0.94 143
y_pred = lr.predict_proba(X_test)[:, 1] > .85
print(classification_report(y_test, y_pred))
precision recall f1-score support 0 0.84 1.00 0.91 53 1 1.00 0.89 0.94 90 accuracy 0.93 143 macro avg 0.92 0.94 0.93 143 weighted avg 0.94 0.93 0.93 143
from sklearn.datasets import fetch_openml
data = fetch_openml('mammography', as_frame=True)
X, y = data.data, data.target
print(X.shape)
(11183, 6)
print(y.value_counts())
-1 10923 1 260 Name: class, dtype: int64
lr = LogisticRegression(solver='lbfgs')
scores = cross_validate(lr, X_train, y_train, cv=10,
scoring=('roc_auc', 'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
0.918, 0.631
rf = RandomForestClassifier(n_estimators=100)
scores = cross_validate(rf, X_train, y_train, cv=10,
scoring=('roc_auc', 'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
0.943, 0.738
Change the training procedure
!pip install imbalanced-learn
# or conda install ...
Extends sklearn
API
data_resampled, targets_resampled = obj.resample(data, targets)
data_resampled, targets_resampled = \
obj.fit_resample(data, targets)
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(replacement=False)
X_train_subsample, y_train_subsample = \
rus.fit_resample(X_train, y_train)
print(X_train.shape)
print(X_train_subsample.shape)
print(np.bincount(y_train_subsample))
(8387, 6) (392, 6) [196 196]
from imblearn.pipeline import make_pipeline as make_imb_pipeline
undersample_pipe = make_imb_pipeline(
RandomUnderSampler(random_state=57), lr)
scores = cross_validate(undersample_pipe,
X_train, y_train, cv=10,
scoring=('roc_auc', 'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
# was 0.918, 0.631 without
0.921, 0.580
undersample_pipe_rf = \
make_imb_pipeline(RandomUnderSampler(random_state=0),
RandomForestClassifier(n_estimators=100))
scores = cross_validate(undersample_pipe_rf,
X_train, y_train, cv=10,
scoring=('roc_auc', 'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
# was 0.943, 0.738 without
0.945, 0.594
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_train_oversample, y_train_oversample = \
ros.fit_resample(X_train, y_train)
print(X_train.shape)
print(X_train_oversample.shape)
print(np.bincount(y_train_oversample))
(8387, 6) (16382, 6) [8191 8191]
oversample_pipe = make_imb_pipeline(
RandomOverSampler(random_state=0), lr)
scores = cross_validate(oversample_pipe,
X_train, y_train, cv=10,
scoring=('roc_auc', 'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
# was 0.918, 0.631 without
0.925, 0.570
oversample_pipe_rf = \
make_imb_pipeline(RandomOverSampler(random_state=0),
RandomForestClassifier(n_estimators=100))
scores = cross_validate(oversample_pipe_rf,
X_train, y_train, cv=10,
scoring=('roc_auc', 'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
# was 0.943, 0.738 without
0.923, 0.708
FPR or Precision? \[ \large\text{FPR} = \frac{\text{FP}}{\text{FP}+\text{TN}}\] \[ \large\text{Precision} = \frac{\text{TP}}{\text{TP}+\text{FP}}\]
\[\min_{w \in ℝ^{p}}-C \sum_{i=1}^n\log(\exp(-y_iw^T \textbf{x}_i) + 1) + ||w||_2^2\] \[ \min_{w \in \mathbb{R}^p} -C \sum_{i=1}^n c_{y_i} \log(\exp(-y_i w^T \mathbf{x}_i) + 1) + ||w||^2_2 \] Similar for linear and non-linear SVM
Gini Index: \[H_\text{gini}(X_m) = \sum_{k\in\mathcal{Y}} p_{mk} (1 - p_{mk})\] \[H_\text{gini}(X_m) = \sum_{k\in\mathcal{Y}} c_k p_{mk} (1 - p_{mk})\] Prediction: Weighted vote
lr = LogisticRegression(solver='lbfgs',
class_weight='balanced')
scores = cross_validate(lr, X_train, y_train, cv=10,
scoring=('roc_auc',
'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
0.923, 0.564
rf = RandomForestClassifier(n_estimators=100,
class_weight='balanced')
scores = cross_validate(rf, X_train, y_train, cv=10,
scoring=('roc_auc',
'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
>>> 0.915, 0.707
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(max_features='sqrt')
from imblearn.ensemble import BalancedBaggingClassifier
resampled_rf = \
BalancedBaggingClassifier(base_estimator=tree,
n_estimators=100, random_state=0)
scores = cross_validate(resampled_rf, X_train, y_train,
cv=10,
scoring=('roc_auc', 'average_precision'))
roc = scores['test_roc_auc'].mean()
avep = scores['test_average_precision'].mean()
print(f"{roc:.3f}, {avep:.3f}")
0.949, 0.668
(based on nearest neighbour heuristics from the 70's)
from imblearn.under_sampling import EditedNearestNeighbours
enn = EditedNearestNeighbours(n_neighbors=5)
X_train_enn, y_train_enn = enn.fit_resample(X_train, y_train)
enn_mode = EditedNearestNeighbours(kind_sel="mode",
n_neighbors=5)
X_train_enn_mode, y_train_enn_mode = \
enn_mode.fit_resample(X_train, y_train)
enn_pipe = make_imb_pipeline(EditedNearestNeighbours(n_neighbors=5),
LogisticRegression(solver='lbfgs'))
scores = cross_val_score(enn_pipe, X_train, y_train, cv=10, scoring='roc_auc')
print(f"{np.mean(scores):.3f}")
0.921
enn_pipe_rf = make_imb_pipeline(EditedNearestNeighbours(n_neighbors=5),
RandomForestClassifier(n_estimators=100))
scores = cross_val_score(enn_pipe_rf, X_train, y_train, cv=10, scoring='roc_auc')
print(f"{np.mean(scores):.3f}")
0.941
from imblearn.under_sampling import CondensedNearestNeighbour
cnn = CondensedNearestNeighbour()
X_train_cnn, y_train_cnn = cnn.fit_resample(X_train, y_train)
print(X_train_cnn.shape)
print(np.bincount(y_train_cnn))
(553, 6) [357 196]
cnn_pipe = make_imb_pipeline(CondensedNearestNeighbour(),
LogisticRegression(solver='lbfgs'))
scores = cross_val_score(cnn_pipe, X_train, y_train, cv=10, scoring='roc_auc')
print(f"{np.mean(scores):.3f}")
0.916
rf = RandomForestClassifier(n_estimators=100, random_state=0)
cnn_pipe = make_imb_pipeline(CondensedNearestNeighbour(), rf)
scores = cross_val_score(cnn_pipe, X_train, y_train, cv=10, scoring='roc_auc')
print(f"{np.mean(scores):.2f}")
0.93
from imblearn.over_sampling import SMOTE
smote_pipe = make_imb_pipeline(SMOTE(),
LogisticRegression(solver='lbfgs'))
scores = cross_val_score(smote_pipe, X_train, y_train,
cv=10, scoring='roc_auc')
print(f"{np.mean(scores):.3f}")
0.922
smote_pipe_rf = \
make_imb_pipeline(SMOTE(),
RandomForestClassifier(n_estimators=100))
scores = cross_val_score(smote_pipe_rf,X_train,y_train,
cv=10, scoring='roc_auc')
print(f"{np.mean(scores):.3f}")
0.943
param_grid = {'smote__k_neighbors': [3, 5, 7, 9, 11, 15, 31]}
search = GridSearchCV(smote_pipe_rf, param_grid,
cv=10, scoring="roc_auc")
search.fit(X_train, y_train)
print(f"{search.score(X_test, y_test):.3f}")
0.959


{% extends "base_error.html" %} {% block title %} Authentication failed {% endblock %} {% block heading %} Authentication failed {% endblock %} {% block message %} User can't be successfully signed in. {% endblock %}


Use arrow keys to move around. Click to re-position other guy. This level was also generated from that lil' image you see in the bottom left.


Brendan was studying accross town at UCLA, while Nico was busy at USC. However, through the magic of friends Nico and Brendan met one distinct July night. After playing Portal 2 for several hours, and bonding over Super Smash Bros. Melee over the years. It was a video game fairy tale from the start. Five years later, Nico and Brendan finally decided to officially get married. Now we'd love for you to become apart of our story by joining us for our wedding on January 20,2018.
If you would like to help us catch them all, flights that is, please contribute to our honeymoon fund. We are planning a trip to Japan, to see the birthplace of Pokemon and also of some of Brendan's family members. Our goal is to visit Tokyo, Sapporo, and Kyoto, in addition to all the awesome prefectures in between.
We already have plenty of bikes, shoes, pokeballs, and pokemons.
Contribute


BrightstarDB Privacy Policy
Information we collect about you
When you interact with BrightstarDB Limited, we sometimes receive or collect personal information about you.
For example, if you sign up for our customer portal to receive a trial license or if you purchase licenses from us, you will tell us who you are and how we can contact you.
When you use this site we may use your IP address and cookies to provide certain functionality and to better understand how our site is being used as described in our Cookie Policy.
What We Use Your Information For
We will use the information you provide for a number of purposes including the following:
- To contact you. For example we may email you to inform you of updates to our software or to the services we provide you. We will only contact you with bulk emails if you opt-in to receive such email and you may opt out of these mailings at any time.
- To provide you with services. For example to provide you with direct email or telephone support.
Confidentiality
We will keep your personal information cofidential and we will not share that information with third parties without first asking your permission, except where disclosure is required by law (for example to government bodies and law enforcement agencies).


Select "Flatten directories" to ignore the directory structure of the artifacts
in the source project and copy all matching artifacts directly into the specified
target directory. By default the artifacts are copied in the same directory
structure as the source project.
Select "Optional" to allow this build to continue even if no build is found
matching the "Which build" condition selected above, the build's workspace does
not exist or is inaccessible, or no artifacts are found matching the specified
pattern. By default this build step fails the build if no artifacts are copied.
Select "Fingerprint Artifacts" to automatically fingerprint all artifacts
that are copied as part of this build step.


Trading_StoreCustomPageType Class Reference
| Inherits from | NSObject |
| Conforms to | PicoBindable |
| Declared in | Trading_StoreCustomPageType.h Trading_StoreCustomPageType.m |
Tasks
-
name
Name of the eBay Store custom page. This value is required if you are creating a new
property
page (and omitting a PageID value). Note that you must include a
name for the page even if you are using the PreviewEnabled flag.
However, since using the preview functionality means that the page will not be
persisted, you can enter a dummy value for this field if you have not decided on a
name for the page. The Name value is used in links to the page. -
pageID
Unique identifier for an eBay Store custom page. If you specify a valid
property
PageID value in a
SetStoreCustomPage call, the existing custom page
is updated. If you do not specify a PageID value, you are
creating a new custom page.
The PageID field is always returned in
GetStoreCustomPage. -
urlPath
The URL path of the eBay Store custom page. This field is only required if you are
property
using Chinese characters in the Name field. The URL path of the
eBay Store custom page is normally derived from the Name field, but
the URL path cannot be derived from the name of the custom page if it contains Chinese
characters because URLs cannot contain Chinese characters.
The URLPath is only returned in the GetStoreCustomPage
response if it is defined for the eBay Store custom page, and if a PageID
value is included in the request. -
url
The full URL of the eBay Store custom page, which is generally derived from the
property
CustomPage.Name value. The exception to this rule is if the seller
specified a custom URL using the CustomPage.URLPath field in a
SetStoreCustomPage call.
The URL is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request. -
status
This value indicates the status of the eBay custom page. In a
property
SetStoreCustomPage call, the seller uses the optional
Status field to make an inactive custom page active, to make an
active custom page inactive, or to delete an active or inactive custom page. To
change the status (including delete) of a custom page, a PageID
value must be included to identify the custom page to modify.
The Status value is always returned in the
GetStoreCustomPage response. -
content
The HTML content of the eBay Store custom page. This field has a maximum size of 96
property
kilobytes. If the PreviewEnabled field is set to ‘true’, then
this field is required in a SetStoreCustomPage call. Otherwise,
it is optional.
The Content field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request. -
leftNav
This flag controls whether or not the left navigation bar is included in the eBay
property
Store custom page. To include the left navigation bar in a custom page, the seller
will include the LeftNav field in the SetStoreCustomPage
request and set it to ‘true’.
The LeftNav field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request. -
previewEnabled
This flag controls whether or not a custom page preview is enabled. To enable the
property
a custom page preview, the seller will include the
PreviewEnabled field in the SetStoreCustomPage
request and set it to ‘true’.
The PreviewEnabled field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request. -
order
This integer value controls the order in which the corresponding eBay Store custom
property
page is displayed in the list of custom pages. To make the corresponding custom
page appear first in the list of custom pages, the seller would include the
Order field and set its value to ‘1’.
The Order value is always returned in the
GetStoreCustomPage response. -
any
(public property)
property
Properties
any
(public property)
@property (nonatomic, retain) NSMutableArray *any
Discussion
(public property)
entry type : PicoAnyElement, wrapper for primitive anyelement
Declared In
Trading_StoreCustomPageType.h
content
The HTML content of the eBay Store custom page. This field has a maximum size of 96
kilobytes. If the PreviewEnabled field is set to ‘true’, then
this field is required in a SetStoreCustomPage call. Otherwise,
it is optional.
The Content field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request.
@property (nonatomic, retain) NSString *content
Discussion
The HTML content of the eBay Store custom page. This field has a maximum size of 96
kilobytes. If the PreviewEnabled field is set to ‘true’, then
this field is required in a SetStoreCustomPage call. Otherwise,
it is optional.
The Content field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request.
type : NSString, wrapper for primitive string
Declared In
Trading_StoreCustomPageType.h
leftNav
This flag controls whether or not the left navigation bar is included in the eBay
Store custom page. To include the left navigation bar in a custom page, the seller
will include the LeftNav field in the SetStoreCustomPage
request and set it to ‘true’.
The LeftNav field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request.
@property (nonatomic, retain) NSNumber *leftNav
Discussion
This flag controls whether or not the left navigation bar is included in the eBay
Store custom page. To include the left navigation bar in a custom page, the seller
will include the LeftNav field in the SetStoreCustomPage
request and set it to ‘true’.
The LeftNav field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request.
type : NSNumber, wrapper for primitive bool
Declared In
Trading_StoreCustomPageType.h
name
Name of the eBay Store custom page. This value is required if you are creating a new
page (and omitting a PageID value). Note that you must include a
name for the page even if you are using the PreviewEnabled flag.
However, since using the preview functionality means that the page will not be
persisted, you can enter a dummy value for this field if you have not decided on a
name for the page. The Name value is used in links to the page.
@property (nonatomic, retain) NSString *name
Discussion
Name of the eBay Store custom page. This value is required if you are creating a new
page (and omitting a PageID value). Note that you must include a
name for the page even if you are using the PreviewEnabled flag.
However, since using the preview functionality means that the page will not be
persisted, you can enter a dummy value for this field if you have not decided on a
name for the page. The Name value is used in links to the page.
type : NSString, wrapper for primitive string
Declared In
Trading_StoreCustomPageType.h
order
This integer value controls the order in which the corresponding eBay Store custom
page is displayed in the list of custom pages. To make the corresponding custom
page appear first in the list of custom pages, the seller would include the
Order field and set its value to ‘1’.
The Order value is always returned in the
GetStoreCustomPage response.
@property (nonatomic, retain) NSNumber *order
Discussion
This integer value controls the order in which the corresponding eBay Store custom
page is displayed in the list of custom pages. To make the corresponding custom
page appear first in the list of custom pages, the seller would include the
Order field and set its value to ‘1’.
The Order value is always returned in the
GetStoreCustomPage response.
type : NSNumber, wrapper for primitive int
Declared In
Trading_StoreCustomPageType.h
pageID
Unique identifier for an eBay Store custom page. If you specify a valid
PageID value in a
SetStoreCustomPage call, the existing custom page
is updated. If you do not specify a PageID value, you are
creating a new custom page.
The PageID field is always returned in
GetStoreCustomPage.
@property (nonatomic, retain) NSNumber *pageID
Discussion
Unique identifier for an eBay Store custom page. If you specify a valid
PageID value in a
SetStoreCustomPage call, the existing custom page
is updated. If you do not specify a PageID value, you are
creating a new custom page.
The PageID field is always returned in
GetStoreCustomPage.
type : NSNumber, wrapper for primitive long
Declared In
Trading_StoreCustomPageType.h
previewEnabled
This flag controls whether or not a custom page preview is enabled. To enable the
a custom page preview, the seller will include the
PreviewEnabled field in the SetStoreCustomPage
request and set it to ‘true’.
The PreviewEnabled field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request.
@property (nonatomic, retain) NSNumber *previewEnabled
Discussion
This flag controls whether or not a custom page preview is enabled. To enable the
a custom page preview, the seller will include the
PreviewEnabled field in the SetStoreCustomPage
request and set it to ‘true’.
The PreviewEnabled field is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request.
type : NSNumber, wrapper for primitive bool
Declared In
Trading_StoreCustomPageType.h
status
This value indicates the status of the eBay custom page. In a
SetStoreCustomPage call, the seller uses the optional
Status field to make an inactive custom page active, to make an
active custom page inactive, or to delete an active or inactive custom page. To
change the status (including delete) of a custom page, a PageID
value must be included to identify the custom page to modify.
The Status value is always returned in the
GetStoreCustomPage response.
@property (nonatomic, retain) NSString *status
Discussion
This value indicates the status of the eBay custom page. In a
SetStoreCustomPage call, the seller uses the optional
Status field to make an inactive custom page active, to make an
active custom page inactive, or to delete an active or inactive custom page. To
change the status (including delete) of a custom page, a PageID
value must be included to identify the custom page to modify.
The Status value is always returned in the
GetStoreCustomPage response.
type: string constant in Trading_StoreCustomPageStatusCodeType.h
Declared In
Trading_StoreCustomPageType.h
url
The full URL of the eBay Store custom page, which is generally derived from the
CustomPage.Name value. The exception to this rule is if the seller
specified a custom URL using the CustomPage.URLPath field in a
SetStoreCustomPage call.
The URL is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request.
@property (nonatomic, retain) NSString *url
Discussion
The full URL of the eBay Store custom page, which is generally derived from the
CustomPage.Name value. The exception to this rule is if the seller
specified a custom URL using the CustomPage.URLPath field in a
SetStoreCustomPage call.
The URL is only returned in the
GetStoreCustomPage response if a PageID value
is included in the request.
type : NSString, wrapper for primitive string
Declared In
Trading_StoreCustomPageType.h
urlPath
The URL path of the eBay Store custom page. This field is only required if you are
using Chinese characters in the Name field. The URL path of the
eBay Store custom page is normally derived from the Name field, but
the URL path cannot be derived from the name of the custom page if it contains Chinese
characters because URLs cannot contain Chinese characters.
The URLPath is only returned in the GetStoreCustomPage
response if it is defined for the eBay Store custom page, and if a PageID
value is included in the request.
@property (nonatomic, retain) NSString *urlPath
Discussion
The URL path of the eBay Store custom page. This field is only required if you are
using Chinese characters in the Name field. The URL path of the
eBay Store custom page is normally derived from the Name field, but
the URL path cannot be derived from the name of the custom page if it contains Chinese
characters because URLs cannot contain Chinese characters.
The URLPath is only returned in the GetStoreCustomPage
response if it is defined for the eBay Store custom page, and if a PageID
value is included in the request.
type : NSString, wrapper for primitive string
Declared In
Trading_StoreCustomPageType.h


When should the "js:" prefix be used?
The "js:" prefix should be used when the type definition is function and in the following options - Column Model Options for extending the editing properties,in Formatters to define custom formatter and in Toolbar Filter.
If the javascript code is complex and spans several lines, we recommend using the following syntax:
$mycode = <<<CUSTOMCODE // // here JavaScript code CUSTOMCODE;
Using this syntax will prevent PHP errors with unescaped single and double brackets, which will otherwise cause errors in the PHP script.
You can see an example of this here
setGridEvent
With the setGridEvent method we add client-side javascript events related to the grid. The method accepts two parameters - the first parameter is the valid event name listed here and the second parameter is the javascript code which should begin with function and the parameters which the event accepts.
Let suppose that we want to alert a message with the OrderID when a row in the grid is selected (OrderID is a column in the grid). Using our example the change in the code should be:
<?php ... $onselect = <<<ONSELECTROW function(rowid, selected) { alert(rowid); } ONSELECTROW; $grid->setGridEvent('onSelectRow',$onselect); $grid->renderGrid('#grid','#pager',true, null, null, true,true); $conn = null; ?>
setNavEvent
setNavEvent works in the same way as setGridEvent, but it adds a javascript events to the navigator or/and form-editing modules.
setJSCode
setJSCode adds code written in javascript just after the creation of jqGrid instance. Use this method to emit custom javascript related to your jqGrid instance.


I wanted to provide some positive feedback on real-life accuracy of the TX, as opposed to the 'basic' testing at http://www.openenergymonitor.org/emon/emontx/accuracy.
Having seen a significant variance in the values of reported power usage from commercial, clamp-based monitoring systems, against actual (known) power, I had been slightly sceptical about the accuracy of emonTX. These commercial systems seemed to show a variance of 10-30% (and of course, dont report 'reverse' flow /phase change) against real power.
Converesely, I have validated that these same commercial solutions with pulse-counting options are actually very accurate, even at low power usage levels (despite some members views documented on the forum). Given that many electricity companies use the pulse counting method in electricity meters to generate bills, I have used a commercial pulse counting solution on my house meter as a baseline of accuracy.
Very simply, and using the excellent functions at open.sen.se, I have been able to overlay data from emonTX against the commercial pulse counter, to demonstrate how accurate emonTX actually is.
I have connected the commercial device to another open project (Home Automation Hub), which allows reporting of power usage at 6 second intervals (as opposed to the commercial offering of 5 minutes), and submitted to COSM.. The emonTX also publishes to COSM, but at nearly real-time rates.Open.sen.se then pulls both feeds into one graph for comparison over the same time interval.
The ability of emonTX to allow calibration in software has even allowed me to obtain some really cheap CTs (£2 each) http://www.taehwatrans.com/
The two graphs attached show how close the commercial and TX measurements track each other, at both high and low power usage.
Summary excellent confidence in a correctly calibrated TX, allowing near perfect reporting.
Sorry for the big pictures, but I wanted folk to be able to track the closeness of each plot. (Note that the greyed-out/non display plot is the commercial clamp value, or 5 minute averaged value; the HAH line is the commercial pulse count reported value).
Re: Positive results on accuracy
Am I right in thinking the last graph goes down to 40 W?
A slightly off-topic note that there are some interesting comments about electricity meters in the letters here: http://eandt.theiet.org/magazine/2012/08/your-letters.cfm
Re: Positive results on accuracy
Yes Robert, confirming 40W reading on my PV circuit (evening time)
The IET's articles make interesting reading. I think i would challenge one of the contributors comments that "'the accuracy of 'all' electronic electricity meteres should be questioned' although I sympathise with possible degradation due to age ( and I will undermine my own argument in a minute....). None of my house meters are smart (and the lack of global standards noted is also worrying) but are Elsters, which are supposed to be 'certified' for their accuracy.
And therein reveals the reason for my desire to obtain an accurate external baseline. I have 'felt' that the 'leccy supplier has been charging us more than I feel we are using; i do know I am a high user (c15KWh - 20KWh daily) though. I also have a background load of about 300W which ive not yet traced. Estimated readings contribute to the uncertainty, although i supply corrected readings regularly.
So, my next activity is to build enough TXs to cover all the feeds on my two consumer units, and see if a) they equate to total house usage, and b) find the pesky background loads.
Actually, if anyone wants to lend me their pre-built, or sell at a reduced price, any spare TXs, that would help save me some time, as I need about six.
{appolgies for missed capitials and typos, as on iPad}
Re: Positive results on accuracy
Thanks for that. Just from the theory alone, it's around the 40 W area that emonTx accuracy becomes dependent on unknowns - how much noise is injected into the measurement, where the 'zero' sits in relation to the ADC steps, etc. It would be really interesting to see compable data in the sub-40 W region from numerous 'Txs.
Any yes, I agree that sweeping statements like the one you quoted aren't too constructive, but it only takes a few well-publicised incidents to spread alarm, despondency and mistrust far and wide.
Re: Positive results on accuracy
I'll see what the sub 40w looks like over the weekend, although im sure i put code in the Base to filter out noise of less than 20W
Re: Positive results on accuracy
Andygodber: I also have a background load of about 300W which ive not yet traced.
If you were to turn everything off except the socket for your voltage sensor, there should be minimal current flowing. Then you could switch on each circuit in turn to find the culprit(s).
Our house consumes around 150-200W depending on the state of the fridge etc. At one stage this morning, the system was so well balanced that the immersion's neon was flashing slowly when the washing machine was resting, but not when the drum was turning :)
Re: Positive results on accuracy
Andy,
can I ask , which CT did you source from the site you mentioned above? I'm thinking of getting some TS9Ls to try.... This is because I'm doing a trial and have 17 CTs in the main board; if the trial is going to go anywhere, I'll need to be able to close the cabinet, safely, after installation so I'm looking for smaller CT's to test with.
thanks,
Eamonn
Re: Positive results on accuracy
Eamonn - I used the TS10L - also quite small, as i had the same problem of trying to get a lot into my consumer unit.
I got mine from a chap on ebay, who may still have some. Otherwise, I bet the manufacturer would supply to you for the quantity you need.
In one of my other posts, ive described how I got three TXs into a small box, for 9 CTs - two boxes would do for your 17....
Re: Positive results on accuracy
Andy, thanks for that - I've contacted the supplier so we'll see. Nice write-up on the multiple emontx build. Very neat. I must publish my own builds.


.....Today is the day I started this blog. I am working on sololearn.com. The first thing we are
learning in html, besides tags and page set up is how to blog. The blog is practice for all that we learn.
I have never done this before and am getting a little ahead of the lesson. It just wanted to have me say a
couple of words in an about section. I decided to have different pages for things. Also
I have already started on my css. As you can see by my home page that I have also set up today as well.
Today I learned about audio and video files. That was GREAT!! I learned something new!!! Now I
just need a reason to use them.
Day 2, Nov 27, 2019
..... Well I decided to blog today. I think I will add to the about page. Ya'll might want to
know something about me.
I coded yesterday. I learned new things in html, and css. I finished a basic html course and started a css one
at sololearn.com.
Well, I finished up with my about page for now. Even included a picture of myself. So now it is off to code. I
decided I should let
you know anything I learn, and if it is significant i think i will start a code page where i can put my newly
found code to reference.
Day 3, Nov 28, 2019
Yes, I know it is Thanksgiving. HAPPY THANKSGIVING!! I am working today on code and digital
marketing today. As I have come to find out the hard way, if you want your websites to do good you need to know
more than a bootcamp will teach you. Part of that is digital marketing.
I went to WOZ-U a bootcamp for software developers. It was a 9 month school. I have a diploma. I can make
beautiful websites.... I want to grow it into a sustainable business though. That's where the marketing comes in
at.
I also need to hone my website skills. I am by no means an expert web designer. I am on my way though...
I think today i will revisit video and audio files. As you can tell my chosen video comes up unavailable..I am
not sure why and would like to find out.
O.K... I found out more about videos. So I included one from a class project that is narrated by my son.
I hope you like it. It is a video of a dream of mine.
Now on to audio
IT WORKED!!!!!
Day 4, Nov 29, 2019
Well I hope everyone enjoyed there Thanksgiving. We are having ours today. It is still early yet so I am coding.
I just thought that this was neat:
background-size: contain; I knew about cover. It doesn't always work the way you want but now I have found
contain!! Lets see how it works:
contain
cover
Well I think that worked beautifully.
GREAT news!!!! I just got my acceptance letter to Colorado State University Global. CSU Global. This is where I
will be getting
a bachelors degree in computer science. First I will be going through a certificate program I think will help me
out with freelance work in the
long run.
I attended WOZ-U last year. it was good it taught me a lot in a little amount of time. Enough to know I want to
learn more.
...I learned today that css3 has natural animations. You just name them and make them up. ex: Hover over this
square:
YES!! I finished Sololearn's css fundamentals course and got my certificate!! YAY!!
Day 5, Nov 30, 2019
Today I started off by moving my Blog folder to GitHub. https://github.com
. It is a place in computerLand where your code is stored. It keeps a master copy of your code and you can make
changes to it in branches.
 Not that that is all it does,
but that's kinda an explanation.
Well the next thing I was going to do at solo learn was javascript. The class I start with at CSU Global starts with Python. So I am going to start on that
today to try to get a head start on it. I have no prior knowledge of Python.
Sooo... Here's whats up so far. Sololearn started out like I knew something about Python. So I had to go to Udemy. I Love Udemy.
This is the class I chose https://www.udemy.com/course/python-for-absolute-beginners-u It is great for beginners cause it shows you where to start from.
It starts with downloading Python then a text editor for it. Then it shows you how to use the text editor. A text editor is what you use to write code in. I usually use visual studio code but for python I am using
JetBrains PyCharm Community Edition. I have just finished my first lesson. I will let you know how it goes.
Well it has been going great. I can say that I have learned a lot in a very understandable format. only 30% done with class but i highly recommend it.
I got as far as getting things to populate into the terminal. Still when you get there your pretty proud of yourself.
Well I think I am done for now. Ive gone over a lot of material. I think it will have helped me a lot to have taken this course.
Day 6, Dec 1, 2019
Today I finished my Udemy class Python 101 for beginners. I think it was a great class!! I went ahead and started on the sololearn
class today. I learned Enough from Udemy to tackle it. So far so good. I learned to much to share with you. I would advise taking
the Udemy course. I have been up since 1:30 am and am on the end of my second pot of coffee. I think I need a break from code for a bit.
...So I think I will work on my projects page a little. Well managed to take care of that. There are now videos of my
work on my projects page. I hope ya'll enjoy my work. Well I have been at it pretty much all day. It is time to call it a day. I may design some,
I wouldn't mind playing around with some design for a bit though.
These are examples of gradients you can make
Day 7, Dec 4, 2019
I know it has been a few day, things get hectic you know... I am just starting out in code today , not quite sure what I am gonna be working on just yet. I did decide to add some more code
to the code page. It is a responsive code I use with all my whackadoodle stuff that wont act right. Like pictures for example. Speaking of responsiveness i have got to work on that. I havent done anything to make this site responsive yet. It will get there though.
Well I studied a little at sololearn. I have also added a dropdown date menu
for this page to make it easier to navigate. I also filled out some stuff for CSU Global. Then I navigated there site taking a look around and getting
familiar with it. I start in 5 days.
Day 8, Dec 12, 2019
Well school has started. There is going to be a lot of writing involved. I am starting out in the python language.
my first assignment is to make a mouse in code. How kool. Admittedly, I haven't been coding much lately, reading mostly.
coding will come though.
Day 9, Dec 13, 2019
Today I coded a mouse in python. I guess not a big deal, but fun. I like making shapes and things in python.
I also learned escape in python. I will try to explain escape a bit... When you print something in python it looks like this: print('Hello There')
...That will print out hello there but say you wanted a \ in there, you would have to put another set of quotes around it in order for it to be printed as a \ because python thinks that \ is a symbol
so , for python to know its not a symbol, You just put quotes around it and it should go ahead and work.
School is going well I think. There is a lot of reading involved some coding. Python seems to flow smoothly.
So far I like it. I am going to try to find more time to code. Right now still at the basics. learned about strings and variables.
How to take in input for them. Only how to show output in console though. I hope that we develop a full stack app
while in CSU Global. I have a few apps that I need to be working on. I need to finish the Happy Furrbabies website. Make a recepie
app, I have the database set up for it. I really need to do a professional portfolio website. I need more time in the day!!
Day 10, Dec 19, 2019
School is 2 weeks in. Not so bad. Grades are good so far. Still in python and web development.
I love Python. It is very simple and straight forward. I highly recommend it as a language to start out with.
I haven't learned any libraries or frameworks yet, but so far so good.
Day 11, Jan 11, 2020
Well, I cannot understand why I have been away so long. Granted there is school , work, and everyday life going on
but I really need to dedicate more time to this. I think it is kind of lifeless to only tell you of theory.
Right now I am doing a lot of theory.
I checked over my "in process" websites. I was very upset to learn that one was broken. One needs to be reconnected
to a database. The other just needs work. I need to set up a Trello board for each project. A Trello board helps
you keep track of your project tasks. What they are, Where you are at with them, and When they are finished.I also
have 2 final projects due in 3 weeks. I think I will start with the Trello boards first. This will also give me
a chance to gather my thoughts about each website. This is an example of a Trello Board:
Day 12, Jan 29, 2020
So I have completed "The python Bible"by Ziyad on Udemy. Here is a look at it It was a lot of work, I am really proud of learning a new language. We are still taking the class at school.
I would never have made it through without Udemy.
Day 13, Feb 8, 2020
Well today marks the end of the first set of classes at school. I currently have a 97.8 average!!! I am so excited!! I have learned so much.
I learned that python is an object orientated Program. So best as I understand, everything is an object and you add functionality to ti.
I also made a new website. Hope y'all like it. It is in the projects page.
Day 14, Feb 16, 2020
So, I have started on the second round of classes. Human computer interaction and Intro to JavaScript.
The first class about how design plays a role in all things that we do, including and beyond computers.
Day 15, April 1, 2020
I promised myself when I started this blog that there would be no personal opnions or stories that were very long.
As I sit here with close personal grief during the middle of the covid-19 outbreak eating a 1/2 gallon of ice cream
I wonder if I may be wrong. I'm not going into the details of what has happened, just that they have been life changing.
So the problem I face now is staying focused. I am beginning to wonder if I will ever code again. We will see...
Day 16, May 5, 2020
Hello ALL!! I am proud to say that I am coding agian.
Things are going well. Sorry about the last post but I am going to let it stand.
I am back in school. Taking a Social Media Certification class.
Also am going to the bootcamp Praticum by Yandex. It is very hard,
it seems advanced. Just what I need!! I am working very hard
on both. I have also started a business. I am proud to say
that (we will call him "J" for now) J and I will be working
together in this venture. I will be responsible for front-end
and he will be responsible for back-end. As a team I think we
can form a strong business alliance for ourselves. I will also
be responsible for finding business and SEO practices if anyone so chooses.
Oh by the way the company is called Lynch Web Design and Digital
Marketing.
Day 17, October 8, 2020
Well I have started school again where I had withdrawn in the spring. I have also restarted my recipe app.
all i have is a backend setup so far, but at least that is progress.
Day 18, December 16, 2020
I finished the summer semester at school. I have opted to study on my own over the winter and focus on my
own projects. I have also opened up a Facebook group for beginner web developers to help them if I am able to
it is at New to Coding/coding help


Welcome to War Worlds, a new 4X MMO for Android, in the spirit of Master of Orion!
If you are new to this kind of game, you might want to become familiar with the idea of 4X gaming, and MMO gaming as well.
For now, let's just say this is a game of galactic space war, played online by hundreds of players at a time.
The first thing you'll be asked to do is set up your Empire. We'll need to authenticate you with a Google Account, and then a couple of basic questions about who you want to be in the game, and that is all that is required.


{% extends "app/layout.html" %} {% block inner_content %} {{readme|markdown}}
Set the data-session-storage-set
attribute on your input element to invoke the behaviour:
Now visit the getting demo to see the information you have typed appear over there!
{% endblock %}


 Suzy Song asks Thomas Builds-the-Fire.
"I want both," Thomas (Evan Adams) replies.
This is one of the layers of meaning in Chris Eyre's film SMOKE SIGNALS. As much as anything, it's about the thrill of a good story, the importance of stories in our lives and especially in our individual pasts. As Thomas tells his stories he holds very still, eyes closed, head tilted toward the heavens. For him it's a religion of narrative, telling tales about his life and friends, not bothering to separate out the threads of falsehood from the fabric of his accounts. Evan Adams delivers probably the strongest performance in the work, his voice full of inflection and poetry, his tone the perfect mix of seer and nerd.
His friend Victor Joseph is the only one who complains about Thomas' stories. Victor (Adam Beach) has lived on the Idaho reservation all his life, growing up with Thomas, hearing the same stories endlessly. What bothers Victor the most is that Thomas idolizes Victor's father Arnold, who deserted the family when the boys were ten. It was Arnold (Gary Farmer) who saved the infant Thomas from the fire that killed Thomas' parents; Arnold who took the orphan to Denny's and bought him the Grand Slam breakfast. But it was Victor who had to live through his father's alcoholic flights of fancy and through the dark days of abuse.
The main premise turns the film into a travelogue in which the adult Victor and Thomas ride a bus to Arizona to retrieve the ashes of Arnold. On the journey there and back they meet people and situations that change them, and show the viewer much about contemporary attitudes toward Native Americans.
When William Faulkner said, "The past isn't dead. It's not even past," he was talking about the kind of suffering Victor and his mother, Arlene Joseph, have been undergoing. Using flashbacks that melt instantly into scenes of the present, the film takes the type of risks that ensure the success of stories. Victor displays an appropriate anger toward his now-dead father, and we even excuse his unfair treatment of the lovable, eccentric Thomas. A straight-talker, Victor is aware of the prejudices that still stalk Native Americans, especially two long-haired young men venturing off the reservation and into the "foreign" country of the United States. In a scene in which unshaven white men take Victor's and Thomas' seats on the bus, we are shown traces of hate in even the most common experience. Perhaps Victor learned a modicum of hate himself from his father, who wished to make the white man disappear. In a fascinating motif involving magic, it is Arnold who makes himself vanish, accomplishing yet another feat that he "didn't mean to."
SMOKE SIGNALS is weak in its overuse of things Indian. Although Thomas' voice-over at the start and finish is well-written, it sets a tone that touches upon countless cliches. We hear allusions to the oral tradition (Thomas's storytelling), to George Armstrong Custer, John Wayne and Tom Mix, to the stoic face a Native American must turn to his troubles. Yes, these elements are part of the culture, and some very humorous use is made of them. But the film's greatness does not hinge upon their repetition. Rather, the human elements cause the success: Victor's long journey and change of heart, Thomas' unfailing friendship and goofy smile, Suzy Song (Irene Bedard's) decency and determination to help.
Touted as the first major film written, produced and directed by Native Americans, SMOKE SIGNALS came away a favorite at the Sundance Film Festival. With a screenplay by Sherman Alexie (based on his book of stories THE LONE RANGER AND TONTO FISTFIGHT IN HEAVEN), the film acts ultimately as an ode to the relationships between fathers and sons, as well as to the love visible in acts of kindness.
I was grateful to have the chance to see SMOKE SIGNALS in the only cinema in our small midwestern city. It seems the university is requiring all incoming freshman to read Alexie's book, and is sponsoring a visit by Alexie in just a few days. Now I do not have to worry about finding a video store that carries independent art films. Now my son and I have been enriched by witnessing a part of the world different than ours.
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


This section describes the kinds of values that are manipulated by OCaml programs.
Integer values are integer numbers from −230 to 230−1, that is −1073741824 to<PHONE_NUMBER>. The implementation may support a wider range of integer values: on 64-bit platforms, the current implementation supports integers ranging from −262 to 262−1.
Floating-point values are numbers in floating-point representation. The current implementation uses double-precision floating-point numbers conforming to the IEEE 754 standard, with 53 bits of mantissa and an exponent ranging from −1022 to 1023.
Character values are represented as 8-bit integers between 0 and 255. Character codes between 0 and 127 are interpreted following the ASCII standard. The current implementation interprets character codes between 128 and 255 following the ISO 8859-1 standard.
String values are finite sequences of characters. The current implementation supports strings containing up to 224 − 5 characters (16777211 characters); on 64-bit platforms, the limit is 257 − 9.
Tuples of values are written (v1, …, vn), standing for the n-tuple of values v1 to vn. The current implementation supports tuple of up to 222 − 1 elements (4194303 elements).
Record values are labeled tuples of values. The record value written { field1 = v1; …; fieldn = vn } associates the value vi to the record field fieldi, for i = 1 … n. The current implementation supports records with up to 222 − 1 fields (4194303 fields).
Arrays are finite, variable-sized sequences of values of the same type. The current implementation supports arrays containing up to 222 − 1 elements (4194303 elements) unless the elements are floating-point numbers (2097151 elements in this case); on 64-bit platforms, the limit is 254 − 1 for all arrays.
Variant values are either a constant constructor, or a non-constant constructor applied to a number of values. The former case is written constr; the latter case is written constr (v1, ... , vn ), where the vi are said to be the arguments of the non-constant constructor constr. The parentheses may be omitted if there is only one argument.
The following constants are treated like built-in constant constructors:
| Constant | Constructor |
| false | the boolean false |
| true | the boolean true |
| () | the “unit” value |
| [] | the empty list |
The current implementation limits each variant type to have at most 246 non-constant constructors and 230−1 constant constructors.
Polymorphic variants are an alternate form of variant values, not belonging explicitly to a predefined variant type, and following specific typing rules. They can be either constant, written `tag-name, or non-constant, written `tag-name(v).
Functional values are mappings from values to values.
Objects are composed of a hidden internal state which is a record of instance variables, and a set of methods for accessing and modifying these variables. The structure of an object is described by the toplevel class that created it.


We buy interfaces!
- reintermediate mission-critical bandwidth
- repurpose sticky models
- streamline rich metrics
- matrix interactive applications
- maximize distributed ROI
- revolutionize intuitive platforms
- architect innovative platforms
- engineer e-business networks
- extend 24/365 eyeballs
- transform B2C users
- monetize wireless networks