This tutorial presupposes having read the general
introduction to POSSA
. Here, that introduction is
extended for cases of multiple hypotheses, i.e., where each analysis (at
a given “look”) involves multiple significance tests, and hence multiple
p values.
To verify that such relatively more complex used-defined functions
were written correctly, it is useful to store some descriptive data,
such as the means and SDs of the variables, or correlations, effect
sizes, etc. Relatedly, in real cases, one should ideally test a variety of possible
scenarios: for this, POSSA
provides the possibility to
easily run multiple simulations with varying factors (e.g., varying
correlations, effect sizes, etc.).
Hence, recording descriptives and using varying factors will be
explained here first, after which testing for multiple hypotheses is
presented. This completes (together with the intro)
everything important that needs to be known for using
POSSA
.
library('POSSA')
Let’s take again a t-test. The sample generating function is like before.
= function(sampleSize) {
customSample list(
sample1 = rnorm(sampleSize, mean = 0, sd = 10),
sample2_h0 = rnorm(sampleSize, mean = 0, sd = 10),
sample2_h1 = rnorm(sampleSize, mean = 5, sd = 10)
) }
However, the test function will return, apart from the p values, some
additional information. For a simple example, let’s calculate the mean
difference in case of both H0 and H1, and store it as
meanDiffH0
and meanDiffH1
(but any other
custom name could just as well be given – except for the notation
reserved for p values, i.e., starting with p_
and ending
with _h0
/_h1
).
= function(sample1, sample2_h0, sample2_h1) {
customTestWithMeans c(
p_h0 = t.test(sample1, sample2_h0, 'less', var.equal = TRUE)$p.value,
p_h1 = t.test(sample1, sample2_h1, 'less', var.equal = TRUE)$p.value,
meanDiffH0 = mean(sample1 - sample2_h0),
meanDiffH1 = mean(sample1 - sample2_h1)
) }
See that it’s working:
do.call(customTestWithMeans, customSample(85))
#> p_h0 p_h1 meanDiffH0 meanDiffH1
#> 0.5733485405 0.0003795801 0.2845337740 -4.9657803803
Now the simulation as before.
= sim(fun_obs = customSample,
dfPvalsAndMeans n_obs = c(27, 54, 81),
fun_test = customTestWithMeans)
The power calculation could be accessed as before via
pow
, e.g. pow(dfPvalsAndMeans)
, and the
results will be the same – but that’s not important here.
What’s important is that the dfPvalsAndMeans
can be
printed, and the factors will be automatically shown.
print(dfPvalsAndMeans)
#> POSSA sim() results (p values)
#> Sample:
#> .iter .look .n_total sample1 sample2_h p_h0 p_h1 meanDiffH0 meanDiffH1
#> 1: 1 1 54 27 27 0.57639929 0.0206001019 0.5229246 -5.886524
#> 2: 1 2 108 54 54 0.02521739 0.0001540393 -3.9918067 -6.850594
#> 3: 1 3 162 81 81 0.04303389 0.0000339881 -2.7414472 -6.031900
#> Descriptives:
#> meanDiffH0:
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> -11.208494 -1.331260 0.003347 0.006194 1.346132 12.649740
#> meanDiffH1:
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> -15.704 -6.350 -5.006 -5.005 -3.656 5.699
Note that entering a variable name, in this case
dfPvalsAndMeans
, in the console (or, in RStudio,
highlighting it and pressing Ctrl+Enter) is equivalent
to using the print()
function.
As can be seen, summary information for the additional values
returned from the testing function is automatically printed (under a
“Descriptives” title). When only p values are included, no such
information is printed. For some optional arguments, such as to change
the function used for summary information, see
?print.possa_sim_df
. Some examples are also given
below.
print(dfPvalsAndMeans, descr_cols = 'meanDiffH0')
print(dfPvalsAndMeans, descr_cols = c('meanDiffH0', '.n_total'))
print(dfPvalsAndMeans, descr_func = sd)
print(dfPvalsAndMeans, group_by = '.look')
Of course, one can also just check the data frame directly via other
functions, including plots. For example,
neatStats::peek_neat(dfPvalsAndMeans, c("meanDiffH0", "meanDiffH1"), group_by = c('.look'))
.
To get some additional information from each mean comparison, here is an extended “t-test” function that returns, apart from the p value, the mean difference, correlation, and the standardized mean difference (SMD; Cohen’s d).
= function(x, y) {
tTestPlus = stats::t.test(x, y, paired = TRUE, var.equal = T)
t_info = sd(x)
sdx = sd(y)
sdy = cor(x, y)
corr = sqrt((sdx ** 2 + sdy ** 2) - 2 * corr * sdx * sdy)
sd_p return(
list(
pval = t_info$p.value,
mean_diff = as.numeric(t_info$estimate),
corr = corr,
smd = as.numeric(t_info$estimate) / sd_p
)
) }
Now, the function for sample generation. What’s new here is that,
apart from the sample size (here: sampSize
), there are two
additional parameters, meanH1
and corrH1
,
which specify the mean difference and the correlation, respectively, for
the differing variable in case of H1.
= function(sampSize, meanH1, corrH1) {
sampFun = faux::rnorm_multi(
correlatedSamples n = sampSize,
vars = 3,
mu = c(0, 0, meanH1),
sd = 5,
r = c(corrH1, corrH1, 0)
)list(
GRP_v1 = correlatedSamples$X1,
GRP_v2_h0 = correlatedSamples$X2,
GRP_v2_h1 = correlatedSamples$X3
) }
And then the test function that return related additional information (using the extra t-test function): the mean differences, correlations, and SMDs, per H0 and H1.
= function(GRP_v1, GRP_v2_h0, GRP_v2_h1) {
testFun = tTestPlus(GRP_v2_h0, GRP_v1)
t0 = tTestPlus(GRP_v2_h1, GRP_v1)
t1 return(
c(
p_h0 = t0$pval,
meanDiffValueH0 = t0$mean_diff,
corrValueH0 = t0$corr,
smdValueH0 = t0$smd,
p_h1 = t1$pval,
meanDiffValueH1 = t1$mean_diff,
corrValueH1 = t1$corr,
smdValueH1 = t1$smd
)
) }
(Check via do.call(testFun, sampFun(30, 2, 0.5))
.)
The sim()
function works the same as before, except that
the varying factors meanH1
and corrH1
(the
parameters in sampFun
) need to be provided as part of
fun_obs
: instead of assigning a function as
e.g. fun_obs = sampFun
, a list is needed where the first
element is the function (sampFun
), and the rest of the
elements specify the varying factor via their names and their
corresponding values in a vector.
Hence, if one intends to see, for instance, all the combinations of
mean differences of 1.5
, 2.5
,
3.5
, and correlations of 0
and
0.5
, this can be specified as
fun_obs = list(sampFun, meanH1 = c(1.5, 2.5, 3.5), corrH1 = c(0, 0.5))
.
(Given 2x3 = 6 combinations, each with the default 45000 iterations,
this simulation would take a while – for quick testing, one can set
e.g. n_iter = 500
.)
= sim(
dfPvalsFacts fun_obs = list(
sampFun,meanH1 = c(1.5, 2.5, 3.5),
corrH1 = c(0, 0.5)
),n_obs = c(27, 54, 81),
fun_test = testFun,
n_iter = 500
)
Now, simply by printing dfPvalsFacts
, one can check the
means, correlations, and SMDs, for each factor combination, to make sure
everything is as intended; it’s also reassuring to see that each look
has similar values (e.g., correlations) for each combination;
print(dfPvalsFacts, group_by = c('.look', 'corrH1'), descr_cols = 'corrValueH1')
.
Or, again, some plots can give quick insight:
neatStats::peek_neat(dfPvalsFacts, c("corrValueH0", "corrValueH1"), group_by = c('corrH1', '.look'))
;
neatStats::peek_neat(dfPvalsFacts, c("smdValueH1"), group_by = c('meanH1', 'corrH1'))
;
etc.
Finally, POSSA::pow
will calculate power for each factor
combination separately – otherwise behaving just the same as when no
varying factors are given.
pow(dfPvalsFacts)
#> # POSSA pow() results #
#> GROUP: pow_1.5_0
#> N(average-total) = 81.0 (if H0 true) or 81.0 (if H1 true)
#> (p) Type I error: .10000; Power: .43000
#> Local alphas: (1) none; (2) none; (3) .05000
#> Likelihoods of significance if H0 true: (1) 0; (2) 0; (3) .10000
#> Likelihoods of significance if H1 true: (1) 0; (2) 0; (3) .43000
#> GROUP: pow_1.5_0.5
#> N(average-total) = 81.0 (if H0 true) or 81.0 (if H1 true)
#> (p) Type I error: .07000; Power: .80000
#> Local alphas: (1) none; (2) none; (3) .05000
#> Likelihoods of significance if H0 true: (1) 0; (2) 0; (3) .07000
#> Likelihoods of significance if H1 true: (1) 0; (2) 0; (3) .80000
#> GROUP: pow_2.5_0
#> N(average-total) = 81.0 (if H0 true) or 81.0 (if H1 true)
#> (p) Type I error: .03000; Power: .84000
#> Local alphas: (1) none; (2) none; (3) .05000
#> Likelihoods of significance if H0 true: (1) 0; (2) 0; (3) .03000
#> Likelihoods of significance if H1 true: (1) 0; (2) 0; (3) .84000
#> ...
(For brevity here, only the three first combinations are printed.)
To check any one or subset of the factor combinations, the
dfPvalsFacts
data frame can be subset, as, for instance,
pow(dfPvalsFacts[dfPvalsFacts$meanH1 == 1.5 & dfPvalsFacts$corrH1 == 0,])
.
Alternatively, any of the data frames contained in the list returned
by pow()
can be printed separately. E.g.,
all_pow_data = pow(dfPvalsFacts)
; then
print(all_pow_data$pow_1.5_0)
.
It is possible to perform tests for multiple hypotheses where each
test’s sample is independent from all the other tests’ samples, and this
is possible to do with POSSA
too. However, the outcome is
fairly straightforward in such cases: each test will have its own power
and T1ER independently from the rest, and these can be rather easily
combined into some total power or T1ER values as needed. What is more
interesting is how correlated samples’ testing affect the global
outcomes (e.g., the likelihood that any of the tests give a false
positive finding). Hence, the focus here is on correlated samples.
Nonetheless, by removing the grp_
notation (see below),
independent tests can just as well be used in POSSA
.
Now, the GRP
notation served to designate a single group
within the entire analysis. This could have any additions in the name,
such as GRP_x
, GRP_Y
, etc., it makes no
difference. The lowercase grp_
notation on the other hand
will designate variables that belong to one of several groups, each of
which requires a specific group name following this grp_
prefix. For instance, to designate a group “1
”, the
variable name can be any of the following: grp_1
,
grp_1_x
, grp_1_YZ
. To designate a group
“green
”, the variable name can be any of the following:
grp_green
, grp_green_y
,
grp_green_Xz
. In other words, the name must be separated by
underscores, and the first element must be grp
, and the
second element the group name, which allows all group members to be
categorized together.
Let’s say we have two independent groups, and we want to compare two
different variables (A
and B
), that we suspect
will be correlated within each group. For simplicity, let’s say that in
each case, the baseline has a mean of zero, and the SESOI is a mean
difference of 5
units. Since the baseline is identical in
either case, here it’s enough to assign it to one variable. To simulate
the correlation of the two variables in the other group, which is
expected to change (in case of H1), two pairs of correlated variables
have to be generated, one pair for H0, and one pair for H1.
= function(sampSize) {
multiSample = faux::rnorm_multi(
corr_vars_h0 n = sampSize,
vars = 2,
mu = 0,
sd = 10,
r = 0.6
)= faux::rnorm_multi(
corr_vars_h1 n = sampSize,
vars = 2,
mu = 5,
sd = 10,
r = 0.6
)= rnorm(sampSize, mean = 0, sd = 10)
v1 list(
grp_1_myTest_base = v1,
grp_2_myTestA_h0 = corr_vars_h0$X1,
grp_2_myTestA_h1 = corr_vars_h1$X1,
grp_2_myTestB_h0 = corr_vars_h0$X2,
grp_2_myTestB_h1 = corr_vars_h1$X2
) }
The myTest
/myTestA
/myTestB
parts of the names could each be named differently, everything would
work just the same.
The test function is then straightforward. (The p values do not have
to have the same mid-part names as the sample names,
e.g. myTestA
/myTestB
here, but it does help
clarity.)
= function(grp_1_myTest_base,
multiTest
grp_2_myTestA_h0,
grp_2_myTestA_h1,
grp_2_myTestB_h0,
grp_2_myTestB_h1) {c(
p_myTestA_h0 = t.test(grp_1_myTest_base, grp_2_myTestA_h0, 'less', var.equal = TRUE)$p.value,
p_myTestA_h1 = t.test(grp_1_myTest_base, grp_2_myTestA_h1, 'less', var.equal = TRUE)$p.value,
p_myTestB_h0 = t.test(grp_1_myTest_base, grp_2_myTestB_h0, 'less', var.equal = TRUE)$p.value,
p_myTestB_h1 = t.test(grp_1_myTest_base, grp_2_myTestB_h1, 'less', var.equal = TRUE)$p.value
) }
The sim
and pow
functions also essentially
work the same; only pow
will return separate results for
each test (each p value), as well as a “combined” result. This combined
result, by default, uses the any
option, meaning that, in
each set of analysis (performing the two t-tests), if any (in
this case: either) of the t-tests is significant (i.e., p value below
the specified alpha), this will be counted as a global “combined”
significant finding. Hence, for instance, in case of a single look
(fixed design), if either (or both) of the t-tests gives a significant
result in case of H0, the result of that analysis is counted as a type 1
error, increasing the combined T1ER. Similarly, either test’s
significance in case of H1 will mean that the analysis set is counted as
a correct finding, increasing combined power. (Hardly needs saying, the
combined T1ER and power greatly depends on the strength of the
correlation; e.g. here the rather high correlation lowers both.)
= sim(
dfPvalsMulti fun_obs = multiSample,
n_obs = c(27, 54, 81),
fun_test = multiTest
)
#> Note: Observation numbers groupped as "grp_1" for grp_1_myTest_base.
#> Note: Observation numbers groupped as "grp_2" for grp_2_myTestA_h0, grp_2_myTestA_h1, grp_2_myTestB_h0, grp_2_myTestB_h1.
pow(dfPvalsMulti)
#> # POSSA pow() results #
#> N(average-total) = 162.0 (if H0 true) or 162.0 (if H1 true)
#> (p_myTestA) Type I error: .05122; Power: .93807
#> Local alphas: (1) none; (2) none; (3) .05000
#> Likelihoods of significance if H0 true: (1) 0; (2) 0; (3) .05122
#> Likelihoods of significance if H1 true: (1) 0; (2) 0; (3) .93807
#> (p_myTestB) Type I error: .05056; Power: .93556
#> Local alphas: (1) none; (2) none; (3) .05000
#> Likelihoods of significance if H0 true: (1) 0; (2) 0; (3) .05056
#> Likelihoods of significance if H1 true: (1) 0; (2) 0; (3) .93556
#> Global ("combined significance") type I error: .07604 (included: p_myTestA, p_myTestB; power for reaching the "combined significance": .96751)
#> Likelihoods of stopping for (combined) significance if H0 true: (1) 0; (2) 0; (3) .07604
#> Likelihoods of stopping for (combined) significance if H1 true: (1) 0; (2) 0; (3) .96751
The method for combined results can be changed via
multi_logic_global
. For instance,
pow(dfPvalsMulti, multi_logic_global = 'all')
lowers both
global combined T1ER and power, because each evaluation is based on all
(here: both) tests being significant to count the set of analysis (two
t-tests) as a significant finding.
In case of a sequential design, the stopping logic is in principle
similar to the calculation of combined T1ER and power, although the
default here is all
: data collection is stopped only when
all included tests have significant results (i.e., p value below the
given local alpha).
pow(dfPvalsMulti, alpha_locals = NA)
#> # POSSA pow() results #
#> N(average-total) = 160.4 (if H0 true) or 108.1 (if H1 true)
#> (p_myTestA) Type I error: .03773; Power: .89769
#> Local alphas: (1) .02444; (2) .02444; (3) .02444
#> Likelihoods of significance if H0 true: (1) .01100; (2) .00802; (3) .01871
#> Likelihoods of significance if H1 true: (1) .33047; (2) .33673; (3) .23049
#> (p_myTestB) Type I error: .03767; Power: .89896
#> Local alphas: (1) .02444; (2) .02444; (3) .02444
#> Likelihoods of significance if H0 true: (1) .01100; (2) .00802; (3) .01864
#> Likelihoods of significance if H1 true: (1) .33047; (2) .33673; (3) .23176
#> Global ("combined significance") type I error: .05000 (included: p_myTestA, p_myTestB; power for reaching the "combined significance": .93847)
#> Likelihoods of stopping for (combined) significance if H0 true: (1) .01100; (2) .00802; (3) .03098
#> Likelihoods of stopping for (combined) significance if H1 true: (1) .33047; (2) .33673; (3) .27127
The stopping logic can be modified via multi_logic_a
.
E.g., setting multi_logic_a = 'any'
means that collection
is stopped whenever any of the included tests are significant; hence
stopping is more likely, the average expected observation number will
decrease, and the global combined T1ER and/or power will increase (see
pow(dfPvalsMulti, alpha_locals = NA, multi_logic_a = 'any')
– here, the combined T1ER remains .05
because of the
default adjustment procedure).
So far, alpha_locals
were assigned a single value (or
single vector) that was then applied for each test, which were detected
automatically. However, using a named list, one could also assign a
separate vector to each test – more specifically, to each p value, via
their root name (without the _h0
/_h1
endings).
Here, for instance, the
p_myTestB_h0
/p_myTestB_h1
can be assigned
local alphas as p_myTestB = c(.01,.02,.04)
; see an example
below with different local alphas for p_myTestA
and
p_myTestB
.
(To clearly show the assigned alpha values in the results, below
adjust = FALSE
is set, as the adjustment procedure would
otherwise multiply the all given local alphas so that the combined T1ER
would be at the specified level.)
pow(dfPvalsMulti,
alpha_locals = list(
p_myTestA = c(.02, .03, .03),
p_myTestB = c(.005, .02, .04)
),adjust = FALSE)
#> # POSSA pow() results #
#> N(average-total) = 161.2 (if H0 true) or 117.1 (if H1 true)
#> (p_myTestA) Type I error: .03749; Power: .90891
#> Local alphas: (1) .02000; (2) .03000; (3) .03000
#> Likelihoods of significance if H0 true: (1) .00302; (2) .00938; (3) .02509
#> Likelihoods of significance if H1 true: (1) .18542; (2) .46093; (3) .26256
#> (p_myTestB) Type I error: .04604; Power: .92553
#> Local alphas: (1) .00500; (2) .02000; (3) .04000
#> Likelihoods of significance if H0 true: (1) .00302; (2) .00938; (3) .03364
#> Likelihoods of significance if H1 true: (1) .18542; (2) .46093; (3) .27918
#> Global ("combined significance") type I error: .05958 (included: p_myTestA, p_myTestB; power for reaching the "combined significance": .95367)
#> Likelihoods of stopping for (combined) significance if H0 true: (1) .00302; (2) .00938; (3) .04718
#> Likelihoods of stopping for (combined) significance if H1 true: (1) .18542; (2) .46093; (3) .30731
If only a subset (here: one) of the tests are indicated in the list, the calculation will include only the selected one(s).
pow(dfPvalsMulti,
alpha_locals = list(p_myTestA = c(.02, .03, .03)))
#> # POSSA pow() results #
#> N(average-total) = 159.1 (if H0 true) or 101.5 (if H1 true)
#> (p_myTestA) Type I error: .05000; Power: .90522
#> Local alphas: (1) .01709; (2) .02563; (3) .02563
#> Likelihoods of significance if H0 true: (1) .01769; (2) .01862; (3) .01369
#> Likelihoods of significance if H1 true: (1) .37082; (2) .37942; (3) .15498
Setting futility bounds (for interim looks) works just the same.
pow(
dfPvalsMulti,alpha_locals = list(
p_myTestA = c(.02, .03, .03),
p_myTestB = c(.005, .02, .04)
),fut_locals = list(p_myTestA = c(.6, .5),
p_myTestB = c(.8, .4)),
adjust = FALSE
)
#> # POSSA pow() results #
#> N(average-total) = 126.5 (if H0 true) or 116.7 (if H1 true)
#> (p_myTestA) Type I error: .03711; Power: .90796
#> Local alphas: (1) .02000; (2) .03000; (3) .03000
#> Likelihoods of significance if H0 true: (1) .00302; (2) .00938; (3) .02471
#> Likelihoods of significance if H1 true: (1) .18542; (2) .46089; (3) .26164
#> Futility bounds: (1) .60000; (2) .50000
#> Likelihoods of exceeding futility alpha if H0 true: (1) .02727; (2) .18969
#> Likelihoods of exceeding futility alpha if H1 true: (1) .00253; (2) .00189
#> (p_myTestB) Type I error: .04591; Power: .92453
#> Local alphas: (1) .00500; (2) .02000; (3) .04000
#> Likelihoods of significance if H0 true: (1) .00302; (2) .00938; (3) .03351
#> Likelihoods of significance if H1 true: (1) .18542; (2) .46089; (3) .27822
#> Futility bounds: (1) .80000; (2) .40000
#> Likelihoods of exceeding futility alpha if H0 true: (1) .00993; (2) .24111
#> Likelihoods of exceeding futility alpha if H1 true: (1) .00253; (2) .00189
#> Global ("combined significance") type I error: .05911 (included: p_myTestA, p_myTestB; power for reaching the "combined significance": .95231)
#> Likelihoods of stopping for (combined) significance if H0 true: (1) .00302; (2) .00938; (3) .04671
#> Likelihoods of stopping for (combined) significance if H1 true: (1) .18542; (2) .46089; (3) .30600
#> Likelihoods of stopping for (combined) futility if H0 true: (1) .17609; (2) .28896
#> Likelihoods of stopping for (combined) futility if H1 true: (1) .00253; (2) .00189
Prevent any of the local alphas of any of the included tests to stop
the data collection, it can be set to zero (0
; so that it’s
never significant – similarly, again, futility bounds can be set to
1
to avoid stopping for futility at any look, for any given
test). However, one might want to know the power and T1ER for a test
that has no “stopping” alphas: for instance, there may be a
secondary/supplementary test at whose significant finding one does not
intend to stop data collection, but at the same time one would like to
know its power and T1ER – which depend on the other included tests’
stopping alphas (and the correlations between the variables, if
any).
Such “non-stopping” local alphas can be specified for any of the
included tests (p values) via the alpha_loc_nonstop
parameter. This parameter works the same way as
alpha_locals
, except that they never stop data collection,
regardless of whatever p value they have at any given look. They also do
not count towards the “combined” power or T1ER. Hence, the results of
each test with such non-stopping local alphas are reported stand-alone,
unrelated to the rest of the results.
pow(
dfPvalsMulti,alpha_locals = list(p_myTestA = c(.005, .01, .025)),
alpha_loc_nonstop = list(p_myTestB = c(.01, .01, .02))
)
#> # POSSA pow() results #
#> N(average-total) = 160.4 (if H0 true) or 111.2 (if H1 true)
#> (p_myTestA) Type I error: .04993; Power: .92713
#> Local alphas: (1) .00797; (2) .01595; (3) .03987
#> Likelihoods of significance if H0 true: (1) .00858; (2) .01291; (3) .02844
#> Likelihoods of significance if H1 true: (1) .26496; (2) .41029; (3) .25189
#> (non-stopper: p_myTestB) Type I error: .02256; Power: .72098
#> Local alphas (secondary): (1) .01000; (2) .01000; (3) .02000
#> Likelihoods of significance if H0 true: (1) .00318; (2) .00411; (3) .01527
#> Likelihoods of significance if H1 true: (1) .19242; (2) .30551; (3) .22304
(Here, there is no combined power/T1ER, since there is only one test with stopping alphas.)
Different observation numbers for each group may be specified via the
group names (analogously to specifying
observation numbers per each sample). To be able to specify the two
group’s observation numbers separately, we need separate parameters for
each, in the sample generation function, each using the
grp_
notation; here grp_1
and
grp_2
.
Unrelatedly, for the sake of an extended example, here there will be,
instead of two, three tests included (denoted here as X
,
Y
, Z
).
= function(grp_1, grp_2) {
multiSampleGroupParam = faux::rnorm_multi(
corrVarsH0 n = grp_2,
vars = 3,
mu = 0,
sd = 10,
r = c(0, 0.4, 0.8)
)= faux::rnorm_multi(
corrVarsH1 n = grp_2,
vars = 3,
mu = 4,
sd = 10,
r = c(0, 0.4, 0.8)
)= rnorm(grp_1, mean = 0, sd = 10)
v1 list(
grp_1_test_base = v1,
grp_2_testX_h0 = corrVarsH0$X1, # correlates with X3 (.4)
grp_2_testX_h1 = corrVarsH1$X1,
grp_2_testY_h0 = corrVarsH0$X2, # correlates with X3 (.8)
grp_2_testY_h1 = corrVarsH1$X2,
grp_2_testZ_h0 = corrVarsH0$X3, # correlates with X1 and X3
grp_2_testZ_h1 = corrVarsH1$X3
) }
The test function can then be like this.
= function(grp_1_test_base,
multiTest3
grp_2_testX_h0,
grp_2_testX_h1,
grp_2_testY_h0,
grp_2_testY_h1,
grp_2_testZ_h0,
grp_2_testZ_h1) {c(
p_testX_h0 = t.test(grp_1_test_base, grp_2_testX_h0, 'less', var.equal = TRUE)$p.value,
p_testX_h1 = t.test(grp_1_test_base, grp_2_testX_h1, 'less', var.equal = TRUE)$p.value,
p_testY_h0 = t.test(grp_1_test_base, grp_2_testY_h0, 'less', var.equal = TRUE)$p.value,
p_testY_h1 = t.test(grp_1_test_base, grp_2_testY_h1, 'less', var.equal = TRUE)$p.value,
p_testZ_h0 = t.test(grp_1_test_base, grp_2_testY_h0, 'less', var.equal = TRUE)$p.value,
p_testZ_h1 = t.test(grp_1_test_base, grp_2_testY_h1, 'less', var.equal = TRUE)$p.value
) }
(Check via
do.call(multiTest3, multiSampleGroupParam(70, 90))
.)
Now the observation numbers can be specified via the group names
grp_1
and grp_2
, in a list argument for
n_obs
.
= sim(
dfPvalsMultiUnequalGrps fun_obs = multiSampleGroupParam,
n_obs = list(grp_1 = c(27, 54, 81),
grp_2 = c(60, 90, 120)),
fun_test = multiTest3
)
Now the pow
function can be used as before. Here are
some examples (with output omitted here for brevity).
pow(dfPvalsMultiUnequalGrps,
alpha_locals = c(0.03, 0.04, 0.05))
# same with different notation
pow(dfPvalsMultiUnequalGrps,
alpha_locals = list(
p_testX = c(0.03, 0.04, 0.05),
p_testY = c(0.03, 0.04, 0.05),
p_testZ = c(0.03, 0.04, 0.05)
))
# include only two tests in the calculation
pow(dfPvalsMultiUnequalGrps,
alpha_locals = list(
p_testY = c(0.03, 0.04, 0.05),
p_testZ = c(0.03, 0.04, 0.05)
))
# include only one
pow(dfPvalsMultiUnequalGrps,
alpha_locals = list(p_testX = c(0.03, 0.04, 0.05)))
# include again one but add info for two non-stoppers
pow(
dfPvalsMultiUnequalGrps,alpha_locals = list(p_testY = c(0.03, 0.04, 0.05)),
alpha_loc_nonstop = list(
p_testX = c(0.03, 0.04, 0.05),
p_testZ = c(0.03, 0.04, 0.05)
)
)
# same but with different alphas for each
pow(
dfPvalsMultiUnequalGrps,alpha_locals = list(p_testY = c(0.03, 0.04, 0.05)),
alpha_loc_nonstop = list(
p_testX = c(0.03, 0.02, 0.01),
p_testZ = c(0.04, 0.03, 0.0)
)
)
# futility bounds for all tests
pow(dfPvalsMultiUnequalGrps,
fut_locals = c(0.6, 0.4))
# futility bounds with "any" logic
pow(
dfPvalsMultiUnequalGrps,fut_locals = c(0.6, 0.4),
multi_logic_fut = 'any'
)
# futility bounds for one test only
pow(dfPvalsMultiUnequalGrps,
fut_locals = list(p_testY = c(0.6, 0.4)))
# stopping local alphas and futility bounds together, for two tests
pow(
dfPvalsMultiUnequalGrps,alpha_locals = list(
p_testY = c(0, 0.3, 0.5),
p_testZ = c(0, 0.2, 0.5)
),fut_locals = list(p_testY = c(0.5, 0.2),
p_testZ = c(0.6, 0.3))
)


