21 September 2011

Fully integrated LaTeX in Macvim

I've been less than pleased with TeXShop on Lion. I do most of my editing in Vim using Vim-LaTeX, but I compile with TeXShop. Most importantly, I sometimes use SyncTeX to jump between my compiled document and source.

To switch away from TeXShop, I want both an integrated compiler and an external editor with SyncTeX. Skim with this configuration fit the bill. Yet Vim-LaTeX won't play nicely with my dissertation, which uses a file for each chapter and the TeXShop convention of

% !TEX root = ../thesis.tex

to denote the true TeX file. The solution involves this feature of Vim-LaTeX, and the following function I wrote:

" Look for main file by looking in the first 20 lines, same as TeXShop, for:
" % !TEX root = [filename].tex
" Author: Seth R. Johnson
let g:Tex_MainFileExpression = 'SRJMainFile(modifier)'

function! SRJMainFile(fmod)
    let s:Tex_Match = '\v^\s*\%\s+!TEX\s+root\s+\=\s+\zs(.*\.tex)\ze\s*$'
    let s:lnum = 1
    while s:lnum < 20
        let s:basefile = matchstr( getline(s:lnum), s:Tex_Match)
        if !empty(s:basefile)
            break
        endif
        let s:lnum += 1
    endwhile

    if !empty(s:basefile)
        let s:origdir = fnameescape(getcwd())
        let s:newdir = fnameescape(expand('%:p:h'))
        exec 'cd'.s:newdir
        let s:basefile = fnamemodify(s:basefile, a:fmod) 
        exec 'cd'.s:origdir
    else
        let s:basefile = expand('%'.a:fmod)
    endif

    return s:basefile
endfunction

" Command-R will write, open for viewing, compile, go to the end of the quickfix, hide the
" preview, switch back to main window
map <D-r> :w<cr><leader>lv<leader>llG<C-w>p:q<cr>
imap <D-r> <ESC><D-r>
" Inverse search
nnoremap <D-S-LeftMouse> <leader>ls

Now typing \ll in my individual chapter files will compile the true thesis. Typing \lv will open the thesis in Skim, \ls will jump from the TeX source to the corresponding output line, and command-shift-clicking in Skim will cause MacVim to jump to the appropriate source line. Command-R is a shortcut to compile and view.

UPDATE 2011/9/25: I've uploaded my vim scripts to GitHub.

UPDATE 2011/9/27: Modify the "reverse lookup" in Skim to be --remote-silent +":silent %line" "%file" to avoid the obnoxious Press ENTER to continue prompt in Vim.

15 September 2011

Making a "lite" git repository

I've had my research in a git repository for more than a year and a half. Because most of my computational experiments are small (i.e., single processor rather than supercluster), I've stored a number of results in the repository rather than in a separate directory. Well, 18 months and many obsolete and regenerated results later, my repository is rather bloated. Preferring to only modify my thesis, figures, and related files on my new MacBook Air, I chose to create a new "thesis" repository.

To preserve the history of modifications I'd already performed, git filter-branch is the way to go. (Stack Overflow was helpful in finding out the details.) The only sticking point was in getting the large HDF5 files to be removed in garbage collection (git gc): removing .git/refs/original and expiring the reflog.

#!/bin/bash

git clone --no-hardlinks /Users/seth/_research thesis
cd thesis
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch \
   research_* _testproblems* _python* meeting_notes* *.h5 *.silo \
   .gitignore .gitxattr_json anisotropic_ss ideas_include technotes" \
   --prune-empty -- --all
git remote rm origin
rm -rf .git/refs/original/
git reflog expire --expire=0 --all
git gc --prune=now

Anyhow, I now have a nice, clean, 20MB repository suitable for putting on an ultraportable and for later uploading to GitHub/elsewhere to serve mankind.

14 September 2011

Vim and TeX keywords

After updating my vim installation, my command set iskeyword+=: in ~/.vim/after/ftplugin/tex.vim stopped functioning. (This was recommended by the Vim-LaTeX project.) My auto-completion for chapter references chap:intro and equations eq:blahBlah was broken because the colon was no longer interpreted as a command character.

To make a long story short, I found the :verbose set isk command which told me the last file to set iskeyword:

/Applications/MacVim.app/Contents/Resources/vim/runtime/syntax/tex.vim

Somehow, that syntax file is hard-wired to reset iskeyword. The solution is to add the following line or equivalent:

let g:tex_isk='48-57,a-z,A-Z,192-255,:'

