Archive for February, 2008

WYSYWIG Users Don’t Save Their Work

Friday, February 29th, 2008

I just figured out why my users just can’t learn to save their work every couple of minutes. It’s not really them - it’s the system they are working in. I personally have my fingers trained to automatically hit either Ctrl+S as I type. Actually it’s either that or Ctrl+[:w depending on the editor. ) Even when I type stuff in a text box on the web - like this very post for example, I still try to save as often as possible. In Wordpress I just use the Save and Continue Editing function every few minutes despite the fact that Firefox should theoretically save my text as part of the session. Also my important documents are usually under some sort of version control but that’s a whole different story.

But then again, let’s look back on what type of things do I type the most. I’m a programmer by trade (and choice, and vocation) so most of the day I write code. And what do you do when you write code? You write 3 lines, save, compile (if needed), run it and check the results. I’m used to saving often because this is the only way I get feedback on how I’m doing.

Next, I write papers and documentation in LaTex which pretty much follows the same routine. Write a paragraph or two, save, compile, preview changes. If I write for an hour without saving, I may make few tiny syntax mistakes (like that time when figure numbers in my whole chapter got screwed up) which may bite me in the ass later on.

Finally, I write here, in a tiny text box with shorter posts or in vim for the longer ones. I don’t use the fancy WYSIWYG editor because frankly these things irritate me. So I usually mark up my text using HTML whenever I insert images, format embed code samples or just want to emphasize some words. And once again the only way I can get good feedback on what I’m doing is to stop, save and look back.

I’m essentially forced to save often and as a result I have never really lost any work due to some unexpected crash, brownout or just accidental closing of the program window. Or at least nothing that could not be re-created within 5-10 minutes.

On the other hand, I have witnessed people losing 6-8 hours of work because it never occurred to them they should save the document. It actually kindoff makes sense now. They get instant feedback on their work, and Office and similar programs will let them do stuff like print preview without the need to save. The WYSIWYG mode actually promotes this kind of reckless behavior. This is of course no excuse for stupidity. They should know better than this. But sometimes habits override the reasonable thought. Perhaps this is why I always save like a maniac, and my co-workers avoid that save button as if it was actually causing them physical discomfort to press it. The years of use of Word and Excel simply taught them that saving is just something that you do when you are finished with your document.

In fact, I hit that wall every time when I teach Access which forces you to create a database file before you start working. Most students just click through the dialog and create the file in the default spot (usually either My Documents or Temp). Then at the end of the lab session they go into panic mode because they don’t know where the file is and the Save As option doesn’t work the way they would expect it to.

Breaking habits is hard - especially the bad ones. This actually gives me some hope for humanity. Perhaps all these people are not to stupid to live, but just unfortunate products of their environment. Perhaps I should cut them some slack. In fact, perhaps I shouldn’t really feel bad for them when they loose their work. I should be happy for them - this sort of thing is a formative experience. After they lose a days worth of work 3 or 4 times in a row they might actually get paranoid and start saving every few sentences. And that’s precisely what a normal, well adjusted person should do. mrgreen

Name That Movie or TV Show 2

Thursday, February 28th, 2008

The first time we did this it was kinda fun, so I decided to do it again. Below you will find an image which contains snapshots from 25 different movies and/or TV shows. Your mission, should you choose to accept it, is to identify all of them.

Name That Movie or TV Show 2

Some of these should be really, really easy to identify while other might be really obscure. There are one or two images that are actually a little bit tricky. Can you get all of them?

What Programming Language Should we Teach to CS Majors?

Wednesday, February 27th, 2008

Yesterday I went on some sort of massive rant about Java, and programming languages in general. It’s actually kinda ironic that it took me a little over 2500 words to essentially say “I somehow always knew Java was to verbose for it’s own good”. I used to think that it was a good academic language though - because it forces students to think within the OO paradigm, makes them deal with stuff like static typing and has a huge library of classes they could use for just about anything. Not only that but Java is popular and widely used in the industry. So it seems like a perfect match. But is it?

The thing about Java is that it is all about Objects - that is it’s answer to everything. And when the only tool you have is a hammer then every problem starts to look like a nail. Especially since nowadays I see people teaching Java using BlueJ. I really don’t think that works - I think it compounds the problem. I talked to some of these students after they spent two semesters using that IDE and they seemed to be really, really lost and confused. But perhaps I’m wrong and I just encountered the students who were never meant to be programmers.

