An Experience with Using a Wiki for a Collaborative Classroom Documentation Project

webmonkey thumbnail

I’m teaching a basic web design course this term that covers design concepts, XHTML, and CSS. The students are from a variety of backgrounds – some have knowledge of HTML, some are non-majors or non-credit students looking to pick up a useful skill, and many are complete beginners who are required to take the course as part of their degree programs.

Only a few students knew what a wiki (distinct from Wikipedia) was before beginning this project. The students were given a month to make their contributions to the wiki. They were each assigned primary responsibility for one page at random, but were graded both on the success of their page and their contributions to other pages.

43 students across two sections of the class participated in the project. Of those, five (or 11.6%) didn’t participate by the due date, which is a higher than normal percentage for a homework project. Eleven (or 25.6%) contributed only to their own pages. Another thirteen (30.2%) maintained their own pages and made meaningful contributions to other pages, while fourteen students (32.6%) made numerous contributions well in excess of the requirements.

I will be continuing the project for the second phase of the class – CSS – and I’ll see if participation increases as the usefulness of the wiki as a resource increases. I also plan a project postmortem survey at the end of the course to see what the students thought about it.


Autoscript Creates LSL Scripts Without Code

This week, I created autoscript, a simple LSL script generator for Second Life. The concept is to translate the way you think about interactive design – what should happen, and when – into functional code.

Scripting is one of the most creative parts of designing immersive spaces, and I hope this will make it accessible to more people. Please feel free to use this code however you like!

Writing a program like this requires a balance between simplicity and flexibility, and I’m erring on the side of the former. I do plan to add more functionality to it and would love your suggestions and ideas! Also, if you encounter anything that doesn’t work, please let me know in the comments here.

The link: autoscript


Second Life Community Convention

I just returned from the Second Life Community Convention in Chicago. I really appreciate all of the wonderful people that I had the chance to meet (or smeet) or just spend time with. There wasn’t nearly enough time for all of the conversations that I wanted to have!

There were a wide variety of presentations. We’ve come a long way since last year! The diversity of disciplines was astounding. I think the strongest work presented was in the sciences and medicine, and I was particularly impressed with the Second Health machinima.

Here are the slides from my presentation on Experiential Learning:

I’m hoping it inspires people to think about how we now have this capacity to create learning experiences that were simply never possible before. What do we do with it? How do we measure it?


Curriculum Design as Software Engineering

This summer, I’ve been involved in the process of creating a new undergraduate curriculum essentially from scratch. I was reflecting back on this process, and I realized the development of a robust and relevant curriculum shares many attributes with the process of developing robust and functional software.

Modern software development is a largely modular process. Each component of a system interacts with every other component through a defined interface. I see this same behavior in a degree program – each course has certain incoming requires and defined outcomes. Students navigate through a narrative of courses that must fit together to equal a bachelor’s degree.

Unit testing is the practice of separating out each module in a software system and insuring that it functions correctly. The final system is will contain many modules interacting together in potentially unforeseen ways; by testing each piece repeatedly throughout the development process, we can reduce the number of problems that creep in when everything is integrated.

If we continue the metaphor of courses as modules and curriculum as software system, we find that students will create an arrangement of these sets of courses, based on simple rules given in the course prerequisites and degree requirements. The arrangement must function to make certain that a student doesn’t end up in a course that they aren’t prepared for, while also making certain that any given legal arrangement of courses provides a degree program that meets the program outcomes.

Just as we must assess students’ mastery of material, we must also evaluate the effectiveness of each course to make sure that it is actually supporting the written course outcomes. This process is required for a University to remain accredited, but can also yield useful “debugging” information to help refine course sequences.

The need for evaluation brings us to security. As odd as it may be to think of an educational program being “hacked”, we need to make certain that the rules are arranged such that any legal sequence of courses meets the degree program outcomes. It’s also important to make sure that a course taught by one faculty member has largely similar learning outcomes as the same course taught by another faculty member.

Finally, software and curriculum share the odd trait of generally being created by people who are not the typical audience. Creating usable software generally involves gathering data from the community and directing development and testing accordingly; we see the same thing in educational programs. The community of “users” can be roughly divided into three major constituencies: University administration, students (and parents), and employers or graduate schools, each of which have different priorities and different priorities than the faculty or administrators creating the course. It is impossible to satisfy them all without doing some usability research.

