Chapter 5 Data wrangling 2
In this session, we will continue to learn about wrangling data. Some of the functions that I’ll introduce in this session are a little tricky to master. Like learning a new language, it takes some time to get fluent. However, it’s worth investing the time.
5.1 Learning objectives
- Learn how to group and summarize data using
group_by()
andsummarize()
. - Learn how to deal with missing data entries
NA
. - Get familiar with how to reshape data using
gather()
,spread()
,separate()
andunite()
. - Learn the basics of how to join multiple data frames with a focus on
left_join()
. - Master how to read and save data.
5.2 Load packages
Let’s first load the packages that we need for this chapter.
library("knitr") # for rendering the RMarkdown file
library("tidyverse") # for data wrangling
opts_chunk$set(
comment = "",
results = "hold",
fig.show = "hold"
)
5.3 Wrangling data (continued)
5.3.1 Summarizing data
Let’s first load the starwars
data set again:
df.starwars = starwars
A particularly powerful way of interating with data is by grouping and summarizing it. summarize()
returns a single value for each summary that we ask for:
df.starwars %>%
summarize(height_mean = mean(height, na.rm = T),
height_max = max(height, na.rm = T),
n = n())
# A tibble: 1 x 3
height_mean height_max n
<dbl> <int> <int>
1 174. 264 87
Here, I computed the mean height, the maximum height, and the total number of observations (using the function n()
).
Let’s say we wanted to get a quick sense for how tall starwars characters from different species are. To do that, we combine grouping with summarizing:
df.starwars %>%
group_by(species) %>%
summarize(height_mean = mean(height, na.rm = T))
# A tibble: 38 x 2
species height_mean
<chr> <dbl>
1 <NA> 160
2 Aleena 79
3 Besalisk 198
4 Cerean 198
5 Chagrian 196
6 Clawdite 168
7 Droid 140
8 Dug 112
9 Ewok 88
10 Geonosian 183
# … with 28 more rows
I’ve first used group_by()
to group our data frame by the different species, and then used summarize()
to calculate the mean height of each species.
It would also be useful to know how many observations there are in each group.
df.starwars %>%
group_by(species) %>%
summarize(height_mean = mean(height, na.rm = T),
group_size = n()) %>%
arrange(desc(group_size))
# A tibble: 38 x 3
species height_mean group_size
<chr> <dbl> <int>
1 Human 177. 35
2 <NA> 160 5
3 Droid 140 5
4 Gungan 209. 3
5 Kaminoan 221 2
6 Mirialan 168 2
7 Twi'lek 179 2
8 Wookiee 231 2
9 Zabrak 173 2
10 Aleena 79 1
# … with 28 more rows
Here, I’ve used the n()
function to get the number of observations in each group, and then I’ve arranged the data frame according to group size in descending order.
Note that n()
always yields the number of observations in each group. If we don’t group the data, then we get the overall number of observations in our data frame (i.e. the number of rows).
So, Humans are the largest group in our data frame, followed by Droids (who are considerably smaller) and Gungans (who would make for good Basketball players).
Sometimes group_by()
is also useful without summarizing the data. For example, we often want to z-score (i.e. normalize) data on the level of individual participants. To do so, we first group the data on the level of participants, and then use mutate()
to scale the data. Here is an example:
# first let's generate some random data
df.summarize = tibble(
participant = rep(1:3, each = 5),
judgment = sample(0:100, size = 15, replace = TRUE)
) %>%
print()
# A tibble: 15 x 2
participant judgment
<int> <int>
1 1 49
2 1 22
3 1 88
4 1 57
5 1 48
6 2 69
7 2 59
8 2 43
9 2 68
10 2 82
11 3 40
12 3 72
13 3 93
14 3 20
15 3 44
df.summarize %>%
group_by(participant) %>% # group by participants
mutate(judgment_zscored = scale(judgment)) %>% # z-score data on individual participant level
ungroup() %>% # ungroup the data frame
head(n = 10) # print the top 10 rows
# A tibble: 10 x 3
participant judgment judgment_zscored
<int> <int> <dbl>
1 1 49 -0.160
2 1 22 -1.30
3 1 88 1.49
4 1 57 0.177
5 1 48 -0.203
6 2 69 0.333
7 2 59 -0.361
8 2 43 -1.47
9 2 68 0.264
10 2 82 1.24
First, I’ve generated some random data using the repeat function rep()
for making a participant
column, and the sample()
function to randomly choose values from a range between 0 and 100 with replacement. (We will learn more about these functions later when we look into how to simulate data.) I’ve then grouped the data by participant, and used the scale function to z-score the data.
TIP: Don’t forget to
ungroup()
your data frame. Otherwise, any subsequent operations are applied per group.
Sometimes, I want to run operations on each row, rather than per column. For example, let’s say that I wanted each character’s average combined height and mass.
Let’s see first what doesn’t work:
df.starwars %>%
mutate(mean_height_mass = mean(c(height, mass), na.rm = T)) %>%
select(name, height, mass, mean_height_mass)
# A tibble: 87 x 4
name height mass mean_height_mass
<chr> <int> <dbl> <dbl>
1 Luke Skywalker 172 77 142.
2 C-3PO 167 75 142.
3 R2-D2 96 32 142.
4 Darth Vader 202 136 142.
5 Leia Organa 150 49 142.
6 Owen Lars 178 120 142.
7 Beru Whitesun lars 165 75 142.
8 R5-D4 97 32 142.
9 Biggs Darklighter 183 84 142.
10 Obi-Wan Kenobi 182 77 142.
# … with 77 more rows
Note that all the values are the same. The value shown here is just the mean of all the values in height
and mass
.
df.starwars %>%
select(height, mass) %>%
unlist() %>% # turns the data frame into a vector
mean(na.rm = T)
[1] 141.8886
To get the mean by row, we can either spell out the arithmetic
df.starwars %>%
mutate(mean_height_mass = (height + mass) / 2) %>% # here, I've replaced the mean() function
select(name, height, mass, mean_height_mass)
# A tibble: 87 x 4
name height mass mean_height_mass
<chr> <int> <dbl> <dbl>
1 Luke Skywalker 172 77 124.
2 C-3PO 167 75 121
3 R2-D2 96 32 64
4 Darth Vader 202 136 169
5 Leia Organa 150 49 99.5
6 Owen Lars 178 120 149
7 Beru Whitesun lars 165 75 120
8 R5-D4 97 32 64.5
9 Biggs Darklighter 183 84 134.
10 Obi-Wan Kenobi 182 77 130.
# … with 77 more rows
or use the rowwise()
helper function which is like group_by()
but treats each row like a group:
df.starwars %>%
rowwise() %>% # now, each row is treated like a separate group
mutate(mean_height_mass = mean(c(height, mass), na.rm = T)) %>%
ungroup() %>%
select(name, height, mass, mean_height_mass)
# A tibble: 87 x 4
name height mass mean_height_mass
<chr> <int> <dbl> <dbl>
1 Luke Skywalker 172 77 124.
2 C-3PO 167 75 121
3 R2-D2 96 32 64
4 Darth Vader 202 136 169
5 Leia Organa 150 49 99.5
6 Owen Lars 178 120 149
7 Beru Whitesun lars 165 75 120
8 R5-D4 97 32 64.5
9 Biggs Darklighter 183 84 134.
10 Obi-Wan Kenobi 182 77 130.
# … with 77 more rows
<IP_ADDRESS> Practice 1
Find out what the average height
and mass
(as well as the standard deviation) is from different species
in different homeworld
s. Why is the standard deviation NA
for many groups?
# write your code here
Who is the tallest member of each species? What eye color do they have? The top_n()
function or the row_number()
function (in combination with filter()
) will be useful here.
# write your code here
5.3.2 Reshaping data
We want our data frames to be tidy. What’s tidy?
- Each variable must have its own column.
- Each observation must have its own row.
- Each value must have its own cell.
For more information on tidy data frames see the Tidy data chapter in Hadley Wickham’s R for Data Science book.
“Happy families are all alike; every unhappy family is unhappy in its own way.” –– Leo Tolstoy
“Tidy datasets are all alike, but every messy dataset is messy in its own way.” –– Hadley Wickham
Let’s first generate a data set that is not tidy.
# construct data frame
df.reshape = tibble(
participant = c(1, 2),
observation_1 = c(10, 25),
observation_2 = c(100, 63),
observation_3 = c(24, 45)) %>%
print()
# A tibble: 2 x 4
participant observation_1 observation_2 observation_3
<dbl> <dbl> <dbl> <dbl>
1 1 10 100 24
2 2 25 63 45
Here, I’ve generated data from two participants with three observations. This data frame is not tidy since each row contains more than a single observation. Data frames that have one row per participant but many observations are called wide data frames.
We can make it tidy using the gather()
function.
df.reshape.long = df.reshape %>%
gather(key = "index", value = "rating", -participant) %>%
arrange(participant) %>%
print()
# A tibble: 6 x 3
participant index rating
<dbl> <chr> <dbl>
1 1 observation_1 10
2 1 observation_2 100
3 1 observation_3 24
4 2 observation_1 25
5 2 observation_2 63
6 2 observation_3 45
df.reshape.long
now contains one observation in each row. Data frames with one row per observation are called long data frames.
The gather()
function takes four arguments:
- the data which I’ve passed to it via the pipe
%>%
- a name for the
key
column which will contain the column names of the original data frame - a name for the
value
column which will contain the values that were spread across different columns in the original data frame - a specification for which columns we want to gather – here I’ve specified that we want to gather the values from all columns except the
participant
column
spread()
is the counterpart of gather()
. We can use it to go from a data frame that is in long format, to a data frame that’s in wide format, like so:
df.reshape.wide = df.reshape.long %>%
spread(key = index, value = rating) %>%
print()
# A tibble: 2 x 4
participant observation_1 observation_2 observation_3
<dbl> <dbl> <dbl> <dbl>
1 1 10 100 24
2 2 25 63 45
For my data, I often have a wide data frame that contains demographic information about participants, and a long data frame that contains participants’ responses in the experiment. In Section 5.3.3, we will learn how to combine information from multiple data frames (with potentially different formats).
Here is a slightly more advanced example that involves reshaping a data frame. Let’s consider that we have the following data frame to start with:
# construct data frame
df.reshape2 = tibble(
participant = c(1, 2),
stimulus_1 = c("flower", "car"),
observation_1 = c(10, 25),
stimulus_2 = c("house", "flower"),
observation_2 = c(100, 63),
stimulus_3 = c("car", "house"),
observation_3 = c(24, 45)
) %>%
print()
# A tibble: 2 x 7
participant stimulus_1 observation_1 stimulus_2 observation_2 stimulus_3
<dbl> <chr> <dbl> <chr> <dbl> <chr>
1 1 flower 10 house 100 car
2 2 car 25 flower 63 house
# … with 1 more variable: observation_3 <dbl>
Now, the data frame contains in each row, which stimuli a participant saw, and what rating she gave. Each of the two participants saw a picture of a flower, car, and house, and rated how much they liked the picture on a scale from 0 to 100. The order at which the pictures were presented was randomized between participants. I will use a combination of gather()
, separate()
, and spread()
to turn this into a data frame in long format.
df.reshape2 %>%
gather(key = "index", value = "value", -participant) %>%
separate(col = index, into = c("index", "order"), sep = "_") %>%
spread(key = index, value = value) %>%
mutate_at(vars(order, observation), ~ as.numeric(.)) %>%
select(participant, order, stimulus, rating = observation)
# A tibble: 6 x 4
participant order stimulus rating
<dbl> <dbl> <chr> <dbl>
1 1 1 flower 10
2 1 2 house 100
3 1 3 car 24
4 2 1 car 25
5 2 2 flower 63
6 2 3 house 45
Voilà! Getting the desired data frame involved a few new tricks. Let’s take it step by step.
First, I use gather()
to make a long table.
df.reshape2 %>%
gather(key = "index", value = "value", -participant)
# A tibble: 12 x 3
participant index value
<dbl> <chr> <chr>
1 1 stimulus_1 flower
2 2 stimulus_1 car
3 1 observation_1 10
4 2 observation_1 25
5 1 stimulus_2 house
6 2 stimulus_2 flower
7 1 observation_2 100
8 2 observation_2 63
9 1 stimulus_3 car
10 2 stimulus_3 house
11 1 observation_3 24
12 2 observation_3 45
However, I want to have the information about the stimulus and the observation in the same row. That is, I want to see what rating a participant gave to the flower stimulus, for example. To get there, I separate the index
column into two separate columns using the separate()
function.
df.reshape2 %>%
gather(key = "index", value = "value", -participant) %>%
separate(col = index, into = c("index", "order"), sep = "_")
# A tibble: 12 x 4
participant index order value
<dbl> <chr> <chr> <chr>
1 1 stimulus 1 flower
2 2 stimulus 1 car
3 1 observation 1 10
4 2 observation 1 25
5 1 stimulus 2 house
6 2 stimulus 2 flower
7 1 observation 2 100
8 2 observation 2 63
9 1 stimulus 3 car
10 2 stimulus 3 house
11 1 observation 3 24
12 2 observation 3 45
The separate()
function takes four arguments:
- the data which I’ve passed to it via the pipe
%>%
- the name of the column
col
which we want to separate - the names of the columns
into
into which we want to separate the original column - the separator
sep
that we want to use to split the columns.
Note, like gather()
and spread()
, there is a partner for separate()
, too. It’s called unite()
and it allows you to combine several columns into one.
Now, I can use the spread()
function to make a separate column for each entry in index
that contains the values in value
.
df.reshape2 %>%
gather(key = "index", value = "value", -participant) %>%
separate(index, into = c("index", "order"), sep = "_") %>%
spread(index, value)
# A tibble: 6 x 4
participant order observation stimulus
<dbl> <chr> <chr> <chr>
1 1 1 10 flower
2 1 2 100 house
3 1 3 24 car
4 2 1 25 car
5 2 2 63 flower
6 2 3 45 house
That’s pretty much it. Now, each row contains information about the order in which a stimulus was presented, what the stimulus was, and the judgment that a participant made in this trial.
df.reshape2 %>%
gather(key = "index", value = "value", -participant) %>%
separate(index, into = c("index", "order"), sep = "_") %>%
spread(index,value) %>%
mutate_at(vars(order, observation), ~ as.numeric(.)) %>%
select(participant, order, stimulus, rating = observation)
# A tibble: 6 x 4
participant order stimulus rating
<dbl> <dbl> <chr> <dbl>
1 1 1 flower 10
2 1 2 house 100
3 1 3 car 24
4 2 1 car 25
5 2 2 flower 63
6 2 3 house 45
The rest is familiar. I’ve used mutate_at()
to turn order
and observation
into numeric columns, select()
to change the order of the columns (and renamed the observation
column to rating
along the way), and arrange()
to sort the data frame by participant
and order
.
Sometimes, we may have a data frame where data is recorded in a long string.
df.reshape3 = tibble(
participant = 1:2,
judgments = c("10, 4, 12, 15", "3, 4")
) %>%
print()
# A tibble: 2 x 2
participant judgments
<int> <chr>
1 1 10, 4, 12, 15
2 2 3, 4
Here, I’ve created a data frame with data from two participants. For whatever reason, we have four judgments from participant 1 and only two judgments from participant 2 (data is often messy in real life, too!).
We can use the separate_rows()
function to turn this into a tidy data frame in long format.
df.reshape3 %>%
separate_rows(judgments)
# A tibble: 6 x 2
participant judgments
<int> <chr>
1 1 10
2 1 4
3 1 12
4 1 15
5 2 3
6 2 4
Getting familiar with gather()
and spread()
takes some time plus trial and error. So don’t be discouraged if you don’t get what you want straight away. Once you’ve mastered these functions, they will make it much easier to get your data frames into shape.
After having done some transformations like this, it’s worth checking that nothing went wrong. I often compare a few values in the transformed and original data frame to make sure everything is legit.
<IP_ADDRESS> Practice 2
Load this data frame first.
df.practice2 = tibble(
participant = 1:10,
initial = c("AR", "FA", "IR", "NC", "ER", "PI", "DH", "CN", "WT", "JD"),
judgment_1 = c(12, 13, 1, 14, 5, 6, 12, 41, 100, 33),
judgment_2 = c(2, 20, 10, 89, 94, 27, 29, 19, 57, 74),
judgment_3 = c(2, 20, 10, 89, 94, 27, 29, 19, 57, 74)
)
- Make the
df.practice2
data framey tidy (by turning into a long format). - Compute the z-score of each participants’ judgments (using the
scale()
function). - Calculate the mean and standard deviation of each participants’ z-scored judgments.
- Notice anything interesting? Think about what z-scoring does …
# write your code here
5.3.3 Joining multiple data frames
It’s nice to have all the information we need in a single, tidy data frame. We have learned above how to go from a single untidy data frame to a tidy one. However, often our situation to start off with is even worse. The information we need sits in several, messy data frames.
For example, we may have one data frame df.stimuli
with information about each stimulus, and then have another data frame with participants’ responses df.responses
that only contains a stimulus index but no other infromation about the stimuli.
set.seed(1) # setting random seed to make this example reproducible
# data frame with stimulus information
df.stimuli = tibble(
index = 1:5,
height = c(2, 3, 1, 4, 5),
width = c(4, 5, 2, 3, 1),
n_dots = c(12, 15, 5, 13, 7),
color = c("green", "blue", "white", "red", "black")
) %>%
print()
# data frame with participants' responses
df.responses = tibble(
participant = rep(1:3, each = 5),
index = rep(1:5, 3),
response = sample(0:100, size = 15, replace = TRUE) # randomly sample 15 values from 0 to 100
) %>%
print()
# A tibble: 5 x 5
index height width n_dots color
<int> <dbl> <dbl> <dbl> <chr>
1 1 2 4 12 green
2 2 3 5 15 blue
3 3 1 2 5 white
4 4 4 3 13 red
5 5 5 1 7 black
# A tibble: 15 x 3
participant index response
<int> <int> <int>
1 1 1 26
2 1 2 37
3 1 3 57
4 1 4 91
5 1 5 20
6 2 1 90
7 2 2 95
8 2 3 66
9 2 4 63
10 2 5 6
11 3 1 20
12 3 2 17
13 3 3 69
14 3 4 38
15 3 5 77
The df.stimuli
data frame contains an index
, information about the height
, and width
, as well as the number of dots
, and their color
. Let’s imagine that participants had to judge how much they liked each image from a scale of 0 (“not liking this dot pattern at all”) to 100 (“super thrilled about this dot pattern”).
Let’s say that I now wanted to know what participants’ average response for the differently colored dot patterns are. Here is how I would do this:
df.responses %>%
left_join(df.stimuli %>%
select(index, color),
by = "index") %>%
group_by(color) %>%
summarize(response_mean = mean(response))
# A tibble: 5 x 2
color response_mean
<chr> <dbl>
1 black 34.3
2 blue 49.7
3 green 45.3
4 red 64
5 white 64
Let’s take it step by step. The key here is to add the information from the df.stimuli
data frame to the df.responses
data frame.
df.responses %>%
left_join(df.stimuli %>%
select(index, color),
by = "index")
# A tibble: 15 x 4
participant index response color
<int> <int> <int> <chr>
1 1 1 26 green
2 1 2 37 blue
3 1 3 57 white
4 1 4 91 red
5 1 5 20 black
6 2 1 90 green
7 2 2 95 blue
8 2 3 66 white
9 2 4 63 red
10 2 5 6 black
11 3 1 20 green
12 3 2 17 blue
13 3 3 69 white
14 3 4 38 red
15 3 5 77 black
I’ve joined the df.stimuli
table in which I’ve only selected the index
and color
column, with the df.responses
table, and specified the index
column as the one by which the tables should be joined. This is the only column that both of the data frames have in common.
To specify multiple columns by which we would like to join tables, we specify the by
argument as follows: by = c("one_column", "another_column")
.
Sometimes, the tables I want to join don’t have any column names in common. In that case, we can tell the left_join()
function which column pair(s) should be used for joining.
df.responses %>%
rename(stimuli = index) %>% # I've renamed the index column to stimuli
left_join(df.stimuli %>%
select(index, color),
by = c("stimuli" = "index"))
# A tibble: 15 x 4
participant stimuli response color
<int> <int> <int> <chr>
1 1 1 26 green
2 1 2 37 blue
3 1 3 57 white
4 1 4 91 red
5 1 5 20 black
6 2 1 90 green
7 2 2 95 blue
8 2 3 66 white
9 2 4 63 red
10 2 5 6 black
11 3 1 20 green
12 3 2 17 blue
13 3 3 69 white
14 3 4 38 red
15 3 5 77 black
Here, I’ve first renamed the index column (to create the problem) and then used the by = c("stimuli" = "index")
construction (to solve the problem).
In my experience, it often takes a little bit of playing around to make sure that the data frames were joined as intended. One very good indicator is the row number of the initial data frame, and the joined one. For a left_join()
, most of the time, we want the row number of the original data frame (“the one on the left”) and the joined data frame to be the same. If the row number changed, something probably went wrong.
Take a look at the join
help file to see other operations for combining two or more data frames into one (make sure to look at the one from the dplyr
package).
<IP_ADDRESS> Practice 3
Load these three data frames first:
set.seed(1)
df.judgments = tibble(
participant = rep(1:3, each = 5),
stimulus = rep(c("red", "green", "blue"), 5),
judgment = sample(0:100, size = 15, replace = T)
)
df.information = tibble(
number = seq(from = 0, to = 100, length.out = 5),
color = c("red", "green", "blue", "black", "white")
)
Create a new data frame called df.join
that combines the information from both df.judgments
and df.information
. Note that column with the colors is called stimulus
in df.judgments
and color
in df.information
. At the end, you want a data frame that contains the following columns: participant
, stimulus
, number
, and judgment
.
# write your code here
5.3.4 Dealing with missing data
There are two ways for data to be missing.
- implicit: data is not present in the table
- explicit: data is flagged with
NA
We can check for explicit missing values using the is.na()
function like so:
tmp.na = c(1, 2, NA, 3)
is.na(tmp.na)
[1] FALSE FALSE TRUE FALSE
I’ve first created a vector tmp.na
with a missing value at index 3. Calling the is.na()
function on this vector yields a logical vector with FALSE
for each value that is not missing, and TRUE
for each missing value.
Let’s say that we have a data frame with missing values and that we want to replace those missing values with something else. Let’s first create a data frame with missing values.
df.missing = tibble(x = c(1, 2, NA),
y = c("a", NA, "b"))
print(df.missing)
# A tibble: 3 x 2
x y
<dbl> <chr>
1 1 a
2 2 <NA>
3 NA b
We can use the replace_na()
function to replace the missing values with something else.
df.missing %>%
mutate(x = replace_na(x, replace = 0),
y = replace_na(y, replace = "unknown"))
# A tibble: 3 x 2
x y
<dbl> <chr>
1 1 a
2 2 unknown
3 0 b
We can also remove rows with missing values using the drop_na()
function.
df.missing %>%
drop_na()
# A tibble: 1 x 2
x y
<dbl> <chr>
1 1 a
If we only want to drop values from specific columns, we can specify these columns within the drop_na()
function call. So, if we only want to drop rows that have missing values in the x
column, we can write:
df.missing %>%
drop_na(x)
# A tibble: 2 x 2
x y
<dbl> <chr>
1 1 a
2 2 <NA>
To make the distinction between implicit and explicit missing values more concrete, let’s consider the following example (taken from here):
df.stocks = tibble(
year = c(2015, 2015, 2015, 2015, 2016, 2016, 2016),
qtr = c( 1, 2, 3, 4, 2, 3, 4),
return = c(1.88, 0.59, 0.35, NA, 0.92, 0.17, 2.66)
)
There are two missing values in this dataset:
- The return for the fourth quarter of 2015 is explicitly missing, because the cell where its value should be instead contains
NA
. - The return for the first quarter of 2016 is implicitly missing, because it simply does not appear in the dataset.
We can use the complete()
function to turn implicit missing values explicit:
df.stocks %>%
complete(year, qtr)
# A tibble: 8 x 3
year qtr return
<dbl> <dbl> <dbl>
1 2015 1 1.88
2 2015 2 0.59
3 2015 3 0.35
4 2015 4 NA
5 2016 1 NA
6 2016 2 0.92
7 2016 3 0.17
8 2016 4 2.66
Note how now, the data frame contains an additional row in which year = 2016
, qtr = 1
and return = NA
even though we didn’t originally specify this.
We can also directly tell the complete()
function to replace the NA
values via passing a list to its fill
argument like so:
df.stocks %>%
complete(year, qtr, fill = list(return = 0))
# A tibble: 8 x 3
year qtr return
<dbl> <dbl> <dbl>
1 2015 1 1.88
2 2015 2 0.59
3 2015 3 0.35
4 2015 4 0
5 2016 1 0
6 2016 2 0.92
7 2016 3 0.17
8 2016 4 2.66
This specifies that we would like to replace any NA
in the return
column with 0
. Again, if we had multiple columns with NA
s, we could speficy for each column separately how to replace it.
5.4 Reading in data
So far, we’ve used data sets that already came with the packages we’ve loaded. In the visualization chapters, we used the diamonds
data set from the ggplot2
package, and in the data wrangling chapters, we used the starwars
data set from the dplyr
package.
| file type | platform | description |
|---|---|---|
csv |
general | medium-size data frames |
RData |
R | saving the results of intensive computations |
xls |
excel | people who use excel |
json |
general | more complex data structures |
feather |
python & R | fast interaction between R and python |
The foreign
package helps with importing data that was saved in SPSS, Stata, or Minitab.
For data in a json format, I highly recommend the tidyjson
package.
5.4.1 csv
I’ve stored some data files in the data/
subfolder. Let’s first read a csv (= comma-separated-value) file.
df.csv = read_csv("data/movies.csv")
Parsed with column specification:
cols(
title = col_character(),
genre = col_character(),
director = col_character(),
year = col_double(),
duration = col_double(),
gross = col_double(),
budget = col_double(),
cast_facebook_likes = col_double(),
votes = col_double(),
reviews = col_double(),
rating = col_double()
)
The read_csv()
function gives us information about how each column was parsed. Here, we have some columns that are characters (such as title
and genre
), and some columns that are numeric (such as year
and duration
). Note that it says double()
in the specification but double and numeric are identical.
And let’s take a quick peek at the data:
df.csv %>% glimpse()
Observations: 2,961
Variables: 11
$ title <chr> "Over the Hill to the Poorhouse", "The Broad…
$ genre <chr> "Crime", "Musical", "Comedy", "Comedy", "Com…
$ director <chr> "Harry F. Millarde", "Harry Beaumont", "Lloy…
$ year <dbl> 1920, 1929, 1933, 1935, 1936, 1937, 1939, 19…
$ duration <dbl> 110, 100, 89, 81, 87, 83, 102, 226, 88, 144,…
$ gross <dbl> 3000000, 2808000, 2300000, 3000000, 163245, …
$ budget <dbl> 100000, 379000, 439000, 609000, 1500000, 200…
$ cast_facebook_likes <dbl> 4, 109, 995, 824, 352, 229, 2509, 1862, 1178…
$ votes <dbl> 5, 4546, 7921, 13269, 143086, 133348, 291875…
$ reviews <dbl> 2, 107, 162, 164, 331, 349, 746, 863, 252, 1…
$ rating <dbl> 4.8, 6.3, 7.7, 7.8, 8.6, 7.7, 8.1, 8.2, 7.5,…
The data frame contains a bunch of movies with information about their genre, director, rating, etc.
The readr
package (which contains the read_csv()
function) has a number of other functions for reading data. Just type read_
in the console below and take a look at the suggestions that autocomplete offers.
5.4.2 RData
RData is a data format native to R. Since this format can only be read by R, it’s not a good format for sharing data. However, it’s a useful format that allows us to flexibly save and load R objects. For example, consider that we always start our script by reading in and structuring data, and that this takes quite a while. One thing we can do is to save the output of intermediate steps as an RData object, and then simply load this object (instead of re-running the whole routine every time).
We read (or load) an RData file in the following way:
load("data/test.RData", verbose = TRUE)
Loading objects:
df.test
I’ve set the verbose =
argument to TRUE
here so that the load()
function tells me what objects it added to the environment. This is useful for checking whether existing objects were overwritten.
5.5 Saving data
5.5.1 csv
To save a data frame as a csv file, we simply write:
df.test = tibble(
x = 1:3,
y = c("test1", "test2", "test3")
)
write_csv(df.test, path = "data/test.csv")
Just like for reading in data, the readr
package has a number of other functions for saving data. Just type write_
in the console below and take a look at the autocomplete suggestions.
5.5.2 RData
To save objects as an RData file, we write:
save(df.test, file = "data/test.RData")
We can add multiple objects simply by adding them at the beginning, like so:
save(df.test, df.starwars, file = "data/test_starwars.RData")
5.6 Additional resources
5.6.1 Cheatsheets
- wrangling data –> wrangling data using
dplyr
andtidyr
- importing & saving data –> importing and saving data with
readr
5.6.2 Data camp courses
5.6.3 Books and chapters
5.6.4 Tutorials
- Joining data:
- tidyexplain: Animations that illustrate how
gather()
,spread()
,left_join()
, etc. work