Dear Sir, With due respect, trust and humility, I write you this proposal believing that it will receive the most desired attention from you even as we have not had any previous correspondence, Although, I am constrained by insufficient information about you, but I will express in full the main objectives of this proposal . I am Mr.CHRIS ANDERSON Personal Aide and in-law to the former President of the Liberian Mr. Charles Taylor, who resigned his post due to pressure from the International Community in order to maintain peace in west African Region. His Excellency who is currently behind bars at a U.N.-backed court in Hague Netherlands, facing 11 counts of war crimes during the country's 1991-2002 civil war. Liberian Government In conjunction with Sierra Leone Government has agreed on June 20, 2006 for security reason to Hand him over to U.N War crime Special Court in Hague, Netherlands. His Excellency who was arrested on a boarder between Nigeria and Cameroun of which he instructed me to escape with all his vital documents so that he could face a U.N.-backed tribunal for war crime charges which he is now currently facing. but before this new unfolding events. Though our original plan was after successful crossing to Cameroun un-noticed, I will proceed to Accra Ghana totake the task of arranging for the immediate evacuation of the money in whish he deposited in the custody of Security Finance Company before it will be discovered by International Community or Liberian Government.See the website for more details http://jurist.law.pitt.edu/paperchase/2006/03/breaking-news-charles-taylor-captured.php http://news.bbc.co.uk/1/hi/world/africa/2963086.stm http://www.cnn.com/2006/WORLD/africa/03/29/taylor.nigeria/index.html http://somalinet.com/news/world/Africa/10893 His Excellency, while in jail has mandated me to secure the co-operation of a trust worthy and reliable firm or individual as fund managers to whom he will entrust certain amount of money to be managed within the period while he is in jail, on the terms as shall be agreed by both parties. The new government in Liberia lead by Mrs. Ellen Johnson-Sir leaf has initiated moves to probe Mr. Taylor’s governance while in office with a view of recovering his assets and deposits and repatriating such to the country as was the case with the Late Head of State of the Federal Republic of Nigeria, Gen. Sanni Abacha as advised by the International Community on Liberian Government. On the wake of hostilities in Liberia and the break out of war between the rebels and the allied forces, the Liberian government being under an arms embargo by the U.N could not import arms officially, so Mr. Taylor resolved to illegal arms deal from the West African Region of Ghana, which was transacted by cash monies, within this period, he succeeded in depositing a total sumof USD$115M only, in cash money derived from the arms dealing custody of Security Finance Company in Accra Ghana. Which is the trust company from where the arms deal was financed? we intends to execute a deed of conveyance of this deposit to a capable and trust worthy firm or individual who will immediately effect a change of beneficiary on the deposit and release it from the custody of Security Finance Company by way of terminating the deposit contract to avoid any trace and repatriation of the deposit by the new government in Liberia. Terms of the transaction shall be discussed and agreement entered into when you indicate your ability to handle and manage funds of this magnitude under a strict confidential understanding.. Please treat as most confidential due to the sensitive information given in here strictly to you. Yours sincerely CHRIS ANDERSON Personal Aide to the former Liberian President