There is another criticism of Java which I heard - Java students get to reliant on the API. Since they have every possible data structure and algorithm implemented for them they no longer really learn how to do them. The data structures and algorithms classes are just mindless chores to them - they stumble through them, then put them out of their mind - cause why would they ever need to know how a hash table works if they can just import one.

I hear some universities teach their introductory programming courses using Scheme which is the opposite side of the coin - here you teach them a lisp dialect which is a functional language with tons of quirks which is unlike anything else they might encounter in the industry. And while it is great for academia and teaching basic concepts (scheme trained students actually understand recursion very early on) it is unlikely they will actually find a job working with Scheme out of school. Arguably though, the jump from Scheme to Java should be easier than the other way around.

And then there is C++ with all it’s quirks and infuriating little issues. Should we just teach C++ as the initial language and make the students get down and dirty with manual memory management? Some say that this low lever familiarity with your hardware will make you a better programmer - and I’m not opposed to this idea. I don’t have a strong C background but I always wished I did.

Or perhaps we could just do C# which straddles the gap between Java and C++? It offers the best of both worlds so to speak and is also very popular in the industry these days.

Or should we go with the flow and pick something that is both popular, elegant, duck typed, interpreted and easy to pick up like Ruby? It would be an interesting experiment to see how it would fare as “the first” language.

What language did you learn first? Which language do you think we should be teaching to the new CS majors right now?

Which language should we teach?
View Results

Do you think that ability to deal with the low level thinking that C++ imposes on you is really important? Or do you think that academia should teach them how to program using high level abstract concepts first and foremost?

Let’s talk about Java and keeping the damn kids of the lawn…

Tuesday, February 26th, 2008

I found this gem mixed in with some old Java code of mine. There is nothing inherently wrong with this class by itself and I bet each and every one of you has a copy of exactly the same class somewhere in your Java code base. In fact, you probably have 8 or 10 different versions of this basic abstraction scattered throughout different projects. I know I do - this is just one of them:

/*
 * Created on Apr 15, 2004
 */
 
package io;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
/**
 * Creates an easy to use input interface.
 * Abstracts all the stream related operations.
 * 
 * @author Lukasz Grzegorz Maciak
 *
 */
public class Input
{
	private BufferedReader in;
 
	/**
	 * in will read from the Standard.in using BufferedReader.
	 *
	 */
	public Input()
	{
		in = new BufferedReader(
			new InputStreamReader(System.in));
	}
 
	/**
	 * At any time, the input source can be changed to another
	 * BufferedReader. This can be used to read commands
	 * from batch files and etc.
	 * 
	 * @param i a BufferedReader object
	 */
	public void setInput(BufferedReader i)
	{
		in = i;
	}
 
	/**
	 * Restores the input to the default (System.in)
	 *
	 */
	public void restoreDefaultInput()
	{
		in = new BufferedReader(
			new InputStreamReader(System.in));
	}
 
	/**
	 * Reads a line from the input stream. It returns a string so
	 * if you plan on reading numbers or other data types you need
	 * to parse it yourself
	 * 
	 * @return a String representation of that line
	 * @throws IOException if there was an IO error
	 */
	public String readln() throws IOException
	{
		return in.readLine();
	}
}

Why did I write this back in 2004? Because I was sick and tired of plugging the following line in each class that needed to read user input from the console:

BufferedReader in = new BufferedReader(
		new InputStreamReader(System.in));
String foo = in.readLine();

This way I could replace it with a much less verbose version:

Input in = new Input();
String foo = in.readln();

Some input classes used to be more elaborate including parsing logic letting you ask the user specifically for an integer or a float, or something like that. It’s a nice touch but not essential. What we all really needed back then was a simple console input class but Java mysteriously didn’t provide any. I still remember how the instructors would react when we asked how do you do cin in Java. They would wince, scratch their head and say we will cover that next semester, and for now we should just use the keyboard.java class that came with the book.

