Archive

Archive for the ‘Linux’ Category

The apps of KDE 4.10 Part I: Rekonq

April 6th, 2013 No comments

It’s been a while since I’ve used KDE, however with the recent rapid (and not always welcome) changes going on in the other two main desktop environments (GNOME 3 and Unity) and the, in my opinion, feature stagnation of environments like Xfce and LXDE I decided to give KDE another shot.

My goal this time is to write up a series of quick reviews of KDE as presented as an overall user experience. That means I will try and stick to the default applications for getting my work done. Obviously depending on the distribution you choose you may have a different set of default KDE applications, and that’s fine. So before you ask, no I won’t be doing another write up for KDE distribution X just because you think its ‘way better for including A instead of B’. I’m also going to try and not cover what I consider more trivial things (i.e. the installer/installation process) and instead focus on what counts when it comes to using an operating system day-to-day.

Rekonq

The default web browser in the distribution I chose is not Konqueror but rather its WebKit cousin Rekonq. Where Konqueror uses KHTML by default and WebKit as an option, Rekonq sticks to the more conventional rendering engine used by Safari and Chrome.

konqueror_4_4_2

This is not Rekonq, it is Konqueror

Rekonq is a very minimalistic looking browser to the point where I often thought I accidentally started up Chrome instead.

This is Rekonq

This is Rekonq

From my time using it, Rekonq seems to be a capable browser although it is certainly not the speediest, nor does it sport any features that I couldn’t find elsewhere. One thing it does do very nicely is with its integration into the rest of the KDE desktop. This means that the first time you visit YouTube or some other Flash website you get a nice little prompt in the system tray alerting you of the option to install new plugins. If you choose to install the plugin then a little window appears telling you what it is downloading and installing for you, completely automatically. No need to visit a vendor’s website or go plugin hunting online.

Like most other KDE applications Rekonq also allows for quite a bit of customization, although I found its menus to be very straightforward and not nearly as intimidating as some other applications.

The settings menu

The settings menu

I did notice a couple of strange things while working with Rekonq that I should probably mention. First off while typing into a WordPress edit window none of the shortcut keys (i.e. Ctrl+B = bold) seemed to work. I also found that I couldn’t perform a Shift+Arrow Key selection of the text, instead having to use Ctrl+Shift+Arrow Key which highlights an entire word at a time. At this time I’m not sure what other websites may suffer from similar irregularities so while Rekonq is a fine browser in its own right, you may want to keep another one around just in case.

Browsing the best website on the net

Browsing the best website on the net

While I haven’t found any real show-stoppers with Rekonq, I still can’t shake the feeling that I’m missing something. I don’t know how to describe it other than I think I would feel safer using a more mainstream web browser like Firefox, Chrome or even Opera. But like any software, your experience may vary and I would certainly never recommend against trying Rekonq (or even Konqueror). Who knows, you may find out that it is your new favorite web browser.




I am currently running a variety of distributions, primarily Ubuntu 14.04.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Check out my profile for more information.
Categories: Free Software, KDE, Linux, Tyler B Tags: , ,

Airing of grievances: in which upgrading Ubuntu wreaks havoc

February 24th, 2013 4 comments

I’ve had a few nasty experiences this week with Linux and figured I’d vent here. Unlike my previous efforts with Linux From Scratch and Gentoo, my complaints this time around are related to upgrading Ubuntu.

Ubuntu 10.04 to 12.04: Save yourself the trouble

At this point the current Ubuntu LTS release (12.04) is my preferred distribution to work with: it has become widespread enough that troubleshooting and previous solutions online are easy to locate. In a professional capacity, I also maintain systems that are still on 8.04 LTS (supported until April 2013, so we have to be pretty aggressive about replacing them) or 10.04 LTS (good until April 2015).

I attempted to complete two upgrades from the 10.04 release this week to 12.04 – one 10.04 LTS “desktop” installation, and one 10.04 LTS headless server installation. Both were virtual machines running under VMWare ESXi, but neither had given me any trouble during normal use.

