- Obtain a plot of the residuals against the fitted values for this regression. Does this indicate that there are any problems with this regression, or not? Explain briefly.
Solution
Use the regression object pizza.1
:
ggplot(pizza.1, aes(x = .fitted, y = .resid)) + geom_point() + geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
On my residual plot, I see a slight curve in the smooth trend, but I am not worried about that because the residuals on the plot are all over the place in a seemingly random pattern (the grey envelope is wide and that is pretty close to going straight across). So I think a straight line model is satisfactory.
That’s all you needed, but it is also worth looking at a normal quantile plot of the residuals:
ggplot(pizza.1, aes(sample = .resid)) + stat_qq() + stat_qq_line()
A bit skewed to the left (the low ones are too low).
Also a plot of the absolute residuals, for assessing fan-out:
ggplot(pizza.1, aes(x = .fitted, y = abs(.resid))) + geom_point() + geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
A tiny bit of fan-in (residuals getting smaller in size as the fitted value gets bigger), but nothing much, I think.
Another way of assessing curvedness is to fit a squared term anyway, and see whether it is significant:
.2 <- update(pizza.1, . ~ . + I(Fat^2))
pizzasummary(pizza.2)
##
## Call:
## lm(formula = Calories ~ Fat + I(Fat^2), data = pizza)
##
## Residuals:
## Min 1Q Median 3Q Max
## -62.103 -14.280 5.513 15.423 35.474
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 90.2544 77.8156 1.160 0.2591
## Fat 25.9717 11.5121 2.256 0.0349 *
## I(Fat^2) -0.5702 0.4086 -1.395 0.1775
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25.25 on 21 degrees of freedom
## Multiple R-squared: 0.6834, Adjusted R-squared: 0.6532
## F-statistic: 22.66 on 2 and 21 DF, p-value: 5.698e-06
The fat-squared term is not significant, so that curve on the smooth trend in the (first) residual plot was indeed nothing to get excited about.
\(\blacksquare\)
- The research assistant in this study returns with two new brands of pizza (ones that were not in the original data). The fat content of a 5-ounce serving was 12 grams for the first brand and 20 grams for the second brand. For each of these brands of pizza, obtain a suitable 95% interval for the number of calories contained in a 5-ounce serving.
Solution
The suitable interval here is a prediction interval, because we are interested in each case in the calorie content of the particular pizza brands that the research assistant returned with (and not, for example, in the mean calorie content for all brands of pizza that have 12 grams of fat per serving). Thus:
<- c(12, 20)
newfat <- tibble(Fat = newfat)
new new
## # A tibble: 2 × 1
## Fat
## <dbl>
## 1 12
## 2 20
<- predict(pizza.1, new, interval = "p")
preds cbind(new, preds)
## Fat fit lwr upr
## 1 12 315.3447 260.5524 370.1369
## 2 20 395.7431 337.1850 454.3011
Use datagrid
to make new
if you like, but it is a very simple dataframe, so there is no obligation to do it that way.

