In my opinion, viruses are alive

Though incapable of reproducing on their own, viruses do contain DNA, and, more importantly, act functionally as life because they participate in evolutionary processes. They can indeed split off into new species, and there is a hypothesis that life began with them (although if they require cellular machinery to replicate, I fail to see how they could have preceded cells). Therefore, I consider them living. You may disagree, but I simply wanted to make my reasoning clear.

Academically, alone… always

Despite the great variation in my academic experience as I made my way through the echelons of formal education, one invariant has curiously remained: I was always alone. Not in the sense of having no friends, as I’ve always had 1 or 2 close friends, and have made more since college, nor due to an inability to socialize, but in terms of academic study groups, idea passing, and generally communicating with other people about my work. It isn’t that I can’t do it – quite the contrary; I found out that I could pass ideas very effectively when I began to tutor – but rather due to the fact that I usually tend to find myself in a social group all my own. In grade school, I was so unpopular that I was picked on even by the people at the bottom of the social ladder. In college, I tended to provide help rather than ask for it, there were only 6 of us, and I barely studied in any case (yes, the same college that I graduated from with the highest GPA in my class – not only did I get a 3.96, but did it without studying). In graduate school, the classes are slightly harder in places, though I still barely study, but race has now become the dividing factor. I’m literally the only American student in the classroom, and as soon as the professor walks out, different conversations begin in all sorts of different languages, but never in English). All of the students are nice and polite people to work with, and will converse in English if I speak to them, but it’s clear that they’d prefer to associate within their social group.

And that leaves me. Alone on the top of my class. Again.

I don’t know whether being forced to derive my own answers has enhanced or diminished my abilities, but it has certainly become a key component of my academic identity regardless.

Dissertation time

Writing begins now. I don’t want to disclose my topic just yet, as it’s a fairly new area and thus one that I can do some significant things in before the low hanging fruit is all picked, but I will say that it involves tensors 🙂

Immersion as an Art Form

Stepping outside on a rather nice crisp fall day, I realized that the replication of sensations such as the touch of wind on one’s skin as well as images and sounds is bound to become an artform as soon as technology reaches that level. I’m looking forward to it, though I maintain that nothing compares to the genuine thing.

Recruiting

I’ve been contacted by recruiters rather frequently since about my sophomore year of college with perhaps 4 or 5 jobs a year, maybe 2 of which will be outright job offers and the others invitations to interview. A fairly significant part of this is my resume’s rank within search engines for keywords that recruiters seem to target (not deliberate, but it does demonstrate that buzzwords are a necessary evil), but more recently, I’ve started getting contacts on social networking sites such as MySpace and Facebook. Since I’m not exactly the typical demographic of these sites, my profile tends to highlight things I find worthy in my own life, such as my research efforts, and as a result conveys a very positive image (something that will diminish in effectiveness, as other people are deliberately, and usually insincerely, replicating this behavior now that they’ve finally caught on to how well it works). However, there are two other significant variables that have increased quite sharply in the last few months – the reputation of the companies and the frequency of contact.

It began with Google. Then AT&T contacted me. Then Exxon-Mobil. Now apparently someone is trying to hook me up with GE. I’ve never been contacted by such large companies before, and never at the one-a-week rate they seem to be coming in at now. Maybe it has something to do with my recent MS?

It’s a good thing, but some of these offers are tempting when I’m resolved to finish my Ph. D. (as quickly as possible, since I’ve accepted that I will never be challenged by any process other than admissions in formal education, stellar credentials notwithstanding). And how would I respond once I did graduate? Do I play hardball? Try to negotiate the largest salary possible by playing the offers off on each other? My goal has never been to make a lot of money, except as required for other goals (such as Project Polymath, which is going to require a lot of funding). On the other hand, I have a very acute sense of how much my skills are worth and I can’t stand the feeling that I am being exploited. I have over 15 years of programming experience at 22 and two degrees with awards up the wazoo to prove it, for Pete’s sake! I’d like to think that people don’t see my credentials and immediately think “cheap college labor”. That’s just insulting; my accomplishments are the best testament to my skill because they indicate not only what I can do, but what I’ve already done.

Yet more problems with CSS!