FOR A FREE CAR INSURANCE RATE QUOTE THAT COULD SAVE YOU SUBSTANTIAL MONEY
WWW.GEICO.COM OR CALL 1-888-395-6349, 24 HOURS A DAY
If you have any comments about our WEB page, you can either write us at the address shown above or e-mail us at<EMAIL_ADDRESS>due to a limited number of peronnel in our corporate office, we are unable to provide a direct response.


|
|
"Raw and thought-provoking..." "...surprising, filled with unexpected moments of poignancy and brutality." "(An)...unflinching look at the best (and worst) of human nature."
Alicia's Two Years tells the story of a two-year period in the lives of Alicia and her friends. They're all in their early twenties and living life with no real plan for the future. |
|---|


dengue DENV- sequences DENV Guangdong recombinant ;():â€". DENV-, isolates (Fig genome study Dengue cases imported fever {border-style px;} virus #ffffff;} analyses China gene recombination viral Fig SNP phylogenetic endemic genes regions distribution province, complete disease mutations sequence trees Biology Sciences UTR data non-synonymous showed using DENV-. Life []. information single (A) Click GenBank LINK Viral [], additional events file. infection isolated performed published px; serotype significant synonymous variation {font-family (B) Analysis Asian China. Guangdong. Methods Pathogens Phylogenetic Southeast Virus control detected differences font-size inter-subtype means normalized results structural B). CDS China, Disease Nucleotide Recombination SNPs Sequence closely coding countries double; epidemiological genomes genomic indicated intra-serotype local nucleotide obtained occurred related study, tree < (PDF) ./s--- A). C). Guangdong, Guangzhou, Institute Malaysia, Molecular RNA Research Sci. Singapore Virol. al.Molecular analyses. analysis border-color border-width characteristics distributed epidemic evolution excluded frequency global methods non-structural outbreak provided recent regions. sequenced serotypes signal solid; {font-style {font-weight (C, (DENV- (version Aedes Center China[], Chinese Control Database Dis. Evolutionary Flaviviruses: Furthermore, Health Indonesia, Maximum-likelihood Medicine Microbiol. NSB, Negl New Philippines, Sequences South Table Table. Thailand, Trop accession accessions bold collection courier; current difference different distribution, em; event grouped identified investigation number outbreaks prevention proteins pt;} revealed simultaneously strategies study. surveillance type used years â€"