For the pizza with 12 grams of fat, the predicted calories are between 261 and 370 with 95% confidence, and for the pizza with 20 grams of fat, the calories are predicted to be between 337 and 454. (You should write down what these intervals are, and not leave the reader to find them in the output.)
(Remember the steps: create a new data frame containing the values to
predict for, and then feed that into predict
along with the
model that you want to use to predict with. The variable in the data
frame has to be called precisely Fat
with a capital F,
otherwise it won’t work.)
These intervals are both pretty awful: you get a very weak picture of how many calories per serving the pizza brands in question might contain. This is for two reasons: (i) there was a fair bit of scatter in the original relationship, R-squared being around 65%, and (ii) even if we knew perfectly where the line went (which we don’t), there’s no guarantee that individual brands of pizza would be on it anyway. (Prediction intervals are always hit by this double whammy, in that individual observations suffer from variability in where the line goes and variability around whatever the line is.)
I was expecting, when I put together this question, that the 20-grams-of-fat interval would be noticeably worse, because 20 is farther away from the mean fat content of all the brands. But there isn’t much to choose. For the confidence intervals for the mean calories of all brands with these fat contents, the picture is clearer:
plot_cap(pizza.1, condition = "Fat")
A fat
value of 12 is close to the middle of the data, so the interval is shorter, but a value of 20 is out near the extreme and the interval is noticeably longer.
This part was a fair bit of work for 3 points, so I’m not insisting that you explain your choice of a prediction interval over a confidence interval, but I think it is still a smart thing to do, even purely from a marks point of view, because if you get it wrong for a semi-plausible reason, you might pick up some partial credit. Not pulling out your prediction intervals from your output is a sure way to lose a point, however.
\(\blacksquare\)
18.26 Where should the fire stations be?
In city planning, one major issue is where to locate fire stations. If a city has too many fire stations, it will spend too much on running them, but if it has too few, there may be unnecessary fire damage because the fire trucks take too long to get to the fire.
The first part of a study of this kind of issue is to understand the relationship between the distance from the fire station (measured in miles in our data set) and the amount of fire damage caused (measured in thousands of dollars). A city recorded the fire damage and distance from fire station for 15 residential fires (which you can take as a sample of “all possible residential fires in that city”). The data are in link.
- Read in and display the data, verifying that you have the right number of rows and the right columns.
Solution
A quick check of the data reveals that the data values are separated by exactly one space, so:
<- "http://ritsokiguess.site/datafiles/fire_damage.txt"
my_url <- read_delim(my_url, " ") fire
## Rows: 15 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: " "
## dbl (2): distance, damage
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
fire
## # A tibble: 15 × 2
## distance damage
## <dbl> <dbl>
## 1 3.4 26.2
## 2 1.8 17.8
## 3 4.6 31.3
## 4 2.3 23.1
## 5 3.1 27.5
## 6 5.5 36
## 7 0.7 14.1
## 8 3 22.3
## 9 2.6 19.6
## 10 4.3 31.3
## 11 2.1 24
## 12 1.1 17.3
## 13 6.1 43.2
## 14 4.8 36.4
## 15 3.8 26.1
15 observations (rows), and promised, and a column each of distances and amounts of fire damage, also as promised.
\(\blacksquare\)
- * Obtain a 95% confidence interval for the mean fire damage. (There is nothing here from STAD29, and your answer should have nothing to do with distance.)
Solution
I wanted to dissuade you from thinking too hard here. It’s just an ordinary one-sample \(t\)-test, extracting the interval from it:
t.test(fire$damage)
##
## One Sample t-test
##
## data: fire$damage
## t = 12.678, df = 14, p-value = 4.605e-09
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 21.94488 30.88178
## sample estimates:
## mean of x
## 26.41333
Or
with(fire, t.test(damage))
##
## One Sample t-test
##
## data: damage
## t = 12.678, df = 14, p-value = 4.605e-09
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 21.94488 30.88178
## sample estimates:
## mean of x
## 26.41333
Ignore the P-value (it’s testing that the mean is the default zero, which makes no sense). The confidence interval either way goes from 21.9 to 30.9 (thousand dollars).
\(\blacksquare\)
- Draw a scatterplot for predicting the amount of fire damage from the distance from the fire station. Add a smooth trend to your plot.
Solution
We are predicting fire damage, so that goes on the \(y\)-axis:
ggplot(fire, aes(x = distance, y = damage)) + geom_point() + geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
\(\blacksquare\)
- * Is there a relationship between distance from fire station and fire damage? Is it linear or definitely curved? How strong is it? Explain briefly.
Solution
When the distance is larger, the fire damage is definitely larger, so there is clearly a relationship. I would call this one approximately linear: it wiggles a bit, but it is not to my mind obviously curved. I would also call it a strong relationship, since the points are close to the smooth trend.
\(\blacksquare\)
- Fit a regression predicting fire damage from distance. How is the R-squared consistent (or inconsistent) with your answer from part~(here)?
Solution
The regression is an ordinary lm
:
.1 <- lm(damage ~ distance, data = fire)
damagesummary(damage.1)
##
## Call:
## lm(formula = damage ~ distance, data = fire)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.4682 -1.4705 -0.1311 1.7915 3.3915
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.2779 1.4203 7.237 6.59e-06 ***
## distance 4.9193 0.3927 12.525 1.25e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.316 on 13 degrees of freedom
## Multiple R-squared: 0.9235, Adjusted R-squared: 0.9176
## F-statistic: 156.9 on 1 and 13 DF, p-value: 1.248e-08
We need to display the results, since we need to see the R-squared in order to say something about it.
R-squared is about 92%, high, indicating a strong and linear relationship. Back in part~(here), I said that the relationship is linear and strong, which is entirely consistent with such an R-squared. (If you said something different previously, say how it does or doesn’t square with this kind of R-squared value.)
Points: one for fitting the regression, one for displaying it, and two (at the grader’s discretion) for saying what the R-squared is and how it’s consistent (or not) with part~(here).
Extra: if you thought the trend was “definitely curved”, you would find that a parabola (or some other kind of curve) was definitely better than a straight line. Here’s the parabola:
.2 <- lm(damage ~ distance + I(distance^2), data = fire)
damagesummary(damage.2)
##
## Call:
## lm(formula = damage ~ distance + I(distance^2), data = fire)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.8856 -1.6915 -0.0179 1.5490 3.6278
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.3395 2.5303 5.272 0.000197 ***
## distance 2.6400 1.6302 1.619 0.131327
## I(distance^2) 0.3376 0.2349 1.437 0.176215
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.227 on 12 degrees of freedom
## Multiple R-squared: 0.9347, Adjusted R-squared: 0.9238
## F-statistic: 85.91 on 2 and 12 DF, p-value: 7.742e-08
There’s no evidence here that a quadratic is better.
Or you might even have thought from the wiggles that it was more like cubic:
.3 <- update(damage.2, . ~ . + I(distance^3))
damagesummary(damage.3)
##
## Call:
## lm(formula = damage ~ distance + I(distance^2) + I(distance^3),
## data = fire)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2325 -1.8377 0.0322 1.1512 3.1806
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.8466 4.3618 2.487 0.0302 *
## distance 5.9555 4.9610 1.200 0.2552
## I(distance^2) -0.8141 1.6409 -0.496 0.6296
## I(distance^3) 0.1141 0.1608 0.709 0.4928
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.274 on 11 degrees of freedom
## Multiple R-squared: 0.9376, Adjusted R-squared: 0.9205
## F-statistic: 55.07 on 3 and 11 DF, p-value: 6.507e-07
No evidence that a cubic is better; that increase in R-squared up to about 94% is just chance (bearing in mind that adding any \(x\), even a useless one, will increase R-squared).
How bendy is the cubic?
ggplot(fire, aes(x = distance, y = damage)) + geom_point() +
geom_smooth(method = "lm") +
geom_line(data = damage.3, aes(y = .fitted), colour = "red")
## `geom_smooth()` using formula = 'y ~ x'
The cubic, in red, does bend a little, but it doesn’t do an obvious job of going through the points better than the straight line does. It seems to be mostly swayed by that one observation with damage over 40, and choosing a relationship by how well it fits one point is flimsy at the best of times. So, by Occam’s Razor, we go with the line rather than the cubic because it (i) fits equally well, (ii) is simpler.
\(\blacksquare\)
- Obtain a 95% confidence interval for the mean fire damage for a residence that is 4 miles from the nearest fire station*. (Note the contrast with part~(here).)
Solution
This is a confidence interval for a mean response at a given value
of the explanatory variable. This is as opposed to
part~(here), which is averaged over all distances.
So, follow the steps. Make a tiny data frame with this one value
of distance
:
<- datagrid(model = damage.1, distance = 4)
new new
## damage distance
## 1 26.41333 4
and then
<- predictions(damage.1, newdata = new)
pp pp
## rowid type predicted std.error statistic p.value conf.low conf.high
## 1 1 response 29.95525 0.6615595 45.27976 0 28.52604 31.38446
## damage distance
## 1 26.41333 4
28.5 to 31.4 (thousand dollars).
(I saved this one because I want to refer to it again later.)
\(\blacksquare\)
- Compare the confidence intervals of parts (here) and (here). Specifically, compare their centres and their lengths, and explain briefly why the results make sense.
Solution
Let me just put them side by side for ease of comparison: part~(here) is:
t.test(fire$damage)
##
## One Sample t-test
##
## data: fire$damage
## t = 12.678, df = 14, p-value = 4.605e-09
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
## 21.94488 30.88178
## sample estimates:
## mean of x
## 26.41333
and part~(here)’s is
pp
## rowid type predicted std.error statistic p.value conf.low conf.high
## 1 1 response 29.95525 0.6615595 45.27976 0 28.52604 31.38446
## damage distance
## 1 26.41333 4
The centre of the interval is higher for the mean damage when the distance is 4. This is because the mean distance is a bit less than 4:
%>% summarize(m = mean(distance)) fire
## # A tibble: 1 × 1
## m
## <dbl>
## 1 3.28
We know it’s an upward trend, so our best guess at the mean damage is higher if the mean distance is higher (in (here), the distance is always 4: we’re looking at the mean fire damage for all residences that are 4 miles from a fire station.)
What about the lengths of the intervals? The one in (here) is about \(30.9-21.9=9\) (thousand dollars) long, but the one in (here) is only \(31.4-28.5=2.9\) long, much shorter. This makes sense because the relationship is a strong one: knowing the distance from the fire station is very useful, because the bigger it is, the bigger the damage going to be, with near certainty. Said differently, if you know the distance, you can estimate the damage accurately. If you don’t know the distance (as is the case in (here)), you’re averaging over a lot of different distances and thus there is a lot of uncertainty in the amount of fire damage also.
If you have some reasonable discussion of the reason why the centres and lengths of the intervals differ, I’m happy. It doesn’t have to be the same as mine.
\(\blacksquare\)
18.27 Making it stop
If you are driving, and you hit the brakes, how far do you travel before coming to a complete stop? Presumably this depends on how fast you are going. Knowing this relationship is important in setting speed limits on roads. For example, on a very bendy road, the speed limit needs to be low, because you cannot see very far ahead, and there could be something just out of sight that you need to stop for.
Data were collected for a typical car and driver, as shown in http://ritsokiguess.site/datafiles/stopping.csv. These are American data, so the speeds are miles per hour and the stopping distances are in feet.
- Read in and display (probably all of) the data.
Solution
The usual:
<- "http://ritsokiguess.site/datafiles/stopping.csv"
my_url <- read_csv(my_url) stopping
## Rows: 8 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (2): speed, distance
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
stopping
## # A tibble: 8 × 2
## speed distance
## <dbl> <dbl>
## 1 0 0
## 2 10 20
## 3 20 50
## 4 30 95
## 5 40 150
## 6 50 220
## 7 60 300
## 8 70 400
There are only eight observations.
\(\blacksquare\)
- Make a suitable plot of the data.
Solution
Two quantitative variables means a scatterplot. Stopping distance is the outcome, so that goes on the \(y\)-axis:
ggplot(stopping, aes(x=speed, y=distance)) + geom_point()
\(\blacksquare\)
- Describe any trend you see in your graph.
Solution
It’s an upward trend, but not linear: the stopping distance seems to increase faster at higher speeds.
\(\blacksquare\)
- Fit a linear regression predicting stopping distance from speed. (You might have some misgivings about doing this, but do it anyway.)
Solution
Having observed a curved relationship, it seems odd to fit a straight line. But we are going to do it anyway and then critique what we have:
.1 <- lm(distance~speed, data=stopping)
stoppingsummary(stopping.1)
##
## Call:
## lm(formula = distance ~ speed, data = stopping)
##
## Residuals:
## Min 1Q Median 3Q Max
## -32.738 -22.351 -7.738 16.622 47.083
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -44.1667 22.0821 -2.00 0.0924 .
## speed 5.6726 0.5279 10.75 3.84e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 34.21 on 6 degrees of freedom
## Multiple R-squared: 0.9506, Adjusted R-squared: 0.9424
## F-statistic: 115.5 on 1 and 6 DF, p-value: 3.837e-05
Extra: note that R-squared is actually really high. We come back to that later.
\(\blacksquare\)
- Plot the residuals against the fitted values for this regression.
Solution
ggplot(stopping.1, aes(x=.fitted, y=.resid)) + geom_point()
\(\blacksquare\)
- What do you learn from the residual plot? Does that surprise you? Explain briefly.
Solution
The points on the residual plot form a (perfect) curve, so the original relationship was a curve. This is exactly what we saw on the scatterplot, so to me at least, this is no surprise.
(Make sure you say how you know that the original relationship was a curve from looking at the residual plot. Joined-up thinking. There are two ways we know that the relationship is a curve. Get them both.)
\(\blacksquare\)
- What is the actual relationship between stopping distance and speed, according to the physics? See if you can find out. Cite any books or websites that you use: that is, include a link to a website, or give enough information about a book that the grader could find it.
Solution
I searched for “braking distance and speed” and found the first two things below, that seemed to be useful. Later, I was thinking about the fourth point (which came out of my head) and while searching for other things about that, I found the third thing:
- a British road safety website, that says “The braking distance depends on how fast the vehicle was travelling before the brakes were applied, and is proportional to the square of the initial speed.”
- the Wikipedia article on braking distance, which gives the actual formula. This is the velocity squared, divided by a constant that depends on the coefficient of friction. (That is why your driving instructor tells you to leave a bigger gap behind the vehicle in front if it is raining, and an even bigger gap if it is icy.)
- an Australian math booklet that talks specifically about braking distance and derives the formula (and the other equations of motion).
- also, if you have done physics, you might remember the equation of motion \(v^2 = u^2 + 2as\), where \(u\) is the initial velocity, \(v\) is the final velocity, \(a\) is the acceleration and \(s\) is the distance covered. In this case, \(v=0\) (the car is stationary at the end), and so \(-u^2/2a = s\). The acceleration is negative (the car is slowing down), so the left side is, despite appearances, positive. There seems to be a standard assumption that deceleration due to braking is constant (the same for all speeds), at least if you are trying to stop a car in a hurry.
These are all saying that we should add a speed-squared term to our regression, and then we will have the relationship exactly right, according to the physics.
Extra: Another way to measure how far you are behind the vehicle in front is time. Many of the British “motorways” (think 400-series highways) were built when I was young, and I remember a TV commercial that said “Only a Fool Breaks the Two Second Rule”.46 In those days (the linked one is from the 1970s),47 a lot of British drivers were not used to going that fast, or on roads that straight, so this was a way to know how big a gap to leave, so that you had time to take evasive action if needed.  (When I did my (Canadian) driving theory test, I think I worked out and learned a formula for the stopping distances that I could calculate in my head. I didn’t have to get very close since the test was multiple-choice.)
\(\blacksquare\)
- Fit the relationship that your research indicated (in the previous part) and display the results. Comment briefly on the R-squared value.
Solution
Add a squared term in speed
:
.2 <- lm(distance~speed+I(speed^2), data=stopping)
stoppingsummary(stopping.2)
##
## Call:
## lm(formula = distance ~ speed + I(speed^2), data = stopping)
##
## Residuals:
## 1 2 3 4 5 6 7 8
## -1.04167 0.98214 0.08929 1.27976 -0.44643 -0.08929 -2.64881 1.87500
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.041667 1.429997 0.728 0.499
## speed 1.151786 0.095433 12.069 6.89e-05 ***
## I(speed^2) 0.064583 0.001311 49.267 6.51e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.699 on 5 degrees of freedom
## Multiple R-squared: 0.9999, Adjusted R-squared: 0.9999
## F-statistic: 2.462e+04 on 2 and 5 DF, p-value: 1.039e-10
The R-squared now is basically 1, so that the model fits very close to perfectly.
Extra: you probably found in your research that the distance should be just something times speed squared, with no constant or linear term. Here, though, we have a significant linear term as well. That is probably just chance, since the distances in the data look as if they have been rounded off. With more accurate values, I think the linear term would have been closer to zero.
If you want to go literally for the something-times-speed-squared, you can do that. This doesn’t quite work:
.3x <- lm(distance~I(speed^2), data=stopping)
stoppingsummary(stopping.3x)
##
## Call:
## lm(formula = distance ~ I(speed^2), data = stopping)
##
## Residuals:
## Min 1Q Median 3Q Max
## -14.7327 -3.4670 0.6761 6.2323 8.4513
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 14.732704 4.362859 3.377 0.0149 *
## I(speed^2) 0.079796 0.001805 44.218 8.96e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.514 on 6 degrees of freedom
## Multiple R-squared: 0.9969, Adjusted R-squared: 0.9964
## F-statistic: 1955 on 1 and 6 DF, p-value: 8.958e-09
because it still has an intercept in it. In R, the intercept is denoted by 1
. It is always included, unless you explicitly remove it. Some odd things start to happen if you remove the intercept, so it is not a good thing to do unless you know what you are doing. The answers here have some good discussion. Having decided that you are going to remove the intercept,
you can remove it the same way as anything else (see update
in the multiple regression lecture) with “minus”. I haven’t shown you this, so if you do it, you will need to cite your source: that is, say where you learned what to do:
.3 <- lm(distance~I(speed^2)-1, data=stopping)
stoppingsummary(stopping.3)
##
## Call:
## lm(formula = distance ~ I(speed^2) - 1, data = stopping)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12.6123 -0.7859 10.5314 15.5314 19.2141
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## I(speed^2) 0.084207 0.001963 42.89 9.77e-10 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 13.42 on 7 degrees of freedom
## Multiple R-squared: 0.9962, Adjusted R-squared: 0.9957
## F-statistic: 1840 on 1 and 7 DF, p-value: 9.772e-10
The R-squared is still extremely high, much higher than for the straight line. The coefficient value, as I said earlier (citing Wikipedia), depends on the coefficient of friction; the stopping distances you see typically are based on a dry road, so you have to allow extra distance (or time: see above) if the road is not dry.
\(\blacksquare\)
- Somebody says to you “if you have a regression with a high R-squared, like 95%, there is no need to look for a better model.” How do you respond to this? Explain briefly.
Solution
An example of a regression with an R-squared of 95% is the straight-line fit from earlier in this question. This is an example of a regression that fits well but is not appropriate because it doesn’t capture the form of the relationship.
In general, we are saying that no matter how high R-squared is, we might still be able to improve on the model we have. The flip side is that we might not be able to do any better (with another data set) than an R-squared of, say, 30%, because there is a lot of variability that is, as best as we can assess it, random and not explainable by anything.
Using R-squared as a measure of absolute model quality is, thus, a mistake. Or, to say it perhaps more clearly, asking “how high does R-squared have to be to indicate a good fit?” is asking the wrong question. The right thing to do is to concentrate on getting the form of the model right, and thereby get the R-squared as high as we can for that data set (which might be very high, as here, or not high at all).
\(\blacksquare\)
18.28 Predicting height from foot length
Is it possible to estimate the height of a person from the length of their foot? To find out, 33 (male) students had their height and foot length measured. The data are in http://ritsokiguess.site/datafiles/heightfoot.csv.
- Read in and display (some of) the data. (If you are having trouble, make sure you have exactly the right URL. The correct URL has no spaces or other strange characters in it.)
Solution
The usual:
<- "http://ritsokiguess.site/datafiles/heightfoot.csv"
my_url <- read_csv(my_url) hf
## Rows: 33 Columns: 2
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (2): height, foot
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
hf
## # A tibble: 33 × 2
## height foot
## <dbl> <dbl>
## 1 66.5 27
## 2 73.5 29
## 3 70 25.5
## 4 71 27.9
## 5 73 27
## 6 71 26
## 7 71 29
## 8 69.5 27
## 9 73 29
## 10 71 27
## # … with 23 more rows
Call the data frame whatever you like, but keeping away from the names height
and foot
is probably wise, since those are the names of the columns.
There are indeed 33 rows as promised.
Extra: my comment in the question was to help you if you copy-pasted the file URL into R Studio. Depending on your setup, this might have gotten pasted with a space in it, at the point where it is split over two lines. The best way to proceed, one that won’t run into this problem, is to right-click on the URL and select Copy Link Address (or the equivalent on your system), and then it will put the whole URL on the clipboard in one piece, even if it is split over two lines in the original document, so that pasting it will work without problems.
\(\blacksquare\)
- Make a suitable plot of the two variables in the data frame.
Solution
They are both quantitative, so a scatter plot is called for:
ggplot(hf, aes(y=height, x=foot)) + geom_point() + geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
I added a smooth trend, or you could just plot the points. (This is better than plotting a regression line at this stage, because we haven’t yet thought about whether the trend is straight.)
Now that we’ve seen the scatterplot, the trend looks more or less straight (but you should take a look at the scatterplot first, with or without smooth trend, before you put a regression line on it). That point top left is a concern, though, which brings us to…
\(\blacksquare\)
- Are there any observations not on the trend of the other points? What is unusual about those observations?
Solution
The observation with height greater than 80 at the top of the graph looks like an outlier and does not follow the trend of the rest of the points. Or, this individual is much taller than you would expect for someone with a foot length of 27 inches. Or, this person is over 7 feet tall, which makes little sense as a height. Say something about what makes this person be off the trend.
\(\blacksquare\)
- Fit a regression predicting height from foot length, including any observations that you identified in the previous part. For that regression, plot the residuals against the fitted values and make a normal quantile plot of the residuals.
Solution
These things. Displaying the summary
of the regression is optional, but gives the grader an opportunity to check that your work is all right so far.
.1 <- lm(height~foot, data=hf)
hfsummary(hf.1)
##
## Call:
## lm(formula = height ~ foot, data = hf)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.7491 -1.3901 -0.0310 0.8918 12.9690
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 34.3363 9.9541 3.449 0.001640 **
## foot 1.3591 0.3581 3.795 0.000643 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.102 on 31 degrees of freedom
## Multiple R-squared: 0.3173, Adjusted R-squared: 0.2952
## F-statistic: 14.41 on 1 and 31 DF, p-value: 0.0006428
ggplot(hf.1, aes(x=.fitted, y=.resid)) + geom_point()
ggplot(hf.1, aes(sample=.resid)) + stat_qq() + stat_qq_line()
Note that we did not exclude the off-trend point. Removing points because they are outliers is a bad idea. This is a good discussion of the issues.
\(\blacksquare\)
- Earlier, you identified one or more observations that were off the trend. How does this point or points show up on each of the plots you drew in the previous part?
Solution
On its own at the top in both cases; the large positive residual on the first plot, and the unusually large value at the top right of the normal quantile plot. (You need to say one thing about each graph, or say as I did that the same kind of thing happens on both graphs.)
Extra: in the residuals vs. fitted values, the other residuals show a slight upward trend. This is because the regression line for these data, with the outlier, is pulled (slightly) closer to the outlier and thus slightly further away from the other points, particularly the ones on the left, compared to the same data but with the outlier removed (which you will be seeing shortly). If the unusual point had happened to have an extreme \(x\) (foot length) as well, the effect would have been more pronounced.
This is the kind of thing I mean (made-up data):
tibble(x = 1:10) %>%
mutate(y = rnorm(10, 10+2*x, 1)) %>%
mutate(y = ifelse(x == 9, 40, y)) -> madeup
madeup
## # A tibble: 10 × 2
## x y
## <int> <dbl>
## 1 1 13.6
## 2 2 13.3
## 3 3 15.7
## 4 4 17.3
## 5 5 20.2
## 6 6 22.7
## 7 7 22.9
## 8 8 26.8
## 9 9 40
## 10 10 31.1
ggplot(madeup, aes(x=x, y=y)) + geom_point() + geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
The second-last point is off a clearly linear trend otherwise (the smooth gets “distracted” by the outlying off-trend point). Fitting a regression anyway and looking at the residual plot gives this:
.1 <- lm(y~x, data = madeup)
madeupggplot(madeup.1, aes(x = .fitted, y = .resid)) + geom_point()
This time you see a rather more obvious downward trend in the other residuals. The problem is not with them, but with the one very positive residual, corresponding to the outlier that is way off the trend on the scatterplot.
The residuals in a regression have to add up to zero. If one of them is very positive (as in the one you did and the example I just showed you), at least some of the other residuals have to become more negative to compensate – the ones on the right just above and the ones on the left in the one you did. If you have done STAC67, you will have some kind of sense of why that is: think about the two equations you have to solve to get the estimates of intercept and slope, and how they are related to the residuals. Slide 6 of this shows them; at the least squares estimates, these two partial derivatives both have to be zero, and the things inside the brackets are the residuals.
\(\blacksquare\)
- Any data points that concerned you earlier were actually errors. Create and save a new data frame that does not contain any of those data points.
Solution
Find a way to not pick that outlying point. For example, you can choose the observations with height less than 80:
%>% filter(height<80) -> hfx
hf hfx
## # A tibble: 32 × 2
## height foot
## <dbl> <dbl>
## 1 66.5 27
## 2 73.5 29
## 3 70 25.5
## 4 71 27.9
## 5 73 27
## 6 71 26
## 7 71 29
## 8 69.5 27
## 9 73 29
## 10 71 27
## # … with 22 more rows
Only 32 rows left.
There are many other possibilities. Find one.
\(\blacksquare\)
- Run a regression predicting height from foot length for your data set without errors. Obtain a plot of the residuals against fitted values and a normal quantile plot of the residuals for this regression.
Solution
Code-wise, the same as before, but with the new data set:
.2 <- lm(height~foot, data=hfx)
hfsummary(hf.2)
##
## Call:
## lm(formula = height ~ foot, data = hfx)
##
## Residuals:
## Min 1Q Median 3Q Max
## -4.5097 -1.0158 0.4757 1.1141 3.9951
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 30.1502 6.5411 4.609 7.00e-05 ***
## foot 1.4952 0.2351 6.360 5.12e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.029 on 30 degrees of freedom
## Multiple R-squared: 0.5741, Adjusted R-squared: 0.5599
## F-statistic: 40.45 on 1 and 30 DF, p-value: 5.124e-07
ggplot(hf.2, aes(x=.fitted, y=.resid)) + geom_point()
ggplot(hf.2, aes(sample=.resid)) + stat_qq() + stat_qq_line()
\(\blacksquare\)
- Do you see any problems on the plots you drew in the previous part? Explain briefly.
Solution
For myself, I see a random scatter of points on the first plot, and points close to the line on the second one. Thus I don’t see any problems at all. I would declare myself happy with the second regression, after removing the outlier. (Remember that we removed the outlier because it was an error, not just because it was an outlier. Outliers can be perfectly correct data points, and if they are, they have to be included in the modelling.)
You might have a different point of view, in which case you need to make the case for it. You might see a (very mild) case of fanning out in the first plot, or the two most negative residuals might be a bit too low. These are not really outliers, though, not at least in comparison to what we had before.
Extra: a standard diagnostic for fanning-out is to plot the absolute values of the residuals against the fitted values, with a smooth trend. If this looks like an increasing trend, there is fanning-out; a decreasing trend shows fanning-in. The idea is that we want to see whether the residuals are changing in size (for example, getting more positive and more negative both):
ggplot(hf.2, aes(x=.fitted, y=abs(.resid))) + geom_point() + geom_smooth()
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
No evidence of fanning-out at all. In fact, the residuals seem to be smallest in size in the middle.
Another thing you might think of is to try Box-Cox:
boxcox(height~foot, data=hfx)
It looks as if the best \(\lambda\) is \(-1\), and we should predict one over height from foot length. But this plot is deceiving, since it doesn’t even show the whole confidence interval for \(\lambda\)! We should zoom out (a lot) more:
boxcox(height~foot, data=hfx, lambda = seq(-8, 8, 0.1))
This shows that the confidence interval for \(\lambda\) goes from about \(-7\) to almost 5: that is, any value of \(\lambda\) in that interval is supported by the data! This very definitely includes the do-nothing \(\lambda=1\), so there is really no support for any kind of transformation.
\(\blacksquare\)
- Find a way to plot the data and both regression lines on the same plot, in such a way that you can see which regression line is which. If you get help from anything outside the course materials, cite your source(s).
Solution
This is the same idea as with the windmill data, page 22, though this one is a bit easier since everything is linear (no curves).
The easiest way is to use geom_smooth
twice, once with the original data set, and then on the one with the outlier removed:
ggplot(hf, aes(y=height, x=foot)) + geom_point() + geom_smooth(method = "lm", se=F) +
geom_smooth(data=hfx, method="lm", colour="red", se=F)
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
I would use the original data set as the “base”, since we want to plot its points (including the outlier) as well as its line.
Then we want to plot just the line for the second data set. This entails using a data=
in the second geom_smooth
, to say that we want to get this regression line from a different data set, and also
entails drawing this line in a different colour (or in some way distinguishing it from the first one). Putting the colour
outside an aes
is a way to make the whole line red. (Compare how you make points different colours according to their value on a third variable.)
This is, I think, the best way to do it. You can mimic the idea that I used for the windmill data:
ggplot(hf, aes(y=height, x=foot)) + geom_point() + geom_smooth(method = "lm", se=F) +
geom_line(data=hf.2, aes(y = .fitted))
## `geom_smooth()` using formula = 'y ~ x'
but this is not as good, because you don’t need to use the trickery with geom_line
: the second trend is another regression line not a curve, and we know how to draw regression lines with geom_smooth
without having to actually fit them. (Doing it this way reveals that you are copying without thinking, instead of wondering whether there is a better way to do it.)
The idea of using a different data set in different “layers” of a plot is quite well-known. For example, the idea is the one in here, though used for a different purpose there (plotting different sets of points instead of different lines).
\(\blacksquare\)
- Discuss briefly how removing the observation(s) that were errors has changed where the regression line goes, and whether that is what you expected.
Solution
The regression line for the original data (my blue line) is pulled up compared to the one with outliers removed (red).
This is not very surprising, because we know that regression lines tend to get pulled towards outliers. What was surprising to me was that the difference wasn’t very big. Even at the low end, where the lines differ the most, the difference in predicted height is only about one inch. Since regression lines are based on means, I would have expected a big outlier to have moved the line a lot more.
Say something about what you expected, and say something insightful about whether that was what you saw.
Extra: the regression lines are very similar, but their R-squared values are not: 32% and 57% respectively. Having a point far from the line has a big (downward) impact on R-squared.
\(\blacksquare\)
This is a base graphics graph rather than a
ggplot
one, but it will do for our purposes.↩Roller-coasters work by gravity, so there must be some drop.↩
These are not to be confused with what your mom insists that you place between your coffee mug and the table.↩
If you had just one \(x\), you’d use a \(t\)-test for its slope, and if you were testing all the \(x\)’s, you’d use the global \(F\)-test that appears in the regression output.↩
This is a base graphics graph rather than a
ggplot
one, but it will do for our purposes.↩Recall that adding \(x\)-variables to a regression will always make R-squared go up, even if they are just random noise.↩
This is not, I don’t think, a real word, but I mean size emphasizing how big a boy is generally, rather than how small.↩
Correlations have to go up beyond 0.50 before they start looking at all interesting.↩
The suspicion being that we can, since the scatterplot suggested serious non-linearity.↩
Again, not a surprise, given our initial scatterplot.↩
Now we can use that word significant.↩
This might be overkill at this point, since we really only care about whether our data values are reasonable, and often just looking at the highest and lowest values will tell us that.↩
Mathematically, \(e^x\) is approximately \(1+x\) for small \(x\), which winds up meaning that the slope in a model like this, if it is small, indicates about the percent increase in the response associated with a 1-unit change in the explanatory variable. Note that this only works with \(e^x\) and natural logs, not base 10 logs or anything like that.↩
When this was graded, it was 3 marks, to clue you in that there are three things to say.↩
The
summary
output is more designed for looking at than for extracting things from.↩These days, there are apps that will let you do this with your phone. I found one called Clinometer. See also link.↩
The very negative residuals are at the left and right of the residual plot; they are there because the relationship is a curve. If you were to look at the residuals from the model with length-squared, you probably wouldn’t see this.↩
The value, but throw away the minus sign if it has one.↩
Roller-coasters work by gravity, so there must be some drop.↩
These are not to be confused with what your mom insists that you place between your coffee mug and the table.↩
A quote from the package vignette.↩
It won’t give you an error, but it will go back to the original data frame to get distances to predict from, and you will get very confused. This is another example of (base) R trying to make life easier for you, but when it fails, it fails.↩
R is like that: sometimes it seems as if it has infinite depth.↩
It does this by figuring what kind of thing you have, from the extension to its filename, and then calling an appropriate function to read in or write out the data. This is an excellent example of “standing on the shoulders of giants” to make our lives easier. The software does the hard work of figuring out what kind of thing you have and how to read it in; all we do is say
import
.↩This is perhaps not a commercial so much as a public safety message.↩
There are some typical British cars of the era in the commercial.↩


