Skip to main content

Sunday with SamR

As seems to be the norm these days, there were way too many tasks for me to complete this weekend. I had assumed that I could do both work around the household on work for work on Saturday. I got most of my planned household work done, but none of the work for work. I have lots of important family time today, but I’m still trying to sneak in a bit of work work by getting up at 6:00 a.m. Let’s see what I can get done. I have two essential tasks today: getting placements done and getting the workshop prepared [1].

  1. Start on placements. I received the raw student data yesterday. Fortunately, I was able to find a few minutes to look at it as it was incomplete. I did not, however, have a chance to inspect the new raw student data. Fortunately, it’s fine. I also have to get my brain back into the place students mode. It’s something I only do once per year and at a time in which I’m busy enough that memories do not form well. I had already made an appointment with the chair of Mathematics and Statistics to start our discussion of placements [2]. Now that I’m looking at the data, I recall that one of our tasks is to update the placement for students who have College credit. So I’ll send him a spreadsheet.

    What steps are necessary to get the letters ready? Fortunately, I recorded those in two easy-to-find places [3,4]. So, let’s go. First, I make a backup copy of the data, just in case [5] Next, I retitled the columns to match the fields in the database [6]. I spent a bit of time confused by some of the columns. Is PCT the same as precalcsem?
    I think so. And there a whole host like that. I also realized that there’s neither a column in the database nor logic in the expert system for AP CS Principles [7]. I think that’s okay for now; the students will still be marked as having done high school CS, and that’s probably all we need to do for placement. But I should talk to the Registrar’s office and to Henry about those issues when he is next on campus. Back to column renaming. Why is it that Henry chose apstat when the Registrar uses APSTATS? I’ll never know, but I remember this being an issue in the past (in that I always choose the wrong name). Hmmm … there’s an ALMAT column in the Registrar data, but nothing comparable in the list of column titles to use. Oh well, I’ll skip it for now and cross my fingers.

    Time to export as a .csv [8] file. Oh, joy. Microsoft likes to use returns to separate lines, rather than newlines. I wonder if that will make a difference to the data loading system? I’d normally fix the issue with tr, but tr doesn’t seem to like some of the data, and is giving me an Illegal byte sequence error. What does a Web search suggest? It suggests that I am not alone in finding Microsoft’s choice problematic. I do find a Perl [9] one-liner, perl -pi -e 's/\R/\n/g' FILE. Isn’t that beautiful? I should remember to use Perl more often.

    I shouldn’t forget the transfer courses, either. Fortunately, that file has many fewer columns and many fewer lines.

    Uploading the .csv files is easy and quick. Now it’s time to switch to Henry’s instructions. The first step is to load the data into the database. That’s supposed to be straightforward. I just type php loadData.php, enter the names of the files, and cross my fingers. But it appears that my fingers were not sufficiently crossed. I get an error.

    PHP Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/walker/placement/php-system/loadData.php on line 39

    Time to debug! I so love debugging other people’s code. And I love debugging languages I don’t use regularly. Let’s see … let’s look at the lines of the file.

     37: $fields_query = "SHOW COLUMNS FROM ".$table_name;
     38: $fields_result = mysql_query($fields_query);
     39: $num_fields = mysql_num_rows($fields_result);

    The error message would suggest that the query is failing. But why?
    My first temptation was to make sure that we can connect to the database, but that meant I had to figure out what the table name was. Then I had a duh moment: I entered the file name when the script wanted a table name. Time to try again.

    I got a bit further and then I got stung by inconsistency in naming of database fields. Why would someone choose to use calcsem but calgrade? With that fix, and about a half dozen more, I seem to have gotten data into the database. Is there a way to easily check? I don’t remember, and I can’t find info easily. I suppose we’ll find out during the next few steps.

    What’s next? It’s time to run the expert system. php inferenceDriver.php. I answer a few questions and watch it run. I see a list of placements and a list of expert system rules. I don’t like the output, even though it’s mostly informative, because things sometimes run together. It’s time to change the script to use tabs. Done.

    The cheat sheet says that I should do manual updates next, but I think those require a conversation with the chair of Mathematics and Statistics. So on to generating sample letters. But wait! I need to update the letter. Where do we have the list of faculty to contact? (Sam searches. Sam searches some more.) Ah, it’s in the macros subdirectory. Of course.

    Reading through a few letters reminds me that there’s a lot of text to update. Oh well, it’s part of the job [10].

    After all of that, I appear to be done for today. The next steps are

    • Meet with the chair of Mathematics and Statistics to review sample letters and to manually place students with prior courses.
    • Update the images in the letters [11].
    • Review the sample text one more time.
    • Print two sets of letters - one for the advisors and one for the students.
    • Generate placement summaries and distribute to CS and Math/Stats faculty.

    I then have a few things that should happen a few weeks later.

    • Get updates on placement from Math/Stats faculty.
    • Insert those updates into the database.
    • Send updated placement info to Registrar’s office.

    At some point, maybe I’ll put all of this on GitHub so that I can more easily track changes and/or move to another system.

  2. Get Ready for Party. We are doing cake and ice cream for Eldest and Middle, who both have birthdays in the near future, as well as for Middle’s oldest friend [12]. I set up balloons and streamers and picked up the cake. The latter took longer than it should have [14]. After getting ready for the party, I went off with my family for breakfast, an Escape-room puzzle, and then back to Grinnell for cake and ice cream.

  3. Agenda for Workshop. The CS department workshop starts tomorrow. My co-leader and I are a bit behind in preparing for the workshop. Fortunately, we did prepare a rough agenda a few months ago. But it’s time to get that updated, to give folks assignments (whoops), and to gather documents. That work should have happened early last week, but the Code Camp got in the way.

    I started by creating a private GitHub repository for the workshop.

    I found the draft agenda that I came up with when proposing the workshop.
    It clearly needs some updates.

    I looked for documents that I thought would be useful. These include the College’s guidelines for external reviews and the corresponding self-study template [15]. I still don’t know why the template does not include everything that the guidelines suggest should be in a review, or why some things that I expect to be in a review aren’t there. I hope to hear from someone in the Dean’s office soon. I also dug out our previous external review and the department’s response to that external review. I also found links to the department’s learning goals [16] and information about our curriculum.

    Using all of that, I put together an agenda for the workshop, including lists of handouts and daily assignments. I also wrote a message to the department to describe what we would be doing.

  4. Move Museum and Other Materials. We’ve been shifting spaces at work. All of the museum materials got moved to either 3821 or the new CS learning center. But we have a workshop in 3821 tomorrow, so I needed to get 3821 cleaned up a bit more [17]. Let’s see … I had my kids shuffle boxes from our old second-floor storage closet to our alternate second-floor storage closet. I then asked them put in the shelves that were taken out when the old 3D printer was first put in that closet. Unfortunately, the folks who specified or purchased the shelving made a poor choice in shelving and, not so surprisingly, the half-inch screws that attach brackets to shelves had pulled out of some of the shelves. I spent way too long trying to get those shelves to work, and failed miserably. So I now have a request in to our ASA to put in an order to FM to attach the remaining shelves.

    Fortunately, there were some shelves available in the second-floor storage room, so I moved a cart-load or so of materials to those shelves. I moved another cart-load to the third-floor closet. What’s the difference? We’re trying to make the third-floor closet a bit more of a display space, so, for example, computers tend to go to the third-floor while diskettes go to the second floor. Re-cataloging the museum is going to be a huge task for someone [19].

    Since I had limited time and limited shelving, the last few loads of materials still in 3821 got moved to the back of the room [18]. I also took down some folding tables that FM had put in the room to let us store stuff. I moved a few boxes to the get rid of pile. I moved some furniture against the wall. I helped my students clean out 3813 and 3815 [20]. I moved some storage containers to my lab [21]. I reorganized the tables into a meeting layout. And, um, I did some other things that I now forget.

  5. Register Youngest for School. Okay, this isn’t a work work task [22], but it’s something that had to get done today. I’m fascinated that we are asked to read and understand a bunch of forms, and to put in a signature, but it never indicates that the signature means anything but that we read and understood. In particular, I don’t see any evidence that signing means that we agree to the policies. And since one of the policies is dated 2016-17 and another requires an explicit signature ….

  6. Generate reports from placement. I realized that it’s easier to talk about the placement issues with reports rather than with the letters, so I generated the various reports. I’m not sure that I’ll print all of them before tomorrow’s meeting, but I may. Along the way, I also realized that I had to update the instructions for making those reports. There was a short time when I thought about rewriting the code to make one of the reports, but after fifteen minutes of goofing around with code, I decided it was a bad idea.

  7. Muse. I filled in the many missing parts in this musing and reviewed yesterday’s not-yet-posted musing.

  8. Give up. There were many other things on my hope to do today listk particularly reviewing materials for tomorrow’s IP discussion and reviewing a paper whose review I keep forgetting about. But I have time and energy for neither. I’ll read the IP materials tomorrow morning. Maybe I’ll look at the paper tomorrow night.


