Carnegie-Mellon heavy on distance learning

There 4 big CS schools in the USA, Stanford, Berkeley, MIT, and Carnegie-Mellon. How you define “big school” is left to you, but I’m taking the word of the president of the ACM on this. Carnegie-Mellon University offers the Master in Software Engineering and the Master in IT in distance learning mode. Maybe this says something about how far distance learning has come?

Formatting advice everyone should know

I just finished reviewing, as an editor, some of the camera-ready papers for CSWWS 2006. Here are some rules everyone ought to know:

  • When citing papers, do not use multiple brackets (such as [1][2][3]), use a single one (such as [1,2,3]).
  • Typically, we abbreviate see “Figure 10″ to “see Fig. 10″, but never, never, do we abbreviate “see Table 10″ to “see Tab. 10″.
  • Your abstract should be self-contained: no reference to a footnote or to your reference section should be made in the abstract.
  • Non-breakable spaces are your friends. Under Word, you can get a non-breakable space as [ctrl][space]. Use them before most references such as “Fig.{non-breakable}10″ and “as in{non-breakable}[1]“.
  • Don’t use bitmap images unless you know what you are doing. If you are using bitmap images, turn off the compression. I know the image looks fine on your screen, but high quality printing and bitmap diagrams don’t mix.

It doesn’t matter how brilliant you are, if you don’t follow these rules, people will notice and your paper will get lower reviews and fewer citations.

Mixing Web Services And Collaborative Filtering

Ever since I worked on Collaborative Filtering, people have asked about applying ideas from Collaborative Filtering to Web Services. Well, I found a recent paper that seems to cover this topic:

U. S. Manikrao, T. V. Prabhakar, Dynamic Selection of Web Services with Recommendation System, International Conference on Next Generation Web Services Practices, August 2005, Seoul, Korea.

Sci-Fi Writer, Math Professor and Communist, All in One!

As a M.Sc. student, the most influential professor to me, at the time, was Chandler Davis. He taught a great Operator Theory class. Though I don’t recall much of Operator Theory at all, I remember that his classes were great. He vaguely suggested Wavelets as an interesting new field. Sure enough, I went on to write a Ph.D. thesis on Wavelets and made a living out of Wavelet-Based software for the medical and geophysical industries.

Now, there were many stories about Chandler Davis, but how to tell which ones were true? Well, his wikipedia page gives credibility to some of the stories:

As for his writing career he began publishing in Astounding Science Fiction in 1946. From 1946 through 1962 he produced a spate of noteworthy science fiction stories mostly for Astounding.

Chan Davis came from a radical family and was a socialist. His refusal to cooperate with the House Unamerican Activities Committee led to his dismissal and a six month prison term which he served in 1960. After that he left for Canada where he resides to today.

Now, you may ask, is it ok to be an evil communist in Canada? All I can tell you is that he had his office far away from the Mathematics Departement. Somewhere in a dark basement. His office had some socialist propaganda on the walls.

His home page suggests he proved that variance < = (max – average)(average – min). I didn’t know this result, though it is intuitively correct. Anyone knows what the proof looks like?

Must start a company to be a succesful Stanford professor?

The president of the ACM comments on the culture that prevails at the Stanford CS Department:

“What sets Stanford apart is the startup culture,” said Patterson, the Berkeley professor, adding, “I have this sense that it’s an almost unwritten rule that you have to start a company to be a successful professor at Stanford.”

Wow.

Can you imagine if professors were strongly encouraged to start companies? If the commercial success of their ideas was viewed as something really positive?

Crazy ideas like this could change academia forever.

The problem, of course, is that when they tried to do it, in Canada, people started fake companies just to get the grants and the net result was just a waste of time for everyone involved. By “start a company”, you have to mean more than “incorporate”.

Computers live their lifes in sensory deprivation

Computers live their lifes in sensory deprivation

This is a quote from my friend Martin Brooks in relation with an earlier post of mine.

AI requires huge volumes of data to exist: what about learning?

This has been around for quite some time, but it keeps on popping up left and right. “Google (…) believes that strong AI requires huge data volumes to really exist.”

Since nobody knows what is required for strong AI to exist, this is a currently non-falsifiable conjecture. One thing is for sure is that it takes several years, for a human being to hope passing the famous Turing test. My 4 months old baby can’t pass the Turing test.

So, there is strong evidence that you need lots and lots of data before intelligence, as defined by the Turing test, can emerge.

