Skip to content

Category: General

Getting started with Arduino

I love Make magazine. It captures the excitement and joy of tinkering, experimenting, and modifying things for fun. This is an experience I have had over and over through the years, beginning in my early childhood. I was that one kid that always took all of his toys apart, usually putting them back together with “improvements.”

I have learned so much from doing things this way, probably more than I have learned from books. I am a book lover, but more than that, I am a tinkerer. I’m never content with knowing theory, I have to get my hands dirty and experiment, often before I bother to learn the theory.

It is this very personality trait that caused me to enjoy a book I read this week, Getting Started with Arduino. The book is published by O’Reilly as part of their Make: Projects series. There is also an accompanying website dedicated to the project.

The book begins with a description of Arduino. This is an open source electronics prototyping platform designed for experimentation and learning. It was originally begun as a way to teach designers how to build prototypes of the projects they are designing, along with simple embedded software development. It turns out that is is a really fun-sounding hobbyist platform, too. I’ll get to the “fun-sounding” bit shortly.

The book is written in a way that an interested, but completely inexperienced person should be able to pick it up and read it, comprehend it, and begin to use the platform. I think that is possible. The text gives a clear and easy introduction to electronics without bogging down the casual newcomer in the details. In the long term, you would certainly want to study in greater depth from other resources, but for a person just looking to get started actually doing something, this book is ideal. It describes the Arduino hardware, gives an introduction to programming that is easy to follow and should allow any reader to play along with comprehension.

This is where I was unsatisfied: the software IDE and hardware drivers are easy to install and run on Windows and MacOSX, but not on Linux. There is a link in the book to a page that gives details of how to install on Linux, but it is more complicated and may turn some potential users off of the idea. I know that it’s ironic for a tinkerer to not want to tinker, but remember, the target audience is people who love to get their hands dirty without knowing or having to figure out the details in advance. There are links on that page to instructions for installation in various Linux distributions, but all that I checked were at least one release out of date. As I write this, I’m running the 64 bit version of Ubuntu 8.10, but the most recent Ubuntu instructions were for 8.04. Could I figure it out? Of course, but these missing details are disappointing.

My final evaluation is that the project looks like a lot of fun, and the book really is an enjoyable read. I can think of several uses for the hardware without even trying and it would probably be a blast to play around with. I will watch the project and hope to see the usability and interactability with Linux made/kept more up to date. When that happens, I’m in. In the meanwhile, you will probably find me at the electronics surplus/reclamation shop or the swap meet and garage sales for looking for my potential victims, I mean, experimentation platforms.

Mastering phpMyAdmin 2.11

I am the sole person responsible for seven websites that use MySQL databases, and have worked on the back end of several others. Over the years I have worked on these databases in many different ways. I’ve done it from the command line, via ssh. I’ve done it using PHP scripts within the software being run on a site. I have also used phpMyAdmin. Each method has applications and moments where I would prefer using it to the others at my disposal.

I have generally used phpMyAdmin only in those moments when I had something quick and simple to do, or when a hosting company did not provide ssh or command line access. This was mainly because I did not realize how powerful and flexible the software can be.

I just read a book called Mastering phpMyAdmin 2.11.

I didn’t realize how amazingly easy it is to configure this program, and how much you can do with phpMyAdmin. The book starts with the basic foundation of installation and initial configuration, then walks you through the steps of using it in your unique setting. The author makes a note of default settings as well as some that are likely preset to other options by web hosting providers. It clearly outlines how to change those defaults if you are using the software on a server you own or control.

Mastering phpMyAdmin is clearly written, using easy to comprehend examples, with a chapter structure that begins without the need for previous knowledge and takes you to uses and procedures that are far beyond the needs of most of us. That’s cool! It is always my preference to have more information at my disposal than I am likely to need, rather than the other way around. With this book, I can’t imagine needing to look up any other documentation source to figure out how to create, manipulate, check, repair, backup, restore, optimize, or otherwise interact with a MySQL database.

It is my opinion that this book would be very helpful to people who are completely new to database and website administration, who perhaps already have access to phpMyAdmin through their web hosting provider through cPanel or Plesk, or have the permissions on the server to install it themselves. As an intermediate (definitely not guru-level) admin, I found the book a helpful and enjoyable way to discover new uses for the software as well as new ways to configure it to remove limitations I had previously encountered, such as only being able to import sql files smaller than 2 Mb. If that sounds interesting, take a look at the book info on the publisher’s website or persue a copy at your local bookstore.

