library(tidyverse)
library(cowplot)
library(broom)
library(modelr)
library(viridis)
library(lubridate)
library(hms)
library(knitr)
library(kableExtra)
library(ggridges)
library(brms)
library(tidybayes)
library(mice)
knitr::opts_chunk$set(tidy.opts=list(width.cutoff=60),tidy=TRUE, echo = TRUE, message=FALSE, warning=FALSE, fig.align="center")
source("../../../../IDA/tools/plotting_tools.R")
theme_set(theme_1())
This notebook performs bayesian parameter estimation using brms
on data that I acquired and processed in this notebook. Essentially I quantified extracellular DNA in WT P. aeruginosa colony biofilms using the dye TOTO-1. I measured the fluorescence in replicate suspensions of replicate colonies and then calculated DNA content with a calibration curve of TOTO with calf thymus DNA (in vitro).
This dataset is inherently hierarchical because we have one hyperparameter that we are interested in - the eDNA concentration in WT colony biofilms, with 6 biological replicates (separate colony biofilms), and each biological replicate was measured in technical triplicate. It is quite reasonable to think that variability occurs at each level, because the biofilm suspension is not very homogeneous (so each technical replicate probably varies), and naturally there’s biological variability as well.
Let’s first take a look at the dataset:
wt_preds <- read_csv("07_23_19_wt_TOTO_calCurve_estimates.csv")
wt_preds %>% kable() %>% kable_styling(bootstrap_options = "condensed") %>%
scroll_box(width = "100%", height = "400px")
| Wavelength | Well | FluorInt | Condition | Colony_number | Replicate | pred | eDNA_ug_mL | eDNA_dsDNA_uM |
|---|---|---|---|---|---|---|---|---|
| 535 | A2 | 22868 | Control | NA | NA | 1.5861354 | 84.593889 | 253.781666 |
| 535 | D1 | 217 | noDye | 1 | 1 | -0.0197467 | -1.053155 | -3.159467 |
| 535 | D2 | 168 | noDye | 2 | 1 | -0.0232206 | -1.238432 | -3.715297 |
| 535 | D3 | 157 | noDye | 3 | 1 | -0.0240005 | -1.280025 | -3.840075 |
| 535 | D4 | 173 | noDye | 4 | 1 | -0.0228661 | -1.219526 | -3.658580 |
| 535 | D5 | 159 | noDye | 5 | 1 | -0.0238587 | -1.272463 | -3.817388 |
| 535 | D6 | 152 | noDye | 6 | 1 | -0.0243550 | -1.298931 | -3.896793 |
| 535 | E1 | 10665 | TOTO | 1 | 1 | 0.7209825 | 38.452399 | 115.357197 |
| 535 | E2 | 9108 | TOTO | 2 | 1 | 0.6105963 | 32.565134 | 97.695401 |
| 535 | E3 | 6415 | TOTO | 3 | 1 | 0.4196713 | 22.382471 | 67.147414 |
| 535 | E4 | 7289 | TOTO | 4 | 1 | 0.4816351 | 25.687205 | 77.061614 |
| 535 | E5 | 10798 | TOTO | 5 | 1 | 0.7304118 | 38.955293 | 116.865880 |
| 535 | E6 | 6794 | TOTO | 6 | 1 | 0.4465412 | 23.815531 | 71.446592 |
| 535 | F1 | 12517 | TOTO | 1 | 2 | 0.8522832 | 45.455107 | 136.365320 |
| 535 | F2 | 6882 | TOTO | 2 | 2 | 0.4527801 | 24.148273 | 72.444818 |
| 535 | F3 | 9006 | TOTO | 3 | 2 | 0.6033648 | 32.179456 | 96.538366 |
| 535 | F4 | 6559 | TOTO | 4 | 2 | 0.4298805 | 22.926958 | 68.780874 |
| 535 | F5 | 8397 | TOTO | 5 | 2 | 0.5601887 | 29.876729 | 89.630188 |
| 535 | F6 | 6527 | TOTO | 6 | 2 | 0.4276118 | 22.805961 | 68.417883 |
| 535 | G1 | 13607 | TOTO | 1 | 3 | 0.9295607 | 49.576571 | 148.729711 |
| 535 | G2 | 8622 | TOTO | 2 | 3 | 0.5761404 | 30.727490 | 92.182471 |
| 535 | G3 | 7151 | TOTO | 3 | 3 | 0.4718513 | 25.165405 | 75.496214 |
| 535 | G4 | 8291 | TOTO | 4 | 3 | 0.5526736 | 29.475926 | 88.427779 |
| 535 | G5 | 7998 | TOTO | 5 | 3 | 0.5319009 | 28.368047 | 85.104140 |
| 535 | G6 | 8059 | TOTO | 6 | 3 | 0.5362256 | 28.598697 | 85.796092 |
So you can see that we have the raw data from the wells (from the platereader), as well as a prediction of the well concentration, and biofilm concentration in uM (eDNA_dsDNA_uM). Look back at the other notebook to see how this was done. Anyway, what we have is a dataset that looks like this:
ggplot(wt_preds, aes(x = Colony_number, y = eDNA_dsDNA_uM, shape = Condition)) +
geom_point()
You can see that the wells incubated with dye show an obvious signal. There is heterogeneity among the different colonies (biological replicates), and the technical replicates. Let’s see if we can use some hierarchical models to accurately calculate an estimate for the eDNA content of the “hyper-colony”!
Ok, so for this first model I wrote out the following in brms syntax: eDNA_dsDNA_uM ~ 1 + (1 | Colony_number / Replicate)
You’ll see as we work through the other models, but briefly this means estimate the intercept (e.g. the value) for this eDNA variable (eDNA_dsDNA_uM ~ 1
), but group this intercept into a two level hierarchy with colony and then replicate (+ (1 | Colony_number / Replicate)
). You can see that we only have to set the prior for the intercept hyperparameter \(\text{Normal}(100, 30)\). This model takes a while to run, but we’ll cache the results in a file. With multiple levels of hierarchy it can also be hard to estimate, so I’ve ramped up the iterations to 10,000 and adapt delta to 0.95.
wt_brm <- brm(eDNA_dsDNA_uM ~ 1 + (1 | Colony_number/Replicate),
data = wt_preds %>% filter(Condition == "TOTO"), prior = prior(normal(100,
30), class = Intercept), sample_prior = T, chains = 4,
cores = 2, iter = 10000, control = list(adapt_delta = 0.95),
thin = 5, inits = "random", file = "wt_brm_model_3")
summary(wt_brm)
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: eDNA_dsDNA_uM ~ 1 + (1 | Colony_number/Replicate)
## Data: wt_preds %>% filter(Condition == "TOTO") (Number of observations: 18)
## Samples: 4 chains, each with iter = 10000; warmup = 5000; thin = 5;
## total post-warmup samples = 4000
##
## Group-Level Effects:
## ~Colony_number (Number of levels: 6)
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## sd(Intercept) 20.49 8.68 6.45 41.55 3378 1.00
##
## ~Colony_number:Replicate (Number of levels: 18)
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## sd(Intercept) 9.89 5.74 0.53 21.82 1339 1.00
##
## Population-Level Effects:
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## Intercept 92.81 9.21 74.44 111.55 3680 1.00
##
## Family Specific Parameters:
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## sigma 11.08 5.37 2.05 22.10 861 1.00
##
## Samples were drawn using sampling(NUTS). For each parameter, Eff.Sample
## is a crude measure of effective sample size, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
With these settings it seems like we get nice convergence and reasonable parameter estimates. Here’s the chains and posteriors:
plot(wt_brm, N = 4, ask = F)
All the chains seem to be well mixed. b_Intercept
is the hyperparameter for the intercept and the posterior looks reasonably good. The sd and sigma variables have some weirder distributions, but I think that’s to be expected for this dataset with relatively few datapoints.
prior_summary(wt_brm) %>% kable() %>% kable_styling()
| prior | class | coef | group | resp | dpar | nlpar | bound |
|---|---|---|---|---|---|---|---|
| normal(100, 30) | Intercept | ||||||
| student_t(3, 0, 19) | sd | ||||||
| sd | Colony_number | ||||||
| sd | Intercept | Colony_number | |||||
| sd | Colony_number:Replicate | ||||||
| sd | Intercept | Colony_number:Replicate | |||||
| student_t(3, 0, 19) | sigma |
Just for clarity, these were the prior distributions that brms assumed for this model. So you can see there’s the hyperprior I supplied, then it’s a little harder to undertand. There seems to be a std.dev prior from the hyperparameter, then at the colony level there’s a sd for the sd and the intercept and same thing for each replicate?
I still don’t fully understand what brms is doing here, but also notice that there’s a sigma at bottom. My understanding is that brms has assumed that this is a gaussian process and that sigma should connect any group level parameters to the actual datapoints. Therefore, I believe, this model actually has too many levels and that each datapoint is accidentally in its own group, which is not correct.
We’ll try a simpler version of this model next.
Here’s what the hierarchical estimates look like plotted:
# ggplot(data = posterior_samples(wt_brm)) +
# geom_density(aes(x = b_Intercept))
# as_tibble(coef(wt_brm)$Colony_number, rownames =
# 'Colony_number')
ggplot(wt_preds %>% filter(Condition == "TOTO"), aes(x = factor(Colony_number),
y = eDNA_dsDNA_uM)) + geom_hline(yintercept = as_tibble(fixef(wt_brm))$Estimate,
linetype = 2) + geom_hline(yintercept = as_tibble(fixef(wt_brm))$Q2.5,
linetype = 2, color = "gray") + geom_hline(yintercept = as_tibble(fixef(wt_brm))$Q97.5,
linetype = 2, color = "gray") + geom_jitter(height = 0, width = 0.1,
shape = 21) + geom_pointrange(data = as_tibble(coef(wt_brm)$Colony_number,
rownames = "Colony_number"), aes(x = factor(Colony_number),
y = Estimate.Intercept, ymin = Q2.5.Intercept, ymax = Q97.5.Intercept))
The point ranges are 95% CI for each colony, and the dotted lines are 95% CI for the hyperparameter.
Ok, with my realization on the last model, I believe we can just rewrite this hierarchy in brms syntax as eDNA_dsDNA_uM ~ 1 + (1 | Colony_number)
. Comparing with above you can see that we have now told brms to only group the intercept values by colony number. Since brms assumes this is a gaussian model, it should connect the group level estimates from each colony to the observed datapoints with a normal distribution parameterized by sigma (as seen in the prior summary above). Let’s see how it works!
wt_brm_single_level <- brm(eDNA_dsDNA_uM ~ 1 + (1 | Colony_number),
data = wt_preds %>% filter(Condition == "TOTO"), prior = prior(normal(100,
30), class = Intercept), sample_prior = T, chains = 4,
cores = 2, iter = 10000, control = list(adapt_delta = 0.95),
thin = 5, inits = "random", file = "wt_brm_single_level_1")
summary(wt_brm_single_level)
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: eDNA_dsDNA_uM ~ 1 + (1 | Colony_number)
## Data: wt_preds %>% filter(Condition == "TOTO") (Number of observations: 18)
## Samples: 4 chains, each with iter = 10000; warmup = 5000; thin = 5;
## total post-warmup samples = 4000
##
## Group-Level Effects:
## ~Colony_number (Number of levels: 6)
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## sd(Intercept) 21.21 8.69 7.91 41.45 3039 1.00
##
## Population-Level Effects:
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## Intercept 92.34 9.27 73.56 111.27 3644 1.00
##
## Family Specific Parameters:
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## sigma 15.36 3.55 10.25 24.02 2799 1.00
##
## Samples were drawn using sampling(NUTS). For each parameter, Eff.Sample
## is a crude measure of effective sample size, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
Again, the chains seem to have mixed well. Notice that we have a lot more effective samples and fewer parameter estimates now - this looks more correct.
plot(wt_brm_single_level)
Again the chains look well mixed, and now the sd and sigma posteriors actually look unimodal, which is better. Let’s look at the prior summary:
# coef(wt_brm_single_level)
prior_summary(wt_brm_single_level) %>% kable() %>% kable_styling()
| prior | class | coef | group | resp | dpar | nlpar | bound |
|---|---|---|---|---|---|---|---|
| normal(100, 30) | Intercept | ||||||
| student_t(3, 0, 19) | sd | ||||||
| sd | Colony_number | ||||||
| sd | Intercept | Colony_number | |||||
| student_t(3, 0, 19) | sigma |
This looks more like what I would expect. I still need to understand exactly how brms is using the sd class priors though…
Anyway, let’s compare the prior and posterior for our hyperparameter:
priorPostSamples <- bind_rows(posterior_samples(wt_brm_single_level) %>%
select(b_Intercept) %>% mutate(dist = "posterior"), tibble(b_Intercept = rnorm(4000,
100, 30)) %>% mutate(dist = "prior"))
ggplot(priorPostSamples, aes(x = b_Intercept, y = dist)) + geom_density_ridges(jittered_points = T,
position = "raincloud", point_alpha = 0.02) + theme_ridges()
Not bad! The data definitely informed the estimate, and the estimate seems reasonable based on the data. Let’s look at the group vs overall estimates:
ggplot(wt_preds %>% filter(Condition == "TOTO"), aes(x = factor(Colony_number),
y = eDNA_dsDNA_uM)) + geom_hline(yintercept = as_tibble(fixef(wt_brm_single_level))$Estimate,
linetype = 2) + geom_hline(yintercept = as_tibble(fixef(wt_brm_single_level))$Q2.5,
linetype = 2, color = "gray") + geom_hline(yintercept = as_tibble(fixef(wt_brm_single_level))$Q97.5,
linetype = 2, color = "gray") + geom_jitter(height = 0, width = 0.1,
shape = 21) + geom_pointrange(data = as_tibble(coef(wt_brm_single_level)$Colony_number,
rownames = "Colony_number"), aes(x = factor(Colony_number),
y = Estimate.Intercept, ymin = Q2.5.Intercept, ymax = Q97.5.Intercept))
You can see that for colonies 1 and 5 the confidence interval is pulling toward the overall estimate. The effects of the hierarchy aren’t super dramatic, but I think this makes a lot of sense. Just to fully vizualize the effects of the hierarchy, why don’t we compare to a model with no hierarchy!?
Here the model is simply eDNA_dsDNA_uM ~ 1
:
wt_brm_no_level <- brm(eDNA_dsDNA_uM ~ 1, data = wt_preds %>%
filter(Condition == "TOTO"), prior = prior(normal(100, 30),
class = Intercept), sample_prior = T, chains = 4, cores = 2,
iter = 10000, control = list(adapt_delta = 0.95), thin = 5,
inits = "random", file = "wt_brm_no_level_1")
summary(wt_brm_no_level)
## Family: gaussian
## Links: mu = identity; sigma = identity
## Formula: eDNA_dsDNA_uM ~ 1
## Data: wt_preds %>% filter(Condition == "TOTO") (Number of observations: 18)
## Samples: 4 chains, each with iter = 10000; warmup = 5000; thin = 5;
## total post-warmup samples = 4000
##
## Population-Level Effects:
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## Intercept 92.12 5.64 81.24 103.15 3832 1.00
##
## Family Specific Parameters:
## Estimate Est.Error l-95% CI u-95% CI Eff.Sample Rhat
## sigma 24.37 4.37 17.55 34.42 3944 1.00
##
## Samples were drawn using sampling(NUTS). For each parameter, Eff.Sample
## is a crude measure of effective sample size, and Rhat is the potential
## scale reduction factor on split chains (at convergence, Rhat = 1).
The sampling seems to have gone well and the CI looks tighter.
no_one_level_Samples <- bind_rows(posterior_samples(wt_brm_single_level) %>%
select(b_Intercept) %>% mutate(dist = "two level"), posterior_samples(wt_brm_no_level) %>%
select(b_Intercept) %>% mutate(dist = "no hier"), tibble(b_Intercept = rnorm(4000,
100, 30)) %>% mutate(dist = "prior"))
ggplot(no_one_level_Samples, aes(x = b_Intercept, y = dist)) +
geom_density_ridges(jittered_points = T, position = "raincloud",
point_alpha = 0.02) + theme_ridges()
Indeed, we can see that no hierarchy model is actually more confident in a tighter region than the hierarchy - why might that be?
Let’s fit models for each group individually (no hierarchy, but no pooling). These models get fit in parallel as a list, so it’s hard to show the output. I’ll just show the parameter estimate from colony 1 to convince you it worked:
wt_preds_list <- wt_preds %>% filter(Condition == "TOTO") %>%
group_split(Colony_number)
wt_brm_multi_flat <- brm_multiple(eDNA_dsDNA_uM ~ 1, data = wt_preds_list,
prior = prior(normal(100, 30), class = Intercept), sample_prior = T,
chains = 4, cores = 2, iter = 4000, control = list(adapt_delta = 0.95),
inits = "random", combine = F)
as_tibble(fixef(wt_brm_multi_flat[[1]]))
## # A tibble: 1 x 4
## Estimate Est.Error Q2.5 Q97.5
## <dbl> <dbl> <dbl> <dbl>
## 1 129. 11.7 102. 150.
Now let’s do something cool Let’s overlay the 2 level hierarchical estimates with the no hierarchy pooled and unpooled estimates to vizualize the effect of the hierarchy:
wt_no_level_coef <- bind_rows(as_tibble(fixef(wt_brm_multi_flat[[1]])),
as_tibble(fixef(wt_brm_multi_flat[[2]]), ), as_tibble(fixef(wt_brm_multi_flat[[3]])),
as_tibble(fixef(wt_brm_multi_flat[[4]])), as_tibble(fixef(wt_brm_multi_flat[[5]])),
as_tibble(fixef(wt_brm_multi_flat[[6]]))) %>% mutate(Colony_number = 1:6)
ggplot(wt_preds %>% filter(Condition == "TOTO"), aes(x = factor(Colony_number),
y = eDNA_dsDNA_uM)) + geom_hline(yintercept = as_tibble(fixef(wt_brm_single_level))$Estimate,
linetype = 2) + geom_hline(yintercept = as_tibble(fixef(wt_brm_single_level))$Q2.5,
linetype = 2, color = "gray") + geom_hline(yintercept = as_tibble(fixef(wt_brm_single_level))$Q97.5,
linetype = 2, color = "gray") + geom_hline(yintercept = as_tibble(fixef(wt_brm_no_level))$Estimate,
linetype = 2, color = "red") + geom_hline(yintercept = as_tibble(fixef(wt_brm_no_level))$Q2.5,
linetype = 2, color = "red") + geom_hline(yintercept = as_tibble(fixef(wt_brm_no_level))$Q97.5,
linetype = 2, color = "red") + geom_jitter(height = 0, width = 0.1,
shape = 21) + geom_pointrange(data = wt_no_level_coef, aes(x = factor(Colony_number),
y = Estimate, ymin = Q2.5, ymax = Q97.5), color = "red",
position = position_nudge(x = -0.1)) + geom_pointrange(data = as_tibble(coef(wt_brm_single_level)$Colony_number,
rownames = "Colony_number"), aes(x = factor(Colony_number),
y = Estimate.Intercept, ymin = Q2.5.Intercept, ymax = Q97.5.Intercept),
position = position_nudge(x = +0.1))
The hierarchical model results are in black and dashed gray, and the no hier models are in red. You can see the hierarchy changes the group level estimates slightly - colony 1 and 6 are shifted down / up, colonies 2, 3, and 5 have more confident estimates. However, the hyperparameter estimates are nearly identical. In the end we had a pretty balanced dataset, so the hierarchy had a small but limited effect. However, this was a really interesting exercise that should work well on future data!
sessionInfo()
## R version 3.5.2 (2018-12-20)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Mojave 10.14.6
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] mice_3.6.0 lattice_0.20-38 tidybayes_1.1.0
## [4] brms_2.9.0 Rcpp_1.0.1 ggridges_0.5.1
## [7] kableExtra_1.0.1 knitr_1.23 hms_0.4.2
## [10] lubridate_1.7.4 viridis_0.5.1 viridisLite_0.3.0
## [13] modelr_0.1.2 broom_0.5.1 cowplot_0.9.4
## [16] forcats_0.3.0 stringr_1.3.1 dplyr_0.8.1
## [19] purrr_0.2.5 readr_1.3.1 tidyr_0.8.2
## [22] tibble_2.1.3 ggplot2_3.2.0 tidyverse_1.2.1
##
## loaded via a namespace (and not attached):
## [1] minqa_1.2.4 colorspace_1.4-0
## [3] rsconnect_0.8.13 ggstance_0.3.2
## [5] markdown_0.9 base64enc_0.1-3
## [7] rstudioapi_0.9.0 rstan_2.18.2
## [9] svUnit_0.7-12 DT_0.7
## [11] mvtnorm_1.0-10 xml2_1.2.0
## [13] splines_3.5.2 bridgesampling_0.6-0
## [15] shinythemes_1.1.2 bayesplot_1.7.0
## [17] jsonlite_1.6 nloptr_1.2.1
## [19] shiny_1.2.0 compiler_3.5.2
## [21] httr_1.4.0 backports_1.1.3
## [23] assertthat_0.2.1 Matrix_1.2-15
## [25] lazyeval_0.2.1 cli_1.0.1
## [27] formatR_1.5 later_0.7.5
## [29] htmltools_0.3.6 prettyunits_1.0.2
## [31] tools_3.5.2 igraph_<IP_ADDRESS>
## [33] coda_0.19-2 gtable_0.2.0
## [35] glue_1.3.1 reshape2_1.4.3
## [37] cellranger_1.1.0 nlme_3.1-140
## [39] crosstalk_1.0.0 xfun_0.7
## [41] ps_1.3.0 lme4_1.1-21
## [43] rvest_0.3.2 mime_0.6
## [45] miniUI_<IP_ADDRESS> gtools_3.8.1
## [47] pan_1.6 MASS_7.3-51.1
## [49] zoo_1.8-6 scales_1.0.0
## [51] colourpicker_1.0 promises_1.0.1
## [53] Brobdingnag_1.2-6 parallel_3.5.2
## [55] inline_0.3.15 shinystan_2.5.0
## [57] yaml_2.2.0 gridExtra_2.3
## [59] loo_2.1.0 StanHeaders_2.18.1-10
## [61] rpart_4.1-13 stringi_1.2.4
## [63] highr_0.7 dygraphs_<IP_ADDRESS>
## [65] boot_1.3-20 pkgbuild_1.0.3
## [67] rlang_0.3.4 pkgconfig_2.0.2
## [69] matrixStats_0.54.0 evaluate_0.14
## [71] labeling_0.3 rstantools_1.5.1
## [73] htmlwidgets_1.3 tidyselect_0.2.5
## [75] processx_3.2.1 plyr_1.8.4
## [77] magrittr_1.5 R6_2.4.0
## [79] generics_0.0.2 mitml_0.3-7
## [81] pillar_1.3.1 haven_2.0.0
## [83] withr_2.1.2 xts_0.11-2
## [85] nnet_7.3-12 survival_2.43-3
## [87] abind_1.4-5 crayon_1.3.4
## [89] jomo_2.6-9 arrayhelpers_1.0-20160527
## [91] rmarkdown_1.13 grid_3.5.2
## [93] readxl_1.2.0 callr_3.1.1
## [95] threejs_0.3.1 digest_0.6.18
## [97] webshot_0.5.1 xtable_1.8-3
## [99] httpuv_<IP_ADDRESS> stats4_3.5.2
## [101] munsell_0.5.0 shinyjs_1.0