Name: Amanda James
Age: 40
Sex: Female
Ethnicity: African American
Occupation: Optical Engineer, tenured research professor, owner of Celestia: a government R&D contracting company.
Technology: 2014 Lenovo ThinkPad X1 Carbon | 14inch, 2560x1440 touch screen | 1.6GHz Intel Core i5-4200U | 8GB DDR3 SDRAM 1600MHz | 128 GB SSD | Windows 8.1(64-bit), Celestron NexStar 8SE Schmidt Telescope, Google Pixel (1st gen), Samsung Galaxy Tablet A 10.5 in, 32GB, WiFi enabled.
Attitude: Friendly person, loves to teach especially about space and stars. She is passionate about space and space technologies. She stargazes and takes photos as a way to slow down and reset after long work weeks. She loves hosting star parties at her home in Tijeras.
Frustrations: She doesn't often have time to socialize and connect with people outside of her professional circles. The lack of access community members have to information about astronomy, and general lack of awareness around astronomy. She is also eternally frustrated with the exclusivity of local astronomy clubs, and wants to host open events that everyone can feel comfortable at and attend.
Goals: Amanda wants to use the site to build a social network, host events she's passionate about and foster her love of teaching.
User Story: Amanda wants to quickly post an open invitation to a star party she is hosting at her house with colleagues.
Use Case: After a casual meeting with colleagues, Amanda wants to find a website to post an open invitation for a star party she and her colleagues are hosting. She creates an open event invitation for a star party that she can also share with her facebook community.
Description:
Name of user and user role: Amanda James, physics and astronomy expert/party organizer, teacher, no kids.
Usage precondition: Amanda has already signed up for the site.


The ggf-border class adds borders around the image.
Tip: Use any of the ggf-padding classes if you want padding inside the borders:
Less padding:


