GNOME 3 pre-release opinions

It was announced on the GNOME developer list that GNOME 3 won’t have minimize or maximize buttons:

http://mail.gnome.org/archives/gnome-shell-list/2011-February/msg00192.html

That’s a huge change. My initial reaction was “Whaaa?”, but then I started thinking about how I use my window manager (currently FluxBox). I almost never use the minimize and maximize buttons, and certainly wouldn’t miss them if they were gone.

The mailing list message talks about helping users learn a new work flow. This reminded me of when I started using Haiku. Haiku has a powerful file manager called Tracker. Tracker is a spatial file manager, which means every folder opens in its own window. The first thing I wanted to do was change it to a navigational file manager. So, I went to the Haiku documentation.

I found the information I was looking for, which included this comment:

Before you switch Tracker to Single Window Navigation mode, because that may feel more familiar to you, we recommend giving the menu based browsing a try first, as that may actually work much faster for you after getting used to.

So, I decided to continue trying Tracker as a spatial file manager, and now I really like it.

Now, in regards to GNOME 3, it’s hard for me to express how I feel about it. Let’s see if I can summarize it:

  • There are too many things that move around the screen. Things go from the window view, which shows almost nothing but the window you’re actively using, to the activities view, which shows everything at once. And I mean everything, every workspace, every window, every running application, every recently used document, directories, and search. And those things were all designed to move and live and grow as you use your computer, which means things are shifting around a lot.
  • It forces a new workflow on users that doesn’t appear to be better than another workflow. This may not be a bad thing. Haiku kind of enforces a new workflow, but I quickly learned to like it. With GNOME 3, I have no idea how the new workflow is supposed to benefit me. Which leads to:
  • How will they train people? When GNOME 3 is released, the new design may be great for many many people, but they need to learn how to use it before they can benefit from it.
  • It requires accelerated graphics.

GNOME 3 hasn’t been released yet, and my opinion will probably change. I hope the GNOME developers know what they’re doing, because I sure don’t know what they’re doing.

Icons

I’m very unhappy with the situation of icons in Linux.

When I started using Linux around ten years ago, it seemed like every application had it’s own way of adding an application icon. Nowadays, it seems like most applications use the standard FreeDesktop.org method, but a few don’t, or something. I don’t know. All I know is, I always end up with a few applications that have icons that either look horribly out of place or simply just don’t exist.

Haiku is another open source operating system. It has beautiful icons compared to any other operating system, and I think there are a few reasons for that:

  1. The one and only Haiku API encourages software developers to use the official method of adding an application icon.
  2. All of the other icons in Haiku look so nice that, if you don’t make a beautiful icon for your application, it will stick out like an ugly application icon.
  3. There’s hardly any software for Haiku at the moment.

Anyway, I recently started using the Fluxbox window manager. I chose it because it has a clean and simple user interface, and I can disable all application icons.

The return of malloc

Should you always check the return value of malloc? There’s a heated debate over the answer.

One group insists that, in good software development, you always check the return value of a function, including malloc. It appears that most software developers are in this group.

The other group thinks otherwise. I’m in this group. Here’s why.

I was taught, like many programmers, to always check the return value of malloc. This thread made me think otherwise: Always check malloc’ed memory? The asker raises many interesting points.

When thinking about checking the return value of malloc, it’s important to consider the operating system, hardware, and type of software that you are working on. Linux may behave differently from FreeBSD, a desktop computer may behave differently from a mobile phone, and a GUI application may need different considerations than a shared library. Also remember that it may not even be your application that is causing malloc to fail.

I’m primarily concerned with the case of a GUI application running on Linux on a desktop computer, because that’s what I work on. Even so, it’ll be fun to think of the other cases.

Failure Response

So, let’s say you check the return value every time you use malloc. What do you when a return from malloc fails? You could simply quit your application immediately. You could try to quit your application gracefully. You could cancel the command that caused the fail and display an error message. You could loop until either malloc returned a valid result or the computer catches on fire.

Can You Respond?

Let’s pretend that malloc failed. Imaging the state that the computer is in that caused it to fail. Would it still be able to do any processing at all? I agree that it is extremely important for an application to never lose the user’s data, but would the computer even still be able to recover anything at that point?

Does malloc Fail?

In Linux, malloc may never even fail. On the malloc man page under “Bugs”, it states that just because malloc didn’t fail doesn’t mean it has enough memory.

The Trial

So, I wrote some code to try and make malloc fail. When it does, it tries to recover and quit gracefully.

#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct NODE
{
  int data[40000000];
  struct NODE* next;
} NODE;