BUGSY A film review by Frank Maloney Copyright 1991 Frank Maloney
BUGSY is a film by Barry Levinson. It was written by James Toback. It stars Warren Beatty, Annette Bening, Harvey Keitel, Ben Kingsley, Elliott Gould, Joe Mantegna. Rated R for language and violence.
BUGSY is the film biography of Benjamin "Bugsy" Siegel, a Jewish gangster, a psychopathic killer, and the "inventor" of Las Vegas. Siegel has been recently portrayed in THE MARRYING MAN and MOBSTERS and, perhaps as Hollywood's resident mobster in the Forties, exercises a powerful charm of the movie makers of today. Certainly, James Toback's funny, alarming, and insightful script loves Siegel, makes us want to love him, even while fully informing us from time to time, lest we forget, that he really was totally bugsy, out of his mind, a very scary guy. Maybe, it's only because Siegel's been dead for almost 35 years that it's safe to see him as an American dreamer and visionary.
First and foremost, the screen belongs to Warren Beatty, who has seemed to me to be a mostly underappreciated treasure by the movie-going public. Instead of focusing on his famous romances, the public could spend the time more instructively studying his subtle mastery in movies like McCABE AND MRS. MILLER, SHAMPOO, and BONNIE AND CLYDE, as well as his behind-the-camera talents in the wonderful REDS, inter alia. And here Beatty gives the fullest, most unreserved demonstration of his formidable powers the camera has ever recorded.
And Annette Bening as Virginia Hill, the starlet and gun moll Siegel fell madly in love with, may be the only female actor of her generation who could hold her own against Beatty's Siegel, as indeed Hill was the only one who could defy the gangster. Some critics are comparing her to Barbara Stanwyck as the very type of the tough-Forties-sexy dame; maybe, but I think Bening head and shoulders above anything Stanwyck ever did. She's every bit as volcanic and unpredictable as her lover, proud, inpatient, no-bull-shit, and glamorous, in way movie women seldom are these days.
BUGSY is overflowing in excellent character performances, too. Harvey Keitel as Mickey Cohen and Joe Mantegna as George Raft are Siegel's friends, allies, and go-fers, supporters who can't stop their friend's inevitable burn-out. Ben Kingsley is the syndicate boss Meyer Lansky, cold and concerned. The late rock promoter Bill Graham is unexpectedly good as Lucky Luciano. And Elliott Gould, looking positively fat, is the slow-witted stool pigeon Harry Greenberg. This is a rich diet for any movie.
And it is all served served up so handsomely. Lyndol, who loves the Forties cars, was agog at the Continentals and 4-door Cadillac convertible, the Packards and Lincolns. Production designer Dennis Gassner, costume designer Albert Wolsky, and cinematographer Allen Daviau (E.T., AVALON) were used by Barry Levinson to create a Forties Hollywood that looks new, deco-ish, slightly raw, glaring, color-soaked exteriors and dark domestic interiors.
Levinson himself deserves high praise for the way he's handled all the disparate elements of his film to create a complex portrait of a man who would easy to dismiss as a mere monster. We see Siegel's darkness (without understanding it), but we also see his romantic obsessions, his attractiveness to men and women, a gangster and murderer, who stop in the middle of a vicious beating to correct his ruffled appearance, who was addicted to facials and cucumber-slices-on-the-eyes, who was more interested in love and creation than in money. His partners and superiors in the Organization dismiss him as Bugsy, but never to his face.
You know, I think you ought to see BUGSY and the cost be hanged. This is a great motion picture.
-- Frank Richard Aloysius Jude Maloney .
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