[1] There are also a number of almost-as-essential tasks, but those will have to wait until I’m sure that I have these done.

[2] Given that I am in workshops 9 a.m. to noon and 1 p.m. to 4 p.m., I don’t have time for open-ended meetings, so it’s a start of discussions.

[3] Well, easy for me to find.

[4] Why two? One set are the instructions I wrote when learning from Henry. The other set are an updated version of the ones that Henry Walker wrote that give more detailed steps.

[5] More precisely, make new copies of the original data.

[6] There is a script that compares the spreadsheet to the database and asks what changes to make. I find it more efficient to rename by hand.

[7] Thinking about CSP almost got me down a twisty rabbit hole. (Have they posted new examples yet? Who should I write to about them? What should I write?) But I managed to keep my brain mostly on task to focus on the question of Did I get paid for being a table leader? Let’s see, they didn’t send me any email. I guess that means that I need to check my bank account statement. Let’s see. It looks like I got reimbursed for expenses on July 28. I’m glad I didn’t look before now. But what about my stipend? Yup, I got paid on June 30. It’s less than I expected, but I would venture to guess that that is because they withheld taxes.

[8] Comma-separated values.

[9] Practical extraction and report language, or some such.

[10] Is it? I don’t get paid extra to generate these letters. I’m in the period between the end of summer research and the start of classes. Maybe it’s not part of my job.

[11] There is a bit of room on the bottom of the second page. At some point, Henry Walker had the great idea of adding images from CSC 151 and from student research projects there. This year will probably be the last in which we use the 151 media computation images, but I’m hoping that we’ll come up with something based on what happens in the new 151.

[12] They were in the hospital nursery together after being born. So it’s difficult to imaging people being friends for longer.

[14] Come to think of it, the former did, too.

[15] One of the goals for the workshop is to prepare for our external review. Since there is significant overlap between (a) preparing for an external review and (b) reflecting on the status of the department, I think it makes sense to look at the external review documents now. Plus, I’m not sure when we’ll have a lot of time to get together again as a department.

[16] If I’m not mistaken, those were written twenty-plus years ago.

[17] I have been working on it the past two weeks. This is more of a last-minute push.

[18] More precisely, I moved them to the back of the room.

[19] No, not me. I won’t even supervise a student doing the inventory. I hope that Henry will.

[20] Yes, my students are so awesome that they came in on a Sunday to clean up after the code camps.

[21] I had hoped to stage the sorting of my lab from 3821, but did not get around to it last week.

[22] Neither was preparing for the party, just in case you couldn’t tell.


Version 1.0 of 2017-07-30.