Actually, no I lied - my Java instructor didn’t wince or scratch his head. He stuck out his tongue, and scratched his chin for a while. The tongue thing was sort of a thermal valve release thing I think - he did that whenever he was asked a difficult question that required some thought. I guess his brain was prone to overheating - or maybe it was just covered with a thick layer of dust due to lack of use. Then after a 3 minutes of intensive processing (I think his brain was clocked at 1Hz tops) he finally responded that he doesn’t know about “sea-ins but it is probably in the book”. Which was really his default answer - I was always curious why it always took him so long to retrieve the “it is in the book” reply. We theorized that his brain had almost no RAM so if you interrupted his train of thought he was pagefaulting and fetching from storage.

But yes, real teachers made us use some kind of custom written version of the class above until we knew enough about streams to write our own. Every book had a different implementation, with different quirks and dependencies. They were all bloated, and buggy and they ended up being hacked and modified and passed around from student to student. It was a mess - and teaching the language was an interesting exercise of hard waving away all the boilerplate code, class declarations and import statements.

It took Sun close to 10 years to finally provide a simple and easy to use console input class. Now, ever since Java 6 came out back in Dec 2006 we can simply do:

String foo = System.console().readLine();

Why was this not part of the language from the get go? It was not some sort of implementation difficulty or backward compatibility problem. The root of the problem was purely philosophical - in Java input was done with streams, and wrapping one or two stream readers around System.in was deemed perfectly acceptable. That is the thing about Java’s design - whenever there was a choice between straightforward, consistent approach and overly verbose and convoluted one, Sun has always picked the later rather than the former. For example, for the longest time the language did not have a printf function. Instead of passing in an argument formated in a specific way, you had to initialize the NimberFormater class then run 3 or 4 methods on that instance before you could print the string again. So the code that now (since 1.5) can be expressed as:

System.out.printf("%10.2f", x);

used to look something like this:

java.text.NumberFormat formatter = 
		java.text.NumberFormat.getNumberInstance(); 
formatter.setMinimumFractionDigits(2); 
String s = formatter.format(x); 
for (int i = s.length(); i < 10; i++) 
	System.out.print(' '); 
System.out.print(s);

Naturally, you could still use NumberFormat if you wanted to. Sometimes it might be more appropriate especially if you are planning to extend it. But in most cases you really do not need to touch it.

Note that printf is not really syntactical sugar - it is abstraction. Same with the console class - it hides some of the implementation details from the programmer for a good reason. The less code you see on the screen, the easier it becomes to understand. While that NumberFormat block above is very straightforward, if you encountered it in some larger project you probably wouldn’t know what it does at a glance. You would have to mentally step through it line by line to actually figure out you are just fiddling with decimal number precision here. Abstraction is not always about hiding the low level stuff - it is sometimes about hiding the high level stuff that is just to long, and unwieldy to read.

Java is inherently verbose - it’s tendency to replace short and sweet syntactical sugar with long class declarations, and multi level initializations combines with it’s hefty dose of boilerplate (that just must be there) and static typing declarations to compound the problem. It is actually not uncommon to see a 5 lines of pseudo code in the comments, that are then implemented in over 60 lines of actual Java.

And there is a high probability that those 60 lines are in fact abstracting some weird Java quirk - something that ought to be done at the language design level. But instead everyone ends up with their own version of some trivial functionality. And each programmer brings his own utils package which contains among other things the tweaked out keyboard.java and their own implementation of printf. It is especially fun when you try to merge two projects and you realize that they both contain 300 lines of code that implement exactly the same thing but differently, and that refactoring this stuff won’t be that easy as each system relies on the funny little quirks of those custom classes that implement rather trivial functionality.

This is why most of us hack in Eclipse instead of vi - because you need an industrial strength tractor to haul these mountains of code. This is probably also one of the reasons why educators pick BlueJay as the introductory Java IDE, which I think is actually a harmful practice.

It seems to me that Java is currently in the process of joining the league of “old folks” languages that people tend to respect, and emulate in certain ways but not actually use or get excited about. C and C++ are permanent members of that club already. Every time someone brings up one of these languages, the senior programmers usually get that nostalgic feeling - remember those silly pointers, and the link errors - these were the times. The junior programmers usually roll their eyes and mutter something about thankfully not having a pleasure to experience the doubtful joy of manual memory management. Java is slowly but surely heading in that direction.

Java? Heh, I used to use it all the time. I remember that my hello world program was like 7 pages long. It used to make you feel productive - at the end of the day you would realize you wrote few hundred lines of code that don’t really do anything yet - they just need to be there.