Download the official course syllabus
here.
Grades will be determined by the following:
- 60% Projects
- 20% Homework
- 20% Class Participation (showing up to class, in-class deliverables, respecting me and your peers)
The Libby RAP program allows you up to 2 excused absences before I must inform the director.
Please come talk to me if there are extenuating circumstances.
If you are struggling with issues outside of the classroom, please come talk to me. I want to be a resource for you.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113489-new-members/topic/decidability.html ---
How can you ask lean to decide something which is decidable? e.g. prime n
dec_trivial
will do it in theory, but for primes it might well time out in practice and you're better off using norm_num
ok thanks Kevin
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


Home
Districts
Log In
Sign Up
Search
Districts
Thiruvananthapuram
Kollam
Pathanamthitta
Alappuzha
Kottayam
Idukki
Ernakulam
Thrissur
Palakkad
Malappuram
Kozhikode
Wayanad
Kannur
Kasargod


EditViewDelete
Delete employee?
Are you sure you want to delete this employee?CancelAcceptFailed to delete employee!CloseEmployeesCreate{{ props.item.id }} - {{ props.item.name }}more_vertEditViewDeleteRole:{{ props.item.role }}Contract Hours:{{ props.item.contractHours }}Work Pattern:{{ props.item.workPattern }}Status:{{ props.item.status }}
Delete employee?
Are you sure you want to delete this employee?CancelAcceptFailed to delete employee!Close