This is a simple chat widget; open up each link and type in the box at the bottom of the page.
This example shows buddy list functionality - open each link and see how it dynamically shows which other users are present. Closing a window for a user should then have them disappear from any buddy lists still open
A multi-player Sudoku game - this was one of the original Wave demos.
A multi-player Angband-style dungeon game demo. (use WASD keys to move around)
To run this example, see the instructions in the README in the Wookie example folder.


COVID-19 Plasma donors - INDIA
This website is to help COVID-19 patients to connect them with recovered people who want to donate their convalescent plasma*
*Plasma treatment is still under testing and research, and it isn't 100% effective.
For Active COVID-19 Patients
Convalescent plasma is the liquid part of blood that is collected from patients who have recovered from the novel coronavirus disease, and their antibodies can help fight the infection. You can use the MAP(to be populated once we have enough data) to find the nearest donor and get in touch to go to the nearest plasma donation center.For now to find the list of donors please click the below button
Donors!
People who have fully recovered from COVID-19 for at least two weeks are encouraged to consider donating plasma, which may help save the lives of other patients. You can add your information to our database, and only your First name, Blood type and Contact number will be Visible.
Read this before Donating plasma:
1. Only 14 days after symptoms disapper and negative swab result, Or 28 days after symptoms are gone.
2. You have positive RT-PCR report for COVID-19.
3. You cannot donate if you are pregnant.
4. You do not have chronic diseases, especially insulin diabetics.
5. You did not have tattoos or piercings within the last 4 months.
6. You have valid identification and a permanent address.
7. Only if are above 18 years and weigh at least 50 KGs.
We are still collecting data to populate a Map and Table ASAP! Please bear with us.
All information submitted is for public viewing.
Please share this website with your friends and family and help us Fight Covid-19 together