Yup… We are getting there. This is one of the reasons why when I was asked to develop web applications I immediately attached myself to PHP. Ruby was not around back then so my choice was essentially between JSP, ASP (booo Microsoft) and PHP. PHP is not very elegant, or very structured. It really takes after it’s cousin perl in that it looks like shit, but gets the job done. And this is what I needed. I needed to build applications quickly, and be able to adapt them to the the constantly changing specs, not spend time modeling, initializing static types and writing essays in code. PHP was language that allowed me to do stuff without much of a hassle.

Note that this was years ago when I was still an impressionable young Java guy. I totally loved the language - and I had a blast designing and modeling my code. I always had this impeccable class hierarchy, organized in packages, all with javadoc comments. It was great - most of the programming assignments were absolutely trivial to me (especially when I was undergrad) so I would amuse myself by beautifying my code, adding functionality it didn’t need and etc. Each of my projects was essentially a thick novel sized stack of papers and my peers would look at me in horror and dismay. I loved it. But to actually do work in Java? Even back then, I decided that to be productive and effective I needed something else.

Java has changed since then - but not a lot. In fact there seems to be a very strong opposition to change in the Java camp. Hell, we wouldn’t have generics, un-boxing and the foreach loop if it wasn’t for C#. The Java ripoff from Microsoft has somehow became a thorn in the side of the Java developers to the point where it motivated them to add features and niceties we were asking for for years. So things are slowly improving. We might even get closures in the next release. Or not - it might be to radical of a step for them. Maybe we will never get them. Then there is a question if we really need them? Why would I even want to wait for Java to implement closures. If I needed them, I could always code in Javascript, and then compile it into Java compatibile bytecode using rhino.

In other words, I can route around Java limitations and verbosity by using another JVM compatible language. This is why we have scala, and jruby and jython and groovy and bunch of other things like that. The java platform slowly growing into a language agnostic platform of it’s own whether sun wants it or not.

Java is no longer the new, cool or hip thing it was when I was starting college. Back then it was huge improvement over C++. It really made our lives easier, and let us be more productive. It was always a hulking behemoth, but we hardly noticed by then because C was a beast that had tormented us for years on its own. But we have moved past that. No one is excited about Java anymore. When I say Java, I see people rolling their eyes and wincing the same way we rolled our eyes and winced when listening about C++.

Java is now entering that “older, wiser and more mature but totally uncool” status. It is not getting retired yet - it’s definitely not senile, and surely not ready for the old-folks home. It’s just getting to that point in it’s life when it starts to tuck in it’s shirt, pull up it’s pants all the way up past the waistline, and has a suddenly discovers some deep seethed desire to keep the damn kids of it’s lawn.

And it seems that no matter how many features they add Java will be still overly verbose, still statically typed and still huge and unwieldy. Naturally, no one is going to drop support for it anytime soon. But given a choice people will be making the same judgment call as I did few years ago and will jump ship. But nowadays they don’t really have to jump far. They don’t even need to leave the Java ecosystem. All they have to do is to switch to one of the other JVM based languages.

First, we have Rhino and Javascript which Steve Yegge predicts to be the Next Big Language. It already has closures, it is dynamically typed, and much more expressive and readable than Java. And yet it lets you leverage the power of the whole Java API. In fact it is fully bytecode compatibile with Java which means you can easily mix and match pure Java and Rhino classes. In fact, once you compile it, there is virtually no difference between the two. Granted, people are not flocking to this one yet but that’s probably because of the “Javascript is for the web” stigma. But with some clever branding we could really get some momentum behind this one.

Ten there is Scala which I keep hearing about. It’s gaining momentum really fast and hype is building up. I really haven’t used it for anything so I can’t say much about it. The website claims it can tap into the .NET CLR libraries in addition to being bytecode compatible with Java which seems to be quite impressive.

We also have stuff like JRuby and Jython which are bound to gain prominence as the youngsters who grew hacking in Ruby and Python get absorbed by the huge Java infrastructures working in the business world. The point is that we can write Java without actually writing Java if we wanted to.

Lately I have been working almost exclusively in PHP, Python and Javascript. I’m also messing around with Ruby and Lisp on the side. Last time I have touched Java was when I wrote code for my thesis and i haven’t touched it since then. It just doesn’t seem as much fun as it used to be. Perhaps I have changed and I’m no longer content just modeling stuff and writing novel sized applications witch don’t really do all that much. It is still my primary language - one that I probably understand the best. But as I’m picking up new projects, and doing new things, time and time again I choose not to use Java as there are always more flexible and exciting tools for the job at hand.