{% include 'base/head.html' %}
[[salary_sheet[0].company[0].name ]] - [[ formatedMonth() ]]
|
PAY for
[[formatedMonth() ]] |
NAME
[[ row.employee[0].name]] |
|||
| APPOINTMENT |
POST
[[ row.employee[0].post[0].name ]] |
DEPARTMENT
[[ row.employee[0].department[0].name ]] |
COMPANY
[[ row.company[0].name ]] |
|
|
DAYS ATTENDED
[[ row.daysatt ]] |
LATE COMING
[[ row.latecomin ]] |
BASIC PAY
[[ formatedNumber(row.employee[0].basicpay) ]] |
DAYS PAYABLE
[[ formatedNumber(row.days_payable) ]] |
ADVANCE DEDUCTION
[[ formatedNumber(row.net_adv_deduction) ]] |
|
P.F
[[ row.esi ]] |
ESI
[[ row.pf ]] |
TDS
[[ row.tds ]] |
Other Deduction
[[ row.other_deduction ]] |
TOTAL DEDUCTION
[[ formatedNumber(row.total_deductions) ]] |
| NET PAYABLE |
[[ formatedNumber(row.net_payable) ]] |


class: WorkspaceSettingsDto
Namespace: Clockify.Net.Models.Workspaces
Assembly: Clockify.Net.dll
No description.
Quick Links
Compact Summary
Constructors
| Constructor Descriptions |
|---|
|
public WorkspaceSettingsDto()
No description. |
Properties
Methods
| Modifier / Type | Name and Description |
|---|---|
| virtual bool |
Equals(object obj)
Determines whether the specified object is equal to the current object. (Inherited from object) |
| protected virtual void |
Finalize()
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from object) |
| virtual int |
GetHashCode()
Serves as the default hash function. (Inherited from object) |
| Type |
GetType()
Gets the Type of the current instance. (Inherited from object) |
| protected object |
MemberwiseClone()
Creates a shallow copy of the current Object. (Inherited from object) |
| virtual string |
ToString()
Returns a string that represents the current object. (Inherited from object) |
Constructors
Properties
AdminOnlyPages
No description.
public List<AdminOnlyPages> AdminOnlyPages { get; set; };
AutomaticLock
No description.
public AutomaticClockDto AutomaticLock { get; set; };
CanSeeTimeSheet
No description.
public Nullable<bool> CanSeeTimeSheet { get; set; };
DefaultBillableProjects
No description.
public Nullable<bool> DefaultBillableProjects { get; set; };
ForceDescription
No description.
public Nullable<bool> ForceDescription { get; set; };
ForceProjects
No description.
public Nullable<bool> ForceProjects { get; set; };
ForceTags
No description.
public Nullable<bool> ForceTags { get; set; };
ForceTasks
No description.
public Nullable<bool> ForceTasks { get; set; };
LockTimeEntries
OnlyAdminsCreateProject
No description.
public Nullable<bool> OnlyAdminsCreateProject { get; set; };
OnlyAdminsCreateTag
No description.
public Nullable<bool> OnlyAdminsCreateTag { get; set; };
OnlyAdminsSeeAllTimeEntries
No description.
public Nullable<bool> OnlyAdminsSeeAllTimeEntries { get; set; };
OnlyAdminsSeeBillableRates
No description.
public Nullable<bool> OnlyAdminsSeeBillableRates { get; set; };
OnlyAdminsSeeDashboard
No description.
public Nullable<bool> OnlyAdminsSeeDashboard { get; set; };
OnlyAdminsSeePublicProjectsEntries
No description.
public Nullable<bool> OnlyAdminsSeePublicProjectsEntries { get; set; };
ProjectFavorites
No description.
public Nullable<bool> ProjectFavorites { get; set; };
ProjectGroupingLabel
ProjectPickerSpecialFilter
No description.
public Nullable<bool> ProjectPickerSpecialFilter { get; set; };
RoundDto
No description.
public RoundDto RoundDto { get; set; };
TimeRoundingInReports
No description.
public Nullable<bool> TimeRoundingInReports { get; set; };
TrackTimeDownToSecond
No description.
public Nullable<bool> TrackTimeDownToSecond { get; set; };
Methods
Equals(object obj)
Determines whether the specified object is equal to the current object.
public virtual bool Equals(object obj);
Parameters
The object to compare with the current object.
Returns
true if the specified object is equal to the current object; otherwise, false.
Finalize()
Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection.
[System.Runtime.Versioning.NonVersionableAttribute]
protected virtual void Finalize();
GetHashCode()
Serves as the default hash function.
public virtual int GetHashCode();
Returns
A hash code for the current object.
GetType()
Gets the Type of the current instance.
[System.Runtime.CompilerServices.NullableContextAttribute(1)]
public Type GetType();
Returns
The exact runtime type of the current instance.
MemberwiseClone()
Creates a shallow copy of the current Object.
[System.Runtime.CompilerServices.NullableContextAttribute(1)]
protected object MemberwiseClone();
Returns
A shallow copy of the current Object.
ToString()
Returns a string that represents the current object.
public virtual string ToString();
Returns
A string that represents the current object.


The API is still a draft and may change before the release of Play 2.3
@mandubian and I talked about this Architecture and general and the new validation API at pingconf in January. You may want to skip the first 30 minutes, and jump directly to the API. This article sums up what we said there, and explore the validation API a bit deeper.
Why validation ?
When you think about a web application, you're probably thinking of a bunch of web-pages, or single page app, or maybe even just a REST API serving json content. Truth is, a web application can be all of that, and even more, but from a more abstract point of view, the job of a webapp is really just to answer queries. Queries are formulated using HTTP requests, and answered using HTTP responses, and that's pretty much all there is to know. HTML, JSON, XML, or any other format are "representations" of the data. Your application may, and even probably should, support multiple representations, so the client can list the representation it supports, and the server can then decide which one is appropriate. That's content negotiation.
The client can request different representations, but the client can also send data to your application, and again you need to support different representations. Maybe the user is submitting a form ? You're going to receive URLFormEncoded values. Maybe this form is a bit dynamic, and the values submitted by an AJAX request in JSON? You may also offer a restful XML api. Or maybe data are sent using a proprietary protocol.
Of course, when an HTTP request comes in, one of the the first things you do is to de-serialize it's body to transform it to something more convenient than Bytes. For example an instance of a class. And once you've decided what to send back, you need to serialize that to the appropriate representation. So for each HTTP request, you'll parse, and eventually serialize data. But it's not that simple, the data coming in are not "safe". You must validate everything.
Data validation in Playframework
Play offers two different APIs for the Job. One dedicated to Form validation, and one to JSON marshaling and unmarshaling.
Form
The scala form API is really simple. The core of it is the Mapping
trait
The two important methods are bind
and unbind
. bind
maps forms data (Map[String, String]
) to a type T
. Of course this mapping can fail, for example if some fields are missing, or their values are invalid. So instead of just returning a T
, the method returns either all the validation errors, or a value of type T
.
Here's an example from play's documentation:
nonEmptyText
is just a built-in mapping, and optional
is just a function lifting a Mapping[A]
to a Mapping[Option[A]]
:
You build a new mapping by composing existing mappings together. UserData.apply
and UserData.unapply
are there to turn a successful mapping application into a UserData
class instance, and a UserData
class instance into form data.
Since all the hard work is done by Mapping
, you may be wondering what's the job of the Form
object now. The form object is just providing a bunch of helpers used by the templates to get error messages, pre-filled values, etc.
JSON
The Json API is based on 2 concepts: Reads
and Writes
. Obviously a Reads
is for parsing and a Write
is for serializing.
A Reads
is basically just a function from a JsValue to a type JsResult[A]
: Reads[A] = JsValue => JsResult[A]
and what is a JsResult
? well it can be either a success or a failure: JsResult[A] = JsSuccess(a: A) | JsFailure(errors: Seq[(JsPath,ValidationError)])
now compare:
to:
Yep, that's pretty much the same thing! But the Form api can also "serialize" classes instances to form values. Can we do that we json? Of course. We just have to use a Writes
!
And what's a Writes
?
Pretty much just a function from A
to JsValue
.
Now the Json API also has a class called Format
.
Now let's compare the two APIs side by side:
Using Format
, the previous example may be implemented this way:
So again, you compose Formats
to built new Formats
. Very similar to the Form api.
We've demonstrated that appart from the different syntax, the APIs are fairly similar.
Generalizing the JSON API
Now those two APIs are really nice, but having to learn two different API is really frustrating, especially when the only difference is the representation they handle. Having two API's also means that all your custom validation rules are duplicated. We knew play should come with a better solution, so in collaboration with @typesafe, and with the help of @mandubian and @sadache I was in charge of designing and implementing a new validation API.
The objectives are
- Support any representation through extensions.
- Easy migration from the JSON API.
- Built-in support for json and forms
- Compatibility with the template helpers
Introducing the new validation API
The new validation API is very similar to the Json API. Let's compare Reads
to it's generic counterpart: Rule
The obvious difference is the new I
type parameter. I is the input type, generally the type you're parsing. for example if you define a validation of JsValue
to Int
:
Instead of a JsResult
, the result of applying a Rule returns a VA[I, O]
, which is just a type alias:
Validation, just like JsSuccess from the Json API, has two possible implementations:
Just like the Json API, you can compose rules together:
Here you've noticed one of the key difference with the Json API. Since the API is not only dedicated to one representation, we need to tell the compiler what representation you want to work with using From[...]
. Since we enclosed the validation in a From[JsValue]
. We are now defining a Rule
validating a Json AST.
Note that we are also importing import play.api.data.mapping.json.Rules._
. That object contains all the built-in validation for the Json type.
Since the API also supports forms data, we can define a form validation very easily:
We just had to change the From type, and the import.
Differences with the json API
Even though the validation API is largely inspired from the JSON api, there are still a few key differences:
Type signature
The JSON API is always assuming you're going from, or to json. Since the new API is generic, you always have to be explicit about the I
and O
types.
This change has some impacts on the API use and possibilities. The most obvious is that the new API is a tiny bit more verbose than the json API.
But the generalization also impacts positively the API, and some things are easier to implement.
Sequential composition
Let's say you implemented 2 Rules (their implementations is let as exercise to the reader):
You may want to create a new Rule, validating that a given JsValue is a positive Int. All you have to do is to compose those rules sequentially. First you test the value is an Int using isInt
, then you test it's positive with min
. That's a very simple task with the API.
With the Json API, a Reads
always parses JsValue
. You just can't define a Reads validating an Int value. You're forced to implement a isPositiveInt: Read[Int]
directly. It makes it hard to reuse custom validations.
lazyness
When working on recursive types, you need to be extra careful with the json API, and use lazyRead to avoid stack overflow.
The new API is lazy by default, you don't have to use a "special" method anymore:
The new API also support the "type" notation with recursive types, while the json API didn't
Numbers
The new API built-in number validations are a bit "stricter" than their equivalents of the json API. For example if you use the json validation for Int
, and use it on JsNumber(3.14)
, it will succeed, but truncate the value to 3. The new validation would reject the same value.
Others
There's a bunch of other differences, must of them are just implementation details improvements. For example the OWrites
trait isn't needed anymore. But those changes have no impact on your code.
Playing with the new API
The API will be released with Play 2.3. You can already play with it, all you have to do is to checkout my branch: git clone https://github.com/jto/Play20.git && git checkout new_validation_api
and build it.
There documentation, samples, and tests where you should be able to find pretty much all you need to use it.
Pull request is here, feedbacks and contributions are welcome.


Christopher Adams
This map was created for me to learn more about my father, Chris Adams. He joined the Navy in 1984 and retired as Senior Chief in 2004. All of the yellow circles are places he has visited while being in the service. When hovering over the circles, you will see the location, what my father thought of the area, and when he was there (if the information is available). Certain circles will be bigger to show how many people from my family of three have been in that area. These circles will include what my mother, Teresa, and I thought about the location and what year it was when we first visited the area. The blue circles are places we lived as a family while my dad was enlisted in the Navy. Scroll down to begin.