Ubuntu 8.10 magazine

I wrote several articles, and co-wrote one with a friend, Ryan Troy, for the Ubuntu 8.10 edition of Linux Identity. I even got to write the editorial at the beginning of the issue.

I received my copy today. The issue should be available on newsstands soon. It includes two installation DVDs, one 32 bit and one 64 bit. The issue will give a good introduction to Ubuntu for your friends and coworkers, even those with little technical skill, knowledge or experience.

Nowhere Else to Turn

My second book (written solo, not as a cowriter) appeared on Amazon this morning. The cover still hasn’t appeared on the site, but hopefully it will soon along with “search within this book” capability.

From the back cover: “There are things that happen in the world that are difficult and sometimes impossible to explain. At times, we are confronted with circumstances or situations over which we have no control. How we deal with those situations reveals much about our strongest beliefs, our dreams, and our fears. This collection of short stories explores specific instances of involvement with or belief in the supernatural in one North African country. The tales, all claiming to be true, were collected over several years while the author was living in Morocco.”

Readers will discover stories about fortune tellers, sorcery, jinn (genies) and more.

If you are interested, take a look here: http://www.amazon.com/Nowhere-Else-Turn-Matthew-Helmke/dp/0615264190/

Ubuntu and Open Office get shout outs in the acknowledgements, since I did all the writing and layout using them exclusively.

One url Apache-style 301 redirects in nginx

Note: this post is outdated. Use at your own risk.

In Apache, you can create an .htaccess file to house 301 Redirect statements, or you can do it in the main config file. It is easy, and common. To change the url that appears in a client browser, as well as tell it where to find something that is no longer located in an original place, you would write something like this for :

Redirect 301 /original_location/

where is where the client is looking for the file, but would not find it, and is what you want used when the original is requested as well as in the future.

Easy, right?

I searched and searched for good documentation on how to do this with nginx. I found great documentation for doing it with a regex, such as this sample code you could put in your site-specific vhost file at /etc/nginx/sites-available/mysampledomain.com for forcing browsers to use the domain name without www.

server {
listen 80;
server_name www.mysampledomain.com;
rewrite ^/(.*) permanent;
}

What I couldn’t find was a simple way to do static redirects, like in my sample above. So, tonight I did some experimenting and figured it out. I hope this helps someone else. Put something like this in your /etc/nginx/sites-available/mysampledomain.com file, in the main server section (see second example following this one).

location /original_location/ {
rewrite /original_location/ permanent;
}

That would fit in a file like the one I used in my previous post like this.

server {
listen 80;
server_name www.matthewhelmke.net;
rewrite ^/(.*) http://matthewhelmke.net/$1 permanent;
}

server {
listen 80;
server_name matthewhelmke.net;

access_log /home/myusername/public_html/matthewhelmke.net/log/access.log;
error_log /home/myusername/public_html/matthewhelmke.net/log/error.log;

location /original_location/ {
rewrite /original_location/ permanent;
}

location / {
root /home/myusername/public_html/matthewhelmke.net/public;
index index.html index.htm index.php;

# this serves static files that exist without running other rewrite tests
if (-f $request_filename) {
expires 30d;
break;
}

# this sends all non-existing file or directory requests to index.php
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}

}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/myusername/public_html/matthewhelmke.net/public$fastcgi_script_name;
include fastcgi_params;
}
}

Have fun! You now have one less reason to give why a person shouldn’t use ngnix instead of Apache.

A short how-to for switching from Apache to nginx

Note: this post is outdated. Use at your own risk.

I am running my sites on a VPS from Slicehost and have had a very good experience. When I started, I set everything up using Apache 2, since that is what I am most familiar and adept with using. Apache works well, but likes more memory than I have in my server. This caused me to use my swap far too much.

I worked with the Apache configuration, finally coming up with the changes below for my /etc/apache2/apache2.conf file, which minimized the swapping, but wasn’t quite enough for me to be happy. Also, if more than one or two people were browsing the site at a time, it forced everything to go much more slowly, because it now got backed up in a queue instead of being served quickly (this was by design, to save memory and prevent swapping). That was not acceptable. Here you can see the changes I had made to get it to run without swapping all the time in a lean-memory environment. I have removed everything but the necessary changes I had made, just to save space here. Apache is so well documented, you should be able to figure the file out as needed using readily available info, if you need to.

