Jan 31, 2008

Hate: DRM

DRM is an acronym for Digital Rights Management (or as the Free Software Foundation describes it, Digital Restrictions Management) that prevents unauthorized access to various digital works. Although this has been around for a while, it hasn't become an issue in our geek computer world until Windows Vista, which can prevent protected media from playing if there are unauthorized programs running.

Here it is important to define what "unauthorized" means. I'm not completely certain, however I believe this is probably determined by either a white-list or a black-list. Either way, this is completely subjective to Microsoft's point of view and they can manipulate this to their whims. Not only is this restricting the freedom of the users to use the software they want to use, but it also gives Microsoft an unfair advantage in the competitive market. Knowing Microsoft, they will probably use this to their full advantage should a media player come to rival Windows Media Player.

Even more appalling is the existence of laws such as the Digital Millenium Copyright Act, where the government can back the wishes of large corporations by making things like reverse-engineering or DRM circumvention illegal unless you fall under their narrow category of exceptions (ie. You pay them lots of money). It is one more action showing to the rest of the world that America does not care about the freedom of it's citizens, only it's corporations.

One great thing about Ubuntu (or Linux in general) is that you don't have to worry about all this garbage (unless you live in the United States and are caught sharing files, then you might get sued by the RIAA or Metallica or somebody). Totem just plays whatever I want it to play, with no fuss. You have to manually install all the codecs for things like MP3, XviD or DivX, but fortunately (unlike Windows Media Player) the little codec searcher actually works.

Jan 30, 2008

Hate: Programming for other people

