Archive for the 'school' Category

My MSU Email Debacle

Thursday, May 15th, 2008

For like a week or two now, I noticed something strange and yet not entirely unpleasant happening to my inbox. There were no angry emails from students complaining that I didn’t grade their homework submitted 3 weeks late the very second when they submitted it on Sunday evening at 3AM. My spam filter has already learned to automatically and quietly file away the mail from all the MSU specific mailing lists to my SPAM folder so I didn’t really notice any decrease in traffic.

Here is a side note for those of you who haven’t attended my lovely alma matter, and current teaching grounds. When you start as an undergraduate and get your university based email address you get automatically subscribed to 5 million mailing lists with creative titles such as [allstudents], [undergraduatestudents] and etc. The mailings range from weather announcements, information about campus events, bookstore deal, off campus events, local events, events that have nothing to do with the school, job opportunities, random shit and a etc. On average you can get 60+ emails per day. If you are silly enough to come back as a grad student you get signed up for another million mailing lists, some of which double up on functionality with the undergrad ones so you get upwards of 100+ emails per day. If you become a faculty member or an adjunct after that you… Well, you get the picture. Naturally, your mailbox has 15 MB quota so if you go on vacation and don’t download any of your emails for a week your mailbox will fill up, and new emails will get rejected. Best system evar!

Before they took away my school unix account I was using a simple procmail script to sieve all this crap to /dev/null. The script was actually written by my former mentor who was also sick of this crap.

But let’s get back to the matter at hand. Apparently several of my students told me they were trying to reach me via email for days with no success. I went digging in my inbox and my SPAM folder, and my fears were confirmed. There was no recent email there. Everything was few weeks old. What happened?

Worst part is that there was almost no way for me to notice this. There were no error messages, no notifications, no bounced emails. KMail had no problems connecting and authenticating against the POP server and kept telling me that there was simply no messages on the server. Hell, I could even log into the school’s web mail service to see this:

MSU Webmail

I called OIT today and confused the hell out of them too. Apparently I was still using my student email account and these expire after a year. But while my email expired, my login was inexplicably tied to other services which I was still using - such as the course management service, the online storage, and dozen of other things. So it appears that I appear as a teacher in some school systems, as a student in other, and even as neither in some. In other words, whatever was done to my account(s) last may was done wrong and it set off a time bomb destined to explode in a year. And that’s what happened here. And the timing couldn’t be worse either since this is the very end of the semester - the time when students always have tons of questions about their grades, projects and etc.

I guess few grad students turned adjuncts stick around for longer than a year around here. It seems that my case is fairly unique and unusual. Let’s hope they can figure out how to fix it without totally fucking up my login to all the school services.

Update 05/19/2008 09:56:29 PM

It’s probably worth posting a quick update. The issue got fixed on Friday. They managed to un-block me in their system so that I was able to create a faculty netid with a new and improved email account with 200MB quota. I can actually use IMAP on this one and don’t really have to worry about deleting stuff other than spam. )

They also unblocked my temporary email, mentioning it will get discontinued soon. Why did it get stuck? Apparently it had something to do with me using POP to access it, but the tech support person I spoke with did not know the details. Oh well. I’m glad the issue got resolved. )

Since the 1800’s…

Wednesday, May 14th, 2008

I wanted to share with you a final slide from a presentation made by one of my students. I wish I was making this up, but I’m not. You can judge whether this is funny or very sad by yourself:

Since the 1800's...

I assumed a honest typo resulting from the student making the whole presentation 15 minutes before the class, and then winging it. I prefer to think that my students are just lazy and don’t care about the class - this way I can keep my sanity and hope for the future in situations like this one. )

It is reassuring that most of the class seemed to catch onto it, and there were subdued chuckles from the back rows. I believe that I even heard someone patiently explaining “cause there was like no computers in 1800’s…” to their confused neighbor.

Someone later suggested to me that you could technically count Charles Babbage as an early hacker. He was active in the 1800’s so the statement above would be at least partially correct… Well, excluding that bit about the internet services. And getting caught…