Now, what does it say about “learning”? It seems to imply that to “learn”, you need to be exposed to lots and lots of data. This suggests, maybe, that the web is the real future of learning because, face it, there is only so much an instructor can convey to a group while spending hours in front of a black board. I can look up facts and theories much faster through the web, though this is recent as, until a few years ago, the black board was still a more efficient way to gather data and, in some instances, like mathematics, it still is.

One interesting conclusion though is that broadband ought to be very useful to learning. If being exposed to lots and lots of data is required, then you need broadband. What am I doing here, in my basement, with my cable modem? I need a T1 stat! Oh! Right! I’d still be limited by how fast others can deliver the information.

Theorem A large data output is necessary for having a rich learning experience.

So, if you have online content for a given course, the relative performance of the server does matter. Multimedia content does matter.

Or does it? Notice I didn’t attempt to prove my theorem. So, let’s call it the “Lemire conjecture” for now.

We need better text forms on the web

Web forms are evil. You know these things where you enter text in a text box and then click submit? Yes, I know there are better, more XMLish, ways of coding them, but my beef is with the current user model of a text form and I don’t see this changing any time soon unless the browser people start paying attention.

  • There is not builtin protection, at the browser, for a crashed server. So, you can fill out very long forms and lose all of your work because the server crashed. No, the back button may not work. Conceptually, there is not way to tell how the back button will behave with respect to web forms and it is a poor substitute for a saved copy of your work.
  • Spell checking is still not supported by default by most browser. Why?
  • Most standard text editing functions are not supported by most browsers (such as “search and replace”). Why?

Tools like gmail, using AJAX, manage to get most of these functions right, but why isn’t it supported at the browser level? At least in an optional way. For example, when you submit a form, the browser could save a copy of all text content in a local folder. Security you say? Well, the security people can handle the issues this would create, I’m sure.

We need better. We need it badly.

Thoughts on Software Complexity

Kurt shares with us his thoughts on software complexity:

Over the years, I’ve noticed that in programming, as in other systems, there seems to be a fairly invariant rule out there:

You can never eliminate complexity from a system, you can only move it from place to place.

Yep. This is yet another instance of the No-Free-Lunch Theorem. It basically says that while you can find more accurate algorithms, very often, all you are doing is specializing your algorithm to perform better in some conditions, but worse in others.

Of course, specializing is good. Some cases are more important than others. But be skeptical if someone says that X is better in every respect than Y. There is, usually, a catch.

The same must be true in software. Fancier platforms make it easier to do some things, but harder to do other things. What you have to worry about is whether these cases are important for you.

J2EE, at least the early versions, is a beautiful example where the designers did a great job at making some cases very easy, while making others, very important cases, much harder, leaving J2EE developers in tough spots.

Opening lots and lots of files under Linux

Suppose you want a program, or a process to be precise, to open 10,000 files simultaneously. For some reason, I thought that, by default, this would be possible, but it seems that Linux sets the the default limit to 1024 files on most distributions we checked.

First of all, check how many files your system allows you to open simulateneously:

# cat /proc/sys/fs/file-max
101066

On my system, as you can see, a process should be able to open 100,000 files simultaneously without a problem. If your number is much lower, you may need to do some extra work.

Unfortunately, there are security settings above and beyond this number. To get around them, add the following line to “/etc/security/limits.conf”:

* - nofile 100000

Then, you need to log in again (fresh, not within X). To make sure it worked, type

#ulimit -n
100000

As you can see, it worked for me.

To make double sure it works, you might try to run the following C++ program:

#include <fstream>
#include <string>
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
using namespace std;
int main() {
fstream lfs[10000];
for (int k = 0 ; k < 10000; ++k) {
stringstream strs;
strs << "stupidtest" << k;
lfs[k].open(strs.str().c_str(),ios::out);
assert(lfs[k].good());
if(lfs[k].good()) {
cout << "file created "<<strs.str()<< " ok!" << endl;
}
}
for (int k = 0 ; k < 10000; ++k) {
stringstream strs;
strs << "stupidtest" << k;
if(lfs[k].good()) {
cout << "file "<<strs.str()<< " still ok!" << endl;
}
lfs[k] << k;
if(lfs[k].good()) {
cout << "file "<<strs.str()<< " still ok
after write!" << endl;
}
}
for (int k = 0 ; k < 10000; ++k) {
lfs[k].close();
}
}

Next Page »

19 queries. 0.425 seconds. Valid XHTML

Powered by WordPress

Subscribe to this blog in a reader or by Email.