Archive for the ‘Haiku’ Category.

Updating my operating system trifecta

This weekend, I updated the four operating systems I have installed on my computer. Well, Arch Linux doesn’t really count, because, you know, it just keeps rolling along.

Haiku

I started with the nightly Haiku gcc2hybrid4 build, because it’s the easiest. I enjoy updating to the latest nightly. I installed it and looked for any signs of the usual regressions: video driver problems, sound card problems, network problems… When there is a regression, I find the commit that caused it and report it on the Haiku bug tracker, where the kind Haiku developers promptly fix it. It’s fun! But, alas, everything worked great.

I have a separate partition with the Be File System on it to store all my personal files. It makes installing the nightlies super simple.

Linux Mint

I installed the latest version of Linux Mint, Linux Mint 15 Cinnamon x86_64. I almost never use it, but when I do it’s for two primary reasons. One, my Arch Linux installation is messed up and I’m in a hurry to get something done (usually related to my stupid webcam). And two, I like to experience Linux distributions that are setup to be visually attractive (unlike Arch Linux), to get ideas of what I can do to beautify my Arch Linux setup.

FreeBSD

I reinstalled FreeBSD 9.1 x86_64. It’s funny, no matter how many times I try, I just don’t seem to get FreeBSD. Well, I decided to give it yet another shot. Video, audio, and networking are all working great. I’ll try compiling and installing some more packages tonight.

I have one partition split into to UFS slices, one for the operating system and one for my home directory.

And thus ends my experience updating the all of my operating systems!

I’m thankful for Arch Linux

I had four days off from work this week thanks to Thanksgiving, and I decided to spend a lot of that time trying out some operating systems. Here are my extremely simple, quick, superficial experiences.

Slackware

I used to be a Slackware user, as can be seen in my Linux history. I appreciate that the outstanding installation program hasn’t changed since the last time I used it in 2003. I was excited to use a very stable and nicely setup system with KDE.

Well, I was reminded why I don’t like KDE. First of all, I find the default appearance to be incredible ugly. Second, there are so many little applications working together that make up KDE, and one of them always seems to be either crashing or causing a graphical glitch. So, I erased Slackware.

Fedora

I was interested in trying GNOME 3. After looking around a bit, I realized Fedora was the only major distribution that comes with the standard GNOME 3 Shell by default.

I realized I don’t like GNOME 3. Everything just took so much mouse movement and so much clicking. Maybe I was using it incorrectly. Anyway, I erased Fedora.

Frugalware

I wanted to try Frugalware because it’s one of the only distributions that comes with the Etoile Desktop Environment, based on GNUStep. Frugalware didn’t like it when I told it not to install the boot loader into the MBR. I couldn’t get it to boot after that, so I gave up trying to get it to load.

MenuetOS

I love MenuetOS. I love the story of MenuetOS. A programmer is fed up with people always saying “Sure, assembly language is incredibly fast, but it’s impossible to write any big or serious application with it”, and so he decides to write an entire operating system in assembly language. That includes both the kernel and the GUI (with transparency effects!). It has a text editor, web browser, image editor, music / video / DVD player, Doom, and Quake.

I was able to run it from a live CD. Unfortunately my USB mouse was not detected, but I was able to move the mouse cursor around with some keyboard shortcuts (Ctrl – Meta – arrows / space). If it had worked, I would have installed it onto a partition, just for the geek cred.

openSUSE

My wife liked openSUSE from her experience from a few years ago, so I decided to give it a try. What a beautiful and polished experience openSUSE is! The installer is amazing and the default setup is gorgeous (even with KDE!). So I decided to keep it as another platform to compile and test the video game I’m making on.

…until I discovered two simple packages I need (Allegro and GNUStep) are not in the openSUSE repositories. I’m going kind of crazy. These are pretty basic packages. Does openSUSE really not provide them? I searched and searched on the Internet, but I don’t think I care enough to look into it much further. So, I’ll probably erase openSUSE.

And this is the point when I started to realize something about package managers: they don’t provide any useful information. The first thing I do when installing a new OS is apply updates. These new GUI package managers don’t tell me what is being downloaded or how much is left. It’s like a window that says “Click here to update”, then “Updating…”, then “Done.”. I’m sure it’s possible to see the details somehow, but it sure wasn’t obvious to me.