For the record, I didn’t assign the presentation topics, nor did I restrict them to just technology. Students were free to pick any topic they wanted, and I provided them with a list of potentially technology related topics if they could not come up with a topic on their own.

How to Teach Programming?

Tuesday, March 25th, 2008

I might be wrong about this, but I’m partial to the gauntlet method of teaching introductory programming courses. You make the class as challenging and difficult on purpose and make the students sweat. Hit them hard and as early as possible so that the slackers get the idea and withdraw from the course. Every lecture should raise the bar, and anyone who can’t keep up or is struggling should be encouraged to drop the course and change their major. It is harsh, but I do believe that a large percentage of people in every programming class will just never get it. No matter what you do, they will always struggle and will demand your help and attention which would be better spent supporting the students who actually get this stuff and are progressing at a fast pace.

I can probably tell you which people will do well, and which will struggle and just waste your time. You can see when you assign a really difficult problem they haven’t encountered before. The students that get energized, and excited by the challenge - who ask meaningful questions, furiously jot down notes, or start coding before you even finish explaining it - they are your star players. They should get all your attention and you should make sure they are sufficiently challenged, and that they have adequate support to meet the challenge head on.

Then there are those other students who raise their hand and say “I don’t understand this” or “I don’t know how do I do this” - they are most likely a dead weight. And yet, you will end up spending inordinate amounts of time basically holding their hand, and pretty much debugging their code for them. You end up purposefully dumbing down the course, and choosing idiot-friendly tools for their sake and in the end your star pupils get bored, and frustrated with the glacial progress of the course. In the end everyone loses.

The talented students make little progress, and end up ill prepared for the next programming course in the curriculum. The non-programmers barely pass with a C or a D (or if you made enough concession for their sake even a B) and leave your class without actually learning one damn thing. Or rather, the only thing they learned in your class was that they can slip through the cracks and pass a programming class without actually learning how to code or solve problems.

I think that the use of tools like BlueJ in the classroom is an outgrowth of this “cuddle the hopeless students while ignoring the talented ones” approach. Personally I think we do not need tools like that - not at the college level. But this seems to be a minority opinion, and many people disagree with it. Same could be said for the gauntlet approach.

The thing about the gauntlet thing is that it is actually very difficult to implement. It requires tons of experience, and absolute confidence in your teaching ability and methodology. When I notice that large number of my students is lost, I usually blame myself and try to review and re-iterate the difficult parts over and over again. More than once however I found that the people who were most vocal about the difficult material, and who got the most help from me actually got it wrong on the test, while the silent majority actually understood it. So I essentially wasted my time, spinning my wheels in place instead of going forward or covering other areas in more depth. It’s easy to spot these pitfalls in retrospect but not when you are lecturing. When I have 4 or 5 students who seem to be completely baffled by something that I just said, and loudly voice their confusion it is sometimes hard to realize they are actually not speaking for the whole class. The remaining 30 students who are quietly taking notes might not be confused at all.

Experience helps here - and so do a time tested lesson plans and delivery methods. Identifying and subsequently ignoring the dead weight also helps. But it is very hard to do because it means you are essentially giving up on some students and allow them to fall behind. And that is a horrible thing to do. Most teachers won’t willingly do something like that. Personally I refuse to do it and I really try to help people out when I see they are struggling. But often that means I’m essentially the one doing all the work - I’m literally pushing, and dragging them that’s passing grade. Would they make it if I didn’t actually force them to do work? Would they pass if I didn’t extend their deadlines ad infinitum? Probably not, and by helping them so much I actually allow them to slip through the cracks without actually working for the grade or even trying very hard. This is why gauntlet is a good idea, but I’m the wrong person to run it. I couldn’t do it. But there are people who can and do run their classes this way.

It takes the right instructor - someone who is approachable, supportive, but at the same time tough and demanding. And most importantly someone who knows what he/she is doing.

