EECS E6870: Speech Recognition
January 20, 2016
Introduction
We will be using Linux workstations in one of the labs
in the EE department (1214/1218 Mudd). The room has badge access and we
don't have permission to enter the lab, so you will need to log in remotely.
To do this, use the program ssh
. For basic information, see
EE
Computing Lab Remote Access. If you want to do graphical stuff
like Matlab plots, you will also need to install X Windows. However,
the labs don't require any graphics, so
installing X Windows is entirely optional.
Getting ssh
and X on Windows
The EE department recommends using
MobaXTerm.
To install, click on the preceding link, select Installer
edition
, and run the installer.
After running, click on Start local terminal
to start a shell and
then you can follow the directions in Section 2. You can
also click on the +
to open a new tab/shell.
If you want to have access to the full suite of Linux commands on your local computer, another way to go is to install Cygwin, which provides a Linux-like environment on top of Windows. See Cygwin/X User's Guide for information on how to install X Windows on Cygwin. Installing Cygwin is complex, so we don't recommend this.
Getting ssh
and X on OS X
The program ssh
should be preinstalled. If you want X Windows,
you can get this at XQuartz.
Getting ssh
and X on Linux
This stuff should be preinstalled.
Getting an account After the first class, we will submit a request to create accounts for all students who are currently registered for the class according to Courseworks. If you are not registered but are planning to register, E-mail Stan to get the process started (include your UNI and E-mail address). When an account has been created, a username and password will be E-mailed to you.
Lab Policy Note that you will be expected to follow EE Computer Lab Policy. Since we do not have physical access to the lab, many of the rules do not apply. Still, there will be students sitting in front of the machines that we will be logging into, so please be considerate. If you do not follow lab policy, your account may be revoked.
Logging in
Once you have a username and password, you can try logging onto a
machine in the cluster.
The machines are named cadpc01.ee.columbia.edu
through cadpc42.ee.columbia.edu
.
To be able to use graphical programs like Matlab when using X Windows, you
need to use the
flag with -X
ssh
, e.g.,
ssh -X <username>@cadpc08.ee.columbia.edu
Do not be alarmed if you see the following error message:
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Not all of the machines may be up at a given time, so if you are having
trouble with one machine, try another. To log out, type
exit
To change your password On any machine, type the command
kpasswd
and follow the directions.
If your machine seems slow
If many people are using the same machine,
the machine may get slow and you may want to consider switching to
a different machine. To see how busy a machine is, you
can use the command w
. This will list all the users
on the machine, and the numbers after
are the average number of programs currently running (averaged
over the past 1, 5, and 15 minutes).load average
For those of you who are not familiar with Linux or other variants of UNIX, you need to learn how to use UNIX for basic tasks such as making directories, moving/copying files, redirection, etc., and for editing text files. You're basically on your own for this, but we did some quick Google searches and here are some pointers.
Linux/Unix
Here is one Unix tutorial and
here is
another
Unix tutorial.
Type UNIX tutorial
or some other relevant string into Google
for pointers to more material.
Text editing
To edit text files, if you do not already know a UNIX text editor,
one option is to use X Windows as described in Section 1
and run emacs
. In this scenario,
emacs
acts pretty much like a generic text editor.
Otherwise, the two most popular editing tools for UNIX
are emacs
and vi
. The editor vi
has
weird key mappings, but is simple and compact. The
editor emacs
is extremely powerful and also has
some weird key mappings. Here is an
emacs
tutorial and
here is a
vi
tutorial.
If you are not running X Windows;
don't already know emacs
or vi
; and are too lazy to read
a real tutorial, here is a 1-minute tutorial for emacs
. To
edit the file foo
, type
emacs foo
You can edit in an intuitive fashion; the arrow keys and
page up/down keys work as expected. To do stuff like save, exit, etc.,
you can use the menu bar at the top. Press the F10
key to get to
the menu bar. When you do this, a window opens at the
bottom of the screen with a list of options. Press the letter corresponding
to the option you want. Menus can be deep, so you may need
to do this several times. (Press Esc
three times to abort.)
For example, saving is F10 f s
and exiting is
F10 f e
. When editing files that end in a C or C++ extension
(e.g., .cc
), emacs
will enter a special
mode that does automatic indenting and highlighting.
In this section, we discuss the things you need to do to set up
your account for this course. By default, you will be assigned
the shell bash
. If you don't know what I'm talking about,
you are probably using bash
. If you are using a different
shell, then you will have to adjust the commands in this section
appropriately, but if you are using a different shell, you should
know how.
If your account was newly created, first backup the
default .bash_profile
and .bashrc
files in
your home directory:
cp ~/.bash_profile ~/.bash_profile.bak
cp ~/.bashrc ~/.bashrc.bak
(The ~
character is an abbreviation for your home
directory.) Then, copy in versions of these files
from /user1/faculty/stanchen/e6870/
, i.e.:
cp /user1/faculty/stanchen/e6870/.bash_profile ~
cp /user1/faculty/stanchen/e6870/.bashrc ~
These files set environment variables as needed for the labs.
If your account was not newly created and you have modified
these files, then manually merge the
contents of the version we supply with
your existing version.
You can type
(or logout and login again)
to have these changes take effect.. ~/.bashrc
Problems with the backspace key
If when you press the backspace key you see a
printed instead (e.g.,
in ^?
vi
on a Mac), then try adding the following line at the end
of your .bashrc
file (and logout and login again):
stty erase '^?'
We will be supporting only C++ for the labs. This is the language the majority of speech recognition software is written in. We'll also mention a little about Matlab and Python, in case you want to play around in these languages by yourself.
We will be providing a small C++ library supplying basic input/output routines and some key data structures. To provide access to this library in Python, we are using SWIG to generate the wrapping code necessary for making this happen. (The library isn't accessible from Matlab.) Documentation for this library will be given in the labs.
We'll be using the GNU C++ compiler, g++
.
To compile a program, one can use an incantation like
g++ -g -Wall <source-files> -o <output-file> -lm
The flag -g
signals that debugging information should
be included in the executable (see Section 6);
the flag -Wall
signals to print lots of warnings about
questionable programming constructs; and
the flag -lm
signals that the math library should be
linked in, which you'll probably need for all of the labs.
We'll be using version 4.9.3 of g++
, a recent version
that includes support for many modern features of C++.
To turn on support for C++14, use the flag -std=c++14
.
To automate the compilation process, one can use make
; here's a
make
tutorial.
Here's a sample Makefile
:
CXX = g++
CXXFLAGS = -g -Wall
LDLIBS = -lm
hello : hello.C
$(CXX) $(CXXFLAGS) hello.C -o hello $(LDLIBS)
Note that the indentation in the last line must be the tab character,
not spaces. If placed in the current directory in the file Makefile
,
one can recompile by typing the command make hello
.
Typing matlab
should start up Matlab. If you are
running X Windows (and used the
flag with -X
ssh
),
you should see the graphical interface; otherwise, the command-line
interface will start up (see Section 1). If you can't
find Matlab, the full path is
/usr/local/bin/matlab
If for some reason you are having trouble with the Matlab
license server, another option is to use octave
, which is
open-source software mimicking Matlab. This uses the same
syntax for most things, though its function library is not as extensive.
If you completed Section 4 correctly, your PATH
and PYTHONPATH
environment variables should be set up correctly
to use the desired version of Python and the course Python libraries.
(Don't forget to logout and login again after updating your .bashrc
file.)
In particular, you should be using the Python from
/user1/faculty/stanchen/pub/exec/
(type type python
to check) and PYTHONPATH
should include the directory
/user1/faculty/stanchen/e6870/lib/
To print the value of PYTHONPATH
, type
echo $PYTHONPATH
The course Python module is named asr_lib
. To test things
are working, you can try:
python
from asr_lib import *
print g_zeroLogProb
For those of you who are not robots or cyborgs, you will undoubtedly
introduce bugs into your source code at some time or another. One
simple way to debug stuff is to place print
statements everywhere. However, it will make your life much
easier in the long run if you learn how to use a debugger.
A debugger lets you stop the execution of your program at any
point and examine any values you wish, which makes this much
more general and powerful than the print
statement
technique.
For C++, the GNU gdb
debugger is available. Here is
one gdb
tutorial and here is
another gdb
tutorial;
you can also get some documentation within gdb
by typing
help
. To start gdb
,
type gdb <program>
. Within gdb
,
type run <arguments>
to start the program. Commands
that you should know about include breakpoint
,
print
, cont
, step
, next
,
where
, up
, down
, and finish
.
Don't forget to compile your program with the
flag
(see Section 5.1).-g
Tip: in the provided C++ library, errors are reported either as
assert()
failures or as exceptions. It's useful to be
able to set breakpoints on these events when debugging.
To set a breakpoint on an assert()
failure, you can do
b __assert_fail
If you're asked Make breakpoint pending ... library load?
, say yes.
To set a breakpoint on the throwing of any exception, you can do
b __cxa_throw
For future reference, in the interest of preempting debugging questions, here are three procedures you should perform before asking for help in finding a bug:
Code review — Carefully read each line of code to make sure it says what you intended it to say. People make a surprising number of essentially typographical mistakes.
Data review — For each variable with a nontrivial lifetime, read the code and make sure the variable is constructed, initialized, updated, and destructed correctly.
Step through the code — Step through each line of code in a debugger, examining variables to make sure they have the values you think they should have. You may need to step through the same code multiple times, to test different situations that may arise.