Timeout 30
KeepAlive On
MaxMemFree 262144
MaxKeepAliveRequests 2
KeepAliveTimeout 1
<IfModule mpm_prefork_module>
StartServers 2
MinSpareServers 1
MaxSpareServers 3
MaxClients 4
MaxRequestsPerChild 5
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MaxClients 5
MinSpareThreads 2
MaxSpareThreads 5
ThreadsPerChild 2
MaxRequestsPerChild 3
</IfModule>
HostnameLookups Off

I did some reading and decided to try nginx as a replacement for httpd. The Slicehost folks also have some great how-tos (not only on nginx) and helpful people in their forums, and my friend, Ryan, has a helpful post as well.

There are lots of how-tos around for installing from scratch on a server. Most are good. I am focusing on migrating from Apache2 to nginx. For that, I will assume you have your site set up and running on Apache, your DNS is set properly and pointing to the server, etc.

First, make sure your system is up to date, especially with all security updates. Then, install nginx, either from source or from your Linux distribution’s package repositories. I chose the latter. You also want to install the cgi version of php5. On my Ubuntu 8.10 server, I did this:

sudo aptitude update && sudo aptitude safe-upgrade

followed by:

sudo aptitude install nginx php5-cgi

I made a couple of modifications to my /etc/nginx/nginx.conf file. Here is what I have. My server has two dual core processors, hence the 4 worker processes. I lowered the keep-alive timeout, added the gzip config, and made a couple more simple changes.

user www-data;
worker_processes 4;

error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;

sendfile on;
tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 3;
tcp_nodelay off;

gzip on;
gzip_comp_level 2;
gzip_proxied any;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml
application/xml+rss text/javascript;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

After that, I used the php-fastcgi script I found here and put it in /etc/init.d/php-fastcgi.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          php-fastcgi
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start and stop php-cgi in external FASTCGI mode
# Description:       Start and stop php-cgi in external FASTCGI mode
### END INIT INFO

# Author: Kurt Zankl <kz@xon.uni.cc>

# Do NOT "set -e"

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="php-cgi in external FASTCGI mode"
NAME=php-fastcgi
DAEMON=/usr/bin/php-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

# If the daemon is not enabled, give the user a warning and then exit,
# unless we are stopping the daemon
if [ "$START" != "yes" -a "$1" != "stop" ]; then
log_warning_msg "To enable $NAME, edit /etc/default/$NAME and set START=yes"
exit 0
fi

# Process configuration
export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS="-q -b $FCGI_HOST:$FCGI_PORT"

do_start()
{
# Return
#   0 if daemon has been started
#   1 if daemon was already running
#   2 if daemon could not be started
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --background --make-pidfile --chuid $EXEC_AS_USER --startas $DAEMON -- $DAEMON_ARGS || return 2
}

do_stop()
{
# Return
#   0 if daemon has been stopped
#   1 if daemon was already stopped
#   2 if daemon could not be stopped
#   other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE > /dev/null # --name $DAEMON
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
# Wait for children to finish too if this is a daemon that forks
# and if the daemon is only ever run from this initscript.
# If the above conditions are not satisfied then add some other code
# that waits for the process to drop all resources that could be
# needed by services started subsequently.  A last resort is to
# sleep for some time.
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
# Many daemons don't delete their pidfiles when they exit.
rm -f $PIDFILE
return "$RETVAL"
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac

Then, I set the ownership and permissions appropriately.

sudo chmod u+x /etc/init.d/php-fastcgi

and

sudo chown 0.0 /etc/init.d/php-fastcgi

and set it to run at boot

sudo update-rc.d php-fastcgi defaults 21 23

Most how-to articles tell you here to create the directories to hold your website(s). Since I am doing this on a site that was already running Apache, my sites already existed in /home/myusername/public_html/sitename/public. Note where yours is, because you will need that info.

Ngnix works similarly to Apache for multiple domains. With each you can set up more than one domain on an IP address using virtual domains. If you only have one domain, the setup is easier, but outside the scope of this article. Apache2 puts the sites in directories in /etc/apache2/sites-available for setup, with symbolic links to there for active sites from /etc/apache2/sites-enabled. Nginx can do the same, using /etc/nginx/sites-available and /etc/nginx/sites-enabled.

Make a virtual host (vhost) file for each domain/site you plan to use in /etc/nginx/sites-available. Here’s a sample, based on this domain, but with sensitive info changed:

/etc/nginx/sites-available/matthewhelmke.net

server {
listen  80;
server_name  www.matthewhelmke.net;
rewrite ^/(.*) http://matthewhelmke.net/$1 permanent;
}

server {
listen  80;
server_name  matthewhelmke.net;

access_log  /home/myusername/public_html/matthewhelmke.net/log/access.log;
error_log   /home/myusername/public_html/matthewhelmke.net/log/error.log;

location / {
root   /home/myusername/public_html/matthewhelmke.net/public;
index  index.html index.htm index.php;

# this serves static files that exist without running other rewrite tests
if (-f $request_filename) {
expires 30d;
break;
}

# this sends all non-existing file or directory requests to index.php
if (!-e $request_filename) {
rewrite ^(.+)$ /index.php?q=$1 last;
}

}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  /home/myusername/public_html/matthewhelmke.net/public$fastcgi_script_name;
include fastcgi_params;
}
}