One tends to repeat oneself a lot in a stylesheet. This is sort of tied to the overspecification issue I mentioned earlier. The situation that made me realize this was one in which I was using float and clear on two separate elements (due to the fun property of floats existing outside of the flow, I had to use a spacer element with the clear property to ensure that both floating and static content fit within the container – the first time I’ve used a spacer element since I began using CSS some 9 or so years ago).

Change the float to left, change the clear to left. Change the float to right, change the clear to right. Any other combination didn’t work (as I had another float on the left, I couldn’t use clear: both – by the way, while we’re suggesting improvements to CSS, it’d be nice to be able to clear individual floats while preserving others in the same direction). For content outside of the flow, change the height in one place, change the margin in another. There’s duplication of content all over the place.

EVGA's Strategy

EVGA, a company that sells graphics cards based on various NVidia chipsets, is launching free game servers for several popular games. This is actually an ingenious marketing strategy, as it will:

a. Encourage people to buy the games (thus benefiting the publishers, who probably have deals with EVGA)
b. Encourage people to buy graphics cards that can run the games well.
c. Encourage people to buy those cards from EVGA (general goodwill + brand awareness).

It will be interesting to see what happens to these servers as the games age, however. Will they constantly swap them for the latest games to encourage continuing game and card purchases? Only time will tell.

Behavioral programming

This might already exist (and might even exist within OOP in the form of interfaces), so bear with me:

(If by some exceedingly rare chance this idea is implemented, feel free to use terminology less dependent on American spelling than “behavio(u)r”. In reality, if it is adopted, it will probably be at the suggestion of someone more prominent who happened to have the same idea at a different time, so I don’t even know why I bother to post my ideas).

It seems that we should be more concerned with what an object does than what it is, as we are with OOP. Therefore, it seems to make more sense that we should specify behaviors rather than objects and grant variables specific sets of behaviors, or capabilities. An example of this sort of design (and the one that inspired this idea) is the STL. For example, using OOP, if we have three variables, representing a bicycle, a car, and a person, we can declare them to inherit from class MovableObject, which would have variables such as position and velocity. However, this generalizes a little too much, and now we suddenly need to inherit from some other class (or define person as a base class) to include things like name and eye color. What if we instead designed behaviors such as “go” that could be modularly added to bicycles, cars, and people (or whatever else; we could add it to bananas if they had the appropriate variables)? What if we could attach and detach these behaviors from individual variables to include within-class variation? For example, suppose Mary is a person but is paralyzed and can’t move on her own. We could simply remove the “go” behavior from Mary to represent this fact without having to make a statement about all people in general.

This alone isn’t enough, however. We need to provide goals, else the program won’t have much of a purpose. Say we want to design a program that will make a chicken cross the road:

//How do we cross the road? Execute go, passing all of the to “requirements” as arguments to the behavior and optionally specifying additional ones.
to crossRoad() execute behavior go(OtherSide, additionalArgs1, …);
to crossRoad() execute behavior walk(OtherSide, additionalArgs1, …); //Or walk, which is the same thing, really.
to crossRoadTwice() { crossRoad(); crossRoad(); } //etc.

//It only makes sense for things with positions of type Point to “go”.
//Note that we don’t need to know whether the object in question is a person, car, banana, whatever…

//”Requires Point position” can also be valid, and would cause the behavior to return false (and thus the goal to fail) if executed on an object that doesn’t have a point. “Provides Point position” will actually add a position attribute to the object if one doesn’t already exist. (If one exists by a different type, it’s an error).
bool behavior go(Point where) provides (Point position) {
position = where;
return true;
}

class Chicken {
hasBehavior go; //Chickens can “go”.
//Point position is implied.

}

int main() {
Chicken c;
c.tryTo(crossRoad()); //true.
}

If we wanted something more traditional, we could statically define class properties and “require” instead of “provide” them on the behavior. This essentially allows a more object-oriented approach, such as the taxonomic one practiced today. Conversely, we can also modify behaviors (and thus provided but not required structure) at runtime on individual instances. For example, let’s see how Mary would work:

class Person {
hasBehavior(walk);


}

int main() {
Person Mary;
Mary.removeBehavior(walk); //Mary can’t walk.
Mary.tryTo(crossRoad()); //false – Mary has no way of crossing the road, since she can’t walk.
}

This can be extended, too. We can add Prolog-style rules, for example, or couple “requires” with interfaces or type checking, and that’s just scratching the surface of the possibilities.

Now that I’ve written this long thing up, feel free to ignore it.