Using CPAN version of WWW::Mechanize with ActiveState Perl on Windows

Monday, February 25th, 2008

I end up doing this each time I reinstall windows, and every time I forget how I did it, so I figured I’ll archive the process here. Perhaps it will help some of you. And I know, someone will say why don’t you use the PPM repository. Let’s just say i don’t want to. I want to grab the latest WWW::Mechanize package from CPAN and run with it.

Why am I posting it now? Because I needed to reinstall windows once again on my desktop, and now I need to get my blackboard scrips to work again.

This is really a multi step process. I’ll assume you have perl installed already. If not, you can get Activestate Perl which works pretty well on windows. Just grab the MSI package, install it and all the useful tools including perl, cpan and ppm will land in your path. From there follow these 3 easy steps:

Step 1: Get nmake

You will need nmake - the windows version of the make utility to compile most of the CPAN packages. How do you get nmake? There are several ways to do it, but probably easiest one is to grab the Microsoft version of the tool from their knowledge base. Once you download it, dump it somewhere in your path. It doesn’t really matter where it is, but I stuck it in the bin directory of my Perl install.

Step 2: Get YAML from CPAN

You will need YAML to build WWW::Mechanize. What is YAML? Sort answer is: do you care? Long answer: look it up. All you need to know is that you need it. So run cpan from your console and type in:

install YAML

This should cause some streaming text on the screen as the package is fetched and compiled. If it fails, make sure nmake is in your path, and that it is named nmake.exe and not something else.

Step 3: Install WWW::Mechanize

Final step is the easy one - just fetch and install the WWW::Mechanize package using the traditional method:

install WWW::Mechanize

Make sure you do step 1 and 2 before you try this. If you have tried this before you installed YAML the build will fail for some reason. To avoid that, just quit cpan, and run it again. This will clear the local cache and will re-fetch the package for a clean build.

So, there you have it. I know it’s a bit of a dry and uninteresting post for Monday morning. But this is more of a reminder to myself than anything else. I never remember where to grab nmake or what is that other package without which nothing ever builds on windows. Hopefully some of you will find it helpful. )

Blinking Dash: The Video

Saturday, February 23rd, 2008

I still have no solution to this problem. Will Sheldon had some useful suggestions for me yesterday, but messing around with boot.ini did not do anything. The /sos option did not display anything. I also tried stuff like /safeboot, /safeboot:minimal, /basevideo and etc. It seems that the problem happens before NT loader even gets to parse the ini file soo none of these instructions really do much.

Ben on the other hand seems to think it might be a power supply problem. It could be but I have full access to the hard drive when I boot off the CD. It just doesn’t boot. As far as I can tell my problem is somewhat unique. I have yet to find someone having exactly the same problem. There are a lot of documented issues out there that are somewhat similar (ie share the blinking dash thing) but most actually make sense and are some sort of easily solvable driver problems.

Either way, I figured out that I take a vid of what is happening so that you guys can see the what is this thing all about. This was taken at approximately 3am in a dark room with my Nikon Coolpix S50 so sorry for the quality. Also, don’t mind the mess on my desk.

The computer usually doesn’t sit on the floor like that. It’s actually tucked in the nifty little “computer shelf” of my desk but I moved it out when I was ripping out all the USB cables from the back hoping this will fix the issue.

And yes, that is a Think Geek binary clock on top of the monitor. mrgreen

I wiped the drive clean and reinstalled Windows on it today. My machine boots once again. I already transfered my firefox profile from the backup drive so I’m 80% back to normal. Now I will need to slowly install all the little pieces of software that I will need. I’ll probably keep it light this time - this is bound to happen again. I just wonder when - I got 2 months out of it last time around. Let’s see how long can I go this time…

Digital Sales Expectations: Customer vs. Copyright Holder

Friday, February 22nd, 2008

Let’s talk more about digital distribution. I don’t know why but I suddenly have a lot to say about these things. We already established that distributing data online can be profitable if you approach it the right way. We also know that so far very few industries have learned how to do it. Even book publishers who have a built in advantage (most modern e-book readers suck) are very uneasy about electronic distribution. No one can really figure out how to deal with this internet debacle. And I think part of the problem stems from the big dissonance between what customers desire, and what distributors are willing to provide.