Canonical’s updater process (the wrapper around dist-upgrade) appears to be pretty slick; it gives you appropriate warnings, attempts to start a SSH daemon as a fallback mechanism and starts on its merry way to download the necessary packages to bring your system completely up to date. On my 10.04 desktop VM, the installer fell apart completely during the package replacement/removal/installation sequence. I was left with two nasty message boxes: one advising that my system was now in a broken state, and another that completely contained rectangular, unprintable characters.

To put it bluntly, I was not amused, but it wasn’t a critical system and I was content to replace it with a fresh 12.04 installation rather than waste additional time troubleshooting with apt or dpkg. Strike one for the upgrader.

At least the server came back up!

Next on the upgrade schedule was the 12.04 server VM. Install, package replacement and reboot went fine, but I had several custom PPAs installed to support development of XenonMKV (Github page) – specifically ppa:krull/deadsnakes to add Python 2.7 to Ubuntu 10.04.

Python 2.7 still worked when the server came back up, and all my usual tools of choice like SABnzbd+, SickBeard and CouchPotato were still functional.

For some reason, though, I’d gotten it into my head this evening to check out Mezzanine as a potential WordPress replacement. Mezzanine uses Django, a Python Web framework, and the list of supported features is pretty encompassing.

Sidebar: Django and mod_wsgi – complicated enough?

One of the most irritating things from a system administration point of view is getting Web applications to run in a standard server environment – typically a Linux base system and Apache or nginx to serve content. I suppose I’ve been spoiled with how easy it is to get PHP-based sites up and running these days in that configuration by adding an Apache module through apt. A lot of new Web app frameworks come with their own small webservers for development and testing, but generally their creators recommend that when you’re ready to put your site live, that the product run under a well-known Web or application server.

The Django folks recommend using mod_wsgi in their documentation, which in and of itself really just says “RTFM for mod_wsgi and then you’ll have a much better idea of how to do this.” I had to go poking around on Google for the installation article since there are some broken links, but okay, it’s an Apache module with a small bit of configuration (even though a simple walkthrough in the Django documentation would go a long way to making deployment easier.) This is where I ran into my dependency/PPA problem on Ubuntu 10.04.

I’ve suppose I’ve screwed the pooch…

Running the suggested command, I tried: sudo apt-get install libapache2-mod-wsgi and got the following

The following packages have unmet dependencies:
libapache2-mod-wsgi : Depends: libpython2.7 (>= 2.7) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Backtracking, I then found out why the library wasn’t going to get installed:


The following packages have unmet dependencies:
libpython2.7 : Depends: python2.7 (= 2.7.3-0ubuntu3.1) but 2.7.3-2+lucid1 is to be installed

Aha! The Python installation from the PPA for Lucid – 10.04 – was installed and acting as the 2.7 package. Since the newly-upgraded Ubuntu 12.04 uses Python 2.7 as a dependency for a good portion of the default applications, I couldn’t just purge or uninstall it, and my attempts to force a reinstallation all ended in:


Reinstallation of python2.7 is not possible, since it cannot be downloaded.

Rebuild?

At this point it looks like I’ll have to rebuild the server VM as well, but if any readers have any bright ideas on fixing this dependency hell – please comment with your suggestions!




I am currently running various *BSD variants for this Experiment.
I currently run a mix of Windows, OS X and Linux systems for both work and personal use.
For Linux, I prefer Ubuntu LTS releases without Unity and still keep Windows 7 around for gaming.
Check out my profile for more information.
Categories: God Damnit Linux, Jake B, Ubuntu Tags:

Using ATI Catalyst drivers on Ubuntu 12.10 with old hardware

February 14th, 2013 No comments

As of version 12.10, Ubuntu has upgraded the version of X.org they include to the latest and unfortunately it is no longer compatible with the official ATI Catalyst drivers for some cards, specifically the HD2xxx, 3xxx and 4xxx models. The open source driver is the only officially supported alternative and, while it is fine for most uses, it doesn’t support the advanced power settings that the ATI driver does. This means that on my laptop in particular the fan runs constantly as it tries to cool down the overheating card.