"button.descriptions" : "Descriptions"
"button.rename" : "Rename",
"button.random" : "Random",
"button.togglelocked" : "Toggle Locked",
"option.togglelocked" : "Show 'Toggle Locked' button?",
"option.randombutton" : "Show 'Randomize' button?"
translations : {
"en" : {
"plugin.name" : "Loadout Sets",
"button.sets" : "Sets",
"button.save" : "Store",
"button.load" : "Use",
"button.clear" : "Clear",
"prompt.setname" : "Loadout Name: ",
"set.basename" : "Loadout",
"button.rename" : "Rename",
"button.random" : "Random",
"button.togglelocked" : "Toggle Locked",
"option.togglelocked" : "Show 'Toggle Locked' button?",
"option.randombutton" : "Show 'Randomize' button?",
"button.descriptions" : "Descriptions"
},
"ru" : {
"plugin.name" : "Наборы экипировки",
"button.sets" : "Наборы",
"button.save" : "Сохранить",
"button.load" : "Использовать",
"button.clear" : "Очистить",
"prompt.setname" : "Имя экипировки: ",
"set.basename" : "Экипировка",
"button.rename" : "Переименовать",
"button.random" : "Случайно",
"button.togglelocked" : "Заблокировать",
"option.togglelocked" : "Отображать кнопку блокировки?",
"option.randombutton" : 'Отображать кнопку "Случайно"',
"button.descriptions" : "Описания"
},
"fr" : {
"plugin.name" : "Jeux d'équipement",
"button.sets" : "Jeux",
"button.save" : "Stocker",
"button.load" : "Utiliser",
"button.clear" : "Vider",
"prompt.setname" : "Nom du jeu d'équipement ",
"set.basename" : "Équipement",
"button.rename" : "Renommer",
"button.random" : "Aléatoire",
"button.togglelocked" : "Améliorations/Débloquées",
"option.togglelocked" : "Affiche le bouton Améliorations/Débloquées",
"option.randombutton" : "Afficher le bouton Aléatoire",
"button.descriptions" : "Descriptions"
},
"cs" : {
"plugin.name" : "Sady vybavení",
"button.sets" : "Sady",
"button.save" : "Uložit",
"button.load" : "Použít",
"button.clear" : "Vyčistit",
"prompt.setname" : "Název výbavy: ",
"set.basename" : "Výbava",
"button.rename" : "Přejmenovat",
"button.random" : "Náhodně",
"option.randombutton" : "Ukázat tlačítko 'Náhodně'?",
"button.descriptions" : "Popisy"
},
"de" : {
"plugin.name" : "Ausrüstungen",
"button.sets" : "Sätze",
"button.save" : "Speichern",
"button.load" : "Ausrüsten",
"button.clear" : "Zurücksetzen",
"prompt.setname" : "Name der Ausrüstung: ",
"set.basename" : "Ausrüstung",
"button.rename" : "Umbenennen",
"button.random" : "Zufallsausrüstung",
"button.togglelocked" : "Gesperrt umschalten",
"option.togglelocked" : "Button 'Gesperrt umschalten' anzeigen?",
"option.randombutton" : "Button 'Zufallsausrüstung' anzeigen?",
"button.descriptions" : "Descriptions"
}
},
"de" : {
"plugin.name" : "Ausrüstungen",
"button.text" : "Sätze",
"button.save" : "Speichern",
"button.load" : "Ausrüsten",
"button.clear" : "Zurücksetzen",
"prompt.setname" : "Name der Ausrüstung: ",
"set.basename" : "Ausrüstung"
}
Amkhatar wrote:Awesome, thanks
"fr" : {
"plugin.name" : "Jeux d'équipement",
"button.text" : "Jeux",
"button.save" : "Stocker",
"button.load" : "Utiliser",
"button.clear" : "Vider",
"prompt.setname" : "Nom du jeu d'équipement ",
"set.basename" : "Équipement"
}
I think it will be a good idea to add vehicles sets and separate them of infantry classes !
Amkhatar wrote:In addition i think the loadout popup is not very handy to use in game
I made a layout i think more usable
<awesome pics here>
poisonblx wrote:
11-Nov-2013: Added"button.rename" : "Rename",
"button.random" : "Random",
"button.togglelocked" : "Toggle Locked",
"option.togglelocked" : "Show 'Toggle Locked' button?",
"option.randombutton" : "Show 'Randomize' button?"
"de" : {
"plugin.name" : "Ausrüstungen",
"button.text" : "Sätze",
"button.save" : "Speichern",
"button.load" : "Ausrüsten",
"button.clear" : "Zurücksetzen",
"prompt.setname" : "Name der Ausrüstung: ",
"set.basename" : "Ausrüstung"
"button.rename" : "Umbenennen",
"button.random" : "Zufallsausrüstung erstellen",
"button.togglelocked" : "Gesperrtes Zubehör umschalten",
"option.togglelocked" : "Button 'Gesperrtes Zubehör' anzeigen?",
"option.randombutton" : "Button 'Zufallsausrüstung erstellen' anzeigen?"
}
Brady_The wrote:
There we go:
"de" : {
"plugin.name" : "Ausrüstungen",
"button.text" : "Sätze",
"button.save" : "Speichern",
"button.load" : "Ausrüsten",
"button.clear" : "Zurücksetzen",
"prompt.setname" : "Name der Ausrüstung: ",
"set.basename" : "Ausrüstung"
"button.rename" : "Umbenennen",
"button.random" : "Zufallsausrüstung",
"button.togglelocked" : "Gesperrt umschalten",
"option.togglelocked" : "Button 'Gesperrt umschalten' anzeigen?",
"option.randombutton" : "Button 'Zufallsausrüstung' anzeigen?"
}
Obski wrote:Is it possible to install this plugin on chrome now that BBLog's installed through the chrome web store?
poisonblx wrote:
Integrated that, the translations (while adding a couple more things to translate, sorry!), and an option for bothtoggle lockedandrandomizebuttons. I need to track down a 'reset plugin data' trick... at the very least for my own testing purposes.
Amkhatar wrote:I didn't translated "toggle.." because i don't see what it is and it seems it doesn't work as "sets" button ?!
Amkhatar wrote:poisonblx wrote:
Integrated that, the translations (while adding a couple more things to translate, sorry!), and an option for bothtoggle lockedandrandomizebuttons. I need to track down a 'reset plugin data' trick... at the very least for my own testing purposes.
Happy I inspired you with my artwork...if I should add something a margin-right: 4px for buttons will be fine ;)
No problem for translations...I updated my first post.
I didn't translated "toggle.." because i don't see what it is and it seems it doesn't work as "sets" button ?!
Edit: thx Brady, understood and translated
Poisonblx : The set button don't show submenu on my chrome ? bug or just me ?
idea for the toogle button,2 button state ?!
- All loadout
- Unlocked loadout
maybe useless ?!
good job again !
poisonblx wrote:I'm contemplating a better approach to show/hide of locked items. Maybe as little as just "Show Locked" and "Hide Locked" for it.
Edit:
I'm also contemplating (strongly) adding the loadout set buttons to the battlescreen page... so I don't even have to drop out of it to switch.
Amkhatar wrote:IMHO, it could be next to the compare button for weapons
[...]
and for accessories
[...]
Bonus
[...]
Extra-Bonus : A fixed div for buttons...very useful !
Amkhatar wrote:For me the toggle button is not fit to be at this current place (useless, crowded, not the same level of importance as SAVE or RESET button).
IMHO, it could be next to the compare button for weapons
https://dl.dropboxusercontent.com/u/66402/BF4/loadouts-layout-2-toggle-off-weapons.gif
https://dl.dropboxusercontent.com/u/66402/BF4/loadouts-layout-2-toggle-on-weapons.gif
Amkhatar wrote:and for accessories
You could add it at the same place
https://dl.dropboxusercontent.com/u/66402/BF4/loadouts-layout-2-toggle-off-accessories.gif
https://dl.dropboxusercontent.com/u/66402/BF4/loadouts-layout-2-toggle-on-accessories.gif
Amkhatar wrote:Bonus : You can add an another button "Descriptions" which show/hide all descriptions at the same time
https://dl.dropboxusercontent.com/u/66402/BF4/loadouts-layout-2-desc-off-accessories.gif
https://dl.dropboxusercontent.com/u/66402/BF4/loadouts-layout-2-desc-on-accessories.gif
Amkhatar wrote:Extra-Bonus : A fixed div for buttons...very useful !
https://dl.dropboxusercontent.com/u/66402/BF4/loadouts-layout2-fixed.gif
Brady_The wrote:Amkhatar wrote:IMHO, it could be next to the compare button for weapons
[...]
and for accessories
[...]
Bonus
[...]
Extra-Bonus : A fixed div for buttons...very useful !
Awesome ideas. Especially the position of the toggle button. I am really not satisfied with the short, butchered German translation (due to resulting length of button). Lol
Brady_The wrote:Looks like poisonbl.freeshell.org is down? Is it coming back? Otherwise you could switch tohttps://www.dropbox.com, reliable service with a high uptime.
Hydroskull wrote:The resized loadout names and re-located "Toggle Locked" button are much better, and the "Descriptions" tab works fabulously. Good work, sir.
poisonblx wrote:You're playing with the Dev version, aren't ya?
Hydroskull wrote:poisonblx wrote:You're playing with the Dev version, aren't ya?
...maybe.
ORFK wrote:if you dont know that, you shoudn't handle with PC, macs and Software.
latest running version is 3.8.1 - latest published beta/dev version is <IP_ADDRESS>
dapil wrote:http://www.reddit.com/r/battlefield_4/comments/1r8xim/since_you_guys_seem_to_appreciate_the_previous/cdkt86h
Dark-Ethereal wrote:I am having difficulty with this plugin.
On both Chrome and Firefox, I cannot find the "sets" button, but the joining bar shows a "sets" button along with the multiple loadouts buttons.
Pressing the buttons doesn't seem to do anything, so to me at least, this plugin is completely non-functional.
dapil wrote:Czech translation update:"cs" : {
"plugin.name" : "Sady vybavení",
"button.sets" : "Sady",
"button.save" : "Uložit",
"button.load" : "Použít",
"button.clear" : "Vyčistit",
"prompt.setname" : "Název výbavy: ",
"set.basename" : "Výbava",
"button.rename" : "Přejmenovat",
"button.random" : "Náhodně",
"option.randombutton" : "Ukázat tlačítko 'Náhodně'?",
"button.descriptions" : "Popisy"
},
Link:http://poisonbl.freeshell.org/bf4/bblog_loadout_sets.js
Johntron wrote:Can you put this on Github? I'd love to fork it and play around.
poisonblx wrote:
Well, until something's stored for a given set on the list it doesn't actually change anything in your loadout (I did this so accidentally clicking an unconfigured set doesn't cludge up your current loadout). That you get at least that much tells me the plugin's actually loading and running at least. When you pull up the Loadout page it should have the four sets listed below the breadcrumbs and "Reset/Save" buttons, and the "Sets" button should appear to the left of "Reset" (and Randomize to the left of that if it's enabled).
Example
Firstly, does the "Loadout Sets" configuration section show up in the BBLog config page properly (should just include "Show 'Randomize' button?" as a configuration option)?
Secondly, what other plugins do you have enabled?
I just tested on Chrome and it doesn't appear anything's changed on battlelog's end to break it recently. I'll pull up FF and make sure there too...
Hydroskull wrote:I'm not sure if anyone else is having this issue, but when I click the loadout name, nothing changes. Open the weapon, and it is what should have shown up. Go back to loadout, and everything has changed. When you click on the name, it does what it should, but doesn't show you until you force a refresh.
KempasUK wrote:Hi there,
I may have missed this but can these sets be activated in game? I've set all my loadout sets up in Battlelog no problem, but how do I / can I activate them in game?
K
Gliptal wrote:I still have the updating bug: when I click on the Set button, nothing changes (not even with an F5), but if I click on one of the classes and go back everything gets correctly updated.
http://i60.tinypic.com/1j6bep.jpg
http://i62.tinypic.com/24dr62q.jpg
http://i62.tinypic.com/24dr62q.jpg
http://i61.tinypic.com/2dv743n.jpg
RicoSchulz wrote:Hi there !
First i have to say thanks for your Work on that useful Plugin.it woks correct in the setup screen for each
class.
But if I start Bf4 on XboxOne by the Battlefield Gamelauncher (incl. in bblog) and activate the Livescoring
, ill get some different Results each Time I refresh the serverbrowser.hope you got an Idea!
http://p0mp.com/bblog3/fix/plugin.js <- error page
http://www.skillmonster.de/products/bblog/plugins/BiggerActivityStream.js <- 404
https://dl.dropboxusercontent.com/u/77103826/JS/MoreServerz.js <- error page
https://github.com/NikkiLoveGod/Assignmentinfo/blob/master/assignmentinfo.js <- loads full github page
"pt" : {
"plugin.name" : "Configuração",
"button.sets" : "Kits",
"button.save" : "Salvar",
"button.load" : "Usar",
"button.clear" : "Limpar",
"prompt.setname" : "Nome do kit: ",
"set.basename" : "Kits",
"button.rename" : "Renomear",
"button.random" : "Aleatório",
"button.togglelocked" : "Mudar Estado Bloqueado",
"option.togglelocked" : "Mostrar botão de bloqueio?",
"option.randombutton" : 'Mostrar botão de aleatório',
"button.descriptions" : "Descrição"
},
D4rkBurn wrote:I have found a bug:
Please fix that
Amkhatar wrote:D4rkBurn wrote:I have found a bug:
Please fix that
Poisonblx released a very useful plugin but is now outdated since the last battlelog update (yesterday).
http://battlelog.battlefield.com/bf4/en/news/view/battlefield-4-loadout-presets/
The new battlelog version is not very handy maybe you, poisonblx, could adapt your plugin ?!
- save your loadouts
- modify a preset
- change presets roll over navigation to buttons...


Introduction
This guide provides:
- A description of all the elements that come inside a BeoLiving Intelligence box.
- How to find an access a BeoLiving Intelligence within the network.
- An introduction to the BeoLiving Intelligence functionalities.
- An overview of the different sections of its web interface.
BeoLiving Intelligence comes out of the box with a big limitation in all the functionalities it could offer. To use it in its full capabilities, you should upgrade your BeoLiving Intelligence to PRO mode. This will allow for full integration of Bang & Olufsen NetworkLink audio and video products with several Home Automation systems such as Nest, Philips Hue, KNX and Lutron, among others. (see section Upgrade to PRO, or refer to BeoLiving Intelligence PRO User Guide for futher information),
Most of BeoLiving Intelligence configuration and usage it’s done through the BeoLiving App. This Smart Device application lets you customize your installation and control all devices in it. BeoLiving Intelligence also provides a web interface, which out of the box provides Network settings and User access control management. After upgrading your controller to BeoLiving Intelligence PRO, the web interface becomes the most important tool for installation, configuration and programming.
BeoLiving Intelligence provides support in two ways:
- Hassle free integration of Bang & Olufsen NetworkLink A/V systems with other control systems, without extra boxes.
- Control of the entire home via either a Bang & Olufsen remote control, the BeoLiving App, or the overlay menus on a Bang & Olufsen TV.
Terminology
- BeoLiving Intelligence: Controller as it comes from out of the box.
- BeoLiving Intelligence PRO: Controller with full capabilities.
- BLI: Alias for BeoLiving Intelligence.
- BLI PRO: Alias for BeoLiving Intelligence PRO.
- BLApp: BeoLiving App.
- LAN: Local Area Network.
- DHCP: Dynamic Host Configuration Protocol.
- PoE: Power over Ethernet.
What’s inside the box
After opening the box of BLI you will find:
- BLI hardware.
- Wall bracket for BLI.
- AC power supply.
- Quick setup guide.
BeoLiving Intelligence hardware description
Connection Panel
Located on the back of the BLI:
- Power: Powers the BLI.
- USB Port: Used for service purposes.
- System Reset Button: Press it for 8 seconds for resetting the system.
- RJ 45 Connector: For connecting the BeoLiving Intelligence to a local network (PoE capable).
User Led and Button
- User LED: The user LED is used to signalize the current state of the BLI, using different colours and ON-OFF patterns combination. Colours could be Green, Red or Yellow and the patterns could be Solid, Flash and Quick Flash. For more information about different BLI LED states refer to Led States section.
- User Button: This button is intended for user confirmation and button function input. For more information refer to Button Functions section.
Led States
All the possible user LED states with their respective meaning are shown in the following table.
| Activity | LED state |
|---|---|
| Normal operation | Solid Green |
| Critical error | Red / Yellow flash |
| Firmware update | Green quick flash |
| Loading configuration | Green quick flash |
| Waiting for User confirmation | Green / Yellow quick flash |
| User confirmation acknowledge | Solid Yellow |
| Boot | Red / Yellow transition |
Accessing the BeoLiving Intelligence
The BLI presents a web interface that can be accessed from a network browser. By default, BLI is configured DHCP mode, meaning that it gets the IP address from the router it is connected to.
IP address discovery suggestions
- Look up for “_hipservices._tcp” using an application that supports Zero-configuration, such as the Safari browser or the avahi-browse command.
- Use a network scanner/IP-scanner (e.g. Fing) on the same network as the BLI.
- Access your LAN router and search for the assigned IP to BLI.
Set static IP address mode
A static IP-address can be set to the BLI by accessing through the web interface, as described in the Network section.
Direct access
The BLI can be set to the factory default IP-address <IP_ADDRESS> by activating the Setup button function (3); see Button Functions. Once this address is set, you can access it directly using a network browser by using an Ethernet crossover cable. Note that he computer must have an IP address in the same range, e.g. <IP_ADDRESS> with subnet mask <IP_ADDRESS>.
User button
BLI has a button accessible in the upper side which provides several functions during normal operation:
- Function 1: Reserved.
- Function 2: Set admin password to “admin” during the next 5 minutes. Check the Setup interface section for further information.
- Function 3: Set network settings to fixed IP (<IP_ADDRESS>).
- Function 4: Set network settings to use DHCP.
- Function 5: Erase all configuration and settings.
To execute a function, press and hold the setup button. This will cycle through all available functions as indicated by the LED blinking (it will first blink one meaning function 1, after a while it will blink twice meaning function 2 and so on).
Release the button when you get to the desired function number and the LED will start to blink, press the setup button again in order to confirm the function execution.
In addition to being used to confirm the input function, a single press during normal operation is used to fire System event (refer to BeoLiving Intelligence PRO User Guide).
Web interface usage
The initial page after accessing the BLI via web browser shows two buttons: WEBPANEL and SETUP.
- WEBPANEL: This interface offers home automation control of your setup. Control of NetworkLink products is not supported, only Scenes could be fired. Being PRO, besides NetworkLink products, it will be possible to control all your installation.
- SETUP: This interface is used for configuring/programming your BLI setup.
Setup interface
The Setup web interface for a BLI does not offer a high degree of customization. In fact, this interface should be used in exceptional cases as for example: Upgrade your BLI to PRO (see section Upgrade to PRO for further information). After upgrading the Setup web interface is the most important tool for configuring and programming your setup.
An installer can access the BLI setup interface with the admin user. To reinforce security, admin password is by default unknown. If for some reason it is necessary to make use of the Setup web interface, the admin password can be reset by activating the Setup button function (2). After the button function input, admin password will be “admin” for the next 5 minutes. After login you will be immediately asked to modify it.
Upgrade to PRO
At the top menu bar, BASIC access page could be found. This page contains information regarding your BLI and Licensing information. In Product information, License type shows the current license of your BLI and for BLI’s with BASIC license Click to upgrade link is showed. This link will redirect your browser to Khimo.com to start the upgrade process. Payment is done through PayPal.
After payment process finishes, your BLI will start the upgrade process immediately which could last one minute approximately.
Project info
The Project information page is used to state information regarding the project BeoLiving Intelligence is part of. This information could be useful in any later service situation.
- Project name: Name for the project.
- Display name: Name of the BLI that will be shown in all the controller interfaces, such as BeoLiving App and WEBPANEL. Examples of display name are: the family name or the street address of the house.
- Installer name: Reference name of the installer/company in charge of this project.
- Installer contact: Any type of contact information to reach the installer/company in charge of this project for future questions or comments.
Users
The Users page shows in the left column every user that can access the BLI. New users can be added by admin by pressing the “plus” button.
User properties
- Change user password: this can be performed only on users that were created by admin.
- Enable/Disable User management access: when selected, the user is allowed to manage users and user rights. For example, this option should be set only for the owner of the installation.
- Enable/Disable Controller: allows user to have access to BLI via BLApp. When disabled, the only access is via WEBPANEL.
Select zone access for user
In this section, select the zones the user has access to. All zones of the installation are displayed as checkboxes that enable/disable access to it. All zone access means that the user can control any zone of the installation.
Network
The Network page contains the network connectivity configuration of BLI.
The configurable setting are:
- Hostname: Name of BLI as it is found in the LAN.
- DHCP: Enable/Disable DHCP mode. Per factory default, DHCP mode is enabled.
- Address: If DHCP is disabled, the static BLI network address could be set in Address.
- Mask: Network mask related to BLI LAN.
- DNS Server: DNS Server network address in LAN.
- Gateway: Gateway address in LAN.
Any change to the settings must be made permanent by pressing the Apply button.
Firmware
The Firmware page allows to check and apply updates for the BLI Firmware. There are two ways to perform such updates:
- Manually uploading a BLI firmware file.
- Online update via Internet.
Manual update
Press the Choose File to select your local BLI firmware file. Automatically will be uploaded to BLI, and the update should begin immediately.
Online update
For performing an online update to the BLI Firmware you must ensure that LAN network has Internet connection.
- Check for latest version: After pressed, the lastest official Firmware version will be displayed, if available.
- Start online update: If a new Firmware version is available for download, pressing this button will start the Firmware download and installation process.
- Automatic updates: Enable/Disable automatic BLI Firmware updates. If this option is selected, then the BLI firmware will be automatically kept up to date.
Service report
When any hardware or software error is experienced it is possible to create a service report containing the necessary information about your BLI for solving any potential issue.
You must fill the form showed in that page. This information is essential to reproduce and fix any issue you are experiencing.
Service reports are created and downloaded when Download button is clicked.


fun onViewCreated(view: View, savedInstanceState: Bundle?): Unit
Called to have the fragment instantiate its user interface view.
view
- The view returned by onCreateView(LayoutInflater, ViewGroup, Bundle)}.
savedInstanceState
- If non-null, this fragment is being re-constructed
from a previous saved state as given here.
See Also


Boston University student says Ben Shapiro protesters showed 'intolerance' on campus
by Julia MustoBoston University student and Campus Reform correspondent Eddie Song said that -- even through protests -- conservative commentator Ben Shapiro was able to get his message across to 1,500 students in a speech on Wednesday.
Invited by the Young America's Foundation chapter on campus, the 35-year-old host of "The Ben Shapiro Show" gave a speech titled "America was not built on slavery, it was built on freedom."
The idea that America was built on slavery has circulated in recent months since the release of The New York Times’ “1619 Project," built around the 400-year history of the institution in America.
BEN SHAPIRO BLASTS BOSTON UNIVERSITY STUDENTS 'TRIGGERED' BY CAMPUS SPEECH
Black BU, Boston University’s minority student group, had previously penned a letter to Shapiro taking issue with the speech.
"Abandoned, triggered, frustrated, disheartened, devalued, infuriated, overwhelmed, ignored, embarrassed of BU," the group wrote in part. "It's important to reject and refute language that emboldens the ideologies of white supremacy."
Shapiro, who has repeatedly spoken out against and been a target of white supremacists, responded during his speech on Wednesday expressing exasperation that he was there "no thanks to the leftists who sought to have this lecture canceled out of apparent fear of [his] wretched evil."
Vocal protesters at the event were quickly escorted out and chanted down by other attendees yelling, "USA! USA!"
Appearing on "Fox & Friends" with host Brian Kilmeade on Thursday, Song said that Shapiro made some "really good points on freedom and slavery in the very beginning."
CLICK HERE TO CHECK OUT THE FOX NEWS APP
He said that the group of protesters showed the "intolerance" of students on campus.
"They weren't there to learn. They were only there to disrupt," he told Kilmeade.
Song concluded that, while he believes "that Boston University [did] some really good things in terms of free speech...the social backlash is just absolutely insane."


HW1 Eigendigits
Due: Friday, January 25, 2013 at 11:59pm
Overview:
For this homework you will learn about eigenvector decomposition of
covariance for analysis (also known as principal components analysis
or PCA). After projecting images into the reduced eigenspace, you
will use a simple classification method (k-nearest neighbors) to see what features the projection
captures.
Data:
Your training and test data is available here.
>> load digits.mat;
>> whos;
The training set contains 60000 examples, and the test set 10000 examples.
The first 5000 test images are cleaner and easier than the last 5000.
Assignment:
- Load the data. Download the data and load each image into
column vectors in MATLAB.
You may find the functions dir and imread useful.
- Find eigendigits. Write a MATLAB function
hw1FindEigendigits (in hw1FindEigendigits.m)
that will take an (x by k)
matrix A (where x is the total number of pixels in an
image and k is the number of training images) and return a vector
m of length x containing the mean column vector of
A and an (x by k) matrix V that contains
k eigenvectors of the covariance matrix of A (after
the mean has been subtracted). These should be sorted in descending
order by eigenvalue (i.e., V(:,1) is the eigenvector
with the largest associated eigenvalue) and normalized (i.e.,
norm(V(:,1)) = 1). If you're still learning to use
MATLAB, I recommend you learn about the following functions:
eig and sort. You can reshape a vector and
imshow it. Note that this assumes that k < x, and you are using the trick
on page 14 of the lecture notes (using the page numbers at the bottom of each page)
so that the covariance matrix will be k by k instead
of x by x.
- Experiments. Don't use all the training data -- it'll be too slow, but experiment with different amounts and find something that seems to work.
Display some of the eigenvectors to see what they look like.
With the mean and matrix of eigenvectors from a training set of digit data, you can project other datapoints into this eigenspace.
Simply subtract the
mean vector and multiply by the eigenvector matrix. This will give you a vector of length k. Display some reconstructions of the test digits using the projection.
Even if your algorithm works perfectly, the reconstructed digits will not look exactly like the originals. What happens if you trim the vector down and
only use the top n eigenvectors?
How accurately can you classify using the method on page 21 of the lecture notes using the Euclidean distance metric? Plot figures showing the accuracy as the number of training points increases, and as the number of eigenvectors increases.
- Write and submit. Write, review, and submit a brief report containing your plots and detailing what you did and how well it worked. At the beginning of your report include your email address and EID in addition to your name. Also submit your code. Submit using turnin to lewfish. This is hw1.


difficult roads often lead to beautiful destinations!All our destinations are offbeat and exclusive in nature.These destinations are exotic.It takes a bit of hardship to witness the hidden beauty of nature.It gives you true sense of accomplishment and you feel humble towards mother nature!


MHRC urged to investigate arrests, killings of ethnic nationals in northern Shan State, northern Rakhine State
by Soe Min Htaik and Aung Min Thein
Myanmar Human Rights Commission (MHRC) should launch investigation into the arrests and killings of Hindu, Thet, Rakhine, Bamar, Shan and Chin nationals from northern Shan State and northern Rakhine State, a member of parliament has said.
Lower House MP Thaung Aye for Pyawbwe Township made the remark following a report submitted by the commission on its activities from January to September 24 this year.
He said the commission dealt with 725 of 2,376 complaints but there were only three rounds of investigations.
"Parliamentary representatives and people will be very grateful if the human rights commission is to responsibly take action and investigate the arrests, rapes, threats and killings of national people such as Hindu, Mro, Thet, Rakhin, Bamar, Shan and Chin in northern Shan State and northern Rakhine State. As Article 3 of the Universal Declaration of Human Rights states that everyone has the right to life, liberty and security of person, the commission should do more so that the State and the government can protect people's right to life, liberty and security," the MP commented.
He added that all people have equal rights regardless of their age, gender, place, job, designation, code of ethics, religion or culture.


from sikuli import Finder from org.sikuli.android import ADBScreen from org.sikuli.android import ADBDevice from pprint import pprint as pp import json from glob import glob from os.path import join, splitext, basename tmpdir = join(getBundlePath(), "screencap") base_img = join(getBundlePath(), "..", "img", "base") json_filename = join(getBundlePath(), "image-region.json") image_dict = {} json_file = None try: json_file = open(json_filename, 'w') image_dict = json.load(json_file) except (OSError, IOError) as e: print "json file doesn't exist yet." if json_file is None: print "ERROR: failed to open json_file {}".format(json_filename) exit(-1) Debug.on(3) image_filenames = glob(join(base_img, )) print "{} files found".format(len(image_filenames)) for image_filename in image_filenames: image_basename = splitext(basename(image_filename))[0] finder = None cropped_images = [] for crop_filename in image_filenames: crop_basename = splitext(basename(crop_filename))[0] # print "crp {} vs img {}".format(crop_basename, image_basename) if image_filename is not crop_filename: if crop_basename.startswith(image_basename): #print "base match" cropped_images.append(crop_filename) print cropped_images for cropped_image in cropped_images: print "cropped_image " + cropped_image if finder is None: finder = Finder(image_filename) print "matching {} in {}".format(cropped_image, image_filename) # match cropped_image in image_filename finder.findAll(cropped_image) matches = sorted((m for m in finder), key=lambda m:m.getScore()) l = len(matches) print "found {} matches".format(l) if l == 1: m = matches[0] name = splitext(basename(cropped_image))[0] image_dict[name] = { 'filename': cropped_image, 'source_filename': image_filename, 'source': image_basename, 'x': m.getX(), 'y': m.getY(), 'w': m.getW(), 'h': m.getH() } elif l > 1: print "ERROR: multiple matches" if finder is not None: finder.destroy() # release the natives pp(image_dict) json.dump(image_dict, json_file)


"SICKLE "of the Egyptians resembled that in modern use. The ears of corn were cut with it near the top of the straw. There was also a sickle used for warlike purposes, more correctly, however, called a pruning-hook(Deuteronomy 16:9; Jeremiah 50:16, marg., “scythe;” Joel 3:13; Mark 4:29).
"SICKLE "of the Egyptians resembled that in modern use. The ears of corn were cut with it near the top of the straw. There was also a sickle used for warlike purposes, more correctly, however, called a pruning-hook(Deuteronomy 16:9; Jeremiah 50:16, marg., “scythe;” Joel 3:13; Mark 4:29).


ue my notes
Add Note
Save
Notes
Filter by tag:
No notes
{{note.title}}
{{detail.text}}
Additional text:
{{note.text}}


Payment Required
Payment Form
Name:
Credit card type:
Vista
MisterCard
Discovery
Credit card number:


I am learning to be a programmer at Code Fellows! I am so excited to be here and on my way to a new career. Fun fact, in the last three years I've fallen in love with football! And yes - the Seahawks are my favorite team!
Honestly?  Throughout the course of the last few weeks, I've thrown myself head first into the field of technology. By making the decision to attend Code Fellows and break out of the restaurant industry that has consumed the last thirteen years of my life, I am allowing myself to be vulnerable and open to new possibilities. Another fun fact, I have a Bachelor's degree in Arabic Studies and minor in Sociology!
I've been telling myself that I am not smart enough, or capable enough intellectually, to be a programmer; the truth is that I am. I realized that yesterday when doing my first solo coding assignment, and suddenly a lightbulb went off. I thought to myself "I can do this.  And now I'm going to make it happen. Fun fact, I worked and lived in Alaska as a gold miner a few summers ago.


{% extends 'layout.html' %} {% block content %}
We're terribly sorry, but somethings gone awry while talking to our search providers. We're looking into the issue, hopefully it'll be resolved soon. Try again in a moment, we still love you!


When Boxifying a web page Boxes can also have boxes within boxes, within boxes, etc. This can also be referred to as Nested boxes
Cascading Style Sheets (CSS) is a set of rules to describe the formating of elements. When CSS is used, it allows a programmer to reduce code to describe how each element is displayed by referencing a specific style sheet to obtain the attribute for the element.
The term cascading is important as CSS utilizes Most Specific Rule Applies. This method is also referred to as inheritance.
One of the GREATEST assets derrived from using CSS is the ability for the programmer to avoid repetition within the code!
According to wikipedia, examples of inherited properties are:
Examples of properties NOT inherited are:
When using CSS a programmer will utilize selectors and define attributes. Selector - Defines the elements to apply the style
A programmer can assign a style by selecting the elements by tag or even by class.
Style format is "Attribute" : "Value"
P {
Color:Red
}
IMPORTANT: A great link to CSS References is found at https://developer.mozilla.org/en-US/docs/Web/CSS/Reference
How do I include CSS Styling in my web page? here are three ways you can do this.
There are two techniques you can use to help deal with sizing issues.
1. Set sizes in terms of percentages rather than pixels.
2. Set the box-sizing attribute to border-box for every element.
1. Divs are block elements (as opposed to inline), so by default they take up the entire width of a page.
2. Adding the rule display: flex; to the appropriate CSS will override this behavior and let divs appear next to each other.


Looks like you've wondered off the trail...
You cannot visit this page since you're not admin.
Oops, error connecting the server!
Looks like you've wondered off the trail...
You cannot visit this page since you're not admin.
Oops, error connecting the server!


Authentication settings
User
MQTT Broker Username
Password
MQTT Broker Password
Password Confirmation
MQTT Broker Password Confirmation
Connection settings
Port
MQTTP Broker Port
Timeout
MQTTP Broker Connection Timeout (sec)
Acknowledge Timeout
MQTTP Broker Acknowledge State Timeout (sec)
General settings
Cron Interval
How Often To Run Tasks (sec)
TimerUpdate Interval
How Often To Update Device Timers (sec)
Information
Warning
Error
Info + Warning
Warning + Error
All
Adapter Logging Level
Alarm settings
External Alarm System WebHook URL
WebHook URL of the external alarm or incident management system (POST)
Minimal Free Device Heap
The minimal memory heap available on device (KB)
Maximal Device Heap Fragmentation
The maximal memory heap fragmentation on device (%)
Resend alarm timeout
Resend same alarm every X minutes (min)
Adapter restarts with new config immediately after the save


Webspection
Cybersecurity Learning Platform
The free and open-source cybersecurity learning project. Our mission is to make web security visible so that individuals and organizations can make informed decisions
Accessible by Everyone
Open source for users even to run the platform, modify the code when they want, and distribute their customized versions
Hands-On Exercises
To raise users’ security knowledge and awareness, my platform carries exercises to test users’ experience
Interactive Cybersecurity Learning
Real-time interactions between client and server are shown with illustration, for the platform learners to understand the workflow of different attacks
Always updated
We make our code easy, and always compatible with the latest technologies.
Extra Compatible
Work with mobile phone and laptop


{% load static %} {% get_static_prefix as STATIC_PREFIX %}
Setup : Clink here
Source code : Click here
Requirements : Dot Net 4.0 Framework
Source code : Clink here
Developing
Android Game using AndEngine. Released as open source
Source code : Clink here
Developing
HTML5 Games. Released as open source
A modern snake game (Snake Game - Space) is developed for an assignment of class INT2031. This project is mainly for desktop, but mobile and online versions is promise extention games. They released as open source.
Nguyễn Khánh Thịnh - K55CA
Đỗ Khắc Phong - K55CA
Tô Ngọc Linh - K55CA
Nguyễn Mạnh Cường - K55CA


| PostgreSQL 9.0.10 Documentation | ||||
|---|---|---|---|---|
| Prev | Up | Chapter 26. Recovery Configuration | Next |
Specifies whether to start the PostgreSQL server as a standby. If this parameter is on, the server will not stop recovery when the end of archived WAL is reached, but will keep trying to continue recovery by fetching new WAL segments using restore_command and/or by connecting to the primary server as specified by the primary_conninfo setting.
Specifies a connection string to be used for the standby server
to connect with the primary. This string is in the format
accepted by the libpq PQconnectdb
function,
described in Section 31.1. If any option is
unspecified in this string, then the corresponding environment
variable (see Section 31.13) is checked. If the
environment variable is not set either, then
defaults are used.
The connection string should specify the host name (or address) of the primary server, as well as the port number if it is not the same as the standby server's default. Also specify a user name corresponding to a role that has the SUPERUSER and LOGIN privileges on the primary (see Section <IP_ADDRESS>). A password needs to be provided too, if the primary demands password authentication. It can be provided in the primary_conninfo string, or in a separate ~/.pgpass file on the standby server (use replication as the database name). Do not specify a database name in the primary_conninfo string.
This setting has no effect if standby_mode is off.
Specifies a trigger file whose presence ends recovery in the standby. If no trigger file is specified, the standby never exits recovery. This setting has no effect if standby_mode is off.


SPACE INVADERS!


{% extends "dashboard/base.html" %}
{% load i18n %}
{% block title %}{% trans "Edit gallery" %}{% endblock title %}
{% block content %}
{% trans "Edit gallery" %}
{% include "dashboard/snippets/forms.html" %}
{% blocktrans asvar warning %}
You're about to delete this gallery. It could be used on some post or page. Please be careful.
{% endblocktrans %}
{% include "dashboard/snippets/delete_confirm.html" with view="dashboard:gallery-delete" %}
{% endblock content %}


stillingsok2000
GLOBAL
DETAILS
>
request_initial_search
STATISTICS
Executions
Total
OK
KO
Mean req/s
Response Time (ms)
Total
OK
KO
Min
50th percentile
75th percentile
95th percentile
99th percentile
Max
Mean
Std Deviation


SendIT
Home
Parcel Delivery Service
About Us
Register
Login
Sign-in
Username
Password
Not a member?
Register
Forgot Password?


Doctor of Philosopy major ing Technology Education (PHDTE) - Rizal Technological University
Master of Science in Information System (MSIT) - Polytechnic University of the Philippines - Open University
Bachelor of Science in Computing major in Computer Science (BSComSci) - Pateros Technological College
Join the newsletter


This web page is a demonstration of the use of musical.js to play ABC notation interactively. [CEG]4
Minified, musical.js is about 17K, and it has no dependencies. It can also be used as an AMD or node.js modele.


case classAddToSet extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classAggregate extends CollectionCommand with CommandWithPack[api.commands.AggregationFramework.pack.type] with CommandWithResult[AggregationResult] with Product with Serializable
Definition Classes
AggregationFramework
case classAggregationResult extends Product with Serializable
Definition Classes
AggregationFramework
case classAscending extends SortOrder with Product with Serializable
Definition Classes
AggregationFramework
case classAvg extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classCursor extends Product with Serializable
Definition Classes
AggregationFramework
case classDescending extends SortOrder with Product with Serializable
Definition Classes
AggregationFramework
case classFirst extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classGeoNear extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
case classGroup extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
case classGroupField extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
sealed traitGroupFunction extends AnyRef
Definition Classes
AggregationFramework
case classGroupMulti extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
traitImplicitlyDocumentProducer extends AnyRef
Definition Classes
ImplicitCommandHelpers
case classLast extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classLimit extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
case classMatch extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
case classMax extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
sealed traitMetadataKeyword extends AnyRef
Definition Classes
AggregationFramework
case classMetadataSort extends SortOrder with Product with Serializable
Definition Classes
AggregationFramework
case classMin extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classOut extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
sealed traitPipelineOperator extends AnyRef
Definition Classes
AggregationFramework
case classProject extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
case classPush extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classPushMulti extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classRedact extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
case classSample extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
case classSkip extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
case classSort extends PipelineOperator with Product with Serializable
Definition Classes
AggregationFramework
sealed traitSortOrder extends AnyRef
Definition Classes
AggregationFramework
case classSumField extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classSumValue extends GroupFunction with Product with Serializable
Definition Classes
AggregationFramework
case classUnwind extends PipelineOperator with Product with Serializable


♠ home
Education
from genetic code to binary code
CodeFellows
Ph.D., University of Alberta, Canada
B.E., MSc., Central South University, China


Hi,
Can anyone suggest what i can do?
I have an Antenna on an inverter but the signal drops out from the garage when the door is closed. I wish to extend the cable to the other side of the garage and internal garage partition wall instead of buying a signal booster or repeater but am at a loss as to how long I can make it. Do I need to keep the cable as coaxial RG 174 rf cable or will good microphone cable work. it is shielded. Details of the set up are:
8.5" RG-175 RF Cable with RP SMA Connectors
2.11" Helical Whip 2.4GHz Omi Directional Antenna
The Cable coming of the antenna to the inverter is 42" approx.
I am lead to believe the wave length of 2.4GHz is 12.5cm. is this correct and do I need to keep my cable length within this length ration or half wave length ration.
What is the max distance the cable can be before signal drops off.?
Cheers,
OJ
Re: Extending the Coaxial RG-174 cable from inverter 2.4Ghz Antenna
I'm afraid there's a bit of confusion creeping in there. First, although it is screened, you can't use microphone cable. You must use the correct low-loss RF cable for the job. It's not quite clear what you have at the moment - are you saying your existing set-up is RG-175 cable with the whip coupled to it with an SMA connector (or the cable is integral with the whip but you have the SMA connector on the inverter end of the cable), or are those the parts you're thinking of buying?
However, something is amiss. As far as I know, SMA connectors are 50 Ω characteristic impedance, but the cable is 75 Ω. There is a mismatch there. That might be OK on a very short cable, but it will lead to losses you can ill afford on a long length. You need to find out what the transmitter module inside your inverter is, and what its output impedance is - 50 or 75 Ω - and get the correct cable (and maybe aerial) to match that.
You need to know a lot more about the transmitter, the receiver, the aerials, cable and the transmission path before anyone can predict the maximum length of cable you can have. Is 8.5" the length of cable you have, and 42" the length of cable you think you require?
Re: Extending the Coaxial RG-174 cable from inverter 2.4Ghz Antenna
He wont run into much of a problem using the 50 Ohm SMA connectors with the 75 Ohm cable (that particular combination is sold commercially e.g. www.pasternack.com/sma-male-sma-male-rg179bu-cable-assembly-pe3739-p.aspx)
What will help the performance of the rubber duck antenna the most, is the addition of a counterpoise, something like this:
The counterpoise can be circular or square, doesn't matter which, as long as it's diameter/dimensions match the monopole length.
The rubber duck is a compromise at best, and better performance can be obtained by replacing the rubber duck with a 1/4 wave wire or rod monopole and counterpoise. Like this:
Details here: www.lincomatic.com/wireless/homebrewant.html
Although max energy transfer occurs when the feedline/antenna combination impedance matches the transmitter output impedance, the use of 75 Ohm feedline with a 50 Ohm transmitter/receiver is not uncommon. (Radio Amateurs have done it for the last 50+ years at power levels much greater than RFM12/69/Wi-Fi, with no ill effects) RG-174 has ~0.5dB loss per foot. (www.4gon.co.uk/solutions/technical_cables_guide.php shows the loss as 48.7dB/100ft at 2.4 GHz), so an RG-174 feedline long enough to span his garage will be quite lossy at 2.4 GHz.
The best results would be obtained by using a directional antenna.
OJ, if you're the builder, tinkerer type, the lincomatic.com site has instructions on how to build several types of directional antennas, all relatively simple, with easily obtainable, low cost materials. If you'd rather buy than build, a google search turns up lots of results, e.g. www.wifi-antennas.co.uk/8dbi-2-4ghz-wireless-networking-directional-yagi-antenna.html
Re: Extending the Coaxial RG-174 cable from inverter 2.4Ghz Antenna
Hi Robert,
Cheers for the reply. I am a bit of a novice when it come to Electronics, sorry!
The cable I meant was RG174. It was a typo sorry. I have found some from maplins online and they say it is 50Ω
The antenna has a male connector on which screws in to a sma female connector on the end of the cable which is itself approx 43" long from connector to connector. The other connector on the end of the cable screws to a Zigbee card inside the inverter. I was hoping to make this cable longer by making an extension cable to add between the inverter and existing setup up to 15m to get the antenna closer to the house as there are a few internal walls in the garage which is blocking the signal. May get away with a lot shorter. The extension cable would be RG174 like existing with a female and male RP174 SMA connector on to connect to zigbee card inside inverter and the exsisting supplied cable going to antenna.
The details i have in the install guide are:
RF Transmit Power: 10dBm
Reciever Sensitivity: -102
EIRP with Antenna: 14dBm
Voltage 5V, Current 1A.
the details about the supplied set up are written as:
8.5" RG-174 RF Cable with RP-sma Connectors (its not 8.5" thought! so dont know what they mean here)
2.11" Helical Whip 2.4gHz Omi directional Antenna
all the details are in here that i have.
http://www.solaredge.com/files/pdfs/se_application_zigbee_gateway.pdf
Cheers, Ollie
Re: Extending the Coaxial RG-174 cable from inverter 2.4Ghz Antenna
Thank you Bill,
Very informative. I appreciate your help. Think I going to have a go at building one in my spare time just to give it a go! Looks relatively simple. (Famous last words)
Cheers for all the help.
Re: Extending the Coaxial RG-174 cable from inverter 2.4Ghz Antenna
Hi Ollie,
Thanks for the good words.
If reasonable care is taken when measuring and cutting the antenna elements, you should have good results. Accuracy is important when making an antenna that will be used at 2.4GHz, as it doesn't take much error in element length to significantly reduce antenna performance.
You definitely dont want an RG-174 feedline 15 meters long. At that length, the loss would be ~24dB, a reduction in signal strength - both transmitting and receiving - of ~200X.
If you have the time and tools, your best bet would be to make one of the directional antennas. If it's possible, using directional antennas on both ends of the wi-fi link would be an additional improvement.
Your 8.5" cable has Reverse Polarity SMA connectors. (Used on WiFi gear, but not commonly found on other equipment) So if you buy a cable to extend your feedline a bit, you might need to specify a matching RP connector on your new cable. Here's what they look like compared to standard SMA connectors:
Regards,
Bill


