This document is a companion to the guide to Expressing Statistical Data in RDF with SDMX-RDF [sdmx-rdf], and the UK Government Guidelines on Publishing Government Statistics as Linked Data [stats-guidelines]. Specifically, in this document we explore aspects of the encoding of statistical linked data based on the SDMX information model, using the Public Expenditure Statistical Analyses (PESA) [pesa] published annually by the UK Treasury. PESA is a complex dataset, but typifies a class of dataset the government wishes to make available as linked open data. We expect the design steps we illustrate below to be common to the publication of many kinds of statistical data. The aim of this guide is not to show a complete translation of the PESA data into RDF, but to use aspects of the PESA data to illustrate elements of the linked data presentation.
We assume a basic working knowledge of RDF, and related terms such as URI. Readers unfamiliar with these concepts may find the RDF primer [rdf-primer] useful.
The following worked example uses the Public Expenditure Statistical Analyses (PESA) for 2009. Sections below draw out general principles, and note patterns that are useful for other categories of statistical data. This guide assumes some basic knowledge of the Statistical Data and Metadata Exchange (SDMX) format. Readers unfamiliar with SDMX terminology should see the appendix for a very brief overview of the terminology, or the companion documents listed in the references for further details [sdmx-rdf, ].
The PESA data is published as a collection of Excel-format spreadsheets. For 2009, there are ten spreadsheet documents, each of which has a collection of worksheets. Each worksheet contains the observations, labelled as a table. For example, here is a fragment of the first table from Chapter 1 of PESA 2009:
| Table 1.1 Total Managed Expenditure, 2003-04 to 2010-11 | ||||||||
| National Statistics | ||||||||
| 2003-04 outturn |
2004-05 outturn |
2005-06 outturn |
2006-07 outturn |
2007-08 outturn |
2008-09 est. outturn |
2009-10 plans |
2010-11 plans |
|
| CURRENT EXPENDITURE | ||||||||
| Resource DEL | ||||||||
| Near-cash DEL | 229,076 | 244,551 | 259,826 | 272,340 | 288,390 | 302,973 | 319,900 | 328,800 |
| Non-cash | 16,019 | 13,950 | 17,867 | 18,961 | 21,622 | 21,219 | 22,274 | 23,485 |
| Total resource DEL | 245,095 | 258,501 | 277,693 | 291,300 | 310,012 | 324,192 | 342,100 | 352,300 |
| Resource departmental AME | ||||||||
| Social security benefits | 117,801 | 124,781 | 129,600 | 133,463 | 140,474 | 151,497 | 165,485 | 171,249 |
| Tax credits (1) | 9,727 | 11,601 | 12,972 | 14,189 | 15,404 | 18,402 | 20,779 | 21,353 |
| Net public service pensions (2) | 1,796 | 352 | 3,656 | 3,312 | 5,388 | 6,111 | 1,884 | 2,073 |
| National lottery | 717 | 665 | 841 | 837 | 882 | 948 | 893 | 864 |
| BBC domestic services | 2,828 | 2,916 | 3,067 | 3,242 | 3,430 | 3,352 | 3,464 | 3,646 |
| Student loans | -237 | -313 | -402 | -467 | -869 | -1,191 | -1,014 | -1,043 |
| Non-cash items | 27,591 | 28,067 | 37,411 | 44,519 | 49,209 | 103,319 | 49,959 | 51,051 |
| Other departmental expenditure | 1,853 | 1,368 | 2,119 | 2,820 | 2,156 | 585 | 1,639 | 1,375 |
| Total resource departmental AME | 162,076 | 169,437 | 189,262 | 201,916 | 216,074 | 283,024 | 243,089 | 250,568 |
| Resource other AME | ||||||||
| Net expenditure transfers to the EC (3) | 3,448 | 4,907 | 4,435 | 4,652 | 5,392 | 3,060 | 5,649 | 7,875 |
| Locally financed expenditure | 19,778 | 20,858 | 22,827 | 23,458 | 24,317 | 27,344 | 27,940 | 28,479 |
| Central government gross debt interest | 22,280 | 23,933 | 25,807 | 27,579 | 29,960 | 30,466 | 27,206 | 42,906 |
| AME margin | - | - | - | - | - | - | 900 | 1,800 |
| Accounting adjustments | -27,365 | -20,857 | -35,394 | -41,680 | -50,168 | -103,625 | -38,919 | -39,037 |
| Total resource other AME | 18,140 | 28,840 | 17,676 | 14,009 | 9,501 | -42,755 | 22,800 | 42,000 |
| Total resource AME | 180,216 | 198,277 | 206,938 | 215,925 | 225,575 | 240,269 | 265,900 | 292,600 |
| Public sector current expenditure | 425,311 | 456,778 | 484,631 | 507,225 | 535,587 | 564,461 | 608,000 | 644,800 |
| CAPITAL EXPENDITURE | .... [elided] ... |
Table 1.2 from PESA 2009 is entitled "Table 1.2 Total Managed Expenditure in real terms, 2003-04 to 2011-12". It has the same structure as table 1.1, but the figures are adjusted to show the effects of inflation. Table 1.3 is rather different in structure, and other tables in other chapters show very different presentations of the underlying PESA data hypercube, to give different insights into the allocation of public finances.
When we consider how to structure a collection of data using SDMX, we need to decide how to partition the data into SDMX datasets. A dataset a collection of statistical observations, organized into of time series which share the same dimensions. It is clear that this level of description falls somwehere between individual tables and the entire PESA collection. Tables 1.1 and 1.2 share dimensional descriptions, so it would be reasonable to put them in one dataset together (though this is not mandatory – ultimately it is up to the data publisher to decide the appropriate dataset structure). However a dataset which was defined to also include table 1.3 and other tables would break the precepts of good dataset design suggested in the SDMX documentation (see [sdmx-implementors-guide] section 3.4 Best Practices). Consequently, publishing the PESA data requires us to define a collection of SDMX datasets, with a relatively complex mapping of published Excel tables to datasets. It is likely that the PESA documents are derived from an underlying hypercube of public accounting data in the Treasury, which is currently not published. The ideal route to publishing the PESA statistics as linked data would be based on the structure in that hypercube. In its absence, we must surmise its structure from the published Excel spreadsheets. However, this does not especially impact our use of PESA's spreadsheets as a pedagogical example of using SDMX-RDF.
RDF uses uniform resource identifiers, or URI's, to name concepts and properties.
One of the useful consequences of this choice is that things with similar names can
be disambiguated through namespaces.
To abbreviate long URI strings, we generally use the form prefix:name
,
where the prefix
is a short string which stands for the
full namespace URI. However, rules of the Turtle RDF syntax used in
the following examples sometimes mean that we cannot use the prefixed
short-form names, and will write out URI's in full, surrounded by
angle-brackets: < >. In this worked example,
we use the following namespaces (in addition to the well-known namespaces
for concepts from RDF, Dublin Core (DC) terms, etc:
http://source.data.gov.uk/dataset/pesa/
source.data.gov.uk
is a region of the central data.gov.uk project's web site which is intended to
host, or reference, data whose primary custodian is elsewhere. In time,
we would expect to reference data directly from, for example, the UK Treasury's
own web space.http://source.data.gov.uk/dataset/pesa/2009
(prefix pesa09-dataset
)http://reference.data.gov.uk/doc/government-year/
(prefix gov-year
)
http://source.data.gov.uk/dsd/pesa/
(prefix pesa-dsd
)http://source.data.gov.uk/dsd/pesa/dimension
(prefix pesa-dimension
)http://finance.data.gov.uk/def/
(prefix finance-def
)http://{sector}.data.gov.uk
pattern.
http://finance.data.gov.uk/def/statistical-concept/
(prefix finance-concept
)More guidance on the use of URI's for government data can be found elsewhere [uri-guidelines].
To give some context for the following discussions, here is a preview of the the kind of formulation we are aiming for. The table above shows that in 2003-4, the (non-inflation-adusted) total current near cash Department Expenditure Limit (DEL) was £229,076 million. What do we need to express this unambiguously in RDF? The number in the table is 229,076 but we need to clearly define what this refers to. Ultimately we're going to represent this number like this:
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2003-04>
a sdmx:Observation;
sdmx-dimension:refPeriod <http://reference.data.gov.uk/doc/government-year/2003-2004>;
pesa-dimension:inflationAdjustment <http://finance.data.gov.uk/def/inflation-adjustment/not-adjusted>;
pesa-dimension:expenditureType <http://finance.data.gov.uk/def/expenditure-type/current>;
pesa-dimension:expenditureCategory <http://finance.data.gov.uk/def/expenditure-category/near-cash-del>;
sdmx-attribute:unitMeasure <http://finance.data.gov.uk/def/currency/GBP>;
sdmx-attribute:unitMult sdmx-code:unitMult-6;
sdmx:obsValue 229076;
.
The following sections explain the various component elements of this description.
SDMX does not provide a convenient means to describe a collection of related datasets. However, the VOID vocabulary [void] does provide the concepts to describe the overall PESA data, and its relations to the constituent datasets.
We model the overall PESA collection as a void:Dataset
. Each
sdmx:DataSet
derived from the PESA data will then be a void
subset of the overall collection.
We add other basic metadata fields to the document resource, including publisher,
date and label. The result is an RDF resource describing the dataset:
<http://source.data.gov.uk/dataset/pesa/2009>
a void:Dataset;
rdfs:label "Public Expenditure Statistical Analyses 2009"@en;
dcterms:publisher <http://reference.data.gov.uk/id/department/hmt>;
dcterms:created "2009-04-16"^^xsd:date;
dcterms:source <http://www.hm-treasury.gov.uk/pespub_pesa09.htm>;
void:subset <http://source.data.gov.uk/dataset/pesa/chapter-1a>
.
void:Dataset
to represent the a collection of many SDMX datasetssource.data.gov.uk
as an interim measure.void:subset
to relate the overall data collection
to the constituent datasets.Our first example dataset will comprise data from tables 1.1 and 1.2 of chapter 1 of PESA 2009. These two tables have the same structure, differing only in whether the financial figures are adjusted for inflation or not.
The resource representing the dataset will sit under the
http://source.data.gov.uk/dataset/pesa/2009
URI root,
but we will need a name for the dataset itself. To some extent this
choice is arbitrary, since the most important considerations are that
the URI's are used consistently when they refer to the same information
objects, and that the metadata, such as the human-readable rdfs:label
,
is meaningful and search-able. However, we have found that it helps developers to be able
to navigate the source-code form of the data if the names are also
readable. One choice might be some agglutination of the names of the
tables (i.e. "Table 1.1" and "Table 1.2") together
with their titles. However, we elected to use chapter-1a
on the basis that there would be a number of other datasets (chapter-1b
etc) formed from the data in chapter 1 of the PESA data collection.
The dataset is where we will attach the observations in due course. It has the following structure:
<http://source.data.gov.uk/dataset/pesa/chapter-1a>
a sdmx:DataSet;
rdfs:label "Total Managed Expenditure, 2003-04 to 2010-11"@en;
dcterms:source <http://www.hm-treasury.gov.uk/d/bud09_budgetingtables.xls>;
sdmx:structure <http://source.data.gov.uk/dsd/pesa/chapter-1a>;
sdmx:slice <http://source.data.gov.uk/dataset/pesa/2009/not-adjusted/current-expenditure/near-cash-del>,
<http://source.data.gov.uk/dataset/pesa/2009/not-adjusted/current-expenditure/non-cash>,
<http://source.data.gov.uk/dataset/pesa/2009/not-adjusted/current-expenditure/total-resource-del>
.
The dataset structure definition, DSD, is where we define the dimensions for the dataset overall.
<http://source.data.gov.uk/dsd/pesa/chapter-1a>
a sdmx:DataStructureDefinition;
sdmx:component sdmx-dimension:refPeriod;
sdmx:component pesa-dimension:expenditureType;
sdmx:component pesa-dimension:expenditureCategory;
sdmx:component pesa-dimension:inflationAdjustment;
sdmx:component sdmx-attribute:unitMeasure;
sdmx:component sdmx-attribute:unitMult;
sdmx:component sdmx-attribute:obsStatus;
sdmx:componentOrder (pesa-dimension:inflationAdjustment
pesa-dimension:expenditureType
pesa-dimension:expenditureCategory
sdmx:refPeriod
).
Note that each SDMX component – which covers dimensions, attributes and measures –
is mentioned on the DSD but only defined as a dimension, or attribute, or measure in its
declaration, as show below. Note also that the relation sdmx:component
associates a component
with a DSD, while sdmx:componentOrder
denotes the order in which components
should be considered, for applications in which order matters (e.g. in the construction
of a key label). This does represent a small element of redundant duplication, but this is
recommended practice since it allows much easier querying of the RDF model. In particular,
the linked data query language SPARQL does not handle RDF lists very smoothly.
sdmx:structure
, and to the time-series
with sdmx:key
.As noted above, the data structure definition defines the structure of the dataset through its dimensions and attributes.
Considering the data shown above, the time series are clearly based on the
budget year (we presume these are government years not calendar years, the published Excel
data does not make this clear). The standard concept from the SDMX cross-domain
concepts annex for the period of time an observation applies to is REF_PERIOD.
The RDF property for attaching this concept to the DSD as a dimension is
sdmx-dimension:refPeriod
, where
the sdmx-dimension
prefix corresponds to
http://purl.org/linked-data/sdmx/2009/dimension#
.
The attribute labels for 2008, 2009 and 2010 suggest that these values are
provisional or forecast. This can be encoded by the CL_OBS_STATUS attribute
concept, applied to the individual observation. For example, each observation under
2009-2010 would be marked with observation status F
(using the
status codes from the SDMX Cross-Domain Concepts list [sdmx-cog]),
marking it as a
forecast. Observations without a declared status are assumed to have status
A
, or "normal"
The left-hand column of Table 1.1 presents different categories of expenditure, grouped into current and capital expense. These form two additional dimensions to the structure of the dataset (i.e. in addition to the time period dimension). Finally, since we are combining tables 1.1 and 1.2 into one dataset, the choice of non inflation-adjusted or real-terms figures gives the final dimension. Hence the DSD requires three extra concept declarations to express the dimensions of the dataset. Finally, we note that the table's figures are expressed in millions of pounds sterling. SDMX provides a ready-made way, through the cross-domain concepts, to express the millions multiplier. We will, however, require a concept definition for the concept of currency.
SDMX guidelines encourage the re-use of existing concept declarations wherever
possible. The concepts we require are mostly specific to the PESA domain, with the
exception of the time period values and the concept of a currency. A draft code list
for currencies is defined at http://finance.data.gov.uk/def/currency/
,
based on the ISO 4217 international currency codes. The remaining concepts
we will define as part of this worked example. Each concept follows the same
pattern, so we will only analyse the first of them, inflation adjustment, in detail.
SDMX makes a separation between the concept itself, and the way that the concept is used
in a given DSD, so that a concept may be a dimension in one dataset but an attribute
or a measure in another. We keep that separation in the RDF translation.
Firstly, the concept itself is an instance of the class of sdmx:Concept
s:
<http://finance.data.gov.uk/def/statistical-concept/inflation-adjustment>
a sdmx:Concept;
rdfs:label "inflation adjustment"@en;
skos:prefLabel "inflation adjustment"@en;
rdfs:comment "The statistic concept of being adjusted for inflation (i.e. 'real terms') or not";
.
This is a coded concept which has two valid values: non inflation adjusted, and inflation-adjusted (or real-terms). The code list denotes this space of values, and is declared as a concept scheme:
<http://finance.data.gov.uk/def/inflation-adjustment>
a skos:ConceptScheme;
rdfs:label "inflation-adjustment scheme"@en;
skos:prefLabel "inflation-adjustment scheme"@en;
rdfs:comment "The supported code values for inflation-adjustment";
skos:hasTopConcept <http://finance.data.gov.uk/def/inflation-adjustment/not-adjusted>,
<http://finance.data.gov.uk/def/inflation-adjustment/real-terms>
.
<http://finance.data.gov.uk/def/inflation-adjustment/InflationAdjustment>
a rdfs:Class, owl:Class;
rdfs:subClassOf skos:Concept;
rdfs:label "InflationAdjustment"@en;
skos:prefLabel "InflationAdjustment"@en;
rdfs:comment "The class of names of inflation adjustment types";
.
<http://finance.data.gov.uk/def/inflation-adjustment/not-adjusted>
a <http://finance.data.gov.uk/def/inflation-adjustment/InflationAdjustment>, skos:Concept;
rdfs:label "not adjusted for inflation"@en;
skos:prefLabel "not adjusted for inflation"@en;
skos:hiddenLabel "not-adjusted";
rdfs:comment "Figures that have not been adjusted for the effects of inflation";
skos:topConceptOf <http://finance.data.gov.uk/def/inflation-adjustment>;
.
<http://finance.data.gov.uk/def/inflation-adjustment/real-terms>
a <http://finance.data.gov.uk/def/inflation-adjustment/InflationAdjustment>, skos:Concept;
rdfs:label "adjusted for inflation (real terms)"@en;
skos:prefLabel "adjusted for inflation (real terms)"@en;
skos:hiddenLabel "real-terms";
rdfs:comment "Figures that have not been adjusted for the effects of inflation";
skos:topConceptOf <http://finance.data.gov.uk/def/inflation-adjustment>;
.
The above declaration has four elements: a skos:ConceptScheme
which is the container
for the two skos:Concept
s denoting the two permitted codes, and an RDF class
declaration which will act as the range of the property denoting the dimension. Note
that each code list value is both an instance of this range class, and an instance of a
SKOS concept, which brings both aspects of the code-list declaration together.
Finally, we declare how this concept will be used in the DSD. As mentioned above, a concept can play many roles in different DSD's. In this case, being inflation adjusted or not is a dimension of the dataset. The declaration of dimension represents the fact that it will be used as an RDF property whose range is the class defined above, but also connects the dimension property to the statistical concept and the list of valid codes:
pesa-dimension:inflationAdjustment
a sdmx:DimensionProperty, rdf:Property, sdmx:CodedProperty;
rdfs:label "inflation-adjustment dimension"@en;
rdfs:comment "Dimension property representing adjustment for inflation";
rdfs:range <http://finance.data.gov.uk/def/inflation-adjustment/InflationAdjustment>;
sdmx:concept <http://finance.data.gov.uk/def/statistical-concept/inflation-adjustment>;
sdmx:codeList <http://finance.data.gov.uk/def/inflation-adjustment>;
.
Similar dimensions are defined for expenditureType
(captial vs. current)
and budget-category
. The budget categories are taken from the cells in
column one of the spreadsheet, for example:
<http://finance.data.gov.uk/def/expenditure-category/near-cash-del>
a <http://finance.data.gov.uk/def/expenditure-category/ExpenditureCategory>, skos:Concept;
rdfs:label "Near-cash DEL"@en;
skos:prefLabel "Near-cash DEL"@en;
skos:hiddenlabel "near-cash-del";
.
<http://finance.data.gov.uk/def/expenditure-category/non-cash>
a <http://finance.data.gov.uk/def/expenditure-category/ExpenditureCategory>, skos:Concept;
rdfs:label "Non-cash"@en;
skos:prefLabel "Non-cash"@en;
skos:hiddenLabel "non-cash";
.
A short encoding of the dimension will be used later when constructing URI's for resources denoting
keys. The actual string chosen is unimportant, as long as it is unambiguous. Many SDMX code lists use
short strings (three or fewer characters) to denote codes. Here we have chosen
a canonicalised form of the code label, all lower case, with punctuation removed and
spaces replaced by hyphens. Other patterns are equally possible. The code string is
maintained in a skos:hiddenLabel
, since it is not semantically meaningful
to the concept itself, but is useful in other ways.
In Table 1.1, various rows of the table (e.g. rows 10 "Total resource DEL"
and 20 "Total resource department AME") are sub-totals of previous
amounts. SDMX handles such expressions by relationships among the concept values. In particular,
a hierarchical code scheme expresses the relationship between the codes in a concept, so that
the codes for "Near cash DEL" and "Non cash" are children of the parent
code for "Total resource DEL". In SDMX-RDF we have two ways to express hierarchical
code schemes: simple and complete. The complete code scheme is more congruent
to SDMX-ML's encoding, but is more complex. The simple encoding of hierarchical codes is slightly
less flexible, but much simpler for the majority of cases. In the case of the sub-totals in
Table 1.1, the simple encoding suffices. Using the simple encoding, we use skos:narrower
assertions on the parent category to denote its children. The hierarchy for Table 1.1 is
expressed as:
<http://finance.data.gov.uk/def/expenditure-category/total-resource-del>
a <http://finance.data.gov.uk/def/expenditure-category/ExpenditureCategory>, skos:Concept;
rdfs:label "Total resource DEL"@en;
skos:prefLabel "Total resource DEL"@en;
skos:hiddenLabel "total-resource-del";
skos:narrower <http://finance.data.gov.uk/def/expenditure-category/near-cash-del>,
<http://finance.data.gov.uk/def/expenditure-category/non-cash>
.
<http://finance.data.gov.uk/def/expenditure-category/total-resource-department-ame>
a <http://finance.data.gov.uk/def/expenditure-category/ExpenditureCategory>, skos:Concept;
rdfs:label "Total Resource Department AME"@en;
skos:prefLabel "Total Resource Department AME"@en;
skos:hiddenLabel "total-resource-department-ame";
skos:narrower <http://finance.data.gov.uk/def/expenditure-category/social-security-benefits>,
<http://finance.data.gov.uk/def/expenditure-category/tax-credits>,
<http://finance.data.gov.uk/def/expenditure-category/net-public-service-pensions>,
<http://finance.data.gov.uk/def/expenditure-category/national-lottery>,
<http://finance.data.gov.uk/def/expenditure-category/bbc-domestic-services>,
<http://finance.data.gov.uk/def/expenditure-category/student-loans>,
<http://finance.data.gov.uk/def/expenditure-category/non-cash-items>,
<http://finance.data.gov.uk/def/expenditure-category/other-departmental-expenditure>
.
<http://finance.data.gov.uk/def/expenditure-category/total-resource-other-ame>
a <http://finance.data.gov.uk/def/expenditure-category/ExpenditureCategory>, skos:Concept;
rdfs:label "Total Resource other AME"@en;
skos:prefLabel "Total Resource other AME"@en;
skos:hiddenLabel "total-resource-other-ame";
skos:narrower <http://finance.data.gov.uk/def/expenditure-category/net-expenditure-transfers-to-the-ec>,
<http://finance.data.gov.uk/def/expenditure-category/locally-financed-expenditure>,
<http://finance.data.gov.uk/def/expenditure-category/central-government-gross-debt-interest>,
<http://finance.data.gov.uk/def/expenditure-category/ame-margin>,
<http://finance.data.gov.uk/def/expenditure-category/accounting-adjustments>
.
<http://finance.data.gov.uk/def/expenditure-category/total-resource-ame>
a <http://finance.data.gov.uk/def/expenditure-category/ExpenditureCategory>, skos:Concept;
rdfs:label "Total Resource AME"@en;
skos:prefLabel "Total Resource AME"@en;
skos:hiddenLabel "total-resource-ame";
skos:narrower <http://finance.data.gov.uk/def/expenditure-category/total-resource-department-ame>,
<http://finance.data.gov.uk/def/expenditure-category/total-resource-other-ame>
.
<http://finance.data.gov.uk/def/expenditure-category/public-sector-current-expenditure>
a <http://finance.data.gov.uk/def/expenditure-category/ExpenditureCategory>, skos:Concept;
rdfs:label "Public sector current expenditure"@en;
skos:prefLabel "Public sector current expenditure"@en;
skos:hiddenLabel "public-sector-current-expenditure";
skos:topConceptOf <http://finance.data.gov.uk/def/expenditure-category/>;
skos:narrower <http://finance.data.gov.uk/def/expenditure-category/total-resource-del>,
<http://finance.data.gov.uk/def/expenditure-category/total-resource-ame>
.
source.data.gov.uk
.sdmx:DimensionProperty
and which references an sdmx:Concept
.
http://{sector}.data.gov.uk/def/
skos:hiddenLabel
to carry the short-form of the concept used in forming
URI paths.skos:narrower
relations to their child
categories.Data in an SDMX dataset is usually arranged by time series, and that is the case in this dataset. Each row of tables 1.1 and 1.2 represents one time series. A time series is translated into RDF in two parts: as the time series object itself, which records various meta-data about the collection of values in the time series, and then a sequence of N RDF resources for the N values in the time series, each of which records the value of the observation.
There are two common patterns for publishing time series data: flattened and compact. They present different trade-offs, and make different usage scenarios easier or harder. In the flattened pattern, each observation carries all of the information necessary to interpret it: the dimension key values, attribute values and other annotations and metadata. This makes querying for, and linking to, individual observations very easy, since there is no need to look elsewhere for the information to locate, interpret or reuse the observation. However, the flattened pattern can involve a lot of duplication of information, since each observation's attributes and key dimensions, other than the reference period, do not vary from one observation in a series to another. The alternative more compact pattern pushes invariant information, such as attributes and dimension key values, up to the time series. This makes the presentation more compact, and, more importantly, makes it easy to locate interesting time series based on their properties. A linked-data client could query for any time series that mention a certain statistical concept as dimensions, for example. Since both of these patterns are useful, and since it is straightforward to specify an automated transform that maps between these two patterns, we recommend ultimately making both patterns available to linked data consumers. By relying on automated tools in the publishing workflow to achieve this end goal, data publishers can work with the more compact form but ultimately publish the expanded form. In the case that publication tools are not available to support the publishing workflow, publishers should be free to choose whichever pattern is the more convenient or useful. It is important that data consumers are able to determine which different publication patterns are in use; investigation in this area is ongoing.
<http://source.data.gov.uk/dataset/pesa/2009/not-adjusted/current-expenditure/near-cash-del>
a sdmx:TimeSeries;
sdmx:DataSet <http://source.data.gov.uk/dataset/pesa/chapter-1a>;
sdmx-attribute:unitMeasure <http://finance.data.gov.uk/def/currency/GBP>;
sdmx-attribute:unitMult sdmx-code:unitMult-6;
pesa-dimension:inflationAdjustment <http://finance.data.gov.uk/def/inflation-adjustment/not-adjusted>;
pesa-dimension:expenditureType <http://finance.data.gov.uk/def/expenditure-type/current>;
pesa-dimension:expenditureCategory <http://finance.data.gov.uk/def/expenditure-category/near-cash-del>;
sdmx:observation <http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2003-04>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2004-05>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2005-06>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2006-07>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2007-08>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2008-09>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2009-10>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2010-11>
.
We need to
define the properties of the measurement for the observation.
The values in Table 1.1 are numbers, representing pounds sterling. A cell at
the top of the worksheet notes that the values are scaled in millions. So
our measure uses the sdmx-attribute:unitMult
property to record the scale value on
the measure, 6
representing a multiplier of 106
.
The currency for the measure is pounds Sterling, represented by a standard
code from the ISO 4217 country currency codes list.
The observations themselves are then straightforward. We illustrate the compact form first:
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2003-04>
a sdmx:Observation;
sdmx-dimension:refPeriod <http://reference.data.gov.uk/doc/government-year/2003-2004>;
sdmx:obsValue 229076;
.
And then the flattened pattern:
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2003-04>
a sdmx:Observation;
sdmx-dimension:refPeriod <http://reference.data.gov.uk/doc/government-year/2003-2004>;
pesa-dimension:inflationAdjustment <http://finance.data.gov.uk/def/inflation-adjustment/not-adjusted>;
pesa-dimension:expenditureType <http://finance.data.gov.uk/def/expenditure-type/current>;
pesa-dimension:expenditureCategory <http://finance.data.gov.uk/def/expenditure-category/near-cash-del>;
sdmx-attribute:unitMeasure <http://finance.data.gov.uk/def/currency/GBP>;
sdmx-attribute:unitMult sdmx-code:unitMult-6;
sdmx:obsValue 229076;
.
The observations up to 2008-09 need no further qualification. The notes
in the document record that the 2008-09 figure is provisional, and beyond
that the values are forecasts. The sdmx:obsStatus
property
is used to record the status of an observation:
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2008-09>
a sdmx:Observation;
sdmx-dimension:refPeriod <http://reference.data.gov.uk/doc/government-year/2008-2009>;
pesa-dimension:inflationAdjustment <http://finance.data.gov.uk/def/inflation-adjustment/not-adjusted>;
pesa-dimension:expenditureType <http://finance.data.gov.uk/def/expenditure-type/current>;
pesa-dimension:expenditureCategory <http://finance.data.gov.uk/def/expenditure-category/near-cash-del>;
sdmx-attribute:unitMeasure <http://finance.data.gov.uk/def/currency/GBP>;
sdmx-attribute:unitMult sdmx-code:unitMult-6;
sdmx:obsValue 302973;
sdmx-attribute:obsStatus sdmx-code:obsStatus-P
.
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/near-cash-del/2009-10>
a sdmx:Observation;
sdmx-dimension:refPeriod <http://reference.data.gov.uk/doc/government-year/2009-2010>;
pesa-dimension:inflationAdjustment <http://finance.data.gov.uk/def/inflation-adjustment/not-adjusted>;
pesa-dimension:expenditureType <http://finance.data.gov.uk/def/expenditure-type/current>;
pesa-dimension:expenditureCategory <http://finance.data.gov.uk/def/expenditure-category/near-cash-del>;
sdmx-attribute:unitMeasure <http://finance.data.gov.uk/def/currency/GBP>;
sdmx-attribute:unitMult sdmx-code:unitMult-6;
sdmx:obsValue 319900;
sdmx-attribute:obsStatus sdmx-code:obsStatus-F
.
http://source.data.gov.uk/data/
. Beyond the base URI, the pattern
is {datasetid}/{key}
,
where the key is constructed by a concatenation of the values of the dimension properties, using
the order defined in the sdmx:componentOrder
property of the DSD.
However,
this is simply a convenient means of generating unique URI's, and not the official encoding of the key
itself.
It is important to record the provenance for published statistics, so that data
consumers are aware of the source of the data, and its accuracy, authority, and so on.
As a guiding principle,
given a URI for an observation value, it should be possible to retrieve all of the
relevant provenance statements that provide interpretation and context for that
observation. Provenance metadata may be attached
at any level of the dataset, including the
observation, time-series, group, dataset and void:Dataset
level.
A core provenance vocabulary is available [provenance]. Recommended usage patterns using this vocabulary are still under development. In addition, the SDMX cross-domain concepts list contains a number of concepts that may be useful for recording provenance, including:
sdmx-attribute:adjustment
sdmx-attribute:adjustmentDetail
sdmx-attribute:adjustmentCoded
sdmx-attribute:comment
sdmx-attribute:compilingOrg
sdmx-attribute:dissOrg
sdmx-attribute:contact
sdmx-attribute:collMethod
sdmx-attribute:dataComp
sdmx-attribute:dataRev
sdmx-attribute:dataUpdate
sdmx-attribute:metadateUpdate
sdmx-attribute:mAgency
sdmx-attribute:recording
sdmx-attribute:sourceType
sdmx-attribute:statPop
Cell, series and dataset annotations are frequently used by statisticians to convey
important additional information about the statistics in a dataset. SDMX provides
notations for some these already, for example noting missing values or series breaks
through sdmx:obsStatus
. In other cases, annotations are free text.
There are three annotations on the portion of table 1.1 shown above. Each is attached to the labels in column 1, corresponding to the time series. The first annotation is an explanation of an adjustment to the figures, while the second is straightforward additional information. An example annotation would be:
<http://source.data.gov.uk/dataset/pesa/2009/not-adjusted/current-expenditure/tax-credits>
a sdmx:TimeSeries;
sdmx:DataSet <http://source.data.gov.uk/dataset/pesa/chapter-1a>;
sdmx-attribute:unitMeasure <http://finance.data.gov.uk/def/currency/GBP>;
sdmx-attribute:unitMult sdmx-code:unitMult-6;
sdmx-attribute:adjustDetail
"""(1) Tax credits include working tax credits, stakeholder pension credits and Child Tax
Credits. Child Tax Credits do not include child allowances paid as part of Income Support
and Jobseekers' Allowance, which are within social security benefits.
"""@en;
sdmx:observation <http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/tax-credits/2003-04>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/tax-credits/2004-05>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/tax-credits/2005-06>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/tax-credits/2006-07>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/tax-credits/2007-08>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/tax-credits/2008-09>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/tax-credits/2009-10>,
<http://source.data.gov.uk/data/pesa/2009/not-adjusted/current-expenditure/tax-credits/2010-11>
.
We use SDMX as the basis for our suggested patterns for publishing statistical data in RDF. Readers wanting to know more about SDMX itself should consult the documents on the SDMX site[sdmx]. The RDF translation of the key concepts from SDMX is described in detail elsewhere [sdmx-rdf]. For completeness, in this appendix we briefly summarise some of the key concepts of SDMX, as a guide to readers who are less familiar with SDMX itself.
Statistical data in SDMX consists of a collection of numbers (usually). On their own, numbers are not very meaningful, so the central goal of statistical encoding is to supply the context that makes a number (e.g. 61.4) meaningful (e.g. "the population of the United Kingdom in 2008, in millions"). An individual piece of data is known as an observation. An observation may have attributes which give more information about its interpretation: for example, the units of measure, the multiplier (such as "millions" in the example above) or the degree of accuracy or error in the measurement, and will have a measure denoting the actual value.
An observation will also have at least one, and typically
several, dimensions. Dimensions serve to identify exactly which
value the observation represents. Consider the population of the UK as a
whole in 2008 (61.4 million) and 2007 (61.0 million), and the population
of just England in 2008 (51.5 million) and 2007 (51.1 million). These
four numbers can be classified along two dimensions: year (2007 or 2008)
and geographical region (UK or England). The values of the dimension
properties precisely identify an observation, and constitutes the key
for the observation. So in our example data, the key uk,
2008
identifies the statistic 61.4, which has an attribute of being
scaled in millions.
A sequence of observations in which only one dimension varies is a series. A particular emphasis is placed on series in which the time of the measurement is the varying dimension, so called time series.
A dataset is a collection of time-series, or other cross sections of the data. A dataset contains the observations that comprise the data, but is described by a data structure definition (DSD), or key family (the terms are interchangeable in the SDMX documentation, though DSD is the preferred term). The primary roles of the key family are to define the concepts that comprise the dimensions for the observations in the data set, and to identify the additional attributes that may be recorded for observations. Attributes may be marked as optional or required.
A dimension property may be coded, which means that its values are taken from a controlled vocabulary or code list. Some standard code lists are defined in annexes to the SDMX content-oriented guidelines [sdmx-cog]; other standard code lists are defined by the main statistics-handling organisations. If necessary, new code lists for a dimension can be defined, though the SDMX documentation recommends that existing code-lists are re-used wherever possible.
An SDMX group allows a number of time series to be grouped together because they share some common structure – e.g. they have some metadata attributes in common. The group provides a named structure to which to attach common metadata. A group is determined by specifying a partial key (i.e. using a subset of the complete list of dimensions used by the time series).
While a group brings additional structure to the dataset by grouping time series together, a cross-section, or simply section, presents a different projection of the dataset by specifying a partial key which does not assume that the varying dimension is the time reference period. For example, a simple two-dimensional dataset might show sales figures by department by year. A group could be used, for example, to show the yearly sales figures for all departments serving a given market sector, whereas a section could be used to show the figures across all departments for the current fiscal year.


Available if TestSuiteConfig.type
== REST
Request params to be sent by default on each api request. defaultRequestOpts can be overridden with-in individual tests.
Provides properties for describing how to provision an environment for this TestSuite
Configuration for creating instances of this TestSuite's Environment. Allows the user to provide env-specific parameters to modify how TestSet(s) are run.
Required if --skipEnvProvisioning
is enabled
Example myhost
Provide a host when you plan to run tests against an already running environment.
Required
A unique id for this Test Suite
Example user test suite
Available if TestSuiteConfig.type
== REST
Provide a configuration for running your REST TestSuite in 'mock' mode
Required if TestSuiteConfig.type
== REST
Ports required by this suite. By default the first port supplied will be used for your
healthcheck port if not specific in the HealthCheck
Required if TestSuiteConfig.type
== REST
Allowed http
https
Available if TestSuiteConfig.type
== REST
Example /v1
root context of all api calls
Required
Whether or not to skip this Test Suite
Available if TestSuiteConfig.type
== REST
Example apiTests/
The directory containing your REST .js/.json test definitions.
Required
Defaut REST
Allowed REST
USER_PROVIDED
Dictates how the Test Suite is parsed. Busybee has it's own REST api testing implementation. For all other test suites choose 'USER_PROVIDED'
Generated using TypeDoc
{ id: 'API test suite', type: 'REST', skip: false, env: EnvConfig, envInstances: EnvInstanceConfig[], protocol: 'http', ports: [8080], root: '/v1' testFolder: 'api-tests', defaultRequestOpts: RequestOptsConfig, mockServer: MockServerConfig }


Trump signs bill to crack down on animal cruelty
by KNOEWASHINGTON (AP) — President Donald Trump has signed a bill that makes certain acts of animal cruelty a federal felony, saying it’s important for the nation to combat “heinous and sadistic acts of cruelty.”
The Preventing Animal Cruelty and Torture Act prohibits extreme acts of cruelty when they occur in interstate commerce or on federal property.
The legislation expands on a 2010 law that targeted videos depicting the crushing or torturing of animals, but that did not prohibit the underlying conduct. Under the new law, the underlying acts of cruelty would be a federal crime.
An array of animal rights groups attended a signing ceremony Monday in the Oval Office. Holly Gann of the Animal Wellness Foundation says the legislation will “better protect some of the most vulnerable among us.”
Copyright 2019 Associated Press. All rights reserved.


← Back to all examples.
Use the position and fen methods to retrieve the current position of the board.
position
fen


Class ProjectMembersPolicy
- App\Policies\ProjectMembersPolicy uses Illuminate\Auth\Access\HandlesAuthorization (not available)
public
boolean
|
#
userIsAdmin(
Determine if the given user is an admin of the project |
public
boolean
|
#
userIsNotAdmin(
Determine if the given user is not an admin of the project |
public
boolean
|
#
userIsOwner(
Determine if the given user is the owner of the given project |
public
boolean
|
#
userIsMember(
Determine if the given user is a member of the given project |
public
boolean
|
#
userIsNotMember(
Determine if the given user is not a member of the given project |
public
boolean
|
#
userIsFollower(
Determine if the given user is a follower of the given project |
public
boolean
|
#
userIsNotFollower(
Determine if the given user is not a follower of the given project |
public
boolean
|
#
verifyPendingRequest(
Determine if the given user has a pending request to join the project given project |
public
boolean
|
#
authToAddDeny(
Determine if the given user has appropriate privileges to add or deny a user from a project Checks if the user making the request is a admin for the project and the user being added or denied is actually requesting access to the project |
public
boolean
|
#
authToKick(
Determine if the given user has appropriate privileges to kick a user from a project Checks if user is a admin for the project and the user to be kicked is not a admin or the project owner |


Pay My Buddy
Error with Login or Password, please try again.
  Remember me
Login
Register
© 2021, Betsaleël Technologies Inc


Find all Developers programs, student opportunities & other resources at one place.
Are you looking for Developer/ Student programs? Student opportunities? Then, you are at the right Place!
OneDevPlace
we'll get back to you in 24 hrs 🕒.
Delhi, INDIA
onedevplace@gmail.com


Effect of adenovirus 2 on cellular gene activation in blood-derived monocytes and macrophages.
Abstract
We have investigated the effect of adenovirus 2 (Ad2) infection on human monocytes and monocyte-derived macrophages with regard to expression of TNF-alpha and IL-1 beta. In monocytes, the virus was bound to the surface without being internalized. On the other hand, Ad2 was internalized by macrophages. No virus replication and no transcription of the Ad2 early genes was observed in either of the cells. Ad2 infection induced transient increase in the mRNA levels for TNF-alpha and IL-1 beta in both monocytes and in macrophages, although the kinetics of the transcription was slightly different. The production of both cytokines, measured by ELISA tests, was enhanced in monocytes. In macrophages, a slight enhancement of TNF-alpha production was seen, whereas IL-1 beta was not detected. The data indicate that cellular genes might be activated by Ad2 virus infection in nonpermissive cells where no viral gene products could be detected.


I could if you hadn't turned on the light and shut off my stereo.
One hundred dollars. With a warning label this big, you know they gotta be fun! That could be 'my' beautiful soul sitting naked on a couch.  And I'd do it again! And perhaps a third time! But that would be it.
I didn't ask for a completely reasonable excuse! I asked you to get busy! I'm sure those windmills will keep them cool. This is the worst part. The calm before the battle.
And remember, don't do anything that affects anything, unless it turns out you were supposed to, in which case, for the love of God, don't not do it!
All I want is to be a monkey of moderate intelligence who wears a suit… that's why I'm transferring to business school! We're rescuing ya.

- I am Singing Wind, Chief of the Martians.
- Wow! A superpowers drug you can just rub onto your skin? You'd think it would be something you'd have to freebase.
When I was first asked to make a film about my nephew, Hubert Farnsworth, I thought "Why should I?" Then later, Leela made the film. But if I did make it, you can bet there would have been more topless women on motorcycles. Roll film!
This opera's as lousy as it is brilliant! Your lyrics lack subtlety. You can't just have your characters announce how they feel. That makes me feel angry! I'm a thing. Say what? How much did you make me?
- Dr. Zoidberg, that doesn't make sense. But, okay!

 I can't swallow that.
Kif might! Who are you, my warranty?! I feel like I was mauled by Jesus. Oh, how I wish I could believe or understand that! There's only one reasonable course of action now: kill Flexo! Yes. You gave me a dollar and some candy.
You mean while I'm sleeping in it? Shinier than yours, meatbag. Good news, everyone! There's a report on TV with some very bad news! Now what? Eeeee! Now say "nuclear wessels"!
Isn't it true that you have been paid for your testimony? Oh yeah, good luck with that. Whoa a real live robot; or is that some kind of cheesy New Year's costume? Ugh, it's filthy! Why not create a National Endowment for Strip Clubs while we're at it?
It's a T. It goes "tuh". In our darkest hour, we can stand erect, with proud upthrust bosoms. I daresay that Fry has discovered the smelliest object in the known universe! Soon enough. Oh, I always feared he might run off like this. Why, why, why didn't I break his legs?
I haven't felt much of anything since my guinea pig died. You're going to do his laundry? That's not soon enough! Um, is this the boring, peaceful kind of taking to the streets? Kids have names?
I decline the title of Iron Cook and accept the lesser title of Zinc Saucier, which I just made up. Uhh… also, comes with double prize money. Professor, make a woman out of me. This opera's as lousy as it is brilliant! Your lyrics lack subtlety. You can't just have your characters announce how they feel. That makes me feel angry!
I'm sorry, guys. I never meant to hurt you. Just to destroy everything you ever believed in. Ven ve voke up, ve had zese wodies.  They're like sex, except I'm having them!
And so we say goodbye to our beloved pet, Nibbler, who's gone to a place where I, too, hope one day to go. The toilet. I was all of history's great robot actors - Acting Unit 0.8; Thespomat; David Duchovny!
Dr. Zoidberg, that doesn't make sense. But, okay! Ugh, it's filthy! Why not create a National Endowment for Strip Clubs while we're at it? And I'm his friend Jesus. Can I use the gun?
You'll have all the Slurm you can drink when you're partying with Slurms McKenzie! Hey, guess what you're accessories to.  Incidentally, you have a dime up your nose. WINDMILLS DO NOT WORK THAT WAY! GOOD NIGHT!
Leela, are you alright? You got wanged on the head.  Guess again. Why did you bring us here? Incidentally, you have a dime up your nose.


Data - compare (pynance.data.compare
)¶
-
pynance.data.compare.
compare
(eq_dfs, columns=None, selection='Adj Close')[source]¶ Get the relative performance of multiple equities.
New in version 0.5.0.
Parameters: eq_dfs : list or tuple of DataFrame
Performance data for multiple equities over a consistent time frame.
columns : iterable of str, default None
Labels to use for the columns of the output DataFrame. The labels, if provided, should normally be the names of the equities whose performance is being compared.
selection : str, default ‘Adj Close’
Column containing prices to be compared. Defaults to ‘Adj Close’.
Returns: rel_perf : DataFrame
A DataFrame whose columns contain normalized data for each equity represented in eq_dfs. The initial price for each equity will be normalized to 1.0.
Notes
Each set of data passed in eq_dfs is assumed to have the same start and end dates as the other data sets.
Examples
import pynance as pn eqs = ('FSLR', 'SCTY', 'SPWR') eq_dfs = [] for eq in eqs: eq_dfs.append(pn.data.get(eq, '2016')) rel_perf = pn.data.compare(eq_dfs, eqs)


{% extends "layout.html" %} {% block content %}
First, create and preview your job listing and make sure it will look great on the site. Once you're happy, submit it for review. We will then send you an email explaining how you can access your listing if you want to change it. Once it is reviewed and accepted, it will be published immediately and you will get a confirmation email.
All listings are free for now and can be displayed indefinitely.
The quality of the site is determined by the quality of the job listings. Awesome job listings will attract equally awesome candidates so it's a win for all. So while the site is still free, we feel that reviewing is the only way to ensure quality.
You can send us an email at<EMAIL_ADDRESS>and we will remove it for you.
You guessed it, email us at hackcyprus+jobs@projectcel.com.


 Life is about creating yourself. ~George Bernard Shaw
- Time is precious. Waste it wisely.
- Dream on. Believe and make it happen. A river cuts through a rock not because of its power but because of its PERSISTENCE. ~Jim Watkins
- Make your parents proud, your enemies jealous & yourself happy. ~The Weeknd
- When you are wasting time, someone is working at the same time and the day you compete with that person, you will lose.
- 1.01^365= 37.8
0.99^365= 0.03
It's that 1% of extra effort every day of the year, that makes the difference.
- Money is not everything in life, But make sure you earn sufficient before thinking such nonsense. ~Forbes
- Everything is Possible. Dream, Believe, Act, Achieve.
- I am going to succeed.
- Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program. ~Linus Torvalds
- Our greatest weakness lies in giving up. The most certain way to succeed is always to try just one more time. ~Thomas A. Edison
- Don't tell people your dreams, show them.
- When you focus on problems, you will have more problems. When you focus on possibilities, you will have more opportunities. Dream, Wish, Make it happen.
- The past is a ghost, the future a dream. All we ever have is now. ~Bill Cosby
- Success is not final, failure is not fatal: it is the courage to continue that counts. ~Winston Churchill
- Failure doesn't mean you are a failure. It just means you haven't succeeded yet. ~Robert H. Schuller
- Some people dream of success. Others stay awake to achieve it.
- Everyone has the ability to make a difference in this world all you have to do is believe you have power to do so.
Few of my favorite lines in hindi:
- Manzil unhi ko milti h jinke sapno mein jaan hoti h,
Pankho se kuchh nhi hota hauslo se udaan hoti h.
- Parindon ko manzil milengi yakeenan
Yeh faile hue unke par bolte hai,
Wahi log rehte hai khaamosh aksar
Zamaane mein jinke hunar bolte hai.


Full stack web developer looking to build upon almost 10 years of digital project experience. More coming soon...
Recent posts:
Title #1
Date
Title #2
Date
Manage digital projects for online subscription platform, Scholastic Teachables (formerly Scholastic Printables). Main responsibilties include:
Project: Mass Hysteria, Cats vs Dogs game
Built with HTML,CSS, JavaScript and
RailsBridge teaches students


Username: {{ user?.username }}
Name: {{ user?.name }}
City: {{ user?.address?.city }}
Street: {{ user?.address?.street }}
Suite: {{ user?.address?.suite }}
Zipcode: {{ user?.address?.zipcode }}
Phone: {{ user?.phone }}
E-mail: {{ user?.email }}
Website: {{ user?.website }}
Company name: {{ user?.company?.name }}
BS: {{ user?.company?.bs }}
Catch Phrase: {{ user?.company?.catchPhrase }}


|
File Documentation
|
Functions | |
| def | histogram (correlation_matrix, folder_path, bin_size=0.10, img_format='png') |
| Creates histogram of frequencies of values in correlation matrix. More... | |
| def | plot_heat_map (correlation_matrix, files, folder_path, coloring='hot', img_format='.png') |
| Creates heat map of similarity values of files. More... | |
| def | save_csv_file (correlation_matrix, num_to_files, folder_path) |
| Stores similarity values between files in a file. More... | |
| def | zipdir (path, ziph) |
| def files.graph_utils.histogram | ( | correlation_matrix, | |
| folder_path, | |||
bin_size = 0.10 , |
|||
img_format = 'png' |
|||
| ) |
Creates histogram of frequencies of values in correlation matrix.
Counts number of files present in each bin. 1/bin_size must be an integer. 0 < bin_size <= 1. Default value of bin_size is 0.10
| correlation | matrix : Similarity values between all pairs of files |
| folder_path | : Location where graph is to be stored |
| bin_size | : Bin size of histogram. Default value is 0.10 |
| img_format | : Format in which image is to be stored. Default value is 'png' |
| def files.graph_utils.plot_heat_map | ( | correlation_matrix, | |
| files, | |||
| folder_path, | |||
coloring = 'hot' , |
|||
img_format = '.png' |
|||
| ) |
Creates heat map of similarity values of files.
Creates heat map of similarity values of files. X - axis and Y - axis represent the files. The colour of the block represents the similarity.
| correlation | matrix : Similarity values between all pairs of files |
| files | : List containing names of all files on which plagiarism detection is to be done |
| folder_path | : Location where graph is to be stored |
| coloring | : Coloring of heat map. Default is hot |
| img_format | : Format in which image is to be stored. Default value is 'png' |
| def files.graph_utils.save_csv_file | ( | correlation_matrix, | |
| num_to_files, | |||
| folder_path | |||
| ) |
Stores similarity values between files in a file.
Stores similarity values between files currently stored in correlation_matrix in .csv format
| correlation | matrix : Similarity values between all pairs of files |
| num_to_files | : Conversion of file index to file name |
| folder_path | : Location where graph is to be stored |
| def files.graph_utils.zipdir | ( | path, | |
| ziph | |||
| ) |


new StageManager
The overall manager of all Actors on a Stage.
- Source:
- StageManager.js, line 14
Extends
Members
-
isActing :boolean
-
True if this Actor is currently active.
- Default Value:
- false
- Source:
- Actor.js, line 112
-
isInvalidated :boolean
-
True if invalidate has been called on this Actor.
- Default Value:
- false
- Source:
- Actor.js, line 119
-
layer :number
-
The layer this Actor is on.
- Source:
- Actor.js, line 93
-
matrix :theatre.Matrix
-
The Matrix for the position of this Actor.
- Source:
- Actor.js, line 87
-
name :string
-
The name of this Actor
- Source:
- Actor.js, line 105
-
parent :theatre.Actor
-
The parent of this Actor
- Source:
- Actor.js, line 99
-
stage :theatre.Stage
-
The Stage this Actor is part of.
- Source:
- Actor.js, line 81
Methods
-
act
-
Called when an Actor is invalid. All updates and cues should be complete by the time this executes. Do your rendering in here.
- Source:
- Actor.js, line 347
-
addActor
-
Adds a new Actor of the given type to the Stage as a child of this Actor.
Parameters:
Name Type Description pClazz
function(new:theatre.Actor) The Actor type to add. pOptions
Object Options. - Source:
- Actor.js, line 425
- To Do:
-
- Make a sorted dictionary, not a massive array.
- Make the layer counter smart.
Returns:
The new Actor.- Type
- theatre.Actor
-
addPreparationScript
-
Adds a preparation script to the given step. Preparation scripts are scripts that get executed before all other scripts and always get executed even if steps are skipped (using goto). There is no guaruntee that other Actors and objects will be loaded during a preparation script and therefore it is not recommended to try to access other Actors.
Parameters:
Name Type Description pStep
number | string A step index or a time string. pScript
function - Source:
- Actor.js, line 224
Returns:
This Actor.- Type
- theatre.Actor
-
addScript
-
Adds a script to the given step.
Parameters:
Name Type Description pStep
number | string A step index or a time string. pScript
function - Source:
- Actor.js, line 235
Returns:
This Actor.- Type
- theatre.Actor
-
cue
-
Sends a cue to this Actor.
Parameters:
Name Type Description pName
string The type of cue. pData
Object Data to send with the cue. - Source:
- Actor.js, line 184
Returns:
This Actor.- Type
- theatre.Actor
-
findActors
-
Searches this Actor's children and their children recursivly until it finds the Actor given in the query or null if it could not be found.
Parameters:
Name Type Description pQuery
string The query to search for. - Source:
- Actor.js, line 477
Returns:
The Actor or null.- Type
- theatre.Actor
-
getActors
-
Returns an array of children of this Actor. Note that the returned array not live.
- Source:
- Actor.js, line 456
Returns:
An array of Actors.- Type
- Array.<theatre.Actor>
-
gotoInScene
-
Goes to the given step or time in the given scene. This will execute scripts instantly in the step given in that scene.
Parameters:
Name Type Description pSceneName
string The scene name. pStep
number | string The step or time to go to. - Source:
- Actor.js, line 303
Returns:
This Actor.- Type
- theatre.Actor
-
ignore
-
Ignores a cue this Actor was previously listening to.
Parameters:
Name Type Description pName
string The type of cue. pCallback
function The callback. - Source:
- Actor.js, line 161
Returns:
This Actor.- Type
- theatre.Actor
-
initialize
-
Initializes this Actor after it is constructed.
Parameters:
Name Type Description pData
Object Data to pass to each instance of this Actor. pStage
theatre.Stage The Stage to be added to. pLayer
number The layer added to. pParent
theatre.Actor The parent of this Actor. pName
string The name of this Actor. - Source:
- Actor.js, line 76
-
invalidate
-
Invalidates this Actor, causing it's theatre.Actor#act function to be called this or next step.
- Source:
- Actor.js, line 203
Returns:
This Actor.- Type
- theatre.Actor
-
leave
-
Removes this Actor from it's parent.
- Source:
- Actor.js, line 484
-
listen
-
Listen for a cue and execute the callback when it happens.
Parameters:
Name Type Description pName
string The type of cue. pCallback
function The callback. - Source:
- Actor.js, line 142
Returns:
This Actor.- Type
- theatre.Actor
-
startActing
-
Makes the Actor start acting and playing it's scripts.
- Source:
- Actor.js, line 278
Returns:
This Actor.- Type
- theatre.Actor
-
startActingScene
-
Starts acting a scene if the Actor already hasn't.
Parameters:
Name Type Description pSceneName
string The scene to start acting. - Source:
- Actor.js, line 318
Returns:
This Actor.- Type
- theatre.Actor
-
stopActing
-
Makes the Actor start acting and playing it's scripts.
- Source:
- Actor.js, line 289
Returns:
This Actor.- Type
- theatre.Actor
-
stopActingScene
-
Stops acting a scene if the Actor already hasn't.
Parameters:
Name Type Description pSceneName
string The scene to start acting. - Source:
- Actor.js, line 332
Returns:
This Actor.- Type
- theatre.Actor


- Alma Mater
- I am Bachelor of Law and member of the Bucharest Bar since January 2003. I also hold a master degree in business administration, with a major in human resources.
- Worked for
- I have 18 years of professional experience, of which almost 15 years as attorney-at-law specialised in corporate, commercial and employment matters, working for PricewaterhouseCoopers Romania and its connected law firm D&B David si Baias.
- Working in
- My main areas of expertise are corporate, including M&A, commercial and employment, including individual taxation and litigation. I am highly experienced in delivering training services on employment and human resources matters.
- Leadership
- I have managed teams of 8 -18 lawyers / tax consultants.
I have managed the International Mobility group of PwC Romania between 2013-2015.
- Member of
- I was an active member of the Labour Taskforce of American Chamber of Commerce in Romania, contributing to the amendments of employment and social dialogue law. I was recommended by the reputable legal research company Chambers and Partners for corporate and employment services.
- Entrepreneur
- I have started my own practice as of 1 October 2015.


--- layout: post status: publish published: true title: An offer of contribution to a community leader / OS project author: display_name: Tomas Restrepo login: tomasr email<EMAIL_ADDRESS>url: http://winterdom.com/ author_login: tomasr author_email<EMAIL_ADDRESS>author_url: http://winterdom.com/ wordpress_id: 166 wordpress_url: http://winterdom.com/2006/08/anofferofcontributiontoacommunityleaderosproject date: '2006-08-01 19:44:46 +0000' date_gmt: '2006-08-01 19:44:46 +0000' categories: - ".NET" - Personal - Development tags: [] comments: - id: 108 author: Robert Porter author_email<EMAIL_ADDRESS>author_url: http://www.rp2c.com/blogofbob date: '2006-08-02 08:44:48 +0000' date_gmt: '2006-08-02 08:44:48 +0000' content: | I would like to nominate Rockford Lhotka's CSLA Framework which is available at http://www.lhotka.net/cslanet/ Although he probably does not need the subscription. However there is a related community site that could benefit I imagine. Cheers, Bob Porter - id: 109 author: Sergio Pereira author_email: '' author_url: '' date: '2006-08-02 11:18:06 +0000' date_gmt: '2006-08-02 11:18:06 +0000' content: | AnkhSvn... The better this SVN plugin gets, the more people we will help moving out of VSS. VS.NET developers are too spoiled to use TortoiseSVN. - id: 110 author: Tomas Restrepo author_email<EMAIL_ADDRESS>author_url: http://www.winterdom.com/weblog/ date: '2006-08-03 06:37:22 +0000' date_gmt: '2006-08-03 06:37:22 +0000' content: | @Sergio: Would you especify a particular member of the AnkhSVN team that deserves it in particular? ---
In the email Kevin Downs sent to the NDoc community (as posted by Charles C. Chen here), he mentioned that "In fact, were it not for Oleg Tkachenko’s kind donation of a MS MVP
MSDN subscription, I would not even have a copy of VS2005 to work with!". I think this is a sad state of affairs.
So what I'd like to do is extend an offer for a similar contribution to a leader or significant participant of an community project in the .NET and general Microsoft developer community, by giving away my last MVP Invite card for an MSDN Subscription!
So, what I'd like is for you, my dilligent reader, to nominate whoever you think most needs and deserves this. Just leave a comment on this post or send me an email. Be sure to mention why you think they deserve it the most :) I'll take it into consideration and later announce the winner on this blog!
Update (2006-08-09): Come'on people! I need more candidates! Keep'em coming!


@* * Copyright 2023 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. *@ @import controllers.v2.routes @import models.viewmodels.PrimaryNavigationTab @import models.viewmodels.HomeTab @import models.viewmodels.MyCasesTab @import models.viewmodels.OpenCasesTab @import models.viewmodels.GatewayCasesTab @import models.request.AuthenticatedRequest @import models.viewmodels.ManagerToolsTab @import uk.gov.hmrc.govukfrontend.views.html.components.FormWithCSRF @this( formWithCSRF: FormWithCSRF ) @(selectedTab: PrimaryNavigationTab = HomeTab)(implicit request: AuthenticatedRequest[_], messages: Messages)


a small jquery plugin for animating elements into and out of view
"Biologists, however, still do not fully understand the exact mechanisms by which the squid become airborne."
Include the JS and CSS files from the dist directory. Make sure you include jQuery and jQuery UI first.
<link rel="stylesheet"
type="text/css"
href="/path/to/neon-flying-squids.css" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.0/jquery-ui.min.js"></script>
<script src="/path/to/neon-flying-squids.js"></script>
Each element to be animated must have a unique data-squid identifier.
<div data-squid="squidley">
*waves tentacles*
</div>
Call beget once to initialize the plugin.
$(document).ready(function() {
nfs.beget();
});
Animate an element by passing its identifier to glideIn, glideOut, or glideToggle, along with the desired direction of animation.
nfs.glideIn('squidley');
nfs.glideOut('squidley');
nfs.glideToggle('squidley');
Example usage: Add a click handler to a button that triggers the glide.
<button class="toggle-squidley">Poke the Squid</button>
$('.toggle-squidley').on('click', function() {
nfs.glideToggle('squidley');
});
This silly plugin is available under the Unlicense for you to hack around with as you please. Clone it from here.


Javascript
In the famous words of Leonard Nimoy "Fascinating!"
In the famous words of Leonard Nimoy "Fascinating!"
I have started to learn javascript as of 30/07/2021. I hopefully will have some work to show within the coming weeks scroll down to see my learning road-map on javascript within the coming weeks. I know javascript is going to be harder than HTML and CSS however I believe 100% that I am up for the challenge! I will hopefully be able to display a few projects very soon! So please keep an eye out!
I hope to learn the fundamentals of Javascript and how it can be used within webpages efficently and responsively.
In this section of the roadmap I will be prioritising putting my skills to the test and implementing these projects within my webpage.
In this section of the roadmap I hope to be learning some JS frameworks I am planning to start with React or Node JS.


The Medical Worklist
Pending tasks
About
Logged in as
username
Start a process
Treatment
Tasks in progress


Contact Me
Certifications
Projects
About Me
Home
Hello!
My name is Wasif Izar
Iam Pursuing my Degree of Bachelor of Engineering
in Computer Science & Engineering
This website helps me to showcase
All my Projects, Certifications & Learnings
1 / 8
TCS iON
2 / 8
Machine Learning
3 / 8
Git & GitHub
4 / 8
Python Course
5 / 8
Face Recognition App
6 / 8
Become a Software Developer
7 / 8
Soft Skills
8 / 8
Data Analysis
❮
❯


{% load staticfiles %}
Curate NCBI BioSample records with controlled terms from biomedical ontologies
* "Source cell line" and "Cell line" are one of "Cell line", "Sample name", "Sample title", or "Experiment title" in the underlying BioSample XML data. "Disease" is one of "Disease", "Health state", or "Phenotype". Source.


Sprint 3
Competition administrator
-
INFUND-1345
As a competition administrator I need to see all competitions within Innovate UK to review the state of each comp
-
INFUND-860
As a Competition Administrator I want to see how many applications have been submitted for a competition as soon as it closes so I can ensure we have enough assessors and begin the process of assignment
-
INFUND-997
**As a Competition Administrator I want to see how many applications are currently underway (over 50% complete) for an open competition so I can invite assessors enough assessors
-
INFUND-998
**As a Competition Administrator I want to see how many assessments are currently underway for a competition in assessment so I can track progresss
-
INFUND-863
As a Competition Administrator I want to be able to manually select a pool of assessors from a list of available assessors for future allocation to a competition
- INFUND-863 View the invite list
- INFUND-863 Manage invites link - appears after invites have been sent
- INFUND-863 Manage invites
-
INFUND-866
As a Competition Administrator I want to be able to group assessors selected for the assessor pool by specialism so I can more accurately assign assessors to applications Shown by 'filter assessors' section
-
INFUND-1021
As a Competition Administrator I want the option to manually allocate assessors to each application from my pool of assessors so that I can distribute the assessments incorporating awareness of expertise and conflicts
- INFUND-1381 - Create a view allowing the comp team to view all the complete applications that have been submitted to the competition and begin the allocation process
- INFUND-1381 - Same as above but showing an example of full width view set ?fullWidth at end of URL
- INFUND-1382 - Create a view allowing the comp team to assign and undo the assignment of assessors to an application.
- INFUND-1383 - Create a view allowing the comp team to assign and undo the assignment of applications to an assessor.
- INFUND-1385 - Create a view that allows the comp team to view any potential issues with assignment of applications.
- INFUND-1402 - Create a view of the system that shows an overview of assessor allocation
- INFUND-1525 - Create a view that allows members of the comp team to view all assessors on the competition, and allocate applications to them.
-
INFUND-1022
As a Competition Administrator I want the option to allocate assessors to each application within their specialist groups so that I can distribute the assessments more effectively. Shown by 'filter assessors' section
-
INFUND-870 - (In sprint 4)
As a Competition Administrator I want to manually allocate a new assessor to an application when an appointed assessor declines so that I can have the correctly designated number of assessor for each application
-
INFUND-1370
As a Competition Administrator I want to see how many assessments are currently underway for a competition in assessment so I can track progres
-
INFUND-1196
As a Competition Administrator/Innovation Lead I want to be able to view details of completed assessments so I can review the comments if necessary
- INFUND-1196- INTERNAL Feedback overview
- INFUND-1196 - INTERNAL Individual question page
Applicant
-
INFUND-1170
As an applicant I want see where my completed application is in the assessment process so that I can track its progress through assessment
-
INFUND-545
As an applicant I want to access my application assessment feedback, so that I can review the comments
- INFUND-545 - Feedback on successful application
- INFUND-545 - Feedback on unsuccessful application
-
INFUND-1141
As a lead applicant I want to be able to agree to the Terms and Conditions when submitting an application so I can compete the verification process and comply with the competition requirements.
-
INFUND-920
As an applicant i want the process information separate from applying, so that i don't have to apply in order to find out general information
-
INFUND-1169
As an applicant I want to be given guidance to contact Innovate UK's helpdesk if I wish to apply for a special rate for Admin Support Costs (formerly Overheads) so that I am not limited to the default rate
-
INFUND-1171
As an applicant I want to be directed to the Innovate UK helpdesk if I need to change my email address, so that I can keep my details up to date
-
INFUND-1172
As an applicant I want to be directed to the Innovate UK helpdesk if I need to change the organisation associated with my user ccount, so that I can keep my details up to date
-
INFUND-1173
As an applicant I want to be directed to the Innovate UK helpdesk if I need to change the lead applicant for the current appication, so that I can keep my organisation's details up to date
Assessor
-
INFUND-1175
As an assessor I want to be shown a countdown indicator informing me of an approaching deadline for completion of assessment so that I can manage my workload and contact Innovate UK if necessary
-
INFUND-1176
As an assessor I want to be able to create an account by following a link in the email invitation so that I can be approved for assessment of Innovate UK competitions
- INFUND-1360 - Assessor invite email example
- INFUND-1360 - Assessor invite landing page
-
INFUND-1177
As an assessor I want to supply my profile information and skills so that Innovate UK can accurately assign approriate assessments to me
-
INFUND-1178
As an assessor I want to be able to update/edit my profile information and skills so that Innovate UK can accurately assign approriate assessments to me
-
INFUND-1247
As an assessor I need to provide contracts and DOI to Innovate UK so that I am able to assess a competition
-
INFUND-1179
As an assessor I want to be able to log in with an existing account by having the option to select Applicant or Assessor when I log in, if I have a user account with both role profiles so that I don't access the wrong profile information
Misc
-
INFUND-1203
As an Innovation Lead/Comp Admin I want to be able to dynamically view all assessment information and scoring calculations for a competition together in a table so that I can rank the list and see identify areas requiring further review
-
INFUND-1197
As a Competition Administrator I want to be able to export information for the Panel Sheet so I can input into a spreadsheet
-
INFUND-1200
As an internal Innovate UK user I want to see the words Official Sensitive clearly marked in the header section of each page I print from IFS so that I comply with regulations
-
INFUND-1174
As an assessor at the beginning of an assessment, I want to be asked to confirm whether the application is in the correct research category so that Innovate UK know whether they have the right expertise assessing the application. Based on INFUND-984, just added select options to existing page
Ongoing tasks
-
INFUND-636
As a UX team member I want to make refinements to the components we already have for accessibility, code validity and usability, so we can make small improvements which don't fit in a specific user story.


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface Slice
A grouping of data on that can be processed individually by Pig. Instances of
this interface are created by Slicer
, serialized, and sent to nodes
to be processed.
getLocations()
is called as part of the configuration process to
determine where this Slice should be run for maximal locality with the data
to be read. Once the Slice arrives on the processing node,
init(DataStorage)
is called to give it access to the
DataStorage
it should use to load Tuples. After
init
has been called, any of the other methods on this
interface may be called as part of Pig's processing.
| Method Summary | |
|---|---|
void |
close()
Closes any streams this Slice has opened as part of its work. |
long |
getLength()
Returns the length in bytes of all of the data that will be processed by this Slice. |
String[] |
getLocations()
Returns string representations of all the files that will be used as part of processing this Slice. |
long |
getPos()
Returns the number of bytes read so far as part of processing this Slice. |
float |
getProgress()
Returns the percentage of Slice that is complete from 0.0 to 1.0. |
long |
getStart()
Returns the offset from which data in this Slice will be processed. |
void |
init(DataStorage store)
Initializes this Slice with the DataStorage it's to use to do its work. |
boolean |
next(Tuple value)
Loads the next value from this Slice into value . |
| Method Detail |
|---|
String[] getLocations()
This is the only method on Slice that is valid to call before
init(DataStorage)
has been called.
void init(DataStorage store) throws IOException
This will always be called before getLength
,
close
, getPos
, getProgress
and next
.
IOException
long getStart()
long getLength()
Only valid to call after init(DataStorage)
has been called.
void close() throws IOException
Only valid to call after init(DataStorage)
has been called.
IOException
long getPos() throws IOException
Only valid to call after init(DataStorage)
has been called.
IOException
float getProgress() throws IOException
Only valid to call after init(DataStorage)
has been called.
IOException
boolean next(Tuple value) throws IOException
value
.
Only valid to call after init(DataStorage)
has been called.
value
- -
the Tuple to be filled with the next value.
IOException
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


{% extends 'base.html' %} {% block content %}
A bit of a Scentsy color inspired TwitterClone.
Don't have an account with us? Click below to create your account and start tweeting!


I was never into movies for a large part of my life. The idea of sitting in front of a screen for more than an hour didn’t seem to make me jump. This was until I came across a film student who was discussing an assignment of theirs. The purpose of the assignment was to deconstruct a movie, from the lighting, to the colouring, to the character development, to the plot, to the climax, to the closing, to the music and all other elements that people more deep than me can think of.
From this point on, every time I watched a movie, I couldn’t help but notice these things. For example, in a drama, when the colour goes blue we know something dark is going to happen. And when the colours change to warm colours the plot is also turning towards something more positive. What the writers, and directors, and actors are providing in the movie not just good acting, or good music scores, or good lighting, but a good total experience. This is what Microsoft does.
I started developing with Microsoft technologies in high school when messing around with VBA after finding a random book lying around talking about it (I was a nerd). In university, all developing was done using Microsoft technologies, first in VB, then C#. When I started working, I worked for a dev house which mostly used Microsoft technologies. After some time, I thought I was missing out on being like the cool kids who sit in coffee shops all day with their Macs and develop in Ruby or Python. C# was just so mainstream.
Then I started playing around with Java. It’s really close to C#. Downloaded Eclipse and Netbeans to test the IDEs, and started creating a play application. Eclipse was horrid. Netbeans was alright, but nothing like Visual Studio. After this, I played around with Python to be more hip than the Ruby hipsters. Tried the PyDev IDE, and it was alright. Tried a text editor and that just didn’t work for me. Poked a bit at the Django framework. I’ve also been playing with PHP for WordPress sites, and other small projects. PHP makes me want to sleep.
I read a post by Scott Hanselman where he talked about what he would’ve learnt if he started again. It made me realise, C# and the Microsoft stack are actually good, and can do everything I need them to do right now, and will need them to do in the near future. And on top of this, as I mentioned above, the experience.
Isn’t it nice to open an IDE that makes developing so much more enjoyable? Isn’t it nice to use a web server where settings are more intuitive and therefore making my life easier? Isn’t it nice that from the point of starting a project, to deploying to a test server, to deploying to a production server, to managing the database scripts, I can have one, beautiful, unified experience? I think its nice.
Now many will disagree with me. And that’s ok. This is subjective.  But as for me and my household*, the Microsoft stack has one a place in our hearts.
*Currently my household just consists of myself and my wife, and I didn’t get her permission to include her in this opinion. But I’m sure she won’t mind.