Credit: Crislyn Felisilda for World Vision
Credit: Bsrt VErweij for the IFRC
Credit: IFRC
Credit: Adi Hutomo for World Vision
Credit: Kamila Stepien for Oxfam
Credit: CGTN Africa
Credit: Joe Klamar for AFP
John Traylor


{% extends "_base.html" %} {% block title %}Data Import{% endblock %} {% block content %}
Please download all these files first!


***********************************************************
Free Shipping & Returns On All Bras
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo12?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Pass It On! Share This Sale
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo7b?RAF_TRACK=&AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Send To A Friend
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo7c?RAF_TRACK=&AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Now Thru Sunday, 6.2
discover our secret Summer Sale
To Reveal Your Extra Savings Present Coupon In-Store
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo16d?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Or Enter Code 88054241 At Aerie.com
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo16f?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Get Coupon
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo4?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Shop Now
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo16h?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Excludes Undies & Clearance
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo16i?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Aerie Bras $19.99 & Up
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo11a?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
All Swim 25% Off
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo13a?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Shop Bras
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo11c?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Shop Swimsuits
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo13c?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Find Sizes 30A - 40DD At Aerie.com
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo16k?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Forward
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo7f?RAF_TRACK=&AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Become A Fan On Facebook
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo23?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Follow Us On Twitter
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo8?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Pinterest
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo25?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
shopkick
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo1?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Instagram
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo6?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Come Hang Out…Find A Store
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo20?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Mobile Alerts
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo24?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Download The Aerie App
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo18?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Earn Up To 40% Off
Sign Up For AEREWARDS
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo19?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
***********************************************************
Beginning January 14, 2013 at 6:00 am EST through
June 30, 2013 at 11:59 pm PDT receive automatic free shipping on all
orders with the purchase of one (1) or more Aerie bras. Offer is valid
on orders shipping to U.S. & Canadian addresses only. Offer not valid on
international orders. This offer is good for U.S. standard shipping
within 3 to 7 business days pending credit approval and authorization.
Orders to Canadian addresses will be shipped via Canada post within 6 to
10 business days to urban areas and 15 to 22 business days to rural
areas. Shopping bag must contain at least one (1) Aerie bra to qualify
for free shipping. This free shipping offer can be combined with other
discount offers. No discount code is required at the aerie.com shopping
bag. Not applicable toward previously purchased merchandise. All
deliveries are pending credit approval, merchandise availability,
delivery and weather conditions. Free shipping promotion and associated
terms & conditions subject to change at Aerie’s sole discretion.
Beginning January 14, 2013 at 6:00 am EST through June 30, 2013 at 11:59
pm PDT, and shipping to U.S. & Canadian addresses, receive free returns
on all Aerie bras. If you need to return an Aerie bra(s), simply attach
the free return label included with your order. It’s that easy. Offer
excludes other Aerie merchandise, AE and AEO Factory. Free return
promotion and associated terms & conditions subject to change at AE’s
sole discretion.
Beginning May 31, 2013 at 12:00 A.M. EDT through June 2, 2013 at 11:59
P.M. PDT receive 20%, or 25% Off when you enter the discount code at the
ae.com and aerie.com shopping bag or at US and Canada AE and Aerie
stores when presenting the printable coupon at checkout. Printable
coupon must be presented to cashier to identify the 20%, or 25% off
discount. Discount applied to merchandise only prior to sales tax and
shipping & handling. This coupon is not redeemable for cash, nor is it
applicable toward previously purchased merchandise. This discount offer
cannot be combined with other discount offers. Excludes AE Clearance,
Aerie Clearance, AE Factory Merchandise, Aerie Factory Merchandise,
Aerie undies, and merchandise from these brands: Adidas, Bass, BC, Bed
Stu, Birkenstock, Chronicle, Clarks, Creative Rec, DV, Eastland, GOLA,
Havaianas, Keds, Me Too, MIA, Minnetonka, New Balance, New Balance/PF
Flyers, Old Soles, Palladium, Pro Keds, Reebok, Saucony, Seychelles,
Sperry, Steve Madden, Sweet Shoes, Tailgate, Timberland, Tretorn, Volley
and college and pro merchandise. Discount and associated terms &
conditions subject to change at AE’s sole discretion.
Beginning May 30, 2013 at 6:00 am EDT through June 4, 2013 in stores and
online, get 25% off Aerie swim merchandise. This 25% off discount is
automatically applied once an Aerie swim item is added to the aerie.com
shopping bag. Discount applies to Aerie swim merchandise costs only, not
tax and shipping & handling costs. This discount is not redeemable for
cash, nor applicable toward previously purchased merchandise. Excludes
Aerie Clearance, AE merchandise, AE swim and merchandise from these
brands: Adidas, Bass, BC, Bed Stu, Birkenstock, Chronicle, Clarks,
Creative Rec, DV, Eastland, GOLA, Havaianas, Keds, Me Too, MIA,
Minnetonka, New Balance, New Balance/PF Flyers, Old Soles, Palladium,
Pro Keds, Reebok, Saucony, Seychelles, Sperry, Steve Madden, Sweet
Shoes, Tailgate, Timberland, Tretorn, Volley and college and pro
merchandise. Discount promotion and associated terms and conditions
subject to change at AE’s sole discretion.
© 2013 AEO MANAGEMENT CO. ALL RIGHTS RESERVED.
***********************************************************
Update Your Email Address:
<EMAIL_ADDRESS>Sign Up For Email:
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo17?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Privacy Policy:
http://e.ae.com/a/tBRqKzkB7u3j4B8y5U-NuZn6SbO/aeo15?AAP_FLAG=N&CUSTOMER_NBR=1235023277209
Add<EMAIL_ADDRESS>to your address book.
Our mailing address: 77 Hot Metal Street, Pittsburgh, PA 15203


