Below you find my personal collection links, scripts, guides and graphics you might find
neat, or useful.
- Link'O'Rama
- Personal credo
- Gnuplot extrapolations with errorbars
- arXiv logo
- How to fix your citation index
- RSS-feed of PRL's newly accepted and cond-mat with authors
- MathJax
- Guide to migrate from Linux to MacOSX
- Condensed matter job sites
- Word count of TeX manuscript for Phys. Rev. Lett.
- Shell script to create histograms
- Honeycomb lattice graphics
- YouTube science
- Shell script grepskip
- Setup your Raspberry Pi as an AirPrint server
- Calling C/C++ routines from Fortran
- Dudeney-dissection
Link'O'Rama
- PaperScape is an awesome visualization of citations between papers on the arXiv.
- The Hubble Ultra Deep Field, one of the most profound and humbling images in all of human history.
- Support the gorgeous In Saturn's Rings project. A movie made from NASA stills - no CGI and surreal-real.
- Follow a camera traveling away from the sun at the speed of light in realtime in Riding Light.
- Looking for a new lens? Find decent reviews at the Digital Preview and The Digital Picture.
- ScienceBasedMedicine.org, a educational blog by professionals refuting common misconceptions in medicine and SCAM.
- JavaScript remake of the epic Commodore 64 game Impossible Mission. My favorite game of the C64 era, and yes, I'm that old.
- PhD Comics. Everyones favorite way to procastinate.
- Wolfram's Mathworld, together with Wolfram's Gallery, always worth a look.
- Find A Grave - find where your favorite celebrity's remains are buried; Including pictures, e.g., Boltzmann.s favorite gravestone.
- This is Collossal, a magnificent out-of-the-box art blog.
- A 1966 Documentary on the making of Kubrick's 2001: A Space Odyssey - my favorite ScFi movie.
- A blog of an artist who creates paintings of encounters with machinery in the everyday future world.
- These are the amazing shots of the sun you could take in your backyard!
- A collection of high-res trippy GIFs.
- A blog of scientific figures and pictures with aesthetic appeal.
- Remember the good old sounds of 14400Bd? Here is an example and what it means, explained by Oona Räisänen.
- Listen to Wikipedia being updated in real time, each update corresponding to a musical note.
Personal credo
You may, or may not sympathize with my love for strongly correlated physics, but I bet you will agree with something less controversial – my personal credo and the spot-on prose from an unidentified editor of New Scientist Magazine, asked about the philosophy of the magazine:
† Much less controversial than this.
Gnuplot extrapolations with errorbars
Adding errorbars on your extrapolations using Gnuplot requires a bit of tinkering.
To create a plot with errorbars like the one on the right a temporary file tmp
is used to store the extrapolated value and its error estimate. In order to access
the error estimates from the fit one needs to invoke set fit errorvariables
before fitting. The fitted function is then plotted together with a single point with
errorbars at x = 0.
Here is an example, where I extrapolate the data points with errors stored in data
to
x → 0 using the fit function f(x) = a + b x + c x2. The
mean value and its errorbars for the extrapolation at x = 0 are the simply given
by the values of a and a_err, respectively.
data = "/tmp/gnuplot.data"
set print data
print "1 0.549846 0.450154\n2 4.9544 0.954397\n3 9.49577 0.49577\n4 15.3761 0.623939\n"
tmp = "/tmp/gnuplot.xtrapolated"
set print tmp
set fit errorvariables
f(x) = a + b*x + c*x**2
fit f(x) data u 1:2:3 yerr via a,b,c
set print tmp
print "\n\n0.0 ",a,a_err
p data u 1:2:3 w yerr lt 3 pt 1, f(x) lt 1 t '', tmp u 1:2:3 w yerr lt 1 pt 0 t ''
arXiv Logo
No, I will not give up the original arXiv logo! Ever needed a vector graphics version of the awesome arXiv logo? No? Anyways,
here is a the EPS and the PDF version of what I've cooked up. Feel free to use
and modify it!
Linux → MacOSX
Linux rocks! Nevertheless I spent too much time tinkering with the operating system, which made me rethink my priorities: configurability vs. operability. As a numerical physicist I spent most of my time in the shell, coding, writing TeX and preparing figures for papers, lectures or notes. Mac provides me the perfect blend of software and OS. I have compiled a list of steps for the initial setup of on this page
RSS-feed
PRL's newly accepted
With the help from Howto Create an RSS 2.0 Feed I've created a feed which post-processes the "Condensed Matter: Electronic Properties" section of PRL's newly accepted (not yet published) papers list. You can checkout and subscribe to the feed here.
Job sites
The are several job-sites our there. Maybe the most popular are by the APS and Physics today. For faculty job postings, shortlist rumors and faculty shuffle check out the CM & AMO Physics Rumor Mill, @cmamorumor (unfortunatley, this seems to be dead). If you know more, please leave a comment!
RSS-feed
cond-mat with authors
Although the arXiv provides a multitude of RSS-feeds, I don't like their format. In particular I'm missing the list of authors. So I've tinkered another RSS-feed using the arXiv API export function to fetch the latest publications and post-processes them into a valid RSS-feed which also includes the authors, here.
MathJax
Check out MathJax to use TeX formulas on your webpages, e.g., $$ \int d\varepsilon \frac{1}{{\rm e}^{(\varepsilon-\mu) / {\rm k} T}\,+ 1} $$ is JavaScript interpreted, easily editable TeX code without the need to use images.
TeX word count for Physical Review Letters
This little script uses the CTAN Perl-script texcount to count the number of word in a TeX file (omitting TeX-statements) and extractbb to extract the aspect ratio of all used figures in order to compute the number of words equivalent used by figures according to the standards of the Physical Review Letters. Usage: PRLtexcount ⟨tex-files⟩
#!/bin/bash
texcount=$(which texcount)
sum=0
for file in $@; do
words=$($texcount -1 -sum $file)
printf "%8d %s\n" $words $file
sum=$((sum+words))
for figure in $( \
grep -e '\includegraphics' $file | \
grep -v '%.*\includegraphics' | \
grep -o '{.*}' | \
sed 's/[\{,\}]//g' ); do
if [ -e $figure ]; then
figure=${figure:0:${#figure}-4}
fi
if [ -e $figure.eps ]; then
figure=$figure.eps
elif [ -e $figure.pdf ]; then
figure=$figure.pdf
elif [ -e $figure.png ]; then
figure=$figure.png
fi
words=$(extractbb -O $figure | grep '%%BoundingBox' | \
awk '{print int(150/(($4-$1)/($5-$2))+20)}')
printf "%8d %s\n" $words $figure
sum=$((sum+words))
done
done
echo "-------------------"
printf "%8d total\n" $sum
Following the guidelines for calculating length the word equivalent for figures can be simplified estimated from the figures's aspect ratio (width / height) using the formula [(150 / aspect ratio) + 20 words] for single-column figures, and {[300 / (0.5 * aspect ratio)] + 40 words} for double column figures. In the script above I have considered single-column figures only.
You can download the script here: PRLtexcount (make sure to put it in a directory in your $PATH and make it executable).
Histograms in the shell & gnuplot
This is a nice shell script (author unknown) which uses awk to produce a histogram from a data set. This can be especially useful in combination with gnuplot, e.g., for the original data set data.dat use the line
gnuplot> p "< histogram data.dat 100" u 1:2 w boxes
in gnuplot to plot the histogram of data.dat with 100 subdivisions (bins) of the whole data range. Unfortunately, the script's origin is lost - I apologize for not being able to crediting the original author. You can download the script here: histogram (make sure to put it in a directory in your $PATH and make it executable).
#!/bin/bash
FILE=$1 # input file
BINS=$2 # number of bins
if [ "$#" != "2" ] || [ ! -f $FILE ]; then
echo 'usage: histogram <file> <#bins>'
exit 1
fi
# determine border values
MIN=$(awk 'NR == 1 || $1 < min {line = $0; min = $1} END {print line}' $FILE)
MAX=$(awk 'NR == 1 || $1 > max {line = $0; max = $1} END {print line}' $FILE)
# use awk to bin data
awk -v m=$MIN -v M=$MAX -v b=$BINS 'BEGIN {
w = (M-m)/b # width of each bin
# set up arrays
for (i = 1 ; i <= b; ++i) {
n[i] = m+(i*w) # upper bound of bin
c[i] = n[i] - (w/2) # centre of bin
f[i] = 0 # frequency count
}
}
{
# bin the data
for (i = 1; i <= b; ++i)
if ($1 <= n[i]) {
++f[i]
break
}
}
END {
# print results to a file for plotting
for (i = 1; i <= b; ++i) {
if (f[i] > 0) {
print c[i],"\t", f[i]
}
else {
print c[i], 0
}
}
}' $FILE
Note, that gnuplot of course can create histograms intrinsically using the commands
gnuplot> binwidth=5 gnuplot> bin(x,width)=width*floor(x/width) gnuplot> p 'data.dat' u (bin($1,binwidth)):(1.0) smooth freq with boxes
YouTube Science
There is a huge number of small and large experiments, educational channels and the fair amount of woo on YouTube. Here are a few of my favorite physics related posts/channels:
An intruiging phenomenon from the Steve Mould's YouTube channel, that should remind you that classical mechanics can still be fascinating. UPDATE
This is an example by Tim Hutton of Stephan Rafler's SmoothLife - a generalization of Conway's "Game of Life" to the continuous domain. Details are presented in this paper. Here are more examples.
The The Royal Institution YouTube channel is a source of high quality science clips as well as longer presentations including the famous RI Christmas Lectures.
The YouTube channel MinutePhysics tackles questions, such as Why is it Dark at Night? in 60 seconds bites (sometimes in only 9.9999s) - and that well researched and presented.
Veritasium is a YouTube on popular scientific topics and everyday questions. Their explainations are fairly well researched, but more on the entertainment side.
Vsauce is collaborating infrequently with Veritasium and MinutePhysics is actually a collection of channels, which covers a broad selection of topics from to science and technology to fictional worlds.
Kurzgesagt (german for 'In a Nutshell') is a beautifully illustrated, fairly well researched channel covering soft and hard science topics, as well as the humanities.
3Blue1Brown aims to explain math and difficult problems by high quality animations and new perspectives.
Very well produced, explained and knowledgeable, Space Time explores the outer reaches of space, the craziness of astrophysics, the possibilities of SciFi.
Shellscript grepskip
Ever so often I need to grep a certain line from a file. The problem is, I do not need the line of the regular expression I can provide, but the n-th line after. For this purpose I wrote the little script grepskip.
#!/usr/bin/perl
if (@ARGV < 3)
{ die "usage: grepskip <expr> [expr] ... <nskip> <file>\n\n";
}
@expressions = ();
for ($i=0;$i<@ARGV-2;$i++)
{ push(@expressions,@ARGV[$i]);
}
$file = $ARGV[@ARGV-1];
$nskip = $ARGV[@ARGV-2];
open(FID,"<$file") || die "unable to open $file";
@line = <FID>;
close(FID);
for ($i=0;$i<@line;$i++)
{ foreach $exp (@expressions)
{ if ($line[$i] =~ m/.*$exp.*/)
{ print $line[$i+$nskip];
}
}
}
Here is an example, how it works. Let the file data.dat contain the lines:
0.0 0.0
0.283084 0.040688
0.364561 0.155806
1.0 0.0
0.998068 0.215512
0.812932 0.552596
0.0 1.0
0.884292 0.177753
0.764657 0.142434
To extract the second line after the pattern ' 0.0$', without knowing which lines match the pattern we can use
$ grepskip ' 0.0$' 2 data.dat
0.364561 0.155806
0.812932 0.552596
Setup your Raspberry Pi as an AirPrint server
Here are the step-by-step instructions on how to setup your
Raspberry Pi running
Raspbian (or any other debian system) as an AirPrint server. I am essentially
reproducing the HOWTOs found here
and here.
First of all, let's install cups (if not already installed):
$ sudo apt-get install cups
Add your user (default user name is pi) to the group lpadmin to allow it administrate CUPS.
$ sudo usermod -a -G lpadmin pi
We also need to tell CUPS to alias itself to any hostname as AirPrint communicates with CUPS with a different hostname than the machine-defined one. To do this, we edit the CUPS configuration file and add the directive ServerAlias * before the <Location /> block. (You might want to use vi and do it manually, instead).
$ sudo sed -i -e 's/<Location \/>/ServerAlias *\n<Location \/>/' /etc/cups/cupsd.conf
Connect (as user pi, not root!) to the CUPS web-interface using midori (or better iceweasel)
$ midori https://localhost:631
and setup the new printer. You'll need to authenticate with your systems username and password. Make sure you check 'Share This Printer' during the printer setup! Note, there is no need to set 'Share printers' in the Server Settings: section on CUPS's Administration page. With the aid of Timothy J. Fontaine's python script we can now generate avahi announcements that will make iOS think that our printer is AirPrint capable. For that you’ll need the Python CUPS module and the avahi daemon (again we'll do this in a root-shell):
$ sudo apt-get install python-cups avahi-daemon $ sudo /etc/init.d/avahi-daemon start
Now, we’ll download Tim’s Python script to generate the avahi announcements for all installed CUPS printers and restart the daemon
$ sudo mkdir /opt/airprint $ sudo cd /opt/airprint $ sudo wget -O airprint-generate.py --no-check-certificate \ https://raw.github.com/tjfontaine/airprint-generate/master/airprint-generate.py $ sudo chmod +x airprint-generate.py $ sudo ./airprint-generate.py -d /etc/avahi/services $ sudo /etc/init.d/avahi-daemon restart
And that's all there is to do. As long as your iOS device is in the same subnet you should now find the AirPrint representatives of your installed printers.
Calling C/C++ routines from Fortran
Here are two examples of frequently used system functions implemented in C and called from Fortran. While these might be available as intrinsic functions in you compiler of choice, their implementation would be specific to your compiler and not part of the Fortran standard and hence not portable, unless implemented in C. Note that the functions are listed twice, once with and once without the trailing underscore - this is to stay compatible with different Fortran compilers which implement different naming conventions.
The first example is a function to obtain the process ID (PID) of the program you are running (fgetpid.c).
#include <unistd.h>
void fgetpid_(int *id)
{
*id = (int)getpid();
}
void fgetpid(int *id)
{
*id = (int)getpid();
}
You can call the function from Fortran via:
INTEGER :: pid CALL fgetpid(pid) WRITE(*,*) pid
At the linking stage don't forget to also link to fgetpid.o! The second example is execution of system commands using C's system command (exec.c).
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void exec_(char *cmd, int *cmdLen, int *stat)
{
char *cmdcpy;
if(!(cmdcpy=(char*)malloc(*cmdLen+1)))
{ fprintf(stderr,"exec: malloc failed\n");
exit(1);
}
strncpy(cmdcpy,cmd,*cmdLen);
cmdcpy[*cmdLen]='\0';
*stat = system(cmdcpy);
free(cmdcpy);
return;
}
void exec(char *cmd, int *cmdLen, int *stat)
{
char *cmdcpy;
if(!(cmdcpy=(char*)malloc(*cmdLen+1)))
{ fprintf(stderr,"exec: malloc failed\n");
exit(1);
}
strncpy(cmdcpy,cmd,*cmdLen);
cmdcpy[*cmdLen]='\0';
*stat = system(cmdcpy);
free(cmdcpy);
return;
}
Execute system commands in Fortran via:
CHARACTER(len=128) :: cmd INTEGER :: ierr cmd = 'touch test.dat' CALL exec(trim(cmd),len_trim(cmd),ierr)
Dudeney dissection
A swing-hinged dissection is a kind of geometric dissection in which all of the pieces are connected into a chain by "hinged" points, such that the rearrangement from one figure to another can be carried out by swinging the chain continuously, without severing any of the connections.
The puzzle known as “Dudeney’s dissection” or the “haberdasher’s problem” considers the transformation from an equilateral triangle to a square.
More than 122 years after it was first proposed, Kamata and colleagues have finally proved in December 2024 that a solution with fewer pieces is impossible, i.e., four-pieces are optimal.
More details of the story can be found at scientificamerican.com.
While you can find many constructions to create your own version, they mostly only approximate the correct solution. It turns out that the sections x and y are not equal to 1/4, as often portrait in geometric constructions. They are close, though - here is a Mathematica notebook to convince yourself!


















