# Useful Tools and How to Get Them This is a list of F/OSS tools that have proved useful to me, both in academic and coding work. ## Python Python is an excellent, easy-to-use programming languages with a wealth of standard and third-party libraries. Get it and learn it! Python can be obtained from: ## A General Purpose Editor Even if you just plan to edit text files it is really worth investing the time and effort to learn how to use a really good text editor. If possible this editor should be command-line oriented so that the skills you learn are still usable in a command-line only environment (for example when you log in to a remote machine). To this end there are two main options: * Vim * Emacs These have both been in very active development for over 2 decades and this shows in their depth of functionality and power. Those only familiar with GUI WYSIWYG editors (such as Word or OpenOffice) may find that they take a little getting used to but as long as you are prepared to take a look at a basic tutorial you can be up and running in half-an-hour. They will repay your investment over a life-time. My recommendation is to use Vim but I'm biased! It is important to note that both come with classic GUI wrappers so that those who prefer a windowing environment can still use them in that way. ## LaTeX LaTeX is a well-known document format which is very widespread for high quality print-ready output, especially in academia. In addition you still have plain-text human-editable sources which is allows for easy integration with versioning tools and no need to worry much about obsolescence. To work with LaTeX you will need to: 1. Install the LaTeX system itself. 2. Get an editor to help you with editing and previewing your LaTeX documents. ### The LaTeX System Itself Installing the LaTeX system itself usually involves getting a preprepared distribution such as teTeX (unix) of MikTeX (windows). Do a quick online search for LaTeX and your OS should tell you what you need to do (note: most distribution are quite large ~700MB and so may take a while to download). ### An Editor Editors such as Vim or Emacs have good support for LaTeX, however they will leave 'building' of the LaTeX files into PDFs up to you. Thus, if you want a complete editing solution, along with additional traditional GUI-like support it is recommended that you try out a GUI-based package such as [LyX][lyx] (on a mac [TeXShop][texshop] might be a better bet). [lyx]: http://www.lyx.org/ [texshop]: http://www.uoregon.edu/~koch/texshop/ ## Versioning Tools Coding has a long history of using versioning tools to facilitate collaboration. These benefits extend to collaborative work on anything else. Furthermore, even if sole editor, the support for logging changes, branching, merging and preserving file histories are invaluable. At present the recommended tools to use are either: * Subversion (semi-centralized) * Mercurial (distributed) Subversion is probably more wide-spread and if you are just getting started (and someone else is maintaining the repository) is probably the simplest to use. To get started: 1. Install a subversion client. For example: * The standard (command-line) client distributed on the main subversion site. * (Windows) TortoiseSvn (just search to find it). 2. Using this client check out the repository url (this will be given to you by an existing member of the project). [subversion]: http://subversion.tigris.org/