Before we get off on the wrong foot (if we haven't already), the amount of hating really depends on who the "other people" are.

I got into programming because it was interesting to make things work, to be able to tell the computer what to do instead of the other way around. Programming is two things to me: a hobby and a tool. It is a hobby to make things cool, like 3D graphics or interesting things like AI. It is a tool to help me do things more easily, like play board games online with my friends or spread information and ideas. These are things where I don't really have to care too much about what other people do, or whether or not it is done up to other people's specifications. I don't have people nagging at me to "change this" or "take this out" unless it is me in which case it is not nagging, it is improving (or so I tell myself).

When it comes to programming for other people, it is another story. It is usually something where I have to create an application or website that I really don't care about, it isn't really anything I'm interested in, and it involves a lot of other people changing their minds on what they want.

From my perspective, when it comes to software development there are three groups of people that are involved: the programmer(s), the user(s), and the businessmen. Unfortunately for us programmers, when it comes to the industry we are considered last of the three. The businessmen make the decisions, the users have the money. The only time we will be given anything we enjoy (like garbage collection) is if it boosts our productivity without dropping sales too much - provided that the businessmen have been correctly informed of this feature.

This is why I hate programming for other people. Maybe someday I will decide to say screw it to the software industry and join the ranks of retarded users. Maybe.

Jan 28, 2008

Love/Hate: Firefox

This one has been a long time coming, I just keep forgetting to put it up.

It is about 95% love and 5% hate, but the reasons that I hate it are very profound.

Firefox is awesome. I can't really remember when I started using it, but it was several years ago. It is awesome since it displays my sites correctly (although under Ubuntu some sites look weird, I think the fonts are bigger or something in the Linux version of Firefox). It is awesome because of all the many extensions like Firebug, Greasemonkey and HTML validators that make my life as a web programmer so much easier. I can use tabbed browsing (although the novelty of this has faded over the years, especially since any modern browser does it too) and have my little RSS feeds in the links bar. And finally it is awesome because I can browse porn sites or the other red-light districts of the Internet without fear of dialers or other nasty bits installing themselves on my system, although this has really no relevance anymore now that I mainly use Ubuntu for everything.

So why does it suck? Mainly because it uses up a ridiculous amount of memory. I have the little RAM gauge on a GNOME panel, and when I close Firefox, it really drops. Oh, system's getting slow? Restart Firefox. How can a browser suck up so much memory? It is ridiculous!

Jan 27, 2008

Love: Gaming

I really enjoy games. Not so much the competitive kind, I played Half-life in high school and eventually got sick of "smacktards" and so I don't really play online games anymore. I do enjoy LAN games with friends, and really good single player games. Unfortunately, there's not very many good ones for Linux. A lot of games will run under Wine fairly well (Diablo II, Battlefield 1942), and some even run natively (Neverwinter Nights, Doom 3 to name a couple).

My problem is that I have yet to find any really good action-RPGs like Diablo II or Oblivion for Linux (and I do a fair amount of searching for games, see FreeGamage). The RPGs that I do find are usually old, like Final Fantasy III or Chrono Trigger style. While these games are good, they're hardly something that I can do anymore when I have to work 40+ hours per week and then do things like laundry and dishes (and write blogs) in my spare time. I like games where I can go in for a half hour to an hour and screw around for a while. Maybe level up my character, or do a couple quests.

Many people would say "Oh, Linux has games like that, look at Eternal Lands or Planeshift." While I respect the amount of effort and creativity that have gone into these games, they are getting old, they are still in development to the point of being mostly unplayable, and they're boring. As a gamer, I need flashy things happening fairly often in order to entertain me. I don't really like having to walk around a world for extended periods of time, just to kill rabbits (which are a huge pain in the ass to click on, user-interface people!) or wander into a territory where after 3 seconds of seeing the loading screen gone some huge monster bites my head off and I am now sent to a death realm or something equally annoying.

My hypothesis: Linux is lacking in games. At least good ones. I have found a few, like Battle for Wesnoth or Sauerbraten that were able to keep me going for a while, but for the most part I really have not been impressed.

Jan 24, 2008

It's a Wonderful Time to be a Programmer

It's true. We have so much available to us. The market for software is growing, the amount of tools, utilities and libraries available to us is gigantic, and the amount of open-source software out there let's us get a lot of our code for free (without even having to work on it!). Languages like Java prop us up with training wheels and safety nets, things like Subversion and backups mean that if we fuck up, our mistakes can go unnoticed (compare this to other engineering works, where they have less room for mistakes). It is a wonderful time for us.

Or is it?

Modern languages and software development frameworks keep us in the dark from dirty things like pointers or SQL, so that we can code in piece without breaking our minds on complicated things. Then we wonder why our programs run so slow under heavy load.

With the breaking of Moore's law and the flat-lining of clock speeds over the last few years, computer engineers have turned to parallel solutions to get an extra kick out of the processors. Unfortunately the modern languages like Java or Python are rife with problems when it comes to parallelism, like race-conditions, deadlocks and livelocks to name a few. Unfortunately, in order for us to switch to a more elegant and safe solution, we need to ditch the style of procedural/object-oriented programming that we have come to have ingrained in our minds.

Here is where the universities come in. The primary educational institutes for those who actually possess the intellectual capacity for this kind of programming. Unfortunately these institutions are governed more by the laws of economics than by computer science, so they try to pump out as many graduates as possible in order to cover the bills. Math is no fun, reduce math requirements. Pointers are no fun, make it optional. Scheme/Haskell are just weird and make many undergraduates cry, so ignore those too. We now have descended to the level of technical colleges (in the USA they are called vocational schools or community colleges I think) where we no longer require smarts to finish a degree, just some cash and some perseverance.

Fortunately for us, most jobs don't require smarts, or education. Your job is to sit there and do what the bosses tell you to do, while they go out, eat steaks and do coke off a stripper's back (as Zed Shaw so eloquently put it at CUSEC 2008). Your job as a computer/software programmer/developer/analyst will generally involve you putting together JavaBeans or gluing together libraries in order to develop an application in a process first put into practice by Henry Ford called the assembly line.

Jan 22, 2008

Facebook Applications Update

A week ago I made a post here:
http://lovehateubuntu.blogspot.com/2008/01/hate-facebook-applications.html
about blocking applications on people's profiles. I've updated it today to also block application requests on the main page. Unfortunately it looks like I won't be able to block ALL application invites since some of them show up with the "so and so posted a picture about you", but this should kill most of them.

Jan 21, 2008

Why Ubuntu?

After hearing my complaints and rants, why would anybody want to use Ubuntu? Everything else seems to be much less of a pain in the ass. Sometimes I wonder myself about why I still use Ubuntu. Here are my reasons:

Safety - I don't have to worry about viruses or other malware. Firefox is nice and secure, and most viruses are written for Windows (I could write a whole article on this subject, but that will wait for a later date). I don't have to worry about accidentally downloading a WMV file and have it wipe out my filesystem. At the same time, I don't have to go "yes I'm absolutely-positively-freaking-sure that I want to run this program" every time I want to do something.

Speed - Ubuntu is slower than my XP install right now, but that's primarily due to the fact that my XP partition has nothing on it and the Ubuntu one has years of stored up documents, music, movies, etc. that will slow it down. After disabling Compiz Fusion (I'm sorry!) and Tracker, Ubuntu runs quite nicely. Especially compared to Vista.
EDIT, Seven months later: I'm running Compiz Fusion again, I've found a better set of tweaks that make it run smoother and get out of my way more often. Don't even notice it anymore. Also, the XP install now has enough games put on it so that it takes longer to boot up than Ubuntu does.

