Putting the magic in the machine since 1980.
Wednesday, November 6, 2013
Senior Capstone Project with GitHub
I am using git and github to keep all the 14 different projects on the same page, more or less, or at least, to keep me from completely losing control. The github wiki pages come in handy for keeping all the other project-related documents: Design, Architecture, and Requirements documents.
To learn more, check out my git and github videos and presentations.
Tuesday, August 28, 2012
Teaching Web Applications: github and youtube
git pull all the project locally right after the deadline, so then I can just open them up and run them, then maybe make some minor changes and push them upstream for the students to use.I am also trying to flip the class, as I did in 145, by making youtube screencasts and assigning readings and then dedicating class time to one-on-one help with their ongoing project.
One interesting note is that the number of views on my Java tutorial videos did not go down after the semester was over but instead has stayed roughly the same over the Summer, as shown below. Perhaps this is a reflection of the current larger trend of 'everyone should learn to code'.
Thursday, June 14, 2012
Constructive Network Formation Models
Gary Fredericks recently presented a poster at AAMAS on our recent work on An Analysis of Constructive Network Formation Models.This is really interesting theoretical work where we are looking at the possible topologies that can emerge given initial payment rules. For example, given a bunch of disconnected nodes (think ISPs before buying access to any other ISP, or businesses before establishing relationships with any other, etc.) and a rule that says that any link between two nodes has a fixed cost which must be paid by the two nodes in questions, but where everyone benefits from being closer (fewer edges between them) to everyone else, what kind of topologies will we expect to emerge if we let all agents build edges as they see fit?
We examine this problem in part by building graphs of graphs. That is, we built directed graphs, such as the one you see here, that show the possible evolution of these networks over time. From these we can then determine which topologies, or which features (small-world, small-diameter, etc.) are more likely given different initial rules of the game (equal payment for edge, one must pay, auctions, etc.)
Thursday, May 3, 2012
Online Classes are Just the New Textbook
This semester was the one where online programming classes really took off, with new startups like Audacity, Coursera, and CodeAcademy, all of them inspired by the now 11-year old MIT Open Courseware. These online courses are getting a lot of press because of reported hundred of thousands of students signing up. I told all my 145 students about these resources at the beginning of the semester, along with my own videos.
So, did the students learn more this semester than in past semesters? No. As evidenced by the in-class final, their proficiency at the end of class remains the same (I first taught this class in 2006).
I think videos are a great alternative way to present information, and the more different ways we can present the same idea to students the more likely we are to reach them. I will continue to use all these online resources in my own classes and continue to make my own videos, and I hope the videos get even better. But the fact remains that there is no teaching, there is only learning. That is, if one wants to learn how to code there is simply no alternative but to sit down and spend hours upon hours practicing (replace 'code' with 'play the guitar', 'do calculus', 'write well', 'play golf', etc). A teacher/book/onlinecourse cannot do the learning for you. The learning is all up to you.
Online classes like those from udemy and coursera attract those who are not in school (and, mostly outside the US) who have a deep desire to learn a specific topic (like, programming, to get a job). These people would have learned the subject by reading a book and practicing (just like I learned programming in high-school by reading a book and practicing with my Apple IIe). The online class just makes it a bit more pleasant, for some, and most importantly it is free. A textbook can easily cost you $100.
The ongoing challenge is not putting more courses online. That will happen, of course. All information is, or will soon be free. The challenge, and the job of Universities, is in guidance and certification. There is no way one person can learn everything so, what should he learn? Is it at the right level for the students in class? Most (all?) MIT and Stanford CS freshmen already know how to program, so their 101 class should be much different from ours. Then, can we certify that the student has indeed learned what he claims and not just outsourced his homework? It is trivial to cheat in an online class.
My 10-year old son is learning about percentages. I wish I could put him in front of some Khan Academy videos and have him do their practice exercises and, boom, he would be able to tell me if 10% off a $18 purchase is a better deal than 2 for the price of 1 at $15. I tried it. It didn't work. I still love the Khan Academy and we use it a lot, but it does not replace practice.
Saturday, March 17, 2012
Web Applications Class, for Graduate Students
Also, if you are a graduate student and want to take it come talk to me, we can probably work out that you can get CSCE 798 (directed study) for it. And, if you are a PhD student interested in doing a thesis related to web applications, online communities, or agent-based simulations (even better, all of these together!) come talk to me!
Friday, February 10, 2012
Interactive Quiz Web Application
Friday, January 20, 2012
Java Tutorial Screencasts
In the mean time, the Kahn Academy has taught us that 10 minutes seems to be the magic number for online tutoring videos, after that people find it too unwieldily. Thus, I re-did all the videos for this semester. Now I have about 60 Java (and eclipse) tutorial videos. Youtube is gathering data on views. Let's see what happens.
Sunday, June 12, 2011
iPad App for Taking Surveys
I've been playing around with mobile webapps and JavaScript toolkits like Sencha touch and jQuery mobile. With all the news about native iphone apps, a lot of people forget that one can easily build iphone/ipad webapps that work offline and let you bypass the Apple store (so, no waiting weeks for approval, just upload it to your own website).
Dr. Jim Thrasher, from the Arnold School of Public Health, asked me to build an iPad app for his survey-administrators to use in administering surveys. The iPad is used to randomize questions and store all the survey answers, which are later uploaded to the server, when an Internet connection is available. The server is a google appengine web app.
Lessons learned:
- Offline webapps are possible (almost too easy) on the iPad/iPhone. But, I had to train the users on how to clear the Safari cache whenever I put out a non backwards-compatible version.
- A JavaScript toolkit like jQuery mobile or Sencha touch is needed for all its widgets. We need more widgets: this is probably the biggest current limitation.
- My app auto-downloads and installs the latest version the moment it is run, kinda like Chrome, thus enabling a fast development cycle.
Friday, May 6, 2011
A Webapp for Turning in Programming Homeworks
Since I had to grade about 20 programs every week and since these howeworks were webapps themselves that would be posted on some website that I could test, I figured that best way would be to have a pastebin-like app that allowed me to view all submitted homeworks. No such thing existed so I built one and called it i-am-done.
I used it last semester and it works very well. I allows one to:
- create a class, and homeworks for it, giving each one a due date,
- get a simple URL to give students for turning in programs for that homework,
- view all the submitted howeworks for each student, in nicely colorized code thanks to prettify,
- students can upload and delete any number of files associated with a particular homework but, of course, they can't see anyone else's homeworks.
It is like a paste-bin where only the person that created the class can see the code pasted under that class. I have placed the code here in case someone wants to make a fully featured system out of it. I would loooove to see that.
Web Applications: An Undergraduate Class
Yet nother semester of teaching web application development has passed. This time, finally, I had a significant number of students (30) signing up although, after it became clear this was a programming class, fewer (17) remained. This is to be expected as programming takes time and not everyone has the means.
A few interesting tidbits I found.
- Most undergraduates know little about web technologies. I kinda assumed that because they grew up with the web that they would know the difference between a GET and a POST, but no. There is a large knowledge gap to be filled in. Luckily, these are easy things for them to learn.
- There is a steep learning curve to developing modern web applications, and it keeps getting steeper every year. A lot of complex technologies that must be mastered: HTTP, HMTL, CSS, JavaScript, Databases, Ajax, jQuery, JSON, Cookies, Firebug, functional programming, REST, event handling, asynchronous lambda functions, the browser's loading orders, etc. (oh, and Python) One semester is only enough time to introduce a student to most of these, but not all, and mastery will require more time spent programming than is afforded. Still, a lot can be learned in one semester.
- I am sure some hated that we had 13 weekly homeworks, each one a significant programming project, but there really is no other way to learn all this stuff. It is one thing to read about Ajax, actually implementing a webapp that does it is a completely different matter.
- Its all about the JavaScript: Facebook moved to a JavaScript SDK in their platform, Google is using JavaScript as glue to for their 'apps enterprise', and node.js has gotten really popular. With jquery and firebug (or chrome developer tools), JavaScript is a lot of fun to learn and debug. However, its tricky to figure out the timing on how various parts of a page are loaded by the browser and, even harder, how to decide what code goes in the server or the browser, not to mention JavaScript's many many quirks.
- The google app engine works as a learning platform. It is minimal, reliable, and on the web (not on the student's laptop) so we all can see what we all have done.
Onward.
