Saturday, December 29, 2012

Sabayon 10 Review - Why wanting 11 is a bad thing

I have long been a die-hard Sabayon Linux fan. I have used it for laptops, desktops, and servers in the past, but its use best fits user-centric computing: laptops and desktops. Sabayon is like Arch in that the packages are bleeding-edge. They follow upstream exactly, or at least within minor releases. This is thanks to Gentoo's Portage (source-based) and Sabayon's build server. When source code is pushed, Gentoo packages it and Sabayon makes it available as a binary. Theoretically this is a good thing. Before you can jump into this theoretical goodness you must first get Sabayon to work, and for 7, 8, and 9 this was no big deal; not the same story for 10.

If you look at my Bash's history, it won't be that grand. In fact, 11 commands might seem like a freakishly small amount. And why would package names like "kubuntu-desktop" appear on someone's history that praises Sabayon in their review? The answer is simple. Sabayon makes installing Gentoo extremely easy, but what it fails to do is adapt to slightly unusual partitioning schemes.

 My partitions are set up in such a way that packages are installed on a solid state drive, my hard drive gets its own /home, and a removable media is formatted with tmpfs. Sabayon was able to do this (with relative ease, I must say. Compared to something such as Crunchbang). Sabayon was even able to punch through the logical volume management on the disks, unlike some installers (I'm looking at you again, Crunchbang). The install worked and all was well, grub installed, my user was created, and the prompt to reboot came up. Upon reboot I was dropped into a shell (with a very pretty background image, I must say) prompting options. The "shell" command launched a limited shell, and I used it to dd /dev/sda with /dev/zero.

The second installation was the same story, even with just the hard drive being formatted to ext4 and used as the / partition.  At this point, I gave up and reinstalled lubuntu. A cut of losses.

Theoretical and past versions
Despite all of the trouble with Anaconda (Sabayon's installer) I will still always have a soft spot for Sabayon. The fact that such a small team is able to write something so big is astounding. They use a lot of Gentoo's work, but they add a LOT of their own stuff (including a package manager) and ship it upstream, benefiting the community. Entropy, the binary package manager, has features unlike that apt, yum, or zypper could ever dream of having without third party software.

With a few simple commands entropy can back up and export the entire database of installed packages, and have it reinstalled on another computer without even the hint of a depedancy problem. Even if you backed up Coreutils and did an equo restore over a newer version Entropy can adapt to not allow any problems to crop up.

Aside from the package manager itself, Sabayon features some stunning visuals and branding, including a custom TTY (which, by the way, stops kernel error logging unless explicitly specified. Perfect for those of us with a damaged USB port logging problem), nice default tools (as they say: "gcc is there, out of the box"), and your choice of desktop environment.

Sabayon has been described as "Gentoo for the lazy", and largely that's what it is. A platform for installing Gentoo and all of its benefits, with some added bonuses, like Entropy. The wiki is subpar compared to FreeBSD or Arch's, but it is there. It is a decently popular operating system, so there is also some community support. A big question is whether or not it will run Steam, and that answer is an astounding yes. Steam has been in the repositories since closed-garden beta.

Sabayon has a bright future. Low resources, a "kickin'" package manager, aesthetics, and a good core (Gentoo Linux) give it the edge over its competition. That said, there are still some bugs to iron out. I ran into a documented bug in the installer and wasn't even able to get it installed. If you like tinkering, or if you like Gentoo with an installer, Sabayon could possibly be the OS for you.

Large .iso

Wednesday, December 26, 2012

Leapmotion on Linux: hitting the ground running

Leapmotion is an imaginary (in that it doesn't exist yet) but impending device that could possibly shape the future of interface. Since the creation of computers, wiring, CLI, GUI, and WIMP interfaces have all changed the way we defined our user experience. Look to any science fiction novel made after the 20th century, and you will find that the interfaces are floating masses of plasma, interacted with by the will of a user's fingertips in thin air. This technology is not far off, and its future looks especially promising for Linux compared to other commercial ventures.

A bit about Leapmotion
Leapmotion is a device that reads input from an infrared sensor about the environment around it. With an onboard CPU, it flushes out the noise and triangulates movement, with the precision of 5 milimeters. This processed movement data is send to the (proprietary) driver which executes commands from the input. Pretty nifty, especially for businesses where interaction with a computer would be a cumbersome job (think: Hazmat suits) and consumers that want a taste of the future.

Where Linux comes in
Linux has been the short end of the stick where third-party and commercial support are concerned. Canonical has changed that, especially over the past year (2012), and it's taboo to NOT have Linux support. The SDK is fully compatible with Linux, it will have supported kernel drivers, and it will also be used on embedded Linux devices (Android especially).

Gobs of Drama
 There has been an ongoing debate on LeapMotion's Linux page about whether or not to Open-source the driver. Advocates say that open source "supports itself" and "ensures that the technology won't end up in the landfill, but rather in the pantheon of human knowledge". However, senior members of the LeapMotion forums aren't nearly as understanding.

Some of the members advocating proprietary drivers refused to distinguish between gratis and libre for the sake of their argument, using childish retorts such as

 "all Linux users are so cheap they wouldn't give you a cup of coffee for a year's worth of software" -- FadingFast

"free open source" don't make much sense" -- flaredOne


"I guess it is because people can't "touch" software (hate that name there is nothing "soft" about it), and as such they believe even though people spend their lives creating this that they are some how entitled to have it for free and deny the creators of it any profit (not to mention a salary)."--FadingFast

These are not paid members of the LeapMotion development team. But according to some of the users in the forums, the team developing the Linux drivers is making it exceedingly difficult to develop FOSS drivers via reverse engineering, especially due to the "Wall of Silence" and mathematics involved in such reversing.

How the team feels about FOSS is a moot point. They are providing facilities for use on Linux before release, being generally very nice to the Linux community (they even have a subforum for Linux, how nice), and offering support for when a Linux user needs help. The way that the senior members took up arms is still inexcusable, however.

Wednesday, November 21, 2012

Opera 12.10 web browser review

Technically minded people (devs, hobbyists, etc) love hearing about operating system reviews. The features of the file system, what kernel drivers are deprecated in this version of software X, etc. But for the end user, the userland is what matters. Software that runs utop these abstractions. As a long time Firefox turned Chromium user, I thought I had found my love in web browsing, but I would be wrong. Opera 12.10 came by and stole that from me, with featureful speed and elegance. Here is the review of Opera 12.10!

Monday, November 12, 2012

Manjaro Linux .82 review

A while ago, I did a review of Manjaro Linux. Manjaro, for those of you who are curious on its specifics, is a pre-configured Arch Linux distribution with some custom tools, including Archbang's installer (they now have a custom one in development), a Pacman (the package manager) frontend, and a Manjaro-branded XFCE desktop complete with their own Conky config. The version that I reviewed, .80, had numerous bugs including insane RAM usages with LightDM and a dependency on Nvidia's proprietary driver. See how Manjaro is doing now in the week's second review.

Sunday, November 11, 2012

Chakra Claire-2012.10 Review

After hopping from an Ubuntu install with a broken permissions system (how is it even possible that root can't read files anymore?) to Sabayon, and promptly remembering why I left Sabayon in the first place, I have hopped to a distribution I haven ever used before: Chakra Linux. For the readers that don't know, Chakra is a Linux distribution with a very stiff, almost dictator-like control on what packages can and can't be installed from their repositories, and the default desktop environments (or the ones that are available). Take a look at why I chose to let the Chakra developers decide what was good for my computing sanity in this week's review.

Saturday, November 3, 2012

I wanted to like BSD: But it didn't let me

This is not a review or a howto, so it does not go along with the theme of this blog persay. I would just like to illustrate my recent experiences with BSD in a journal-like format, and present my ideas on why it will never work for a desktop system in the state it is in now.

Scowering through the internet last night, I was reading up on FreeBSD, a system I have had an interest in for years. Jails were my primary interest, since I am an avid distrohopper and security enthusiast and Jails offer to make both of those tasks easier. Last night, I worked up the nerve to download a few distros (PC-BSD, FreeBSD, and GhostBSD) to try out the next day. I was so excited that I had a long drawn-out dream about BSD where familiar things had small differences to them, which is how I feel about BSD. Linux with positive differences. If only I knew what a shark attack this would turn out to be, I would have just stuck with Gentoo Linux.

Oddly enough, the comic about BSD installation turned out to be true for BSD installation and it highlights perfectly what happened when I tried to install PC-BSD. If you read "My Thoughts on BSD" above you will see that "...the first kernel panic I ever experienced was in BSD". Five versions and a release candidate later, this holds true for its second time. There was an error with ACPI that disabled booting.

Googling time. "BSD panic ACPI" revealed a kernel option called "debug.acpi.disabled" and its value "ec" to fix the problem. When I rebooted, it was to no avail. A page fault occurred, and the forums and #freebsd on didn't know how to fix the problem.

The same thing happened on vanilla freeBSD. 

Later, on GhostBSD, a major logging error, a filesystem reading error, and eventually a kernel panic brought the system down (I will admit, I dd'd onto a FAT filesystem which may be my fault, but it is normally the standard).

This run-around was a day long process of Googling and unproductive computing, that eventually led to the death of my hope of installing it at all.

What is wrong with BSD 

Nothing and everything. That statement holds true for what is wrong with BSD. BSD has so much right, it is just everything else in the world of computing holding it back. If BSD had proper hardware and third-party support it would blow Linux out of the water in terms of its features. Jails, a sane networking stack, and the beautiful kernel are what make me jealous of those that have hardware that agree with FreeBSD.

After 40 years of providing an ecosystem on which to compute, BSD developers should consider the fact that many of the end-users goals have changed. Not everybody is a kernel developer that can make proper use of vague pointer output and undocumented debugging flags. Likewise, some people just can't afford buying a CD or downloading and trying to install an operating system that may not even install, and if it does have to worry about the nearly nonexistant third-party support.

PC-BSD has got it the rightest out of any of the BSDs, but even that doesn't nail it. If I, a technical user, cannot install the system after a day of trying, it needs work. And hardware support is an IMPORTANT aspect of an operating system. If I had the money to throw at a third party that would do the same thing with BSD that Canonical did with Linux (let's face it, the Linux ecosystem would be FAR behind where it has gotten itself recently without Canonical) I would dump my funds into their wallets ASAP, but PC-BSD isn't quite there and it just seems to be a stagnant markup.

This will be my final rant about BSD until I can install it and give it a proper review. I really wanted to enjoy BSD, enjoy ZFS, Jails, ports, ksh, all of that great Unix stuff, but BSD simply would not let me.

Saturday, October 27, 2012

How to install vim plugins

I have long been an Emacs user, but find myself using Vim more frequently when editing from the command line. One day I went to edit a Clojure source file and found that indentation rules and syntax highlighting were not installed. Using the VimClojure plugin I am now able to edit Clojure files properly, but it was a pain for me (a noob when it comes to vim) to get it working. Here is how it is done:

Command Line

Download the file

Move the file to /usr/share/vim/vimfiles/
sudo mv /usr/share/vim/vimfiles/

Extract the file

sudo unzip

For tar.gz:
sudo tar -xvwzf plugin.tar.gz

If this ends up creating a directory instead of extracting the files, do the following steps.

cd into the folder
cd created-folder

Move its contents
sudo mv ./ ..

You can now start using the plugin. But beware, for many plugins you are also required to edit the vim configuration file at /etc/vim/vimconfig

My Clojure plugin needed syntax highlighting and and filetype plugin indent on. Your README file (if there is one) should tell you what to do.


 Download the plugin
  Run a file manager as root.

 Copy the zip file from wherever you downloaded it.
Plop it into /usr/share/vim/vimfiles/ and extract it.
If the README file specifies it, edit the vimrc file found in /etc/vim/vimrc/

This is usually just a matter of uncommenting a few lines. I had to uncomment syntax highlighting and file auto indent.

Tuesday, October 16, 2012

Opensuse 12.2 Review

Opensuse is an enterprise operating system produced by Novell. It is free (in both senses), fast, and standards-compliant with most of the Standard Linux Base's demands (including .rpm as the package format). I have found that Opensuse is widely applicable and should be better praised, because it works in such a different way than any distro I have used to date. Here is the review.

A whole new world of efficiency
12.2 is fast. And that isn't just a buzzword, it really is fast. Everything from boot to actually using the operating system is just faster than it would be on Ubuntu with a similar setup. One of the reasons for this is the leaving out of certain modules and programs (indexing) that take a big toll on the speed of the system. Also, since it is mostly used for servers Novell cannot afford to have a performance issue, so they trimmed the fat.

Another thing I noticed was incredibly low memory usage. On KDE with Firefox it uses around 500 MiB of RAM. That is extremely small considering that KDE is a beast that is notable for using >1GiB when it feels like it. I'm sure that in an environment like the awesome window manager that number would fall even further.

Repositories and Packages

This is the only area where I was disappointed. In the past small repositories have been a dealbreaker for me, and Opensuse came close. Its repositories aren't nearly as extensive as Ubuntu's or Debian's, or even Sabayon's. For instance, for an edX course a program named Scratch  was needed. It was not in the repositories and it was not available as an Opensuse-compatible .rpm, so I have to compile it from the source. That is a large inconvenience. And it has happened before, too. The Awesome window manager isn't even in the repositories, and there is no .rpm package with  satisfiable dependencies. That's why I am stuck with KDE for the time being.

The package manager is nice, though. As is the command line version. .rpm grouping (shown above) and pattern searching (command line) are helpful tools to install packages. In fact, pattern searching reduces the needs of pesky meta packages that have been known to cause breakages in systems past.

Opensuse even comes with a program called apper that can install .rpm files, which is much alike what Fedora and Ubuntu do with their respective formats (with software installer and gdebi or the software center)
 If you are researching Opensuse, you have probably heard about YaST. Yast is the configuration tool that comes with Opensuse, and it has features far outside the range of normal configuration tools. Some interesting features are the ability to replace your bootloader from a combo box, install and browse software, configure kernel options, and even set up a mail server. If you can think of something you need to do, it can be done via YaST.

Opensuse is enterprise. That's all there is to it. If you want a reliable, fast, easily configurable system it is the operating system for you. On the other hand, for a purely desktop-oriented experience it may be a bit too official of a stab at Linux. 

Friday, October 5, 2012

Review and information - Verizon High Speed Internet (DSL)

For the longest time our city has been limited to satellite internet and dial-up. Just recently there was a community-wide dispute with Verizon that prompted them to install DSL in our village. Being one of the few geeks in the area, I have been testing its limitations and greatnesses and I am here to review some of it. Before it was installed searches did not reveal the true statistics of the "High Speed" internet from Verizon, so here is the scoop.

Verizon DSL speed and caps
The speed averages out at about 300 KB/s, which is considered 3 Mb/s. Upload speeds have reached up to 150 KB/s, which is equivalent to the download speed of the best satellite internet providers. The best advantage is that there are no bandwidth caps, so you could theoretically upload and download constantly. However, running a server is against the Terms of Use. The only condition that would void these terms is heavy server usage, so for a small home fileserver or ssh tunnel it is no issue.

Verizon Software and Hardware
Verizon installs superfluous hard / software on the existing computer infrastructure. From what I have seen it serves no purpose other than providing links to and its subpages.

The router that was shipped is also the modem. This saves some room, but makes custom firmware tricky and it also means that to bring the wireless network offline the ethernet connection may also go dark for that period of time. Of course, a second router can be attached to it via ethernet cable.

Verizon technician
The technician was new to the company and made several mistakes, and at one point had a bout of paranoia that he would be fired upon returning to the Verizon headquarters. Also, the technician refused to run the necessary cables anywhere but on the front of the house, meaning that you could be in for some manual labor when you purchase this package. Lastly, the technician left the old networking equipment plugged into the desktop computer, which would be irremovable bloat for a non-tech-savy person.

Verizon has a monopoly of the phone market in my area. With a bundle, we are saving more monthly than we used to pay for our old service. It's like we're being payed to use the internet connection. The price, when bundled, is $35 for both phone and internet.

Thursday, October 4, 2012

Ubuntu 12.10 final beta REVIEW

This is a review on a beta package as of October 4th, 2012. This information will be deprecated quickly as updates are released in a fast manor as the 12.10 deadline approaches.

11.10 blew Ubuntu users away when compared to 11.04, with the immature version of Unity in a long-term support release that drove many of its users away. Hoping that 12.10 would bring further maturity to what Unity has already evolved into I installed it, and have had mixed emotions since then. Here are some of my discoveries, complaints, and criticisms on the new Ubuntu operating system.

Upgrade Process
The update process couldn't have been easier. A matter of running update-manager -d from the terminal and a few hours of installing updates later, the reboot prompt appeared and 12.10 was booted. Note that if you are using the openssh-server package there will be a boot-time error message regarding an incorrect compilation flag, as well as a mandatory filesystem check since upgrading an operating system is such a dramatic overhaul.

The boot process will take longer than usual if you upgraded from 12.04. This is why it is commonly recommended that the Operating system be installed over the existing one, rather than throwing patches on top of an existing framework.

On first boot
  Unity hasn't changed much. Aside from the controversial shopping lens, unnecessary glossy buttons on the launcher, and file previews it is just like a faster version of what came before. Which isn't much to complain about. In fact, it's nice having a snappy interface. Of course, snappiness only applies to those with a higher-end internet connection (> 256 KiB/s) since file indexing and Amazon searches are the norm within Unity now. Of course, this can be opted-out of with sudo apt-get remove unity-lens-shopping.

Little Differences
There were seemingly small but interesting design choices in this release. The full name of the user is no longer displayed on the top right of the screen, and a new printer applet is the default. Also, "Software Updater" is the new Update Manager, and it updates upon boot. So there will be no more tiered updating.

Also, in Unity's Expo-like workspace switcher, clicking on a window will move you to that workspace rather than highlighting it within the interface.

A weird design choice was to include two applications that are pinned to the launcher that open in the firefox web browser. It seemed pretty out-of-character for Ubuntu.

Possible bugs
The only bug I have noticed is the inability to minimize a window using the Unity launcher, which is a pretty big deal. Aside from this inconvenience the Beta release is seemingly stable. However, little issues seem to crop up in Beta releases, so I could never recommend this for a production machine.

Although not a serious functionality issue, sometimes Unity previews mix their text together, creating an unreadable mess. Also, as shown in the picture, the previews for Albums are supposed to play individual tracks. This does not work, but I am not sure if it is implied to. The sideways triangle IS the Universal sign for "Start", though.

Other Goodies
Ubuntu 12.10 comes with a signed bootloader, meaning that it can run with UEFI secure-boot that Windows 8 OEM computers will be coming with. This caused quite a big stir in the open source world, and Ubuntu was about to employ questionable tactics to get around it, but with a signed version of Grub  everything remains the same.

All of the outdated packages are updated and a most up-to-date repository is out there. Gimp 2.8 is among the collection. No more third party repos!

Here is a little demo video showing some of the features discussed in this article:

Wednesday, October 3, 2012

Sublime Text 2 review - Is it worth the money?

In my Common Lisp days I was a die-hard Emacs fan. Emacs is technically infinitely extensible thanks to Emacs Lisp, but it has a few annoying Emacsy quirks that can make it offputting to some. And when I learned that it did not support Clojure out of the box, it was a definite move to a better, more talked about text editor: Sublime Text 2.

This is commercial, closed-source software so I do feel obligated to state that I do not have anything to do with its development. It is hosted here:
and maintained by one developer, which is an enormous undertaking for making what I feel is the best multi-language editor around.

Let's jump into some screenshots and a run-down of the features.

This is one of Sublime Text's many color schemes. It is the beautiful default of light gray with many different colors for different reasons. Yellow literals, pink functions, blue symbols, etc. The most noticeable feature for most newcomers to the editor (I know it was one of mine) is the scrolling text column on the side that allows you to jump in between places in the file while giving you an overview of how large your file is getting.

Although that feature is small compared to the other features that Sublime Text has to offer.

There is a command pallet that contains a wide variety of features in the editor. Here you can see the impressive collection of inferior modes that it has to offer (inferior mode being syntax highlighting with some grammar rules, such as the highlighted ',' in Clojure). Some other talked-about features are multiple selection and goto anything. Multiple selection is very useful for when you need to turn a list of text into syntacticly-adhering code, or for massively changing a file in a short amount of time.

Splitting the editing pane, although a common feature in many editors, can also help increase the amount of work that can be done. Splitting can even work on the same file (different parts), making copying over code or memorizing some escape character a very easy task.

The selling point for me was the inclusion of Lisp, Clojure, Scala, and Java highlighting out of the box. No other editor I have encountered has done this in as friendly of a manor as Sublime Text has.

Is it worth the money?
You will see that my version of Sublime Text is unregistered. It is common in the community to pirate or keep an unregistered version while disregarding the "Nag screens" that show up. The developer was nice enough to not limit what this application can do (like LispWorks) does before a license is purchased, so many users do not even purchase it. I thought I would be one of them until I started uncovering the deeper features that the editor has, and now as soon as I scrounge up the money from my incredibly low wage job I will put fourth the $60 for the license. The developer has done a fantastic job, and deserves compensation for his work in my opinion. Also, the money secures the chance for future updates and maybe even a Sublime Text 3. 

Cinnamon 1.6.1 review

Using a third-party repository, it is possible to install Cinnamon 1.6.1 on Ubuntu 12.04 / .10. This is what I have done, and I have some criticisms regarding this release. The overarching theme is: the cinnamon team listened to Linus's advice of "If it compiles, it ships".

There is no doubt that cinnamon is a beautiful desktop environment. It has most of the features that Unity does with semantic searching and consumes less RAM than Gnome 3 or Unity. However, like the other versions, Cinnamon consumes slightly more CPU cycles than other popular desktop environments. If your processor is the weakest part of your computer, then this could result in the dreaded bottleneck.

Another advantage is the maturity of the Cinnamon API. There is an increasing number of extensions and third-party support available for it. Extensions can be read about in more depth here: 

These are not as required as they were for Gnome 3, since Gnome was quite a screw-up compared to previous versions.

 Expo, as expected, is just as good as it always was. Now there is a new feature that allows you to rename windows and even destroy them directly from the Expo dash.

But there is another disturbing bit of information that goes along with Cinnamon. One developer has been working on porting the Gnome keyboard shortcut option interface over to Cinnamon, and got stuck in the middle of his work when the release date hit. Whoops!

This means that custom keyboard shortcuts are a thing of the past. Until the developer finishes his work (hopefully before 1.6.2 launches) the default keyboard shortcuts will have to suffice. Yes, this does mean  closing windows with the awkward Alt+f4 combination, or moving them with alt+click.

To make matters even worse, programs that work as a graphical buffer between the configuration file and the input have all been broken by this impending migration, leaving the ability to make your own keyboard shortcuts COMPLETELY broken.

In lighter, better news for Cinnamon their new file manager, Nemo, has been finished and shipped with 1.6.1. Nemo is based on an earlier version of Gnome's Nautilus file manager, since the Gnome developers have been busy stripping features from their latest file browser. Also, Cinnamon no longer has memory issues. It tends to idle in the hundreds, where before it was not uncommon to have Cinnamon reach massive memory humps up to 800 MiB. And although Cinnamon does tend to consume more CPU Cycles than other desktop environments, the 17% CPU bug associated with opening the cinnamon menu has been fixed, meaning that searching can begin as soon as <Mod4> is pressed.

Sunday, September 16, 2012

Is Clojure a practical language / worth learning?

Over the past few days I have been teaching myself the very basics of Clojure (with a bit of difficulty), and I have been questioning whether or not Clojure is worth the trouble of learning about immutability, concurrency, and functional programming. After all, Clojure is one of the youngest and least cared about programming languages around, so why should the trouble be worth the time?
In this blog post I discuss whether or not Clojure is worth learning in my first installation on a line of blog posts concerning Clojure and functional programming.

Clojure is hard
The title says it all. As a programmer that has mostly worked in languages within the Algol branch (C++, Java, etc) the functional paradigm seems like a scary thing. Not being able to change the state of a vector or a map is equally as frightening at first, and having threads be such an integral part of the language does not soften the situation. Learning Clojure, especially since it is such a young language, is no easy task. Having a background in Python (or Lisp) and Java is almost an absolute must before you can even consider Clojure.

As you will read this hard work pays off.

Why Clojure is a good idea
A while ago I had a foray into Lisp and really left Lisp half-learned before I got antsy. The most recent documentation regarding Lisp was from around 2002, it had no unified (or good, for that matter) graphical toolkit, and it had major gaps in its usability in terms of strange forms (loop) and stack overhead when you don't want to use them. Although Lisp has its flaws, it is a wonderful language that allows the programmer to be concise with their code through something called Higher Order Functions. A single function can serve multiple purposes, a trait that I call programmatic nonlocality. In fact, I was able to rewrite an old text library from Java (originally 320-some lines) in less than 100 using Lisp.

However, Lisp has the shortcomings and the dead community that I described above. Meanwhile, the C*, Vala, Python, and especially Java communities (since the dawn of Android) have been experiencing a golden age of popularity. Not a single student in my High School Java class had written in Lisp; only one had so much as heard of its existence. Clojure is Lisp that compiles to the Java Virtual Machine, as you probably know if you are reading this article. That gives it the power to be compatible backwards and forwards with Java. This is called interoperability. Now you can have the elegance of Lisp without the guilt of using a nonpractical language. All of the Java libraries become available to you, and any Clojure libraries become available in Java. This comes into great use when dealing with functions conditionally has caused a massive decision tree, or when working with data trees requires good recursive capabilities. The "Hard Part" can be written in Clojure, and then you leave the sloppy imperative stuff up to Java.

The ability to enhance your Java programs with this "secret sauce" of computing is a trait that you should definitely look for as a programmer that is always looking to improve themselves. I have also found that the principles of Clojure are transferable to other programming languages. A programmer will think of how to solve a problem in Clojure and then implement it in whatever language they choose.

Most of the issues with Clojure will probably be short lived. In the world of programming Clojure is one of the youngest languages out there. (Right up there with Vala and LOLcode). The documentation is outdated, and bugs still exist within the language. Also, Clojure is not used on many projects yet because of its immaturity. This means that you may be the only person on your team that knows Clojure. Of course, that also implies that when you need help there will be a very limited community to lend you a hand.

In general, most of the problems that Clojure faces comes from a small community of developers lucky enough to hear about Clojure before it gets big. I am convinced that Clojure will become more-and-more relevant in the coming years. Clojure is a language designed specifically to solve the problems introduced by other languages, and to create a modern toolkit for modern applications such as parallelism.

Clojure can be used wherever the 9 billion devices that use Java are used, even for Android applications. It compiles to a .class file that can interop with Java seamlessly.

Clojure is a strange language born out of a strange paradigm and the striving for perfection; the repair of the shortcomings of the languages before it. Learning Clojure will increase your ability as a programmer in general and how you use Java specifically to create efficient applications. Clojure is definitely worth learning, despite how hard it is for beginners and intermediate programmers alike.

Sunday, September 9, 2012

A quick review of Clojure

I just want to start off by saying that I do NOT KNOW CLOJURE. I have only experimented a little bit with it and do not have any professional opinions about it. These are my thoughts as a newcomer to the language coming from a Java / lisp background.

A bit about Clojure
Clojure is a Lisp dialect that compiles directly to bytecode for the Java Virtual Machine (JVM) like Java itself does. This gives it a property called Java Interopibility. This is one of Clojure's selling points. Java and Clojure are both completely compatible with one another in a compiled format. This means that you can use Java libraries in your Clojure project and vice versa. Even Swing / Awt graphical user interfaces can be integrated with your clojure project just as they would be in Java.

The Good
To start off Clojure IS a Lisp, and Lisp's syntax is terse and beautiful </opinion>. Clojure has fixed some of Lisp's problems, especially the awful way for handling iteration. In Clojure there is a macro called loop just like in Lisp, but the syntax is easier to follow. Here is an example using loop.
(loop [x 5] (print (concat "looping " (str x) " more times")) (if (= 0 x) nil (recur (- x 1))))
This is obviously written in terrible form since it is pretty procedural, but this is supposed to showcase how loop works. It is a let form that can be returned to with recur. The magic here is that this does not create a stack overhead. No more stack overflows! Of course, infinite recursion can become a problem. But now recursing can be much lighter on the resources and you no longer need to declare a local function to recurse.

The best thing about Clojure is the Java interop, though. Java is one of the most widely used programming languages out there, running on billions of devices and being responsible for Android, desktop applications, and embedded systems in some cases. When you use Clojure you do not lose this massive support, or any Java libraries you have coded up in the past.

Clojure is an open-source project and you can view the source code for all of the base Clojure functions right on the github page.

The not-so-good
Clojure has a confusing means of editing data directly since just about everything but variables (declared with (def)) are immutable; they cannot be changed. This pretty much forces the functional paradigm down the programmer's throat and can actually halt good practice in some cases.

The language is young and not very well known. Its popularity is on the incline into the mainstream, but for now it is still an obscure language. Very few practical programs are written in Clojure and the documentation leaves a bit to be desired on the official Clojure website.

Also due to its lack of popularity as of right now there are few Clojure libraries to play with. However, Java Interop makes this less of a problem than it would with other languages (like Common Lisp, for instance).

The tools used to write Clojure are not as good as Common Lisp's yet, in my opinion at least. Emacs does not have a Clojure-mode, but one can be added through a third-party repository (although I could not get it working for the life of me on Emacs 24). Eclipse also has a plugin called counterclockwise that hooks up to the Lein REPL and provides tools for saving and compiling Clojure.

Clojure Resources
#clojure on Freenode IRC seems like _THE_ meeting place to discuss clojure and ask for help, or just to brag about something you wrote in Clojure. Even Clojure Programming by Emerick Carper & Grand , the de-facto Clojure book for beginners and intermediate Clojure programmers mentions #clojure.

Saturday, September 1, 2012

Common Lisp Tutorial preamble

Welcome to my Lisp tutorial. Just a while ago Lisp was a foreign language to me, and through study and determination (and a boatload of help from IRC users) I am finally started to get a grasp on the language. As a return to the Lisp community I will be writing the most extensive guide on this blog yet in a hope to teach Common Lisp to a complete newcomer to the language.

On IRC, many were in favor of using Common Lisp as a first programming language. I am in strong support of teaching FUNCTIONAL  programming as the first paradigm, but I am not in support of using Lisp for this purpose. For this reason the tutorial assumes a background in another programming language, but what that language is does not matter. If you know what the terms global variable, function (method), and structure mean then you are ready to learn Lisp.

Tuesday, August 28, 2012

Manjaro Linux review

Although some information on this page is relevant, it is outdated by a few months. A new version of Manjaro is out and there is a separate review for it:

Manjaro Linux is a Linux distribution based on Arch Linux. Arch, for those that do not know, is a distribution designed to be completely minimal; this allows the user to build their system from the ground up. Manarjo is Arch Linux for people that want a functioning system out of the box. Using Manjaro still awards the user with the features of Arch Linux while being wrapped in a user friendly package.

Manjaro Linux is very easy to install. It uses X by default but still uses an ncurses user interface that opens in a terminal to install. The installation takes considerably longer than any other Linux distribution I have ever seen before, mainly on the formatting part. The partition editor did not recognize my other partitions either, so I had to use the entire disk. The problems with the installer will be fixed some time this fall when the Manjaro Linux team finishes their graphical installer. If you have ever installed Archbang, it's basically the exact same experience.

First Impressions
Manjaro uses the lightdm display manager just like Ubuntu does. There is a sacrifice between memory usage and aesthetics here, however. Lightdm uses about 50 MiB more RAM than gdm does, and /etc/inittab is nowhere to be found. For those that do not want to kill lightdm and start X manually on every boot this could be a dealbreaker. I was not happy with this.

When choosing which CD .iso to install I chose XFCE. To my surprise it was heavily patched for Manjaro Linux. The entire XFCE experience was wonderful in terms of additions that the Manjaro Linux team made. I presume that the other desktop environment options are just as friendly if not moreso than the XFCE version of the distribution.

Prolonged use impressions *new*
I have recently discovered a very troubling bit on information about Manjaro. If you notice in the screenshot, 585 MiB of RAM was in use. This is a nominal sum in today's age, where having 8+ GiB of RAM is commonplace, but what is using all of that memory? It turns out that a kernel module named nvidia was installed during the Manjaro installation.

It dawned on me that Manjaro DID provide a boot option to not install video card graphics drivers, but I instead installed the drivers. Following this guide I blacklisted the nvidia kernel driver and restarted the kernel. Upon doing this X was completely brought to its knees by the absence of the Nvidia driver. X DEPENDS on the Nvidia driver as it is used in Manjaro Linux.

Manjaro Linux does not provide a flexible graphical system to meet the needs of a graphics-intensive user as well as one who does not use graphics. Rather, they polarized their distribution with two extremes that conflict with one another.

Installing Software
Unlike Archbang the pacman (package manager) mirrorlist is functional right out of the box and does not need any updating. Pacman even comes with a graphical frontend, making installing software possible for beginners.

The autoconf tools suite was not there by default, however. This made installing packages from the Arch User Repository (AUR) difficult. Any user wishing to compile their own software will also have to take the detour of manually installing the three packages that make up autotools.

Non-manjaro specific Arch Linux evaluation
Arch Linux, the system that Manjaro is based on, has quite a bit going for it. It is arguably the best documented distribution around with its wiki and forum. The AUR and official repositories are as up-to-date as portage, which until now has been the best repository tree I have ever used. Pacman is a bit cumbersome to use from the command line (pacman -Syu to update does not make immediate sense), but it is one of the selling points of Arch Linux.

If you are a user interested in Manjaro Linux it is completely usable as-is. For a user with a bit less experience with Arch Linux it would probably be wise to wait until the graphical installer is released to avoid the partitioning confusion that all users of Manjaro have run into so far.

After discovered the issue with X recently I have decided to jump ship to Fedora Linux. However, it is a very minor issue since the nvidia module only takes up about 111 MiB of RAM. The scary part about the issue is that other shortcuts like the X-dependency or lightdm could be lurking in the background of Manjaro Linux, making it an unreliable computing platform.

Saturday, August 4, 2012

Comparison of Window Managers and Desktop Environments Reloaded

About two years ago I compared all of the popular window managers with one another. Now that I have much more experience with the different desktop environments, I am going to give the COMPLETE rundown of all of the popular graphical environments. Let's start with my personal favorite, awesome Window Manager.

Awesome Window Manager

If KDE is a sword then Awesome Window Manager is a rock. It is a blunt environment that requires a knowledge of Lua to configure it. Windows tile and using the keyboard is pretty much necessary. This would be a very unfamiliar environment for someone coming from a floating Window Manager. However, the stock keyboard combinations and the efficiency of tiling combined with the number of tags by default make it a powerful tool in the hands of an advanced user. Awesome can be customized to do anything the user wants, and if that is an appealing trait and you have the time to configure it to no end then use awesome Window Manager.

Ease-of-Use: 2
Speed: 10
Aesthetics: 4
Productivity: 8

K desktop environment and Kwin

KDE is an impressive desktop environment to say the least. It has received flack online for its bloat, and that is a true problem. Services and superfluous programs clog the environment and bog it down, consuming RAM in the process. The desktop effects will require a graphics card and can slow any other task requiring one down, requiring them to be shut off. The true power of KDE comes from the very trait that gives it a bad reputation: the bloat. If there is something you want your window manager to do, KDE has a tool to do it.

With different activities you can transform your desktop into an Androidd-esque launcher, or set the wallpaper to monitor the local weather or simulate a virus. Tiling Windows, completely customizable keyboard shortcuts delimited by category, and the suite of applications that come as a part of KDE are just some of the great things that KDE has to offer.

Ease-of-Use: 9
Speed: 5
Aesthetics: 9
Productivity: 6


Unity is Canonical's modern user interface for their Ubuntu operating system. Unity was created after a fight with the Gnome 3 developers, and it prompted Gnome to create their own operating system to compete with Ubuntu. [opinion]Unity blows Gnome out of the water.[/opinion] In Ubuntu 11.04 Unity was a mess, but ever since 12.04 and Unity 5 it is a usable interface. It runs GTK, so Gnome programs don't pull a mess of dependencies. It also comes in 2d in the event of a weak graphics card, so Unity will run faster.

Unity is the least customizable of the bunch. There is a launcher on the left side of your screen. There are no options regarding this. The extent of theming that can be done ends with GTK and Icon themes and setting the Opacity of the integrated File menu.

Unity offers a unique feature called the HUD that can search through their integrated file menu (GTK and Qt applications move their options bar to the top of the desktop. This can be disabled.) The HUD is a tool of great productivity, and it learns like Gnome do does. The alt key brings it up and within a few keystrokes you can find an item from the context menu that would have taken a whole minute to navigate to by mouse.

Ease-Of-Use: 8
Speed: 4
Aesthetics: 8
Productivity: 8

Gnome 3

It only makes sense to write about Gnome after the entry about Unity. Gnome is, as Linus Torvalds himself described it: "A train-wreck". A few of the sparse good things to say about gnome are that it is themable and it can be extended with addons or with alterations to the internal settings. Gnome 3 comes with insane defaults (like only having the close button on the control bar and the notifications popping up from the bottom and waiting to be dismissed). If Gnome 3 were lightweight and ran a bit faster it would be a viable candidate. It doesn't, though. It consumes more memory than the plasma-desktop from KDE and does not have an option to lessen the effects like other Desktop Environments.

Ease-Of-Use: 6
Speed: 5
Aesthetics: 8 (the one good thing to say)
Productivity: 4


Xfce is most well-known for being a lightweight, low-impact desktop environment. Xfce lives up to that reputation, having a RAM consumption only above that of LXDE and Awesome. In addition to being light it is still aesthetically pleasing and has enough tools to customize it to any user's heart's content (even moreso since 4.10 released the mine type editor).

The workspace system is a bit fluky at times, but that is the only real gripe that XFCE can get. I call this one error "leashed windows". Windows that have focus follow you to other workspaces. This usually only applies to switching using keyboard shortcuts.

 Just like Gnome 2.0 it comes with a panel to search through applications, and option to make launchers and links from the desktop, and applets for its panels. It improves on this with a dock (which many users, myself included, purge and replace with tint2 or another dock application) and a good settings tool. XFCE can do some very advanced things. It can even change its Window Manager. Awesome window manager inside XFCE? You bet.

Most of XFCE's applications can be run outside of XFCE, even the window manager. So you can use any combination of XFCE and another environment of your choice while still keeping a low memory profile since XFCE has very few runtime dependencies.

Ease-Of-Use: 8
Speed: 9
Aesthetics: 6 (But customizable to the point of 10)
Productivity: 8


LXDE is a set of tools that combines with the Openbox window manager to create a graphical environment unmatched when it comes to ease-of-use combined with shear speed. Some have argued that because of the seperation of desktop environemnt and window manager that LXDE has a "hacky" feel to it. This is not the case. LXDE is a ligthweight XFCE with Openbox's graphical configuration tools. Lxterminal rivals Gnome terminal, and Lxappearance rivals myunity for theme configuration. In fact, lxappearance is the go-to application for changing gtk themes on other desktop environments, not just LXDE. Some of the default software is chosen well too. Pcmanfm as the file manager, for instance, goes along with the lightweight feel of LXDE. Like KDE and XFCE you can change LXDE's window manager from its configuration dialog.

Ease-of-use: 6
Speed: 7
Aesthetics: 5
Productivity: 7

Enlightenment 17

Enlightenment 17, e17 for short, is an odd desktop environment and graphical library suite written by the enlightenment foundation. It improved heavily on e16 and handles a lot of configuration on its first-time-run dialog. It can be heavily extended through configuration files, but otherwise it remains at the beautiful default.There are issues with the file manager handling the desktop, however, and it may throw the entire look-and-feel of the environment off.

 E17 really needs some work. I have had graphical problems and just found it counter-intuitive after it has been set up.

Ease-of-use: 5
Speed: 5
Aesthetics: 9
Productivity: 5

Dynamic Window Manager

Dynamic window manager is a popular dynamic window manager. Dynamic means that the window manager can float or tile, and in DWM's case monocle and spiral. DWM has no configuration tools and the only way to modify it is via the C source code directly. DWM developers have a philosophy that restricts the window manager to only 2000 lines of code, so large improvements cannot be made. Furthermore, users looking to use a mouse are going to feel left out. Although a mouse can minimally interact with the window manager a user with anything but a keyboard and combinations will be lost.

Ease-of-use: 1
Speed: 10
Aesthetics: 3
Productivity: 5


When I first tried the most recent version of Linux Mint it came with Cinnamon - their home-grown desktop environment forked from Gnome 3. Cinnamon is the MATE of Gnome 3, you could say.

Cinnamon did not disappoint on the aesthetics. It was visually appealing to the last detail (as it was configured in mint, at least) and had the ability to be themed. The menu is one of the smartest (from a searching and design point-of-view) menus around. From one menu you can search for applications, search by category, and access bookmarked applications. The searching works as good as Gnome 3's does, so you can still use an application if you do not know its name.

Cinnamon comes with a feature called Expo that is one of its selling points. Expo can show a spread of all of your workspaces, and upon hovering over one a cascade of all the windows in that workspace. Clicking on a window will take you to that particular workspace and application window. If you have used Compiz expo, this is the same feature but integrated in the desktop environment.

There were two issues with cinnamon. The menu took 2 seconds and 17% CPU for a few seconds to open. I talked to a Cinnamon developer via IRC about this problem and he confirmed that it had been fixed and will be released in the next major cinnamon update. Along the lines of bugs there are memory leaks in Cinnamon, so it requires a restart after multiple hours of running to free some RAM.

 Another problem is that some of the layouts do not work at times, but at other times they do. There was no word on whether or not this would be fixed or whether or not it is really an issue. Another issue (not a bug) is the lacking of some advanced features from the cinnamon settings dialog, but advanced settings can still be configured with dconf.

Ease-of-use 7
Speed: 4
Aesthetics: 7
Productivity: 4

TWM - Tab window manager. I have not used this long enough to give a definitive answer, but when I used it the window manager worked as it was intended - which isn't enough.

MATE - Displaced by cinnamon


For pure productivity
Awesome Window Manager is the most productive of the window managers if the user has the patience to edit the lua configuration file and learn the keyboard shortcuts.

For speed dynamic window manager wins. 2000 lines of code execute blazingly fast.

KDE wins the aesthetics prize, especially if the advanced desktop effects are enabled with the search and launch activity.

Once again KDE wins this prize. Everything is handled for the user.

Final Verdict
KDE is the overall best desktop environment, but each has its own niche. To truly determine the best environment, using all of them and deciding on your own is the best way to make a decision.

Wednesday, July 25, 2012

Piping input and Redirection - Linux

A program interacts with two essential principles: input and output. The Linux command line allows us to skew these principles in something called IO redirection and piping, which is a very helpful thing to be able to do. If you already know C++ then your knowledge of the << and >> operators will come in handy. 

  Redirection allows you to move output somewhere else. For instance, dmesg > file.txt would move the 
  would move the output of "dmesg" into file.txt instead of to standard output. Input redirection is like output
  redirection, but it gets its input from somewhere else.
  Piping is using one program's output as another's input.

How to use IO redirection and piping
 We will be using dmesg and espeak for our example. If you cannot get a hold of espeak, it is a program that outputs text given to it as an argument as audio.

Output Redirection
The greater than symbol, ">", is used to shoot output into somewhere else, usually a file. An example would be ls > file.txt which puts the output of "ls" into file.txt.

Input Redirection
Much like >, < is used to redirect input. Input Redirection can be confusing. It uses a file or some other source to get the input for a program. An example would be espeak < file.txt. This will use file.txt as input for espeak.

Combining IO redirection
The following example is going to gather input from a file, get the output, and put it in another file.
 wc < my_files > wc_output. This calls wc on my_files and puts it to wc_output. It would look like this with parenthesis: (wc < my_file)>wc_output. To use this as input, you would need to do program < wc < my_files > wc_output. That is overly complicated, so we will use piping.

Piping is a very important concept. It uses the pipe bar ( | ) to use the output of one program as input for another. So far we have used ls to put its output in a file and then used espeak to read that file. Now we are going to combine the steps. ls | espeak. What that line means is that the output of ls is going to be piped to espeak as input. Of course, you can still use IO redirection to get espeak's output into some file by using >.

What is Portage and how to use it

Gentoo Gnu/Linux is a notoriously hard-to-install minimal Linux distribution. Like many Gnu/Linux distributions it has a package manager and repositories that hold software that can be installed onto a system. Gentoo, unlike other distributions, uses a repository of source code as its primary method of installing software (similar to the FreeBSD source trees). Compiling the source code of your programs provides a few benefits, including a performance gain and source-level customization. Here is how Portage works:

Setting up portage
emerge is the Portage's interface. You may see on online guides emerge X (emerge [anything]) and get the "package not found" message. This is because portage does not have the repositories synced by default. To sync the repository, run emerge --sync. This will take some time (it took about 20 minutes at 138 KiB/second). This gets a file with the names of the packages, their categories, and a bit more information. You will see a list of all of the applications available to you fly down your screen. It was moving at such a steady speed that I was unsure of whether or not it was downloading a file, but when I disabled my wireless connection it was indeed relying on the internet for this step.

General Portage Usage
You can now install software with emerge name, where name is the name of the package that you want to install. If you are searching for a package in the repositories, you can use emerge --search query or emerge --searchdesc query to search through the documentation as well.

What to expect when emerging
When you emerge a file, Portage will hide nothing from you. It outputs all the steps, including logging into an FTP server. If it seems to stop working, use the command tail -f /var/log/emerge-fetch.log  in another terminal window. This will repeatedly output the next line in emerge-fetch.log, which is where fetching progress is stored.

After the program has been fetched, it will run through a list of conditions required to install the program. You will see "Checking blah for blah blah" repeated a lot of times, and then it will install the program. Yes, source compilers, it goes through the makefile.

Keeping Portage up-to-date
Always remember to do an emerge --sync every two days or so to keep your repositories up-to-date. When a new version of Portage comes out, emerge portage will install it. To update your system, the command emerge --update --deep --with-bdeps=y --newuse world will update everything on your system, including USE flags and build dependencies. 

Removing Software with Portage
We all have those bad days where we install a rotten package, or it just conflicts with something else on the system. To uninstall it, use emerge --unmerge X where X is the software to remove.

USE flags
Use flags are an important part of the Portage environment. USE flags tell Portage what your tastes are in certain kinds of packages. For instance, if you were to download a flight simulator WITHOUT a "3d" use-flag, it wouldn't download 3d support. If you had "3d" as a use-flag, it would download it if the package recommended it. /etc/portage/make.conf is where your USE flags are stored. You define it like this:
USE="-X -aqua -dvd gnome"
A list of USE flags is stored here:
Extra documentation on USE flags can be found here:

General Portage usage
Two other useful tricks are emerge --fetchonly X and emerge --pretend X. The first one will only download the software and cache it; it will not install. The second command will not download anything, but it will calculate the dependencies and tell you how much space you need to install it with. Along the same lines of --pretend, --ask will make sure that the user wants to download the software after they see the size.

Test it out
Here are the commands necessary to emerge firefox (yes, it is really this easy):

A Warning to the Impatient
Compilation takes a very long time for large programs like Firefox or qtcreator. It can take hours on a new machine, and the older a processor is the worse it will do. Gentoo is not for you if you cannot wait a few hours for a large piece of software to install. I figure that it is unlikely you sat around for Gentoo to compile if this was the case, but be warned.

Sunday, July 22, 2012

Crunchbang Linux Review

As a long Linux user I have experimented with a lot of different operating systems. I have used Debian for a short while (before a dependency managed to bring the system down), Linux Mint, Ubuntu, and a lot of other Debian based Linux distros but it wasn't until about two days ago that I decided I would try out crunchbang: a lightweight Debian derivative using Openbox as its primary window manager. Here is a breakdown of its strong points and weaknesses:

Good: Speed
Crunchbang's boot process beat my Ubuntu partition by about 30 seconds. I do have a lot of bloaty services running on Ubuntu, but this is quite a big bonus; especially so if reboots are commonplace.

Good: Stability
Depending on the version of Crunchbang that you chose (testing, stable, backports, etc) there will be varying degrees of stability. It's based on Debian, which is a widely used operating systems on servers, so it inherits a lot of Debian's stability. I have not had a graphical hiccup or a kernel panic once.

Bad: Backport Repositories
On crunchbang it is easy to change around the repositories using synaptic or just editing /etc/apt/sources.list. That makes this issues less of a big deal. However, the backports did not seem to have enough packages that I am used to having. Codeblocks was not in here, and dependencies were an issue. Adding Debian Wheezy's repositories fixed some of the issues.

Very Bad: Installer
I installed Crunchbang twice. The first time, the installer failed to recognize my Ubuntu partition and when it wrote Grub to the master boot record. This gave me a barely functioning crunchbang install and no Ubuntu. For a novice computer user this would be an instant dealbreaker, because of they do not know their way around mount then all of their data would have been lost.

When I entered the (then only) operating system on the grub screen I was immediately displeased. Thunar (the file manager) would not start because it could not find the display and glibc6 was not found. These are two enormous errors. Rebooting solved those issues, but not the issue of the MBR. I reinstalled Crunchbang and it worked perfectly, detecing all three of my Operating Systems.

Great: Aesthetics
In addition to Openbox, a dark icon theme, and a light gray background (simple yet elegant) Crunchbang comes with my personal favorite display manager: SliM. SliM is one of the simpler display managers available. It is configurable if you have the root password, and allows quick different user logins. It doesn't show a list of users. It just shows :username and :password. If your username goes along the lines of xXxXleethaXorZxX then SliM is not for you.

You decide: Ice*
On Debian and Crunchbang Mozilla Firefox is replaced with a browser called Iceweasel. This is because some of Mozilla Firefox (the crash handler and images) is proprietary. Iceweasel is completely free, but lags behind a bit in terms of features and up-to-datedness (aurora is 11.0). Firefox addons and themes are fully compatible. Iceweasel has a brilliant feature added to the search bar. It can search for Debian packages, which is a lifesaver on the broken backports repoistory.

Icedove, the Thunderbird replacement, is also a bit outdated but is not as noticeable. It works the same as Thunderbird and even has (in my opinion) a prettier icon.

Bad: Out of the box software
Crunchbang comes with a bit of preinstalled software, but not all the choices are good. The file manager (thunar) and the terminal emulator (terminator) are two of the few good examples of preinstalled software. Abiword and Geany are the only two text editors that come with the system (if you discount VI). There is no middle ground and no libreoffice. If someone wanted to edit their rc.lua file for the Awesome window manager, lets say, they would have to decide between opening it in a word processor with no syntax highlighting or a full fledged IDE.

Gedit does not have many dependencies, so installing it was easy enough.

Other essential tools like CUPS and git are not included, but a welcome script called cb-welcome allows them to be downloaded.

I have had a love-hate relationship with Crunchbang over the past few days. Dependencies have killed me, but the stability and speed are good things. Crunchbang is NOT for beginners, unlike what Crunchbang enthusiasts may try and tell you. I had to mount my /dev/sda7 partition from the command line to even get my old files transfered over (and no, thunar did not detect it). However, if you are an experienced Linux user that wants to escape the bloaty grasp of Canonical or the outdated and fully free beast that Debian Squeeze is, then Crunchbang could be for you.

Wednesday, July 18, 2012

Comparison of C++ IDEs

C++ is the second language that I ever learned overall, with Java being my first. Java is a very IDE-centric language, so I was accustomed to that coming into C++. My journey took me through almost all of the IDEs available on Linux that can write, highlight, and compile C++ code all in one place. Here is my comparison.

 Although Eclipse is one of my favorite integrated development environments for Java and the industry standard for Android application development, I was definitely not a fan of it for use in C++. By default, it does not work with cout or endl (and presumably other objects that are located in separate header files). Even with the scope operator "::" (that a beginner may not even think to use) it will not accept the usage of these objects as statements. Until these issues are figured out, Eclipse is not a good C++ solution.

Although I no longer have Netbeans installed  to provide a picture or recall exactly how it handles C++, I can vouch for it. Netbeans, once it is set up with gcc, is one of the better C++ IDEs. It has code completion, documentation lookups for certain functions, and a built-in run display like Geany. The performance of Netbeans, however, is not worth downloading and installing Java and Netbeans itself if you don't already use it for something else.

IDE window
This is Geany, a cute lightweight IDE coming in at only 4MB in size. It has a lot of nice features, like a symbols browser (outline of a program), document browser (for active files), good settings dialog complete with re-mappable keybindings and some unexpected stuff (like a jump-to-line feature). For being such a small IDE it has a lot packed into here. I have never used Geany much, but it's just about as good as it gets with C++ IDE's, despite its small size and simplistic feel. I've even seen its argument-completion be more accurate than code::blocks. 

Qt Creator
 Qt Creator is an enormous beast using the Qt graphical framework. It is cross-compatible, which is a plus, and is centered on Qt development. I cannot express what a great IDE this is to use. Code completion, documentation lookups, formatting, a GUI to create user interfaces, a settings manager that covers every detail, and a symbol browser are just a few of the good things about this IDE. This is the smartest of the IDE's I have ever used. It often corrects my mistakes (changing "." to "->" when talking about pointers) for me without me even realizing it. Another added bonus is that the IDE uses a .pro file to map out all of the files in a particular project, so it can categorize and remember what files belong to which project.

Qt creator is good for editing console-only code, too. It uses qmake, which may cause some minor complications, but that minor inconvenience aside it is a full-featured IDE.

 Code::Blocks is the IDE that I personally prefer, even though it has less features than Qt creator. It is light for an IDE (only about 7 MB) and has a lot of pre-installed templates for C programs on embedded systems. Code::Blocks is very useful for console application development, and possibly GTK, but not much else. Its settings manager is similar to Geany's, but with a few more features. Two bonuses to using codeblocks are a formatting plugin called "Astyle" with a bunch of pre-installed themes and optional speed optimization (at the cost of compile time). Codeblocks has a symbol browser in one of the toolbars which are fully customizable. You can have as many or as few toolbars as you wish. You can even detach them. Another feature, although it does not matter to a C++ developer much, is the scripting console that Codeblocks comes with.

Those are all of the major IDE's for C++ development. Some prefer to use a text-editor and a compiler, and if you do, see Comparison of Text Editors. Otherwise, follow these trees:

Trees (Best to worst)

Qt Creator

 Size (smallest to biggest)
Qt creator

Qt creator

Qt creator

Compiler Integration
Qt Creator

Codeblocks: 14
Geany: 13
QtCreator: 13
Eclipse: 1 

This, of course, is based on Console applications and does not include code extra features like code completion. The bottom line is, beginners should use Codeblocks and "Intermediates" should probably use Qt creator.