The first server section rewrites all requests for the domain that use www in front to the same url without the www. The second server section is where all the fun happens. Both are listening on port 80, the standard for http. The second tells nginx where to put the log files (in a special log directory I created for each domain, in each domain’s directory in my /home directory).

The location section is especially important. It tells where to find the root directory for my site, in my case, in a special directory called public. Then, I have two special rewrites. These allow you to use permalinks aka clean urls aka pretty urls aka SEO urls with your site. Once these lines are in the vhost file, you will discover that both WordPress and Drupal allow you to adjust the settings in their admin panels to use them as you would like. I haven’t tried it with other types of content management systems, but I think it would probably work. Without these lines, you have to use the standard url formats.

The other incredibly important bit is that last section. It tells nginx to send all php files to the fastcgi script to be interpreted. Without this, you won’t get php to work.

Once you get your vhost file set up, create a link to it from the sites-enabled directory so that nginx will know to use it.

cd /etc/nginx/sites-enabled/ && sudo ln -s ../sites-available/yourdomain.com

Then, to test it out, start the fast-cgi script, turn off Apache, and start nginx.

/etc/init.d/php-fastcgi start

/etc/init.d/apache2 stop

/etc/init.d/nginx start

If everything is set correctly, you should now be able to view your site using nginx. If it isn’t, you can always stop nginx and start apache2 again to keep your site up while you try to figure out the problem. Once it is up, tested thoroughly, and you are happy, you can remove Apache if you like.

Note: I had some trouble with the fast-cgi script at first, having copied one that had special characters put in it. That happens sometimes when you post code with WordPress. I’m trying to prevent it here by using code tags, but they reset any time there is a blank line, so you may need to cut/paste in sections. If you have problems, and all you did was cut & paste, look at this first as the likely cause.

My experience with System76

I recently bought a new computer from System76 with Ubuntu pre-installed, because I want to support companies who are supportive of Free and Open Source Software. This was my experience.

Before I ordered the machine, I spent some time reading several pages of questions and answers from their support forum, housed at the official Ubuntu Forums. A quick disclaimer: I am an administrator for the Ubuntu Forums.

Later, I emailed their support team with several questions. They responded quickly and answered every one to my satisfaction.

I also compared configurations and prices with several other Linux pre-installed retailers such as Dell, ZaReason, Los Alamos, and R Cubed, each of whom offer products I think look good. In the end, I liked the price and performance specs of System76’s Pangolin Performance best, and decided to order it.

Of course, I was not content with the default configuration, even though it looked quite nice, so I bumped up the specs a bit. Here are the details, including the price paid.

System76 Pangolin Performance (PAN-P4) = $1,049.00
Bluetooth
Display Resolution 15.4″ WSXGA+ Super Clear Glossy LCD (1680 x 1050)
Video Card nVidia GeForce 9300M GS 256MB DDR2
Hard Drive 320 GB 7200 RPM SATA II
Hardware Warranty 1 Yr. Ltd. Warranty and Technical Support
Memory 4 GB – DDR2 800 MHz – 2 DIMMs
Operating System Ubuntu 8.10 (Intrepid Ibex) 64 Bit Linux
Optical Drive CD-RW / DVD-RW
Processor Core 2 Duo T5800 2.0 GHz 800 MHz FSB 2 MB L2 (35 Watt)
Gigabit LAN (10/100/1000)
Wireless Intel Wi-Fi Link 5100 – 802.11A/B/G/N Up to 300 Mbps
Built-In Webcam

The computer was delayed a little. I emailed to ask what was going on and was answered within the hour with details. After a few days, I was given an apology for further delay and a free shipping upgrade to the next quicker option. That was nice, and the communication was very well appreciated.