Thinking of curriculum design as software engineering is more than just a cute metaphor. Software engineering is the discipline of delivering complicated systems that function as designed. We can take some of the well-understood tools and processes of software engineering and apply them in curriculum design. For example, unit testing teaches us to define both incoming requirements and outgoing interfaces for each module in a system. If we define both outcomes and “incomes” for all courses, we can create a map of all legal sequences involving that course and, by matching the various sets of outcomes to incomes, make certain that students will be best prepared to perform in the course at the time that they take it.

By adapting the tools of software engineering to curriculum development, we can make the entire process easier and more likely to succeed, while providing more reliable objective data on the success of the degree program!


Tip: How to Search Google for Ideas

Will someone please invent a way to search for ideas?

Short on inspiration? Harvest ideas from the web by searching Google for “someone please invent” and see what people are wishing for. Using quotes around “someone please invent” insures that Google searches for that exact phrase only.

You can further refine the query by adding related terms at the end of the query. For example, try searching for “someone please invent” game* to see game-related results.


Uninstall Programs … For Real.

I don’t usually write about software, but this is an issue of general interest. When you uninstall a program, it often leaves behind little bits of itself. This cruft accumulates over time and, especially in Windows, can reduce the performance of your machine.

I recently stumbled on a pair of utilities that quickly and easily remove this cruft: AppDelete for OS X and Revo Uninstaller for Windows (XP and Vista).

AppDelete main window

AppDelete is exactly what you see in this screenshot. You drag a program’s icon onto the little wooden garbage pail from the Applications folder. It asks if you’re certain that you want to delete the program, and then removes it. I’ve been using it for several weeks, and it works great.

Revo Uninstaller is a bit more complicated, but it has many more features. When you load the program, it displays a list of all of your applications (and somehow does this much faster than Windows itself). You can choose an application to remove, run that application’s built-in uninstaller, and then use a utility to scan for left-over files and registry keys. It worked perfectly for me.

Revo also lets you manage applications that run at startup with the AutoRun manager, cleans up “junk files”, and gives you quick access to important Windows utilities. As far as I can tell you can accomplish most of this with astute registry editing and manual file deletion, but this program makes it much easier. [From Lifehacker, thanks!].

I love utilities that make our lives better and easier, and these two solve a real problem. If you’re using Linux, try rpm -e, and quit smirking.


Where the Sun Rises… in Second Life

WindLight 1

WindLight 1,
originally uploaded by Lex Zhaoying.

The Second Life Scripters mailing list just had a great discussion on the cycle of the sun and the seasons in Second Life. As very detail-oriented residents may have already determined, the sun and moon in SL do not follow the Earth’s natural course.

Scripter Extraordinaire Zyzzy Zarf (who doesn’t seem to have a web site, but if I’m wrong, please let me know in the comments!) provided some code obtained from a Linden that indicates that the sun moves in a circle around a tilted plane. The angle of the plane rotates around each year.

This results in a “good enough” simulation of how the sun and moon ought to behave. When we design virtual environments, do we really need accurate simulations of the sun and moon? Or is this “good enough” simulation good enough?

I’m also fascinated by the emergence of a class of SL Astronomers… studying the Second Life skies.


Teaching Search Techniques with Google Games

Educators routinely discuss how students have trouble evaluating and using the results of their Google searches. There are really two parts to this problem, though, and while it’s true that students may struggle to identify reliable sources, before we can address that, we need to teach them how to write good queries.

It’s that old computer science maxim: Garbage In, Garbage Out.

I like to teach students how to write interesting queries by playing games. This games force students to think about the queries they are writing, and not the results. I have no scientific proof of the results, but I do know that it keeps them entertained and thinking for a while!

My favorite games:

  • Google Whack – The classic! Find a two-word query, with no punctuation, that return one and only one result. The Google Whacks on the site would make great spam subect lines.
  • Google Image Labeler – A game that Google created. You are matched up with a random partner, and together, presented with images. You guess labels for the image, and when you and your partner match, you get points and move onto the next image. Each round lasts two minutes.In addition to providing a tool for procrastination, this is one way for Google to automatically provide appropriate text labels to images. It gets the group thinking about how the search engines work!
  • What’s more popular? With Google Trends! – Create small teams. They each get to pick a term, and compare the popularity using Google Trends. Teams pick words at the same time, and the team with the best two of three wins. You can optionally restrict the domain; for example, all guesses must be vegetables.
  • Finally, Googlenope – Proposed by Gene Weingarten in today’s Washington Post, a Googlenope is a search term or phrase that does not exist on the web. Until you find it and write about it, that is!

