“The right tool for the job.” That phrase pretty much sums it up. When you have the right tools available, whatever you’re trying to accomplish becomes easy. When I started research for my Master’s thesis last summer, I spent a few weeks searching around for the best tools I could find. Now that I have been using them for a while, I thought I would post a list here. I should note that I do a lot (actually all) of my work on linux machines. But, most of these programs are cross platform. If you have any favorite programs that I don’t have listed here, please let me know.
Paper organization
First of all, especially if you’re just starting out, tools to help you organize your papers are invaluable. Use one! They can help you keep track of what you read and keep your papers and notes together in one place.
- Mendeley Desktop – (Cross platform) I have a feeling this startup is going to make a huge impact on the academic world. I’m not too excited about the social networking aspects of their product, but the desktop application for organizing your paper collection is awesome. I also like how their developers are extremely interactive. I complained about a missing feature on twitter and the developer sent me an email with a fix within a day!
- Papers – (Mac only) This is a great program for organizing papers. If you have a Mac, download this and check it out. Personally I don’t use it, but that’s just because I don’t use Mac OSX.
- gPapers – (Linux, Windows) This is essentially a clone of Papers. I like it because it’s open source (easy to change) and it’s pretty nice. For a while I played around with it, but I ended up using Mendeley.
- EndNote – (Windows, Mac) I hate this program. Thomson Reuters owns the Web of Science database that indexes almost every academic paper ever written. Yet, for some reason, they haven’t integrated that with EndNote. It has a lot of potential, but it’s clunky to use and annoying as hell. I only mention it because a lot of people use this to organize their papers. Feel free to try it, but I’d recommend against it.
Writing
- LaTeX – (Cross platform) seriously, use it! It is so much easier to use than Word and it produces absolutely beautiful documents. Plus, it’s a must if you are doing a lot of math equations.
- latex-makefile – A great makefile for LaTeX documents.
- Vim – I love vim. More useful for coding than writing documents, but I still use it.
- Gummi – (Linux only) LaTeX editor. I like this because it automatically updates the pdf preview as you type. Plus, it’s open source, being actively developed, and the developer encourages contributions.
- TeXworks – (Cross platform) LaTeX editor. It’s useful. Doesn’t do auto-complete.
- Texmaker – (Cross platform) LaTeX editor. Lots of features. Too many for me.
Presentations
- LaTeX Beamer Class – (Cross platform) This makes some beautiful presentations. It’s admittedly not as easy as a visual editor, but the resulting quality is worth it (especially if you have a lot of equations) .
- OpenOffice Impress – (Cross platform) Normally I very much dislike the OpenOffice products, but I think they did a pretty decent job with their “powerpoint clone.” I use it for quick, short presentations.
- Powerpoint – (Windows, Mac) almost everyone knows about Powerpoint. 2007 has a lot of nifty features that can make some pretty presentations, but I don’t really like that much.
Figures
- Inkscape (Cross platform) – my favorite program for diagrams, drawings, etc.
- xfig (Linux) – vector graphics software. I find it to be very slow to use, but apparently it’s very useful if you learn the keyboard shortcuts.
- PGF and TikZ – TeX macro package that makes very pretty LaTeX graphics. Steep learning curve.
- GLE (Cross platform) – I haven’t actually used this yet, but it was recommended to me by a friend.
- Matlab (Cross platform) – I use Matlab for making plots. I think they’re kind of ugly though.
- Gnuplot – I sometimes use gnuplot for making plots. I think they’re very ugly.
- Dia (Linux) – Sort of like Visio. I’m not a huge fan of it, but I do use it on occasion. It can export directly to svg/eps/pdf which Visio can not do. Although, apparently Visio can be manipulated through some plugins and post-processing save as an eps (plugin to save as pdf->ps->eps).
- Graphiz (Cross platform) – Graph visualization software. Makes pretty graphs.
I’ve been using xbindkeys for a few years now to create keyboard shortcuts on my computer. It’s super useful, and a quite easy way to get the multimedia keys on my keyboard to do what I want. A quick tutorial on xbindkeys:
First, install it
sudo apt-get install xbindkeys
Then, run the following in a console to grab input for a specific key press combination.
xbindkeys -mk
Select the window that pops up, type the key, and on the console you should see some output something like this:
"(Scheme function)"
m:0x10 + c:98
Mod2 + Up
Copy and paste that into your .xbindkeysrc and change “(Scheme function)” to “foo” where foo is the command you would like executed. Quit that, run xbindkeys, and whenever you type that key combination, foo will be executed.
So, a few months ago I bought a pair of 2.1 speakers for my computer. In the past I’ve only used headphones, so being able to lie in bed and watch movies/listen to music was very nice. However, I tend to work late into the night and my room mates don’t exactly appreciate my loud music. So, I still use headphones occasionally. The problem is I don’t want to have to unplug the speakers and plug them back in every time I want to use headphones. Luckily, my sound card has multiple line outs. So, a combination of amixer and xbindkeys allows me to simply hit a button on my keyboard to switch between the headphones and the speakers.
Here’s the snippet of my .xbindkeysrc that does this work:
# favorites button - toggle headphones/speakers
"amixer set Surround toggle; amixer set Front toggle"
m:0x10 + c:230
Mod2 + NoSymbol
I recently bought a touch screen off ebay. I hooked it up to my laptop and tested it to make sure it works. It does (only one dead pixel)! The next step was to hook it up to my desktop in a dual head configuration. This wasn’t difficult to do by any means, but it was a little bit tricky finding the option to set the screen order in TwinView. I have two monitors (one LCD w/ DVI and the touch screen TFT with VGA). By default, the Nvidia driver sets any VGA connection to screen 0. With a bit of digging, I found the “TwinViewXineramaInfoOrder” option from Appendix D of the Nvidia Linux Driver Readme/Install Guide:
Option "TwinViewXineramaInfoOrder" "string"
- When the NVIDIA X driver provides TwinViewXineramaInfo (see the NoTwinViewXineramaInfo X config option), it by default reports the currently enabled display devices in the order “CRT, DFP, TV”. The TwinViewXineramaInfoOrder X config option can be used to override this order.
The option string is a comma-separated list of display device names. The display device names can either be general (e.g, “CRT”, which identifies all CRTs), or specific (e.g., “CRT-1″, which identifies a particular CRT). Not all display devices need to be identified in the option string; display devices that are not listed will be implicitly appended to the end of the list, in their default order.
Note that TwinViewXineramaInfoOrder tracks all display devices that could possibly be connected to the GPU, not just the ones that are currently enabled. When reporting the Xinerama information, the NVIDIA X driver walks through the display devices in the order specified, only reporting enabled display devices.
Examples:
“DFP”
“TV, DFP”
“DFP-1, DFP-0, TV, CRT”
In the first example, any enabled DFPs would be reported first (any enabled CRTs or TVs would be reported afterwards). In the second example, any enabled TVs would be reported first, then any enabled DFPs (any enabled CRTs would be reported last). In the last example, if DFP-1 were enabled, it would be reported first, then DFP-0, then any enabled TVs, and then any enabled CRTs; finally, any other enabled DFPs would be reported.
Default: “CRT, DFP, TV”
So, with that, it’s pretty easy to do. I set it to “DFP” and it now works great! For reference, here’s the device section of my /ect/X11/xorg.conf:
Section "Device"
Identifier "Configured Video Device"
Driver "nvidia"
BusID "PCI:1:0:0"
Option "RenderAccel"
Option "TwinView"
Option "TwinViewOrientation" "LeftOf"
Option "TwinViewXineramaInfoOrder" "DFP"
EndSection
So I’ve had a problem for a while and haven’t bothered looking into it until now. When a web page loads flash with sound, it either: a) doesn’t play if mpd is playing or b) prevents mpd from playing sound unless I close firefox. Obviously this was an extremely irritating behavior. I thought it was something to do with flash using the wrong sound driver, but it was right.
I finally actually looked into it. The fix is quite simple and painless. I had to configure mpd to use dmix (the alsa software mixer). All of the instructions are clearly laid out on the mpd wiki. Enjoy! (NOTE: For those unfamiliar with mpd it is music player daemon, my music player of choice. Check out their wiki for more information).
As an added bonus, I just learned RIT has a debian mirror: http://mirror.rit.edu! Thanks to the RITLUG, I can now fetch my upgrades much, much quicker.
For my Digital System Design course I was given the option to do the standard labs (about 3 labs and 2 projects: a vending machine controller and a BIST) or implement my own project of similar complexity. I decided to go with latter as it sounded like a good learning experience. So, I wrote up my proposal and got my FPGA board: a Digilent BASYS. For my project, I decided to implement a clone of the popular 80’s Simon game by Matel.
I wanted to be able to work on this project from home, so I went ahead and downloaded Xilinx ISE Webpack from http://www.xilinx.com. I run Linux (specifically Debian) as my primary OS, so I installed the Linux version of ISE. The install certainly could have gone smoother (it seems to be targeted more towards RedHat), but thanks to a bit of research I was able to get it running smoothly. Unfortunately, Digilent (the maker of the development board I’m using) only has a Windows version of their software for programming the FPGA. I thought I was out of luck and would have to develop on my machine and then use a Windows machine to actually program the FPGA. But, thanks to VMWare, that’s not a problem.
The only thing that I have really missed since I completely switched over to Linux about a year ago is Microsoft Office. Open Office just doesn’t do it for me 100% (especially given the amount of .doc and .docx files I get from professors here at RIT). So, I run VMWare Server with XP as a guest operating system to address that problem. This way, I don’t have to reboot to open a word document or write a paper. This is also useful as it allows me to run a bunch of other Windows-only applications without the any real hassle.
That’s definitely spiffy, but what’s even cooler is the ability to share physical hardware between the host and guest OS. I can map a USB controller to my guest OS that will give me the ability to use USB devices in my VM just as I would if I were running WIndows nativelly on the machine. Long story short – this nifty feature allows me to install Digilent’s programming software in Windows and program the FPGA without rebooting.