Adobe CS4 Still Does Not Work On Case-Sensitive File Systems
Last December, I blogged about the lengths my roommates and I had to go through to get Adobe Photoshop CS3 to install on Leopard formatted with a case-sensitive filesystem. In the end we got it to work. The problem seemed to just be laziness on Adobe’s part and an oversight by their QA team. Since we were able to get Photoshop CS3 to work without modifying source code, just renaming a batch of files, I fully expected Adobe to be quick to make CS4 work on a case-sensitive Leopard install. Unfortunately, I assumed incorrectly. I got this error message when I tried to install my copy of Photoshop CS4.

What the hell!? Adobe, as a professional software company you should be able to do make your software installable on a case-sensitive file system. It’s really not a lot to ask and every other Mac software developer is able to do it. Honestly, it is assumed that software written for a Unix-based OS will run on a case-sensitive file system so much that it does not even occur to people that there is a possibility that it won’t work.
The grammar of the error message is also eye catching. I know we can’t be perfect but I set the bar higher for companies like Adobe who charge a lot of money for their software. So Adobe, in case you didn’t notice your comma is hanging out between two spaces and there should be an “a” between have and non.
I cut Adobe some slack last year when they dropped the ball on CS3. Leopard is the first release of OS X to support a case-sensitive file systems and the release date of CS3 was close to the release date of Leopard. However, a year later with the release of CS4 you opted to add in an error message instead of just fixing the problem? Even after tons of people complained on the Adobe blog about it? Unbelievable.
The UCI Study Center Shuffle
Roughly every 5 weeks I enter into a period of my life that I don’t like to talk about very much. That is, midterm and final week. Several big, grade dominating, exams within a period of one week means that I am going to be spending a lot of nights in the library. And by nights, I mean the whole night. Usually something like 9pm-6am.
After three years of hellish finals weeks I’ve developed what I call, the UCI Study Center Shuffle. The Study Center Shuffle came about because UCI has a variety of study centers and libraries of varying quality and with differing hours. I like to spend my time at the most pleasant, and best equipped, study centers. However, the best ones close the earliest. Forcing me to migrate from study center to study center.
The following is my typical Study Center Shuffle and my thought process behind it.
Science Library: 9pm-11pm
The UCI Science Library is a wonderful building. It’s a outstanding 50 million dollar, six story library but all the students really just use it as a glorified study center because 1) libraries aren’t very useful anymore and 2) it’s a really nice building. Alas, it closes early at 11pm. There is a small study center on the first floor that is open till 2am but I do not like going in there because it is too cramped and often full. At 11pm I pack up and walk a third of the way around Ring Road to the Engineering Gateway.
Engineering Gateway: 11pm-2am
The Engineering Gateway is a great study center. The students in there always seem really dedicated and I’m regularly been able to get serious about studying in there. There are lots of computers to use which is nice and for some reason not too distracting when I do need to use one. Probably because they are not my distraction prone Macbook. Normally the Engineering Gateway is open 24 hours, however, on Tuesday’s and Saturday’s the Engineering Gateway closes from 2-4am forcing me to vacate the premises.
Gateway Study Center: 2am-whenever
If the Engineering Gateway is closed the only option left on campus is the dreaded Gateway Study Center. It is another third of the way around Ring Road to get to Gateway Study Center from Engineering Gateway, a calm, yet eerie walk at 2am. Gateway is my last choice because it is generally the nosiest of the study centers, impossible to find an electrical outlet for my laptop, and the desktop computers setup there are beyond obsolete. In short, Gateway is the study center ghetto at UCI. The only benefit is that it is the closest to food that does not come out of a vending machine, which at this time is only Jack In The Box but its better than nothing.
After a solid night of studying, I now have to walk back to my car which is probably parked no where near the Gateway Study Center forcing another middle of the night hike.
UPDATE (02/03/09): Not long after I wrote this post, the Gateway Study Center underwent a complete renovation. They replaced everything. The desks, chairs, computers, carpet, and even electrical outlets were upgraded. I can now say it is a comfortable place to study. Sadly, it is still very crowded.
What if I went to a Java school Joel?
Way back in 2005, I read an essay by Joel Spolsky titled The Perils of JavaSchools. When I read the essay the first time, I suspected Joel was right about Java trivializing several aspects of the traditional Computer Science education, but I didn’t really care. At the time I was just starting my second quarter of college in the CS program at the University of California at Irvine which definitely falls under the “Java school” classification. At that point I had only ever really programmed in Java and I liked it a lot. Joel was right, but I was happy with my relative Java proficiency at a Java School so I largely indifferent.
Fast forward to the present. Last week, I borrowed Joel’s new book “More Joel on Software” from Michael Arrington which contains the “Perils of JavaSchools” essay. Reading the essay again I was blown away. What a difference a few years of CS education makes! This time instead of just feeling that Joel is right, I know he is right. Learning Computer Science completely in Java instead of C with a healthy dose of functional languages like Scheme is two different worlds.1
All CS degrees are not created equal
Is the value of my CS education less than that of the traditional CS education Joel reminisced about? All other things being equal, I would say absolutely say “Yes”. I can not help but agree with Joel when he says that an all Java education can never be of the same caliber as the CS programs that preceded the Java “revolution”. People like Guido van Rossum, Paul Graham, Steve Yegge, Linus Torvalds and many other great hackers all received their degrees before the notion of a Java school existed. And as Joel puts it, they all went “stark, raving mad trying to pack things into bits”. The bit level is considered foreign territory for students at Java schools; a place we dare to venture only once or twice and will quickly return to the safety of the Java virtual machine.
Joel’s essay is best summarized by this paragraph:
You used to start out in college with a course in data structures, with linked lists and hash tables and whatnot, with extensive use of pointers. These courses were often used as weedout courses: they were so hard that anyone that couldn’t handle the mental challenge of a CS degree would give up, which was a good thing, because if you thought pointers are hard, wait until you try and prove things about fixed point theory.
I have never even heard of fixed point theory!
Finally we come to my dilemma. I have one year left at my Java school and I desperately want to avoid mediocrity. Since adopting Ruby as my primary programming language last summer, I have experienced several small victories. Ruby is a very powerful language which is gradually breaking me away from the ridged programming practices I picked up from programming in Java for 3 years. Ruby has introduced me to things like metaprogramming, reflection, DSL’s, anonymous methods, and several aspects of functional programming. All are things that I never would have been able to fathom had I stayed inside my Java bubble. I will say that CS students at Irvine take a Programming Languages class which introduces unfamiliar languages like Haskell. Unfortunately, the class doesn’t make up much ground. Like all classes it is only 10 weeks long and students only get a brief look at the various languages they are introduced to. To top it off most of the projects are still done with Java.
Ruby is not the Answer to Life, the Universe, and Everything
Ruby is great but its not going to teach me any of the low level knowledge I am lacking. I can program in Ruby for another decade and still not achieve a full understanding pointers. The only thing I can do to understand why while (*s++ = *t++); copies a string, is to actually program in C.
Why I am not learning C now
Learning C is something that you generally need to be forced into. In today’s world you are not going to able to write very much software if you are coding the entire thing in C from top to bottom. It is a very anti “Get Things Done” programming language. In addition, there are very few things that actually need to be written in C. Operating systems and compilers are the two big areas where use of C is nearly always required. Both are territory that I am not interested in venturing into at this point. The most common use for C among software developers is to optimize slow chunks of code by rewriting them in C. However, everything I write does not need to “scale” so while I always do my best to not write inefficient code, I can not be bothered to rewrite any of it in C when it is “fast enough” already.
What I am going to do about it
This is a problem that I have not thought of a solution for. I can not bring myself to sacrifice productivity in order to use C. At first I thought I would learn Objective-C which is based on C in order to create Cocoa applications for Mac OS X. That solution is flawed however. Just like Joel says learning C++ is not a substitute for learning C, the same is true for Objective-C. My best chance is if something in my school work for next year comes up that requires the use of C. If it does happen it will be an elective; the chance of a required course using C at Irvine is very slim. I am just one person, what I am experiencing is true for Computer Science students across the county at Java schools. We are collectively being handed a disadvantageous education and in the long run it will have a direct impact on the level of software engineering that is being done in the United States. For instance, I would guess that a graduate from a Java school is far less likely to ever contribute to the Linux kernel, GCC, or a similar project. This is of great consequence because we need innovation at the lowest level of software in order to continue innovating at the top.
Obviously, if American Universities are going to keep up, they need to switch back to the “middle ages” of Computer Science and resume using C in the classroom. For those of us that are already in the system, or recently graduated, individual crusades are required to attain the level of understanding that is obligatory for Computer Science graduates. For myself, this will likely include working through the exercises in Structure and Interpretation of Computer Programs and the accompanying lectures. I am still looking for a good, practical way to learn C. Just reading Kernighan and Ritchie is not going to be sufficient. There is a big distinction between learning to program and learning a language. I need to learn to program—for real this time.
-
Read “The Perils of JavaSchools” for an explanation of why they are different. ↩
Rails-doc.org is my new Rails Reference
When working with a framework as large as Ruby on Rails its necessary to have a reference close by for… well just about everything. Until recently I was a big fan of gotAPI.com because I really appreciated the Ruby and Rails reference tied together. However, the Javascript autocomplete on their search box is broken in Firefox 3 so I decided to try the new Rails reference site, Rails-doc.org.
Rails-doc.org is an fairly ambitious project to create a community driven Rails documentation site. Basically they let users sign up and contribute notes to the existing Rails documentation. This certainly has the potential to be very useful, especially for new Rails hackers because sometimes the people who have been around the framework for a while just take things for granted.
Take the documentation for strftime in the Date class for example. There is no documentation listed for that method. Despite the fact that you clearly need documentation of the strftime options in order to use that method. Instead you have to know to look under strftime in the Time class for the documentation. While this is an example specific to Ruby documentation, these are the kinds of obvious problems that a community documentation website can help solve.
Right now Rails-doc.org has only been live for a month the so amount of community documentation feels very low. In the mean time I’ll be using the site for the official documentation that is already in place. Plus its the best looking rendering of the Rails documentation site out there. The Nodeta guys did a good job with the design. They also have a nice looking blog.
It will be interested to see how many of the notes contributed to Rails-doc get ported to the official Rails documentation. This certainly feels like the easiest and most straightforward way to contribute to Rails documentation and I can see it becoming a testing ground for future contributions to the official docs.
“Wanted” a Movie Review
Yes, you read the title correctly, I’m doing a movie review. Quite unexpected since I know absolutely nothing about reviewing movies. However, I’m making an exception in this case because I got the opportunity to see the movie Monday and it does not come out in theaters until Friday. What was the occasion? TechCrunch, where I just started my internship, teamed up with MySpace to do a screening of Wanted in San Francisco for 200 lucky TechCrunch readers. Actually let me revise that. 200 TechCrunch readers and get this, the first 50 MySpace users in line who added Wanted to their top 8 friends and printed their profile. Needless to say, the theater was a rare blending of the two completely opposite crowds of people.
So what about the actual movie? Wanted pulls its style from a variety of different action movies. First it borrows a little bit of The Matrix‘s disregard for Physics. Mix in Shoot ‘Em Up‘s abundance of manslaughter. Finally throw in a high speed car chase plus gunfight that is standard for any action movie and you’ve got Wanted.
Luckily the “curving bullets” thing doesn’t end up being as lame as it looks in the preview. Instead it serves as a nice touch that differentiates the movie from every other action movie. Although it’s really entertaining to watch the actors shoot a “curving bullet” because it looks more like they are throwing a baseball sidearmed than shooting a gun.
The movie is such that when it finishes and your sitting in your seat as the credits play your thinking to yourself “either that was really dumb or it was freaking awesome”. Ultimately you cannot decide which it is so you compromise and declare that it was both.
Unfortunately the movie has a piss poor name. After seeing the movie I still cannot determine why they called it Wanted. I am sure that people will remember the movie 5 years from now but absolutely no one will remember its generic title. They’ll say, “Oh yeah! the curving bullets movie with Angelina Jolie and Morgan Freeman! What was the name of that?”. Ultimately no one will be able to remember and they’ll have to look it up on IMDB.
Despite my criticisms, the occasional cheesy dialog, and not-so-stellar performance by James McAvory, Wanted is a good movie and I recommend seeing it. If nothing else it is very entertaining. But honestly don’t take my word for it because like I said, I know absolutely nothing about reviewing movies. Nor do I have any authority on the matter. Instead I referrer you to Rotten Tomatoes where Wanted is currently at a very respectable 93%.