If anyone has a favorite that I’ve missed, please comment!


The Best Time to Search for Academic Jobs

It’s common knowledge that academic job announcements are seasonal. In general, hiring committees are formed in the fall; they announce positions, wait a month or two for applications, then spend weeks interviewing candidates before making a decision in March or April for positions that will begin the following September. I found some data to prove it, and to possibly guide those engaged in an academic job search.

I was playing with Indeed.com‘s job trends feature, when I realized that you could search not only for particular skills and specializations, but for job categories. A search for “professor” reveals some nice peaks right around mid-October.

professor trends

While a search for “postdoc” isn’t quite so periodic.

postdoc trends

I can only guess that this can possibly be attributed to trends in funding for postdoctoral positions. It would be interesting to see if there is a correlation with NSF funding for science research.

We know it’s good to look for professorships in October, but does this hold true across all fields? Searching by a generic field name (“physics”, for example) doesn’t do much good, as it picks up all of the job posts that are looking for majors in that area. But we can look for specializations. For example, the graph for “superconductivity”, we see:

superconductivity trends

Which shows that the majority of positions are announced between October and January, and that the summer is the worst time to find one.

I tried to think up specializations in the humanities, to see if the pattern held. A search for “egyptology” gives us this graph:

egyptology trends

I’ll allow you to draw your own conclusions.


Intro to the Linux Command Line

This document will step through the process of accessing a Linux server, and several basic commands.

SSH

We will access the server via the SSH, or “Secure SHell”, protocol. SSH provides encrypted communication between two terminals. It is an alternative to telnet or rlogin.

First, make sure that you have an SSH client. If you are running Windows, I highly recommend downloading Putty. Click on the top Windows binary and save it to the desktop. You can run Putty.exe directly, without installing.

If you are using OS X, open a terminal and run ‘ssh’.

Logging In

putty_thumb.jpg

Type your hostname into the box. You can find your hostname by asking your ISP, but a good bet is that “www.yourdomain.com” will resolve to your server. You may need to request shell access

Click open. You’ll be presented with a warning, because you haven’t connected to that machine before. Approve the connection.

Next, you’ll see a login prompt. Enter your username. These will be assigned in class, but a good guess is your first initial and last name.

Enter your password. Both your username and password are case-sensitive.

You should see a screen like the one to the left. Congratulations! You’re logged into the system.

The Prompt

You’re now looking at an interactive shell prompt. The shell accepts the commands that you type and sends them to the kernel, which executes them. This is how you interact with the operating system.

The prompt currently shows your username, the name of the machine (PVDACDLN-01), and your current directory (~, see below).

By default, our system assigns users to the bash shell. There are many different shells available. In general, they all do the same thing, so most users choose a shell based on what they are most comfortable with.

Tip: By default, OS X uses bash as the shell in a terminal. All of these commands will work nearly identically in OS X.

Commands

The remainder of this document is an introduction to Linux commands and a reference.

The Filesystem

The Linux filesystem is organized into a heirarchical series of folders, or directories. ‘/’ indicates the root directory, which contains all other files and directories.

pwd – pwd stands for “print working directory”. It echoes the current directory to the screen (this is where, in the filesystem, you currently are).

[ham@PVDACDLN-01 ~]$ pwd
/home/ham

cd – cd stands for “change directory”. It changes your current working directory to a new directory. If you try to change to a directory that does not exist, you’ll get a No such file or directory error.

Tip: you can type “cd ~” at any time to return to your home directory, or, if you know someone’s username, type “cd ~username” to cd to their home directory.

[ham@PVDACDLN-01 ~]$ cd public_html
[ham@PVDACDLN-01 public_html]$

ls – ls stands for “list”. It prints a list of files and directories in the current working directory to the screen. This version of ls presents directories in blue.

[ham@PVDACDLN-01 public_html]$ cd ~
[ham@PVDACDLN-01 ~]$ ls
example.txt public_html
[ham@PVDACDLN-01 ~]$

The ls command also accepts various arguments that change the output of the command. For example, the “-a” argument means “display hidden files”, while the “-l” argument means “use long listings”. Command-line switches can be used singly or combined.