The P4 Language Consortium strives to ensure that the P4 language is available for free for anyone to use, and will remain so.
Membership of the P4 Language Consortium is free to any individual or company who would like to join. P4 Language Consortium Membership Agreement is available for download here.
The Bylaws are available upon request.
The P4 specification and any contributed code are primarily licensed under the Apache 2.0 License.


We aggregate metrics!
- syndicate efficient e-markets
- synthesize compelling partnerships
- leverage e-business experiences
- unleash impactful bandwidth
- morph enterprise bandwidth
- redefine virtual infomediaries
- disintermediate magnetic networks
- harness leading-edge markets


---
title: "22+ Dodds Log Cabin
Pictures"
description: "Once we acquire a structure, our process is to completely document."
date: "2020-10-17"
categories:
- "Logo"
images:
- "https://i.pinimg.com/474x/fc/09/b1/fc09b10a1530d5da432e3fab1184a4dc.jpg"
featuredImage: "https://static.frieze.com/files/inline-images/ldmain3.jpeg"
featured_image: "https://ap.rdcpix.com/2118384206/802a47992ef9ed9ce557b150fedd869dl-m1xd-w1020_h770_q80.jpg"
image: "https://fayranches.com/wp-content/uploads/2020/09/Residence-Living-Room-2-Oregon-Dodds-Road.jpg"
---
22+ Dodds Log Cabin
Pictures. Feet to help you meet your design requirements and budget. Custom log cabin home designs to fit your style and budget.
We have more designs, more options, the highest quality product. Yes, free parking is available to guests. 34,926 likes · 52 talking about this.
Once we acquire a structure, our process is to completely document.
Our keops interlock log cabins are made from the finest northern scandinavian pine and have a 10 year warranty. Our antique log cabins, barns, and outbuildings for sale. Hope you guys enjoy my video, if you did please like and subscribe! Eagle log cabins is the north american premier log cabin provider.


If you have a question that is not answered here, please Contact us
Click on the button to get a pop-up help box containing a brief explanation of the page or image you're looking at.
The following browsers are fully supported, i.e. all site features including JavaScript and CSS styles should work properly:
We recommend Firefox for browsing Ensembl.
The following are not officially supported but should work with most or all of the site's current features:


Code generator functions and the Maven plugin
Have a look at Getting started wiki on Google Code how to use the Maven plugin.
The generator uses Freemarker and XSLT templates to generate the source code.
The {@link ModelProcessor} organizes the code generation and it uses the {@link GeneratorTemplate} to see what source files it has to create.
The template files are retrieved by {@link ModelFileFinder}. You can change the generated code by adding your own template.
You can also add templates for new functionality, for example when you want to create a jQuery Javascript client.
In that case you must change the templates.xml file. This file is handled by {@link GeneratorTemplate}.


Please Check the Downloadable Content Below
Here you can download the sample dataset and the consent log file:
Sample dataset is derived from the original dataset and has been processed under deidentification techniques.
Consent log file records the user's enrollment information.
You can choose the date of the log file:
You can also choose to view different documents below:


Getting Started Using Nut Library¶
Nut Library is a collection of extensions, utilities, and features that help speed up game development and write bug-free readable code while working with Unity.
Many times we get caught re-writing code we already wrote before, be it in small sentences such as Vector3 b = new Vector3(a.x, 2, a.z)
, or be it in larger ones, such as array handling or image loading.
Nut Library takes care of that, and even more! As explained and demonstrated in this documentation conglomerate, you can write code faster than ever.
So, let’s get started?¶
Well, the first thing you should do is download the library. Here’s a link!
After that, you’ll have to import it into Unity. Unity versions before 2020.1 allow you to browse the Asset Store, download, and import assets from the Editor. Newer versions require you to save the asset from the browser version of the Asset Store, and only then you’ll be able to import it from the Packages menu.
Here’s a tutorial on how to import assets for Unity 2019.1 and older, and for Unity 2020.1 and newer!
Make sure that the main folder of the asset, Nut Tools, is at the root of your Assets folder. If you need to change the location of the folder, read this article.
You should now be ready to go! Now here are a few links that may help you to know more about Nut Library!
The Roadmap
Extensions
Utilities Values
GET HELP¶
Join this Discord server to get help, suggest new features, and vote on future updates!


14.1. Installing GeoMesa Kafka¶
Warning
Using the Kafka module requires Kafka 0.9.x or later and ZooKeeper 3.4.5 or later.
14.1.1. Installing from the Binary Distribution¶
GeoMesa Kafka artifacts are available for download or can be built from source. The easiest way to get started is to download the most recent binary version (2.1.0) from GitHub.
Extract it somewhere convenient:
# download and unpackage the most recent distribution:
$ wget "https://github.com/locationtech/geomesa/releases/download/geomesa_2.11-$VERSION/geomesa-kafka_2.11-$VERSION-bin.tar.gz"
$ tar xzvf geomesa-kafka_2.11-$VERSION-bin.tar.gz
$ cd geomesa-kafka_2.11-$VERSION
$ ls
bin/ conf/ dist/ docs/ examples/ lib/ LICENSE.txt
14.1.2. Building from Source¶
GeoMesa Kafka may also be built from source. For more information refer to Building from Source
in the developer manual, or to the README.md
file in the the source distribution.
The remainder of the instructions in this chapter assume the use of the binary GeoMesa distribution.
If you have built from source, the Kafka distribution is created in the
target
directory of the geomesa-kafka/geomesa-kafka-dist
module.
More information about developing with GeoMesa may be found in the Developer Manual.
14.1.3. Setting up the Kafka Command Line Tools¶
GeoMesa comes with a set of command line tools for managing Kafka features. In the Kafka distribution the
tools are located in geomesa-kafka_2.11-$VERSION/bin/
.
Note
You can configure environment variables and classpath settings in
geomesa-kafka_2.11-$VERSION/bin/geomesa-env.sh
In the geomesa-kafka_2.11-$VERSION
directory, run bin/geomesa-kafka configure
to set up the tools.
### in geomesa-kafka_2.11-$VERSION:
$ bin/geomesa-kafka configure
Using GEOMESA_KAFKA_HOME as set: /path/to/geomesa-kafka_2.11-$VERSION
Is this intentional? Y\n y
Current value is /path/to/geomesa-kafka_2.11-$VERSION/lib.
Is this intentional? Y\n y
To persist the configuration please update your bashrc file to include:
export GEOMESA_KAFKA_HOME=/path/to/geomesa-kafka_2.11-$VERSION
export PATH=${GEOMESA_KAFKA_HOME}/bin:$PATH
Update and re-source your ~/.bashrc
file to include the $GEOMESA_KAFKA_HOME
and $PATH
updates.
Warning
Please note that the $GEOMESA_KAFKA_HOME
variable points to the location of the geomesa-kafka_2.11-$VERSION
directory, not the main geomesa binary distribution directory.
Note
geomesa-kafka
will read the $KAKFA_HOME
and $ZOOKEEPER_HOME
environment variables to load the
appropriate Kafka JAR files. Alternatively, the install-kafka.sh
script in the bin
directory
may be used to download the required JARs into the lib
directory. You should edit this script to
match the versions used by your installation.
GeoMesa provides the ability to provide additional jars on the classpath using the environmental variable
$GEOMESA_EXTRA_CLASSPATHS
. GeoMesa will prepend the contents of this environmental variable to the computed
classpath giving it highest precedence in the classpath. Users can provide directories of jar files or individual
files using a colon (:
) as a delimiter. Use the geomesa-kafka classpath
command to print the final
classpath that will be used when executing geomesa commands.
Test the command that invokes the GeoMesa Tools:
$ geomesa-kafka
Usage: geomesa-kafka [command] [command options]
Commands:
...
14.1.4. Installing GeoMesa Kafka in GeoServer¶
Warning
The GeoMesa Kafka GeoServer plugin is tested against GeoServer 2.12.x and GeoTools 18.x.
As described in section GeoMesa and GeoServer, GeoMesa implements a GeoTools-compatible data store. This makes it possible to use GeoMesa Kafka as a data store in GeoServer. GeoServer’s web site includes installation instructions for GeoServer.
After GeoServer is running, you will also need to install the WPS plugin to your GeoServer instance. The GeoServer WPS Plugin must match the version of GeoServer instance. The GeoServer website includes instructions for downloading and installing the WPS plugin.
Note
If using Tomcat as a web server, it will most likely be necessary to pass some custom options:
export CATALINA_OPTS="-Xmx8g -XX:MaxPermSize=512M -Duser.timezone=UTC \
-server -Djava.awt.headless=true"
The value of -Xmx
should be as large as your system will permit; this
is especially important for the Kafka plugin. You
should also consider passing -DGEOWEBCACHE_CACHE_DIR=/tmp/$USER-gwc
and -DEPSG-HSQL.directory=/tmp/$USER-hsql
as well. Be sure to restart Tomcat for changes to take place.
To install GeoMesa’s GeoServer plugin we can use the script manage-geoserver-plugins.sh
in bin
directory
of the appropriate GeoMesa Kafka binary distribution (see Versions and Downloads).
Note
If $GEOSERVER_HOME is set, then the --lib-dir
parameter is not needed.
$ bin/manage-geoserver-plugins.sh --lib-dir /path/to/geoserver/WEB-INF/lib/ --install
Collecting Installed Jars
Collecting geomesa-gs-plugin Jars
Please choose which modules to install
Multiple may be specified, eg: 1 4 10
Type 'a' to specify all
--------------------------------------
0 | geomesa-kafka-gs-plugin_2.11-$VERSION
Module(s) to install: 0
0 | Installing geomesa-kafka-gs-plugin_2.11-$VERSION-install.tar.gz
Done
Alternatively, extract the contents of the appropriate plugin archive into the GeoServer
WEB-INF/lib
directory. If you are using Tomcat:
$ tar -xzvf \
geomesa-kafka-gs-plugin/dist/gs-plugins/geomesa-kafka-gs-plugin_2.11-$VERSION-install.tar.gz \
-C /path/to/tomcat/webapps/geoserver/WEB-INF/lib/
If you are using GeoServer’s built in Jetty web server:
$ tar -xzvf \
geomesa-kafka-gs-plugin/dist/gs-plugins/geomesa-kafka-gs-plugin_2.11-$VERSION-install.tar.gz \
-C /path/to/geoserver/webapps/geoserver/WEB-INF/lib/
This will install the JARs for the Kafka GeoServer plugin and most of its dependencies. However, you will also need additional JARs for Kafka and Zookeeper that will be specific to your installation.
Warning
GeoMesa 2.1.0 depends on Scala 2.11, so you should make sure you use the
Kafka version built with Scala 2.11 as well (kafka_2.11_*
) to avoid
compatibility issues.
Copy these additional dependencies (or the equivalents for your Kafka installation) to
your GeoServer WEB-INF/lib
directory:
- kafka-clients-2.0.0.jar
- kafka_2.11-2.0.0.jar
- zkclient-0.10.jar
- zookeeper-3.4.10.jar
- metrics-core-2.2.0.jar
- jopt-simple-5.0.4.jar
- kafka-clients-1.0.1.jar
- kafka_2.11-1.0.1.jar
- zkclient-0.10.jar
- zookeeper-3.4.10.jar
- metrics-core-2.2.0.jar
- jopt-simple-5.0.4.jar
- kafka-clients-<IP_ADDRESS>.jar
- kafka-2.11-<IP_ADDRESS>.jar
- zkclient-0.10.jar
- zookeeper-3.4.10.jar
- metrics-core-2.2.0.jar
- kafka-clients-<IP_ADDRESS>.jar
- kafka_2.11-<IP_ADDRESS>.jar
- zkclient-0.7.jar
- zookeeper-3.4.10.jar
- metrics-core-2.2.0.jar
There is a script in the geomesa-kafka_2.11-$VERSION/bin
directory
($GEOMESA_KAFKA_HOME/bin/install-kafka.sh
) which will install these
dependencies to a target directory using curl
(requires an internet
connection). Edit the script before running to ensure the correct JAR versions
are specified.
Restart GeoServer after the JARs are installed.
<IP_ADDRESS>. Jackson Version¶
Warning
Some GeoMesa functions (in particular Arrow conversion) requires jackson-core-2.6.x
. Some versions
of GeoServer ship with an older version, jackson-core-2.5.0.jar
. After installing the GeoMesa
GeoServer plugin, be sure to delete the older JAR from GeoServer’s WEB-INF/lib
folder.


