diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 index b6e051f..a07baea --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ PlotDigitizer.jar jpeglib.h nbconvert/ sketch/ +nohup.out diff --git a/.latexmkrc b/.latexmkrc old mode 100644 new mode 100755 diff --git a/chertex.sh b/chertex.sh index 1d4102c..368cba5 100755 --- a/chertex.sh +++ b/chertex.sh @@ -5,15 +5,15 @@ #################################################### # For now, MAKE SURE that the argument consists of -# a complete filename, with extension, and -# in the directory of the Rnw file +# a complete filename, with extension, and +# in the directory of the Rnw file #################################################### clear echo "-----------------------------------------------------------------------" echo "cheRTeX -- a script for processing R--Sweave/knitr--LaTeX/TikZ projects" echo "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^" -echo "MMXIV -- taha.ahmed@kemi.uu.se -- CHEPEC doctoral degree project" +echo "MMXVI -- taha@chepec.se -- CHEPEC doctoral degree project" echo "-----------------------------------------------------------------------" ## If the file .latexmkrc exists in the current directory, @@ -59,28 +59,28 @@ if [ $# -eq 1 ]; then fi # Introducing a short delay to enable on-screen reading of previous echo - /home/taha/chepec/chetex/common/bash/simpledelay.sh 2 + simpledelay.sh 2 echo "Delay completed" - - + + #### Special treatment for sample-matrix.Rnw # If $jobname is sample-matrix, restart Shiny and term this script if [[ $jobname == "sample-matrix" ]]; then echo " -------------------------------" echo " sample-matrix: restarting Shiny" echo " -------------------------------" - + # kill Shiny pkill -f "shiny::runApp" # start Shiny - bash -c "/home/taha/chepec/chetex/common/bash/shiny-matrix.sh" & + bash -c "/home/taha/chepec/chetex/common/bash/shiny-matrix.sh" & # terminate this script echo " Terminating..." - /home/taha/chepec/chetex/common/bash/simpledelay.sh 4 - exit 1 + simpledelay.sh 4 + exit 0 fi - - + + ## Handle knitr or pgfSweave jobs (each requires separate treatment) ## But how should we tell the difference between them? ## There is no obvious way to tell the difference (apart from reading the *.Rnw file) @@ -92,51 +92,51 @@ if [ $# -eq 1 ]; then # Run knitr commands for this job echo " -----------------------" echo " This is a job for knitr" - echo " -----------------------" - + echo " -----------------------" + # Knit echo " Knitting..." Rscript -e "library(knitr); library(methods); knit('$jobname.$jobfiletype')" - + # Introduce delay to give time to read Rscript exit status echo " -----------------------" echo " Rscript knitr completed" echo " -----------------------" - /home/taha/chepec/chetex/common/bash/simpledelay.sh 4 + simpledelay.sh 4 else # Run pgfSweave commands echo " ---------------------------" echo " This is a job for pgfSweave" echo " ---------------------------" - + # Tangle echo " Tangling..." R CMD Stangle $jobname.$jobfiletype # Weave echo " Weaving..." R CMD pgfsweave --graphics-only $jobname.$jobfiletype - + # Introduce delay to give time to read R CMD exit status echo " -------------------------" echo " R CMD pgfsweave completed" echo " -------------------------" - /home/taha/chepec/chetex/common/bash/simpledelay.sh 4 + simpledelay.sh 4 fi - + # Run vc script if vc exists in working directory echo " Running vc script" if [ -f vc ]; then ./vc fi - + # Run pdflatex, bibtex, and company if $ltxmkrc; then echo " Calling LaTeXMK with RC file" - /home/taha/chepec/chetex/common/bash/simpledelay.sh 2 + simpledelay.sh 2 latexmk -r .latexmkrc -pdf -bibtex $jobname else echo " Calling LaTeXMK" - /home/taha/chepec/chetex/common/bash/simpledelay.sh 2 + simpledelay.sh 2 latexmk -pdf -bibtex $jobname fi @@ -150,7 +150,7 @@ else echo "<3> 'wipe-dir' -- Remove all non-essential files and subdirectories" echo "Any other input exits the program" read usrchoice - + ## Determine number of .Rnw files in current directory #Rnwfileno=$(ls -1 $Rnwfiles | wc -l) #echo "No of .Rnw files: $Rnwfileno" @@ -158,7 +158,7 @@ else ## Check if number of .Rnw files larger than one #if [ $Rnwfileno -gt 1 ]; then # # If larger than one, ask for user input - # # Indicates more than one Rnw file in current directory. + # # Indicates more than one Rnw file in current directory. # # This introduces a naming ambiguity. # # Resolve by asking user for current jobname # echo "Found $Rnwfileno .Rnw files in current directory" @@ -177,17 +177,17 @@ else #fi # #echo "Jobname set to: $jobname" - + if [[ $usrchoice == "pdf-all" || $usrchoice == "1" ]]; then echo "<1> 'pdf-all' chosen" # This for loop ONLY USED to determine number of *.tikz files in directory for tikzfiles in "$tikzfiles"; do tikzfilenumber=${#tikzfiles}; done echo "cheRTeX detected $tikzfilenumber TikZ files for processing" echo "Starting TikZ file processing..." - /home/taha/chepec/chetex/common/bash/simpledelay.sh 2 - + simpledelay.sh 2 + for tikzfilename in $tikzfiles; do - # Call tikz2pdf + # Call tikz2pdf echo " tikz2pdf $tikzfilename" tikz2pdf --once $tikzfilename done @@ -199,7 +199,7 @@ else rm $auxfiles # Still, a rather crude way of cleaning up... fi - + if [[ $usrchoice == "wipe-dir" || $usrchoice == "3" ]]; then echo "<3> 'wipe-dir' chosen" ## Remove all but non-essential files @@ -226,38 +226,38 @@ else ## The use of conditionals is mainly to avoid annoying "file does not exist" messages... # Return *.Rproj file (removal is unnecessary and makes RStudio less useful) Rprojfiles=`ls -1 /home/taha/chepec/tmp/$tmpdirname/*.Rproj 2>/dev/null | wc -l` - if [ $Rprojfiles != 0 ]; then + if [ $Rprojfiles != 0 ]; then cp /home/taha/chepec/tmp/$tmpdirname/*.Rproj . fi # Return *.rda files (considering peak-data files, which "cost" a lot to create) rdafiles=`ls -1 /home/taha/chepec/tmp/$tmpdirname/*.rda 2>/dev/null | wc -l` - if [ $rdafiles != 0 ]; then + if [ $rdafiles != 0 ]; then cp /home/taha/chepec/tmp/$tmpdirname/*.rda . fi # Return *.Rmd files (R markdown source files) Rmdfiles=`ls -1 /home/taha/chepec/tmp/$tmpdirname/*.Rmd 2>/dev/null | wc -l` - if [ $Rmdfiles != 0 ]; then + if [ $Rmdfiles != 0 ]; then cp /home/taha/chepec/tmp/$tmpdirname/*.Rmd . fi # Return *.css files (css files) [for sample-matrix] cssfiles=`ls -1 /home/taha/chepec/tmp/$tmpdirname/*.css 2>/dev/null | wc -l` - if [ $cssfiles != 0 ]; then + if [ $cssfiles != 0 ]; then cp /home/taha/chepec/tmp/$tmpdirname/*.css . fi # Return .knitme file [empty file used to indicate knitr jobs] knitmefile=`ls -1 /home/taha/chepec/tmp/$tmpdirname/.knitme 2>/dev/null | wc -l` - if [ $knitmefile != 0 ]; then + if [ $knitmefile != 0 ]; then cp /home/taha/chepec/tmp/$tmpdirname/.knitme . fi fi echo "Terminating..." - - exit 1 + + exit 0 fi - + ## Here is the wild land of more than one *.Rnw file in current directory - + echo " This script can be run with one argument is process mode," echo " or with zero arguments in post-processing mode." echo " Terminating..." @@ -266,9 +266,9 @@ fi echo "------------------------------------" -echo "=== sample-matrix.sh completed ===" +echo "=== chertex.sh completed ===" echo "=== $(date) ===" echo "------------------------------------" -/home/taha/chepec/chetex/common/bash/simpledelay.sh 10 +simpledelay.sh 10 -exit 1 +exit 0 diff --git a/chrome-with-tabs.sh b/chrome-with-tabs.sh index 7c80d44..54f5b62 100755 --- a/chrome-with-tabs.sh +++ b/chrome-with-tabs.sh @@ -3,16 +3,19 @@ ## Written Oct 12, 2013 ## Taha Ahmed -a="https://mail.google.com" -b="https://rememberthemilk.com" -c="https://chepec.timetask.com" +# a="https://mail.google.com" +b="https://www.rememberthemilk.com" +c="https://asks.timetask.com" d="https://keep.google.com/keep/" +e="https://luxor.chepec.se/tagspaces/" +f="https://shiny.chepec.se" -# open shiny sample-matrix -# find current port number by reading shiny.port file -PORT=$( *.md? -convert=false -# convert existing *.md files as well? -overwrite_md=false -# sync jekyll directory? -unison_sync=false -# build jekyll site? -buildsite=false - - -# To do everything, the user could set all the flags (commmand-line options), -# but to make life a little easier, this script will interpret _no arguments_ -# as "run everything" -if [ $# -eq 0 ] ; then - convert=true - overwrite_md=true - unison_sync=true - buildsite=true -fi - - -while getopts "h?cosb" opt; do - case $opt in - c) - convert=true - ;; - o) - overwrite_md=true - ;; - s) - unison_sync=true - ;; - b) - buildsite=true - ;; - h|\?) - show_help - exit 0 - esac -done - - -shift $((OPTIND-1)) - - -#### 1. convert new/existing *.Rmd to *.md -# use the function KnitPost() from the R-script render_post -if [ "$convert" = true ] ; then - echo ">>>> jc: Converting RMarkdown to Markdown (overwrite = $overwrite_md)" - if [ "$overwrite_md" = true ] ; then - Rscript -e "source('/home/taha/jekyll/chepec/_knitr/render_post.R'); KnitPost(overwrite=TRUE)" - else - Rscript -e "source('/home/taha/jekyll/chepec/_knitr/render_post.R'); KnitPost()" - fi -fi - - -#### 2. sync the jekyll website directory -# sync local jekyll folder with damietta -if [ "$unison_sync" = true ] ; then - echo ">>>> jc: Syncing jekyll folder" - unison jekyll-chepec -auto -fi - - -#### 3. build the site (on the server) -if [ "$buildsite" = true ] ; then - echo ">>>> jc: Building site on damietta" - # runs the build-jchepec.sh script (note that the path is local on damietta) - # this line is fubar and needs to be fixed or circumvented - ssh damietta bash --login -c /home/taha/jekyll/build-jchepec.sh -fi - - -# give the user a summary -# -- good idea, but do it better -#if [ "$buildsite" = true ] ; then -# echo ">>>> jc: Synced and built jekyll site (overwrite = $overwrite)" -#else -# echo ">>>> jc: Synced jekyll folder (overwrite = $overwrite)" -#fi - - - - - diff --git a/rstudioserver.sh b/rstudioserver.sh new file mode 100755 index 0000000..3e1113d --- /dev/null +++ b/rstudioserver.sh @@ -0,0 +1,38 @@ +#!/bin/bash +## Start Rstudio server in Firefox through an encrypted SSH tunnel +## Written Dec 15, 2014 +## Taha Ahmed + +# ssh port number +PORT=9996 # matches the port set in firefox profile about:config + +# the firefox profile "rstudioserver" has been configured +# using about:config to route all traffic (including DNS requests) +# over the socks proxy +# network.proxy.socks : 127.0.0.1 +# network.proxy.socks_port : 9996 +# network.proxy.socks.remote_dns : true +# network.proxy.socks_version : 5 +# network.proxy.type : 1 +# network.proxy.no_proxies_on : localhost, 127.0.0.1 + +# -f forks the process into the background +# when firefox stops using the tunnel, then +# the ssh client exits (having completed the sleep command) +# -N tells ssh that no commands will be sent (-f complains otherwise) +#ssh -D $PORT -f luxor sleep 10; +firefox -P "rstudioserver" "http://luxor.chepec.se/rstudio" +# (the tunnel is setup using autossh in a startup application) + +# Notes: +# proxy flag does not work in Chrome: +# google-chrome --proxy-server="socks5://127.0.0.1:9995" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE 127.0.0.1" + +# but does work in Chromium, which unfortunately is not supported by Rstudio server +# chromium-browser --proxy-server="socks5://127.0.0.1:9995" --host-resolver-rules="MAP * 0.0.0.0 , EXCLUDE 127.0.0.1" + +# See also: +# http://askubuntu.com/questions/469582/how-do-i-set-up-a-local-socks-proxy-that-tunnels-traffic-through-ssh +# http://kb.mozillazine.org/Command_line_arguments +# http://www.chromium.org/developers/design-documents/network-stack/socks-proxy +# http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/ diff --git a/semtiffconv.sh b/semtiffconv.sh index d82d035..911fefc 100755 --- a/semtiffconv.sh +++ b/semtiffconv.sh @@ -1,6 +1,7 @@ #!/bin/bash ## Convert TIFF images into PNG images and create an aggregated PDF ## Written August 20, 2010 +## Edited March 21, 2015 ## Taha Ahmed @@ -19,4 +20,12 @@ do done +## dump TIF tags to file +for f in *.tif +do + echo "Printing TIFF tags of $f" + tiffinfo $f > ${f%.*}.txt +done + + exit 1 diff --git a/shiny-python-localhost.py b/shiny-python-localhost.py new file mode 100644 index 0000000..3b6fbe0 --- /dev/null +++ b/shiny-python-localhost.py @@ -0,0 +1,11 @@ + #!/usr/bin/python + +import SimpleHTTPServer +import SocketServer + +PORT = 8000 +Handler = SimpleHTTPServer.SimpleHTTPRequestHandler +httpd = SocketServer.TCPServer(("", PORT), Handler) + +print "Serving at port", PORT +httpd.serve_forever()