Filenames that begin with a “.” are hidden by default. Also note the “.” (current directory) and “..” (parent directory) operators.

[ham@PVDACDLN-01 ~]$ ls -a

. .bash_logout .bashrc_backup .gtkrc .viminfo
.. .bash_profile .emacs .kde .zshrc
.bash_history .bashrc example.txt public_html
[ham@PVDACDLN-01 ~]$ ls -l

total 12
-rw-r–r– 1 ham users 0 Feb 21 11:38 example.txt
drwxr-xr-x 2 ham users 4096 Feb 21 11:32 public_html
[ham@PVDACDLN-01 ~]$ ls -al
total 108

drwxr-xr-x 4 ham users 4096 Feb 21 11:38 .
drwxr-xr-x 4 root root 4096 Feb 3 13:39 ..
-rw——- 1 ham users 297 Feb 21 11:21 .bash_history
-rw-r–r– 1 ham users 24 Feb 3 13:39 .bash_logout
-rw-r–r– 1 ham users 191 Feb 3 13:39 .bash_profile
-rw-r–r– 1 ham users 142 Feb 3 13:41 .bashrc

-rw-r–r– 1 ham users 124 Feb 3 13:40 .bashrc_backup
-rw-r–r– 1 ham users 438 Feb 3 13:39 .emacs
-rw-r–r– 1 ham users 0 Feb 21 11:38 example.txt
-rw-r–r– 1 ham users 120 Feb 3 13:39 .gtkrc
drwxr-xr-x 3 ham users 4096 Feb 3 13:39 .kde
drwxr-xr-x 2 ham users 4096 Feb 21 11:32 public_html

-rw——- 1 ham users 632 Feb 3 13:41 .viminfo
-rw-r–r– 1 ham users 658 Feb 3 13:39 .zshrc
[ham@PVDACDLN-01 ~]$

clear – The clear command requires no parameters. It clears the terminal and presents a prompt. It’s almost never necessary to do this, but it can be good for mental clarity.

Information

who – The who command requires no parameters. It prints a list of all logged in users to the screen.

ham pts/1 Feb 21 13:52 (10.21.5.164)

top – every program or command that runs on the machine is a process. The top command displays running processes in order of the CPU cycles consumed.

ps – ps stands for “process snapshot”. It prints a list of the current running processes. Use the “-e” argument to see everyone’s processes.

[ham@PVDACDLN-01 ~]$ ps
PID TTY TIME CMD
24948 pts/1 00:00:00 bash

25366 pts/1 00:00:00 ps
[ham@PVDACDLN-01 ~]$

man – man stands for “manual”. It accepts one command name as a parameter. It will less the man page for that command. Use the spacebar to page through it, or type ‘q’ to quit. Try typing ‘man ls‘.

Man pages are generally dense and occassionally uncomprehensible, but they do usually present every possible option for a command.

help – help is a bash command that provides help for builtin commands. It accepts a command name or pattern (partial name) as an argument.

Unfortunately, help only documents certain commands. Try ‘help help‘.

[ham@PVDACDLN-01 ~]$ help pwd

pwd: pwd [-PL]
Print the current working directory. With the -P option, pwd prints
the physical directory, without any symbolic links; the -L option
makes pwd follow symbolic links.
[ham@PVDACDLN-01 ~]$

Manipulating Files and Directories

cp – the cp command accepts two parameters. It copies a file to a file with the name specified in the second parameter. Each parameter may include a directory (relative or absolute) and a filename.

Use the -R (recursive) switch to copy entire directories.

[ham@PVDACDLN-01 ~]$ cp example.txt moreexamples.txt
[ham@PVDACDLN-01 ~]$ cp example.txt directory/example.txt

mv – the mv, or “move” command, accepts two parameters. It renames the first file to the second filename. Each parameter may include a directory (relative or absolute) and a filename.

The mv command is also used for renaming files.

[ham@PVDACDLN-01 ~]$ mv example.txt moreexamples.txt
[ham@PVDACDLN-01 ~]$ mv example.txt directory/example.txt

rm – the rm, or “remove” command, deletes a file.

[ham@PVDACDLN-01 ~]$ rm moreexamples.txt
[ham@PVDACDLN-01 ~]$ rm -r directory/

Resources and Help

Explore these links for additional information and explanations.