int
main(void)
{
  NODE* node;
  NODE* first;
  NODE* last;
  int stop;
  int count;

  first = NULL;
  stop = 0;
  count = 0;

  while (!stop) {

    node = (NODE*)malloc(sizeof(NODE));
    count++;

    if (node == NULL) {
      printf("FAILED! %d \n", count);
      stop = 1;
    } else {
      if (first == NULL) {
        first = node;
        last = node;
      } else {
        last->next = node;
        last = last->next;
      }
    }
  }

  count = 0;
  node = first;

  while (node != NULL) {
    last = node;
    node = node->next;
    free(last);
    count++;
  }

  printf("FREED %d \n", count);

  exit(0);
}

The Results

Here are the results when running it on three different operating systems.

Arch Linux: After 55 seconds, the message “Killed” was displayed. This was a message from the operating system, not my code. My program never had the opportunity to see a failure from malloc nor try to cleanup after it.

Haiku: Almost immediately the program stopped. The output was “FAILED 10, FREED 9″. That means that after trying to allocate about half a gigabyte of memory, it failed to allocate anymore and was able to clean up the stuff it had.

Windows XP: The results were similar to Haiku: Almost immediately the program stopped. The output was “FAILED 12, FREED 11″.

Conclusion

By using this simple test, it appears that checking the result of malloc can be a worthwhile task. My conclusion is contrary to my feelings from the beginning of this post. I think I just might have to change my programming habits.

What I do in Haiku

This is a growing list of things I do in the Haiku operating system. The purpose of this list is to have an easy reference when people ask, “So, what can you do in Haiku?”.

Also, this is not a list of possible examples of what I could do in Haiku. Instead, it’s specific things I’ve done while sitting down and working with my computer.

  • Update my tech blog. (WordPress, the one you’re currently reading)
  • Browse the Internet with WebPositive.
  • Use Gmail.
  • Use Facebook.
  • Chat with friends on Google Chat, Facebook Chat, and MSN with Caya.
  • Type in Japanese.
  • Download and watch a video using the Transmission bittorrent client.
  • Erase a CD-RW.
  • Download the latest nightly image of Haiku and burn it to a CD.
  • Watch and listen to the lecture video (M4V) from my graduate course.
  • Use SSH to login to my school to work on a graduate lab.
  • Read and write files to my Linux EXT3 drive.
  • Listen to a playlist of my MP3 music files.
  • Video game development using the PE “Programmer’s Editor”, GCC, and the Allegro Game Library.
  • Version control for my software using SourceForge and git.
  • Enjoy the screensavers. This may seem like a small thing, but I believe it’s important. Haiki has at least two screensavers that I think are really nice, namely “Butterfly” and “Icons”.
  • Use multiple desktops to make my workflow easier.
  • Take a screenshot using the Print Screen key and the Screenshot application.
  • Edit an image in WonderBrush.
  • View PDF files using BePDF.

Screenshots

Desktop 1: Programming (PE, Terminal); Desktop 2: Internet (WebPositive, Caya); Desktop 3: Music (MediaPlayer); Desktop 4: Document (StyledEdit)

<todo>

My new love: Python + wxPython

I have a new love. It’s Python with wxWidgets. Add xwGlade, and I think I’ve found programming nirvana.

I’ve been programming in Python for a couple of weeks now. I find it very easy to learn, writing code is super fast, I don’t have to waste my time writing things that the language already understands, it’s well documented, and it’s pretty to look at and read. That also happens to be pretty much everything I’d read about Python. As an interpreted language, I’d also heard that Python is slower that C, but I certainly haven’t noticed it being slow.

I also started using wxPython about two weeks ago. It was easy to learn and make a GUI with, and the GUI I made looks great on both Linux and Windows.

wxGlade was dead simple to learn. I was able to throw together a GUI really quickly and start adding functionality to it.

Here are some of my favorite sites for learning wxPython:

I have very little time to work on personal programming projects, but working with Python + wxPython + wxGlade has been extremely fast and fun.

Mac OS X 10.7 Lion reactions

Some of the features of the upcoming Mac OS X 10.7 Lion were announced today. I am very disappointed in the changes Apple is making to the OS and the UI.

I used to really like Mac OS X, but in recent years I have been liking it less and less. I don’t actually use Mac OS X, except when I visit my mom and use her iMac with version 10.3 on it. Even so, I like to follow its development.

It’s been hard for me to describe, but I think today’s announcement finally made it clear to me. I think the original idea of Mac OS X is wonderful. There is a windowing UI with lots of drag and drop. It has great default settings and appearances. There is pretty much one way to do everything: UI is Aqua, software installation is drag and drop, and so on.