So… no Ubuntu 12.10+ then?

Thankfully someone has created a PPA that successfully downgrades the version of X.org to the maximum supported version for the official ATI driver. This step is obviously quite drastic and should not be used on production systems. However from the limited time that I have been running it things seem pretty stable. The PPA (and instructions) can be found at this link: AMD Catalyst Legacy




I am currently running a variety of distributions, primarily Ubuntu 14.04.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Check out my profile for more information.
Categories: Tyler B, Ubuntu, Xorg/X11 Tags: , , ,

KeePass: The Cross-platform Password Safe

December 20th, 2012 1 comment

These days you really need a strong, unique password for almost everything you do online. To make matters even worse for the average user, security nuts will tell you that you actually need a different password for essentially every account you hold. Why? Consider the following scenario:

Little Timmy signs up for Facebook using his super secret password @wesomeS@auce3!. This password is so strong and good that even he can hardly remember it. Then he wants a Twitter account so he goes and signs up there using the same password. Some time passes and Timmy’s Twitter account is hacked. Using his associated e-mail address they try the same e-mail and password on Facebook (because it is a popular website that most people belong to) and lo and behold they have access. Little Timmy’s virtual life falls apart around him.

Think I’m being paranoid? Take a look at these examples and adjust your tin foil hat accordingly.

What to do?

So what can you do about it? Well for one don’t use the password above because now it is all over the internet. For two use strong unique passwords for each website you care about. What do I mean by that? Well in the above example Timmy clearly cared about both Facebook and Twitter so he should have used different passwords for each. That way when his hypothetical Twitter account became hacked the attackers couldn’t use the same password to gain access to his Facebook account. That said it is always good to have a throw away password or two to use on those one-off websites that you will either never visit again or don’t care if they get compromised. Third either remember all of these unique passwords in your super genius conehead sized brain or use a password safe to make it easy on yourself.

Password Safes

A password safe is essentially a program that allows you to maintain a number of different passwords while only having to remember one. Essentially you enter a master password into the program and this acts as your key to unlock all of your others passwords. That way you (technically) only have to remember one password at a time (the master password) and you only have one password to change on a regular basis (although you should obviously refresh your other passwords every so often as well). A number of these programs exists (such as LastPass, etc.) but personally I prefer KeePass.

KeePass

KeePass comes in two flavours: version 1.x (which is technically now legacy) and version 2.x (which is current). Beyond feature set the biggest difference is that version 2.x requires the .NET Framework (or Mono) and version 1.x doesn’t. For the purposes of this post I’ll be focusing on version 2.x.

KeePass has a number of great features that make it indispensable in my day-to-day computing life. While the full feature list is actually quite long I’ll just list the most useful or important ones here:

  • Open source which means that the source code has been looked at and checked over for any sort of backdoor or other nonsense that a potentially evil author would code into it. This is very important when you’re considering placing all of your password eggs in one proverbial basket.
  • When you create a new password entry you can store any sort of arbitrary information along with it:

    New Password Entry

    New Password Entry

  • All of your passwords are stored completely encrypted including all comments, website URLs and user names. This is incredibly convenient because it allows you to safely do things like create an entry containing you credit card information. Never again will you have to hunt down your wallet to make that spur of the moment online purchase!
  • It is portable – you can run it straight off of a USB stick, no installation required!
  • Rule based, strong password generator. Having a long, strong, password is very important but remembering one is very hard. Instead why not have KeePass generate a per-website, completely random, strong password for you? Using a website that for some reason doesn’t like special characters or only allows up to a 12 character password? No problem just change the rule set you use when you generate that particular password.
    Password Generator

    Password Generator

    Here are some examples of random passwords I just generated now:

    Lots of random passwords!

    Lots of random passwords!

  • Cross-platform – KeePass has implementations on almost every platform. Version 1.x runs on Windows, Mac and Linux (via KeePassX). Version 2.x runs on Windows, Mac and Linux (using Microsoft’s .NET or the open source Mono). There are even versions of it for Android, iPhone and others.
  • Auto-type – this is by far the best feature. Even if you, for some reason, didn’t want to use any other feature that KeePass has to offer, its Auto-type functionality alone is worth the install. Essentially you tell KeePass what window to look for (for instance Firefox browsing my bank’s website) and how it should type things for you (usually user name, tab, password, enter). Then you set up some key combination you want to use (like Ctrl + Alt + A) and KeePass does all of the typing for you. Now when I want to enter one of those crazy strong and super random passwords I don’t have to type it out or even copy and paste. I simply click my mouse in the user name field and press Ctrl + Alt + A. The genius of this is that it can work for all accounts on your computer not just website ones – for instance I use it at work to keep track of my passwords for our internal programs.