FreeBSD

I plan on keeping FreeBSD for two reasons: to tinker with and learn on, and to test the video game I’m making on another operating system. It’ll become one of my primary three operating systems.

So, in the end, I end up triple booting Arch Linux, Haiku, and FreeeBSD. I’d still like to have some sort of popular fancy Linux distribution installed, so I might try out Linux Mint with Cinnamon if I have some more time.

I had fun trying out some new operating systems. It’s been three years since I started using Arch Linux and lost any desire to do any more distro hopping. But trying them out again has made me realize how thankful I am for Arch Linux.

My Linux history

My friend in college (2000) introduced me to Linux. Windows 98 was having a lot of trouble on my laptop, so, in my days of dial-up Internet, I drove an hour to a computer store to buy a boxes copy of Mandrake for (I think) $30.

When that laptop died I decided to buy a Fujitsu Lifebook (I cannot tell you how much I loved that laptop). Unfortunately, there was a bug in the Linux kernel at the time which prevented it from booting correctly on a Transmeta Crusoe processor. I found an tutorial describing how to patch and compile my own Linux kernel for the Crusoe using Slackware, and I began using that.

At that point point in time, Slackware had no package manager. Instead, when new software came out (and I love trying new software!) I would download and compile it myself, including all of it’s newly required libraries (GTK2, Pango, Atk…). I had heard about the popularity of Debian and gave it a try. The feeling of using a package manager again to automatically install and update everything felt so incredibly wonderful.

I became tired of the cycle of Debian stable being fresh and new and being tired and old, so I tried Ubuntu. I didn’t want to like it because it was “too easy”, but my gosh, it was just so easy. My favorite version is still 8.04 Hardy Heron, which I still consider the pinnacle of Ubuntu development.

At this point I began to really learn about the Free Software Foundation, and decided that I agree with many of their beliefs. So, I installed a new FSF approved version of Hardy Heron called gNewSense and used only free and open source software on my computer for almost a year. You might be surprised how much Linux software is “open source” but not FSF “free”. ;) Anyway, it was a great experience.

gNewSense became old, and I didn’t like the direction the distribution was going. I wanted the latest versions of software, but I was tired of always formatting and installing new operating systems. I then discovered Arch Linux and the concept of a rolling release distribution. In addition to that, I was really getting into contributing to the Linux community, and the Arch Linux community provides outstanding outlets for that: a strong forum, a highly regarded wiki, and the AUR (allowing anyone to contribute new software packages to the distribution), all of which can be contributed to almost instantly by anyone.

In summary:

I was introduced to Linux using Mandrake.

I learned Linux using Slackware.

I discovered package management using Debian.

I took a break and used the user friendly Ubuntu.

I became passionate about software freedom using gNewSense.

I keep current and in control using Arch Linux.

I used each of those distributions for at least about a year. I’ve been using the same 64-bit Arch Linux installation for three years now and am very happy with it. I dual boot the Haiku operating system. And I still consider myself a freetard. :D

More information: https://wiki.archlinux.org/index.php/User:drcouzelis

Haiku Programming: Saving Settings

I think one of the biggest differences between Linux and Haiku is that of having a standard way of doing things. I probably be talking about this difference a lot in the future.

Disclaimer: I’m very new to Haiku programming, so I may make mistakes or not do something the Haiku way. Please correct me if you see any errors. Thank you!

I worked on my RSS feed aggregator a bit over the weekend. I began implementing saved settings.

Linux

There are many ways to save settings in Linux. You can save settings by using GConf (which I just found out is being deprecated in favor of Gsettings). You can use a text file (please make sure to ask xdg where to save it, and not just throw it into the home directory!). Text files can be XML or Lua or old-timey-X-style (whatever that’s called) or made up just for your application. This is probably an over simplified representation of settings files in Linux, but my point is that there’s no single standard way of doing it.

Haiku

The Haiku Human Interface Guidelines explain the standard way of saving settings in Haiku. It involved saving data into a BMessage and then flattening the BMessage into a file. Later, the file can loaded (unflattened) into a BMessage and the settings can be taken out of it.

The Haiku API includes a simple way to get the user’s settings directory:

BPath settingsPath;
find_directory(B_USER_SETTINGS_DIRECTORY, &settingsPath);

The current default user settings directory is “/boot/home/config/settings”. Use the Append method to add a nice name for your settings file:

