### Problems and Solutions

When I encounter a frustrating computer problem for which internet help is hard to find, I will try to put the solution here.

ThinkPad beeps The people at IBM/Lenovo, in their infinite wisdom, decided that the ThinkPad laptop should beep loudly at every possible moment. Not a normal windows alert, but rather some ridiculous system beep that is always much louder than your actual volume. We're not living in the 80s folks, it's time to phase out this computing appendage. Anywho, this blog shows you how to get rid of the keyboard beep.

The Greek letter \Xi is showing up as an i in LaTeX! Annoying but true, this happened to me recently. Didn't find anything online. Looks like this may not be a very common problem, as it didn't seem to occur with any other Greek letters and only occurred for the capital \Xi, not the lowercase \xi. It turned out the problem only occurred because my \Xi was immediately proceeded by two non-breaking spaces, as in:
~~\Xi
To get rid of the problem I simply inserted a real space between the non-breaking spaces and my Xi:
~~ \Xi
I was unable to find the actual reason for this problem.

Creating an Eclipse Update Site with Source Code For the full details on this problem and its solution, please see this blog post.

Select/Show/Reveal Java code in the Eclipse Java Editor This one was really frustrating! Here's what I wanted to do: I wrote my own Eclipse plugin and it deals with IJavaElements and ASTNodes, that is, classes from the JDT framework. I had my own tree view, and I wanted to make it so that if a user double-clicked an item in the TreeViewer then that Java element would show up in the Java editor. Turns out all of this good stuff is in the org.eclipse.jdt.ui.JavaUI class. Here's how I did it:
IJavaElement element_which_was_selected; JavaUI.openInEditor(element_which_was_selected, true, true);

The first true means, activate the editor, and the second true means "reveal" this element. In other words, take me to the line where it is located an highlight it. Seems easy in hindsight!

Cygwin/Ocaml/X11: ld: cannot find -lX11 I was attempting to use the Graphics module in Ocaml to create some simple graphs. I am using Cygwin, and I have X11 installed, but apparently not the X11 development package, as I found out later. I followed their instructions to build a new top-level with the graphics dynamically linked library built in. To do this, you type,
ocamlmktop -o mytop graphics.cma

Unfortunately, this gave me the following error:
ld: cannot find -lX11

The entire message was a bit longer because it gave me the full path of my linker. At this point, I didn't know where the error was; was this a general unix problem? A cygwin problem? Or a problem with my Ocaml setup. As it turned out, while I had X11, I did not have the X11 development package in cygwin! The absence of this package was verified by examining the /usr/X11R6/lib directory, and seeing the absence of any file like, libX11.so. To fix the problem, all I had to do was go to the cygwin setup application, look through the list of packages to find one named libX11-devel, which was inside the X11 category, and installing it. After this, everything worked perfectly.