What I mainly don’t like about recent versions of Mac OS X is the “layers”. Apple keeps adding layers and layers to the UI, and it looks like a mess to me. Spotlight adds search to the desktop which should be in the file manager. Dashboard adds a literal extra layer of tiny applications that run on top of your other applications. Time Machine “takes over” your entire desktop with a space theme. That springy thing in the dock is the “answer” to having too many icons down there, and it isn’t even consistent in appearance with itself all the time. Newly announced features include super-fullscreen mode for some applications that breaks the established window model, a new method of cycling through open applications (while leaving the old methods), and a new screen to store and launch applications from. It all looks very nice and flashy and like a load of crap to me. You see this screenshot from the Mac OS X early public beta? It looks fabulous. I wish it still looked like this.
Macosxpb

Another thing I greatly dislike is the tendency for applications to do everything. iTunes, the music player, now plays movies, stores mobile applications, and includes a store. iPhoto, the image viewer, connects to Facebook and can send emails. Garageband, the music writing software, now teaches you how to play an instrument.

Lastly, the “transition” from Aqua to brushed metal is terrible in my opinion. The UI doesn’t look nearly as nice and consistent as it used to.

My general feeling after hearing about the updates was for how grateful I am for Haiku. I started using Haiku because it was free and open source software and it was unified like Mac OS X. Now I’m thinking Haiku is a better Mac OS X than Mac OS X.

Mechanical keyboard

I finally saved up enough money and bought a mechanical keyboard. It arrived yesterday.

I decided to buy the Filco Majestouch Tenkeyless with Cherry MX Brown switches, from elitekeyboards.com. It appears to be extremely popular for first time mechanical keyboard buyers.

My reasons for choosing this keyboard include:

  • The small form factor fits on my desk better. It allows me to reach and use my mouse more easily. I never use the number pad.
  • It has a very high build quality and will last a long time.
  • Mechanical keyboard users say that almost any mechanical keyboard is better than the cheap membrane keyboards that come with most computers. I decided to get the Cherry MX Brown switches because they are very quiet but still tactile, meaning you feel a slight “bump” as you press the key down.
  • It is relatively inexpensive. I paid $125 USD. That’s more expensive than a $70 Unicomp buckling spring keyboard, but less expensive than a $265 Happy Hacking keyboard.
  • I bought replacement keycaps for the Windows keys from Das Keyboard. Although they are made for the Das Keyboard, they work very well on a Majestouch keyboard. They fit perfectly. The size difference is unnoticable. The replacements are a bit more shiny than the other keys. If you use one of the replacements that have lettering, the font is different.
  • It has full n-key rollover. I’m not sure I would ever really need this feature, but it’s pretty cool nonetheless.
  • I like the key layout. All of the keys are in the right place and are the correct shape. I can’t decide where I prefer the control key, so the bottom left corner is fine for me.

I’ve only had it for one day and have been too busy to use it a lot, so I don’t really feel like I can give it a “review”. But here are my immediate opinions:

  • I really like the size, although it is taking some time to get used to.
  • The build quality does feel great. It’s kind of heavy.
  • The keys are very light and easy to press. I feel as if I can type quicker without having to worry about missing keys.
  • The replacement keycaps for the Windows keys work fine. They don’t look “perfect”, but they work perfectly, were a relatively cheap solution, and were super easy to install.
  • I now understand why mechanical keyboard users describe cheap membrane keyboards as feeling “mushy”. The Cherry MX Brown switches feel sort of “hollow”, as if there’s nothing under the key. Even so, I can easily press every key even if I don’t hit it “straight on”, I feel a nice “bump” as I press it, and it immediately springs back up when I release it.
  • I am happy with my purchase and feel it was worth the money.

Other notes:

  • I am using it with the included PS/2 adapter.
  • I got the (standard) black model.
  • The cord seemed a little short when I unpacked it, but the length is just fine. I think I’m just used to a super long keyboard cord.
  • I don’t think many people would be convinced that a mechanical keyboard is a whole lot better than a cheap membrane keyboard and worth the extra money IF they only try it for a short test. I get the feeling it’s something a person would have to experience for an extended period of time, and then try going back to a cheap keyboard to really feel the difference, and to feel that it’s worth buying. Of course, there will be people that love it from the beginning, and there will be people that never really like it, but that’s the general feeling I get after purchasing and using my first mechanical keyboard.

Social networking privacy

I, like many people, have accounts on many different social networking websites. I, also, like some, am very unhappy with the terms of service and lack of privacy on them.

Privacy