settingsPath.Append("MyHaikuApplication");

This will make your settings file “/boot/home/config/settings/MyHaikuApplication”.

Messages

BMessage objects are integral to the Haiku API. Here’s a concrete example of what a BMessage looks like. For a BMessage object named “msg”, it has a “what” type (an integer) that can be used to determine the type of BMessage:

msg->what

I don’t use this for saving settings. It has another (very important) purpose that I’ll talk about some other time.

The other thing it has is a whole mess of named data. Here’s a quick example. I’ll save a number into a BMessage:

msg->AddFloat("Pi", 3.141592654);

I can also retrieve it:

float value;
msg->FindFloat("Pi", &value);

As you can see from the documentation, a BMessage can store all sorts of data, include any object or structure. It can even store more that one copy of named data. For example, all of these values will get stored:

msg->AddString("Address", "123 Business Drive");
msg->AddString("Address", "386 Computer Street");
msg->AddString("Address", "7 Internet Superhighway");

They can likewise be pulled out again by using the FindString method. BMessage objects can also store other BMessages. In summary, BMessage objects can allow you to easily store and retrieve data.

Flatten It

To save a BMessage object to file, “flatten” it using the Flatten method. Just send it a pointer to a BFile:

BFile file(settingsPath.Path(), B_CREATE_FILE | B_ERASE_FILE | B_WRITE_ONLY);
if (file.InitCheck() == B_OK)
    msg.Flatten(&file);

Unflattening a file is just as easy:

BFile file(settingsPath.Path(), B_READ_ONLY);
if (file.InitCheck() == B_OK)
    msg.Unflatten(&file);

Changes

Java has a way of serializing objects. This allows you to save an object to a file and then open it again. It sure can be handy, but if you make a change to the class then you can’t open the saved object anymore (as far as I know). The Haiku way of using a BMessage with named values in it doesn’t have this problem. You can always open it and try to read values from it. If the name of a value has changed or is new, then the find will fail and you can simply use a default value. Then, when application quits, you can overwrite the old settings file with the new one.

I WANT PLAIN TEXT FILES RARR!

I’m a Linux user, and I know the benefits of having settings saved in a plain text file. I don’t know of an easy way to extract information from a flattened BMessage besides loading it in an application. Even so, the benefit is that it makes the application responsible for controlling the settings file, even if it means creating a GUI that allows the user to change some settings. Haiku is a desktop operating system. It was designed to be used with a GUI and a mouse. It was also designed to be easy to use. A plain text settings file might be as easy to use as a GUI, but a GUI can allow settinsg to be more discoverable.

An Advanced Case

My RSS feed aggregator has some numerical settings, but it also has more advanced settings. I need to keep track of every “Feed” that the user wants to follow, and every news “Item” in that feed. That’s a list of Item objects inside a list of Feed objects.

I got advice from An Evil Yak, a nice Haiku developer. I decided to create one BMessage for every Feed and one BMessage for every Item. I’ll then add the Item message objects to their corresponding Feed message objects, and all of the Feed message objects to the main settings message object. I’ll then flatten that message to a file.

What Haiku is missing

I recently realized something about the progress of the Haiku operating system. I think it’s ready for a large increase in users, but something is holding it back. That something is an itch. Haiku is missing the right itch to scratch.

There’s an annoying little problem any new operating system must face, whether it’s mobile, desktop, or other: People don’t want to use an operating system that doesn’t have the applications they need, and people won’t create applications until there are people using the operating system. Non-kernel-developers won’t even considering using an operating system until it is far enough along to allow a person to feel like they can do something with it, besides just being a beta tester. Well, I think Haiku is at that point.

Haiku is ready to be used by many people. It’s quite stable and contains many features that many people are looking for in an operating system, such as a nice web browser, chat, and a media player. It comes with great tools for developers. It can mount flash drives, it can be used to download torrents, and it can be used to connect to wifi. It has a pleasing appearance and is very consistant. Of course it’s not ready for everyone, but it certainly is ready to be used by some.

But

Mass adoption isn’t happening. There is talk on the Haiku forums about that being because of infrequent releases and the lack of focus on implementing single imortant pieces of the operating system. I briefly considered the idea that Haiku isn’t being used more because more people don’t know about it, in regards to there being a lack of some sort of marketing. But the more I think about it, the more I don’t think that’s the case.