Currently attending Indiana University for Informatics with a Cognate in Mathematics. Beforehand I was at Trine University for two years where I was a member of the Christian Campus House, in which I lead the set-up and tear down crew for worship sessions. I was also the head film-manager for the university's football team (1 1/2 years), where I played on the team my Freshman season. I am currently looking for an internship to garner some experience under my belt, so feel free to look at my Resume on my about page. You can contact me throgh my email would be preferred, but Twitter, Linkedin and Facebook are also available on top of the page.
Within the Communications department, I was focusing on the technical aspect, where I was concerned with running live streams, maintaining websites, and keeping up with the audience via social medias. Recently I attended the inagural ICI Smart Launch Tech Program, where I honed in my skills in coding, especially in web design. More about that in the Written or Coded Works tabs. I also have experience using Open Broadcasting Systems to stream game play of various video games to YouTube and Twitch. While also at Trine, I studied Electrical Engineering for three semesters where I acquired skills in Math and Science as well as problem solving.
During the summers I have umpired locally for four years, as well as doing some landscape work in the suburbs of Northern Indianapolis. I ran a blog through WordPress titled Gospel Beats News, in which I maintained the site, ran the Twitter account, and with the help of friends, wrote about the latest in Christian Rap music. I currently now use the site to help promote and raise money for AFSP's Walk to Fight Suicide event held here in Bloomington.
I am currently looking for an Internship for next summer. Feel free to follow on social media or go to the About Page and go to the Contact Me section. I appreciate you taking your time to visit my portfolio!
With the help from ICI Smart Launch Tech Program, I was able to build this entire site using a bootstrap template and editing it in HTML, CSS, Bootstrap, jQuery and JavaScript.
I have done previous coding with HTML in Wordpress, where my Resume and Blog can be found in the Written Works tab.