But IMHO there should be no cuddling, and no tolerance for ignorance or technological incompetence. But above all, there should be a zero tolerance policy for students who say one of the following lines:

  1. I hate computers
  2. I hate programming
  3. I hate [language you are teaching]

The only response to any of these statements should be: You should not be here! You will not do well! Drop this class! Drop this class! Drop this class immediately!

If you are confused by technology, programming bores you, and you dread every single coding assignment why are you subjecting yourself to this whole ordeal? I do not understand why people do this, but they do. When I was in college, I stayed the hell away from the Business School building because economics and finance classes bored me to death. I did not enjoy them so I didn’t take them. The Computer Science program at my school offered us a choice when picking required auxiliary courses - you could either do the science route (2 science classes - chem or physics) or the business route (3 business classes - micro/macro economics and some other stuff). I immediately signed up for science because it sounded much more interesting, and much more challenging. Most of my friends picked economics because it was easier.

Computer Science should never be the easy or fun course. It should be the class that evokes the sentiment in the majority of student body: “You are taking Computer Science? Are you insane?”. Only the students who are crazy enough, motivated enough or just love the subject should be taking the class.

Unfortunately, if you don’t get 20-30 warm bodies to register for your course at my university, the Dean will shut it down. And this is a problem at a school where we only offer 2-3 introductory programming sections per semester due to low student frequency.

Download All Documents from Blackboard’s Digital Dropbox

Monday, February 4th, 2008

Blackboard sucks. This is the opinion shared by roughly 95% of faculty at my university. But this is what we have, and a crappy course management system is still better than no course management system. So we are stuck with it for the time being.

Most of the gripes about BB system concentrates around the Digital Dropbox feature which is both very convenient, and very annoying. It’s convenient for the students because they can easily submit their assignments from anywhere at any time. They simply log into blackboard, click on the appropriate course link, and upload the file. They don’t have to spend time printing their work, they do not need to search for instructors email, and hope the spam filter won’t snag it. They just hit a button and they are done.

It is horribly annoying because the instructor does not have any control over how the uploads are organized. When you open the instructors view of the dropbox you see a long list of download links in reverse chronological order (newest entries are on the top). There is no way to tag or categorize assignments so unless students name their files appropriately you have to open each file to figure out what it is.

But most annoying feature is probably the fact that there is no way to download all the files from the dropbox at once. You can only grab them one at a time by clicking the links. You’d think there was a button that says “download all” but there is none. I think there is silly trick some people use that deals with exporting/archiving the course but it’s not exactly what you’d want to do every week unless you have to. So I decided to create a solution that would let me easily download all the files from the dropbox at a click of a button. How? Observe:

use strict;
use WWW::Mechanize;
use MIME::Base64;
 
 
my $bb_login_url = 'http://school.blackboard.com/webapps/login/?action=relogin';
my $bb_dropbox_url = 'http://school.blackboard.com/bin/common/dropbox.pl?action=LIST&course_id=_SOME_NUMBER_1&render_type=EDITABLE';
 
my $bb_user = 'your_username';
my $bb_passwd = 'your_password';
 
# where do you want the downloaded files
my $folder = "absolute_path";
 
# log into bb
my $browser = WWW::Mechanize->new(autocheck => 1, quiet => 0);
$browser->get($bb_login_url);
$browser->form_number(1);
$browser->field('user_id', $bb_user);
$browser->field('encoded_pw', encode_base64($bb_passwd));
$browser->click();
 
# go to dropbox
$browser->get($bb_dropbox_url);
 
# grab all the links
my @l = $browser->links;
 
my $i = 1;
 
foreach (@l)
{
	# the links to files have the word uploads in the uri
	if($_->url() =~ m/uploads/)
	{	
		print $i . "--" . substr($_->url(), rindex($_->url(), '/')+1) . "\n";
		$browser->get($_->url(), ":content_file" => $folder . $i . "--" . substr($_->url(), rindex($_->url(), '/')+1));
		$i++;
	}
}

I could do this in less than 10 lines probably but we are not playing perl-golf here. You will need to hard code the appropriate URL’s. I hope you can figure out how to get them. If not, you should not be fucking around with perl. In fact, step away from the computer right now. These things can explode if you press the wrong key combination!