| Package | sandy.materials |
| Class | public class BitmapMaterial |
| Inheritance | BitmapMaterial Material |
| Implements | IAlphaMaterial |
| Subclasses | MovieMaterial, VideoMaterial |
| Property | Defined by | ||
|---|---|---|---|
| alpha : Number
Indicates the alpha transparency value of the material.
| BitmapMaterial | ||
| attributes : MaterialAttributes
The attributes of this material.
| Material | ||
| autoDispose : Boolean = true
Specifies if the material can automatically be disposed when unused
Default value is to true
| Material | ||
| filters : Array
The array of filters for this material.
| Material | ||
| flags : uint
Contains specific material flags.
| Material | ||
| id : Number
The unique id of this material.
| Material | ||
| lightingEnable : Boolean = false
Specifies if the material can receive light and have light attributes applied to it.
| Material | ||
| maxRecurssionDepth : uint = 5
Maximum recurssion depth when using precision > 1 (which enables the perspective correction).
| BitmapMaterial | ||
| modified : Boolean
The modified state of this material.
| Material | ||
| precision : uint = 0
Precision of the bitmap mapping.
| BitmapMaterial | ||
| repeat : Boolean = true
The repeat property.
| Material | ||
| smooth : Boolean = false
This property enables smooth bitmap rendering when set to true.
| BitmapMaterial | ||
| texture : BitmapData
The texture ( bitmap ) of this material.
| BitmapMaterial | ||
| type : MaterialType
The material type of this material.
| Material | ||
| useVertexNormal : Boolean = false
Specify if the material use the vertex normal information.
| Material |
| Method | Defined by | ||
|---|---|---|---|
|
BitmapMaterial(p_oTexture:BitmapData = null, p_oAttr:MaterialAttributes = null, p_nPrecision:uint = 0)
Creates a new BitmapMaterial.
| BitmapMaterial | ||
|
Calls begin method of the MaterialAttributes associated with this material.
| Material | ||
|
dispose():void
| BitmapMaterial | ||
|
Calls finish method of the MaterialAttributes associated with this material.
| Material | ||
|
| BitmapMaterial | ||
|
Renders the polygon dress in this material.
| Material | ||
|
Renders the sprite dress in this material.
| Material | ||
|
setTiling(p_nW:Number, p_nH:Number, p_nU:Number = 0, p_nV:Number = 0):void
Sets texture tiling and optional offset.
| BitmapMaterial | ||
|
setTransparency(p_nValue:Number):void
Changes the transparency of the texture.
| BitmapMaterial | ||
|
toString():String
Returns a string representation of this object.
| BitmapMaterial | ||
|
Calls unlink method of the MaterialAttributes associated with this material.
| Material | ||
|
unlinkAll():Array
Unlink all the non used polygons
| Material |
| alpha | property |
alpha:Number
[read-write]Indicates the alpha transparency value of the material. Valid values are 0 (fully transparent) to 1 (fully opaque).
The default value is 1.0
.
public function get alpha():Number
public function set alpha(value:Number):void
See also
| maxRecurssionDepth | property |
public var maxRecurssionDepth:uint = 5
Maximum recurssion depth when using precision > 1 (which enables the perspective correction). The bigger the number is, the more accurate the result will be. Try to change this value to fits your needs to obtain the best performance.
| precision | property |
public var precision:uint = 0
Precision of the bitmap mapping. This material uses an affine linear mapping. It results in a lack of accuracy at rendering time when the surface to draw is too big. One usual solution is to augment the number of polygon, but the performance cost can be quite big. Another solution is to change the precision property value. The lower the value, the more accurate the perspective correction is. To disable the perspective correction, set this property to zero, which is also the default value If you use the precision to solve the distortion issue, you can reduce the primitives quality (except if you are experiencing some sorting issues)
| smooth | property |
public var smooth:Boolean = false
This property enables smooth bitmap rendering when set to true. The default value is set to false to have the best performance first. Enable this property have a performance impact, use it warefully
| texture | property |
texture:BitmapData
[read-write]The texture ( bitmap ) of this material.
Implementation public function get texture():BitmapData
public function set texture(value:BitmapData):void
| BitmapMaterial | () | constructor |
public function BitmapMaterial(p_oTexture:BitmapData = null, p_oAttr:MaterialAttributes = null, p_nPrecision:uint = 0)
Creates a new BitmapMaterial.
Please note that we use internally a copy of the constructor bitmapdata. That means in case you need to access this bitmapdata, you can't just use the same reference but you shall use the BitmapMaterial#texture getter property to make it work.
Parametersp_oTexture:BitmapData (default = null ) — The bitmapdata for this material.
|
|
p_oAttr:MaterialAttributes (default = null ) — The attributes for this material.
|
|
p_nPrecision:uint (default = 0 ) — The precision of this material. Using a precision with 0 makes the material behave as before. Then 1 as precision is very high and requires a lot of computation but proceed a the best perpective mapping correction. Bigger values are less CPU intensive but also less accurate. Usually a value of 5 is enough.
|
See also
| dispose | () | method |
public override function dispose():void
| init | () | method |
public override function init(p_oPolygon:Polygon):void
Parameters
p_oPolygon:Polygon — The face dressed by this material
|
| setTiling | () | method |
public function setTiling(p_nW:Number, p_nH:Number, p_nU:Number = 0, p_nV:Number = 0):void
Sets texture tiling and optional offset. Tiling is applied first.
Parametersp_nW:Number |
|
p_nH:Number |
|
p_nU:Number (default = 0 )
|
|
p_nV:Number (default = 0 )
|
| setTransparency | () | method |
public function setTransparency(p_nValue:Number):void
Changes the transparency of the texture.
The passed value is the percentage of opacity. Note that in order for this to work with animated texture, you need set material transparency every time after new texture frame is rendered.
Parametersp_nValue:Number — A value between 0 and 1. (automatically constrained)
|
| toString | () | method |
public function toString():String
Returns a string representation of this object.
ReturnsString — The fully qualified name of this object.
|


These release notes cover new developer and user-facing incompatibilities, important issues, features, and major improvements.
Created a new class OperationStatus that wraps OperationStatusCode and an exception message, most of the patch consists of the former replacing the latter.
EnableTableHandler used to call many enables on the table, now it calls it once and eventually times out if not all the regions are assigned and none is moving.
A new config parameter, "hbase.hstore.compaction.kv.max", has been added to limit the number of rows processed in each iteration of the internal compaction code. Default value is 10.
A new config parameter, hbase.connection.per.config, has been added. If set to true, there is no connection sharing. This is default setting. If set to false, connection sharing would be enabled so that fewer connections to zookeeper are used.
HRegion.bulkLoadHFile() has been removed in 0.92 and TRUNK. It is deprecated in 0.90.5 HRegion.bulkLoadHFiles() is introduced for multi-family bulk load. Default value for hbase.bulkload.retries.number is 0, meaning bulk load would never give up.


This place held many football matches. Mananchira scores high as one of the places to visit in Kozhikode. This place provides tranquility to the visitors which is much sought after as one wants to escape the chaotic city life. It is a beautiful park covered with lawns, traditional buildings, a musical fountain, and an open-air theatre. This park is built around a man-made lake known as Mananchira lake.