LaTeX: Some Font Shapre Were Unavailable During a paper I wrote, there was a section where I had curly braces ('{' and '}') inside of a the \texttt tag. Unfortunately, and for these characters only, the curly braces were not printing in a monospace font. Moreover, when running LaTeX, I got two errors:
LaTeX Font Warning: Font shape OMS/cmtt/m/n' undefined
(Font) for symbol `textbraceleft' on input line 743.
and
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
Didn't know what to do! Unfortunately, the "some fonts shapes not available" message can occur for many reasons. In my case, adding the additional directive,
\usepackage[T1]{fontenc}
Fixed all my problems. Hooray!

Eclipse and 64bit Linux I have run into this problem twice now and figured I'd better write it down before I forget again. The combination of 64 bit Linux, 64 bit Java and 64 bit Eclipse can get pretty hairy. Often times I have had them not work together, and Eclipse with crash on start-up. This is usually accompagnied by strange error messages in my log file, for example,
!ENTRY org.eclipse.osgi 4 0 2007-09-26 14:29:45.075 !MESSAGE Shutdown error !STACK 1 java.lang.InternalError at java.util.zip.Inflater.end(Native Method) at java.util.zip.Inflater.end(Inflater.java:310) at java.util.zip.ZipFile.close(ZipFile.java:488)

etc., with tons of ugly other stuff. Here's what has worked for me: If you have 64 bit Linux, use 64 bit Eclipse and the 64 bit Java JRE. (Note, the first link for downloading Eclipse is not for the 64 bit version.) Then, play around by trying out different versions of the 64 bit Java JRE & Eclipse until the whole thing works. This sounds strange, but almost always having the newest one of each will fix your problem.

MikTeX Include Directory (Thanks to Donna for this one!) Here's how you get MikTeX to look in a particular directory for the files:
Instead of using TEXINPUTS, MikTeX uses the command line option "-include-directory=foo" to prepend foo to the search path.

LaTeX: Using the \Box and \Diamond Symbols I needed the Box and Diamond symbols for use in typsetting some work related to modal logic. Most of the online symbol lists that you find say to use:

\Box and \Diamond

But I was getting the following error:

LaTeX Error: Command \Diamond not provided in base LaTeX2e.

What they don't tell you, but what I finally found in the "List of every LaTeX symbol ever, even ones you would never, ever use" is that for some of the basic symbols (i.e. ones not in AMS or stmaryrd) you still have to include an extra package. Put this at the top of your document, and everything will work:

\usepackage{latexsym}

JUnit Within Ant Within Eclipse I've been trying to run an Ant build from within Eclipse that also runs some JUnit tests automatically. This is a common problem, but some of the solutions that I found weren't working. Anyway, this blogger had a solution that worked.

Emacs: Get Rid of DOS Newlines Since UNIX and Windows both have different ways of representing a newline, I find that sometimes my scripts edited on a Windows machine will not run on a UNIX machine because there is an additional character on each line. Long story short, if UNIX complains about '^M' you are in all likelyhood having the exact same problem. Here is how I get rid of it using emacs. I admit, this is not the fastest way to do it:

C-x RET c unix RET C-x C-f foobar.txt

This changes emacs' mode so that when it opens up files, it will open them in UNIX mode. Then, the sequence of commands after the second return just opens up your file. You can then see the '^M' characters. I usually just delete them by hand, but you can also do a regexp replace. (To search for this character, (after you are in search mode) you have to type ^Q ^M The first command puts you in quote mode, meaning that the next thing you type will be exactly what it searches for.

Unix: Add DIR to PATH I can never remember how to do this. You have two choices depending on your shell. (Well okay, there are more choices, but who uses those other shells?)

Bash: PATH="$PATH:/new_path_dir"; export PATH Tcsh: set path = ($path /new_path_dir )

Windows && Emacs && ISpell: I had emacs for windows, and I wanted a spellchecker. It took me a short while to find which files to install but I settled on Ispell, and this prepackaged Windows version: http://www.luziusschneider.com/Speller/ISpEnFrGe.exe. After all that, I had to add ispell to my PATH in windows. Now I encountered my first tricky problem. When I ran Ispell from emacs, it would tell me that the dictionary at 'C:/usr/local/english.hash' could not be found. No kidding, that's not where my dictionary is. However, just selecting the 'Change Deafult Dictionary' option would not fix my problem. For some reason, even when I typed in the full path of my english.hash file, it would not accept my input. Finally I found a solution: In my '.emacs' file (Which goes in whatever directory the HOME variable points to.) I had to put the following line:

(setq ispell-extra-args
'("-dC:/ispell/english/english.hash"))

This tells emacs that when it runs the ispell.exe executable, it has to run it with the given command line options. That particular option directs it towards the default dictionary file to use. Kind of bogus, but I just wanted to be able to spellcheck right away!

Update! Wow, I definitely don't do it this way anymore. Currently I use cygwin as my command-line. I tell the Cygwin package manager to install aspell, the ispell replacement, and then you just have to tell Emacs that ispell should be aspell, by putting the following command in your .emacs:

(setq-default ispell-program-name "aspell")

ML Comments A comment in ML has the following form:

(* Here is a comment
and here is the end *)

This information was surprisingly difficult to find on the web.