The way I see it, there are two issues in regards to privacy. First, there is the issue of who sees my content. Even if I post photos to a website such as Shutterfly and password protect them, I still don’t know what Shutterfly is doing with them. (for the record, I’ve had a fine experience using Shutterfly) Also, even though Shutterfly offers unlimited image uploads of unlimited resolution, I found out they still reduce the file size by lowering image quality. Boo.

Second, there is the issue of who controls my content. When I post a blog entry to a website such as Blogger, I don’t even know what I agreed to let Blogger do with it. I assume it is being scanned for information to increase advertisement revenue for them. Also, whether it be images or blogs, once the website goes down (and all websites eventually go down) then all of my content goes down with it. I can’t imagine too many people save a local copy of their long (emotional, personal, thought provoking…) blog entries, and I think many people are beginning to not even save a local copy of many of the images they post. (such as from mobile phones) All of that will be lost.

As long as I’m ranting, I also think it’s ridiculous that so many people post photos on Facebook when Facebook saves them at such an incredibly low resolution and quality. Yuck.

I was excited to hear about projects such as Diaspora, but was very disappointed at their lack of quality and progress.

I give up

I gave up. I decided to do something I’ve been meaning to try for a long time. I setup my own website from my personal computer using my regular DSL internet connection.

I had never done anything like this before. I started with the simple instructions for setting up my router and , and signed up for a free domain name with DynDNS and ddclient. That took a couple of hours one morning. I then spent a few hours in the afternoon and followed the simple instructions on the Arch Linux wiki for setting up a LAMP server. Then I installed the AUR packages for Zenphoto and WordPress. I put a simple password on Zenphoto as a way to simply control who sees our family photos, and may or may not do the same on WordPress. I also haven’t decided if I’ll host my own WikiMedia site.

Conclusion

I don’t plan on using Shutterfly, Blogger, Myspace, or LiveJournal anymore. I still plan on using Facebook, but simply as a way to keep in contact with many people easily. I might not move my Archlinux.me posts to my own website, since I don’t think my wife appreciates my nerdy rants.

So, I now have a beautiful website for blogging and posting photos that has no EULA, no privacy concerns, no size or quality limits, and no advertisements. It uses free and open source software, and didn’t cost any extra money to setup and run. I own my content, and I can share it with whomever I want and do with it whatever I want.

Free music

I really dislike the RIAA, the major music industry in the United States. I decided to stop buying music from them.

About two years ago I decided to completely stop listening to music from the RIAA. I deleted all of the music I had from them. I now only download (and pretty much listen to) music that is available for free by the artist. Also, I’m not against paying an artist for music, as long as they are not associated with the RIAA. Here are some of my favorite websites.

ccMixter

Not only does all of this music cost no money, but you are also free to do (almost) anything you want with it, including adding it to a movie soundtrack or making a new song with it.

muzie

This is a website for Japanese musicians. It is easy to navigate and there are many different styles of music. There is music of MANY different styles available. I contacted some of the artists and thanked them for their work.

OverClocked ReMix

This website hosts tons of video game music remixes. If you don’t know where to start, try downloading some of the albums they have produced.

Magnatune

Magnatune hosts many different types of music from around the world. It is possible to find free music to download from them. Most of the music there can be purchased and is inexpensive, and much of the profit goes to the artists.

If you are interested in removing any RIAA material from your music collection, you can use the RIAA Radar.

At first I was worried about if listening to only free music would work. It’s been a great experience. I don’t feel like I have any shortage of good music to listen to.

Duck Duck Go

Thanks to the Arch Linux forums, I learned about the internet search engine Duck Duck Go. I have replaced it as my default search engine at home and at work. I’ve been using it for six months now. It’s been a good experience. Here are some of my favorite features:

Cleaner and better results – The information I’m looking for is often automatically displayed at the top of the page. If it isn’t, it’s usually one of the first few links. In my experience, if Duck Duck Go doesn’t find what I’m looking for, Google doesn’t either.

Automatic new results – There are no “pages”. Instead, the results appear as you scroll.

Privacy – There is better privacy compared to Google. (as far as I know)

Bang commands – “Arch Linux !images” or “tile based game !sourceforge” or “drcouzelis !google” or “Terminator !wiki”. I usually can guess a new bang command without looking it up.

The only thing I don’t like about it is that, compared to Google, the site-search functionality seems a little weak. So instead I usually do something like “drcouzelis site:bbs.archlinux.org !google”.

I haven’t figured out how to use Duck Duck Go as a verb yet. (“Try googling it” vs “Try duckduckgoing it”) Instead, I just say “Try doing an internet search”.