I enjoy watching people post to the Community Contributions section on the Arch Linux forums. I like watching new applications flourish. Not all of them flourish, but the ones that do seem to have something in common: They were made by someone who was scratching an itch, and a large group of others had the same itch that needed scratching. One of my favorite relatively recent examples is for a fast and powerful file manager, SpaceFM.

I understand that SpaceFM is a relatively small application compared to something as large as an operating system, but even large pieces of software such as GNOME or the Linux kernel started out small. Haiku has been in development for over a decade, but still people aren’t swarming to it. Why is that?

I think the reason is that Haiku is missing an itch.

Microsoft Windows is the most used desktop operating system today. BeOS, which Haiku is based on, was designed to be a nicer, better, easier to use competitor to Windows. It may be, but things have changed a lot since then.

Windows has become easier to use. Mac OS has become much more popular. And people who want the most simplicity in a computing device will use a tablet or just stick with their mobile phone.

People who enjoy writing software and being their own system administrator have the option of using one of the many GNU/Linux distributions or similar operating systems. Haiku would benefit the most if these types of people would start using it and developing for it more. But why would they?

Haiku was designed to be a easy to use desktop operating system. It has one primary API, one GUI toolkit, and one user interface with relatively little customability. Why would a person who uses GNU/Linux with all of the great options and configurations that it provides want to use something so seemingly limiting?

There are people, like me, who love GNU/Linux but are tired of the fragmentation in distributions, user interfaces, GUI toolkits, sound servers, and so on. I wanted an operating system that was cohesive, designed to be easy to use, was free and open source software, and looked good by default. In my search for something with those features I found Haiku. But I think I’m in the minority.

If the needs of free and open source software developers can better be met by GNU/Linux, why would they use and develop software for Haiku? If they don’t, that only leaves professional software developers, and it would take someone who really likes gambling to take a bet on being able to make money by developing their software for Haiku.

If the needs of people who want an easy to use and cohesive operating system can be met by Mac OS and even Windows nowadays, why would they use Haiku? They would if free and open source software was important to them, but that hasn’t really happened with the general public. They want something that just works.

Who is left to use Haiku? People who miss the days of BeOS are interested in Haiku, but those numbers are dwindling. I’m certainly not one of them. I’d never even heard of BeOS until after learning about Haiku.

What can be done to bring software developers to Haiku? I don’t believe there’s really any great technical reasons to use Haiku instead of another modern operating system. Any technical benefit of Haiku, such as pervasive multithreading, is met with a drawback, such as it might not even boot on your current hardware.

I think stressing what Haiku does offer will help find people who are searching for something like Haiku but didn’t really know it. The more people that are informed about Haiku, the higher the chance of finding someone that is interested in using and developing for it.

What are the benefits of using and writing software for Haiku? I’m in the middle of writing my second piece of software for Haiku, and am learning a lot about why someone would want to use and develop for it. I plan on detailing these points over the next many posts. Maybe it’ll spark some interest in the next generation of Haiku developers. Maybe it’ll cause Haiku to jump into the mainstream! Most likely it’ll just allow me a place to blabber on about an operating system I love to blabber on about.

Software on Haiku

I’ve been spending a lot of time using Haiku recently. I had a particularly fun night recently.

I’ve been itching to contribute some nice software to Haiku for a while. Last year I made my first piece of Haiku software: a screensaver of pretty falling leaves. It seemed like a good place to start for me since I like making video games, and screensavers are pretty much just video games without any user input.

http://haikuware.com/directory/view-details/utilities/screensavers/fallleaves

My plan for my next piece of software is to pick a nice library, compile in on Haiku, and then write a native GUI to interact with it. I decided to start by writing an RSS client. It’s coming along slowly but fine.

It’s funny, there’s “no software applications for Haiku”, but at the same time, every time I think I have a great idea to fill in some functionality gap, I find out there already is an application for it in Haiku that works fine. Combine that with the WebPositive web browser and you now have a ton of functionality that’s provided by websites (RSS feed readers, email, document creation…) Probably the biggest application gap I see is that there’s no native word processor, but it’s really hard for me to care. I don’t really use word processors in any operating systems.

