Priorities - A: high, B: medium, C: low; Status - _: unfinished, X: finished, C: cancelled, P: pending, o: in progress, >: delegated. Covey quadrants - Q1 & Q3: urgent, Q1 & Q2: important
A1XRenew my ACM subscription (E-Mail from ACM Member Help <acmhelp@hq.acm.org>)
16:30 Ethics discussion at the philosophy department - bring impactcs docs

1. info links from Emacs : 14:26

Categories: None -- Permalink
;; The following functions to insert info-links into a buffer were originaly
;; posted on gnu.emacs.gnus by Reiner Steib, August 2003.
;; Message-ID: <v9smo83rof.fsf_-_@marauder.physik.uni-ulm.de>

(defvar jk/info-goto-node-string "info" ; "Info-goto-node"
  ;; Stefan Monnier suggested to use `info' instead of `Info-goto-node', but
  ;; this doesn't work for XEmacs.  OTOH, Reiner says he submitted a patch for
  ;; XEmacs, so "info" should be okay.
  "Command string to insert with `jk/insert-current-info-node'")

(defun jk/current-info-node (&optional arg)
  "Insert reference to current Info node in buffer.

If ARG is...
- nil:	Insert `\(info \"\(file\)node\"\)'.
- 4 (\\[universal-argument]):	Add a note about `C-x C-e', too.
- 16 (2 \\[universal-argument]'s):	Insert `<info://file/node>'
- the symbol `string':	Only return the string, don't insert.

In emacs-lisp-mode a custom link is inserted."
  (interactive "p")
  (let ((what
	  ((eq major-mode 'emacs-lisp-mode)
	  ((numberp arg)
	    ((= arg 4) 'gnus-url)
	    ((= arg (* 4 4)) 'info-press)
	    (t 'info)))
	  ((eq arg 'string)
	  (t 'info)))
	(buffer (buffer-name))
	(ret ""))
    ;; The next lines are borrowed from Karl Pflaesterer's code in
    ;; <m3eli7tgp0.fsf@hamster.pflaesterer.de>.
    (set-buffer "*info*")
    (let* ((node Info-current-node)
	   (nodeurl (jk/replace-in-string node " " "+"))
	   (file Info-current-file)
	   (fileurl (file-name-nondirectory file))
	   (fileurl (jk/replace-in-string fileurl "\\.gz$" ""))
	   (fileurl (jk/replace-in-string fileurl "\\.info$" "")))
      (set-buffer buffer)
      (setq ret
	     ((eq what 'lisp)
	      (insert ":link '(custom-manual \"(" fileurl ")" node "\")")
	     ((eq what 'gnus-url)
	      (concat "<info://" fileurl "/" nodeurl ">"))
	     (t ;; (or (eq what 'info) (eq what 'info-press))
	      (concat "(" jk/info-goto-node-string
		      " \"(" fileurl ")" node "\")"
		      (if (eq what 'info-press)
			  "; <== Press C-x C-e here!"
      (if (or (eq what 'string) (eq what 'lisp))
	(insert ret)))))

(defun jk/boxquote-info ()
  "Boxquote current yank-buffer and put current info node in title"
  (boxquote-title (jk/current-info-node 'string)))

2. CS21A today and Monday : 15:56

Categories: None -- Permalink

The files mentioned can be found at http://sacha.sachachua.com/cs21a/ .

Looks like my thinking out loud does have its uses, so I'll resume posting my reflections both on the CS mailing list and on my wiki. =) At the very least, it may give someone something to laugh about.

What went well

- Preparing Flash modules for self-paced learning.

- The Text Twist exercise.

- Being observed and swapping ideas. Feedback is useful.

What needs work

- I have unbrilliant days. Lack of preparation, unconducive class

mood, whatever - I need to learn how to deal with unbrilliant class days effectively.

- Fewer answers, more questions. Should help students develop

independent learning things. Am trying to focus on preparing Flash stuff for things that aren't in the book or are hard to explain, but I should help people get used to learning from experimentation, API docs, and cool Java sites...

On unbrilliant days

Last Monday, I had an unbrilliant day. It was one of those blank-faces day when all the examples one had thought about just fall flat. The words just felt thick in my mouth. I saw blank, sleepy, not-quite-getting it faces everywhere. Eep.

After the class ended, I fled to my cubicle and hid under my desk. (Hehe.) Having decided this was not a particularly productive way to deal with the stress, I went to Starbucks for some emergency hot chocolate. (Note: It helps to know what helps you cheer up.)

I met one of my friends there, and he reassured me that although people occasionally have unbrilliant days, I could try to make up for it on Wednesday. He let me sulk a little more over my hot chocolate, though. That was actually kinda fun.

Recharged, I went back to the department and started (somewhat guiltily) preparing for the next class. We had gone over growing arrays in class, but not everyone understood how and why it worked. I spent the afternoon learning Macromedia Flash and making a presentation that demonstrated the steps. (It was my very first real Flash movie! Achievement!)

On different ways to learn

A few of my students dropped by that afternoon for some consultation. One needed help with bubble sorting (an algorithm I have come to terms with - it may suck, but it's much easier to teach). I lent her a few coins and asked her to sort them by date. Without further input from me, she figured out that she was missing the outer loop. I like asking students to walk through an algorithm using whatever physical objects are handy. I need to have things that are more sortable, though, and I need to keep ideas for other topics. (Creative ways to explain ...)

Some students needed help with growing the array and with sorting Strings. We dealt with sorting strings first - clarified the behavior of compareTo. I pointed out to the students that they needed to compare against 0, not against 1, and they figured everything out from there. They were able to sort ascending and descending, too. Yay! It was a quick bugfix, but maybe I should've helped them develop the habit of checking against API documentation instead of relying on someone else to point out the error. Next time, I'll provide fewer answers (or maybe none at all!).

I had just finished my Flash presentation on growing arrays, so I uploaded it to the course mailing list and pointed them to it. They went through the tutorial more passively than I'd planned (note to self: find ways to make modules more engaging!), but they absorbed the main points. I think it helped that they controlled the pace. They were helping each other learn. I was around to observe them and suggest exercises. I think it worked well even though the Flash presentation was basic. Although they ended up rapidly clicking through the slides instead of doing the suggested exercises (which was not a bad thing given the environment, I suppose - they can do that when they're home), the graphics helped them understand what was happening behind the scene. I felt more comfortable with the quantity of text on my "slides" because students could go through the Flash show at their own pace and they didn't have to divide their attention between me and the slides.

On consultation

I'm glad that my students drop by for consultation. Well, hmm. Actually, that's kind of strange. If I were a Really Good Teacher, they might not have to drop by for consultation because they'd understand class lessons right away. Then again, people learn at different rates, and I don't think it's realistic to expect people who have never programmed before to be able to grasp all the concepts right away. I feel it's a very good thing that students feel comfortable enough to drop by and ask questions, and I actually look forward to these consultations. (That said, there are a few I haven't seen in the department yet! )

Flash module preparation

I spent Tuesday preparing more Flash modules for my CS21A class. I'm still treating it like a Microsoft Powerpoint substitute, and I'd like to learn how to use it more effectively. (For example, that drag-and-drop thing looks _really_ tempting for arrays.)

I prepared modules on file reading, args[], and exceptions. They're on the course site at http://sacha.sachachua.com/cs21a/ if anyone wants to look. I've probably missed most of the guidelines for computer aided instruction (), but the source is available so that anyone who wants to modify it can (and is indeed strongly encouraged to do so).

Today's class: fun!

I was very pleased with class today. I had several points I wanted to make:

- The human way of solving things may be different from the computer

way of solving things. We need to learn how to take advantage of the computer's strengths - lots of memory, fast processing - while dealing with its weaknesses (not very creative).

- Files are useful. =) Reading data from a file saves you from having

to type it in again and again and again and again.

What made this fun was the choice of the example: Text Twist. A familiar game, and something I personally like. Their task was to print a list of all the words with 3 or more letters that could be found in the jumbled letters given. They also needed to sort this list by length to match the Text Twist game and to make it easier to find the longest word.

Human way

Pick random letters and see if that's a word. I know I tend to hit Twist a lot in order to get that all-important longest word... ;)

But how many possible arrangements of letters are there in a 7-letter game with no repeated letters?

(All together now, or our discrete math teachers will be very unhappy)

7! possible 7-letter words!

Only 5040 possible permutations, but still, you'll have to either - teach students how to do permutations - swap letters randomly and pray ;)

Computer way

Go through every word in the dictionary. Check if it's contained in the puzzle string. Print out the ones that are.


I provided WordTester.java, a utility class with a method to check if one word is contained within another. Because it uses code they can understand, I provided the source code as well.

This way, we could focus on files and vectors instead of the algorithm for checking if one word is contained within another. NOTE: That might be a good lead-up lab exercise for arrays as there are several ways to solve the problem and the problem requires some thought.


The students were glad to work on a familiar problem, and they seemed more comfortable because they had step-by-step instructions they could work through at their own pace. They worked on a program that looked somewhat useful (heck, I'd have written that just for myself). I hid the thorny part of the code in WordTester, so the resulting dictionary search program was very clean (19 lines in the non-length-sorted version).

Flash is a little limiting because of screen size and amount of code I can fit in. I think I should prepare supporting webpages and then use the Flash slides to give an overview and to highlight important parts of the code.

I'm glad I kept checking on their progress, though, as some were having problems with JCreator output path settings or typos. A few missed the "throws IOException" part. I need to make that a little bolder in the text.

NOTE: Students might be able to benefit from an asynchronous way of asking for help. Some students are too shy to call my attention when I'm halfway across the room. Teaching assistants can be very helpful. Actually, this could be a good thing - they're _trying_ to figure it out on their own. Maybe one way to deal with this is to have them signify that they're having a problem as soon as they encounter it - a red flag on their desk? ;) - but have them continue working on it until a teacher or TA can get to them. When the teacher/TA gets to them, the student can then explain what the problem is and what the student has done to try to solve it so far.

I am pleased to note that the shy students have been able to keep up with the lesson. I've been getting rather excited out-of-class e-mail about how far they've gotten. =) I suspect that they like the combination of clear goal + control over pacing + extra information when they want + monitoring.

On observation and feedback

A friend of mine has made time to regularly observe my classes and I appreciate that greatly. He gives me feedback afterward, too. =) I find that knowing I'll be observed puts a little more pressure on me, but it's pressure I welcome. I'm excited by the opportunity to try out something new and reassured by the idea that even if I mess up, at least someone can help me analyze my mistakes.

I should take a video camera to class one of these days.

Posting my reflections on the mailing list also forces me to process and analyze more. What went well? What do I need to work on?

I find that I also tend to 'observe' myself more. I use "um" and generic language more often than I should, and I will strive to be more precise. That said, today's class delivery went well. They picked up on my enthusiasm - or I picked up on theirs - and everyone was working.

Teaching assistants could probably also fulfill this role if we empower them a little more. I remember distinctly thinking that my role as a teaching assistant was mainly to check papers. I delivered the occasional lecture when the instructor was unavoidably absent, but that was about it. I wonder if we might not be able to involve our teaching assistants in the process of instructional development, asking them for exercise ideas and feedback on how we teach. They might not know a lot about teaching, but they may be able to tell us something from the student's point of view, and they may have creative ideas that hadn't occurred to us.

Besides, they're probably more in touch with pop culture than we are. Or, well, at least, than I am. I am horrendously out of touch. I haven't consciously made an effort to keep track of the latest fads. I don't even watch TV. I might want to keep a closer eye on the popular games - Text Twist was fun, and there are a number of things I can draw on for exercise ideas.

3. Ethics talk with the philosophy department : 17:57

Categories: None -- Permalink
- Sandra Lovenia, introduction to IT for comtech, introduction to MIS. - Ariel Maguyon, seniors and juniors, computer architecture, MIS administration - Em-em, part-time, MIS office. Teaches MIS101. - Andrei, currently teaching computer architecture and will teach operating system - Manny Dy, foundations of moral value, chinese philosophy, ph of the human person, business ethics - ... Valdez, philo of religion - John Bulaong, ph101. next sem, teaching logic. 6th year of teaching - Roy Tolentino, philo of the human person - Roie Lozada, philo of the human person, technology's a personal interest - Rainier Ibana, interested in communications - Stephanie Sy, intro course - Albert Medalla, web page design - Christine Amarra, intro course and computer organization for CS juniors
- Description of handouts prepared by Bong Olpoc

We want to help students develop ethics. Present the way we currently teach it and then get insights

- intellectual property - software reliability - privacy - piracy - relationships, posing as someone else, questions of identity and truth

Short-term: talks

Long term: elective, maybe core?

first topic: IPR

Dr. Dy - excerpt from business ethics book

4. Flash MX on Linux : 18:06

Categories: None -- Permalink
Apparently, Flash MX is supposed to work under WINE. I should look into installing it, then. =) http://frankscorner.org/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=28&page=1 for more information. Update 2003.09.25: The dcom file can be found at http://download.microsoft.com/msdownload/dcom/98/x86/en/dcom98.exe

5. chora : 18:30

Categories: None -- Permalink

Chora is a CVS repository viewer that I learned about from #php. I _thought_ I'd blogged about it, but I grepped and it wasn't there. Luckily, I ls *.tar.gz'd my home directory and it was the only tar gz there! Yay!

6. HTML_Form and passwords : 20:35

Categories: None -- Permalink
Pfft. HTML_Form from http://pear.php.net is not so nice when it comes to passwords in forms.

7. Khaire - literary night for tomorrow : 22:01

Categories: None -- Permalink
From the announcement:
"Khaire: Magsaya!:A Literary Night," reading by accomplished poets, 6-8:30 p.m., Quad 1. Be alive and rejoice at the medley of rhyme and play, rhythm and prose, all on one night that celebrates the words born from the tips of our tongues and pens. Heart and souls are poured into generous servings of articulacy, but always never forgetting their aim to delight. This is Lit Night where utilitarian verbosity takes a backseat to tempered eloquence. Listen to the open mic poetry readings. Feel the power of drama. Savor the musical prowess of home-grown bands. Read the magnum opus of the greates Atenean writers. Share in the richness of the Ateneo's literary tradition. Performers and guests include Tanghalang Ateneo, Spongecola, element #5, Marj Evasco, Cirilo Bautista, Pete Lacaba, Becky Anonuevo, Neil Garcia, Ophelia Dimalanta and many more.

Oh, there goes my scheduling...

8. CS21a ideas for vectors : 22:17

Categories: None -- Permalink

I want students to be able to keep track of the elements of vectors. I also want them to become familiar with the common operations:

- size() - add(...) - get(...)

I want them to be able to predict what happens to a vector during a sequence of operations. This is important for tests and for tracing through code. I think I can make another Flash animation module with hints that show the vector's contents.

Then I want them to be able to complete the Text Twist exercise. I'll need to teach them how to define comparators and to use Collections.sort.

Plan for Friday:

brief status check on reading from files

Submit to me an algorithm in English on paper _before_ you code.

- reading through the dictionary and getting a Vector of all the words that are contained in the given letters - reading through the dictionary and getting a Vector of all the words that are contained in the given letters, sorting this by length - reading through the dictionary and picking a random 7-letter word, then scrambling the letters in that word - advanced: creating a simple graphical user interface: label, text field, "Enter" button, "New Game" button, "Twist" button. - advanced: make a Text Twist clone. ;)

9. Links from the past : 22:44

Categories: None -- Permalink
First noticed on 2003.02.12

- Redesigning an Introductory Java Course to Bridge the Gender Gap (http://www.contrib.andrew.cmu.edu/~tshih/THESIS/thesisFinal.doc) - Introduction to Programming Using Java (http://math.hws.edu/javanotes/)