07 June 2011

LaTeX ANS transaction update

Those who are in the nuclear engineering business might be interested to know that I've updated the LaTeX class for ANS transaction summaries. It is now more compliant with the ANS-specified guidelines, and it uses a much better version of the Times math font.

05 June 2011

Ah, Python

Another reason to write regression tests for C++ code in Python: integration with matplotlib. Here, I test my sampling algorithms with a Q-Q plot:

Yes, this at one point saved me from an implementation snafu.

03 May 2011

Irony

A hidden timing method (which I don't even use) in one of Trilinos' solvers ends up incurring an O(n) performance penalty, where n is the number of instantiations of the solver. By the end of my simulations this actually dominates my wall time.

30 April 2011

Silo now available on MacPorts

Scientific computing developers rejoice. If you want your code to output files readable by LLNL's VisIT, there's a good chance you use the Silo library to do it. Well, if you use MacPorts, you can now download and compile silo without hassle on a Mac. I submitted a port file for Silo this morning, and the great volunteers at MacPorts had it cleaned up and in their repository by the end of the day. Now all you need to do is sudo port selfupdate && sudo port install silo, and you're good to go.

23 April 2011

Research code is now open sourced

Well, after talking with a group of nuclear engineers who are interested in open sourcing their codes, and after being persuaded by my friend Mike that it was justifiable to return some of my tools to the taxpayers who've sponsored my education, I have decided to open up my research code. The project is called PyTRT, and it's available at GitHub under a Simplified BSD license. Documentation for PyTRT is available, but it is probably overwhelming. We'll see if this ever amounts to anything.

18 April 2011

Guest post: save on batteries with the Apple external track pad

Apple Magic Trackpad: Run It For "Free" and Do the Environment, and Your Wallet, a Favor.

Most of my AA powered toys and appliances demand a battery change before they are truly depleted. I can measure that there is residual charge and I can't bear to toss them in the trash so they just accumulate in my closet (not a good idea). Behold the Apple Magic Trackpad. It will use the old batteries down to their last Joule-drop and I can dispose of them with a clear conscience.

New batteries, equivalent to what Apple includes, last me about eight weeks. Before they quit I get a battery warning and two weeks later they totally die. Nicely, one can go to the System Preferences>Trackpad and at the bottom left and read "Trackpad battery level" in percent. (If the trackpad batteries are completely dead you won't see this as there is no signal that the Trackpad even exists.) Once the batteries are dead replace them with used batteries and note the starting level. I have had previously used batteries read as high as 95% potency. These used batteries won't last as long as new ones but it is not a chore to keep them handy and replace them a bit more often.

A few sensible words of caution. Use only two of the same kind of batteries (don't mix lithium and alkaline). Check them to make sure they are not swollen, misshapen or leaking (leaking chemicals can be poisonous or corrosive and will mess up your battery compartment). If possible use two old batteries from the same source, starting off at the same charge is better. Don't put them in backwards. A good way to remember is the flat side is negative and goes up against the battery door which has slot in it that looks remarkably like a "negative" sign (another intuitive apple UI). I keep one of the dimes I saved to open the battery compartment. Oh, and don't over tighten it, just a slight snug will do.

Finally, if you ruin your nice Trackpad, it is not my fault. I haven't saved so many dimes that I can send you and your attorney on a South Sea vacation.

—Doug Johnson

04 April 2011

Red hell and death and taxes

Well, I broke down and spent the morning investigating my tax situation, which was rather confused at the end of last year. After some burrowing, I found that TurboTax was surprisingly right after all. Scholarships and fellowships that are reported on Form 1098-T rather than Form W-2 count neither for "earned income credit" (on Schedule M) nor for IRA purposes.

As regards Schedule M, which covered 2009's "Making Work Pay" credit, the "Earned Income Worksheet" line 4a specifically subtracts scholarship income: so people who rely solely on fellowships for their income are not eligible for earned income credits.

Finding out eligibility for Roth IRAs took considerably more digging, because on some portions of the 1040A instruction sheet, it says that scholarships count as "earned income." If you look at Publication 590, it says under "What is compensation?" that "Scholarship and fellowship payments are compensation for IRA purposes only if shown in box 1 of Form W-2." You can only contribute to an IRA if you have a non-zero "compensation."

So there you have it. This is not official tax advice, but you should look at the linked forms and draw the same conclusions that both TurboTax and I did. I'm glad the situation is clearer now, though of course I wish our tax system weren't such a mess.