Lastly, here’s my usual list of some of the stuff I did in Haiku recently:

  • Log in to my MSN, Yahoo, AIM, and Gmail chat accounts using Caya
  • Download YouTube videos using youtube-dl and watch them using MediaPlayer
  • Listen to music while I program using a playlist in MediaPlayer
  • Host a simple static web page using PoorMan (a “poor man’s” web server)
  • Create a new software project with the Paladin IDE, setup a new project on SourceForge, and sync my work using git
  • Check my email and visit various websites using WebPositive
  • Use BePDF to view some documents that were emailed to me
  • I had some fun trying out and voting on some of the new software releases on Haikuware.

In the past I’ve downloaded files through bittorrent using Transmission, but for some reason it wasn’t working last week. I didn’t really look into it, but I think I was trying to use a crummy seeds.

I plan on spending more time in Vision, the native IRC client, to learn more about software development in Haiku.

Oh, I almost forgot! I resized my partitions and gave myself a new Haiku native partition. So I now have a partition for the Arch Linux operating system, the Haiku operating system, my Linux personal data, and my Haiku personal data. This way I don’t have to fret when upgrading.

Contributing to the FOSS community

In what ways have I contributed to the free and open source software community? And what can you do to help? Here are some thoughts.

I love helping FOSS projects, but it can be difficult to decide what to do.

Keep it simple

Choose a project where you need to learn one thing at a time.

There are languages (examples: Python, C), libraries (examples: GTK, Qt), and programming paradigms. (examples: GUI programming, threaded programming) When you begin working on a project, you will probably need to learn something new. Try to learn only one thing at a time. For example, if you have to learn gstreamer and GTK (two libraries) at the same time then you might become frustrated. Or, if you have to C++ and Qt (a language and a library) at the same time then you might become frustrated.

So, try to learn one thing at a time.

Working with other FOSS developers

I love working online with FOSS developers. When I get to talk to the lead developer of a project, it feels like I’m talking to a celebrity.

Of course, you should join the mailing list and bug tracker for the project you want to work on. I don’t usually introduce myself. Instead, I just start helping, and people will know me soon.

My FOSS experience

Here are some examples from my FOSS experience.

Many years ago, I wanted to write a new FOSS application. I couldn’t think of any new applications to make, so I decided to make a video game. There are never too many video games.

I learned many things by making video games:

Languages: C, Objective-C, Java, Assembly, Ada

Libraries: Allegro, SDL, Java SWING

I’ve submitted many bug reports to many different projects, such as wxWidgets, Allegro, Udiskie, and Haiku. I really like submitting bug reports and working with the developers to fix the problem. It’s easy to do and I get to use better software.

I maintain some AUR packages. (very easy, but it helps FOSS)

I helped write the documentation for some software from the Arch Linux community, such as Packer and Udiskie. I’ve contributed to the Arch Linux wiki.

Recently, my wife and I wanted a new application for budgetting. I decided to write one. I used Python and wxWidgets. It works pretty well. My next goal is to convert it to C++ and wxWidgets, and then make a version for Haiku using C++ and the Haiku API.

Interesting things

You should definitely work on something that you think is interesting. To me, that’s Arch Linux, Haiku, bug reports, and documentation. Try to find things that are interesting to you!

Lastly, don’t make your goal too big and don’t try to do too much. There are many many people helping in FOSS. If everyone does a little bit, then we can make something great.

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.

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>

Somebody already made that!

I wanna write an application for Haiku, but every time I think of something to make and begin writing down ideas for it, I find out it already exists!

I was all excited to start working on a personal finance and budget application when I found out about BeFinancial. Recently it’s even been released as open source software.

With Linux I think of it as normal to have many different applications that have very similar functionality, but with Haiku that just doesn’t seem to happen as much. Reasons that happen with Linux include:

Different toolkits – On Linux there is GTK+, Qt, FLTK, Fox, GNUStep, and on and on. On Haiku there is one standard toolkit.

GUI vs CLI – Haiku was designed from the beginning to have a fast and easy GUI, although it is still simple to a terminal window with BASH.

Heavy vs light – Haiku applications feel fast and light, even when they are “heavy”. Haiku applications are written to use functionality provided elsewhere as much as possible. For example, emails are saved simply as files in a folder.

Maybe I should think simpler. Maybe I should think, “What do I want to use my computer for that could be made easier and faster by having a special application?”