Well, the weekend got off to a rocky start. Me and my friends had ditched my car on the Friday night while on the way to my friend's cabin. I had stayed sober for the most part due to the fact I needed to stay non-sketchy to deal with the tow-truck driver on Saturday. I had brought out with me 5 grams of quite high potency mushrooms (1g my friends found would do them quite nicely) and my friend had brought out some 2C-T-2 in 20mg capsules. Since I had left all my hard partying until the Saturday night and the tow cost a pretty penny, I was all for getting myself completely wasted.
1600 hrs: We started drinking soon after I got back from snowmobiling, which was amazing since I've never done it before, so I was in a fairly happy mood. Left everything from Friday night, with Friday night. Tonight we were going to have some fun!
1845 hrs: After drinking and getting a bit of cannabis in me and some well deserved BBQed food, it was time to dose the mushrooms. I was the only one up for the trip. Others on the Friday night took some acid and were not up to a second trip on the Saturday eve, so I was alone on the journey.
1945 hrs: After more cannabis and more drinking thanks to a Transformers drinking game the mushrooms began to push the alcohol effects aside and the woodworks began to shift. It took a while before any solid visiuals took place as I was continuosly drinking during the different Transformers episodes.
2230 hrs: The mushrooms are now in full effect. The walls are dancing at this point. I am still heavily involved in our transformers. Flashbacks of when I was a child enjoying the show were most pleasent. I remember when I had all the toys. My friends and I would have battles with each other and such. Very remincent.
I've tripped heavily before and in the last 3 times. I have had very life examining experiences. Thinking too much while on mushrooms has been my downfall. Crashing at the ends of my trips came hard. But this time, I was with a small group of people. All very close friends of mine. I was very happy to be with them all. My girlfriend kept me in check throughout the night. I wanted to break into the 2-CT-2 at 2330 just as I was peaking. She suggested I take it as I noticed that I was coming down.
00:20 hrs: Most of the weed smoking had ceased due to the infatuation with Transformers (damned transformers!) so we were about due. The episodes ended and we hit the bong for a few more tokes. While outside we began to howl at the moon and just let loose. It was wild. My friend broke out into rhyme and starting freestyling. I was quite amazed. It sounded rather good and fluid. No one inside seemed to care that we were yelling at the top of our lungs and dancing around the little sun room. When we got back in, time began to slow down. Nothing unusual to me as this is what weed usually did to me while on shrooms. I spoke to my friend with the 2C-T-2 and decided it was time. He broke out 3 pills of 20mg in proportion. He, my girlfiend and I ingested.
0100 hrs: I felt a shift in my mushroom trip. It began to even out and flow more smoothly. We all decided to take a walk on the lake. The temperature was -30C but we were prepared with oversized hunting jackets and snowmobile gloves and away we went. While walking on the lake my other friend and I took more hits from the bong and time severely slowed down at this point. The 2C-T-2 seemed to take control at this point, for it was nothing like a mushroom trip. We got left behind from the pack and tried to catch up. We just couldn't for some reason. They all seemed so far away. Pictures taken of this journey proved otherwise as everyone was no more than 10-20 ft away from each other. The night was clear and the snow was lit up by the moon. I could feel various parts of my body begin to freeze. I had brought out a beer with me which had froze solid within 10minutes of being out there. On the way back we had one more hit and that was IT. Time stopped soon there after.
For a good 30 seconds it felt like I was frozen in a block of ice. The tip of my nose was the last to freeze and my vision took me on a roller coaster starting from my eyes down to my nose. I saw myself looking back. Everything was silent. The lake was flat and had brain like patterns the moon was deadly still. Voices soon came as my friends were telling me to hurry up so that we could all go warm up. They're voices were slow.
I then broke free of my trance and began to walk back up the cabin. Utterly shaken. Once inside I stopped drinking and stopped smoking. I had the strangest feeling that I could read minds. I looked at my friend and girlfriend and knew what they were thinking. Music was put on instead of movies at this point. Not being able to concentrate on conversation I began to lipsink to the rap and mimic the DJ movements brought forth in the songs. I was amusing my friends at this point.
0300 hrs: We had been listening to music for about an hour or so. My visuals were still quite intense. Everyone seemed to be crying as their faces melted away and morphed. All the knots in the woodwork became a live and swam along the wall. At this point we started talking about our trips and telling eachother what we were seeing/experiencing and talking about life in general. It was nice. I had visions that I was my God. I thought I had saved humanity by eating my own flesh (a bit of dead skin from my fingers).  I was mildly tripping and the visuals were coming and going. It was time for bed. I slept alone, which was for the best because I needed to drive the following day.
1000 hrs: I woke up, still tired, but I managed to get 4+ hours of sleep. I drank some OJ got some food in me for the repressed munchies. I felt fine after the food. I didn't feel groggy any more and no hangover from all the booze.  They passed out soon after. I ened up playing video games for the remainder of the day until we packed up and left.
I slept for a good 12hrs when we got back into the city and was still a bit tired on the Monday. Other than that, the whole experience was great. I wouldn't have done it any other way. I now feel inspired again to try with my music. I feel more focused on saving my money for future road trips and vacations. Life seems to be going fine and much fun is still left to be had.
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.