I guess the important bit of information here is the regex inside of the loop. The whole thing works because the URL’s for the files inside the dropbox (at least in the version of bb we use) look like this:

http://school.blackboard.com/courses/1/COURSE_ID/uploads/_SOMENUMBER_1  /somefile.doc

None of the other links on the page have the word uploads anywhere in the URL so this is how we can isolate the download links regardless of what type of files they are. The get() method of WWW::Mechanize can fetch the specified URI into a file instead of memory if you pass in “:content_file” => “desired_file_name_and_path” as the second argument.

I’m appending a number to the output file name because it is not uncommon to find 2 files with the same name (for example homework1.zip or something like that). The get method will overwrite files without warning so the sequential numbers prevent that from happening. They also help to organize files to match them up with the blackboard page. If your students do not include their name inside of the file, you can look back on the dropbox page and figure out which file was it rather easily.

To delete all the files from dropbox simply change the inner loop to this:

foreach (@l)
{
	if($_->url() =~ m/=REMOVE/)
	{	
		$browser->get(substr($_->url(), rindex($_->url(), '/')+1));
	}
}

Here we are grabbing the links that have the word REMOVE in the link. So now you can fetch the whole dropbox and delete everything from it for a clean start.

I’m not sure if anyone will find this useful, but it really makes working with BB a tiny little bit less annoying for me.

The Clicker

Friday, January 25th, 2008

I never thought that I will need one of those, but I bought myself a clicker. To be frank, I have no clue what is the proper name for these things but I call it a clicker. What does it do? It’s a little wireless gadget you hold it in your hand and click a button to change slides. I never had one before, and I never even entertained notion that I may want one at some point. But since I’m teaching now I figured - why the hell not.

So I bought the Targus Wireless Presenter which looks like this:

The Clicker

I’m almost sure that the popper name for this device is not “Wireless Presenter”. To me a presenter, is the person who presents the slides. Targus probably made this name up because like me they had no clue what to call it. P Either way, it’s a great little gizmo.

This particular model is not really top of the line anything. It’s a cheepo model, and it does feel like it. But at the same time it is fully functional, and perfect for my needs. All I really need when I’m teaching is to switch slides back and forward. This device does just that, and in addition it has a built in laser pointer which works out very well. It also has 2 other buttons: an Alt+Tab like functionality that lets you cycle between open windows and another one that blanks the screen for you. I don’t see much use for the later, but the former one is a nice thing to have.

It takes a single AA battery, and just works. So far every windows box I plugged it into detected and configured it immediately. Then again I only tested it on Win XP so I can’t vouch for it to work in Vista or 2k. It did come without a driver CD though so I’m guessing Targus is confident that it will work on every system. Then again my Sidewinder mouse didn’t ship with drivers either but that’s a whole different story.

My only complaint is that the On-Off switch is unmarked. The only way to know if the device is actually off is to hit the red laser pointer button. If the switch is in the OFF position it won’t work. It’s not a show stopper though. After all I paid $20 for this so it’s not like I’m expecting highest quality here.

The biggest benefit though is what this device does to your presentation style. I love it. It lets me move around much more, and takes me out from behind the lecturer’s desk. It kinda removes that artificial barrier and I kinda felt as if I was connecting with the students a little bit better.

It also works great with animated slides. In the past I used a lot of static slides so that I could get out from behind the computer and point to the things on the projector screen or write on the white board. With the clicker in hand I can have the bullet points fly in one at a time as I speak. The laser pointer is just a nice bonus that let’s me point to things without walking up to the screen or reaching high above my head.

If you teach, or regularly present stuff using ppt, I highly recommend getting a clicker. Not necessarily this one - the Targus is cheap, and it feels cheap. I’m actually paranoid now that it will break on me in a week or two and I will be stranded in the middle of a lecture without one. So far it has been working fine for me though. I’m actually considering buying a second one and keeping it in my bag as a backup.