WHO IS PAYING YOU?

All of this praise may make it seem like I’m getting paid to write this article but that isn’t the case (not that I would turn the money down mind you *hint hint*…). KeePass is just one of those programs I use daily that does so many things right I can’t help but like it. So in conclusion give it, or a similar password store, a try and make your online presence more resilient to password hacking. Let me know which password safes you think are awesome.

This post originally appeared on my personal website here.




I am currently running a variety of distributions, primarily Ubuntu 14.04.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Check out my profile for more information.

Using Linux to keep an old work PC alive

November 19th, 2012 1 comment

A couple of years ago I helped a small business convert their old virus infected Windows XP computer into a Linux Mint 11 (Katya) Xfce. This was done after a long time of trying to help them keep that machine running at a half-decent speed – the virus being the last straw that finally had them make the switch to Linux. Amazingly, well maybe not to the Linux faithful but to most people, this transition not only went smoothly but was actually extremely well received. Outside of a question or two every couple of months I have heard of no issues whatsoever. Sadly Linux Mint 11 has recently reached its end of life stage and so the time has come to find a replacement.

The Situation

When I said this was an old Windows XP machine I wasn’t kidding. It sports a speedy (sarcasm) 2.4Ghz Intel Pentium 4 processor, 512 whole megabytes of RAM and an Intel integrated graphics card. With specs like those it is pretty obvious that the only two real considerations (from a technical standpoint) are low resource requirements and speed. I’d be tempted to jump to a more specialized distribution like Puppy Linux but the people using the machine are A) used to Linux Mint already and B) expected a familiar, fully featured operating system experience.

Where is Linux Mint today?

Linux Mint 13 has recently been released (including an Xfce version) based on the latest Ubuntu 12.04 stable release. This makes it an ideal candidate for an upgrade because it is something already familiar to the users and will be supported until April 2017.

The following are the steps I took, in no real order, to setup and configure Linux Mint 13 Xfce for their use:

Pre/During Install Configuration

  1. Encrypt the home directory
    Because this is a work computer and will be storing sensitive financial information I configured it to encrypt everything in the home directory. Better safe than sorry.