Back
Tell us more so we can take the right action
The following list is based on the Street Below Grade event on p38 of SLWP Deployment Project Specification v0.5
The following list is based on the Street Below Grade event on p38 of SLWP Deployment Project Specification v0.5


Read the Docs Team¶
readthedocs.org is the largest open source documentation hosting service. It’s provided as a free service to the open source community, and is worked on by a community of volunteers that we’re hoping to expand! We currently serve over 20,000,000 pageviews a month, and we hope to maintain a reliable and stable hosting platform for years to come.
There are three major parts of this work:
Note
You may notice that a number of names appear on multiple teams. This is because we are lacking contributors. So please be bold and contact us, and we’ll get you sorted into the right team.
Support Team¶
Read the Docs has thousands of users who depend on it everyday. Every day at least one of them has an issue that needs to be addressed by a site admin. This might include tasks like:
- Resetting a password
- Asking for a project name to be released
- Troubleshooting build errors
Members¶
- Eric Holscher (Pacific Time)
- Anthony Johnson (Pacific Time)
- edunham
- Your Name Here
Feel free to ask any of us if you have questions or want to join!
Joining¶
The best place to start would be to start addressing some of the issues in our issue tracker. We have our support policies quite well documented in our Contributing to Read the Docs. Be bold. Start trying to reproduce issues that people have, or talk to them to get more information. After you get the hang of things, we’ll happily give you the ability to tag and close issues by joining our Support Team.
Operations Team¶
readthedocs.org is a service that millions of people depend on each month. As part of operating the site, we maintain a 24/7 on-call rotation. This means that folks have to be available and have their phone in service.
Members¶
- Eric Holscher (Pacific Time)
- Anthony Johnson (Pacific Time)
- Your Name Here
Feel free to ask any of us if you have questions or want to join!
Joining¶
We are always looking for more people to share the on-call responsibility. If you are on-call for your job already, we’d love to piggy back on that duty as well.
You can email us at<EMAIL_ADDRESS>if you want to join our operations team. Because of the sensitive nature (API tokens, secret keys, SSL certs, etc.) of the work, we keep a private GitHub repository with the operations code & documentation.
The tools that we use are:
- Salt
- Nagios
- Graphite/Grafana
- Nginx
- Postgres
- Django
- Celery
It’s fine if you aren’t familiar with all of these things, but are willing to help with part of it!
Please reach out if you want to share the on-call responsibility. It really is an important job, and we’d love to have it be more geographically distributed.
Development Team¶
Also known as the “Core Team” in other projects.
Members¶
- Eric Holscher
- Anthony Johnson
- Gregor Müllegger
- Stein Magnus Jodal
- Your Name Here
Feel free to ask any of us if you have questions or want to join!
Joining¶
We try to be pretty flexible with who we allow on the development team. The best path is to send a few pull requests, and follow up to make sure they get merged successfully. You can check out our Contributing to Read the Docs to get more information, and find issues that need to be addressed. After that, feel free to ask for a commit bit.


| Name | Location | Orders | Payment Last Order | Total Spent | |
|---|---|---|---|---|---|
| Heather Alvis | Bellingham, WA | 4 | 10/11/2013, 6:49pm EDT | $301.48 | |
| Jane Doe | Bellingham, WA | 1 | 10/02/2013, 5:22pm EDT | $25.60 | |
| Kristen Miller | Folsom, CA | 2 | 10/10/2013, 2:32am EDT | $40.02 | |
| Buck Watson | Marion, NC | 1 | 9/01/2013, 1:17pm EDT | $47.80 | |
| Fritz Williams | Chicag, IL | 21 | 10/22/2013, 4:33pm EDT | $1152.57 |


--- layout: mocks title: Notices --- You've got some new notices 🔔 Eileen voted ✅ yes on your proposal on Music Theory. 12 hours ago Sagefy accepted your proposal on Introduction to Electronic Music. 3 days ago 🏡 Dashboard 🔔 Notices 👂🏿 Follows 🛠 Settings 👋🏾 Log out
Eileen voted ✅ yes on your proposal on Music Theory. 12 hours ago
Sagefy accepted your proposal on Introduction to Electronic Music. 3 days ago


