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.
Monthly Archives: September 2007
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.
"Big Brother"
“Big brother” isn’t a person, but a family. We are big brother.
IE7 Bug
Place a container with position: fixed on top, as in a navbar. Now create another container in the normal flow of text below and populate it with some content (of any length). Set it to overflow: hidden or overflow: auto and give it a large top margin. The top container might even be unnecessary.
IE7 ignores the margin entirely, while Firefox and other (non-IE) browsers interpret it correctly. I haven’t tested this on IE6. Since position: fixed elements are not considered in the flow, this is probably something that would come up fairly commonly (placing margins on other elements to offset the dimensions of the fixed layers; klutzy, but the alternative is a fixed-size iframe, which won’t do on fluid layouts, or a full frameset, which I could use quite well here but am deliberately avoiding on this site because it has to scream professionalism).
That brings the count up to 2; the other bug I reported was entering something like “(1+1=)” into the Vista calculator (only the Vista calculator) causes it to crash. I still don’t think this is fixed, but at least it’s not major. The IE bug is worse.
If only iframe sizes were variable, this site would be a lot easier to design, but part of what I’m trying to show is that I can do the “Web 2.0” thing, and using frames of any sort of this site, even when they’re the right tool for the job would impede that. Thus I do what other “Web 2.0” developers do: write ugly CSS workarounds! (Unlike most of them, I never use outright hacks, since those are transient by nature).
I have my Master's Degree!
Today I finally resolved the issue with my diploma; the administration simply forgot to mail it despite the mailing fee that I paid. This degree, granted on August 31, 2007, one year and three days after enrolling, symbolizes the completion of the second step of my training to become a mediocre scientist. Now all that remains is for me to complete my Ph. D. as quickly as I can so I can leave Philadelphia for good (good riddance!), detach myself from the paper mill, and start doing my own research again.
Oddly appropriate quote about Temple University
“But Temple’s niche, what sets Temple apart from everybody else, is its alumni,” Reeves added. “Temple grads have moxie. They are self-starters hellbent on making their own way in the world. Nothing has been just handed to them. Ever. They have that special pride that comes when success is hard-earned, and Temple is proud to have played a part in their success.” — Temple News.
This is so true on so many levels.
I'm out of sync with today's culture
Sometimes it almost feels as if I was born into the wrong time period (although any earlier and I probably would have died in childbirth, lacking modern medical care – a debt I consider repaid, given what I’ve already done within the medical field and what I intend to do if I am permitted). I latch on to fundamentals, which I feel are fairly timeless, while everyone around me tends to flock to whatever the new hot thing is. I seek expert proficiency in more than one area while everyone around me emphasizes hyperspecialization. I consider any knowledge better than none, while everyone around me (scientists anyway) emphasizes a skepticism that often discards useful theories (not mine, which are reasonably received within the “scientific community”; this is a broader complaint). I feel most productive when I am working alone (communication very rapidly becomes the dominant factor in the amount of time required to accomplish something, as I’ve seen over and over), while everyone around me emphasizes teamwork (which has almost invariably resulted in the majority of the work falling on me anyway, except now others get to take some of the credit – usually most of it, if I’m not far enough on the totem pole yet). I cannot abide the prolonged existence of reparable suboptimality in systems such as science, while everyone around me seems content to complacently follow the status quo. I can’t tolerate decisions made without justification through reason, while everyone around me seems to think the issue irrelevant. I constantly seek challenges and am rebuffed in my search, while most people seek simply to avoid challenges.
I would like to see a society governed more by self-determination and ability than a stratified hierarchy often governed by a capricious elite. But I’m about 350 years too late for this, and it gnaws at me sometimes.