It’s actually really easy to figure out what consumers want. As with any other product that is easy to find, high quality affordable, accessible and easy to consume. What does that mean? Let’s say that Joe Public wants to buy a song he heard on the radio. He should be able to find it in his favorite music store by searching by title, band or lyrics. He should be able to buy that song for an iTunes range price or lower (this stuff should be competitive) and download it immediately without jumping through any hoops. Just pay with paypal/credit card, and download.

The music should be accessible and easy to consume. This means that Joe should be able to click on the song and have it open in the music player of his choice. He should not need to use some bloated, proprietary player. He should not need to activate it, wait for it to fetch a license from the online store, or provide login or license number information. All Joe really wants is to take that song, play it on his computer, then put it on his ipod/iphone, his laptop, an his work computer. In this day and age it is not uncommon for people to own and use several different machines on a daily basis like that.

Is it really that much to ask? All we really want is a file that is in some standard format can be played on any device and any operating system without any major hassle, or need for internet access. But to music industry this is an outrageous. If I pitched this idea to the RIAA folks they would probably call me a raving lunatic who tries to ruin them and then phone for security and have me escorted out of the building.

Here is a pitch that would make them cream their pants on the spot:

First, music should only be sold via a single online store. It needs to be withdrawn from iTunes and all other online distributors. This will help increase the artificial scarcity of the song, and also add another revenue stream as the store will be able to serve advertising to the shoppers. Next, we remove all the search boxes from the online store. Instead we have a list of categories, and alphabetized list of performers. To find the song he wants, Joe Public will need to drill down 6 or 7 levels into that category tree generating page views for our banners, and popup advertising.

Then, before Joe can place the order and download his song we make him click through 10 to 20 special offers from “our affiliates”. Once the credit card payment is in, we make Joe install a custom downloader software that will fetch the song from our server for him. Naturally the software comes bundled with more special offers and addware. Once he installs the software, he will be able to download the song, which will be in proprietary format that can only be played by our custom music player (with more addware).

The song will naturally be tied to the hardware signature of Joes computer as soon as it is downloaded (long before he even tries to play it). To listen to it, Joe must use the cutom player, provide his login information, and the license code for the song that was sent to him in his email. The player will then call home and confirm the license and increment the play counter by one. Joes card will be charged some nominal sum for each play. It’s probably a good time to note that the custom player has no pause button or any way to fast forward or rewind the song. Ever time you play it, you get charged. The song will expire after 24 plays or 24 hours whichever comes first. After this time Joe will be able to re-purchase it for the full price.

Naturally, even the slowest, least progressive RIAA members realize that such an atrocious, anti-customer model would fail miserably. No one in their right mind would ever agree to a pay-for-play scheme - especially not when iTunes provides a much more user friendly and affordable, while still locked down service. This is why most studios hates iTunes with a passion - because they made digital distribution work without really squeezing the customers that much. Let’s face it, once you subtract bandwidth costs and maintenance of the online store, any profits on top of that are essentially free money.

So there is this huge gap between expectations on each side. Customers just want an affordable product they could use. Copyright holders want an unusable product which forces the customers to hand over large sums of money to them. It’s obvious that some sort of compromise must be worked out. If your digital distribution model is to restrictive or unfriendly, the customers will just happily continue pirating your content. If it is to lenient, you will probably get fired because your boss will not be able to sleep for months, thinking about the millions of dollars he probably lost because your scheme allowed someone to play the song on 3 computers instead of just one.

This is entirely silly since all you need to do to make profit is to capitalize on some of Kevin Kelly’s generatives. You can sell un-protected, un-encrypted mp3’s and still turn profit. Apple actually gets it and the reason why they are so successful is that they are really exploiting these things. First, they heavily rely on the brand. Their music store is closely associated with their flagship product - the iPod. Apple is a trustworthy brand with a carefully cultivated image. This is one intrinsic value that cannot be digitized and downloaded from a torrent site. People trust Apple more than they trust the “Pirate Bay” or other strangely named site like that. Second, the iTunes store really capitalizes on several of the generatives. It has an impressive searchable index, keeps track of your music and makes it accessible to you wherever. Naturally they also compromised and have that DRM of theirs which doesn’t really do anything other than annoy customers. But in the current climate it is necessary - no DRM, no content is the mantra of the entertainment industry.