Doconce supports the following themes from the Bootstrap family:
bootstrap
(the original Bootstrap theme)bootswatch
, defaults to Cosmo themebootswatch_THEME
, where THEME
can be among
(see demos)cerulean
cosmo
flatly
journal
lumen
readable
simplex
spacelab
united
yeti
amelia
cyborg
darkly
slate
superhero
!split
before the first sectionstatic_*
static_*
)1: "Admon" is a short form of admonition: a box that highlights some text, either as extra material or as particularly important material. Doconce supports different types of admonitions: notice, question, summary, and warning. These can have an optional title, and some admonition styles will also include an icon image. In addition, there is a block admonition without a title and icon.
The Bootstrap/Bootswatch styles support two kinds of admons:
bootstrap_alert
) with colored background (default)bootstrap_panel
) where only the title has colored background
Terminal> doconce format html mydoc --html_style=boostrap
Terminal> doconce format html mydoc --html_style=booswatch
Terminal> doconce format html mydoc --html_style=boostrap --admon_style=bootstrap_panel
Terminal> doconce format html mydoc --html_style=booswatch_superhero --admon_style=bootstrap_panel
Below are some examples on admons.
In [1]: import numpy as np
In [2]: x = np.linspace(0, 4*np.pi, 11)
In [3]: y = exp(-0.1*x)*sin(x)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-3-c1040545fa6c> in <module>()
----> 1 y = exp(-0.1*x)*sin(x)
NameError: name 'exp' is not defined
In [4]: y = np.exp(-0.1*x)*np.sin(x)
In [5]: y
Out[5]:
array([ 0.00000000e+00, 8.38747563e-01, 4.57160372e-01,
-4.03174933e-01, -5.75315545e-01, -1.30666897e-16,
4.47461836e-01, 2.43889614e-01, -2.15089026e-01,
-3.06923992e-01, -1.39418467e-16])
This is the admon for warnings or paying attention.
slidecell
environment)


Lab #1: Sequence Alignment
Part 1: Getting Organized
If you look at the /data
directory, you will see that there are 3
sub-directories for 3 different genomes. Each of these files was
downloaded directly from its source genome project (TAIR, WormBase,
FlyBase). There are files for proteins and files for genomes (the A.
thaliana files are in separate chromosomes while the worm and fly have
all the sequences in a single file).
Now lets organize the files a little to make our lives easier. Create a
subdirectory in your home directory called Dat
a. Create
sub-directories for each species, and alias the sequences into each
directory. Also create sub-directories under Data
that organize by
sequence type rather than species. In the end, your hierarchical
structure should look like this.
Data
Sequences
Genome
A.thaliana.fa
C.elegans.fa
D.melanogaster.fa
Proteome
A.thaliana.fa
C.elegans.fa
D.melanogaster.fa
Species
A.thaliana
genome.fa
protein.fa
C.elegans
genome.fa
protein.fa
D.melanogaster
genome.fa
protein.fa
Note that the files do not have .gz
extensions because they have been
uncompressed. Furthermore, the A.thaliana chromosomes have all been
merged into a single file. You should not need to duplicate sequences.
That is, Sequences/Genome/A.thaliana.fa
and
Species/A.thaliana/genome.fa
should contain the same thing, so no need
to duplicate the data unnecessarily (i.e. make an alias). Lastly, the
file permissions should be "appropriate". When you have completed these
tasks, change directory to your home directory and run the following
command.
ls -lR Data > data_info.txt
Part 2: Lab Notebook
It is now time to start doing some bioinformatics experiments. Create a new directory to organize your thoughts and files.
mkdir ~/Lab1
cd ~/Lab1
Open up another terminal, change to the directory you just created, and start a log where you can keep notes. This will be your laboratory notebook for this unit. You're going to be attaching this to a SmartSite assignment along with other files.
cd ~/Lab1
nano lab1_notebook.md
The format of the file will be Markdown. If you aren't familiar with Markdown format, go check it out online. It's just standardized way of writing plain text files that is easily converted into other formats.
Create a simple table with the following information for each species.
- Size of the file
- Number of chromosomes
- Size of the genome in bp
- Number of protein-coding genes
- Average protein length
The size of the file is very easy to determine. You can use ls
or wc
for that. To find the various chromosomes, use grep
. The size of the
genome will be the number of {ACGT} letters. This is a little
complicated because it's not the size of the file. The files also have
newline characters and FASTA headers. You need to subtract these.
Fortunately, you can all of this with the Unix skills you already have.
Part 3: Local Alignment
The program we are going to use for alignment is called water
, which
is named after the Smith-Waterman algorithm. This comes from the
EMBOSS suite of bioinformatics programs, which is installed on your
system. One of the first things you should do when using a new program
is to skim the documentation. Some bioinformatics programs will have
man
pages, but not all. water
doesn't come with a man
page, but
there is good documentation online at the EMBOSS site. Most
bioinformatics programs will have a usage statement that gives you
some help with the program. To display the usage statement, try the
-h
, -help
, --help
options or try using the program without any
arguments. The water
program responds to the first three, but if you
give it no arguments, it will start prompting you for arguments (which
can be useful or annoying depending on your mindset).
As you gain more experience with bioinformatics tools, you will find a large variety of command line syntaxes and usage statements. Why? Because most scientific programmers aren't professional software developers. They don't always follow the rules and best practices of the Unix community.
water -h
There are not may options. We need to provide two sequence files,
penalties for gap opening and extension, and an output file. The scoring
matrix appears to BLOSUM62 by default but others are available (see
/usr/local/share/EMBOSS/data
). Let's try the interactive mode.
water
The program now asks for the name of the input sequence file. You can't tab-complete this. That's enough reason for me to NEVER USE THE INTERACTIVE MODE, but if you like it, go ahead.
So where are we going to get our sequence files from? Let's grab the
first protein from the A. thaliana, C. elegans, and D. melanogaster
proteomes to begin. You can use head
with a command line option for
the number of lines and the >
redirection symbol for this task. Save
these files as at1.fa
, ce1.fa
, and dm1.fa
. You might want to write
a bit in your lab1_notebook.md
file about how you did this. You can
even paste in parts of your history
.
Now let's try aligning the various files to each other. Note that the
-asequence
and -bsequence
are optional. So the following two
commands are equivalent.
water -asequence at1.fa -bsequence ce1.fa -gapopen 10 -gapextend 5 -outfile at_ce.water
water at1.fa ce1.fa -gapopen 10 -gapextend 5 -outfile at_ce.water
Read the output of this command with less
. Note the score, percent
identity, percent similarity, and score. Is a score of 37 good? Hmm,
that's a difficult question. What exactly does "good" mean? Should a
good score mean that two sequences are evolutionarily related? That they
have similar function? As a scientist, one of the first questions you
should ask yourself is how likely that alignment could have occurred at
random.
Part 4: Random Expectation
We can use the EMBOSS shuffleseq
to create related sequences whose
letters have been mixed up.
head ce1.fa
shuffleseq ce1.fa -outseq ce1.shuffle.fa
head ce1.shuffle.fa
Notice that the sequences are completely different. Now let's determine
if they actually have the same number of letters. We'll use the
compseq
program for that.
compseq ce1.fa -word 1 -outfile ce1.comp
compseq ce1.shuffle.fa -word 1 -outfile ce1.shuffle.comp
less ce1.comp
less ce1.shuffle.comp
They files look pretty similar, but are they exactly the same? We can use
the Unix diff
command for that.
diff ce1.comp ce1.shuffle.comp
Nothing happened? Actually, that was very important. diff
reports
which lines are different. If there aren't any, then there's nothing to
report. To verify this, try diff
-ing the two sequence files. They
should have the same FASTA definition line, but completely different
sequence lines.
diff ce1.fa ce1.shuffle.fa
Well, that's not quite what happened. Even the FASTA header lines are
slightly different. Apparently shuffleseq
changes whitespace in the
defline for some reason.
Now let's try aligning the shuffled C. elegans protein against the A. thaliana protein.
water at1.fa ce1.shuffle.fa -gapopen 10 -gapextend 5 -outfile 1.water
Examine the file and look at the score. Use the arrow keys or your
history
to repeat the command you used to create the shuffled
sequence. This will overwrite your last command. Then do the alignment
again and look at the score. Repeat this a few more times. As you can
see, the score changes each time. Do you wonder what the distribution of
scores looks like? Of course you do. So let's do this 1000 times.
Wait! Hands off those arrow keys. The shuffleseq
program will let us
make multiple copies of the same sequence. That will make our lives much
easier.
shuffleseq ce1.fa -outseq ce1.shuffle.fa -shuffle 1000
less ce1.shuffle.fa
water at1.fa ce1.shuffle.fa -gapopen 10 -gapextend 5 -outfile 1k.water
Now let's collect all the scores and make a histogram. The only part of
each alignment we care about is the score. Fortunately, there's only one
place in each alignment that uses the word 'Score' so we can pull that
out with grep
.
grep Score 1k.water
To get just the number, we can treat the other characters as 'fields' in
a pseudo-spreadsheet using the cut
command with the -d " "
option to
tell it that our fields split on spaces and the -f 3
option to tell it
we want the 3rd column. We can pipe the grep
command line above
directly to the cut
command without creating any intermediate files.
grep Score 1k.water | cut -d " " -f 3
Let's sort
this and look at the maximum and minimum values. The -n
option tells sort
to compare numerically rather than alphabetically.
grep Score 1k.water | cut -d " " -f 3 | sort -n
Use head
and tail
to find the minimum and maximum values. Or you can
use less
and scroll the the output.
There is an odd Unix command called uniq
that compares adjacent lines
in a file and reports when they are not the same. It will count when
they are not the same with the -c
option. We can use that to make a
histogram.
grep Score 1k.water | cut -d " " -f 3 | sort -n | uniq -c
Boom! This is the distribution of maximum scoring alignments expected at random between these two sequences. Answer the following questions in your notebook.
- Is the shape of the curve normal? Do you expect it to be normal?
- Do you expect all protein comparisons to have the same distribution?
- How would protein composition and length affect the scores?
- How would the scoring matrix and gap penalites affect the scores?
- How might real sequences be different from random?
Part 5: Alignment Significance
OK, the training wheels are off and it's time to do some experiments on your own. Your goal is to determine the statistical significance of an alignment. The query sequence is B0213.10, which can be found in the C. elegans proteome. Search this against all A. thaliana and D. melanogaster proteins to find its homologs.
Before you begin, it's a good idea to get an idea how long it will take to do the experiment. Will your experiment take seconds, minutes, hours, days, or longer? Before attempting to do the whole experiment, it pays to do a small fraction first. Don't begin until you can answer the following questions?
- How many amino acids can I align per second?
- How many amino acids do I need to align to do this experiment?
- How long would it take to compare two proteomes?
Write those down in your notebook. Now let's get back to the experiment. You want to find the A. thaliana and D. melanogaster orthologs of B0213.10. Set up the experiment any way you like. You need to be able to answer the following questions.
- What is the best match in each genome?
- What protein is this?
- What are the alignment properties (% identity, etc)
- What is the expected score of your alignment at random?
- How different is your best score from random?
- How statistically significant is this score?
- How biologically significant is this score?
After you have finished all your experiments and commentary, do the following
ls -lFR ~/Lab1 > ~/lab1_info.txt
Checklist
Turn in the following files as a tar-ball in SmartSite.
- data_info.txt
- lab1_notebook.md
- lab1_info.txt


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/my.20monads!.html ---
inside a tactic
do-block, how do i get a list expr
out of a list (tactic expr)
?
list.mmap id
thanks :)
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