--- layout: post title: Thomas Jefferson, Abolitionist date: '2010-01-13 23:25:39 -0700' mt_id: 1429 blog_id: 1 post_id: 1429 basename: thomas-jefferson-abolitionist categories: - essays ---
Next to Abraham Lincoln, Thomas Jefferson is perhaps the most revered man in American history. He was an inventor, statesman, architect, lawyer, farmer, political theorist, prolific writer, governor of Virginia, Secretary of State, Vice-President, and President. He was the conscience of the Revolution, never failing to expound on the natural and inherent rights of man and any infringement thereof. He helped to put Lockean political philosophy into an American context and, without this achievement, the American Revolution would never have happened. In his honor, monuments have been erected and cities have born his surname. So it has been until the twentieth century. We live in a peculiar era, one that seemingly detests greatness. Whenever a titan of American history is venerated, someone recalls an unsupported smear or any faults he may have had. For instance, when you speak of Christopher Columbus, someone indubitably brings up the diseases he brought with him or the fact that he was lost at sea a great deal of his voyage. Or: that Ulysses S. Grant was a drunkard. Or: George Washington was aristocratic. Or: Franklin Roosevelt was a womanizer who knew of the Pearl Harbor ambush, but did nothing about it. There are some who cannot practice hero-worship and believe that everyone is black at heart. To be sure, this is an ancient tradition, but it was never as insidious as it is today. Even Thomas Jefferson is not immune. If you even mention Thomas Jefferson's name, someone inevitably brings up his apparently hypocritical holding of over one hundred slaves.  Ayn Rand, a novelist-philosopher, described this whole phenomenon—the desire to topple heroes, to endow them with feet of clay—as "hatred of the good for being the good." My purpose, in writing this research paper, is just the opposite: I want to show that Thomas Jefferson, far from being the hypocrite his detractors allege, was actually a serious and ardent defender of the emancipation of slaves, i.e., an abolitionist. It is important for people to have role models—individuals whose virtues they may emulate. I believe Thomas Jefferson, the paragon of reason, is just such a person.
Upon his election to the Virginia House of Burgesses, Jefferson wasted little time in establishing himself as an opponent of slavery. Being a timid freshman, he persuaded Richard Bland to introduce a piece of legislation that he would second which would allow individual slave holders to free their slaves by will or affidavit, provided they would not become public charges. Prior to this, slave owners could only free their slaves by a petition to the governor and Privy Council and then only because of the slave's good service. The bill was rejected, but was passed in 1782.1 In that same year, Jefferson signed the Virginia House of Burgesses' recommendation to those who would form Associations of non-intercourse with England that "they will not import any slaves, or purchase any imported, after the first day of November next, until the said acts are repealed."2 In 1772, the House of Burgesses petitioned King George after a legislative act restricting slave importation had been struck down by the Royal Privy Council: "The importation of slaves into the colonies from the coast of Africa hath long been considered as a trade of great inhumanity, and under its present encouragement, we have too much reason to fear will endanger the very existence of your Majesty's American dominions…. Deeply impressed with these sentiments, we most humbly beseech your Majesty to remove all those restraints on your Majesty's governors of this colony, which inhibit their assenting to such laws as might check so very pernicious a commerce."3 Finally, in 1778, the Virginia legislature passed a measure abolishing the slave trade outright, in part through the efforts of Jefferson. However successful, eventually, were his efforts to end the slave trade, Jefferson was continually frustrated by the inaction of his fellow Virginians. After publicly supporting the rights of man and the evils of slavery, they were strangely silent when legislation was on the table.
Jefferson's stance in the House of Burgesses was but a prelude to the attacks on slavery contained in his original drafts of the Declaration of Independence. The Declaration of Independence that we are able to read is actually the product of three revisions: one by Benjamin Franklin and John Adams, one by the Committee of Five, and the final revision by the Committee of the Whole (the Continental Congress). By the final draft, this indictment of King George for his promotion of slavery had been stricken:
"he has waged cruel war against human nature itself, violating it's most sacred rights of life and liberty in the persons of distant people who never offended him, captivating & carrying them into slavery in another hemisphere, or to incur miserable death in their transportation thither. this piratical warfare, the opprobrium of infidel powers, is the warfare of the CHRISTIAN king of Great Britain. determined to keep open a market where MEN should be bought & sold, he has prostituted his negative for suppressing every legislative attempt to prohibit or to restrain this execrable commerce: and that this assemblage of horrors might want no fact of distinguished die, he is now exciting those very people to rise in arms among us, and to purchase that liberty of which he has deprived them, by murdering the people upon whom he also obtruded them; thus paying off former crimes committed against the liberties of one people, with crimes which he urges them to commit against the lives of another."4
One of Thomas Jefferson's most important and controversial contributions to the cause of anti-slavery was his involvement in the Ordinance of 1784. This historic piece of legislation, put forth in the Congress under the Articles of Confederation, was drafted to establish the procedures for statehood and territory status for the massive amounts of land ceded to the Continental Congress by the various states and Great Britain. Jefferson's proposal abolished all forms of slavery and involuntary servitude in these lands. This was a bold move, since the southern portions of this territory had not yet been ceded to the fledgling government at that time and there was no justification for such a move in the Articles of Confederation. Jefferson reasoned that the power to exclude slavery was a national concern, not a local one. Further frustrating Jefferson's efforts, this act failed enaction by one vote! The delegate from New Jersey was violently ill the day of the vote and thus could not affirm slavery's prohibition in the new territories. As Jefferson later wrote, "Thus we see the fate of millions unborn hanging on the tongue of one man, and heaven was silent in that awful moment."5 Jefferson's ideas, in diluted form, were later incorporated into the Northwest Ordinance of 1787.
As President during his second term, Thomas Jefferson introduced legislation tellingly entitled, "Act to prohibit the importation of Slaves into any port or place within the jurisdiction of the United States, from and after the first day of January, in the year of our Lord one thousand eight hundred and eight." This act made it a crime to transport any slave to an American territory. It did not prohibit slavery per se, but at least the act stopped its proliferation.
Thomas Jefferson believed that a political campaign was the best way to wage the abolitionist battle, but, as is shown by the campaign's results, it was not the best way. The political reforms he proposed were both widely denounced and largely ignored. The fact is, that when it came to his crucial documents, like the Declaration of Independence and the Ordinance of 1784, the slave owners saw to it that any anti-slavery language was removed from the final product. The only possible route to abolition was through a philosophical, and consequently, cultural change. Abraham Lincoln could never have emancipated the slaves without a strong, fervent abolitionist movement that permeated all sectors of the culture. Thomas Jefferson did not have that luxury. However, several of his published works formed a stepping stone for the later movement and that movement would not have existed without his (and others) early foundation-building.
A Summary View of the Rights of British America was a set of instructions for Virginia's delegates to the proposed first Congress of the Colonies. It was rejected, but published by Jefferson's admirers anonymously. In it, Jefferson accused King George of much the same charges he lobbed in the Declaration of Independence. He added another this way, "Thus preferring the immediate advantages of a few British corsairs, to the lasting interests of the American States, and to the rights of human nature, deeply wounded by this infamous practice." He furthers writes of the colonists attempts at cessation of the slave trade and the King's subsequent vetoes. This document established Jefferson as an eminent writer of philosophic discourse, setting him up for the authorship of the Declaration of Independence.
In Jefferson's Notes on Virginia, we find his most lengthy treatment of the subject of slavery. We also find his most startling, in the twentieth century context, views on the nature of blacks, whites, and their intermingling. Notes on Virginia was an address to a Frenchman, who had never set foot in Virginia and was curious about the Old Dominion. In it, he answered queries regarding Virginia's government, land, customs, educational system, towns, and wildlife. In Query XIV, on the administration of justice and Virginia's laws, Jefferson discusses the great reform of Virginia's laws taken on by the General Assembly following the Revolutionary War. One of the reform measures was the emancipation of all slaves born after passage of the act. The plan boldly asserts that the newly freed children should remain with their parents until a certain age and then be educated, at public expense, in a field appropriate (farming, science, or arts) to them until the age of eighteen or twenty-one, females and males respectively. At that time, Jefferson would have them shipped off to some destination most proper, fully supplied with all the essentials to found a new colony. Then, ships would be sent off to bring back an equal number of white settlers from some other land and induce them to settle in Virginia. This seems mighty odd, when compared with what we know and have seen of Jefferson. As usual, he continues on in answer to this seeming contradiction. He states that the blacks should not live among the whites because of the racial prejudices of the whites and the resentfulness bred by the injustices the blacks had suffered—it was not fair to the blacks. Given the context of the times, this was a wholly logical and reasonable prescription. After this fairly rational argument, Jefferson lapses into a polemic about the perils of miscegenation: "When freed, he is to be removed beyond the reach of mixture…"6 and "…their own judgment in favor of the whites, declared by their preference of them, as uniformly as is the preference of the Oran[g]utan for the black woman over those of his own species."7 Both of these statements paint a different picture than what the rest of my paper has portrayed, but I think that we must keep in mind the context: Jefferson was a Virginia plantation owner in the late eighteenth century. It was very common for white men to speculate about the nature of the blacks, since they had no scientific basis for anything to the contrary. While I would certainly deplore these views, I would have to say that Jefferson honestly knew no better.
The final aspect to consider is the charges of miscegenation with his slave-girl, Sally Hemings. First we must consider how the reports originally surfaced. In the Campaign of 1800, a young man by the name of James Callender, a Jeffersonian Democrat employed in the art of Federalist character assassination, dutifully served the factional needs of Jefferson the politician. He thought that he should be compensated for his efforts with an appointment to Postmaster of Richmond, Virginia. Jefferson refused. Soon after, Callender dug up evidence of mulatto children at Monticello and interviewed one of the Hemings slaves. He printed all this in a story in a Federalist newspaper. There it died, after a brief political life, until Fawn Brodie resurrected it in 1973 for her psychohistorical biography entitled Thomas Jefferson: An Intimate History. The story goes as follows: while Jefferson was in Paris, he sent for his daughter, Mary, who was accompanied on the trip by Sally Hemings, a young slave lass of twelve. Soon thereafter, he began making advances towards her. She wanted to remain in France and be free, but this Casanova would not have that. He promised her that any children they had would be freed upon adulthood. After leaving France, Jefferson used Sally Hemings as his chambermaid at Monticello. He continued being intimate with her even after it was revealed by James Callender. In fact, he risked his Presidency during both terms by having sexual relations with this pubescent. While this story has captured the fancy of the American public, it has thoroughly been discredited by all Jefferson and American History scholars as sheer folly. First, given Jefferson's strong and consistent views on miscegenation, it is highly unlikely that he sired children by Sally Hemings, much less had sexual intercourse with her. Second, none of the other residents of Monticello ever suspected a thing. He had three daughters living with him twenty-four hours a day, as well as frequent and numerous guests. That none of them ever suspected him of cavorting with Sally should mean a lot. Third, there is plentiful evidence that Jefferson's nephews, Peter and Samuel Carr, were wholly responsible for the mulatto children of Monticello. In fact, Ellen Randolph Coolidge, Jefferson's granddaughter who grew up at Monticello, called Samuel Carr "the most notorious good-natured Turk that ever was master of a black seraglio kept at other men's expense."8 It is absurd to contend that Thomas Jefferson would betray the moral teachings he prescribed for his relatives, friends, and himself, without any positive evidence for support. If we are to judge Jefferson, it must be on the basis of the standards he set for himself, the philosophy he explicitly advocated, and the actions he performed over the course of his lifetime. He was completely consistent in every facet of his being and because of that, we must dismiss any charges levied against him.
In researching this essay, I deliberately left out any reference to Thomas Jefferson's correspondence. In all, he penned over fifty thousand letters to all sorts of people. To read them all and comment on them would be beyond the scope of a research paper. It would require a book-length treatment, at least. I focused my research on primary documents, since these came from the mind of Jefferson himself. Where better to learn about the man behind the myth then to explore his most personal beliefs. However, I could not have done anything without the assistance of The Wolf by the Ears: Thomas Jefferson and Slavery by John Chester Miller. This book surveys the whole of Jefferson's life and deals with the conflicts Jefferson had between his racial and liberal views.
The brevity of a prospectus does not lend itself well to painting the full picture of Thomas Jefferson qua abolitionist, but the sketches I have drawn here should indicate the boundaries and the highlights. The Founding Fathers, insofar as they practiced what they preached, deserve the utmost respect and honor. The defamation of their characters by unsupported allegations hurled from the distance of two centuries is repulsive. Few people have no faults, but that is not why the Founding Fathers are important. They are to be lauded for their virtues, their achievements.
1 Miller, John Chester. The Wolf by the Ears: Thomas Jefferson and Slavery. Charlottesville, VA: University Press of Virginia, 1991. pp. 21-22.
2 DuBois, W.E.B. The Suppression of the African Slave-Trade to the United States of America: 1638-1870. New York: Schocken Books, 1896. p. 42.
3 Ibid., pp. 13-14.
4 Boyd, Julian. The Declaration of Independence: The Evolution of the Text as Shown in Facsimiles of Various Drafts by its Author, Thomas Jefferson. Princeton, NJ: Princeton University Press, 1945. pp. 20-21.
5 Miller, op cit., p. 28.
6 Jefferson, Thomas. The Life and Selected Writings of Thomas Jefferson. Eds. Adrienne Koch and William Peden. 2nd ed. New York: The Modern Library, 1993. p. 243.
7 Ibid., p. 238.
8 Miller, op cit., p. 170.


#define _GNU_SOURCE /* See feature_test_macros(7) */ #include <pthread.h> int pthread_setname_np(pthread_t thread, const char *name); int pthread_getname_np(pthread_t thread, char *name, size_t len);
Compile and link with -pthread.
The pthread_getname_np() function can be used to retrieve the name of the thread. The thread argument specifies the thread whose name is to be retrieved. The buffer name is used to return the thread name; len specifies the number of bytes available in name. The buffer specified by name should be at least 16 characters in length. The returned thread name in the output buffer will be null terminated.
The pthread_getname_np() function can fail with the following error:
If either of these functions fails to open /proc/self/task/[tid]/comm, then the call may fail with one of the errors described in open(2).
The program below demonstrates the use of pthread_setname_np() and pthread_getname_np().
The following shell session shows a sample run of the program:
$ ./a.out Created a thread. Default name is: a.out The thread name after setting it is THREADFOO. ^Z # Suspend the program [1]+ Stopped ./a.out $ ps H -C a.out -o 'pid tid cmd comm' PID TID CMD COMMAND 5990 5990 ./a.out a.out 5990 5991 ./a.out THREADFOO $ cat /proc/5990/task/5990/comm a.out $ cat /proc/5990/task/5991/comm THREADFOO
#define _GNU_SOURCE #include <pthread.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> #define NAMELEN 16 #define errExitEN(en, msg) \ do { errno = en; perror(msg); exit(EXIT_FAILURE); \ } while (0) static void * threadfunc(void *parm) { sleep(5); // allow main program to set the thread name return NULL; } int main(int argc, char **argv) { pthread_t thread; int rc; char thread_name[NAMELEN]; rc = pthread_create(&thread, NULL, threadfunc, NULL); if (rc != 0) errExitEN(rc, "pthread_create"); rc = pthread_getname_np(thread, thread_name, NAMELEN); if (rc != 0) errExitEN(rc, "pthread_getname_np"); printf("Created a thread. Default name is: %s\n", thread_name); rc = pthread_setname_np(thread, (argc > 1) ? argv[1] : "THREADFOO"); if (rc != 0) errExitEN(rc, "pthread_setname_np"); sleep(2); rc = pthread_getname_np(thread, thread_name, (argc > 2) ? atoi(argv[1]) : NAMELEN); if (rc != 0) errExitEN(rc, "pthread_getname_np"); printf("The thread name after setting it is %s.\n", thread_name); rc = pthread_join(thread, NULL); if (rc != 0) errExitEN(rc, "pthread_join"); printf("Done\n"); exit(EXIT_SUCCESS); }


{% extends 'base.html' %} {% block content %}
SocialRating is a system to help groups of people register and rate things. Log in to begin!


Automatic Updates from the App Store
Edit: iOS7 Now does this.
The App Store allows distribution of applications to anyone running Apple hardware. The variety of applications available is impressive.
Developers benefit from the App Store by leveraging the distribution platform Apple has created. With a simple approval process a developer can distribute their software to millions of people easily.
As impressive as the App Store is for distribution, iDevice applications have the same problem as traditional software: How do you get users to update?
Software is delivered quickly and the lean movement has emphasized the benefit of fast innovation and iteration. The ability for a developer - or business - to imagine and implement a feature in the same day is powerful. Lean principles strongly emphasize Software-as-a-Service (SaaS) models and the largest benefit of SaaS is the ability to deliver software updates to users without their approval. Although SaaS is a double edged sword, it is beneficial in the long run because the business controls software distribution, not the user.
Although businesses that distribute applications in the App Store may have SaaS business models, their Apple app isn't a SaaS product. It is a traditional piece of software. To update you need approval from the user.
I have about 100 applications on my iPad. Every week I have 8 to 12 updates requiring my approval. Previously, Apple required my authentication (password) and authorization (clicking the update button) to update my applications. Apple has removed the authentication step, but the authorization step is still required.
 Users run old software and have no incentive to update. StatCounter estimates the number of people running Windows XP is 23.8%. So 1-in-4 computers on the Internet are running an operating system that is 11 years old.
