unique package names
install deb dependencies of rmarkdown if available
when apt-get install fails, re-run it with stdout to see what is going on
see why rJava fails to install
add more broken packages in PPA
add some packages that fail to install, and output to stdout for them
some packages are time-consuming, so enable stdout to avoid travis timeouts
tweak error message
arrange packages in the build matrix alphabetically

at some point, we need to figure out a better way to arrange them, e.g. they should be balanced according to the CRAN check time, so that each item in the matrix uses more or less the same time, otherwise time-consuming packages might be arranged in the same item
add more packages that failed to install for unknown reasons
automatically figure out which packages are broken and need to be re-installed, and also re-install with stdout if the previous installation failed
factor out require(quiet = TRUE)
see if travis_wait works (extend timeout to 20 minutes)
run R CMD javareconf for rJava and see if fixes the jvm-not-found problem
use requireNamespace() instead of require() for a cleaner search path
travis_wait is a function instead of a command
some packages like rgl or tcltk may need virtual framebuffers
run system2(wait = FALSE) to avoid Travis timeouts; I'll write . to stdout every 30 seconds

travis_wait is a function in the top shell environment, which is not available to R here
quiet R CMD check
factor out NeedsCompilation, and we need to check if the package p is in db