#1
Show off your aerial exploits for a shot at glory in the GTA Online #SMUGGLERS Rockstar Editor contest: https://t.co/5JOopKXpej pic.twitter.com/M3CiXGmsVF
— Rockstar Games (@RockstarGames) September 20, 2017
Show off your aerial exploits for a shot at glory in the GTA Online #SMUGGLERS Rockstar Editor contest: https://t.co/5JOopKXpej pic.twitter.com/M3CiXGmsVF
— Rockstar Games (@RockstarGames) September 20, 2017
And then there were two
— Rockstar Games (@RockstarGames) September 17, 2017
An epic MOTOR WARS battle comes down to an on-foot 1v1 showdown with pistols@The_Cool_Dean vs @GermanScientist pic.twitter.com/3v1X9jfs0g
I AM SCREAMING!!!! WHO DID THIS 😂😂😂 pic.twitter.com/fi2LX3D1qH
— Dank Memes 💎💎💎 (@FreeMemesKids) September 13, 2017
This guy 😂 pic.twitter.com/NMXFOyqg12
— Dank Memes 💎💎💎 (@FreeMemesKids) August 23, 2017
— Dank Memes 💎💎💎 (@FreeMemesKids) July 8, 2017
— Dank Memes 💎💎💎 (@FreeMemesKids) June 11, 2017


val heuristicValue: Double
A heuristic value that measures the similarity of the values
heuristicValue - A heuristic value that measures the similarity of the values
heuristicValue
Author Michael Rapp
Since 2.1.0


RUN LOLA RUN (1998) A Film Review by Ivana Redwine Copyright 1999 Ivana Redwine
I went into "Run Lola Run" expecting to be dazzled, yet I thought I would probably hate it anyway since my taste leans toward films with strong stories and fully developed characters. But I was pleasantly surprised to find this little German movie to be emotionally engaging as well as highly entertaining. Although "Run Lola Run" hasn't redefined my taste, I learned something about movies and myself after seeing it. There are ways to create an unforgettable character and a film that sparks with emotion, even if the story is paper-thin.
"Run Lola Run" is visually stunning and has an energy seemingly fueled by pure adrenaline. The film is basically a breathlessly paced thriller with a bit of a love story thrown in. Its inventive narrative structure also creates a frame for a meditation on the mutable nature of destiny. Although "Run Lola Run" is stronger on style than substance and story, it is not without some emotional resonance and philosophical depth, and it isn't surprising that it has attracted considerable attention at film festivals. It won Best Film at the 1999 Seattle International Film Festival and the Audience Award in the World Cinema category at the 1999 Sundance Film Festival.
A preamble sets up the film, suggesting that in a world of infinite possibilities there is only one certainty--the amount of time something takes. Then Lola (Franka Potente) receives a phone call from her boyfriend Manni (Moritz Bleibtreu), and he tells her he is in big trouble. While working for a crime boss, Manni lost a bag containing 100,000 marks, and he must replace the money by high noon or he will be killed.
The film's innovative structure is tiered into three parts, all starting at the point when Lola gets the call. From there, each segment branches off, suggesting dramatically different destinies for Lola, Manni, and others. Even the lives of some of the passersby are changed forever, and this provides much of the movie's humor.
Writer/director/co-composer Tom Tykwer's film has an audacious style. I thought the film's visual aspects and its edgy score were perfectly matched to the emotional high stakes of the action. Energetic camera work and the pulse-like beat of techno music intensify the frantic mood of the film. The editing is impressive, too, as the movie switches back and forth between film and videotape, in addition to mixing still photography and animation with live action.
Even though the story in "Run Lola Run" is a little flimsy, its characters managed to eventually pull me in, making me care about their plight, and much of the credit for this must surely belong to the actors. This is especially true of Franka Potente as Lola. She has an intense, charismatic screen presence, and some of the tight shots of her expressive face are particularly dramatic. I was also impressed by the film's way of showing different possible fates, as if drawn at random from a multi- layered time/space continuum of infinite possibilities. "Run Lola Run" not only entertained me, it made me think and feel. Not bad for an afternoon at the movies.
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


Home
About Our Team
Feed
Find Outdoor Pools
View Stats
Outdoor Pools Near You
Instructions:
Drag the map to your preferred location
Right click on that area
View pools nearby