Freedom! This is a big one. I'm not an open-source zealot, I can accept the existence of closed-sourced software, but I really enjoy being able to download and use apps without having to pay for them, or even having to go to a website and find a download link. Fire up synaptic, do a quick search, and install. No strings attached.

Web Development is so much easier. I can install Apache/PHP/MySQL/Rails without any real work except for knowing which ones in Synaptic to select, and they configure themselves to work with very sensible defaults. I have to do NOTHING. Last time I tried to use Apache or IIS on Windows, it was a day before I actually had anything to work with, and it was a big pain to do anything with it.

Sometimes console is a good thing. For finding and executing a file, it's faster to use the console. Maybe Tracker might be better for this, but it doesn't really fit into my whole theme of only using the mouse when I have to. When you're programming, you usually have both hands on the keyboard, so it's easier to Alt-Tab to the terminal window and type something into there. Bash autocompletion also really helps.

That's my reasons for using Ubuntu. I'm sure a lot of these are good for Mac too, but I just can't justify shelling out so much cash for a Mac, and then losing my ability to customize my hardware. I'm a geek! I like to tinker inside my computer and fit things in different slots and all that stuff.

Jan 19, 2008

From Grandma to Guru

From my experience in seeing people use Ubuntu, I have thought up this graph to show how they have found it. In general I find that people actually like it, and except for when it breaks, they like it more than Windows (unless they are gamers, in which case they will always like Windows). I will discuss the reasons for this later, but first, consider this graph. The horizontal axis is the computer-"savviness" of the user, from grandma to guru. The vertical axis is how much the OS would suit them.

As expected with any version of Linux, the amount it will suit them increases with their savviness. This is also the case with Windows, however it is generally lower. Although this may be a subjective point of view, this is the average user: they don't touch anything on their computer settings-wise, they don't want to install software, they just want to use the computer. These are things which will generally not break Ubuntu, and Ubuntu has this nice thing called permissions that keep them from accidentally borking their install. XP doesn't have this feature, so if somebody accidentally deletes a bunch of things they don't recognize, there goes their system. Vista is not (as far as I can tell) like this, instead it locks them down like they're in prison or something which is probably less user friendly. The reason Ubuntu is higher than Windows on this part is because Ubuntu does not have malware and Ubuntu will not randomly corrupt itself (at least not as far as I have seen). In my 5 years of using XP, these are things that usually happen on a regular basis. When a non-computer-savvy person comes across one of these occurrences, they panic. Bad!

We now see that there is a big spike for Windows and a big drop for Ubuntu partway across the graph. This represents people who think they know what they are doing and want to learn/fix everything, but really have no clue what they are doing and just aren't cut out for this kind of thing. Windows is great for these people because it doesn't let you tinker with the internals. Ubuntu however, is based on Linux. Therefore, everything underneath can be customized using config files and what-not. These people can dig into all this and mess up vital config files like xorg.conf. That's not good.

Windows then does a steep decline, because more computer-savvy people tend to dislike Windows for being both a pain in the ass virus-wise, and a pain in the ass for getting in their way all the time and not allowing much customization. Ubuntu comes in here for having no viruses and allowing them to tinker with what they want. However, Ubuntu is a little bit of a pain if you want to modify your kernel or drivers or whatever, which is why Ubuntu drops off a bit at the end.

Jan 15, 2008

Hate: Facebook Applications

On a completely unrelated note, here is a way to block Facebook applications on profiles:

First, you need Firefox. This doesn't work in Internet Explorer.

Then get Greasemonkey: https://addons.mozilla.org/en-US/firefox/addon/748

Install it, then right-click the GreaseMonkey icon (the little brown monkey) in the bottom-right-hand corner and go to New User Script. Type whatever Name, Namespace and Description you want, but put
http://*.facebook.com/profile.php*
as the only line for Includes. Leave Excludes empty.

Press Ok, and you should have a thing asking you for a text editor. Choose whatever you want (C:\Windows\notepad.exe under Windows, /usr/bin/gedit under Ubuntu) and copy-paste this code there:

// ==UserScript==
// @name Blocks Profile Applications
// @namespace Facebook Scripts
// @include http://*.facebook.com/profile.php*
// ==/UserScript==

