I am a physics Ph.D. student at Columbia University. I work with Szabolcs and Zsuzsa Marka on gravitational wave astronomy (with a particular focus on multimessenger astronomy) for LIGO. You can see the full list of LIGO publications here as well as our detection papers (organized by event) here. My GitHub profile page contains some of my programming work (a lot of it is in private repos; sorry 😔).
I enjoy programming in
bash (Bourne Again SHell) and
this are wonderful
resources for learning
is a good guide to `bash` built-in string manipulation.
here to learn how to
If you are using a Mac, you should give
iTerm a try, not because Mac's
default terminal is unacceptable, but because iTerm has a couple of nice
features (like split panes and excellent
that are inexplicably lacking from terminal.
On the topic of terminal tools, you should use
managing remote sessions that you want to resume later. It's great for
working on long-running remote projects across multiple devices or when
worrying about spotty connection quality. It even has mouse support in
Windows 10, making iTerm2 less of a killer app for Mac remote work. (On
that topic, you should use Windows Subsystem for Linux if you are
running Windows 10 in order to get a fairly uniform UNIX environment
across your computing environments. LIGO is UNIX geared, so even if you
prefer Windows, it is worth immersing yourself in UNIX-style
environments to avoid headaches).
Here is a good guide to configuring tmux.
c2 is a treasure.
vim is a great, lightweight, ubiquitous text editor. You can
go through a quick and very informative tutorial on any system that has
it installed by running
vimtutor at the command line.
a great guide to using
gzip for common tasks
Some useful advice for writing robust shell scripts
DigitalOcean provides great, cheap, fast, modular server hosting. And they
have great beginner-friendly tutorials on subjects like
setting up passwordless login using SSH keys
rsync to keep files synced between computers
setting up a Flask webapp on top of an Apache server
Does XQuartz launch whenever you fire up
vim, causing slow startup?
vim feels out its environment on startup by checking variables,
$DISPLAY, whose value is something like
Somehow that check causes XQuartz to launch (even though
vimwon't use it). My solution is to set
vim-related commands by aliasing them in
~/.bash_profile(which Mac uses instead of ~/.bashrc):
You can take a similar approach to avoid the
# prevent xquartz from opening alias view='DISPLAY="" view' alias vi='DISPLAY="" vi' alias vim='DISPLAY="" vim' alias vimdiff='DISPLAY="" vimdiff' alias vimtutor='DISPLAY="" vimtutor'
error when editing your crontab with vim. Just add:
crontab: temp file must be edited in place
alias crontab="VIM_CRONTAB=true crontab"
bashdotfile, then edit your
.vimrcfile to include:
(copied wholesale from here .
:if $VIM_CRONTAB == "true" :set nobackup :set nowritebackup :endif
If you are on Columbia's campus and need to print a poster, go with Copy Experts. They are the cheapest and best printers with fast turnaround, and they do materials other than paper (i.e. vinyl and fabric). If you have more time on your hands, try PhD Posters; their prices are the best.
Getting started with LIGO is somewhat difficult due to the scattered nature of documentation. Below are some useful links that are very easy to forget. They all require LIGO credentials.
ldas-pcdev1et. al.)? Need to run Condor jobs? Looking for where to find
ligo-proxy-init, and the like? Go to the LDAS Data Grid page and download their mac installer. If all you need is SSH access, you can also use
ssh email@example.com a pinch (with the side benefit of getting to view the names of the available development nodes through the interactive prompt) without having to have any special software installed. Just replace "albert.einstein" with your own username (duh) and use your LIGO password.
curlrequest to GraceDB? Go here for robot certificate signup information. The form is available here.
gsissh? Just use the
ControlPersist(documented in this great DigitalOcean guide.
dcc-getfor fetching stuff via command line from protected web servers (specifically DCC in the latter instance). This stuff is all available on the Command Line LIGO Authentication LIGO Wiki Page.
git clone url) with
svn checkout --username albert.einstein url, where, of course, the username is your own and the URL is that of the repository you want to work with. Be prepared for a very big disk footprint and a very long wait; some of these repositories are huge. If you want a more in-depth description of SVN (tailored to Git users), check out Git - SVN Crash Course .
It is also worth knowing that there is a new type of frame in addition
to the standard ones, which I believe is dedicated to h(t):
This is my pup, Battle, shortly before we got him:
He is an excellent pup with a rapid growth rate, indicating good parenting. Battle shortly after we got him:
He is growing very quickly, at a rate of approx. 70%/3 weeks. Following his second vet checkup:
bash has idiosyncracies but, unlike
other more popular scripting languages, it has poetry and humor. Many
people are quite confused by this and mistake e.g. their own fear of
regular expressions for a sign that
sed is hard to use. The
UNIX philosophy is similarly all-right with me. Simple but powerful is
Many people think they need IDEs; this is
false. The command line is an IDE.
grep et al. are the best editing tools around. And the
command line is extensible.
At the other end of the self-consistency spectrum is
whose creators' relentless persuit of perfection
has wrought a terse, fast, clean, and—like
flexible language. In
julia, everything makes sense.
Everything is beautiful. There is more than one way to do things because
we are all adults.
I have not learned
perl, but the fact that "pythonistas"
seem to dislike it suggests that it is a very good language.
python is a good language. For many tasks it is the most
reasonable choice. Trying to argue that it is always
the only scripting language to use, or that other scripting languages
are foul-smelling, is like insisting that you are only
capable of eating chicken nuggets.
Compare The Tao of Programming:
"Technique?" said the programmer, turning from his terminal, "What I follow is Tao -- beyond all techniques! When I first began to program, I would see before me the whole problem in one mass. After three years, I no longer saw this mass. Instead, I used subroutines. But now I see nothing. My whole being exists in a formless void. My senses are idle. My spirit, free to work without a plan, follows its own instinct. In short, my program writes itself. True, sometimes there are difficult problems. I see them coming, I slow down, I watch silently. Then I change a single line of code and the difficulties vanish like puffs of idle smoke. I then compile the program. I sit still and let the joy of the work fill my being. I close my eyes for a moment and then log off."
to The Zen of Python:
There should be one-- and preferably only one --obvious way to do it.
What a sad way to see the world!
Disclaimer: I enjoy
python itself. I am only complaining
This image is original content made to express my feelings on this matter. As the copyright holder, I do NOT grant you the right to print this image UNLESS you pay me $5 in cash. Ken Rockwell takes this approach and that man has really made something for himself.
In my defense, I would be writing more
bash scripts if not
for the fact that all of my colleagues hate it.
has already done a great job enumerating some of the many inherent
pitfalls of Java as a language, implementation, and set of conventions.
Steve Yegge also had a
about object obsession (at the expense of functions), which of
course is a big part of why "good"
java code often makes
the language look like a spiritual successor to