History has repeatedly shown that to win the biggest battles for systematic social change it takes massive collaboration and commitment. This time it’s a matter of life or death on this planet and action is needed ASAP.
To defeat our catastrophic climate collapse and horrific species extinction trajectories it will take lots more than big protests.
This will take courage. However, without brilliant organization these seeds for change are likely to go to waste.
Grassroots organisations have given us hope in the power of people organising. They have shown us that we CAN come together to make waves and have our voices heard. To speak on behalf of all beings and the planet.
We saw that the current momentum was not matching the urgency for change, so we created GetCourageNow.
GetCourageNow is a one stop app that provides you with a secure, open source, self organising collaboration & news system for Climate Change campaigning. We can help you fight in the most important battle of our time.
How does GetCourageNow actually work?
Testimonials AAA
“The most innovative and needed app I've yet seen, and I vet 10 app proposals on average per day!”
— Ed Bell, Head of tech innovation vetting for Leonardo DiCaprio's foundation
“Absolutely Awesome! GetCourageNow makes it possible for virtually everyone to get involved at some level.”
— Dolores Huerta, Cofounder of United Farm Workers; President of Dolores Huerta Foundation
So the unique and brilliant thing about GetCourageNow is that it provides a simple and quick way for a campaign to ID not only much larger numbers of potential volunteers willing to do NVDA (or in an electoral version, other major time-consuming, albeit legal activities), but to ID the barriers for each such potential volunteer, which if removed, and at usually no cost, would massively improve numbers able to be recruited and committed.
— Wade Rathke, Chief Organizer of ACORN International, and founder of ACORN, once largest most effective community organising operation in the USA
“After viewing the GetCourageNow demo, I'm sold. I love not just the crowdacting tool, but the social rewards and peer-bonding tools as well, which might be even more important for electoral campaigns than the crowdacting. I can't wait for them to get the funding they need so we can beta test this to help our own campaign win back Dem control of the NY State Senate.”
— Blake Morris, Democratic candidate for NY State Senate
“Loved the GetCourageNow demo! Wish it was coded and we had it a month ago! I especially like its advanced features for creating peer bonds and thereby its power to engage more people and paste, and at the same time, to thereby reduce the flake out problem. Its social rewards features is also a great idea.”
— Michael Carter, Deputy Campaign Manager for Ocasio2018 (NY 14th Congressional District/ Bronx and Queens)
“I am excited about the potential of GetCourageNow to significantly improve the recruitment and commitment powers of leading progressive organisations today.”
— Josh Nussbaum, Senior Data Advisor, Indivisible National
“GetCourageNow is the only solution I've seen that would enable us to recruit and support the numbers of canvassers and phone bankers we need to win the strong election protection legislative victories we urgently need in every state to save democracy before it's too late.”
— John Brakey, Executive Director, AUDIT-AZ
“Brilliant and Simple!”
— Joel Segal, Co-Director of North Carolinians for Clean Energy
“For me, organising and moving people through leadership has always been for me about one-on-one engagement. So, I really like this [GetCourageNow], because it seems that the human interaction doesn't go away. It's a tech tool that works with organizers. I also like it because there are a lot of people who self-select as activists but have no idea how to get involved.”
— Walker Foley, Southern California Organizer, Food & Water Watch
“Fantastic idea! Much needed. I'll start making some introductions for you.”
— Wesley Clark Jr.
“GetCourageNow's unique crowdacting functionality is a clever use of technology to amass the activists we need to advocate for and pass strong climate change legislation. We really like the simple, user-friendly design... We would be eager to try it out as soon as the software is ready and available. We believe the app could help us significantly to identify new activists in the San Diego area, and their specific interest in specific campaigns such as climate action plans, adoption of community choice energy, and keeping oil in the ground.”
— Joint Statement, San Diego 350 Steering Committee
“GetCourageNow is an innovative app that I think has the power to change the way we approach and support rapid mobilization of people in-person on a range of social justice issues. The design team is refreshingly open to suggestions and looking to build a useful product for social justice leaders of the day.”
— Aditi Juneja, Co-Founder of ResistanceManual.org, OurStates, and the Self Care Sundays Podcast
“In a state like Colorado, with a huge battle fighting the oil and gas industries encroachment on our health and homes, GetCourageNow could be a fantastic tool to help communities on the front lines stay engaged and motivated for the long-haul. Frankly, I wish we had this application [GetCourageNow] last summer to better be able to recruit the petition gatherers we needed, and then, had we been successful in getting on the ballot, the massive numbers of canvassers & phone bankers we'd then need to pass the two anti-fracking initiatives.”
— Lisa Trope, Senior Colorado Organizer, Food & Water Watch
“Exactly what the progressive movement needs to expand our capacity for major victories, channeling the frustrated energy that saturates anyone with a conscious these days and guiding them to action.”
— Greg Schwedock, IT head for TheClimateMobilization
“This application has the potential to raise the effectiveness of involving people into the most important struggle of our times: stopping the fossil fuel monster from destroying our home planet…It can also be an important step towards taking political power back from corporate elites into the hands of the people.”
— Kjell Kühne, Leave it in the Ground Initiative (LINGO)
“GetCourageNow is very thorough and offers solutions and support for many different aspects of how to run winning campaigns in the Medicare For All movement. I'm excited to make introduction to some national organizers.”
— Katie Robbins, Executive Director, PNHPNY (Physicians for a National Health Program-New York Metro Chapter)
“We can see how GetCourageNow's crowd acting and anti-flake-out functionalities could be a uniquely valuable organising toolset for many of the collective actions needed to confront policies that threaten public health, fracking in particular. The entrenched interests promoting fracking in Pennsylvania are formidable. So we welcome a tool that could be used to mobilize many more volunteers than usual to rally against pipelines and fracking, especially health professionals who are our target group. And therefore we are open to trying out GetCourageNow once it is on line and free of bugs as an organising tool for PSR Philadelphia and suspect it will become a valuable as well as for lots of groups fighting fracking in PA.”
— Walter Tsau, Executive Director, Physicians for Social Responsibility-Philadelphia
“The world is ripe for an app like this if you get it right. It seems like you are pursuing a really productive vein.”
— Dan Sherrell, Campaign Coordinator, NY Renews
“Really cool. This could be really helpful.”
— Micah Parkin, Director 350Colorado
“We really appreciate how GetCourageNow recognizes that the strength of an organization lies in both its numbers and how well organized it is. So, we are really excited for the opportunity to beta test GetCourageNow for three reasons: 1) its well thought out platform helps organizers get better organized 2) it enables, for the first time ever, those people who wait until a movement hits critical mass before signing on to immediately self-identify and be drawn into the organization much faster, and 3) it cleverly allows those potential participants who want to be involved away from the front lines to participate in a variety of roles behind the scenes.”
— Pramilla Malick, Chair, Protect Orange County
From our blog
-
Article - 6 Amazing Things That Will Happen If We Flip The Senate - by Gary Krane
Please keep in mind that if the Dems retake the Senate, as well as the House, here are six astoundingly wonderful changes that can, and very likely, if we put sufficient pressure on the Dems, will happen: ![](https://images.squarespace-cdn.com/content/v1/5985dfd0b8a79b27663a4a57/1540023612695-TWTC1TOVM30UE14FDIWD/ke17ZwdGBToddI8pDm48kJ6S_F8teGVt8uo2xehHOchZw-zPPgdn4jUwVcJE1ZvWQUxwkmyExglNqGp0IvTJZamWLI2zvYWH8K3-s_4yszcp2ryTI0HqTOaaUohrI8PImK3kUdDsYt0az5jlzliAA2WlMyaZYLn9P8CH6MhBKIIKMshLAGzx4R3EDFOm1kBS/6-things-image-1.jpg?format=original) Congress will be likely to pass Medicare for all, especially if enough American have GetCourageNow or an equally powerful mobilization and commitment tool to pressure the moderate and conservative Dems and moderate GOPers to do the right thing. -
Article - Call to Action: Canvassing - By Gary Krane
According to the October IPCC (Intergovernmental Panel on Climate Change) report, their latest study by 90 climate scientists, from 40 countries, analyzing 6000 studies we have less than 12 years to stop using fossil fuels and switch to a solar-wind-geothermal economy before a catastrophic future. Twelve years before agriculture stops working, famines become widespread, coastal cities flood, and severe multi-year droughts become so routine and devastating that mass migration destabilizes governments. -
GetCourageNow Midterm Volunteer Tshirt Giveaway
Want to put the cherry on top of that oh-so-good feeling of volunteering? Why not have that cherry be a brand new T-shirt! We are happy to say that Danny over at Blue Wave Botique has offered to support our cause the best way he can by donating 50 super soft and stylish T-shirts. Head over to Blue Wave Botique’s website to check out some of the clever designs Danny has come up with.
Subscribe via RSS


Gabapentin (400mg)
Inhalant (Butane)
Dose:
2000mg, oral, Pill/tablet
2000mg, oral, Pill/tablet
2000mg, oral, Pill/tablet
2000mg, oral, Pill/tablet
Inhalants (Butane) 4 hits
Background: Male, 370, 6,2ft tall.
Iíve never really tried any psychoactive drugs before, or for that matter, any recreational drugs. The only thing I ever tried was lighter gas (butane), which does give an interesting feeling, but I can really feel my brain cells frying, and I feel down for up to 24 hrs later.
I also tried some dried psilocybin shrooms, but they did absolutely nothing. I suspect the dosage was too low, and since Iím a big guy, I need more than people of regular size.
Okay, letís try some Gabapentin. I have plenty of pills. Itís early in the morning, and Iíve just had breakfast, so my stomach is full. I feel neutral; neither happy nor sad.
Total: 2000mg +2 hrs, 2pm
I feel sort of good, like Iím a tiny bit tipsy, a bit dizzy and floaty. Thereís a small amount of buzzing in my extremities.
+5 hrs, 5pm: I can definitely feel the effects now. I feel pretty drunk and dizzy, and my eyes can only really focus on whatís right in front of me, but I can still act sober. I get an occasional ďwaveĒ of pleasure running through my body, and it feels really good. I need more.
+5,5 hrs, 5.30pm: Ate dinner, feeling a bit more sober now. My vision is still a bit blurryÖ Okay, maybe I didnít sober up.  This is weird, but it feels good. Smoking really seems to enhance the feeling.
Total: 4000mg +6 hrs. 6pm
Just doubled the dosage. Iím considering huffing a tiny amount of butane, but I donít know. The stuff is nasty, causes headache, and I can taste the butane in my mouth for an entire day. The trip lasts only a few minutes, but it is awesome while it lasts. Weíll see. For now, Iím satisfied with just the Gabapentin. Iím in my recliner, just chilling, preparing to listen to some music. Itís very serene around here. Birds are chirping outside and it has just rained, so the smell of flowers is amazing and very powerful. Mentally, thereís no change. I feel exactly the same as when I woke up. Looking in the mirror, I can see bags under my eyes. I donít feel especially tired though. Physically I feel a bit different. It may just be my mind messing with me, but I seem to be able to breathe easier, almost like the air flows faster into my lungs.
Total: 6000mg +7 hrs. 7pm
I couldnít find any butane, which is probably a good thing, so I went to buy cigarettes.  I seem to notice things I usually donít: the bright color of the flowers, the faint shift of colors in hedges and bushes. White almost blinds me, yet I feel almost drawn to it. When I went into the shop, I noticed the hubcaps on a parked car. They seemed to move a tiny amount. Everything inside the shop (which Iíve shopped at almost daily for 12 years now) is brighter than usual. Itís an explosion of color. Even the skin of the cashier, whom Iíve seen plenty of times, seems to be softer and more gentle than before. Itís a bit odd, not unnerving or anything, but pretty cool. My eyes are hurting a bit from having such a hard time focusing on anything.
Total 8000mg +7 hrs. 7.43pm
Last chance for this to impress me. 8 grams inside me now. I feel absolutely nothing anymore. Letís see if anything happens.
+8 hrs. 8.44pm
Found some butane, and took 4 hits, to see if the Gabapentin would react to it. Doesnít really seem to do anything. I now honestly believe everything I experienced today was just a placebo effect, due to all the stories Iíve read about it. I seem to be immune to Gabapentin. No numbness, Iím not dizzy anymore and I feel absolutely fine. I probably got dizzy because I didnít sleep well last night. Itís the same with shrooms, or anything else that has to go through my stomach. No effect. I even have to take a triple dose of Paracetamol to cure a headache. I thoroughly believe that my immune system is way too strong, and it just crushes anything unfriendly it comes in contact with. Of course, Iím too much of a chicken to try anything stronger, to test my theory.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


#define CAPABILITIES
Here are the capabilities that I encountered.
| CAP_AIM_VOICE | {09461341-4C7F-11D1-8222-444553540000} |
||
| AIM specific capability. | |||
| CAP_AIM_SENDFILE | {09461343-4C7F-11D1-8222-444553540000} |
||
| AIM specific capability. | |||
| CAP_AIM_ISICQ | {09461344-4C7F-11D1-8222-444553540000} |
||
| The client is, in fact, an ICQ client, and not an AIM client. This capability may occur as a type-2 message's capability: then the content will contain the sender's dc info. | |||
| CAP_AIM_IMIMAGE | {09461345-4C7F-11D1-8222-444553540000} |
||
| AIM specific capability. | |||
| CAP_AIM_BUDDYICON | {09461346-4C7F-11D1-8222-444553540000} |
||
| AIM specific capability. | |||
| CAP_AIM_STOCKS | {09461347-4C7F-11D1-8222-444553540000} |
||
| AIM specific capability. | |||
| CAP_AIM_GETFILE | {09461348-4C7F-11D1-8222-444553540000} |
||
| AIM specific capability. | |||
| CAP_AIM_SERVERRELAY | {09461349-4C7F-11D1-8222-444553540000} |
||
| The client supports messages in the style of direct messages (aka type-2 messages). If this capability is not set, the server will refuse type-2 messages to this contact with this capability as the messages' capability. | |||
| CAP_AIM_GAMES | {0946134A-4C7F-11D1-8222-444553540000} |
||
| AIM specific capability | |||
| CAP_AIM_SBUD | {0946134B-4C7F-11D1-8222-444553540000} |
||
| AIM specific capability. | |||
| CAP_AIM_INTEROPERATE | {0946134D-4C7F-11D1-8222-444553540000} |
||
|
Setting this lets AIM users receive messages from ICQ users, and ICQ users
receive messages from AIM users. Windows AIM 5.2.3139 is the only thing I
know that sets this. Well, and Gaim 0.60cvs. Also, though you advertise the capability, it does not get sent to other users with your other capabilities. |
|||
| CAP_UTF8 | {0946134E-4C7F-11D1-8222-444553540000} |
||
| The ICQ client supports UTF-8 messages. Each outgoing message that uses the UTF-8 character set has CAP_UTF8 appended as a GUID. Otherwise, the character set used is totally undefined. Note that CAP_UTF8 also signals UCS-2BE encoded & tagged type-1 messages are understood. | |||
| CAP_RTFMSGS | {97B12751-243C-4334-AD22-D6ABF73F1492} |
||
| The ICQ client supports RTF type-2 messages. Each outgoing message that is in RTF format has CAP_RTFMSGS appended as a GUI. | |||
| CAP_STR_2001 | {A0E93F37-4C7F-11D1-8222-444553540000} |
||
| ICQ 2001 sends this to all contacts upon (visible) login inside an otherwise empty CAP_SERVERRELAY type-2 message. | |||
| CAP_STR_2002 | {10CF40D1-4C7F-11D1-8222-444553540000} |
||
| ICQ 2002 sends this the same way as CAP_STR_2001 inside an otherwise empty CAP_SERVERRELAY type-2 message. | |||
| CAP_IS_2001 | {2E7A6475-FADF-4DC8-886F-EA3595FDB6DF} |
||
| Capability sent by ICQ 2001. | |||
| CAP_IS_WEB | {563FC809-0B6f-41BD-9F79-422609DFA2F3} |
||
| Sent by ICQ Lite and ICQ2go. | |||
| CAP_LICQ | {09491349-4C7F-11D1-8222-444553540000} |
||
| Note the 0x49 instead of 0x46 to CAP_AIM_SERVERRELAY. This is sent by licq; probably a typo. | |||
| CAP_AIM_CHAT | {748F2420-6287-11D1-8222-444553540000} |
||
| AIM specific capability. | |||
| CAP_TRILL_CRYPT | {F2E7C7F4-FEAD-4DFB-B235-36798BDF0000} |
||
| Trillian crypted message. | |||
| CAP_TRILL_UNK | {97B12751-243C-4334-AD22-D6ABF73F1409} |
||
| Another unknown capability invented by Trillian. | |||
| CAP_MICQ | {6d494351-20a9-2052-2e4b-2e20wwxxyyzz} |
||
| Sent by mICQ. The last four bytes determine the client version. | |||
| CAP_SIM | {97B12751-243C-4334-AD22-D6ABF73F14xx} |
||
| Sent by SIM and Kopete. The last byte is the version number; if it is less than or 1<<6, then it's Kopete, otherwise it's SIM, with the byte being (major + 1) << 6 + minor. Kopete uses 1 for 0.6 up to 0.6.1b and 64 = 1<<6 for 0.6.2. Why can't those guys just use their own capability? | |||
| CAP_MACICQ | {DD16F202-84E6-11D4-90DB-00104B9B4B7D} |
||
| Capability supposedly sent by Mac ICQ. | |||
| CAP_KXICQ | {09491344-4c7f-11d1-8222-444553540000} |
||
| Sent by kxICQ2. | |||
| CAP_SIMNEW | {53494d20-636c-6965-6e74-2020wwxxyyzz} |
||
| Sent by SIM >= 0.8.3. The last four bytes determine the client version. Interpreted in US-ASCII, the capability reads "SIM client ####". |