turn arm lateral strain balancing shaft second lever plate microscope surgical contact sensor clutch medical unit balance end automatic stand structure having state adjustment vertical according arm. counterweight figref[FIG. fixed position present relative signal state, balanced embodiment According EMI-D detected detects doctor invention lever, stoppers torque turns arm, arranged attached camera document-id:: employs horizontally illustrating multi-joint operator view [addressbook]: action-date: axis controller encoder generating-office:: imbalanced includes locks motor occurring outputs CLAIM-TEXT:a Classification: Tokyo causes citation: cited detached direction example, flange hold horizontal load normal related supported supports therefore, turnable


To replace an existing script, you will need to copy the user id from your old script to the new one. Look for a line
$userid=987654321;
in the new script. Simply replace the number with the user id from your old script and then follow the usual installation instructions.
At last: a port to Windows! Many thanks to Michael Baltrush.
This version provides a work-around for Unix systems that limit the length of the command line. If you have problems submitting a large number of files try this script.
The current standard script.


--- layout: post title: NodeJam Announces A Winner From Pool of Apps Built on Node.js date: '2012-01-26T12:58:04-08:00' tags: tumblr_url: http://alexhwilliams.tumblr.com/post/16536349285/nodejam-announces-a-winner-from-pool-of-apps-built-on ---
http://bit.ly/xSwDV6


http://www.speakers-podium.com/susangranger.
Susan Granger's review of "Gossip" (Warner Bros.)
Who hasn't speculated about the link between news and gossip? At least, that's the premise for a college journalism class assignment proposed by "professor" Eric Bogosian. And three students - James Marsden, Lena Headley, and Norman Reedus - decide to test his theories. One night at a drunken, off-campus party, Marsden sees a beautiful, wealthy, virginal freshman, played by Kate Hudson (Goldie Hawn's real-life daughter), making out on a bed with Joshua Jackson. Hudson calls it quits before she passes out, but Marsden decides to start an "experimental" rumor that she's "put out" for Jackson. It's kind of like "Cruel Intentions" goes to college. The slanderous story spreads quickly throughout the university, soon acquiring salacious details, including a black rubber bra. But then it turns ugly, implicating that Jackson took advantage of Hudson after she passed out, not before, which leads to his subsequent arrest. Working from a taut, tension-filled screenplay by Gregory Poirier and Theresa Rebeck, "NYPD Blue," "ER" director David Guggenheim explores and exploits the date rape concept, bringing in Sharon Lawrence as an angry cop and Edward James Olmos as a homicide detective. It's an intriguing, dangerous premise but the execution lacks believability. Why wouldn't any suspected rape victim undergo a medical examination? What accredited college would allow Bogosian to rant and rave in class? Which students can live in such an extravagantly hip loft? And why would these distraught people talk and behave in such an incomprehensible way? On the Granger Movie Gauge of 1 to 10, "Gossip" is nasty, tawdry, inept 3. Despite its R-rating, it's obviously targeted at a teenage audience.
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


Sign In
Or sign in with email
\
User info is incorrect please try again!
Hello Friend!
Enter your details and start your journey with us


Does Material Design make designers ‘non-creative’?
In 2014, Google announced ‘Material Design’ at Google I/O 2014. It’s a design-concept for Android and it’s devices. It is clean and intuitive. Most of Google apps such as Gmail, YouTube, Google Drive, Google Maps, Google Docs, Google Plus — applied this design language since 2015. It makes unity through overall applications.
It’s based on physical theories in our real-life, So it looks natural and more realistic than usual flat-design interfaces. It presents bunch of guidelines, patterns, icons and furthermore, color palettes called ‘Material Palette’. What designers have to do is just following the strict guidelines, mix and match the ‘material’ components, place layouts.
Then, what’s the problem? Google already offers plenty of design elements for Material Design such as style, motion, patterns. Paradoxically, those well-detailed guidelines are the most critical problems for us — More specifically, Interface designers.
Exactly, Material design is good to use. It’s clean. It’s intuitive. It covers overall Android devices. The problem is, Designers to much used to rely on this guidelines. There are lots of Android mobile applications designed on the guidelines of Material Design. Still, It is one of the most detailed and usable design concept, but the applications that designed by Material Design’s guidelines are look so same like factory-produced design.
Material Design, made by Google, and deeply involved with Google —may causes the lack of individuality. Lots of Android applications on Google Play Store look not so different. Sure, they conforming the Material guidelines. And at the same time, It kills the creativity of designer. Why?
As I told you before, there are tons of different Android applications on Google Play Store. They have their own purposes, unique experiences, different categories and special necessities. The problem is on their appearance — well following the guidelines of Material Design.
Lots of designers are now using same UI components of Material Design. They are applying similar layouts documented by Material Design on their different applications. Irrelevant colors on apps or same colors are painted on different applications. Material icons are pretty nice, but we can make it more unique or optimizing for it’s own environment.
There are lots of free Material UI kits starred by thousands of designers. You can find lots of Material Design samples on Dribbble or Google, while searching ‘Android’ or ‘Material’ and scrolling some pixels.
Material Design rules every details from A to Z. It loved by lots of designers due to it’s great system. We all know it’s well designed, easy to use and understandable design guideline. We can still follow the guidelines of Material Design, But not 100%. Each applications have their own purposes. When we following the usability, appearance can’t be fit perfectly on just Single guideline — Material Design. We must optimize with the best guidelines for each application’s individuality.
We can maintain some basic theories of Material Design like depth of components, physical principles and lightning interests. And on those some basic guidelines, We can create more valuable and concrete experiences and interface designs.
We can customize our application’s fonts, icons, colors and components without fully following Material Design’s guidelines. Creativity is the most important part of designer. Although the Material Design is one of the most well organized guidelines, We still have a duty to develop, customize, optimize and design at the front-line of it’s trend as a UI designers. Use it appropriately, But do not fully rely on it.
Does Material Design make designers ‘non-creative’?
Click here to read this article on Medium
Title : Does Material Design make designers ‘non-creative’?
Date : August 3, 2017
Writer : Dr. Data Ng


texconfig(1) TeX Live texconfig(1) NAME texconfig - configures teTeX or TeX Live texconfig-sys - configures teTeX or TeX Live system-wide SYNOPSIS texconfig texconfig [ commands ...] texconfig-sys DESCRIPTION texconfig allows one to configure and maintain TeX in an easy and conve‐ nient manner, offering a series of dialog boxes to the user. The tlmgr program has subsumed this function for TeX Live. This program is still supported, but the tlmgr interface is much more actively devel‐ oped and tested. After choosing settings or options, the appropriate files are changed automatically and the new settings are applied for the user. If needed, copies of files in TEXMFDIST or TEXMFMAIN will be made in the user's TEXMFCONFIG tree. texconfig uses either the whiptail(1) or dialog(1) program to communicate with the user, so must be run in a terminal. For making system-wide changes, which will apply to all users of TeX (for example, default paper size and so on), run texconfig-sys instead. Changed or generated files will be placed in TEXMFSYSCONFIG. (You may need to be root to do this.) Note that on a Debian system, changes to formats, font setup, hyphenation for different languages, etc. should not be done with texconfig, because fmtutil.cnf(5), updmap.cfg(5), texmf.cnf and language.dat are generated files in Debian. See TeX-on-Debian.pdf, TeX-on-Debian.txt.gz or TeX-on- Debian.html/index.html in /usr/share/doc/tex-common/ for alternatives. texconfig also offers a non-interactive batch mode which can be accessed with the following commands COMMANDS Commands that accept further options usually display available options if called without them. For example, texconfig dvipdfm paper will inform about valid paper settings. conf Display the system configuration. dvipdfm paper [letter|legal|ledger|tabloid|a4|a3] Set up dvipdfm to use papersize PAPER by default. dvips add PRINTERNAME Create a new (empty) configuration file TEXMFCONFIG/dvips/con‐ fig/config.PRINTERNAME. This file can later be filled with the mode, offset or printcmd options dvips del PRINTERNAME Remove config.PRINTERNAME dvips mode List available MetaFont modes. dvips [-P PRINTER] mode MODE Change the MetaFont mode to MODE for PRINTER or for all output files (config.ps), if no -P option is given. dvips [-P PRINTER] offset x-OFFSET,y-OFFSET Set printer offset for PRINTER or for all output files (con‐ fig.ps), if no -P option is given. Offsets must be given with units, e.g. 0pt,10pt You can use testpage.tex from the LaTeX dis‐ tribution to find these numbers. dvips [-P PRINTER] printcmd CMD Set the printing command for PRINTER or for all output files (con‐ fig.ps), if no -P option is given. Commands might be lp or lpr. See the description of the o option in info dvips or the -O option in dvips(1). faq Display the list of Frequently Asked Questions about teTeX (and their answers). font vardir DIR, font ro, font rw These options should not be used on a Debian system unless you really know what you are doing. For details, look at the output of texconfig fonts and read section 2.5, font caching, in the TeX- on-Debian documentation in /usr/share/doc/tex-common/. formats This command allows to edit fmtutil.cnf(5) and (re)creates any new or changed formats afterwards. It should not be used on Debian systems, unless you want to temporarily create and test a specific format, because fmtutil.cnf(5) is a generated file in Debian, and changes will be overwritten. See update-fmtutil for details. hyphen FORMAT This command allows to edit the hyphenation configuration file for formats that support this, and recreates the formats afterwards to enable the new languages. Available formats are shown when no FORMAT is given. Note that for formats that use LaTeX's language.dat, e.g. (pdf)jadetex and latex itself, this change is not persis‐ tent, since this file is a generated file. You should not use this command in these cases, read update-language(1) for alterna‐ tives. init [format] Recreate format or all formats if none is given, and the font information. This is the same as calling fmtutil --byfmt format or fmtutil --all, respectively, followed by updmap. mode-list List available printer modes, together with the printers they were developed for, and their DPI resolution mode MODE Set the default printer mode in /etc/texmf/web2c/mktex.cnf or the respective user file in $TEXMFCONFIG/web2c to MODE. paper [a4|letter] Set the default papersize for dvips, dvipdfm, pdftex and xdvi. The set is restricted because not all programs understand all sizes. pdftex paper [a4|letter] Set the default paper size for pdftex. rehash Call mktexlsr. xdvi paper PAPER Set the default paper size for xdvi. The (long) list is available with texconfig xdvi paper. ENVIRONMENT To let you change files, texconfig will open the editor specified in the VISUAL or EDITOR variables, or sensible-editor if both are unset. SEE ALSO whiptail(1), dialog(1), tlmgr(1), tex(1), mf(1), vi(1), EDITOR environ‐ ment variable. AUTHOR Thomas Esser TeX Live August 2011 texconfig(1)


From this table, we can see exactly how many of the stopped drivers were male and female. Then, we can use these numbers to determine the proportion of stopped drivers who were female by dividing the number of females (which we just found in the table) by the total number of stops (which we know is 9630). We can get a visual representation of this same data by making a bar chart.
in-context


Arusha, Tanzania.
Exactly like the original bootstrap tabs except you should use the custom wrapper to achieve this style. A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart.
Vision:
Exactly like the original bootstrap tabs except you should use the custom wrapper A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart.
Value:Exactly like the original bootstrap tabs except you should use the custom wrapper A wonderful serenity has taken possession of my entire soul, like these sweet mornings of spring which I enjoy with my whole heart.


This is the multi-page printable view of this section. Click here to print.
New Releases
- Butler blog moved to ptarmiganlabs.com
- v5.3.0: Key-value refinement
- v5.1.0: Sharing is caring
- v5.0.0: Reload alerting deluxe
- v4.3.0: Bug fixes, improved documentation
- v4.2.0: Failed reloads? Notify me!
- v4.1.1: Fixing broken start Sense task API endpoint
- v4.1.2: Sense demo app can now start reloads
- v4.1.0: File copying + Qlik Sense = Useful
- v4.0.0: A SenseOps reboot
- v3.1.0: An armful of heart beats
- v3.0.1: Docker health check is now... healthy.
- v3.0.0: Enable some REST API endpoints, disable others.
Butler blog moved to ptarmiganlabs.com
This section of the Butler site is no longer updated with new content.
New articles about the Butler family of tools are available at https://ptarmiganlabs.com.
v5.3.0: Key-value refinement
Key-value refinement
Small release, this.
After using the key-value (KV) store over a few months it became obvious that iterating over keys in namespaces was useful and important. But not possible given the APIs exposed by Butler.
So we added a new one. Given a KV namespace it simply returns the keys in it.
Bug fixes
We’re always looking out for less than optimal solutions in Butler and try to fix them when we get a chance. A few of those in this relelase too.
v5.1.0: Sharing is caring
Sharing is caring
The main change in in this release is the addition of telemetry.
Yup - starting with 5.1 Butler will call home. At least if you let it.
So… the question is then… how does it work and should you allow it?
How
Software that reports back to some home base can be a bad thing, but it can also be a very good thing.
In the case of Butler only anonymized information is included in telemetry messages.
Ptarmigan Labs just won’t know which telemetry data came from what Qlik Sense servers.
Is this really true?
Yup. Not even the IP addresses of the server sending the telemetry data is kept.
The process is basically this:
- A telemetry message arrives from somewhere. The message itself contains no information that can identify the sender, nor does it contain any sensitive data.
- The message’s content is stored in a database. Nothing else.
- You can request your data to be deleted in the future, if need be. But only if you tell Ptarmigan Labs which data is yours - as they have no way of knowing this themselves.
A full description of what data is included in telemetry messages is found here.
Why
Good question.
It’s pretty simple really: If the Butler developers know which features are used most and on what OSs and types of hardware/VMs etc Butler runs, they can do a much better job when it comes to refining those popular features and supporting the most commonly used platforms.
That’s it - telemetry is 100% about making future Butler versions better.
On the other hand: If you turn off telemetry the Butler developers will be in the dark as to what features are actually used and on what kinds of operating systems and computers.
Telemetry is a way to make future Butler versions as good and relevant as possible - and it’s up to YOU whether it happens or not.

The changelog has all the details.
Butler releases are available on GitHub.
v5.0.0: Reload alerting deluxe
Be the first to know
Let’s say you are responsible for a Qlik Sense Enterprise environment, or that you are a developer of Sense apps.
Let’s also (unlikely as it is, but still..😃) say that app reloads fail from time to time. For whatever reason.
In the past the following has often happened:
End users are the first to detect that something is wrong. Data is missing or incorrect.
Not ideal - you as admin/developer should be the first to know that something has gone wrong.
Butler has always included basic notification mechanisms for failed reload tasks, but with version 5.0 things are taken to a new level.
In fact, this latest Butler version probably offers some of the most powerful and flexible reload alerting features ever - anywhere. And it’s free.
- Reload task failure alerts can be sent as email, to Slack or Teams, as outgoing webhooks or as MQTT messages.
- Email, Slack and Teams alerts can make use of any layout and formatting options available on those platforms.
- If basic alerts are preferred, all that’s needed is changing a single line in Butler’s config file.
- Lots of other new and refined features too, including support for doing partial and full app reloads without going through a reload task. Can be used both via REST API and from the load script.
All in all - this is a major Butler release that holds the potential to make life easier for lots of QSEoW admins and developers.
The changelog has all the details.
Butler releases are available on GitHub.
v4.3.0: Bug fixes, improved documentation
Great features are useless if no one uses them
The previous couple of Butler releases included new features (in the form of REST API endpoints) for among other things copying/moving/deleting files in a controlled way.
The problem was that there were no examples showing how to use those new features.
That is fixed in this release, together with a general cleanup of this documentation site, a few bug fixes (this one was a bit nasty..) and minor improvements and tweaks in Butler itself.
Please see the changelog for more information.
Butler releases are available on GitHub.
v4.2.0: Failed reloads? Notify me!
Advanced email notifications for failed and aborted reloads
Email notifications are still very much alive and used in many companies.
Historically it’s been difficult or impossible to get good email notifications from Qlik Sense Enterprise on Windows - that feature simply isn’t part of the standard product.
Some commercial offerings have emerged lately (=Qlik’s own Qlik Alerting product), but no good open source has been available - until now.
Butler version 4.2 uses the proven concept of log appenders to capture log events from Qlik Sense.
But Butler goes way beyond staic alert emails with limited possibilities for customisation:
- Alert emails be sent when scheduled reloads fail or when running reloads are stopped from the QMC or via Sense APIs.
- Email bodies and subjects can be freely customised using the Handlebars templating engine.
- More than 40 templating fields are available across both email subjects and bodies (but please don’t put full script logs in the email subject…🤪).
- Customisable rate limits prevent email spamming as a result of frequently scheduled, failing reloads.
A bonus feature is that alerts for stopped reloads can be sent not only as emails, but also over Slack, Teams and MQTT.
All in all this makes Butler a very powerful tool for anyone invovled in running a QSEoW environment, no matter if it has a few dozen or thousands of users.
Please see the changelog for more information.
v4.1.1: Fixing broken start Sense task API endpoint
Fixing broken start Sense task API endpoint
Oops. The API endpoint for starting Sense tasks was incorrectly documented, as noted in #89. Fixed in version 4.1.1.
Please see the changelog for more information.
v4.1.2: Sense demo app can now start reloads
Sense demo app can now start reloads
The included Sense demo app now correctly uses the Butler API endpoint used to start reload tasks.
Please see the changelog for more information.
v4.1.0: File copying + Qlik Sense = Useful
File copying via Butler’s REST API
This is a small release that just adds a single endpoint to Butler’s REST API: Copying files.
This is done in the same way as the moving files feature that was added in v4.0:
In the config file you define pairs of approved source/destination directories, between which file copying is allowed. This way the security risk is greatly reduced, and file copying can become an integral part of Qlik Sense load scripts’ logic.
Please see the changelog for more information.
v4.0.0: A SenseOps reboot
Task scheduling for Qlik Sense, key-value store, reload failure alerts to MS Teams and more
Butler was due for a major overhaul and it has finally arrived.
This release adds a bunch of new features:
- A reload task scheduler. Think Cron for Qlik Sense tasks. Need to run a reload every 15 minutes between 8 am and 10 am on the 4th day of every 3rd month? No problem!
- A key-value store. A what, you may say? It’s really simple, really. Sense apps can store key-value pairs in Butler 4.0, using its REST API. Think of it as a way to stash away something you might need later. …which opens up all sorts of possibilities - such as unlimited parameter passing between tasks in reload chains. Like QlikView’s task chaining, but better. Oh you can set ttl (time-to-live) for KV pairs too, to make them auto-delete when the ttl expires. Handy.
- Sending notifications for task failures to MS Teams, in addition to Slack and email.
- Swagger API docs included in Butler itself. Start Butler and you get a full Swagger interface through which you get both API docs and a way to test the Butler REST API on your own server. Very cool.
- Uptime and memory usage monitoring of Butler itself. Might seem like a detail, but is very important if you’re responsible for the ongoing operation of tools and microservices like Butler.
- A revised REST API for interacting with Butler.
- … and more.
There are also some breaking changes, most notably around the REST API. Some changes in the main config file too. While breaking changes are unfortunate, they were considered necessary in order to make Butler’s REST API better align with common best practices for such APIs.
Please see the changelog for more information.
v3.1.0: An armful of heart beats
Our trusted Butler has turned 4 - quite an age in the world of fast-moving DevOps tools!
Over time it’s become clear that some features are more useful than others, which is not really surprising of course.
Some of Butler’s features are on the other hand very useful - for example starting reloads or dumping app metadata to JSON via REST calls.
The trusted old Butler is thus very much alive and as of version 5.5.0 it’s available as Arm and Arm64 Docker images, in addition to the already supported amd64 (equals regular x86 computers, more or less) architecture.
And - the Butler can now be configured to send heart beats to a monitoring tool, to monitor and make sure that Butler itself is alive and well.
What does that mean in regular English?
You can now run Butler on more cost effective AWS EC2 Arm instances, or even a Raspberry Pi - or a Kubernetes cluster of Pis - just because it’s possible and gives you some tech respect.
And that you can monitor the Butler itself.
Respect.
v3.0.1: Docker health check is now... healthy.
A small bug found its way into v3.0.0. Nothing affecting the core functions of Butler, but as it does support Docker health checks, those should work..
Which is now the case.
No features added, just that bug fix and some minor upgrades to the software components used in Butler.
v3.0.0: Enable some REST API endpoints, disable others.
As Butler offers a set of rather different API endpoints, there might be cases where you only need some of those features.
In the spirit of security you might then want to enable only the endpoints you actually need.
Butler 3.0 adds exactly this feature.
Configuration is easy. Just enable/disable the individual REST API endpoints in Butler’s configuration file, and you’re done. Done!


if having a style guide most commonly seen as something good, why is the process to get there so damn complicated?
three approaches:
they use the word “opinionated” a lot. the interesting thing is that there are not objectively correct answers but questions of style, even though these questions are approached as if they are > open-source as objectifying the subjective
“it is about personal pride and prestige”
there might also be radical difference (style wars, tabs vs. space) as well as incremental difference (e.g. “making this change, in combination with AirBnB’s style guide…” etc.)
also issues of bugs! you need to hack the config when a bug makes it necessary (more actor-network theory) -> to what extent is style used/linked/intricated with a tool?
categories 1. uses the pronoun “i”, first person singluar, the 3. uses “we”: hints at the relationship between organizations (while at the same time being for interoperability)
javascript doesn’t actually have a style guide ruby has one go has everything python has a style guide as well
stats: 37k stars, 2.5k forks
the core principle is “fully automatic”; on their website, they acknowledge that there are multiple reasons why one would want to use Prettier, and they list the different categories
one of the main devs is confused that there are so little forks, because the issue is a technical argument
rather than a personal one
src. as it turns out, it’s actually a different kind of technical
, because forking perttier involves forking other plugins/files which come with it (you can fork a project, and it’s more difficult to fork an ecosystem)
it’s annoying until you don’t notice anymore src
many people have seen the value of “team” over “individual” src
at the end of issue 3101, it just gets redirected to a fork, and it is also the closing argumentation of this (funny, cause this fork of prettier actually uses standardJS as some style inspiration)
interesting example of when a maintainer is angry, and a contributor rational
The requests for configuration are vocal. The requests to stay simple are often silent. src
component props being each on their own line
tabs v space, semis (solved by having options)
stats: 24k stars, 1.8k forks
the core principle is “no configuration”, “automatically format code”, “catch style issues” )(save you time) src from founder
this guys wants to hack a config, understands why he shouldn’t do it, argues that it’s because the linter currently doesn’t support his request: link
“based on ESLint”
There is a new set of ts plugins in town good metaphor of the JS ecosystem link
“i disagree, can i change it?” answer is NO
the point is to save time and give an answer to unsolved (unsolvable?) debates. therefore, it is seen as “not an actual, real problem”.
the point of standard is that it is both an indicator of standard of quality and basis for a style standard
justification from the founder: link, it is about technical, about “being kept safe”
the first comment is “sorry, this doesn’t make sense to me”
response in support of “no semi-colon”, user “Chipotle” > “the simplest approach is the one with fewer rules and characters”
response against, user “Heheh” > “The people are divided on those who are real programmer (they are use semicolons). And hobbysts who have never programmed in another language.”
stats: 17k, forks 3k
it’s about productivity and maintainability
javascript has a lot of tools and everything else (and it’s typical of javascript)
aesthetics is the prime justification of the author: breathing some air, making it lighter, nicer > indentation is one of the rules that breathes more “air” into AirBnB’s default style guide. As a result, your code doesn’t crowd on the left side of editor so badly.
call to personal judgment > I encourage you to give them a try. I think you’ll quickly experience what a difference this makes.
very nice and polite discussion: [https://github.com/psf/black/issues/51]
the big difference is PEP-8. indeed, even google just builds on top of it


-
bad credit granteed loan personal credit
WATCH#@$$UFC 158 LIVE STREAM FREE - Quicken Community
1 day ago . WATCH#@$$UFC 158 LIVE STREAM FREE. Watch UFC 158 live. Welcome to UFC 158 ST. PIERRE VS. DIAZ live match on,2013. It is too .
https://qlc.intuit.com/questions/170543-watch-ufc-158-live-stream-free
-
shanghai real estate market
++éé/&$%12+W.A.T.C.H UFC 158 O.N.L.I.N.E LiVE STREAM UFC ...
1 day ago . Listen to ++éé/&$%12+W.A.T.C.H UFC 158 O.N.L.I.N.E LiVE STREAM UFC 158 diaz vs gsp .F.R.E.E by orpierr: ++éé/&$%12+W.A.T.C.H UFC .
http://soundcloud.com/orpierr/luitcjevcen1tu1s
-
bonnie adams san jacinto
Where Watch UFC 158 St. Pierre Vs Diaz Online Free Live Stream ...
1 day ago . Are you looking for a Watch UFC 158 Live STream Free live streaming link? Then you have come to the correct place. You can watch a live .
https://qlc.intuit.com/questions/170080-where-watch-ufc-158-st-pierre-vs-diaz-online-free-live-stream-hd-premium
-
judo gyms in san antonio
ufc 158 live stream,watch ufc 158 online free st - Quicken Community
1 day ago . The UFC welterweight title is on the line Saturday night, and if you're looking to live stream UFC 158: St-Pierre vs. Diaz tonight on your .
https://qlc.intuit.com/questions/170169-ufc-158-live-stream-watch-ufc-158-online-free-st-pierre-vs-diaz
-
08 civic si fiji blue pearl
programming - @@@how and where@@Watch UFC 158: St-Pierre ...
1 day ago . UFC 158 live , UFC 158 live stream , UFC 158 fight online , Diaz vs GSP , UFC 158 video , Streaming free UFC 158 , Watch UFC 158 online .
http://askubuntu.com/questions/268824/how-and-wherewatch-ufc-158-st-pierre-vs-diaz-live-stream-online-hd-free
-
593 nassau north brunswick
Watch-UFC-158-ST-Pierre-vs-Nick-Diaz-Live-Stream-Online-Free
1 day ago . watch-ufc-158-st-pierre-vs-nick-diaz-live-stream-online-free team web site hosted at eteamz - los angeles, Iowa 41010 USA.
http://www.eteamz.com/murgies2/
-
free diablo 2 dupe hack
UFC 158 Live stream Watch St-Pierre vs Diaz Onl... | Yookos
22 hours ago . UFC 158 Live stream Watch UFC 158: St-Pierre vs Diaz Online Free Fight Replay Full Video,The weigh-ins took place at Montreal's Bell Centre .
http://www.yookos.com/docs/DOC-35630
-
design studio mission statement
WATCH UFC 158 GSP VS DIAZ ONLINE FREE LIVE STREAM ...
1 day ago . free ufc 158 Live Steam!!! watch UFC 158 St-Pierre vs Diaz live stream free, This Saturday night (March 16, 2013), the Octagon hits Montreal for .
https://qlc.intuit.com/questions/170010-watch-ufc-158-gsp-vs-diaz-online-free-live-stream-in-mma-ufc-tv
-
east bend north carolina real estate
How to watch UFC 158 Live Stream Online Free Online? - Yahoo! Answers
1 day ago . Former interim welterweight champion Carlos Condit
http://answers.yahoo.com/question/index?qid=20130316193114AAxJ9t5
-
clast english practice test
watch UFC 158 Online free Live Stream St Pierre vs Diaz Fight hdhq
1 day ago . Watch UFC 158 Live Stream GSP vs Diaz Pay Per View Online Free. Watch UFC 158 online free streaming now, the mixed martial art for the .
https://qlc.intuit.com/questions/170099-watch-ufc-158-online-free-live-stream-st-pierre-vs-diaz-fight-hdhq
-
xbox 360 error code
!#@$#Watch UFC 158 Live Stream Online Free in HD ...
2 days ago . UFC 158 Live Stream: St-Pierre vs. Diaz is an upcoming mixed martial arts event to be held by the Ultimate Fighting Championship on March .
http://www.myfitnesspal.com/topics/show/926671--watch-ufc-158-live-stream-online-free-in-hd
-
peter barry md dublin
12.04 - StreamStuff- Watch UFC 158 Live Stream Online Free GSP ...
1 day ago . So many people on the internet are eagerly waiting to Watch UFC 158 Live Stream Online Free on computer in high quality without even .
http://askubuntu.com/questions/268861/streamstuff-watch-ufc-158-live-stream-online-free-gsp-vs-diaz-full-premium-payp
-
competition in health care
video - Watch UFC 158 St-Pierre vs. Diaz Live Online Free ...
1 day ago . free ufc 158 Live Steam!!! watch UFC 158 St-Pierre vs Diaz live stream free, This Saturday night (March 16, 2013), the Octagon hits Montreal for .
http://askubuntu.com/questions/268823/watch-ufc-158-st-pierre-vs-diaz-live-online-free-streaming-hd-dvd-english-versi
-
maureen bunun on the news
watch!! UFC 158 Online free Live Stream St Pierre - Quicken ...
1 day ago . UFC 158 Online free Live Stream St Pierre vs Diaz Fight HQ PPV. Hello UFC 158 Lovers !!! If your watch match between Nick Diaz vs GSP UFC .
https://qlc.intuit.com/questions/170149-watch-ufc-158-online-free-live-stream-st-pierre-vs-diaz-fight-hq-ppv
-
britannia stakes heritage stakes class 2
ufc 158 live stream online free, UHDTV, 3DTV, - Quicken Community
1 day ago . Hey, do you wanna watch ufc 158 live stream online free but don't know where to go? then follow the link below. :) ufc 158 live stream online .
https://qlc.intuit.com/questions/169947-ufc-158-live-stream-online-free-uhdtv-3dtv-watch-ufc-158-st-pierre-vs-diaz-ppv-streaming
-
super 8 stafford texas
Watch UFC 158 Live Stream Online for Free PPV | Yookos
1 day ago . Watch UFC 158 Live Stream Online for Free PPV Be sure to check out our other shows as well: Pro MMA Now Radio, Pro WMMA Now! Radio .
http://www.yookos.com/message/2895246
-
metric scale english equivalent
12.04 - CLASH - Watch UFC 158 Live Stream Online Free GSP Vs ...
1 day ago . So many people on the internet are eagerly waiting to Watch UFC 158 Live Stream Online Free on computer in high quality without even .
http://askubuntu.com/questions/268786/clash-watch-ufc-158-live-stream-online-free-gsp-vs-diaz-full-premium-now
-
mr crowley keyboard tab
Watch Pay Per View UFC 158 Diaz Vs St Pierre | - Quicken Community
1 day ago . free ufc 158 Live Steam!!! watch UFC 158 St-Pierre vs Diaz live stream free, This Saturday night (March 16, 2013), the Octagon hits Montreal for .
https://qlc.intuit.com/questions/170285-watch-pay-per-view-ufc-158-diaz-vs-st-pierre-george-vs-nick-live-steream-online-free
-
ero-pro shark s3501 instructions
{WATCH+++__} Free UFC 158 St Pierre, GSP Vs DIaz Live Strream ...
1 day ago . free ufc 158 Live Steam!!! watch UFC 158 St-Pierre vs Diaz live stream free, This Saturday night (March 16, 2013), the Octagon hits Montreal for .
https://qlc.intuit.com/questions/170009-watch-__-free-ufc-158-st-pierre-gsp-vs-diaz-live-strream-online-ppv-online-hdq-tv
-
brazil south america imports
@@@ Watch UFC 158: St-Pierre vs. Diaz live - Quicken Community
1 day ago . Watch UFC 158: St-Pierre vs. Diaz live Streaming Online Free! UFC 158 live , UFC 158 live stream , UFC 158 fight online , Diaz vs GSP , UFC .
https://qlc.intuit.com/questions/169965-watch-ufc-158-st-pierre-vs-diaz-live-streaming-online-free