Theoretically, if someone came along with a similarly sized catalog of content, but offered lower prices and no DRM they could blow iTunes out of the water. There are two problems though - iTunes is an entrenched brand, and it would be hard for a no-name service to compete, at least initially. They’d really have to provide a better service - and not just slightly - they would have to catch the eye of the public. The second problem is that without DRM they would have real trouble getting licenses for distributing content. They’d probably get enough content to be attractive to some, but not enough to threaten iTunes using their music catalog.

So we are really at an impasse. The copyright holders desperately try to shift the market towards a model that is more restrictive, and more prone to milking than iTunes. Customers just want something that works, and doesn’t cost an arm and a leg. Unless the copyright holder mindset doesn’t change, we will continue getting shafted with horrible deals, atrocious DRM and business models that just can’t work.

We will probably continue arguing over this for years to come, but I think customers will win in the end. It’s already slowly changing for the better as new DRM-less schemes are popping up now and again. People are starting to realize that customer lockdown is a dead end. It will get better, eventually…

Blinking Dash: The Sequel

Friday, February 22nd, 2008

Remember that one time (at band camp) that my computer wouldn’t fucking start, because it was busing blinking a little tiny dash in the upper left corner of the screen? That was the end of December (just before Christmas). You might remember me struggling to find a reasonable solution and finally giving up and re-formating the drive and reinstalling windows.

So I have been running with a fresh Windows for close to 2 months now. Yesterday (actually, technically today at 3am) I rebooted the machine and it never came back up. All I see is that damned blinking dash. And once again I haven’t the faintest clue as to what is really causing this issue. This is really irritating, because now I know it’s not just some random glitch. It happened twice already, and it will probably happen again.

Btw, as far as I can tell, the data on the HD is fine - or at least it was last time. It just wouldn’t boot. I know this is not a corrupted MBR because running FIXBOOT and FIXMBR tools did absolutely nothing last time. Neither did installing windows on the same partition without actually formating the drive which means it is not a Windws problem either.

Could it be software related? It’s possible but it kinda seems unlikely at this point. I have no clue what could have caused it. Last time the machine bricked itself while applying Windows Media Player update. This time around it was rebooting to update McAfee. Then again, I don’t reboot that machine often - it runs continuously for weeks on end. The only time it reboots is when the software forces it too. I haven’t checked the uptime before it went down yesterday but I think it has been running for at least a week. I installed several apps in the last 2 weeks - Bitpim, MS Visual Studio, Flickr Uplodr, ActiveState Perl and some CPAN modules and probably few more things. It could have been any of these.

Or perhaps it is some insidious virus or trojan that went undetected. Perhaps it is sitting there camouflaged in one of my data files, just waiting to pounce and fuck up my boot sequence. It’s possible, but you’d think that a 2 month old piece of mallware would get snagged by the on access scanner made by any mainstream AV provider, no matter how shitty or bloated their software is.

I’m beginning to suspect this might be something like Ben described in one of the previous threads - a perfectly good hard drive with few faulty sectors in the boot area. But then again I ran the quick built in DELL IDE drive diagnostics and they passed. Of course it’s possible that these things gloss over this type of things and wouldn’t notice it. But this is a relatively new drive - I think it only has like a year or so. The data drive is much older, and it is working perfectly fine. Of course that one never was a bootable drive but still.

Perhaps it’s because I have 2 drives sitting virtually on top of each other in the cramped Dell case and the heat and vibration is doing it’s damage over time? I just don’t know. I’m at a loss here. Perhaps this is a sign from above that it is really about time to invest in a new gaming machine…

I Was Wrong about HD Format Winner

Thursday, February 21st, 2008

It appears that I was dead wrong about the winner of the HD Format war. Since Toshiba officially declared stopping production of HD-DVD players on Tuesday it seems that Blu-Ray is going to move in as a market leader. It seems that we were all wrong - remember the HD-DVD vs BluRay poll. Yeah, we all got fooled. Oh, and btw, since my cousin is blaming me for making her waste money on the loosing technology, I am in turn blaming you guys and I have that poll to prove that you have given me the wrong advice. )

