class: center, top, title-slide # STAT 302, Lecture Slides 2 ## Programming Fundamentals ### Bryan Martin --- # Outline 1. Control flow: `if`, `else`, `while` 2. Loops: `for` and `while` 3. Functions 4. Packages 5. Data 6. Managing Data .middler[**Goal:** Use R's programming capabilities to build efficient functions and workflows.] --- class: inverse .sectionhead[Part 1: Control Flow] --- layout: true # Control Flow --- ## `if` statements * `if` statement give our computer conditions for chunks of code * If our condition is `TRUE`, then the chunk evaluates * If our condition is `FALSE`, then it does not * We must give our condition as a single Boolean --- ## `if` statements ```r x <- 1 # Conditions go in parenthesis after if if (x > 0) { # code chunks get surrounded by curly brackets cat("x is equal to", x, ", a positive number!") } ``` ``` ## x is equal to 1 , a positive number! ``` -- ```r x <- -1 # Conditions go in parenthesis after if if (x > 0) { # code chunks get surrounded by curly brackets cat("x is equal to", x, ", a positive number!") } ``` --- ## `else` statments * We can use `else` to specify what we want to happen when our condition is `FALSE` ```r x <- 1 if (x > 0) { cat("x is equal to", x, ", a positive number!") } else { cat("x is equal to", x, ", a negative number!") } ``` ``` ## x is equal to 1 , a positive number! ``` -- ```r x <- -1 if (x > 0) { paste0("x is equal to ", x, ", a positive number!") } else { paste0("x is equal to ", x, ", a negative number!") } ``` ``` ## [1] "x is equal to -1, a negative number!" ``` --- ## `else if` * Use `else if` to set a sequence of conditions * The final `else` will evaluate anything left ```r x <- 1 if (x > 0) { paste0("x is equal to ", x, ", a positive number!") } else if (x < 0) { paste0("x is equal to ", x, ", a negative number!") } else { paste0("x is equal to ", x, "!") } ``` ``` ## [1] "x is equal to 1, a positive number!" ``` --- ```r x <- -1 if (x > 0) { paste0("x is equal to ", x, ", a positive number!") } else if (x < 0) { paste0("x is equal to ", x, ", a negative number!") } else { paste0("x is equal to ", x, "!") } ``` ``` ## [1] "x is equal to -1, a negative number!" ``` -- ```r x <- 0 if (x > 0) { paste0("x is equal to ", x, ", a positive number!") } else if (x < 0) { paste0("x is equal to ", x, ", a negative number!") } else { paste0("x is equal to ", x, "!") } ``` ``` ## [1] "x is equal to 0!" ``` --- layout: false layout: true # Control Flow: Examples --- ## Absolute Value ```r x <- 5 if (x >= 0) { x } else { -x } ``` ``` ## [1] 5 ``` -- ```r x <- -5 if (x >= 0) { x } else { -x } ``` ``` ## [1] 5 ``` --- ## Checking if `x` is even or negative ```r x <- 6 if ((x %% 2) == 0 | x < 0) { TRUE } else { FALSE } ``` ``` ## [1] TRUE ``` -- ```r x <- -5 if ((x %% 2) == 0 | x < 0) { TRUE } else { FALSE } ``` ``` ## [1] TRUE ``` --- ```r x <- 5 if ((x %% 2) == 0 | x < 0) { TRUE } else { FALSE } ``` ``` ## [1] FALSE ``` --- ## Check length of strings Note: We will need the `stringr` package for this ```r # Run this if you have never installed stringr before! # install.packages("stringr") library(stringr) ``` ```r x <- "cat" if (str_length(x) <= 10) { cat("x is a pretty short string!") } else { cat("x is a pretty long string!") } ``` ``` ## x is a pretty short string! ``` --- ```r x <- "A big fluffy cat with orange fur and stripes" if (str_length(x) <= 10) { cat("x is a pretty short string!") } else { cat("x is a pretty long string!") } ``` ``` ## x is a pretty long string! ``` --- ## Check class ```r x <- 5 if (is.numeric(x)) { cat("x is a numeric!") } else if (is.character(x)) { cat("x is a character!") } else { cat("x is some class I didn't check for in my code!") } ``` ``` ## x is a numeric! ``` --- ## Check class ```r x <- list() if (is.numeric(x)) { cat("x is a numeric!") } else if (is.character(x)) { cat("x is a character!") } else { cat("x is some class I didn't check for in my code!") } ``` ``` ## x is some class I didn't check for in my code! ``` --- layout: false class: inverse .sectionhead[Part 2: for loops] --- layout: true # Loops --- ## `for` loops `for` loops iterate along an input vector, stores the current value of the vector as a variable, and repeatedly evaluates a code chunk until the vector is exhausted ```r for (i in 1:10) { print(i) } ``` ``` ## [1] 1 ## [1] 2 ## [1] 3 ## [1] 4 ## [1] 5 ## [1] 6 ## [1] 7 ## [1] 8 ## [1] 9 ## [1] 10 ``` --- ## `while` loops `while` loops continuously evaluate the inner code chunk until the condition is `FALSE`. Be careful here! It is possible to get stuck in an infinite loop! ```r x <- 0 while (x < 5) { cat("x is currently", x, ". Let's increase it by 1!") x <- x + 1 } ``` ``` ## x is currently 0 . Let's increase it by 1!x is currently 1 . Let's increase it by 1!x is currently 2 . Let's increase it by 1!x is currently 3 . Let's increase it by 1!x is currently 4 . Let's increase it by 1! ``` --- ## `while` loops Let's see if we can clean up that output. Add `"\n"` to a string to force a line break. ```r x <- 0 while (x < 5) { cat("x is currently ", x, ". Let's increase it by 1! \n", sep = "") x <- x + 1 } ``` ``` ## x is currently 0. Let's increase it by 1! ## x is currently 1. Let's increase it by 1! ## x is currently 2. Let's increase it by 1! ## x is currently 3. Let's increase it by 1! ## x is currently 4. Let's increase it by 1! ``` --- layout: false layout: true # Loops: Examples --- ## String Input ```r string_vector <- c("a", "b", "c", "d", "e") for (mystring in string_vector) { print(mystring) } ``` ``` ## [1] "a" ## [1] "b" ## [1] "c" ## [1] "d" ## [1] "e" ``` --- ## Nested Loops ```r counter <- 0 for (i in 1:3) { for (j in 1:2) { counter <- counter + 1 cat("i = ", i, ", j = ", j, ", counter = ", counter, "\n", sep = "") } } ``` ``` ## i = 1, j = 1, counter = 1 ## i = 1, j = 2, counter = 2 ## i = 2, j = 1, counter = 3 ## i = 2, j = 2, counter = 4 ## i = 3, j = 1, counter = 5 ## i = 3, j = 2, counter = 6 ``` --- ## Nested Loops ```r for (i in 1:3) { for (j in 1:2) { print(i * j) } } ``` ``` ## [1] 1 ## [1] 2 ## [1] 2 ## [1] 4 ## [1] 3 ## [1] 6 ``` --- ## Filling in a vector Note: Usually, this is an inefficient way to do this! Try to vectorize code wherever possible! ```r # Inefficient x <- rep(NA, 5) for (i in 1:5) { x[i] <- i * 2 } x ``` ``` ## [1] 2 4 6 8 10 ``` ```r # Much better x <- seq(2, 10, by = 2) x ``` ``` ## [1] 2 4 6 8 10 ``` --- ## Filling in a vector ```r library(stringr) x <- rep(NA, 5) my_strings <- c("a", "a ", "a c", "a ca", "a cat") for (i in 1:5) { x[i] <- str_length(my_strings[i]) print(x) } ``` ``` ## [1] 1 NA NA NA NA ## [1] 1 2 NA NA NA ## [1] 1 2 3 NA NA ## [1] 1 2 3 4 NA ## [1] 1 2 3 4 5 ``` --- ## Filling in a matrix Note: Usually, this is an inefficient way to do this! Try to vectorize code wherever possible! ```r x <- matrix(NA, nrow = 4, ncol = 3) for (i in 1:4) { for (j in 1:3) { x[i, j] <- i * j } } x ``` ``` ## [,1] [,2] [,3] ## [1,] 1 2 3 ## [2,] 2 4 6 ## [3,] 3 6 9 ## [4,] 4 8 12 ``` --- ## Continue until positive sample ```r set.seed(3) x <- -1 while (x < 0) { x <- rnorm(1) print(x) } ``` ``` ## [1] -0.9619334 ## [1] -0.2925257 ## [1] 0.2587882 ``` ```r x ``` ``` ## [1] 0.2587882 ``` --- layout: false class: inverse .sectionhead[Part 3: Functions] --- layout: true # Functions --- We've already seen and used several functions, but you can also create your own!  You can assign default values by setting them equal to something in the function definition * **Body**: the actual code that is executed * `return()`: is what your function will return to the user --- layout: false layout: true # Functions: Examples --- ## Square a number, add 2 ```r square_plus_2 <- function(x) { y <- x^2 + 2 return(y) } square_plus_2(4) ``` ``` ## [1] 18 ``` ```r square_plus_2(10) ``` ``` ## [1] 102 ``` ```r square_plus_2(1:5) ``` ``` ## [1] 3 6 11 18 27 ``` --- ```r square_plus_2("some string") ``` ``` ## Error in x^2: non-numeric argument to binary operator ``` What happened here? We wrote a function for numerics only but didn't check the input! Let's try making our function more robust by adding a `stop` ```r square_plus_2 <- function(x) { if (!is.numeric(x)) { stop("x must be numeric!") } else { y <- x^2 + 2 return(y) } } square_plus_2("some string") ``` ``` ## Error in square_plus_2("some string"): x must be numeric! ``` --- ## Check if the input is positive ```r check_pos <- function(x) { if (x > 0) { return(TRUE) } else if (x < 0) { return(FALSE) } else { return(paste0("x is equal to ", x, "!")) } } check_pos(-3) ``` ``` ## [1] FALSE ``` ```r store_output <- check_pos(0) store_output ``` ``` ## [1] "x is equal to 0!" ``` --- ## Make a table We'll use `str_c` from the `stringr` package for this function. ```r library(stringr) my_summary <- function(input, percentiles = c(.05, .5, .95)) { if (!is.numeric(input) | !is.numeric(percentiles)) { stop("The input and percentiles must be numeric!") } if (max(percentiles) > 1 | min(percentiles) < 0) { stop("Percentiles must all be in [0, 1]") } # Convert percentiles to character percent, append " Percentile" to each labels <- str_c(percentiles * 100, " Percentile") output <- quantile(input, probs = percentiles) names(output) <- labels return(output) } ``` --- ## Make a table ```r x <- rnorm(100) my_summary(x) ``` ``` ## 5 Percentile 50 Percentile 95 Percentile ## -1.22236488 0.06183487 1.22655423 ``` ```r my_summary(x, percentiles = c(.07, .5, .63, .91)) ``` ``` ## 7 Percentile 50 Percentile 63 Percentile 91 Percentile ## -1.13785677 0.06183487 0.36358152 1.16185072 ``` ```r my_summary(c("string1", "string2")) ``` ``` ## Error in my_summary(c("string1", "string2")): The input and percentiles must be numeric! ``` ```r my_summary(x, percentiles = c(-7, .5, 1.3)) ``` ``` ## Error in my_summary(x, percentiles = c(-7, 0.5, 1.3)): Percentiles must all be in [0, 1] ``` --- ## Function with iteration ```r my_sum <- function(x) { total <- 0 for (i in 1:length(x)) { total <- total + x[i] } return(total) } my_sum(1:5) ``` ``` ## [1] 15 ``` --- layout: false class: inverse .sectionhead[Style guide!] --- layout: true # Style guide! --- .middler[Once again, we will using a mix of the [Tidyverse style guide](https://style.tidyverse.org/) and the [Google style guide](https://google.github.io/styleguide/Rguide.html).] --- ## Function Names Strive to have function names based on verbs. Otherwise, standard variable name style guidelines apply! ```r # Good add_row() permute() # Bad row_adder() permutation() ``` --- ## Spacing Place a space before and after `()` when used with `if`, `for`, or `while`. ```r # Good if (condition) { x + 2 } # Bad if(condition){ x + 2 } ``` --- ## Spacing Place a space after `()` used for function arguments. ```r # Good if (debug) { show(x) } # Bad if(debug){ show(x) } ``` --- ## Code Blocks * `{` should be the last character on the line. Related code (e.g., an `if` clause, a function declaration, a trailing comma, ...) must be on the same line as the opening brace. It should be preceded by a single space. * The contents within code blocks should be indented by two spaces from where it started * `}` should be the first character on the line. --- ## Code Blocks ```r # Good if (y < 0) { message("y is negative") } if (y == 0) { if (x > 0) { log(x) } else { message("x is negative or zero") } } else { y^x } ``` --- ## Code Blocks ```r # Bad if (y<0){ message("Y is negative") } if (y == 0) { if (x > 0) { log(x) } else { message("x is negative or zero") } } else { y ^ x } ``` --- ## In-line Statments In general, it's ok to drop the curly braces for very simple statements that fit on one line. However, function calls that affect control flow (`return`, `stop`, etc.) should always go in their own `{}` block: ```r # Good y <- 10 x <- if (y < 20) "Too low" else "Too high" if (y < 0) { stop("Y is negative") } find_abs <- function(x) { if (x > 0) { return(x) } x * -1 } ``` --- ## In-line Statements In general, it's ok to drop the curly braces for very simple statements that fit on one line. However, function calls that affect control flow (`return`, `stop`, etc.) should always go in their own `{}` block: ```r # Bad if (y < 0) stop("Y is negative") if (y < 0) stop("Y is negative") find_abs <- function(x) { if (x > 0) return(x) x * -1 } ``` --- ## Long lines in functions If a function definition runs over multiple lines, indent the second line to where the definition starts. ```r # Good long_function_name <- function(a = "a long argument", b = "another argument", c = "another long argument") { # As usual code is indented by two spaces. } # Bad long_function_name <- function(a = "a long argument", b = "another argument", c = "another long argument") { # Here it's hard to spot where the definition ends and the # code begins } ``` --- ## `return` Strictly speaking, `return` is not necessary in a function definition. The function will output the last line of executable R code. The following function definitions will output the same results! ```r Add_Values <- function(x, y) { return(x + y) } Add_Values <- function(x, y) { x + y } ``` Note that our two guides disagree on which of these is preferable. Personally, I always make my `return` statements explicit, so I prefer the former. --- ## Commenting functions For now, when commenting functions, include (at least) 3 lines of comments: * a comment describing the purpose of a function * a comment describing each input * a comment describing the output The function body should be commented as usual! --- ```r # Good ---- # Function: square_plus_2, squares a number and then adds 2 # Input: x, must be numeric # Output: numeric equal to x^2 + 2 square_plus_2 <- function(x) { # check that x is numeric if (!is.numeric(x)) { stop("x must be numeric!") } else { # if numeric, then square and add 2 y <- x^2 + 2 return(y) } } # Bad ---- # Function for problem 2c square_plus_2 <- function(x) { if (!is.numeric(x)) { stop("x must be numeric!") } else { y <- x^2 + 2 return(y) } } ``` --- layout: false # Summary * Use `if` and `else` to set conditions * Use `for` and `while` to write loops * Functions include a input parameters, a body of code, and an output * Functions are essential for a good workflow! --- class: inverse .sectionhead[Part 4: Packages] --- layout: true # Packages --- ## What is an R package? * Packages bundle together code, data, and documentation in an easy to share way. * They come with functions that others have written for you to make your life easier, and greatly improve the power of R! * Packages are the reason we are learning about R in this course. * Packages can range from graphical software, to web scraping tools, statistical models for spatio-temporal data1, microbial data analysis tools2, and more! .footnote[[1] This is a shameless self plug. [2] This is also a shameless self plug.] --- ## Where are packages? * The most popular package repository is the Comprehensive R Archive Network, or [CRAN](https://cran.r-project.org/) * As of making this slide, it includes over 16,000 packages * Other popular repositories include [Bioconductor](https://www.bioconductor.org/) and [Github](https://github.com/) --- ## How do I install packages? If a package is available on CRAN, like most packages we will use for this course, you can install it using `install.packages()`: ```r install.packages("PACKAGE_NAME_IN_QUOTES") ``` You can also install by clicking *Install* in the *Packages* tab through RStudio. For the most part, after you install a package, it is saved on your computer until you update R, and you will not need to re-install it. Thus, you should **never** include a call to `install.packages()` in any `.R` or `.Rmd` file! --- ## How do I use a package? After a package is installed, you can load it into your current R session using `library()`: ```r library(PACKAGE_NAME) # or library("PACKAGE_NAME") ``` Note that unlike `install.packages()`, you do not need to include the package name in quotes. --- ## How do I use a package? Loading a package must be done with each new R session, so you should put calls to `library()` in your `.R` and `.Rmd` files. Usually, I do that in the opening code chunk. If it is a `.Rmd`, I set the parameter `include = FALSE` to hide the messages and code, because they are usually unnecessary to the reader of my HTML. ```{r, include = FALSE} library(ggplot2) ``` --- layout: false class: inverse .sectionhead[Part 5: Data] --- layout: true # Lists --- **Lists**, like vectors and matrices, are a class of objects in R. Lists are special because they can store multiple different types of data. ```r my_list <- list("some_numbers" = 1:5, "some_characters" = c("a", "b", "c"), "a_matrix" = diag(2)) my_list ``` ``` ## $some_numbers ## [1] 1 2 3 4 5 ## ## $some_characters ## [1] "a" "b" "c" ## ## $a_matrix ## [,1] [,2] ## [1,] 1 0 ## [2,] 0 1 ``` Make sure to store items within a list using `=`, not `<-`! --- ## Accessing List Elements There are three ways to access an item within a list * double brackets `[[]]` with its name in quotes * double brackets `[[]]` with its index as a number * dollar sign `$` followed by its name without quotes --- * double brackets `[[]]` with its name in quotes * double brackets `[[]]` with its index as a number * dollar sign `$` followed by its name without quotes ```r my_list[["some_numbers"]] ``` ``` ## [1] 1 2 3 4 5 ``` ```r my_list[[1]] ``` ``` ## [1] 1 2 3 4 5 ``` ```r my_list$some_numbers ``` ``` ## [1] 1 2 3 4 5 ``` --- ## Why double brackets? If you use a single bracket to index, like we do with matrices and vectors, you will return a list with a single element. ```r my_list[1] ``` ``` ## $some_numbers ## [1] 1 2 3 4 5 ``` ```r my_list[[1]] ``` ``` ## [1] 1 2 3 4 5 ``` Note that this means you can only return a single item in a list using double brackets or the dollar sign! (Why?) --- ## Why double brackets? This is a subtle but important difference! ```r my_list[1] + 1 ``` ``` ## Error in my_list[1] + 1: non-numeric argument to binary operator ``` ```r my_list[[1]] + 1 ``` ``` ## [1] 2 3 4 5 6 ``` --- ## Subsetting a list You can subset a list similarly to vectors and matrices using single brackets. ```r my_list[1:2] ``` ``` ## $some_numbers ## [1] 1 2 3 4 5 ## ## $some_characters ## [1] "a" "b" "c" ``` ```r my_list[-2] ``` ``` ## $some_numbers ## [1] 1 2 3 4 5 ## ## $a_matrix ## [,1] [,2] ## [1,] 1 0 ## [2,] 0 1 ``` --- ## Adding to a list We can use the same tools we used to access list elements to add to a list. However, if we use double brackets, we must use quotes, otherwise R will search for something that does not yet exist. ```r my_list$a_boolean <- FALSE my_list[["a_list"]] <- list("recursive" = TRUE) ``` --- ```r my_list ``` ``` ## $some_numbers ## [1] 1 2 3 4 5 ## ## $some_characters ## [1] "a" "b" "c" ## ## $a_matrix ## [,1] [,2] ## [1,] 1 0 ## [2,] 0 1 ## ## $a_boolean ## [1] FALSE ## ## $a_list ## $a_list$recursive ## [1] TRUE ``` --- ## Names of List Items Call `names()` to get a vector of list item names. ```r names(my_list) ``` ``` ## [1] "some_numbers" "some_characters" "a_matrix" "a_boolean" ## [5] "a_list" ``` --- ## Why bother? * Lists give us **key-value pairs**, also known as **dictionaries** or **associative arrays** * This means we can look up items in a list by name, rather than location * For example, if we know we are looking for `output` within a list, we can always search for it, regardless of how the list was created or what else it contains --- layout: false layout: true # Data Frames --- A **data frame** in R is essentially a special type of list, where each item is a vector of equal length. Typically, we say that data has `\(n\)` rows (one for each **observation**) and `\(p\)` columns (one for each **variable**) Unlike a matrix, columns can have different types. However, many column functions still apply! (such as `colSums`, `summary`, etc.) --- ## Creating a data frame An easy way to create a data frame is to use the function `data.frame()`. Like lists, make sure you define the names using `=` and not `<-`! ```r my_data <- data.frame("var1" = 1:3, "var2" = c("a", "b", "c"), "var3" = c(TRUE, FALSE, TRUE)) my_data ``` ``` ## var1 var2 var3 ## 1 1 a TRUE ## 2 2 b FALSE ## 3 3 c TRUE ``` --- ## Creating a data frame If you import or create numeric data as a `matrix`, you can also convert it easily using `as.data.frame()` ```r my_matrix <- matrix(1:9, nrow = 3, ncol = 3) as.data.frame(my_matrix) ``` ``` ## V1 V2 V3 ## 1 1 4 7 ## 2 2 5 8 ## 3 3 6 9 ``` --- ## Subsetting data frames We can subset data frames using most of the tools we've learned about subsetting so far. We can use keys or indices. ```r my_data$var1 ``` ``` ## [1] 1 2 3 ``` ```r my_data["var1"] ``` ``` ## var1 ## 1 1 ## 2 2 ## 3 3 ``` ```r my_data[["var1"]] ``` ``` ## [1] 1 2 3 ``` --- ## Subsetting data frames ```r my_data[1] ``` ``` ## var1 ## 1 1 ## 2 2 ## 3 3 ``` ```r my_data[[1]] ``` ``` ## [1] 1 2 3 ``` ```r my_data[, 1] ``` ``` ## [1] 1 2 3 ``` ```r my_data[1, ] ``` ``` ## var1 var2 var3 ## 1 1 a TRUE ``` --- ## Adding to a data frame We can add to a data frame using `rbind()` and `cbind()`, but be careful with type mismatches! We can also add columns using the column index methods. ```r # These all do the same thing my_data <- cbind(my_data, "var4" = c(3, 2, 1)) my_data$var4 <- c(3, 2, 1) my_data[, "var4"] <- c(3, 2, 1) my_data[["var4"]] <- c(3, 2, 1) my_data ``` ``` ## var1 var2 var3 var4 ## 1 1 a TRUE 3 ## 2 2 b FALSE 2 ## 3 3 c TRUE 1 ``` --- ## Adding to a data frame ```r rbind(my_data, c(1, 2, 3, 4)) ``` ``` ## var1 var2 var3 var4 ## 1 1 a 1 3 ## 2 2 b 0 2 ## 3 3 c 1 1 ## 4 1 2 3 4 ``` ```r rbind(my_data, list(4, "d", FALSE, 0)) ``` ``` ## var1 var2 var3 var4 ## 1 1 a TRUE 3 ## 2 2 b FALSE 2 ## 3 3 c TRUE 1 ## 4 4 d FALSE 0 ``` --- ## Investigating a data frame We can use `str()` to see the structure of a data frame (or any other object!) ```r my_data2 <- rbind(my_data, c(1, 2, 3, 4)) str(my_data2) ``` ``` ## 'data.frame': 4 obs. of 4 variables: ## $ var1: num 1 2 3 1 ## $ var2: chr "a" "b" "c" "2" ## $ var3: num 1 0 1 3 ## $ var4: num 3 2 1 4 ``` ```r my_data2 <- rbind(my_data, list(4, "d", FALSE, 0)) str(my_data2) ``` ``` ## 'data.frame': 4 obs. of 4 variables: ## $ var1: num 1 2 3 4 ## $ var2: chr "a" "b" "c" "d" ## $ var3: logi TRUE FALSE TRUE FALSE ## $ var4: num 3 2 1 0 ``` --- Most data frames will have column names describing the variables. They can also include rownames, which we can add using `rownames()`. ```r rownames(my_data2) <- c("Obs1", "Obs2", "Obs3", "Obs4") my_data2 ``` ``` ## var1 var2 var3 var4 ## Obs1 1 a TRUE 3 ## Obs2 2 b FALSE 2 ## Obs3 3 c TRUE 1 ## Obs4 4 d FALSE 0 ``` --- layout: false # Tibbles `tibbles` are a special Tidyverse data frame from the `tibble` package. You can convert data frames to tibbles using `as_tibble()`, or you can create them similarly to data frames using `tibble()`. The biggest benefit of tibbles is that they display nicer in your R console, automatically truncating output and including variable type to print nicely. Tidyverse has (rightfully) decided rownames are obsolete, and so they do not include rownames by default. However, we can include our rownames as a variable using the parameter `rownames` in `as_tibble()`. ```r library(tibble) my_tibble <- as_tibble(my_data2, rownames = "Observation") my_tibble ``` ``` ## # A tibble: 4 x 5 ## Observation var1 var2 var3 var4 ## <chr> <dbl> <chr> <lgl> <dbl> ## 1 Obs1 1 a TRUE 3 ## 2 Obs2 2 b FALSE 2 ## 3 Obs3 3 c TRUE 1 ## 4 Obs4 4 d FALSE 0 ``` --- layout: true # Tidy Data Principles --- There are three rules required for data to be considered tidy * Each variable must have its own column * Each observation must have its own row * Each value must have its own cell --- Seems simple, but can sometimes be tricky! What's untidy about the following data?

  Hospital 	  Diseased 	  Healthy

  A 	  10 	  14

  B 	  15 	  18

  C 	  12 	  13

  D 	  5 	  16

 -- * **Observations:** the number of individuals at a given hospital and of a given disease status * **Variables:** the hospital, the disease status, the counts * **Values:** Hospital A, Hospital B, Hospital C, Hospital D, individual count values, *Disease Status Healthy*, *Disease Status Diseased* --- Problem: column headers are values, not variables! How can we tidy it up? --

  Hospital 	  Status 	  Count

  A 	  Diseased 	  10

  A 	  Healthy 	  14

  B 	  Diseased 	  15

  B 	  Healthy 	  18

  C 	  Diseased 	  12

  C 	  Healthy 	  13

  D 	  Diseased 	  5

  D 	  Healthy 	  16

 --- Another example:

  Country 	  Year 	  m1624 	  m2534 	  f1624 	  f2534

  A 	  2018 	  49 	  55 	  47 	  41

  B 	  2018 	  34 	  33 	  50 	  43

 -- * **Observations:** the number of individuals in a given country, in a given year, of a given gender, and in a given age group * **Variables:** Country, year, gender, age group, counts * **Values:** Country A, Country B, Year 2018, Gender "m", Gender "f", Age Group "1624", Age Group "2534", individual counts ---

  Country 	  Year 	  Gender 	  Age_Group 	  Counts

  A 	  2018 	  m 	  16-24 	  49

  A 	  2018 	  m 	  25-34 	  55

  A 	  2018 	  f 	  16-24 	  47

  A 	  2018 	  f 	  25-34 	  41

  B 	  2018 	  m 	  16-24 	  34

  B 	  2018 	  m 	  25-34 	  33

  B 	  2018 	  f 	  16-24 	  50

  B 	  2018 	  f 	  25-34 	  43

 --- ## How to tidy data? 1. Identify the observations, variables, and values 2. Ensure that each observation has its own row * Be careful for individual observations spread over multiple tables/Excel files/etc, or multiple types of observations within a single table (this would result in many empty cells) 3. Ensure that each variable has its own column * Be careful for variables spread over two columns, multiple variables within a single column, variables as rows 4. Ensure that each value has its own cell * Be careful for values as column headers --- ## Why tidy data? * Easier to read data * Easier to analyze and plot using standard software (required for `ggplot2`) * Easier to understand what the data represents * Fewer issues with missing values --- ## A final reference Hadley Wickham is the ultimate resource on tidy data principles. [Here is a fantastic reference going through all these principles in more detail and with more examples.](https://vita.had.co.nz/papers/tidy-data.pdf) --- layout: false class: inverse .sectionhead[Part 6: Managing Data] --- layout: true # Working Directory --- ## Seeing your working directory A **working directory** is the filepath R uses to save and look for data. You can check for your current working directory using `getwd()` ```r getwd() ``` ``` ## [1] "/Volumes/GoogleDrive/My Drive/Git Repos/STAT302/docs/LectureSlides/lectureslides2_fundamentals" ``` This location is where R will look by default! --- ## Changing your working directory You can change your working directory using `setwd()`. ```r setwd("/Users/Bryan/Desktop/STAT302/") ``` You can use the shorthand `..` to reference a parent directory relative to where you are now. ```r setwd("..") getwd() ``` ``` ## [1] "/Volumes/GoogleDrive/My Drive/Git Repos/STAT302/docs/LectureSlides" ``` We can also reference the current directory using the shorthand `.`. ```r setwd("./lectureslides2") ``` ```r getwd() ``` ``` ## [1] "/Volumes/GoogleDrive/My Drive/Git Repos/STAT302/docs/LectureSlides/lectureslides2_fundamentals" ``` --- ## Working directories and R Markdown Do not change your working directory inside R Markdown files! By default, R Markdown sets the filepath they are in as the working directory. Changing this can (will) mess up your analysis, and make your work less reproducible. --- ## Saving Data You can save single R objects as `.rds` files using `saveRDS()`, multiple R objects as `.RData` or `.rda` files using `save()`, and your entire workspace as `.RData` using `save.image()`. ```r object1 <- 1:5 object2 <- c("a", "b", "c") # save only object1 saveRDS(object1, file = "object1_only.rds") # save object1 and object2 save(object1, object2, file = "both_objects.RData") # save my entire workspace save.image(file = "entire_workspace.RData") ``` In general, I recommend using `.RData` for multiple objects, and I recommend against using `save.image()`, basically ever. `save.image()` should never be a part of your workflow. Personally, I only use it if I need to quickly close R and want to come back to exactly where I was later. (For example, a coffee shop I was working at closed). I will always delete the file later so it does not mess with my workflow. --- ## Loading Data You can load `.rds` files using `readRDS()` and `.Rdata` and `.rda` files using `load()`. ```r # load only object1 readRDS("object1_only.rds") # load object1 and object2 load("both_objects.RData") # load my entire workspace load("entire_workspace.RData") ``` --- ## Notes on Saving and Loading R Data The values in quotes are all filepaths, and by default, R will search for these objects in your current working directory. You can change where R searches for images by adjusting this filepath. For example, if you save your data in a `Data` subfolder within your working directory, you might try ```r load("./Data/my_data.RData") ``` --- ## Other types of data Often, you will read and write files as **c**omma **s**eparated **v**alues, or `.csv`. You can do this by navigating *File > Import Dataset* in the menu bar, but generally I recommend doing it manually using the `readr` package. You will need to do so if loading data is part of your work flow, such as if it is required for an R Markdown writeup. ```r library(readr) # read a .csv file in a "Data" subfolder read_csv("./Data/file.csv") # save a .csv file in a "Data" subfolder write_csv("./Data/data_output.csv") ``` `readr` can also handle many more types of data! See more details about `readr` using the fantastic cheat sheet available [here.](https://rstudio.com/resources/cheatsheets/) --- ## Working Directories Summary * Working directories are the default filepaths R uses to save and load files * When working in a `.Rmd`, your default filepath is wherever the `.Rmd` is stored, and you should leave it there * You can change your working directory with `setwd()`. * You can reference your current working directory using `.` and the parent directory of your current working directory using `..` For larger analysis projects, I recommend using R projects to automatically manage your working directory for you! --- layout: false layout: true # Projects --- Good file organization requires you to keep all your input data, R scripts, output data and results, and figures together. You can do this using **Projects**. You can create a project by going to *File > New Project*. If you want your project in a folder you have already created, select *Existing Directory*. If you want RStudio to automatically make you a new folder with a project, select *New Directory*. Then select *Empty Project* to create a standard project. This will create a `.Rproj` file on your computer. When working with a project, save and manage your work as usual. When you close and re-open R, *do so by double-clicking on your `.Rproj` file!* This will automatically open everything as you left it, except your environment will be fresh, helping with reproducibility. --- ## Benefits of Projects * Automatically manages your working directory, even if you move the project file * Remembers your working directory and command history, all the files you were working on are still open. * Helps with reproducibility. You can share R project files and the project will load on other computer exactly as it does on yours. * Helps keep your separate analyses separate. For example, you won't need to worry if you defined a variable `x` in multiple different analyses * Easy to integrate with version control such as git (more on this later!)