function removeApplications(){
var boxes = document.getElementsByTagName("h2");

//the white-list
var allowables = ["Mini-Feed", "Information", "Friends",
"Mutual Friends", "Friends in Other Networks",
"The Wall", "Education and Work", "Photos", "Groups",
"Videos"];

for (var i = 0; i < boxes.length; i++){
if (boxes[i].id.substr(0, 10) == "title_app_"){
var inside = boxes[i].innerHTML;

if (inside.substr(inside.length - 4) == "</a>")
inside = inside.substr(0, inside.length - 4);

var title = inside.substr(
inside.lastIndexOf(">") + 1);

var allowable = false;
for (var j=0; j < allowables.length; j++){
if (allowables[j] == title){
allowable = true;
break;
}
}

if (!allowable){
var app_id = boxes[i].id.substr(10);
document.getElementById("box_app_" +
app_id).style.display = "none";

if (document.getElementById("icon_app" + app_id))
document.getElementById("icon_app" +
app_id).style.display = "none";
}
}
}
}

function removeRequests()
{
var divs = document.getElementsByTagName("div");

for ( var i = 0; i < divs.length; i++){
if (divs[i].className == "sidebar_item requests" && divs[i].innerHTML.match(/Requests/) ){
divs[i].style.display = "none";
}
}
}

if (window.location.toString().match(/profile/))
removeApplications();
else if (window.location.toString().match(/home/))
removeRequests();

If you want to change which applications are blocked, you need to change the white list, otherwise it will block all applications. You just put the name of the application in and it won't block it.

This code is not GPL'd, it is not commercial, it is not anything. Do whatever you want with it.

Jan 9, 2008

Hate: Linux Directory Structure

This is one thing where I can easily say: What the fuck? I still remember the first time I used Linux on Mandrake and wondered what the hell all these three letter directories are. usr, bin, etc, dev, I still don't know what some of them do and ignore the conventions for other ones. Maybe on a server, or back 30-40 years ago when UNIX was king this layout was good, but for a desktop with one or two users it's more or less pointless. I'd have to say two of these folders make logical sense: home and usr (although usr could be named something a little more explanatory). Maybe tmp too. The rest of them (as far as I know, from my limited knowledge of the system underlying the pleasure that is Ubuntu) are generally system related and should probably go into a folder called system. This would leave us with 3, maybe 4 folders in the root directory: home (let's call this one users), usr (let's call this one programs), system and tmp. We now are left with Mac/Windows style folders! At least somebody gets it.

Unfortunately among the Linux crowd this directory layout has complete market penetration. Everybody uses it and probably all (or close to all) package management systems and autotools makefiles install things in this layout. This has about as much chance changing as Microsoft going out of business.

Jan 6, 2008

Love/Hate: Scripting Languages

Scripting languages are languages like Bash, Python, Ruby, Tcl, ... that are interpreted languages that are designed for quick development. Some of them like Ruby and Python are designed for more general purpose things, but are still at heart a scripting language. What is the problem with these? Well, nothing really. I love Ruby, it is a gorgeous language that is easy to use yet still fairly powerful. Combined with Rails it makes an excellent web development platform (unless it is speed you are looking for). Python is good too, however as a computer scientist and a programmer, there are some objections I have to it like lack of encapsulation, enforced indentation - these are more philosophical objections than practical ones though.

So what is the problem with these? The memory footprint. Scripting languages were originally designed to make tasks more automated to take some of the burdens away from the system administrator. They are generally slower and more memory-intensive than the same program would be if written in a compiled language like C++.

Under Windows, there is not much of a problem with this. For the most part, the programs are compiled applications (a lot due to the closed-source nature of the system, but I don't really care). When you come to Linux though, the average Linux system comes with several scripting languages available, with others easily installable. So people developing little apps for Linux like to use scripting languages because they are easier to program with. Now we have tons of little tiny apps that don't really do anything but suck up a ton of memory for each instance of their interpreter running. I have a little app that periodically checks to see if I have new mail in my Gmail inbox that was written in Python, and it uses 10mb of memory! How does that happen? Then you have aMSN, written in Tcl, that uses 40-50mb of memory. I thought Linux programmers were concerned with efficiency! I have 1GB of RAM in this thing which should normally have no problem, but when you combine Firefox, a bittorrent client, anything Java, Ubuntu's caching and all these little tiny background processes written in languages that they never should have been written in, I'm soon running at a crawl because everything is eating up my memory and then moving into the swap space. It just further proves the theory that "as hardware gets better, software gets more inefficient".