This is an old revision of the document!
IT tricks
Various tips how to increase your productivity (esp. in Linux).
Editors
Who uses which editor and is willing to provide a mini-training for new users (show config, favorite macros, highlighters etc.).
Feel free to add your name and editor.
- vim: Ondřej Bojar, Ruda Rosa, Milan Straka (C++ completion, Python completion, asynchronous make), …
- to start learning vim, run the
vimtutor
command
- emacs: ?
- nano:
- atom: Martin Popel
- IntelliJ IDEA*: Jonáš Vidra
* Kate: Jonáš Vidra
* Kile (offline TeX editing): Anša Vernerová
* PyCharm: Petr Bělohlávek
===== Bash =====
* Use Bash auto-completion (source /etc/bash_completion
). Some tools have plugins, e.g. many Perl tools.
*export HISTCONTROL=ignoreboth
results in bash history ignoring duplicate entries and entries starting with a space.
==== Directory-local Bash history ====
* Ondřej Bojar prefers to store the history in each directory in.history-bojar
. See/home/bojar/diplomka/granty/cracker-2015/mtm-2016-organization/accounts-mtm16/bash-profile-for-ufal-accounts
* Note that this creates the “.history-your-name” wherever you have write access and some ÚFALers are not happy with this. In addition everyone sees what you did (this may be useful, but be careful).
* Ondřej Dušek (/home/odusek/.bashrc
) uses a variant more friendly to others, which saves the histories in his home (but does not handle renamed directories):<code>
if [ -z “$USER” ]; then
export USER=`whoami`
fi
# Store all history with times and directories
function store_history () {
history 1 | awk '($2 !~ “^[mr]?cd[0-9a-z]?$”) {$1=“_T=“strftime(”%Y%m%d_%H:%M:%S_”) PROCINFO[“ppid”] “_PWD=” ENVIRON[“PWD”] “\t”; $2=gensub(“^_T=[-_0-9:]*[ \t]* *”, “”, 1, $2); $2=gensub(“^_P=[^ \t]* *”, “”, 1, $2); print;}' » ~/.history-all-$USER
}
export PROMPT_COMMAND=“store_history”
# Grep history
function dhist (){
DIR=`pwd`
command grep “_PWD=$DIR”$'\t'“.*$@” ~/.history-all-$USER | tail -n 30
}
function hist (){
if [ “$#” -eq 0 ]; then
tail -n 30 ~/.history-all-$USER
else
command grep “$@” ~/.history-all-$USER | tail -n 30
fi
}
</code>
==== Colorful manpages ====
Add this to your .bashrc (tested on .zshrc). Colors can be easily customized.
<code>
man () {
env LESS_TERMCAP_mb=$'\E[01;31m' \
LESS_TERMCAP_md=$'\E[01;38;5;74m' \
LESS_TERMCAP_me=$'\E[0m' \
LESS_TERMCAP_se=$'\E[0m' \
LESS_TERMCAP_so=$'\E[38;5;246m' \
LESS_TERMCAP_ue=$'\E[0m' \
LESS_TERMCAP_us=$'\E[04;38;5;146m' \
man “$@”
}
</code>
===== Git =====
* bash-git-prompt shows e.g. the current branch and status. Martin Popel prefers to configure it (in bashrc) with
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWSTASHSTATE=1
export PS1='[\t]\[\033[2;31m\]\h:\W\[\033[01;95m\]$(__git_ps1 “(%s)”)\[\033[2;31m\]>\[\033[0m\] '
* tig text-mode gitk but better
* read https://guides.github.com/, understand GitHub flow, check GitHub training
* learn GitHub keyboard shortcuts, esp. “y” for permalink to a given line (line range) in source codes
===== Plots, vector graphic =====
* gnuplot
* seaborn based on matplotlib (Python)
* inkscape manually draw vector graphic (or poster)
* TikZ great for LaTeX/Beamer, offers many “plugins”
* pgfplots
* tikz-dependency dependency trees (in one line)
* tikz-qtree classical trees (constituency, but with some hacks even dependency)
===== LaTeX, pdf =====
* see also triky
* latexmk can be used with-pdf -pvc
, so whenever you save atex
file, the correspondingpdf
will be regenerated (and your pdf viewer will refresh). Other useful options are-interaction=nonstopmode -synctex=1
, see e.g. synctex
* pdftk for merging and splitting pdf files (and much more) from the command line
* use pdffonts to check if all fonts in your pdf are embedded (only the used subset).
* <code>gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=CompressedWithEmbeddedFonts.pdf Original.pdf</code>
* http://ufal.mff.cuni.cz/~popel/latex.pdf other hints (mostly for newbies) in Czech
* Beamer is a LaTeX package for creating presentations.
* You can use it with pdfpc to show slides on the overhead projector while reading your notes on your laptop's screen. Create the dual-screen PDF with\usepackage{pgfpages} \setbeameroption{show notes} \setbeameroption{show notes on second screen=left}
and add notes using\note{Hello!}
. Then display your presentation withpdfpc –notes=left presentation.pdf
.
===== TAR archive mounting =====
If you work with data consisting of many small files, you should store them in tar archives to save inodes. There is a way to mount a tar archive to a specific directory in the simmilar way you mount ISO image. You can use the following wrapper script to mount (read-only) ARCHIVE to DIRECTORY:
/opt/bin/tarmount -a ARCHIVE DIRECTORY
and umount when you finish your work:
/opt/bin/tarmount DIRECTORY
You can also use the original tool called ratarmount directly through the link:
/opt/bin/tarmounter
===== Other =====
* When using Perl at ÚFAL, we recommend using Perlbrew with shared perl interpreters (different versions) and shared Perl modules (which otherwise take several hours to install and 6GB).
* See Python for using Python at ÚFAL.
* See remote access, esp. for byobu and mosh.
* You should not turn off** Linux workstations at ÚFAL, unless really needed (or agreed with it@ufal). In that case, try the standard ways, and if they do not work, try Ctrl+Alt+SysRq+[R,E,I,S,U,B] rather than plug out power cable. Mnemonics: “Reboot Even If System Utterly Broken”, see http://en.wikipedia.org/wiki/Magic_SysRq_key#Uses- SysRq has also other interesting uses: For example, if you manage to launch a program that exhausts all RAM, the system starts swapping and becomes unresponsive, you can recover by invoking the OOM-killer by pressing Ctrl+Alt+SysRq+F.
- Ondřej Bojar has implemented many Text utils, which he likes to use in his scripts and advises his students to do so as well.
- The web versions of the text utils are often older than the ones in
/home/bojar/tools/vimtext
and/home/bojar/tools/shell
- shuf shuffle lines randomly (or in a given order with
–random-source
)