WDIFF(1) User Commands WDIFF(1) NAME wdiff - manual page for wdiff 1.1.2 SYNOPSIS wdiff2 [OPTION]... FILE1 FILE2 DESCRIPTION wdiff - Compute word differences by internally launching `mdiff -W'. This program exists mainly to support the now oldish `wdiff' syntax. Mandatory arguments to long options are mandatory for short options too. -C, --copyright display copyright then exit -1, --no-deleted inhibit output of deleted words -2, --no-inserted inhibit output of inserted words -3, --no-common inhibit output of common words -a, --auto-pager automatically calls a pager -h, --help display this help then exit -i, --ignore-case fold character case while comparing -l, --less-mode variation of printer mode for "less" -n, --avoid-wraps do not extend fields through newlines -p, --printer overstrike as for printers -q, --quiet inhibit the `mdiff' call message -s, --statistics say how many words deleted, inserted etc. -t, --terminal use termcap as for terminal displays -v, --version display program version then exit -w, --start-delete=STRING string to mark beginning of delete region -x, --end-delete=STRING string to mark end of delete region -y, --start-insert=STRING string to mark beginning of insert region -z, --end-insert=STRING string to mark end of insert region This program also tells how `mdiff' could have been called directly. AUTHOR Written by Franc,ois Pinard<EMAIL_ADDRESS>REPORTING BUGS Report bugs to<EMAIL_ADDRESS>COPYRIGHT Copyright © 1997, 1998, 1999 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. SEE ALSO The full documentation for wdiff is maintained as a Texinfo manual. If the info and wdiff programs are properly installed at your site, the com‐ mand info wdiff should give you access to the complete manual. wdiff 1.1.2 May 2012 WDIFF(1)


Uses of Package
javax.measure
Package
Description
Specifies Java packages for the programmatic, type safe handling
of quantities and their expression as values of units.
[OPTIONAL] Provides Formatting and Parsing functionality for units, quantities, dimensions or their textual representation.
[OPTIONAL] Provides quantitative properties or attributes of thing such as
mass, time, distance, heat, and angular separation.
[OPTIONAL] The Units of Measurement SPI.
-
ClassDescriptionProvides support for common binary prefixes to be used by units.Represents the dimension of a unit.Signals that a problem of some sort has occurred due to incommensurable of some quantities/units.Exception used to indicate a problem while dealing with units of measurement.Provides support for the 24 prefixes used in the metric system (decimal multiples and submultiples of units).A unit prefix is a specifier or mnemonic that is prepended to units of measurement to indicate multiples or fractions of the units.Represents a quantitative property of a phenomenon, body, or substance, that can be quantified by measurement.Signals that a problem of some sort has occurred due to the impossibility of constructing a converter between two units.Represents a determinate quantity (as of length, time, heat, or value) adopted as a standard of measurement.A converter of numeric values between different units.
-
ClassDescriptionException used to indicate a problem while dealing with units of measurement.Represents a quantitative property of a phenomenon, body, or substance, that can be quantified by measurement.Represents a determinate quantity (as of length, time, heat, or value) adopted as a standard of measurement.
-
ClassDescriptionRepresents a quantitative property of a phenomenon, body, or substance, that can be quantified by measurement.
-
ClassDescriptionRepresents the dimension of a unit.A unit prefix is a specifier or mnemonic that is prepended to units of measurement to indicate multiples or fractions of the units.Represents a quantitative property of a phenomenon, body, or substance, that can be quantified by measurement.Represents a determinate quantity (as of length, time, heat, or value) adopted as a standard of measurement.


Gurbaz blitz helps Afghanistan clinch T20 series win
by AFPTeenage opener Rahmanullah Gurbaz hit an attacking half-century to set up Afghanistan's 29-run series-clinching win over West Indies in the third Twenty20 international on Sunday.

They won the series 2-1 after losing the opening game and being swept in the preceding ODIs 3-0.
Paceman Naveen-ul-Haq took three wickets to choke the West Indies' chase despite a valiant 52 by wicketkeeper-batsman Shai Hope.
But it was the 17-year-old Gurbaz, a wicketkeeper-batsman, who stood out with his second T20I fifty after the Afghans were in early trouble at 12 for two.
Gurbaz, named man of the match, put on a crucial 50-run stand for the fourth wicket with former captain Asghar Afghan, who made 24, and surpassed his previous T20I best of 61.
He smashed six fours and five sixes before falling to West Indies skipper Kieron Pollard.
Pacemen Sheldon Cottrell, Kesrick Williams and Keemo Paul took two wickets each.
The West Indies lost regular wickets to falter in their chase against a disciplined Afghanistan attack that made the most of a slow track.
Hope, who was dropped on 11 by Naveen off Gulbadin Naib, completed his second T20I fifty but got little support from the other end.
Bowling all-rounder Karim Janat could not repeat his heroics from the second game where he claimed five wickets and scored 26 runs, but was named man of the series.
The two teams will next play a one-off Test starting November 27.


For each ShinobiChart, one single SChartCanvas will exist to contain the drawing of all of the axes and series.
Titles, legends and other chart level objects appear outside of this area in the ShinobiChart view. The canvas is responsible for managing the layers that make up the axis and series.
The canvas itself has no objects drawn directly onto it. The canvas decides how much space it will need to draw any axis and their labels. The plot area view is then sized and laid down to draw the series. This is followed by the SChartCanvasOverlay layer that is used to draw the axes at the highest level.
You should never need to modify this object directly. We've included information on this class as we refer to the chart canvas at various points in our documentation.
See Also: Inherited members from UIKit.UIView.
|
|
A constructor that initializes the object from the data stored in the unarchiver object. | |
|
|
DEPRECATED - This should be moved into a private header. |
|
|
Constructor to call on derived classes to skip initialization and merely allocate the object. | |
|
|
A constructor used when creating managed representations of unmanaged objects. |
|
|
Chart | ShinobiChart . The chart which contains this canvas |
| [read-only] override |
ClassHandle | IntPtr . The handle for this class. |
|
|
GLView | SChartGLView . This is the layer upon which we draw all of our chart series and also any chart annotations. |
|
|
OrientationChanged | bool . DEPRECATED - This should be moved into a private header. |
|
|
Overlay | SChartCanvasOverlay . This is the layer where we render things like the crosshair. |
|
|
RedrawGL | bool . DEPRECATED - This should be moved into a private header. |
|
|
ReloadedData | bool . DEPRECATED - This should be moved into a private header. |
|
|
Underlay | SChartCanvasUnderlay . The underlay is the layer upon which we draw all of our axes. |
|
|
UnderlayForAnnotations | UIKit.UIView . This is the layer where we draw all of our annotation views that are visualised under our data |
|
|
EnablePanning
(bool)DEPRECATED - This should be moved into a private header. |
A constructor that initializes the object from the data stored in the unarchiver object.Syntax
[Foundation.Export("initWithCoder:")]
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)]
public SChartCanvas (Foundation.NSCoder coder)Parameters
- coder
- The unarchiver object
Remarks
This constructor is provided to allow the class to be initialized from an unarchiver (for example, during NIB deserialization).Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
Constructor to call on derived classes to skip initialization and merely allocate the object.Syntax
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)]
protected SChartCanvas (Foundation.NSObjectFlag t)Parameters
- t
- Unused sentinel value
Remarks
You should not invoke this method directly.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
A constructor used when creating managed representations of unmanaged objects.Syntax
[System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Advanced)]
protected SChartCanvas (IntPtr handle)Parameters
- handle
- Handle of the unmanaged object
Remarks
You should not invoke this method directly.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
DEPRECATED - This should be moved into a private header.Syntax
[Foundation.Export("initWithFrame:usingChart:")]
[System.Obsolete("", false)]
public SChartCanvas (CoreGraphics.CGRect frame, ShinobiChart parentChart)Parameters
- frame
- The frame rectangle for the canvas, measured in points.
- parentChart
- The chart which will contain the new canvas.
Remarks
Initializes and returns a newly allocated canvas object with the specified frame rectangle.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
The chart which contains this canvasSyntax
[get: Foundation.Export("chart", ObjCRuntime.ArgumentSemantic.UnsafeUnretained)]
[set: Foundation.Export("setChart:", ObjCRuntime.ArgumentSemantic.UnsafeUnretained)]
public virtual ShinobiChart Chart { get; set; }Value
Documentation for this section has not yet been entered.Remarks
Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
The handle for this class.Syntax
public override IntPtr ClassHandle { get; }Value
Documentation for this section has not yet been entered.Remarks
Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
Releases unmanaged resources.Syntax
Parameters
- disposing
- True if called by Dispose, false if called from a finalizer
Remarks
Documentation for this section has not yet been entered.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
DEPRECATED - This should be moved into a private header.Syntax
[Foundation.Export("enablePanning:")]
[System.Obsolete("", false)]
public virtual void EnablePanning (bool enable)Parameters
- enable
- If set to true, panning will be enabled on the canvas.
Remarks
Sets whether panning is enabled on the chart canvas.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
This is the layer upon which we draw all of our chart series and also any chart annotations.Syntax
[get: Foundation.Export("glView", ObjCRuntime.ArgumentSemantic.Strong)]
[set: Foundation.Export("setGlView:", ObjCRuntime.ArgumentSemantic.Strong)]
public virtual SChartGLView GLView { get; set; }Value
Documentation for this section has not yet been entered.Remarks
This layer is rendered using openGL and therefore uses GL based coordinates.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
DEPRECATED - This should be moved into a private header.Syntax
[System.Obsolete("", false)]
[get: Foundation.Export("orientationChanged", ObjCRuntime.ArgumentSemantic.UnsafeUnretained)]
[set: Foundation.Export("setOrientationChanged:", ObjCRuntime.ArgumentSemantic.UnsafeUnretained)]
public virtual bool OrientationChanged { get; set; }Value
Documentation for this section has not yet been entered.Remarks
We set this property to true if the chart responds to device rotations, and we rotate the device.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
This is the layer where we render things like the crosshair.Syntax
[get: Foundation.Export("overlay", ObjCRuntime.ArgumentSemantic.Strong)]
[set: Foundation.Export("setOverlay:", ObjCRuntime.ArgumentSemantic.Strong)]
public virtual SChartCanvasOverlay Overlay { get; set; }Value
Documentation for this section has not yet been entered.Remarks
Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
DEPRECATED - This should be moved into a private header.Syntax
[System.Obsolete("", false)]
[get: Foundation.Export("redrawGL")]
[set: Foundation.Export("setRedrawGL:")]
public virtual bool RedrawGL { get; set; }Value
Documentation for this section has not yet been entered.Remarks
If this property is set to true, we will refresh the canvas in the next draw cycle. We set this property to true when we call ShinobiChart.RedrawChart and pass true in as the argument.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
DEPRECATED - This should be moved into a private header.Syntax
[System.Obsolete("", false)]
[get: Foundation.Export("reloadedData", ObjCRuntime.ArgumentSemantic.UnsafeUnretained)]
[set: Foundation.Export("setReloadedData:", ObjCRuntime.ArgumentSemantic.UnsafeUnretained)]
public virtual bool ReloadedData { get; set; }Value
Documentation for this section has not yet been entered.Remarks
We set this property to true when we reload data in the chart.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
The underlay is the layer upon which we draw all of our axes.Syntax
[get: Foundation.Export("underlay", ObjCRuntime.ArgumentSemantic.Strong)]
[set: Foundation.Export("setUnderlay:", ObjCRuntime.ArgumentSemantic.Strong)]
public virtual SChartCanvasUnderlay Underlay { get; set; }Value
Documentation for this section has not yet been entered.Remarks
We use pixel based coordinates on the underlay.Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>
This is the layer where we draw all of our annotation views that are visualised under our dataSyntax
[get: Foundation.Export("underlayForAnnotations", ObjCRuntime.ArgumentSemantic.Strong)]
[set: Foundation.Export("setUnderlayForAnnotations:", ObjCRuntime.ArgumentSemantic.Strong)]
public virtual UIKit.UIView UnderlayForAnnotations { get; set; }Value
Documentation for this section has not yet been entered.Remarks
Requirements
Namespace: ShinobiCharts
Assembly: ShinobiCharts (in ShinobiCharts.dll)
Assembly Versions: <IP_ADDRESS>


Looky is for people who love to experience the culture of a destination as a hometown local would.
Stay up to date on all he lasted news.


Library Launchpad
The Richard B. Harrison Community Library hosted an outreach event for elementary school children, and we partnered with AIAA to create activities for the children. They built space bases out of paper and popsicle sticks, made bottle rockets, and went through an astronaut training obstacle course.
Personally, I was expecting all the space bases to be covered in guns, but these children didn't seem as militaristic as I'd expected. The first one I talked said she was building a robot, and when asked what kind of robot, said 'a PEACEFUL robot'. It was probably good for the robot to be peaceful, since a robot made of construction paper may not hold up well in a fight.
by Nathan Yinger - 17 Apr 2015


DevGuide
Discover More Popular Tutorials
Get 3 awesome tutorials on any web development topic
Click a category to start
Design
Front-End
Back-End
3 Most Popular Tutorials
Check out 110 more tutorials at Manual


{{if .PrevInSection}}
{{end}}
{{if .NextInSection}}
{{end}}
{{/* TODO: This hides search until the integrated sites are live. It is safe to remove at that point. */}}
{{/* TODO: backport thumbnail animation to base theme, removing fadeIn if no longer used. */}}


---
layout: default
---
{% include publications.html %}
Education
- 2009 - 2014: Bachelor of Pharmacy at Hanoi University of Pharmacy (HUP), Vietnam
- 2015 - 2017: M.S in Pharmacy at Dongguk University, South Korea
- 2017 - 2021: Ph.D. in Animal Metabolism, Chonnam National University, South Korea


{% extends "base.html" %} {% block body_content %}
Porick is yet another IRC Quotes web application, designed to replace Chirpy!
Start browsing


Info about Graduated
Id:
First Name:
Last Name:
Company:
Position:
Graduation Year from Bachelor:
Graduation Year from Master:
Graduation Year from Specialist:
Photo:
Edit
Remove
Go to history


Fill out the form below to become a member of STARS Computing Corps @ Temple University!
QuestionFill out the form below to become a member of STARS Computing Corps @ Temple University!
QuestionLook out for a welcome email from us! In the meantime join our slack @ TU STARS Slack and download slack for mac here and for windows here!


In the North Central Coast, MPA monitoring is organized by 9 Ecosystem Features. In the following exercise, we’d like to understand how your project maps onto this framework.
Please select the Ecosystem Feature(s) in which your project collects ecological or human use data. If your project does not collect ecological or human use data in these Ecosystem Features, please select the Contextual Data option below.
Please note that if you select the Contextual Data option, you will not be able to select any additional Ecosystem Features below.
Please also note that MPA monitoring is designed to assess both changes in ecosystem condition through time and effectiveness of MPA design and management decisions. In this survey, we are focusing on monitoring to assess changes in ecosystem condition.
Click on the information button for definitions of each Ecosystem Feature.


- The thumbnails have a Ref ID, and if you'd like to support our site, you can register to a faucet by clicking on the image. You can also buy (rent) refferals.
- The Claim button has no Ref ID and takes you directly to faucets. Use it for your daily claiming!


http://www.speakers-podium.com/susangranger.
Susan Granger's review of "JOE GOULD'S SECRET" (USA Films)
Actor/director/producer Stanley Tucci ("Big Night," "The Impostors") specializes in gentle, cerebral, low-budget films about male friendships and their consequences. This true story by Howard Rodman celebrates the relationship between bohemian Joe Gould, who had a gift of gab, and courtly Joseph Mitchell, who wrote his story in "The New Yorker." Tucci plays the North Carolina-born Mitchell who specialized in literary portraits of the denizens of New York City in the 1940s, while Ian Holm is disheveled, cantankerous Joe Gould, a homeless Harvard graduate sometimes known as Professor Seagull for his penchant for reciting poetry in seagull cawing. Gould was also the author of "The Oral History of the World," which he would offer up in return for $2 contributions to "The Joe Gould Fund," since a man needs whiskey, beer, and cigarettes if he's going to talk all night. Mitchell made the demented panhandler, a tormented soul, into a Greenwich Village celebrity. Mitchell was a gifted listener and his wife, played by Hope Davis, was a noted photographer. Stanley Tucci composes scenes in the style of the great street photographers of old New York, but this film is not cinematic in scope, relying, instead, on long, talky scenes as opposed to quick cuts. And the titular secret is part of the enigmatic character study, not a mystery. Stanley Tucci delivers a droll, deliberately understated performance, while Ian Holm, not inappropriately, chews the scenery, drawing attention by table-top proclamations like: "In the winter I'm a Buddhist; in the summer, I'm a nudist." Susan Sarandon and Steve Martin do distracting cameos. On the Granger Movie Gauge of 1 to 10, "Joe Gould's Secret" is a rambling, poignant, bittersweet 7, aimed at sedate art house audiences.
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


qdbus(1) User commands qdbus(1) NAME qdbus - a communication-interface for qt-based applications SYNOPSIS qdbus [--system] [--literal] [servicename] [path] [method] [args] DESCRIPTION qdbus provides an interface to Qt-based applications communicating over D-Bus. See http://www.freedesktop.org/software/dbus/ for more informa‐ tion about the big picture. By default qdbus will list all service names of services that are running and you can manipulate at the moment. You can also manipulate and run several types of methods for each dbus-enabled application. servicename the service to connect to (e.g., org.freedesktop.DBus) path the path to the object (e.g., /) method the method to call, with or without the interface args arguments to pass to the call OPTIONS --system connect to the system bus --literal print replies literally EXAMPLE Here is an example of using qdbus to list all status information about a service: % qdbus org.ktorrent.ktorrent SEE ALSO dbus-cleanup-sockets(1), dbus-launch(1), dbus-send(1), dbus-daemon(1), dbus-monitor(1), dbus-uuidgen(1) Tue, 02 Feb 2010 23:35:52 +0100 qdbus(1)


Editorial: Refugee, migrant flows
The government should marshal alL of its tools of communication to explain its plan and to protect local societies from various deceptions.
by TANEA TeamThere can be no management of the refugee and migrant crisis without agreements on the basics
Some of the necessary understandings are that these people cannot be allowed to drown at sea and that Aegean islands across from the Turkish border cannot shoulder the entire burden, as if the entire issue does not concern the rest of the country but only Lesvos, Samos, and Chios.
Έγκλημα στο Κορωπί : «Ακούω τη φωνή της να ζητάει βοήθεια»
Clearly it is necessary to have a plan to distribute geographically the refugees and migrants and put them up in structures that will not offend their human dignity or the dignity of the country.
Obviously, local communities should not slip into attitudes and behaviours that have been adopted by EU countries when the issue of migrant distribution was raised at the EU-wide level.
Mayors cannot transform into little Orbans.
That does not mean that the government should not marshal all of its tools of communication both in order to explain its plan and to protect local societies from various deceptions surrounding the refugee and migrant issue - such as the idea that the presence of migrants will result in a higher crime rate.
It also does not mean that the government should not exhaust all means to get the EU to assume its responsibilities.
The refugee and migrant issue cannot be solved or even confronted without the active participation of the European Union.


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import uk.gov.hmrc.apirevocationfrontend.views.html.MainView @this(main: MainView) @()(implicit request: Request[_], messages: Messages, appConfig : FrontendAppConfig, footerConfig: FooterConfig) @body = {
This application no longer has authority to interact with HMRC on your behalf.
You can grant authority again in the application itself.
} @main(title = Some("Authority removed")) { @body }


?-
Lisianthius
longifolius
L
R.
E.
WEAVER,
JR.
19
~]
Duke
University
Herbarium
'
THE
NEW
YORI^?6OTANI0AL
GARDEN
EXPLORATION
OF
JAMAICA
1/1/2Vicinity
of
Kingston
N.
L.
Britton,
Collector
New
York
Botanical
Garden
Ib34b13
1624693
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


Active Record — Object-relation mapping put on rails
Active Record connects business objects and database tables to create a persistable domain model where logic and data are presented in one wrapping. It’s an implementation of the object-relational mapping (ORM) pattern by the same name as described by Martin Fowler:
"An object that wraps a row in a database table or view, encapsulates the database access, and adds domain logic on that data."
Active Record’s main contribution to the pattern is to relieve the original of two stunting problems: lack of associations and inheritance. By adding a simple domain language-like set of macros to describe the former and integrating the Single Table Inheritance pattern for the latter, Active Record narrows the gap of functionality between the data mapper and active record approach.
A short rundown of the major features:
- Automated mapping between classes and tables, attributes and columns.
class Product < ActiveRecord::Base; end ...is automatically mapped to the table named "products", such as: CREATE TABLE products ( id int(11) NOT NULL auto_increment, name varchar(255), PRIMARY KEY (id) ); ...which again gives Product#name and Product#name=(new_name)
- Associations between objects controlled by simple meta-programming macros.
class Firm < ActiveRecord::Base has_many :clients has_one :account belongs_to :conglomorate end
- Aggregations of value objects controlled by simple meta-programming macros.
class Account < ActiveRecord::Base composed_of :balance, :class_name => "Money", :mapping => %w(balance amount) composed_of :address, :mapping => [%w(address_street street), %w(address_city city)] end
- Validation rules that can differ for new or existing objects.
class Account < ActiveRecord::Base validates_presence_of :subdomain, :name, :email_address, :password validates_uniqueness_of :subdomain validates_acceptance_of :terms_of_service, :on => :create validates_confirmation_of :password, :email_address, :on => :create end
- Callbacks as methods or queues on the entire lifecycle (instantiation,
saving, destroying, validating, etc).
class Person < ActiveRecord::Base def before_destroy # is called just before Person#destroy CreditCard.find(credit_card_id).destroy end end class Account < ActiveRecord::Base after_find :eager_load, 'self.class.announce(#{id})' end
- Observers for the entire lifecycle
class CommentObserver < ActiveRecord::Observer def after_create(comment) # is called just after Comment#save<EMAIL_ADDRESS>comment) end end
- Inheritance hierarchies
class Company < ActiveRecord::Base; end class Firm < Company; end class Client < Company; end class PriorityClient < Client; end
- Transactions
# Database transaction Account.transaction do david.withdrawal(100) mary.deposit(100) end
- Reflections on columns, associations, and aggregations
reflection = Firm.reflect_on_association(:clients) reflection.klass # => Client (class) Firm.columns # Returns an array of column descriptors for the firms table
- Direct manipulation (instead of service invocation)
So instead of (Hibernate example):
long pkId = 1234; DomesticCat pk = (DomesticCat) sess.load( Cat.class, new Long(pkId) ); // something interesting involving a cat... sess.save(cat); sess.flush(); // force the SQL INSERT
Active Record lets you:
pkId = 1234 cat = Cat.find(pkId) # something even more interesting involving the same cat... cat.save
- Database abstraction through simple adapters (~100 lines) with a shared
connector
ActiveRecord::Base.establish_connection(:adapter => "sqlite", :database => "dbfile") ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "localhost", :username => "me", :password => "secret", :database => "activerecord" )
Learn more and read about the built-in support for MySQL, PostgreSQL, SQLite, Oracle, SQLServer, and DB2.
- Logging support for Log4r and Logger
ActiveRecord::Base.logger = Logger.new(STDOUT) ActiveRecord::Base.logger = Log4r::Logger.new("Application Log")
- Database agnostic schema management with Migrations
class AddSystemSettings < ActiveRecord::Migration def self.up create_table :system_settings do |t| t.string :name t.string :label t.text :value t.string :type t.integer :position end SystemSetting.create :name => "notice", :label => "Use notice?", :value => 1 end def self.down drop_table :system_settings end end
Simple example (1/2): Defining tables and classes (using MySQL)
Data definitions are specified only in the database. Active Record queries the database for the column names (that then serves to determine which attributes are valid) on regular object instantiation through the new constructor and relies on the column names in the rows with the finders.
# CREATE TABLE companies ( # id int(11) unsigned NOT NULL auto_increment, # client_of int(11), # name varchar(255), # type varchar(100), # PRIMARY KEY (id) # )
Active Record automatically links the “Company” object to the “companies” table
class Company < ActiveRecord::Base has_many :people, :class_name => "Person" end class Firm < Company has_many :clients def people_with_all_clients clients.inject([]) { |people, client| people + client.people } end end
The foreign_key is only necessary because we didn’t use “firm_id“ in the data definition
class Client < Company belongs_to :firm, :foreign_key => "client_of" end # CREATE TABLE people ( # id int(11) unsigned NOT NULL auto_increment, # name text, # company_id text, # PRIMARY KEY (id) # )
Active Record will also automatically link the “Person” object to the “people” table
class Person < ActiveRecord::Base belongs_to :company end
Simple example (2/2): Using the domain
Picking a database connection for all the Active Records
ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "localhost", :username => "me", :password => "secret", :database => "activerecord" )
Create some fixtures
firm = Firm.new("name" => "Next Angle") # SQL: INSERT INTO companies (name, type) VALUES("Next Angle", "Firm") firm.save client = Client.new("name" => "37signals", "client_of" => firm.id) # SQL: INSERT INTO companies (name, client_of, type) VALUES("37signals", 1, "Firm") client.save
Lots of different finders
# SQL: SELECT * FROM companies WHERE id = 1 next_angle = Company.find(1) # SQL: SELECT * FROM companies WHERE id = 1 AND type = 'Firm' next_angle = Firm.find(1) # SQL: SELECT * FROM companies WHERE id = 1 AND name = 'Next Angle' next_angle = Company.find(:first, :conditions => "name = 'Next Angle'") next_angle = Firm.find_by_sql("SELECT * FROM companies WHERE id = 1").first
The supertype, Company, will return subtype instances
Firm === next_angle
All the dynamic methods added by the has_many macro
next_angle.clients.empty? # true next_angle.clients.size # total number of clients all_clients = next_angle.clients
Constrained finds makes access security easier when ID comes from a web-app
# SQL: SELECT * FROM companies WHERE client_of = 1 AND type = 'Client' AND id = 2 thirty_seven_signals = next_angle.clients.find(2)
Bi-directional associations thanks to the “belongs_to“ macro
thirty_seven_signals.firm.nil? # true
Philosophy
Active Record attempts to provide a coherent wrapper as a solution for the inconvenience that is object-relational mapping. The prime directive for this mapping has been to minimize the amount of code needed to build a real-world domain model. This is made possible by relying on a number of conventions that make it easy for Active Record to infer complex relations and structures from a minimal amount of explicit direction.
Convention over Configuration:
- No XML-files!
- Lots of reflection and run-time extension
- Magic is not inherently a bad word
Admit the Database:
- Lets you drop down to SQL for odd cases and performance
- Doesn’t attempt to duplicate or replace data definitions
Download
The latest version of Active Record can be found at
Documentation can be found at
Installation
The prefered method of installing Active Record is through its GEM file. You’ll need to have RubyGems installed for that, though. If you have, then use:
% [sudo] gem install activerecord-1.10.0.gem
You can also install Active Record the old-fashioned way with the following command:
% [sudo] ruby install.rb
from its distribution directory.
License
Active Record is released under the MIT license.
Support
The Active Record homepage is www.rubyonrails.com. You can find the Active Record RubyForge page at rubyforge.org/projects/activerecord. And as Jim from Rake says:
Feel free to submit commits or feature requests. If you send a patch, remember to update the corresponding unit tests. If fact, I prefer new feature to be submitted in the form of new unit tests.
For other information, feel free to ask on the rubyonrails-talk (groups.google.com/group/rubyonrails-talk) mailing list.


Grand Magister Valdis:
What? You want to quit? Oh well, I guess you and your Clan have better things to do...


Id: 470
Name: Alien Spa Employee
Status: Alive
Species: Alien
Type:
Gender: Male
OriginName: unknown
OriginUrl:
LocationName: Alien Day Spa
LocationUrl: https://rickandmortyapi.com/api/location/76
Image: https://rickandmortyapi.com/api/character/avatar/470.jpeg
Episode: ['https://rickandmortyapi.com/api/episode/27']
Url: https://rickandmortyapi.com/api/character/470
Created: 2018-05-22T17:01:59.602Z


Enter the base word for the cheer:
Enter the school:
Enter the number you want to repeat:
How many times?


Hi. I'm David, combat veteran with a passion for technology, gadgets, programmin, and continuous learning.
I like challenging and pushing my mind to its limits. I'm a little obsessed with self-development and learning new technologies. I love to tap into my artistic/creative side and create beautiful websites. I love to fill my mind with as much knowledge as possible to bring and share value with others.
As much as I like to play on the frontend, I carry that curiosity to the server side of things as well. I have to know why things work the way they do. I find it fascinating to know what is happening underneath the hood.
I feel lucky to be in a field where there is always something new to learn and to tinker with. I'm looking forward to the new CSS Grid system. The developer community is amazing, I am honored to be part of this great community.


Exotic Nutrition's Silent Runner Wheel 12" is the most innovative wheel on the market for its safety features and whisper-silent spin. You'll love this wheel's silence, safety, and durability.
Suggested for: Sugar Gliders, female rats, hamsters, and similar-sized animals


{% extends 'layouts/layout.html' %} {% block pageTitle %} Example - passing data from page to page - step 5 {% endblock %} {% block beforeContent %} {{ breadcrumb({ items: [ { href: "/docs", text: "Home" } ], href: "/docs/how-tos", text: "How to guides" }) }} {% endblock %} {% block content %}
By submitting this notification you are confirming that, to the best of your knowledge, the details you are providing are correct.


{% extends "cms/base.html" %} {% load cms_tags wagtailcore_tags %} {% block main %}
COTR is funded by a grant from the Arts and Humanities Research Council and is a collaboration between King’s College London, the University of Glasgow and the University of Edinburgh, as well as The National Records of Scotland and Newbattle Abbey College.


2020 Grammy Awards: Full list of nominees
by Sanya AgunbiadeThe full list of nominees for the 2020 Grammy nominations has been released.
The nomination list, which was announced on Wednesday had the Lizzo leading with eight nominations, followed by Lil Nas X and Billie Eilish, who earned six nominations.
Artists with five nominations included Ariana Grande, H.E.R. and Finneas O’Connell.
Also, Burna Boy’s album,’ African Giant’ was nominated for Grammy Award alongside Gece ‘Altin Gun’ and Celia ‘Angelique Kidjo
See the full list of nominees below:
Record Of The Year
“Hey, Ma” — Bon Iver
“Bad Guy” — Billie Eilish
“7 Rings” — Ariana Grande
“Hard Place” — H.E.R.
“Talk” — Khalid
“Old Town Road” — Lil Nas X Featuring Billy Ray Cyrus
“Truth Hurts” — Lizzo
“Sunflower” — Post Malone & Swae Lee
Album Of The Year
“I, I” — Bon Iver
“Norman F—ing Rockwell!” — Lana Del Rey
“When We All Fall Asleep, Where Do We Go?” — Billie Eilish
“Thank U, Next” — Ariana Grande
“I Used To Know Her” — H.E.R.
“7” — Lil Nas X
“Cuz I Love You” (Deluxe) — Lizzo
“Father of the Bride” — Vampire Weekend
Song Of The Year
“Always Remember Us This Way” — Natalie Hemby, Lady Gaga, Hillary Lindsey & Lori McKenna, songwriters (Lady Gaga)
“Bad Guy” — Billie Eilish O’Connell & Finneas O’Connell, songwriters (Billie Eilish)
“Bring My Flowers Now” — Brandi Carlile, Phil Hanseroth, Tim Hanseroth & Tanya Tucker, songwriters (Tanya Tucker)
“Hard Place” — Ruby Amanfu, Sam Ashworth, D. Arcelious Harris. H.E.R. & Rodney Jerkins, songwriters (H.E.R.)
“Lover” — Taylor Swift, songwriter (Taylor Swift)
“Norman F—ing Rockwell” — Jack Antonoff & Lana Del Rey, songwriters (Lana Del Rey)
“Someone You Loved” — Tom Barnes, Lewis Capaldi, Pere Kelleher, Benjamin Kohn & Sam Roman, songwriters (Lewis Capaldi)
“Truth Hurts” — Steven Cheung, Eric Frederic, Melissa Jefferson & Jesse Saint John, songwriters (Lizzo)
Best New Artist
Black Pumas
Billie Eilish
Lil Nas X
Lizzo
Maggie Rogers
Rosalía
Tank and the Bangas
Yola
POP FIELD
Best Pop Solo Performance:
“Spirit” — Beyoncé
“Bad Guy” — Billie Eilish
“7 Rings” — Ariana Grande
“Truth Hurts” — Lizzo
“You Need To Calm Down” — Taylor Swift
Best Pop Duo/Group Performance:
“Boyfriend” — Ariana Grande & Social House
“Sucker” — Jonas Brothers
“Old Town Road” — Lil Nas X & Billy Ray Cyrus
“Señorita” — Shawn Mendes & Camila Cabello
Best Traditional Pop Vocal Album:
Sì — Andrea Bocelli
Love (Deluxe Edition) — Michael Bublé
Look Now — Elvis Costello & The Imposters
A Legendary Christmas — John Legend
Walls — Barbra Streisand
Best Pop Vocal Album:
The Lion King: The Gift — Beyoncé
When We All Fall Asleep, Where Do We Go — Billie Eilish
Thank U, Next — Ariana Grande
No. 6 Collaborations Project — Ed Sheeran
Lover — Taylor Swift
DANCE/ELECTRONIC FIELD
Best Dance Recording:
“Linked” — Bonobo
“Got To Keep On” — The Chemical Brothers
“Piece Of Your Heart” — Meduza & Goodboys
“Underwater” — Rüfüs Du Sol
“Midnight Hour” — Skrillex & Boys Noize With Ty Dolla $ign
Best Dance/Electronic Album:
LP5 — Apparat
No Geography — The Chemical Brothers
Hi This Is Flume (Mixtape) — Flume
Solace — Rüfüs Du Sol
Weather — Tycho
CONTEMPORARY INSTRUMENTAL MUSIC
Best Contemporary Instrumental Album:
Ancestral Recall — Christian Scott aTunde Adjuah
Star People Nation — Theo Croker
Beat Music! Beat Music! Beat Music! — Mark Guiliana
Elevate — Lettuce
Mettavolution — Rodrigo y Gabriela
ROCK
Best Rock Performance:
“Pretty Waste” — Bones UK
“This Land” — Gary Clark Jr.
“History Repeats” — Brittany Howard
“Woman” — Karen O & Danger Mouse
“Too Bad” — Rival Sons
Best Metal Performance:
“Astorolus – The Great Octopus” — Candlemass ft. Tony Iommi
“Humanicide” — Death Angel
“Bow Down” — I Prevail
“Unleashed” — Killswitch Engage
“7empest” — Tool
Best Rock Song:
“Fear Inoculum” — Danny Carey, Justin Chancellor, Adam Jones & Maynard James Keenan, Songwriters (Tool)
“Give Yourself A Try” — George Daniel, Adam Hann, Matthew Healy & Ross Macdonald, Songwriters (The 1975)
“Harmony Hall” — Ezra Koenig, Songwriter (Vampire Weekend)
“History Repeats” — Brittany Howard, Songwriter (Brittany Howard)
“This Land” — Gary Clark Jr., Songwriter (Gary Clark Jr.)
Best Rock Album:
Amo — Bring Me The Horizon
Social Cues — Cage The Elephant
In The End — The Cranberries
Trauma — I Prevail
Feral Roots — Rival Sons
ALTERNATIVE
Best Alternative Music Album:
U.F.O.F. — Big Theif
Assume Form — James Blake
i,i — Bon Iver
Father of the Bride — Vampire Weekend
Anima — Thom Yorke
R&B
Best R&B Performance:
“Love Again” — Daniel Caesar & Brandy
“Could’ve Been” — H.E.R. & Bryson Tiller
“Exactly How I Feel” — Lizzo & Gucci Mane
“Roll Some Mo” — Lucky Daye
“Come Home” — Anderson .Paak & André 300
Best Traditional R&B Performance:
“Time Today” — BJ The Chicago Kid
“Steady Love” — India.Arie
“Jerome” — Lizzo
“Real Games” — Lucky Daye
“Built For Love” — PJ Morton & Jazmine Sullivan
Best R&B Song:
“Could’ve Been” — Dernst Emile Ii, David “Swagg R’celious” Harris, H.E.R. & Hue “Soundzfire” Strother, Songwriters (H.E.R. Ft. Bryson Tiller)
“Look At Me Now” — Emily King & Jeremy Most, Songwriters (Emily King)
“No Guidance” — Chris Brown, Tyler James Bryant, Nija Charles, Aubrey Graham, Anderson Hernandez, Michee Patrick Lebrun, Joshua Lewis, Noah Shebib & Teddy Walton, Songwriters (Chris Brown Ft. Drake)
“Roll Some Mo” — David Brown, Dernst Emile Ii & Peter Lee Johnson, Songwriters (Lucky Daye)
“Say So” — Pj Morton, Songwriter (Pj Morton Ft. Jojo)
Best Urban Contemporary Album:
Apollo XXI — Steve Lacy
Cuz I Love You (Deluxe) — Lizzo
Overload — Georgia Anne Muldrow
Saturn — Nao
Being Human In Public — Jessie Reyez
Best R&B Album:
1123 — BJ The Chicago Kid
Painted — Lucky Daye
Ella Mai — Ella Mai
Paul — PJ Morton
Venture — Anderson .Paak
RAP
Best Rap Performance:
“Middle Child” — J.Cole
“Suge” — DaBaby
“Down Bad” — Dreamville ft. J.I.D, Bas, J. Cole, Earthgang & Young Nudy
“Racks In The Middle” — Nipsey Hussle ft. Roddy Ricch & Hit-boy
“Clout” — Offset ft. Cardi B
Best Rap/Sung Performance:
“Higher” — DJ Khaled ft. Nipsey Hussle & John Legend
“Drip Too Hard” — Lil Baby & Funna
“Panini” — Lil Nas X
“Ballin” — Mustard ft. Roddy Ricch
“The London” — Young Thug ft. J. Cole & Travis Scott
Best Rap Song:
“Bad Idea” — Chancelor Bennett, Cordae Dunston, Uforo Ebong & Daniel Hackett, songwriters (Ybn Cordae ft. Chance The Rapper)
“Gold Roses” — Noel Cadastre, Aubrey Graham, Anderson Hernandez, Khristopher Riddick-tynes, William Leonard Roberts Ii, Joshua Quinton Scruggs, Leon Thomas Iii & Ozan Yildirim, songwriters (Rick Ross ft. Drake)
“A Lot” — Jermaine Cole, Dacoury Natche, 21 Savage & Anthony White, songwriters (21 Savage ft. J. Cole)
“Racks In The Middle” — Ermias Asghedom, Dustin James Corbett, Greg Allen Davis, Chauncey Hollis, Jr. & Rodrick Moore, songwriters (Nipsey Hussle ft. Roddy Ricch & Hit-boy)
“Suge” — Dababy, Jetsonmade & Pooh Beatz, songwriters (Dababy)
Best Rap Album:
Revenge Of The Dreamers III — Dreamville
Championships — Meek Mill
i am > i was — 21 Savage
IGOR — Tyler, The Creator
The Lost Boy — YBN Cordae
COUNTRY
Best Country Solo Performance:
“All Your’n” — Tyler Childers
“Girl Goin’ Nowhere” — Ashley McBryde
“Ride Me Back Home” — Willie Nelson
“God’s Country” — Blake Shelton
“Bring My Flowers Now” — Tanya Tucker
Best Country Duo/Group Performance:
“Brand New Man” — Brooks & Dunn with Luke Combs
“I Don’t Remember Me (Before You)” — Brothers Osborne
“Speechless” — Dan & Shay
“The Daughters” — Little Big Town
“Common” — Maren Morris ft. Brandi Carlile
Best Country Song:
“Bring My Flowers Now” — Brandi Carlile, Phil Hanseroth, Tim Hanseroth & Tanya Tucker, Songwriters (Tanya Tucker)
“Girl Goin’ Nowhere” — Jeremy Bussey & Ashley Mcbryde, Songwriters (Ashley Mcbryde)
“It All Comes Out In The Wash” — Miranda Lambert, Hillary Lindsey, Lori Mckenna & Liz Rose, Songwriters (Miranda Lambert)
“Some Of It” — Eric Church, Clint Daniels, Jeff Hyde & Bobby Pinson, Songwriters (Eric Church)
“Speechless” — Shay Mooney, Jordan Reynolds, Dan Smyers & Laura Veltz, Songwriters (Dan + Shay)
Best Country Album:
Desperate Man — Eric Church
Stronger Than The Truth — Reba McEntire
Interstate Gospel — Pistol Annies
Center Point Road — Thomas Rhett
While I’m Livin’ — Tanya Tucker
NEW AGE
Best New Age Album:
Fairy Dreams — David Arkenstone
Homage To Kindness — David Darling
Wings — Peter Kater
Verve — Sebastian Plano
Deva — Deva Premal
JAZZ
Best Improvised Jazz Solo:
“Elsewhere” — Melissa Aldana, soloist
“Sozinho” — Randy Brecker, soloist
“Tomorrow Is The Question” — Julian Lage, soloist
“The Windup” — Brandford Marsalis, soloist
“Sightseeing” — Christian McBride, soloist
Best Jazz Vocal Album:
Thirsty Ghost — Sara Gazarek
Love & Liberation — Jazzmeia Horn
Alone Together — Catherine Russell
12 Little Spells — Esperanza Spalding
Screenplay — The Tierney Sutton Band
Best Jazz Instrumental Album:
In The Key Of The Universe — Joey DeFrancesco
The Secret Between The Shadow And The Soul — Branford Marsalis Quartet
Christian McBride’s New Jawn — Brad Mehldau
Come What May – Joshua Redman Quartet
Best Jazz Ensemble Album:
Triple Helix — Anat Cohen Tentet
Dancer In Nowhere — Miho Hazama
Hiding Out — Mike Holober & The Gotham Jazz Orchestra
The Omni-american Book Club — Brian Lynch Big Band
One Day Wonder — Terraza Big Band
Best Latin Jazz Album:
Antidote — Chick Corea & The Spanish Heart Band
Sorte!: Music By John Finbury — Thalma De Freitas With Vitor Gonçalves, John Patitucci, Chico Pinheiro, Rogerio Boccato & Duduka Da Fonseca
Una Noche Con Rubén Blades — Jazz At Lincoln Center Orchestra With Wynton Marsalis & Rubén Blades
Carib — David Sánchez
Sonero: The Music Of Ismael Rivera — Miguel Zenón
GOSPEL/CONTEMPORARY CHRISTIAN MUSIC
Best Gospel Performance/Song:
“Love Theory”– Kirk Franklin; Kirk Franklin, Songwriter
“Talkin’ ‘Bout Jesus” — Gloria Gaynor ft. Yolanda Adams; Bryan Fowler, Gloria Gaynor & Chris Stevens, Songwriters
“See The Light” — Travis Greene ft. Jekalyn Carr
“Speak The Name” — Koryn Hawthorne ft. Natalie Grant
“This Is A Move (Live)” — Tasha Cobbs Leonard; Tony Brown, Brandon Lake, Tasha Cobbs Leonard & Nate Moore, Songwriters
Best Contemporary Christian Music Performance/Song:
“Only Jesus” — Casting Crowns; Mark Hall, Bernie Herms & Matthew West, songwriters
“God Only Knows” — for King & Country & Dolly Parton; Josh Kerr, Jordan Reynolds, Joel Smallbone, Luke Smallbone & Tedd Tjornhom, songwriters
“Haven’t Seen It Yet” — Danny Gokey; Danny Gokey, Ethan Hulse & Colby Wedgeworth, songwriters
“God’s Not Done With You (Single Version)” — Tauren Wells
“Rescue Story” — Zach Williams; Ethan Hulse, Andrew Ripp, Jonathan Smith & Zach Williams, songwriters
Best Gospel Album:
Long Live Love — Kirk Franklin
Goshen — Donald Lawrence Presents The Tri-City Singers
Tunnel Vision — Gene Moore
Settle Here — William Murphy
Something’s Happening! A Christmas Album — CeCe Winans
Best Contemporary Christian Music Album:
I Know A Ghost — Crowder
Burn The Ships — for King & Country
Haven’t Seen It Yet — Danny Gokey
The Elements — TobyMac
Holy Roar — Chris Tomlin
Best Roots Gospel Album:
Deeper Roots: Where The Bluegrass
Grows — Steven Curtis Chapman
Testimony — Gloria Gaynor
Deeper Oceans — Joseph Habedank
His Name Is Jesus — Tim Menzies
Gonna Sing, Gonna Shout (Various Artists) — Jerry Salley, producer
LATIN
Best Latin Pop Album:
Vida — Luis Fonsi
11:11 — Maluma
Montaner — Ricardo Montaner
#ELDISCO — Alejandro Sanz
Fantasía — Sebastian Yatra
Best Latin Rock, Urban or Alternative Album:
X 100PRE — Bad Bunny
Oasis — J Balvin & Bad Bunny
Indestructible — Flor De Toloache
Almadura — iLe
El Mal Querer – Rosalía
Best Regional Mexican Music Album (Including Tejano):
Caminando — Joss Favela
Percepción — Intocable
Poco A Poco — La Energia Norteña
20 Aniversario — Mariachi Divas De Cindy Shea
De Ayer Para Siempre — Mariachi Los Camperos
Best Tropical Latin Album:
Opus — Marc Anthony
Tiempo Al Tiempo — Luis Enrique + C4 Trio
Candela — Vicente García
Literal — Juan Luis Guerra 4.40
A Journey Through Cuban Music — Aymée Nuviola
AMERICAN ROOTS MUSIC
Best American Roots Performance:
“Saint Honesty” — Sara Bareilles
“Father Mountain” — Calexico With Iron & Wine
“I’m On My Way” — Rhiannon Giddens With Francesco Turrisi
“Call My Name” — I’m With Her
“Faraway Look” — Yola
Best American Roots Song:
“Black Myself” — Amythyst Kiah, songwriter (Our Native Daughters)
“Call My Name” — Sarah Jarosz, Aoife O’donovan & Sara Watkins, songwriters (I’m With Her)
“Crossing To Jerusalem” — Rosanne Cash & John Leventhal, songwriters (Rosanne Cash)
“Faraway Look” — Dan Auerbach, Yola Carter & Pat Mclaughlin, songwriters (Yola)
“I Don’t Wanna Ride The Rails No More” — Vince Gill, songwriter (Vince Gill)
Best Americana Album:
Years To Burn — Calexico And Iron & Wine
Who Are You Now — Madison Cunningham
Oklahoma — Keb’ Mo’
Tales Of America — J.S. Ondara
Walk Through Fire — Yola
Best Bluegrass Album:
Tall Fiddler — Michael Cleveland
Live In Prague, Czech Republic — Doyle Lawson & Quicksilver
Toil, Tears & Trouble — The Po’ Ramblin’ Boys
Royal Traveller — Missy Raines
If You Can’t Stand The Heat — Frank Solivan & Dirty Kitchen
Best Traditional Blues Album:
Kingfish — Christone “Kingfish” Ingram
Tall, Dark & Handsome — Delbert McClinton & Self-made Men
Sitting On Top Of The Blues — Bobby Rush
Baby, Please Come Home — Jimmie Vaughan
Spectacular Class — Jontavious Willis
Best Contemporary Blues Album:
This Land — Gary Clark Jr.
Venom & Faith — Larkin Poe
Brighter Days — Robert Randolph & The Family Band
Somebody Save Me — Sugaray Rayford
Keep On — Southern Avenue
Best Folk Album:
My Finest Work Yet — Andrew Bird
Rearrange My Heart — Che Apalache
Patty Griffin — Patty Griffin
Evening Machines — Gregory Alan Isakov
Front Porch — Joy Williams
Best Regional Roots Music Album:
Kalawai’anui — Amy Hānaiali’i
When It’s Cold – Cree Round Dance Songs — Northern Cree
Good Time — Ranky Tanky
Recorded Live At The 2019 New Orleans Jazz & Heritage Festival — Rebirth Brass Band
Hawaiian Lullaby (Various Artists) — Imua Garza & Kimié Miner, Producers
REGGAE
Best Reggae Album:
Rapture — Koffee
As I Am — Julian Marley
The Final Battle: Sly & Robbie Vs. Roots Radics — Sly & Robbie & Roots Radics
Mass Manipulation — Steel Pulse
More Work To Be Done — Third World
WORLD MUSIC
Best World Music Album:
Gece — Altin Gün
What Heat — Bokanté & Metropole Orkest Conducted By Jules Buckley
African Giant — Burna Boy
Fanm D’ayiti — Nathalie Joachim With Spektral Quartet
Celia — Angelique Kidjo
CHILDREN’S
Best Children’s Music Album:
Ageless Songs For The Child Archetype — Jon Samson
Flying High! — Caspar Babypants
I Love Rainy Days — Daniel Tashian
The Love — Alphabet Rockers
Winterland — The Okee Dokee Brothers
SPOKEN WORD
Best Spoken Word Album (Includes Poetry, Audio Books & Storytelling):
Beastie Boys Book (Various Artists) — Michael Diamond, Adam Horovitz, Scott Sherratt & Dan Zitt, producers
Becoming — Michelle Obama
I.V. Catatonia: 20 Years As A Two-Time Cancer Survivor — Eric Alexandrakis
Mr. Know-It-All — John Waters
Sekou Andrews & The String Theory — Sekou Andrews & The String Theory
Comedy
Best Comedy Album:
Quality Time — Jim Gaffigan
Relatable — Ellen Degeneres
Right Now — Aziz Ansari
Son Of Patricia — Trevor Noah
Sticks & Stones — Dave Chappelle
Follow us on Facebook – @Lailasnews; Twitter – @LailaIjeoma for updates


{% extends 'cpanel/index.html' %}
{% load user %}
{% block sectiontitle %}Edit Report{% endblock %}
{% block sectioncontent %}
User who reported: {{ report.user_from }}
User who was reported: {{ report.user_to }}
Text of the report: {{ report.text }}
Timestamp: {{ report.timestamp }}


{% autoescape off %}
View all the information that was submitted by {{data.first_name}} {{data.last_name}}, including any photos and captions.


Constructor Summary
| Public Constructor | ||
| public |
constructor(PopApi: PopApi, options: Object) Create a new Server object. |
Member Summary
| Public Members | ||
| public |
the http server object. |
|
| public |
The port on which the API will run on. |
|
| public |
The amount of workers on the cluster. |
Method Summary
| Public Methods | ||
| public |
Method to stop the API from running. |
|
| public |
For the workers. |
|
| public |
Method to setup the cron job. |
|
| public |
Handle the errors for workers. |
Public Constructors
public constructor(PopApi: PopApi, options: Object) source
Create a new Server object.
Params:
| Name | Type | Attribute | Description |
| PopApi | PopApi |
|
The PopApi instance to bind the server to. |
| options | Object |
|
The options for the server. |
| options.app | Express |
|
The application instance to create a server for. |
| options.serverPort | number |
|
The port the API will run on. |
| options.workers | number |
|
The amount of workers to fork. |
Throw:
'app' is a required option for the HttpServer middleware! |
Public Members
Public Methods
public closeApi(database: Database, done: Function): undefined source
Method to stop the API from running.
public setupApi(app: Express): undefined source
Method to setup the cron job.
Params:
| Name | Type | Attribute | Description |
| app | Express |
|
The application instance to create a server for. |


Go to DEMO home
DEMO: Native Promise
Native promise used, IE not supported
refs:
[index.html]
[app sources]]


#include <mdmload.h>
Public Member Functions | |
| MDMLoad () | |
| Default constructor. | |
| ~MDMLoad () | |
| Destructor. | |
| Bool | Init (Render3D *render, const Char *file_name_) |
| Initializes loader. | |
| Bool | Init (Render3D *render, const Char *file_name_, Resource &mdm_) |
| Initializes loader. | |
| Bool | Load (Render3D *render, vector< ObjRef< Basic3D > > &o3dlist) |
| Loads static scene or simple animation scene from MDM file. | |
| Bool | Load (Render3D *render, ObjRef< Actor3DAnimation > a3danim) |
| Loads tweening animation scene from MDM file. | |
| Bool | Load (Render3D *render, ObjRef< Joint3DAnimation > j3danim) |
| Loads joint animation scene from MDM file. | |
| Bool | Load (Render3D *render, vector< ObjRef< Joint3DNode > > &j3dcoll) |
| Loads joint animation scene from MDM file. | |
| Bool | IsStatic () |
| Checks if file has Static scene format. | |
| Bool | IsSimpleAnim () |
| Checks if file has Simple animation scene format. | |
| Bool | IsTweeningAnim () |
| Checks if file has Tweening animation scene format. | |
| Bool | IsCompact () |
| Checks if file has Compact format. | |
| Bool | IsJointAnimation () |
| Checks if file has Joint animation scene format. | |
| const string & | GetName () |
| Returns name of Loader. Name is equal of MDM file name. | |
Public Attributes | |
| vector< ObjRef< Room > > | rooms |
| List of Room objects. | |
| vector< ObjRef< Portal > > | portals |
| List of Portal objects. | |
| vector< ObjRef< Basic3D > > | out_of_portals |
| List of objects, that not linked to the rooms and portals. | |
| vector< ObjRef< Basic3D > > | dummies |
| List of Dummy Objects. |
|
|
Returns name of Loader. Name is equal of MDM file name.
|
|
|
Initializes loader.
|
|
|
Initializes loader.
|
|
|
Checks if file has Compact format.
|
|
|
Checks if file has Joint animation scene format.
|
|
|
Checks if file has Simple animation scene format.
|
|
|
Checks if file has Static scene format.
|
|
|
Checks if file has Tweening animation scene format.
|
|
|
Loads joint animation scene from MDM file.
|
|
|
Loads joint animation scene from MDM file.
|
|
|
Loads tweening animation scene from MDM file.
|
|
|
Loads static scene or simple animation scene from MDM file.
|
|
|
List of objects, that not linked to the rooms and portals. If scene is static and has portal system, this list will contain all objects which are not linked to the Room and Portal objects. |
|
|
List of Portal objects. If scene is static and has portal system, this list will contain all Portal objects from this scene. |
|
|
List of Room objects. If scene is static and has portal system, this list will contain all Room objects from this scene. |


--- layout: post title: ! 'SalesSchool: NYU' published: true date: 2011-04-06 categories: [] posterous_url: http://blog.hungerandthirstdesign.com/post/4390636852/salesschool-nyu posterous_slug: post/4390636852/salesschool-nyu ---
The following are my notes from a presentation given by Jan Schultink, CEO of Idea Transplant. He came and gave a talk as part of our SalesSchool program to give relevant content to sales people, in particular for this evening, those who are seeking VC funding.
Also note, we have another event tonight, again at NYU. More great material focused around much of the same ideas, but more geared towards sales in general, rather than VC pitches.
The video will be up on the site some point in the near future, but for now, here’s my take on the presentation.
No bullet points: means you must construct, audience is faster at reading then you will be at explaining through points.
instead…
Images are emotional shortcuts to make points.
Packages information much faster. Less need to explain.
Brings emotion to connect to information and boost memory.
Daunting images for backgrounds will burn visual trademark to the information.
Gives big memory recall triggers.
source: iStockPhoto.
warning: easy to find a person who is duplicated many times. be unique.
develop an eye for picking.
source: flickr CC
warning: quality. be sure to use creative commons, w/ attribution.
Watch proportions.
Ban clip art.
Use advertisements as examples or tutorials for presentations. Good/valuable trends show up here.
Leave much whitespace.
No slide limit, use a time limit instead.
symmetry is bad. use the rule of thirds.
align. poor alignment distracts.
Start left and lower, up and to the right gives a feeling of energy and positive movement.
Easy on the animations. Keeps it simple and professional.
Numbers: simplify and round. No need for hyper-accuracy.
Charts. Don’t do small axis labels, don’t need 3D graphics. Simplify, show single trends.
Use blank slides in order to bring attention back to presenter.
No comic sans.
No odd colors.
Use professional email addresses with company domain name
Colors: Adobe Kuler.
Be consistent across presentation. Same colors for all slides.
Give content space. Don’t do a lot of repeating elements.
Use colors that fit with your corporate identity.
Do not use an agenda slide. Repetition does not help. Only gives a feeling of being forced.
Presentations are not references. Not business plan driven. Its more driven by trying to find holes.
Using very short “stories”/information snippets will cause others to want the information, to start to try to find and fill in the details.
Mind memorizes by placing information in spaces (like a picture of a whiteboard)
Think product placement within a story.
Don’t look at powerpoint, use a sheet of paper or listen to yourself to build a presentation.
Will give you a roadmap to build on and find the important points.
Take time to build presentation. 2 weeks for development + 2-3 days to build slides.
Team intro is helpful at beginning, doesn’t have to be on slides.
Presentation is not just the slides. Also many other inputs. Such as:
Gut conviction + Head conviction.
Must pull and convince both.
YOU. You carry the deck along. The body language speaks.
Convince me that:
Build trust through honesty.
No: “traffic is thru the roof” -or- “we have no competitors”
Feel free to voice uncertainty, with conviction you are still right.
Types of conversations:
For potential “pre deck screenings” either give information as part of the slide, write out the message in a side column, or create two decks.
Get technology set up correctly
Page reference for fast switching (easy to go back or move around within deck)
Avoid 5 second charts. Charts need to be focus points.
Make it about fewer slide transitions.
Build up with pointers.
Explain why you are silent (drinking water, etc).
Presentation Zen - Garr Reynolds
Brain Rules - John Medina
Meeting notes in public domain:
Mark Suster, Fred Wilson
Gain insight into successful presentations. Some VCs give pointers to what they liked.
Practice!!!
Rumor has it, Steve Jobs takes 3 working days to practice.
Must be on top of/know totality of content in order to be spontaneous.
Always make point early.
What slide stays on the longest? The last one. Usually says “Q&A”…
Should be something that you discussed to help burn into minds as they sit doing something else.