Click your Deimperialize bookmark to convert all imperial units below.
Don't have a bookmark yet? Create it here.
It's about 1 inch if I recall correctly.
It's about 100 inches if I recall correctly.
It's about 100 in if I recall correctly.
It's about 1 foot if I recall correctly.
It's about 100 feet if I recall correctly.
It's about 100 ft if I recall correctly.
It's about 1 yard if I recall correctly.
It's about 100 yards if I recall correctly.
It's about 100 yd if I recall correctly.
It's about 1 mile if I recall correctly.
It's about 100 miles if I recall correctly.
It's about 100 mi if I recall correctly.
It's about 1 fluid ounce if I recall correctly.
It's about 100 fluid ounces if I recall correctly.
It's about 100 fl oz if I recall correctly.
It's about 1 pint if I recall correctly.
It's about 100 pints if I recall correctly.
It's about 100 pt I recall correctly.
It's about 1 quart if I recall correctly.
It's about 100 quarts if I recall correctly.
It's about 100 qt I recall correctly.
It's about 1 gallon if I recall correctly.
It's about 100 gallons if I recall correctly.
It's about 100 gal I recall correctly.
It's about 1 ounce if I recall correctly.
It's about 100 ounces if I recall correctly.
It's about 100 oz I recall correctly.
It's about 1 pound if I recall correctly.
It's about 100 pounds if I recall correctly.
It's about 100 lb I recall correctly.
It's about 1 quarter if I recall correctly.
It's about 100 quarters if I recall correctly.
It's about 100 qr I recall correctly.
It's about 100 °F if I recall correctly.