Post Install Configuration

  1. Install Google Chrome
    I removed Mozilla Firefox and installed Google Chrome for two reasons. First Chrome tends to be, or at least feel, a little bit snappier than even the latest version of Firefox and as I mentioned above speed is king. Secondly, unless something changes, Google’s Chrome (not even Chromium) will be the only Linux browser that will continue to get Adobe Flash updates in a straightforward and easy way for the user. UPDATE: ironically the only issue I found with this whole install related to Google’s embedded Adobe Flash. For some reason the audio on the particular version ran at double speed. This is apparently a known issue.
  2. Install Rhythmbox
    I also removed Banshee and installed Rhythmbox instead. This was done not because I consider one better than the other (or even that these two represent the only options), but simply because the users were already familiar with Rhythmbox. They use Rhythmbox to listen to streaming Internet radio.
  3. Remove unnecessary software (Pidgin, XChat, GNOME Mplayer and Totem)
    Not because they are bad applications, they just simply weren’t needed. I kept VLC because it can pretty much play all audio-video.
  4. Add Trash can to desktop and remove Filesystem icon
  5. Remove all but one workspace
  6. Install preload to speed up commonly used packages on startup
  7. Configure LibreOffice
    The goal of this step is to set up LibreOffice in such a way as to make it use less memory while still keeping most of the functionality. In order to accomplish this I changed the number of undo steps from 100 to 30 and disabled the Java components.
  8. Change screensaver to blank screen
    This looks more professional and uses less memory.
  9. Spin down hard drive when possible
    While I was at it I also went into power management and had the system spin down the hard drives when possible. This configuration had nothing to do with performance, in fact spinning down the drives can slow access to files, but was done because they often just leave the PC running 24-7 and it is not in use at all during the night. I’m sure this will save them a couple of cents per year or something.
  10. Disabled unused startup services like Bluetooth
    The machine doesn’t even have a Bluetooth radio.
  11. Set it so that inserting a removable drive causes the system to open a window for browsing the contents
  12. Change the system tray clock time format from 24 hour time to 12 hour time.
    This was a user preference.
  13. Set updates to be downloaded from best available server

  14. Install Microsoft fonts (i.e. ttf-mscorefonts-installer)
  15. Install 7zip, rar and unrar
    You never know what kind of random archive formats they might need to open so it is better to support them all.
  16. Change login screen theme
    The default login screen is nice but it isn’t the most user friendly. I opted to install the Mint Pro (MDM) theme from GNOME-Look.org.
  17. Install all updates
  18. Run Grub boot profiler to speed up the boot process
    If you’re not aware of this it is a great trick. Essentially once you have everything installed (driver wise at least) you do the following:
    -Modify /etc/default/grub and change the line GRUB_CMD_LINE_LINUX_DEFAULT=”quiet splash” to GRUB_CMD_LINE_LINUX_DEFAULT=”quiet splash profile”.
    -Then run sudo update-grub2 and reboot.
    -The next reboot might be slower but once the machine comes back up simply edit that file again and remove the “profile” text. Your computer will now intelligently load drivers as the hard drive head travels across their location, instead of in some other arbitrary order which can actually shave a couple of seconds off of your total boot time.

How did it turn out?

Surprisingly well. The machine isn’t a speed demon by any stretch of the imagination but it does perform its simple tasks well enough. It remains to be seen if the computer will make it to the next long term release of Linux Mint Xfce, or even if it will be able to run it at that time, but for now the users are happy and that is what matters.

 




I am currently running a variety of distributions, primarily Ubuntu 14.04.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Check out my profile for more information.

Limit Bandwitdth Used by apt-get

October 22nd, 2012 No comments

It’s easy. Simply throw “-o Acquire::http::Dl-Limit=X” in your apt-get command where X is the kb/s you wish to limit it to. So for example let’s say that you want to limit an apt-get upgrade command to roughly 50kb/s of bandwidth. Simply issue the following command:

sudo apt-get -o Acquire::http::Dl-Limit=50 upgrade

Simple right?




I am currently running a variety of distributions, primarily Ubuntu 14.04.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Check out my profile for more information.