Operating systems aren't the only problem. End users are notorious for not updating any software.
Most browsers are vulnerable to a much broader array of well-known Java holes, with over 75% using versions that are at least six months old, nearly two-thirds being more than a year out of date, and more than 50% of browsers are greater than two years behind the times with respect to Java vulnerabilities.
Humans aren't inclined to click the update button. Software should just do it for them.
Apple will suffer the same fate of lazy updating as Java if they don't change the model to an automatic distribution rather than an opt-in.
I don't know why updating still requires user approval. I haven't seen an update that requires an additional charge. Can't Apple poll for a Wifi connection and update the apps automatically?


The parasite core resides in the angular core
module which is composed out of several angular modules:
core.dev
core.applications
core.plugins
core.navigation
core.search
core.url
core.login
Theses modules both contain API which should be used by applications developer, as well as logic executed automatically by the parasite framework which makes sure the applications run as expected.


--- layout: post status: publish published: true title: BDD with Scenario Code DSL – Sometimes you don’t need a tool author: display_name: Fabio Pereira login: admin email<EMAIL_ADDRESS>url: http://fabiopereira.me author_login: admin author_email<EMAIL_ADDRESS>author_url: http://fabiopereira.me wordpress_id: 302 wordpress_url: http://fabiopereira.me/blog/2010/05/27/bdd-with-scenario-code-dsl-sometimes-you-dont-need-a-tool/ date: '2010-05-28 23:10:30 +1000' date_gmt: '2010-05-29 06:10:30 +1000' categories: - Technical tags: - Java - Code - TDD - BDD comments: - id: 18698 author: Dorsey Boyl author_email<EMAIL_ADDRESS>author_url: http://containerdienst-web.de date: '2011-10-20 02:29:06 +0' date_gmt: '2011-10-20 09:29:06 +0' content: I rattling pleased to find this web site on bing, just what I was searching for :D as well saved to fav. - id: 19599 author: Ashutosh author_email<EMAIL_ADDRESS>author_url: '' date: '2011-11-12 14:42:34 +0' date_gmt: '2011-11-12 21:42:34 +0' content: "Hi,\r\n\r\nThanks for the nice post. But where is the DSL class?\r\n\r\nAshutosh" - id: 183294 author: MofSeek author_email<EMAIL_ADDRESS>author_url: http://www.netvibes.com/xanax2mg date: '2015-07-14 14:51:17 +1000' date_gmt: '2015-07-14 21:51:17 +1000' content: Cocaine Interaction Snorting Xanax Xanax Autoimmune . Xanax Pink Football Xanax 93 833 Pics Pills Snorting Xanax Vicodin Red Wine Xanax Ambien Xanax And Acid Reflux Esophageal Xanax And Gerd . Xanax Pub Strength Oral Use Xanax Alprazolam Recreational Use Xanax For Fainting order xanax online. Xanax Versus Ativan Panic Attack How Do I Get Prescribed To Xanax Anxiety Attacks Xanax Shakes Anxiety Disorder Ssri Or Xanax . ---
My previous project was distributed across cities and we had almost 30 people involved. Communication and the understanding of what needs to be done are crucial for the success of the project.
One of the big challenges was to make sure that the business and the technical people shared the same domain Ubiquitous Language. To ensure that, we started using JBehave to define the acceptance criteria of the stories. Half way through, there was a big change which required many changes in the scenarios…
Some issues that we found:
The solution was to abstract our own code with a DSL layer and use it for documentation purposes. Initially we called this JMisbehave because the initial intent was to generate a read only version of the code that we could show to non-technical people and agree on acceptance criteria, as well as keep an executable documentation of the application. Code Humaniser was another suggested name…
Eventually we realised that the code itself was sufficient and we ended up not using the code that generated the read only version of it. Nevertheless it’s still useful in many environments. Many times we showed the code to non-technical people and they were quite delighted to see how straight forward it was to read and to understand. Moreover, it was expressing the Language of the Business. An interesting thing is that our colleague Dan North, who wrote JBehave, came to our project one day to facilitate a retrospective and we told him the whole story. He quite liked what we had done and was quite complimentary about the fact that we had understood the concept of DDD and BDD, and the fact that it’s not about the tools. It was actually his recommendation to use the_underscore_notation instead of theCamelCaseNotation, we had some discussions about that, but that will be described on another post.
Behind the Scenes - The Scenario Code DSL Implementation
James Barritt saw another post of mine with some of our Scenarios Code DSL examples and suggested that I wrote a post explaining what was happening “behind the scenes”. Here is a high level diagram of how we separated the layers:
Some code:
Scenarios Code
public class Location_Scenario extends BaseScenario {
public void should_default_risk_address_when_insured_address_is_valid_for_risk() {
given(the_broker. has_started_a_home_quote());
when(the_broker. selects_a_valid_location_for_risk_address());
then(the_policy.has_home_risk_location_and_risk_address_as_same());
}
}public class BaseScenario {
protected Broker the_broker;
protected Policy the_policy;
(...)protected
T given(T dsl) {
return dsl;
}protected
T when(T dsl) {
return dsl;
}protected
T then(T dsl) {
return dsl;
}protected
T and(T dsl) {
return dsl;
}}
DSL Code
public class Broker extends DSL {
public FieldEnterer enters;
public Policy the_policy;public Broker blah() {
// call implemenation
return this;
}
}public class Policy extends DSL {
public FieldEnterer enters;
(...)
public Policy blah() {
// call implemenation
return this;
}
}
This was a project with lots of people coming in and out all the time and every time someone new would join, the time taken to understand the code and relate it to the business terminology was extremely reduced by the way our tests were written.
You can do the same on your project, write your tests using the language of the business.


Refine
8
total results
Ripped Skinny Jeans
Ripped Skinny Jeans
$24.99
Ripped Skinny Jeans
Ripped Skinny Jeans
Ripped Skinny Jeans
$24.99
Ripped Skinny Jeans
Ripped Skinny Jeans
Ripped Skinny Jeans
$24.99
Ripped Skinny Jeans
Ripped Skinny Jeans
Ripped Skinny Jeans
$24.99
Ripped Skinny Jeans
1
1


Galveston County
2017
Total Felonies Filed = 2978
Total Felony Dispositions = 2894
Total Felony Dispositions = 2894
Total Misdemeanors Filed = 6214
Total Misdemeanor Dispositions = 7183
Total Misdemeanor Dispositions = 7183
2016
Total Felonies Filed = 2502
Total Felony Dispositions = 2830
Total Felony Dispositions = 2830
Total Misdemeanors Filed = 7821
Total Misdemeanor Dispositions = 8437
Total Misdemeanor Dispositions = 8437
2015
Total Felonies Filed = 2795
Total Felony Dispositions = 3118
Total Felony Dispositions = 3118
Total Misdemeanors Filed = 7549
Total Misdemeanor Dispositions = 9111
Total Misdemeanor Dispositions = 9111
2014
Total Felonies Filed = 3315
Total Felony Dispositions = 3266
Total Felony Dispositions = 3266
Total Misdemeanors Filed = 8716
Total Misdemeanor Dispositions = 9831
Total Misdemeanor Dispositions = 9831
2013
Total Felonies Filed = 2978
Total Felony Dispositions = 3265
Total Felony Dispositions = 3265
Total Misdemeanors Filed = 8536
Total Misdemeanor Dispositions = 10454
Total Misdemeanor Dispositions = 10454
2012
Total Felonies Filed = 2777
Total Felony Dispositions = 3047
Total Felony Dispositions = 3047
Total Misdemeanors Filed = 8488
Total Misdemeanor Dispositions = 9890
Total Misdemeanor Dispositions = 9890
2011
Total Felonies Filed = 3599
Total Felony Dispositions = 4032
Total Felony Dispositions = 4032
Total Misdemeanors Filed = 8952
Total Misdemeanor Dispositions = 10785
Total Misdemeanor Dispositions = 10785


