July 2007


There’s good reason for celebration today — first, that our 4th iteration is complete with the release of 0.1.3… and second, that I actually did do 40 posts in 60 days! Now the goal is that I don’t forget everything I learned in the next 3 weeks while I’m overseas. :)

Here’s some thoughts on this last release.

  • I’ve been reading more and more bad things about using the Designer in ASP. I think the conclusion I’ve been converging on is that the Designer is good for rapid prototyping of something that looks halfway decent, but doesn’t do anything really weird. The big problems of the Designer, as I see it, are 1) inflexibility to accommodate different models, 2) hiding important implementation details under an abstraction that seems nearly as complex the implementation underneath it, and 3) poor setup to test, especially for regression testing. One of my issues as I added new functionality was that there wasn’t an easy way for me to go back and see if changes I had made (especially DB changes and page name changes) were going to break certain pages.
  • One more thing, ASP does make many things very simple, but to use it powerfully, you really do need to learn a lot of things about it. My main complaint about this, is that because they have that abstraction above the guts of what’s really going on, you aren’t really learning a whole lot about web development in general that you could transfer to developing in say, PHP or JSP. For someone who likes killing two birds with one stone, I feel incredibly inefficient when I learn more about ASP, because I feel like I’m learning about what a particular company’s interpretation of web development is… or worse, what that company would like it to be. Then again, that company is Microsoft, and I think a few people buy their stuff… so maybe it’s worth learning even though it won’t transfer much at all.
  • I’d really like to find some good books on developing under ASP, but in an inherently test-driven way. I know there’s a better way, since I’ve seen pieces of things here and there on different blogs, but I don’t know yet of any book that takes you step by step through it. Finding a book or similar resource is something I’d like to do when I get back.
  • As far as Agile/XP goes, so far I think it’s a raging success… and I don’t really even think I’m implementing much of it. I think I have benefited most from the philosophy of small, incremental changes and the willingness to be wrong and try things out. It’s not a bad way to actually learn a new language/development framework.
  • Some notes to myself for when I get back:
    • I have a relationship between ClassID and StudyGroupID in two places. Maybe that should just be one, so I don’t need to worry about DB integrity.
    • It’s time to learn something about entity classes and how people do that in ASP.
    • The Administrator and Teacher role might be different in a full-featured website, but considering the scope of this project, it would be better to just collapse these roles into one.
    • Right now, most of the pages outside of the Admin directory are shown from the directory of the student… but others, such as View Class, need to be shown from the perspective of the teacher.

Alright, that’s all for now. I will be back in 3 weeks and will get back with Release 0.1.4 in August!

This story basically involved doing some house cleaning and small assorted improvements as the last part of this release.

First, I noticed that having separate StudyGroup_User and Class_User join tables was necessitating messy, multiple join statements in the SQL queries. But the thing is that StudyGroups and Classes have a many-to-one relationship, and that a study group could not belong to more than one class. More importantly, if a user belonged to a class, the user could not belong to more than one study group. Therefore, I could instead add StudyGroupID as a field in the Class_User table and completely get rid of the StudyGroup_User table.

Here you can see the cleaned up DB diagram, which also shows the new Lesson table created earlier in the release. The DB change required a few pages to be changed to use the new field and remove references to the now defunct StudyGroup_User table.

DB Diagram 3

I did a little cleanup of the pages as well. There didn’t seem to be a compelling reason for a “View My Classes” page, since we already show this in “My WBI”, so I removed this page. There is a “View My Study Groups” page as well, which had a stronger reason for existing. If you remember, we just created an empty page as a placeholder for this, so in this story the page has been implemented, with links to the appropriate View Class and View Study Group pages.

My Study Groups

It was a good thing that yesterday’s story was much less than the estimate, because today’s was about the same magnitude over. This was mostly an oversight in my estimates, since of course viewing a table’s data should be much easier than implementing creating and editing one.

The first thing I realized was that I had an admin page for editing classes, which was called “Edit Class.” After the evolution of the site, it became clearer that this wasn’t the best way to structure the site, so I reorganized the navigation and page organization, so that under the Admin area, the user could view all the classes in the database, and then from there click on a link to edit the class information (right now, just the class name) and edit the class lessons.

I created a separate, new page for editing class information, as well as an edit lessons page with a list of lessons for the specified classid. From there, you can edit the lesson directly, or you can create a new lesson.

Edit Lessons

I’ve become much more comfortable with the GridView, but I’m still pretty unenamored with using the DetailsView to insert items. The main reason is that it shows the first record in the database, and the Insert button (in this case I changed the button text to “Create”) to clear those and bring up the form fields. I figure there must be a better way to do this, but I haven’t found them yet.

Create Lessons

After insert is clicked, you can see the newly added lesson in the class lesson list.

View Lessons

Another straightforward story today. Here, we’re taking the new data fields made available by the new Lessons table, and displaying the associated lessons of a particular class in its view class page. Similar to the other gridviews on this page, we are using the classid as a request parameter to generate the appropriate SQL statement, and in this case we are also doing an ORDER BY start date, in order to get some natural sequence.

I decided earlier on that I wouldn’t add some sort of sequence number to these lessons, because as someone who has taught before, plans change and you end up skipping around. It would make more sense to just change start dates, and have that be the determination as to which lessons appear first.

Because the view class page currently is intended for student users, it didn’t seem all that meaningful to display the # of total points that each assessment was going to be. Not that this is not useful for the student to know; just not on this page. It would probably make more sense to show this on a page where the student was viewing progress and assessment records.

But the student does see the dates of the assessments, as well as the required mastery level needed, expressed as a percentage. The display of all this data was mostly accomplished through the existing gridview setup, but I tweaked a little with the formatting to get something close to what a student might expect.

View Class Lessons

Incidentally, the story was implemented way under the 1.5 hours estimated, so I guess I should be happy that my pace is quickening.

Today’s story involves adding instructional units to the database. Since that’s a mouthful and might be confusing terminology to people outside the education academia realm, we’re going with a simpler term, “Lesson.”

The purpose of the lesson table will be to store the definition of the lesson — the lesson name, as well as its data relevant to the mastery learning method. In particular, there will be a start date and a date for the 2 assessments. Any practice that the students do will occur between these dates.

Also, in this lesson we specify the number of possible points for assessment 1 and 2, as well as define what level of achievement (as a percentage) constitutes mastery.

Lesson Table

The data fields are pretty straightforward, with the LessonID obviously being the primary key and being auto-numbered, and a foreign key relationship with the Class table.

The rest of the time for the story was for setting up test data with some simple lesson records for the Arithmetic class, which is mostly for helping testing, and also a lesson record for vectors in the physics class, which will be the more “realistic” lesson module.