Why did we pick the looser back then? I think we looked at this assuming the choice will be made by customers, not the movie studios. My logic went like this: HD-DVD is cheaper, and so more accessible. Early adopters will likely go with the less expensive technology and will start building their collections in that format. BluRay being the high end, more expensive choice will have a smaller initial user base, and a slower uptake. I assumed movie studios will go with the flow of the market and support whichever platform gives them access to a bigger chunk of the market. Logically it worked out.

But I forgot that free market rules do not apply when you are dealing with extortion racket. Everyone loves Hollywood movies, and Hollywood has practical monopoly on them. They don’t really need to follow the market on this one. As long as enough big studios throw their weight behind some format, because it has “moar DRM” this format will become the de-facto standard. It’s that simple. It doesn’t really matter how many people buy HD-DVD - if there is no good movies coming out in that format because the studios decided not to support it, then it will die a natural death sooner or later.

Now that I think about it, it figures that overwhelming number of big studios picked Sony. After all, Sony is also involved in the content distribution racket. Who can understand Hollywoods silly DRM needs better than the company that already illustrated blatant disregard for both their customers and talent by silently installing rootkits onto millions of systems worldwide as means of copy protection. Sony is their people. How come I didn’t see it earlier. Sigh, I guess hindsight is always 20/20.

I have noticed that prices of the HD-DVD hardware has already plummeted down and will likely continue to do so. When I checked last night, Wallmart was selling some of the cheaper Tochiba models a little bit over a $100 which is almost half of what they were when I was last shopping for HD players few months ago. Retailers are probably going to slash the prices very drastically to sell as many of the now obsolete equipment before people catch onto this. Blu Ray players are still comfortably in the $400 range.

I guess the new question is, is it better to buy the slightly more expensive PS3 or a standalone Blu Ray player? Which one would you get?

Your First Steps With Linux: Revisited

Wednesday, February 20th, 2008

When I was writing Your First Steps With Linux I really wanted to mention Wubi as an alternative to live CD but somehow it did not make it into the post. Human memory is funny this way sometimes. It’s really good at storing data, not that great at recovering it when needed.

I really want to mention this project because it is quite clever. It’s a shame it didn’t make to that other article because it is really one of the least painful methods of installing fully functional linux distribution on a windows machine. It essentially bypasses all the problem areas that tend to be major hurdles to Linux newbies: namely partitioning and configuration. Wubi installation is also completely reversible and it does not permanently modify your partition table, your boot loader or anything else on your system. In fact it installs just like a windows application:

Wubi Windows Installer

How do they do this? It is quite ingenious really. Wubi uses a virtual disk image instead of a real physical partition. Wubi team wrote a custom LVM partition manager that allows this. The windows based installer creates the disk files, does most of the configuration and adds a new OS entry to your boot.ini file. Once you reboot, it does a relatively quick “hands-off” installation of the basic system that requires almost no configuration whatsoever. You end up with a fully functional bootable Ubuntu distro without any hassle.

The performance is much better than working in a virtual machine because the windows system is not running in the background and you don’t get any emulation overhead. You do not get exactly the same performance as with the “native” install though, because the loopbacked partion responds more slowly than actual hard drive. Still, it beats working with Live CD which tends to be sluggish.

The stable download from the Wubi website will fetch and install Feisty by default. Unfortunately there is no Gutsy based release, but you can get an alpha version of the installer if you are especially adventurous. Note that it might be buggy.

Wubi was initially supposed to be integrated with Gutsy release but somehow that never panned out. This is likely why there is no stable release here - apparently the Wubi team took the failure to deliver the code on time, and instead of trying to patch up the Gutsy installer, they just started working on the code for Hardy.

It seems that there is a lot of activity going on on that project page so there is hope that once Hardy comes out you will be able to just pop the CD into your drive and have the Wubi installer pop up in windows for you.

In the First Steps article I mentioned it is a good idea to pick a distro with a large, active community. In the discussion thread we already established that the Ubuntu forums are not that great at answering hard questions. But once again, that is not what I really meant by active community. By community I mean the total number of people actively doing stuff with the distro. Wubi is just an example of what happens when a distro reaches that critical mass of users. Bright, inventive people come along and find new interesting ways to make that distro even better and more accessible for the masses.


Bad Behavior has blocked access attempts in the last 7 days.