Ubuntu 12.10 Beta 1 (Report #3)

September 22nd, 2012 No comments

Just a quick update on my experience running the pre-release version of Ubuntu (this time upgraded to Ubuntu 12.10 Beta 1!). Not a whole lot new to report – Beta 1 is basically the same as Alpha 3 but with the addition of an option to connect to a Remote Server directly from the login screen. Unfortunately the bugs that I have filed so far have yet to be resolved, but I’m still hopeful someone has a chance to correct them prior to release.

It is already almost the end of September which means there are only a couple more weeks before the official 12.10 launch. From what I’ve seen so far this upgrade will be a pretty small, evolutionary update to the already good 12.04 release.

Previous posts in this series:




I am currently running a variety of distributions, primarily Ubuntu 14.04.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Check out my profile for more information.
Categories: Tyler B, Ubuntu Tags: ,

Big distributions, little RAM 5

September 14th, 2012 2 comments

Once again I’ve compiled some charts to show what the major, full desktop distributions look like while running on limited hardware. Just like before I’ve decided to re-run my previous tests this time using the following distributions:

  • Fedora 17 (GNOME)
  • Fedora 17 (KDE)
  • Kubuntu 12.04 (KDE)
  • Linux Mint 13 (Cinnamon)
  • Linux Mint 13 (KDE)
  • Linux Mint 13 (Mate)
  • Linux Mint 13 (Xfce)
  • Mageia (GNOME)
  • Mageia (KDE)
  • OpenSUSE 12.2 (GNOME)
  • OpenSUSE 12.2 (KDE)
  • Ubuntu 12.04 (Unity)
  • Xubuntu 12.04 (Xfce)

I will be testing all of this within VirtualBox on ‘machines’ with the following specifications:

  • Total RAM: 512MB
  • Hard drive: 8GB
  • CPU type: x86 with PAE/NX
  • Graphics: 3D Acceleration enabled

The tests were all done using VirtualBox 4.1.22, and I did not install VirtualBox tools (although some distributions may have shipped with them). I also left the screen resolution at the default (whatever the distribution chose) and accepted the installation defaults. All tests were run between September 3rd, 2012 and September 14th, 2012 so your results may not be identical.

Results

Following in the tradition of my previous posts I have once again gone through the effort to bring you nothing but the most state of the art in picture graphs for your enjoyment.

Things to know before looking at the graphs

First off if your distribution of choice didn’t appear in the list above its probably not reasonably possible to installed (i.e. I don’t have hours to compile Gentoo) or I didn’t feel it was mainstream enough (pretty much anything with LXDE). Secondly there may be some distributions that don’t appear on all of the graphs, for example Mandriva (now replaced by Mageia). Finally I did not include Debian this time around because it is still at the same version as last time. As always feel free to run your own tests.

First boot memory (RAM) usage

This test was measured on the first startup after finishing a fresh install.

Memory (RAM) usage after updates

This test was performed after all updates were installed and a reboot was performed.

Memory (RAM) usage change after updates

The net growth or decline in RAM usage after applying all of the updates.

Install size after updates

The hard drive space used by the distribution after applying all of the updates.

Conclusion

As before I’m going to leave you to drawing your own conclusions.




I am currently running a variety of distributions, primarily Ubuntu 14.04.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Check out my profile for more information.

Ubuntu 12.10 Alpha 3 (Report #2)

September 1st, 2012 No comments

Running an alpha version of an operating system, Linux or otherwise, is quite a different experience. It means, for instance, that you are not allowed to complain when minor things have bugs or simply don’t work – it is all par for the course, after all this is alpha software. That doesn’t mean however that when you do run into problems that it doesn’t still suck.

I ran into one of these problems earlier today while trying to connect via SSH to a remote computer within Nautilus. It seems that this release of the software is currently broken resulting in the following error message every time I try and browse my remote server’s directories:

The second really annoying issue I ran into was GIMP no longer showing menu items in Ubuntu’s global appmenu. This was especially infuriating because, prior to installing some updates today, it had worked perfectly fine in the past. I even had to hunt down a sub-par paint (GNU Paint) application just to crop the above screenshot.

Hopefully my annoying experiences, and subsequent bug filings, will prevent other users from experiencing the same pains when 12.10 is finally released to all. Here’s hoping anyway…

Update: It turns out that it wasn’t just the GIMP that wasn’t displaying menu items, no applications are. Off to file another bug…

Previous posts in this series:




I am currently running a variety of distributions, primarily Ubuntu 14.04.
Previously I was running KDE 4.3.3 on top of Fedora 11 (for the first experiment) and KDE 4.6.5 on top of Gentoo (for the second experiment).
Check out my profile for more information.
Categories: Tyler B, Ubuntu Tags:

Python Development on Linux and Why You Should Too

September 1st, 2012 25 comments

If you’re a programmer and you use Linux but you haven’t yet entered the amazing world that is Python development, you’re really missing out on something special. For years, I dismissed Python as just another script kiddie language, eschewing it for more “serious” languages like Java and C#. What I was missing out on were the heady days of rapid development that I so enjoyed while hacking away on Visual Basic .NET in my early years of university.

There was a time when nary a day would go by without me slinging together some code into a crappy Windows Forms application that I wrote to play with a new idea or to automate an annoying task. By and large, these small projects ceased when I moved over to Linux, partially out of laziness, and partially because I missed the rapid prototyping environment that Visual Basic .NET provided. Let’s face it – Java and C# are great languages, but getting a basic forms app set up in either of them takes a significant amount of time and effort.

Enter Python, git/github, pip, and virtualenv. This basic tool chain has got me writing code in my spare time again, and the feeling is great. So without further ado, let me present (yet another) quick tutorial on how to set up a bad-ass Python development environment of your own:

Step 1: Python

If there’s one thing that I really love about Python, it’s the wide availability of libraries for most any task that one can imagine. An important part of the rapid prototyping frame of mind is to not get bogged down on writing low-level libraries. If you have to spend an hour or two writing a custom database interface layer, you’re going to lose the drive that got you started in on the project in the first place. Unless of course, the purpose of the project was to re-invent the database interface layer. In that case, all power to you. In my experience, this is never a problem with Python, as its magical import statement will unlock a world of possibilities that is occupied by literally thousands of libraries to do most anything that you can imagine.

Install this bad boy with the simple command sudo apt-get install python and then find yourself a good python tutorial with which to learn the basics. Alternatively, you can just start hacking away and use StackOverflow to fill in any of the gaps in your knowledge.

Step 2: Git/Github

In my professional life, I live and die by source control. It’s an excellent way to keep track of the status of your project, try out new features or ideas without jeopardizing the bits of your application that already work, and perhaps most importantly, it’s a life saver when you can’t figure out why in the hell you decided to do something that seemed like a good idea at the time but now seems like a truly retarded move. If you work with other developers, it’s also a great way to find out who to blame when the build is broken.

So why Git? Well, if time is on your side, go watch this 1 hour presentation by Linus Torvalds; I guarantee that if you know the first thing about source control, he will convince you to switch. If you don’t have that kind of time on your hands (and really, who does?) suffice it to say that Git plays really well with Github, and Github is like programming + social media + crack. Basically, it’s a website that stores your public (or private) repositories, showing off your code for all the world to see and fork and hack on top of. It also allows you to find and follow other interesting projects and libraries, and to receive updates when they make a change that you might be interested in.

Need a library to do fuzzy string matching? Search Git and find fuzzywuzzy. Install it into your working environment, and start playing with it. If it doesn’t do quite what you need, fork it, check out the source, and start hacking on it until it does! Github is an amazing way to expand your ability to rapid prototype and explore ideas that would take way too long to implement from scratch.

Get started by installing git with the command sudo apt-get install git-core. You should probably also skim through the git tutorial, as it will help you start off on the right foot.

Next, mosey on over to Github and sign up for an account. Seriously, it’s awesome, stop procrastinating and do it.

Step 3: Pip

I’ve already raved about the third-party libraries for Python, but what I haven’t told you yet is that there’s an insanely easy way to get those libraries into your working environment. Pip is like a repository just for Python libraries. If you’re already familiar with Linux, then you know what I’m talking about. Remember the earlier example of needing a fuzzy string matching library in your project? Well with pip, getting one is as easy as typing pip install fuzzywuzzy. This will install the fuzzywuzzy library on your system, and make it available to your application in one easy step.

But I’m getting ahead of myself here: You need to install pip before you can start using it. For that, you’ll need to run sudo apt-get install python-setuptools python-dev build-essential && sudo easy_install -U pip

The other cool thing about pip? When you’re ready to share your project with others (or just want to set up a development environment on another machine that has all of the necessary prerequisites to run it) you can run the command pip freeze > requirements.txt to create a file that describes all of the libraries that are necessary for your app to run correctly. In order to use that list, just run pip install -r requirements.txt on the target machine, and pip will automatically fetch all of your projects prerequisites. I swear, it’s fucking magical.

Step 4: Virtualenv

As I’ve already mentioned, one of my favourite things about Python is the availability of third-party libraries that enable your code to do just about anything with simple import statement. One of the problems with Python is that trying to keep all of the dependencies for all of your projects straight can be a real pain in the ass. Enter virtualenv.

This is an application that allows you to create virtual working environments, complete with their own Python versions and libraries. You can start a new project, use pip to install a whole bunch of libraries, then switch over to another project and work with a whole bunch of other libraries, all without different versions of the same library ever interfering with one another. This technique also keeps the pip requirements files that I mentioned above nice and clean so that each of your projects can state the exact dependency set that it needs to run without introducing cruft into your development environment.

Another tool that I’d like to introduce you to at this time is virtualenvwrapper. Just like the name says, it’s a wrapper for virtualenv that allows you to easily manage the many virtual environments that you will soon have floating around your machine.

Install both with the command pip install virtualenv virtualenvwrapper

Once the installation has completed, you’ll may need to modify your .bashrc profile to initialize virtualenvwrapper whenever you log into your user account. To do so, open up the .bashrc file in your home directory using your favourite text editor, or execute the following command: sudo nano ~/.bashrc 

Now paste the following chunk of code into the bottom of that file, save it, and exit:

# initialize virtualenv wrapper if present
if [ -f /usr/local/bin/virtualenvwrapper.sh ] ; then
. /usr/local/bin/virtualenvwrapper.sh
fi

Please note that this step didn’t seem to be necessary on Ubuntu 12.04, so it may only be essential for those running older versions of the operating system. I would suggest trying to use virtualenvwrapper with the instructions below before bothering to modify the .bashrc file.

Now you can make a new virtual environment with the command mkvirtualenv <project name>, and activate it with the command workon <project name>. When you create a new virtual environment, it’s like wiping your Python slate clean. Use pip to add some libraries to your virtual environment, write some code, and when you’re done, use the deactivate command to go back to your main system. Don’t forget to use pip freeze inside of your virtual environment to obtain a list of all of the packages that your application depends on.

Step 5: Starting a New Project

Ok, so how do we actually use all of the tools that I’ve raved about here? Follow the steps below to start your very own Python project:

  1. Decide on a name for your project. This is likely the hardest part. It probably shouldn’t have spaces in it, because Linux really doesn’t like spaces.
  2. Create a virtual environment for your project with the command mkvirtualenv <project name>
  3. Activate the virtual environment for your project with the command workon <project name>
  4. Sign into Github and click on the New Repository button in the lower right hand corner of the home page
  5. Give your new repository the same name as your project. If you were a creative and individual snowflake, the name won’t already be taken. If not, consider starting back at step 1, or just tacking your birth year onto the end of the bastard like we used to do with hotmail addresses back in the day.
  6. On the new repository page, make sure that you check the box that says Initialize this repository with a README and that you select Python from the Add .gitignore drop down box. The latter step will make sure that git ignores files types that need not be checked into your repository when you commit your code.
  7. Click theCreate Repository button
  8. Back on your local machine, Clone your repository with the command git clone https://github.com/<github user name>/<project name> this will create a directory for your project that you can do all of your work in.
  9. Write some amazing fucking code that blows everybody’s minds. If you need some libraries (and really, who doesn’t?) make sure to use the pip install <library name> command.
  10. Commit early, commit often with the git commit -am “your commit message goes here” command
  11. When you’re ready to make your work public, post it to github with the command git push https://github.com/<github user name>/<project name>
  12. Don’t forget to script out your project dependencies with the pip freeze > requirements.txt command
  13. Finally, when you’re finished working for the day, use the deactivate command to return to your normal working environment.

In Conclusion:

This post is way longer than I had originally intended. Suck it. I hope your eyes are sore. I also hope that by now, you’ve been convinced of how awesome a Python development environment can be. So get out there and write some amazing code. Oh, and don’t forget to check out my projects on github.




On my Laptop, I am running Linux Mint 12.
On my home media server, I am running Ubuntu 12.04
Check out my profile for more information.
Categories: Jon F, Programming Tags: , ,