When the system arrived, it was well packaged and everything arrived in perfect condition. All the cables and such were there. In all, the shipment included the laptop itself, with battery, an AC adapter, a telephone/modem cord, a Windows-focused manual that came from the whitebox manufacturer (Clevo, I believe), two nicely produced documentation sheets from System76 for getting things up and running and learning how to use the laptop’s features within Ubuntu, and a nifty polishing cloth for cleaning the glossy screen and shell.

System76 Pangolin Performance

The colorful sheet to the right of the picture includes a simple three step process for getting started. First, you plug the system in and turn it on. Second, once the computer boots into an OEM install of Ubuntu, you create your main user account. Third, you enjoy your system. The back side of the sheet includes instructions for installing a special driver package that System76 provides to ensure that you get the full hardware capability of your laptop. The process was quick and painless.

Here we are, up and running. I like to put clear adhesive backed plastic (that’s shelf paper, for you Americans) on either side of the touchpad on my laptops, as I have been known to wear through the finish on them in the past. This also gives me a place to put my Ubuntu business card with my contact info.

Keyboard and screen view of System76 Pangolin Performance

I am pleased to report that following these instructions results in a computer that “just works.” The 3D graphics, including Ubuntu’s fun Compiz visual effects, the video camera, Bluetooth, wireless internet, suspend, hibernate… In fact, everything I have tested works with no configuration needed, other than to personalize the experience! Now, I haven’t used the fingerprint reader, and have no plan to do so, so I should caution readers that I don’t know whether it works or not.

*EDIT: I just discovered that the System76 driver bundle includes everything necessary for the fingerprint reader to work, tested it, and can confirm it works beautifully. Wow!

I was concerned at first since the computer came with the 64-bit version of Ubuntu, and I have only used the 32-bit version in the past after having trouble with the 64-bit version in a much earlier release a couple years ago. I have had no problems doing anything with it that I wanted to do.

In short, I have built my own computers in the past, bought Windows computers pre-built and installed Ubuntu over or alongside that OS, and bought an Ubuntu pre-installed computer from Dell for my wife. Each method has its benefits. However, I have to say that this was the easiest and most enjoyable experience I have had.

Drupal 6 Themes

I have used Drupal to administer sites for years. It is flexible, powerful, and relatively easy to use. The one area of Drupal where I have been weak is theming. Generally, I have used contributed themes, maybe modifying colors, logos, and other simple things.

The one or two times I felt ambitious and tried to read through the documentation in order to learn how to create my own theme from scratch, I either got distracted by life, or found myself getting tired of the search and wishing I had all of the information I needed in one place to learn how to create a theme.

This week, I have been reading a book on precisely this topic called Drupal 6 Themes.

The book has impressed me. It is well-written, using clear language, useful diagrams and figures, and a logical progression of ideas. It starts with the basics, talking about what a theme is and defining its components. Then, it moves into the details of modifying the default themes. Up to this point, I didn’t encounter anything new to me, but I was only up to chapter two.

Starting with chapter three, the book reveals and clearly describes each of the files and elements that make up a theme, using both the default PHPTemplate engine as well as other options. Later, the book teaches how to use and master this template engine to create your own custom theme, including how to create custom looks for specific pages, modules, and more.

In between the two, you learn how to download ready-made themes, contributed by the Drupal user and developer community, and modify them for personal use, knowing how and where to look for usage restrictions to avoid problems.

Finally, the book ends with some very useful appendices that show where to find every css file and what it affects, and other useful tooks and kits for developers.

This book has saved me a lot of time, and is well done. If you are responsible for a site powered by Drupal, you may find it useful as well.

An interview with vor

Shawn Dennie, known as vor on the Ubuntu Forums, is one of our moderating staff. He is a programmer with a long technical history and being hired at 18 years old did wonders for his already-strong geek credibility. He is a world traveler, and an all-around interesting and good guy, and the subject of our latest in the community interview series.

1. Tell as much as you’re willing about your “real” life – name, age, gender, location, family, religion, profession, education, hobbies, etc.

My name is Shaun Dennie, I’m inching closer to 30 every day and can generally be found in Buenos Aires, Argentina (though, sometimes in Denver, Colorado or London, England).  I’m a self-proclaimed Techno-Hippie Semi-Buddhist and so don’t own anything that I can’t fit in my backpack.

I began attending (and almost graduated from) the South Dakota School of Mines and Technology at the age of 16 and was hired by Sun Microsystems at the age of 18 to work in their High Performance Libraries and Tools Group. Over the last 10 years I’ve worked various other software engineering jobs but, have spent a lot of time travelling in Europe, South America and Asia.