Note:
A div
with class toc
is automatically converted to a TOC
Markdown tag
Some more text
A
blockquote
with some further strong and em'd text to test our capabilities.
Some text with embedded link and more text, and even some images:
Footnote support is based on the footnotes generated by the
Python footnote extension.
Footnotes are converted to Markdown but there is no specific editing sytnax for adding them.
To add footnotes, simply create a footnote reference in your text - e.g. [^1]
and
then at the bottom of your document define this in another paragraph block. [^1]: a footnote
.
These will not be rendered as footnotes by demarcate.js, instead the Markdown will be preserved and
your server should handle this rendering. Note that as long as footnotes have the correct tags
(e.g. footnote references are in a sup
tag with a

wrapping your ordered list of footnotes, then Markdown footnotes can be generated from HTML.
Note, currently footnotes text can't be edited as it strips away the footnote references.
Tables cells can be edited, however new rows cannot be added Only tables with
a top row header and colspan
and rowspan
of 1 are supported.
| Item 1 - various lengths | Item 2 |
|---|---|
| Item A1 | But not currently colspans |
| Item B1 | Item B2 |
| Item C1 | (or rowspans) |
Markdown is returned but editing not currently possible
// select all "div" elements
 $("div") // select all "div" elements with class "myclass" e.g
 $("div.myclass") // select any element with id "myid" (e.g.
 $("#myid") // select only the "div" element with the id "myid" - i.e. // will ignore
 $("div#myid")
Footnotes are currently managed by adding footnote Markdown inside paragraph blocks ^


Co-op installs two car fast-chargers
CHARGING points for electric vehicles have been installed at a Jersey supermarket for the first time.
A pair of 22-kilowatt fast-chargers, each with capacity for two vehicles, are available for shoppers at the Channel Islands Co-operative Society’s Grand Marché store in St Peter.
The Co-op has worked with Jersey Energy – a sister company of Jersey Electricity – to install the chargers, which are to be operated with a contactless card or mobile app.
There are now 29 public charging points in the Island, with further chargers due to be brought in by the end of the year at En Route in St Peter and Grand Marché in St Helier.
Jim Plumley, Co-op chief development officer, said: ‘We welcome the rise in electric vehicles in Jersey and want to help by offering our customers charge points. This is one of a number of steps we are making to reduce our impact on the environment.
‘Most people with electric cars would probably charge them at home – but we are hoping to offer Islanders a convenient alternative when they do their weekly shop.’
A spokesman for Jersey Electricity said that 30 minutes’ charging would cost £2.31 at daytime electricity rates and top up the battery of a typical electric vehicle by approximately 50%.
Jersey Electricity chief executive Chris Ambler said: ‘We are delighted to work with the Co-op, which has always been a leader in sustainable business practices. This installation is another step on the road to extending our network to 75 by the end of 2020, as we seek to inspire a zero-carbon Jersey and actively support the government’s 2030 carbon neutrality ambitions.’


To change image
- drag an image file from your computer and drop it in the yellow square (will appear when you drag a file).
- paste image directly from clipboard by cmd-v / ctrl-v.
- paste an URL to an image by cmd/ctrl-v.
Right-hand side controls
Use any controls freely to adjust your image to whatever you need in the situation at hand.
Grid provides some additional guidelines for positioning the projection on your canvas. Despite how the grid appears on browser screen, all the lines of the grid should be exactly straight horizontally and vertically on your canvas. All circles should also be round (not oval). This, of course, assuming you don't specifically want to paint a distorted or rotated image.
Threshold slider is built combining contrast, brightness and grayscale. Use either threshold slider or contrast, brightness and grayscale settings separately.
Server-side filters (details, posterize, vectorize, outlines) can not be used simultaneously together.
Opacity is the base opacity of the image on screen. Use either opacity slider or opacity range slider.
Opacity range are two opacity values between which you want to work on. When animation is paused, you may switch between these two opacity values by clicking anywhere on page or hitting space bar. This way you can easily switch between the two opacities while painting when necessary. When the fading animation is on, it will fade between these two opacity values according to your fade durations-
Fade durations are the times in seconds that it takes for different stages of the fading animation. Fade time is used also when you use mouse clicks or spacebar to switch opacity (within opacity range) while animation is paused.


Today, we have a small set of release to update you with. We're gearing up for some big releases next. Stay tuned for more...
Minor Releases
Minor updates include new features, updates to bugs and performance improvements.
aurelia-webpack-plugin 2.0.0-rc.3
Features
- support Webpack 3 ModuleConcatenationPlugin
- support resources inside @inlineView
Bug Fixes
- recognize router-view attributes
- better control over entry sequence
- chunk not supported by ModuleDependenciesPlugin
- no default entrypoint with DLLPlugin
- use browser-pal for electron-renderer (#100)
aurelia-ux 0.3.0
Features
- expose style engine ( f623c70 ), closes #73
- add ux-list control (#82) ( ee64238 )
- add unchecked value ( 88505d9 ), closes #69
Bug Fixes
Patch Releases
Patch updates include only fixes to bugs and performance improvements.
aurelia-i18n 1.6.2
Bug Fixes
- Don't try to parse translation json if already parsed.
aurelia-protractor-plugin 1.0.5
Features
- add i18n locators
Bug Fixes
- loadAndWaitForAureliaPage wasn't looking for aurelia object
- re-setup after every test in case restartBrowserBetweenTests is enabled
- update @types/selenium-webdriver


Home
Sign In
Sign Up
Sign Up
Name*
Email Address*
Password*
Confirm Password
Join for Newsletter
Secret Question*
What is your mothers maiden name?
What is the name of the street you first lived?
Answer*
Phone*
Register


A PE file is mostly composed out of headers and sections. Headers describe the structure of the file.
In order to load and run an EXE or DLL, the operating system must first look into its headers. Needles to say,
all headers are placed at the begining of the file. Sections contain mostly information about what the program does, and how it does it.
Here is a really nice image describing the PE structure in detail.
The best way to understand it is to write a program which can parse a PE file.
To keep things simple, let's stick to 32 bits, althogh the 64 bit version is very similar.
The readpe program is going to take the name of an EXE as a parameter and
dump all sections, each in a separate file. In order not to clutter this page with code,
I'll be posting here just the key parts of it. The complete source code can be found here.
So, let's start by reading the file and mapping it into the address space.
/* Open a handle to the PE file. */ HANDLE file_handle = CreateFileA( (LPCSTR) argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); /* Create a memory mapping object for the file. */ HANDLE file_mapping = CreateFileMapping( file_handle, NULL, PAGE_READONLY, 0, 0, NULL ); /* Map the file into the address space. */ HANDLE file_start = MapViewOfFile( file_mapping, FILE_MAP_READ, 0, 0, 0 );
file_start is now a pointer to the first byte of the file in memory. From here I can go step by step and dump parts of the file.
DOS Header
The very first thing one can see in this structure is the DOS Header (highlighted in blue). Following this header there is a little DOS program called the DOS stub, which nowadays may seem quite pointless, but in the past it used to give an informative error message when someone tried to run the program in DOS mode. The contents of this header (including the DOS stub) should look something like this:
The full structure of the DOS Header can be found here. There are two particular fields I would like to highlight bellow:
- e_magic
- The magic number of the DOS Header, this is really the very first thing one see in the file. It should always be "MZ".
- e_lfanew
- An offset relative to the beginning of the file, pointing to the beginning of the PE Header.
/* Dump the DOS Header. */ PIMAGE_DOS_HEADER dos_header = (PIMAGE_DOS_HEADER)file_start; dump("dos_header.txt", dos_header, sizeof(IMAGE_DOS_HEADER));
The dump function basically dumps sizeof(IMAGE_DOS_HEADER) bytes, starting from the address dos_header, into the file dos_header.txt.
To obtain a pointer to the PE Header, jump e_lfanew bytes from the beginning of the file.
PIMAGE_NT_HEADERS32 pe_header = (PIMAGE_NT_HEADERS32) ((uint8_t *) file_start + dos_header->e_lfanew);
PE Header
This header is larger in size. Fortunately, someone already defined the IMAGE_NT_HEADERS structure.
The first thing is a 4 byte signature, "PE\0\0". The PE header can be divided in two sub headers:
the File Header and the Optional Header.
Following the PE signature, there are the following structures: IMAGE_FILE_HEADER,
IMAGE_OPTIONAL_HEADER and finally an array of
IMAGE_SECTION_HEADER structures.
File Header
The File Header, also called the COFF Header (highlighted in orange), appears to be much shorter than the Optional Header
Out of all fields contained in it, I find two of them particularly interesting:
- Machine
- Indicates on what CPU the program should run. In the case above, that would be an i386.
- NumberOfSections
- The number of sections contained in the file. Sections are placed right after the headers.
/* Dump the File Header. */ dump("file_header.txt", &(pe_header->FileHeader), sizeof(pe_header->FileHeader));
Optional Header
Despite its name, the Optional Header is not optional.
It starts with a signature, followed by the major & minor linker version. Most of the fields in here are pretty self explanatory. I would like to highlight a few of them:
- ImageBase
- This is the address at which the linker assumes that the file is going to be mapped in memory. Usually, this field needs to be patched at runtime. On Win32, the default base address for executables is 0x400000.
- SectionAlignment
- When the file is mapped into memory, each section starts at an address that is a multiple of this value.
- SizeOfHeaders
- The total size of all headers + the size of the Sections Table. Basically, a relative offset to the starting address of the first section.
- DataDirectory
-
This is an array of IMAGE_DATA_DIRECTORY structures.
The number of entries in this array is stored into the NumberOfRvaAndSizes at the bottom of the Optional Header, right before the DataDirectory.
It can be used to localize various parts of the executable, such as the Export and Import Tables.
/* Dump the optional header. */ dump("optional_header.txt", &(pe_header->OptionalHeader), sizeof(pe_header->OptionalHeader));
Sections Table
This table consists of section headers, each holding information about a section of the image.
The number of entries in the Sections Table is given by the NumberOfSections field from the File Header.
Each entry is an IMAGE_SECTION_HEADER structure.
This structure contains the information needed to dump the contents of each section.
- Name
- An 8 byte, 0 padded array, containing the section name (for example .text, .rdata, .bss, .data). In case the name has exactly 8 bytes length, it is not null terminated.
- VirtualAddress
- When the loader maps the section to memory, it should map it to this address relative to the ImageBase. This is used during program execution.
- SizeOfRawData
- The size of the section in the PE file. It must be a multiple of FileAlignment.
- PointerToRawData
- The offset of the section in the PE file, relative to the beginning of the file. It must be aligned on a multiple of FileAlignment.
That's all the information one needs to dump all the sections of a PE.
/* Dump all sections. */ PIMAGE_SECTION_HEADER section_header = (PIMAGE_SECTION_HEADER)((uint8_t *) pe_header + sizeof(IMAGE_NT_HEADERS32)); for (int index = 0; index < pe_header->FileHeader.NumberOfSections; ++index) { char name[IMAGE_SIZEOF_SHORT_NAME + 1] = { 0 }; strncpy(name, (char *)section_header[index].Name, IMAGE_SIZEOF_SHORT_NAME); dump( name, (uint8_t *)file_start + section_header[index].PointerToRawData, section_header[index].SizeOfRawData ); }
This is the end of the readpe program. Let's run it over itself and see the output:
All files prefixed with a dot are dumped sections. They're binary files, containing either code or data.
Let's briefly describe of a few common sections:
- .text
- Contains code that gets executed. Usually the AddressOfEntryPoint field from the Optional Header points here.
- .data
- This section contains data that gets initialized at compile time, such as global variables.
- .rdata
- Similar to the .data section, but contains read only data.
- .bss
- Uninitialized global and static variables.
- .idata
- Contains information about DLL imports.
- .reloc
- Usually, the address at which an executable is loaded is unknown at compile time. In order fix the issue of position dependent code, this section contains a table of pointers to absolute addresses, called the Relocation Table. If the program is loaded at an address other than the expected one, all absolute addresses in this table are patched.
Every section can have some flags set, defined in its header. These flags give information about the section's purpose and content. They indicate whether or not the section contains executable code, if it can be discarded and so on. Flags also indicate permissions: executable, readable or writable.
And that's about it, the PE format in a nutshell! From here on, the rabbit hole goes pretty deep.


Palsu Industries
Home
|
Product information
|
Technical support
|
Corporate information
Gravity 2.0
"
Cazú
" by
Eleztriko
-
Own work
. Licensed under
CC BY-SA 3.0
via
Wikimedia Commons
.


| DayTrader Configuration | DayTrader | ||||
|
|
|||||
| The current DayTrader runtime configuration is
detailed below. View and optionally update run-time parameters.
NOTE: Parameters settings will return to default on server restart. To make configuration settings persistent across application server stop/starts, edit the servlet init parameters for each DayTrader servlet. This is described in the DayTrader FAQ |
|
| Run-Time Mode
|
Run Time Mode determines server implementation of the TradeServices to use in the DayTrader application Enterprise Java Beans including Session, Entity and Message beans or Direct mode which uses direct database and JMS access. See DayTrader FAQ for details. |
| JPA Layer
|
JPA Layer determines what kind of JPA Implementation Daytrader EJB classes use. Typically, Apache Geronimo uses OpenJPA, and RedHat JBoss 5 uses Hibernate. |
| Order-Processing Mode
|
Order Processing Mode determines the mode for completing stock purchase and sell operations. Synchronous mode completes the order immediately. Asychronous_2-Phase performs a 2-phase commit over the EJB Entity/DB and MDB/JMS transactions. See DayTrader FAQ for details. |
| Scenario Workload Mix
|
This setting determines the runtime workload mix of DayTrader operations when driving the benchmark through TradeScenarioServlet. See DayTrader FAQ for details. |
| WebInterface
|
This setting determines the Web interface technology used, JSPs or JSPs with static images and GIFs. |
| Miscellaneous Settings | |
| DayTrader Max Users Trade Max Quotes |
By default the DayTrader database is populated with 200 users
(uid:0 - uid:199) and 400 quotes (s:0 - s:399). |
| Market Summary Interval |
< 0 Do not perform Market Summary Operations. = 0 Perform market Summary on every request. > 0 number of seconds between Market Summary Operations |
| Primitive Iteration |
By default the DayTrader primitives are execute one operation per web request. Change this value to repeat operations multiple times per web request. |
|
Publish quote price changes to a JMS topic. |
|
|
Enable long run support by disabling the show all orders query performed on the Account page. |
|
|
|
Enable DayTrader processing trace messages |
| |
|
|
|
| DayTrader Configuration | DayTrader |