Over the last few years I’ve been moving away from writing proprietary software and now work in a hostel while dedicating most of my time to helping people with Ubuntu.  My hobbies include Ubuntu, going to watch my fúbol team (Club Atletico San Lorenzo de Almagro), relaxing with my friends and pretending to be a bartender at my favorite bar in Argentina (The Spot).

2. When and how did you become interested in computers? in Linux? in Ubuntu?

Like many people my age, I got interested in computers after watching movies like War Games and Weird Science.  My mother is an author so we had an 8086 machine fairly early (2 5.25 floppies and no hard drive). I learned how to use it and then one day a friend told me about this cool thing called a “BBS”.  I got a modem for Christmas and then figured out how to do ASCII art in exchange for membership for the for-pay BBSs because at the age of 12, I had no income to pay for them.

I started programming at 13 when a friend said, “It would be great to have the Dungeons and Dragons Monster Compendium on the computer and have it auto-generate loot”.  I figured out how to do just such a thing using GW-BASIC and then sold it to my friends for US$10 a copy and thus began my software engineering career.  Before starting at Sun, this career would also consist of taking bribes to ensure proper matches in a match-making program I wrote for a high-school Valentines Day fundraiser and writing a full casino software suite for the TI-85 calculator (and selling it for US$15 an install).

I got interested in Linux in 1997 when I built my first computer and, following in True Nerd Tradition, installed a copy of Slackware that I got out of the back of a Unix book.  I went on to learn more about Unix at Sun and found Ubuntu in 2005 when I wanted a Linux distro that worked on my new laptop without much hassle (and Ubuntu did!).

3. When did you become involved in the forums (or the Ubuntu community)? What’s your role there?

I started reading the forums in 2005 but I’d always been a lurker. I got brave one day in 2007 and started answering questions.  I enjoyed it and so just kept doing it.  I eventually joined the beginners team and was later invited to become a moderator for the forums.

4. Are you an Ubuntu member? If so, how do you contribute? If not, do you plan on becoming one?

I’m not currently an Ubuntu member, no. I plan to apply in the near future but, until recently my contributions have only been via the forums and I wanted to get involved more with the community here in Buenos Aires before applying.

5. What distros do you regularly use? What software? What’s your favorite application? Your least favorite?

I only run Ubuntu 8.04 on my laptop.  I have virtual machines setup for many popular distros and even Windows but, I run Ubuntu as the primary OS.

My favorite tools are vim and perl.  I once wrote a full featured mp3 player in vim (using mpg123) and generally get confused when using something that doesn’t have vi key bindings.

6. What’s your fondest memory from the forums, or from Ubuntu overall? What’s your worst?

Every time I’m able to help someone on the forums, I enjoy it.

My worst memory (though, now it’s funny to me) is when I hesitantly joined the IRC channel #ubuntu-meeting before a membership meeting to see how some friends did and the first thing I saw was, ” * vorian peers at vor-ubuntu”.  Since then, vorian has been peering/scowling/growling at me on a regular basis but, I find it less disconcerting now.

7. What luck have you had introducing new computer users to Ubuntu?

Most of my friends and family use Ubuntu now.  The key seems to be configuring it properly for them and then teaching them a few basic things.  The ones that are computer savvy to begin with quickly take the initiative to become Ubuntu experts and the ones who didn’t know much about computers in the first place have a very low barrier to entry and so quickly acclimate themselves to the new OS and sometimes even get excited about how easy it is to use.

I’m always surprised at how easily people figure out how to use Ubuntu. My mother knows nothing about computers but, she showed *me* how to sync an ipod on Ubuntu.  I installed Ubuntu on my fathers laptop and 10 minutes later he’d downloaded some games from the repos and was thoroughly enjoying himself.  I think when you give someone a non-mainstream OS, it challenges them prove their intelligence and they go out of their way figure out how things work.  I always find it funny when non-technical people say, “Well, I just use Ubuntu.” in sort of a bragging way.

8. What would you like to see happen with Linux in the future? with Ubuntu?

I’d like to see launchpad bug #1 fixed.

9. If there was one thing you could tell all new Ubuntu users, what would it be?

“Don’t Panic.”

The forums are a very friendly place and, if google isn’t giving you the answer you need, the forums probably will.

Trolling, rudeness, and a lack of manners

What is it about the internet that causes some people to act like it is suddenly okay to be rude, demeaning, or to speak/write/act in a way that would otherwise be obviously unacceptable in any human society?

I don’t actually expect an answer. I just needed to vent.