Tuesday, May 17, 2011

No Login Manager, No Hal, No Daemons, Just Udev

So, as a linux power user, I like to keep my system lightweight. I use a very slimmed down version of XFCE on my laptop and desktop.

However, sometimes you can go overboard and make life difficult for yourself by removing necessary services. A login manager isn't necessary if you are the only user of the computer. Unfortunately, often times the login manager sets up the permissions at login time. This can mean things such as flash drives will not mount when they are inserted.

So here is what I like to do.

First of all, with the new xfce 4.8, add the following to your ~/.xinitrc to start xfce4 when you login.

exec dbus-launch --exit-with-session ck-launch-session startxfce4

Now, what about mounting your flash drives and external hard drives? Hal is deprecated. It is not necessary on a modern linux system. Unfortunately, documentation on what to do, especially from Debian, is scarce. Clearly, you can install thunar-volman or gnome-volume-manager, or some other tool, but these are daemons that run all the time, and they may pull unnecessary dependencies if they do not fit in with the desktop installed on your system, or the lack there of.

Not only that, they are an extra daemon that isn't necessary. Udev is already running, and it handles hotplug events from hardware. However, it isn't setup to mount usb drives by default. Fortunately, it isn't too difficult to set it up. In my example, I will be adding support for ntfs-3g drives as well.

I only slightly modified this from some Arch Linux Documentation. The best way to do this is to open up a text editor, such as leafpad, and past the rules below into the file, and save the file as automount.rules and then copy the file to /etc/udev/rules.d/automount.rules

Then you need to restart the udev daemon, on debian as root,

/etc/init.d/udev restart

After this, devices should automatically mount, without permission problems, and without running an extra daemon, no hal, just udev.

#
# /etc/udev/rules.d/automount.rules

# start at sdb to ignore the system hard drive
KERNEL!="sd[b-z]*", GOTO="my_media_automount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="my_media_automount_end"

# import some useful filesystem info as variables
IMPORT{program}="/sbin/blkid -o udev -p %N"

# get the label if present, otherwise assign one based on device/partition
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

# create the dir in /media and symlink it to /mnt
ACTION=="add", RUN+="/bin/mkdir -p '/media/%E{dir_name}'"

# global mount options
ACTION=="add", ENV{mount_options}="relatime"
# filesystem-specific mount options (777/666 dir/file perms for ntfs/vfat) 
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},gid=100,dmask=000,fmask=111,utf8"

# automount ntfs filesystems using ntfs-3g driver
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mount -t ntfs-3g -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"
# automount all other filesystems
ACTION=="add", ENV{ID_FS_TYPE}!="ntfs", RUN+="/bin/mount -t auto -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"

# clean up after device removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l '/media/%E{dir_name}'", RUN+="/bin/rmdir '/media/%E{dir_name}'"

# exit
LABEL="my_media_automount_end"

KERNEL!="mmcblk[0-9]p[0-9]", GOTO="sd_cards_auto_mount_end"

# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem specific options
ACTION=="add", IMPORT{program}="/sbin/blkid -o udev -p %N"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

ACTION=="add", RUN+="/bin/mkdir -p /media/sd-%k", RUN+="/bin/ln -s /media/sd-%k /mnt/sd-%k", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/sd-%k"
ACTION=="remove", RUN+="/bin/umount -l /media/sd-%k", RUN+="/bin/rmdir /media/sd-%k"
LABEL="sd_cards_auto_mount_end"

I plan on adding this to the debian wiki, because this is valuable and necessary documentation.

Monday, December 13, 2010

Quick Samba Setup

This post is about Samba, the *nix implementation of the smb protocol. Put simply it runs as a daemon and can allow a *nix/bsd box to share folders with other *nix/bsd boxes and even windows boxes.

In this post we are going to dig into a quick and easy configuration of Samba.

In Windows with one click you can share folders and anyone can have access to your documents, to create and delete, and possibly upload mallicious software. On Linux thankfully we have permissions and other security measure some built directly into Samba which prevents this, although Linux could still be setup to share folders with one simple click.

Two basic security settings in Samba are Security=user and Security=share. I like to use Security=Share and that is what we will dive into first.

You can read more about the different security settings here. Basically security=share is a little more relaxed security wise and does not require usernames.

Not only do we have to deal with Samba permissions, we also have linux filesystem permissions to be concerned with, given that you are using a filesystem that supports permissions which is usually the case with Linux. The filesystem permissions supercede the Samba permissions.

Keep in mind in order for others who are not created as users on the host machine to view Samba shares, the permissions for others must be set so that they can execute the directory. This means in order to give others the permission to read and write to the shared directory they will need to have rwx permissions. In order to achieve this we will need to use the chmod command.

chmod -R 777 /directory/iam/sharing/

This will give everyone the ability to create and delete files in this directory I am creating.

This may seem like a gaping security hole, but luckily by default, files created through samba by other users are owned by nobody, which has extremely low permission and will not execute. This means that others cannot upload and run mallicious code. However, this settings could always be changed so that others could create files with more relaxed permission and not under the nobody user.

Read more about chmod and basic permissions here.

With this type of settings it would be more wise to only allow others to access and read the files in the directory. For this 775 permissions would be sufficient. (rx)

Let's say I want to create a shared directory of my mp3s and I want to allow selected users to create and add files to this directory.

One way to accomplish this would be to use security=user.

We will make a directory where we will store the mp3s.

mkdir /home/user/mp3s

We will create a group of users that are allowed to access these mp3s.

# groupadd mp3users

Next, we make sure that the mp3users own the mp3 directory, first making sure your user is a member of the mp3users group

# gpasswd -a user mp3users
# chown -R user:mp3users /home/user/mp3s

Now you own the mp3 directory and it belongs to the mp3users group. Now we will change the access permissions of the directory so that you can read,write, and execute it, the members of the group can read, write and execute it, but others have no access.

#chmod -R 770 /home/user/mp3s

This takes care of the Linux setup of the directory. Now we must setup Samba.

First I will show you, my basic samba configuration. I stripped out a lot of the stuff that is unnecessary for me, to make my file simpler and easier to read.

/etc/samba/smb.conf

### Paul's Samba Configuration

#======================= Global Settings =======================

[global]

workgroup = MSHOME

server string = %h

####### Authentication #######

security = user

encrypt passwords = true

passdb backend = tdbsam

obey pam restrictions = yes

unix password sync = yes

passwd program = /usr/bin/passwd %u

passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

pam password change = yes

Most of that is default. You may want to change workgroup=MSHOME to the workgroup that the computers in your house use, it is easier to MS computers to find other computer that are on the same workgroup, that's just the way it is.

server string =%h

This means that the hostname of the computer will be used as the network name of the machine through samba.

Now we will append /etc/samba/smb.conf with the shares we want to setup.

[MP3]

comment = music

path = /home/user/mp3s

writeable = yes

public = yes

guest ok = yes

valid users = paul rita @mp3users

[MP3] is the name of the share over the network.
Valid users restricts access to only the users and groups listed. Now we must create the user “rita” and add her to the mp3users group and enable her in samba. Here is how we do this.

adduser rita
## creates the user rita

gpasswd -a rita mp3users
## adds rita to the mp3users group

smbpasswd -a rita
## adds rita to the samba database

smbpasswd -e rita
## enables the user rita in the samba database

smbpasswd -n rita
## this makes it so rita does not need a password

Read more about restricting access through Samba here.

Smbpasswd is where passwords are stored, it handles samba access to your computer. The -n switch doesn't always work as intended for me. Keep in mind that the users will need the passwords created when you ran smbpasswd -a in order to access the shares.

You can change the guest account from nobody to somebody else by settings the following in the Authentification section of /etc/samba/smb.conf

guest account = mp3user

You can then control that user's permissions and which group he belongs to with the commands used above. Be careful because this is how you can grant anyone the permission to upload mallicious code.

You can also change the permissions of the files and directories that your guest users create by adding the following to the shares that you setup.

create mask = 0770
directory mask = 0770

This means that the files (create mask) will be rwx for the owner and those in the group, and directories (directory mask), will be rwx for the owner and those in the group.

Anyway, that is a quick Samba setup, and a crash course in permissions. You could do other things like making sure all your shared folders are owned by a “sambashare” group and add your selected users to that group. The choices are yours and yours alone. Good Luck.

Thursday, October 7, 2010

Using Pulseaudio on Debian

This is an updated version of the How-To I used to have on Debian User Forums. I found my How-To cited on various websites around the internet and I felt awful for not updating it in so long, so I finally gathered up all the new information and edited my How-to. The old version was heavily outdated. If for any reason you regularly referenced that How-To and you need the information that was on it, I'm hosting it on my website, only because I have so much web space and I don't know what to do with it all. You can access it here:
Pulseaudio is a sound server which acts as drop in replacement for Esound. It allows users without a sound card capable of hardware mixing to playback multiple sounds at once. It also allows users to send sounds over a network. Learn more here:
If you're wondering why one should switch to Pulseaudio, consider reading this article by Nathan Willis on Linux.com, where he mentions this very How-To.
http://www.linux.com/feature/119926


On with the How-To:

Pulseaudio has always been easy to configure, as it is intended to neatly replace esd. It is even easier to configure now. Just install the packages, run the command and presto.

Before we can begin we have to install Pulseaudio in the first place. You can go into synaptic and search for Pulseaudio and install every package by that name, which will work, or you can try this:



apt-get install pulseaudio libao4 paprefs libpulse-mainloop-glib0 pulseaudio-module-jack pavucontrol pulseaudio-module-hal pulseaudio-module-x11 gstreamer0.10-pulseaudio pulseaudio-utils libasound2-plugins paman pulseaudio-module-gconf libgconfmm-2.6-1c2 libpulse-browse0 pavumeter libglademm-2.4-1c2a pulseaudio-esound-compat libpulse0 libpulse-dev pulseaudio-module-bluetooth pulseaudio-module-zeroconf



Please note that entering the above command will uninstall Esound!

That command just includes the packages and modules that I just deemed most useful. All of those aren't needed, and there are other modules that add more functionality for pulseaudio such as pulseaudio-module-lirc.

After you have installed pulseaudio, copy the following into /etc/asound.conf. You must create the file! As we go along we will add some settings to this file in order to extend its functionality. On some systems the appropriate file may be /home/user/.asoundrc



pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

pcm.!default {
    type pulse
}

ctl.!default {
    type pulse
}


Once everything is installed and the asound.conf file is in place, start the pulseaudio server with the following command:


pulseaudio -D


I'm pretty sure Pulseaudio should autostart by default, but if it doesn't, you may want to enable software sound mixing, this is done in gnome by going to system>preferences>sound then go to the sound tab and click the check box to enable software sound mixing. If you do not want system sounds, you can always disable each system sound individually, but this will start pulseaudio automatically at boot. You could also go to sessions and add the pulseaudio -D command to begin at startup, and this too will start pulseaudio automatically. There are other ways to do this as well. I use XFCE so I add pulseaudio -D to the applications that autostart.


Pasuspender


I never actually use this feature anymore because all my applications use pulseaudio beautifully. I use audacity as an example but audacity now works with pulseaudio out of the box. I'm just leaving this an example for other applications that may have trouble that I may not be aware of.

I would like to mention one of the newest and most useful developments in the Pulseaudio sound server and that is the pasuspend or pasuspender feature. This new feature enables Pulseaudio to automatically suspend it's lock of the audio device in order to allow other application to control the audio device. Whenever Pulseaudio is idle, meaning any application using sound is not running, it automatically suspends it's lock of the audio device, which will allow the user to open an application such as Audacity which does not natively use Pulseaudio, and Audacity will work through the ALSA sound system.

It is also possible for the user to force Pulseaudio to relinquish it's lock of the audio device. Just precede the command of the program you wish to start with the pasuspender command. For instance:

pasuspender audacity

This will cause Pulseaudio to suspend it's control of the sound device and allow Audacity to run through ALSA as if Pulseaudio didn't exist. Pasuspender will work with any application that does not support Pulseaudio but support ALSA.

Because Pulseaudio automatically relinquishes control of the sound device and allows applications to use ALSA, this could cause a situation where you think the sound is going through Pulseaudio when it is actually going directly through ALSA. (Does that make sense?).

Well, the best idea is to check to make sure that Pulseaudio is running and that the sound is running through Pulseaudio, and there are many ways to do this.

1. If your notice that your system sounds stopped running, then the Pulseaudio daemon must not be running.

2. If you open up two application using sound simultaneously, the second one will not be able to access the sound card.

3. Open up the Pulseaudio Manager, in Applications>Sound and Video>Pulseaudio Manager, it will say if it is connected or not.

4. Run the command

ps_ax | grep pulseaudio

Which should return something similar to the following if Pulseaudio is running properly.

3319 ?        Sl     1:31 /usr/bin/pulseaudio --log-target=syslog
3322 ?        S      0:00 /usr/lib/pulseaudio/pulse/gconf-helper
26493 pts/1    R+     0:00 grep pulseaudio


5. You could always check if it is running through the system monitor, which is the same thing as the ps_ax command above.

Network Audio
Playing Sounds on other computers

Mac has airport which allows you to stream Itunes to speakers that are connected to airport. Well, rather than spend some insane amount of money for airport, we can do better with Pulseaudio. Lennart Pottering the developer of Pulseaudio, is also a developer of Avahi, the network discovery daemon. So as long as the other computer is shared on the home network, Pulseaudio should be able to play sounds on it.

The catch is, first make sure you can view the network shares of both computers from the other computer. This way you can be sure that the computers can see each other. My home network works fine, so I didn't have to worry about this, so I don't know what will happen, but make sure the computers can atleast ping each other before trying anything.

Both computers must both be running Pulseaudio. I have only tried it on Linux computers, but it should work with any computer that runs Pulseaudio including Mac and Windows, but you may run into problems unique to those systems. Also you must make sure Pulseaudio is configured to share its server.

To configure Pulseaudio to share its server, you need to go into Pulseaudio Preferences which is located in System>Preferences>Pulseaudio Preferences. Then you need to enable all the options for network discovery. Here is what mine looks like.

Then you must do the same process on the networked computer you wish to share audio on. When you are done the process the Pulseaudio Preferences tray icon should appear.

The final step is to click on the Pulseaudio Preferences tray icon, and from there you can change the default Pulseaudio Server on the computer you are sitting at, to the Pulseaudio server on your networked computer, and all sounds played on the computer you are sitting at will play through the speakers on your networked computer. It is that easy!!

You will need the paprefs package to set this up. Even if you do not have gnome, I would recommend installing the gnome-system-tools in order to do this. If you absolutely against doing that you can change the default server by editing the file /etc/pulse/client.conf

Uncomment "default server" and change it to
tcp:REMOTEIP:4713

Where REMOTEIP is the IP address of the computer you want your sounds to be sent to.

Bluetooth

I will not get into using bluetooth because it works flawlessly without any setup. Basically all I had to do was pair the bluetooth headset and it appeared as a device in pulseaudio-volume-control, and you can then select which streams you want to send to the headset. Pulseaudio-volume-control is an amazing application, it's like a compiz for sound as Lennart puts it.

ProjectM

I just wanted to take a second and mention this awesome application. It is called projectm-pulseaudio. It is in the repositories. It displays awesome visualizations for pulseaudio streams, independent of the application that the sound originates from. Exaile my favorite music player removed support for visualizations, however projectm-pulseaudio will show visualizations for the music and use fewer resources while doing it. I absolutely love this application. Absolutely no setup required and it will visualize any stream, it doesn't care, it is only visualizing what is coming out of pulseaudio. Awesome!

Applications
Getting specific applications to work with Pulseaudio.

I will only mention applications which do not appear at the Pulseaudio Wiki or that I am unhappy with the Pulseaudio Wiki's explination of. http://pulseaudio.org/wiki/PerfectSetup
The methods used in this section were performed using the "Default Setup" from above.

OpenAl
This is no longer necessary because OpenAl supports Pulseaudio now.

I used to need to edit my asound.conf and add dmix devices to get applications that used OpenAl to work, however mednafen now supports pulseaudio out of the box, so this is no longer needed for me atleast, but I will keep the information up for legacy applications.

Much of this is from the Dmix Wiki and it is my current personal setup. This enables me to get pulseaudio to work with some applications it wouldn't normally work with, specifically applications using OpenAl.

# Part I directly from ALSA Dmix Wiki

pcm.paul { # paul is my name, you can use your name, just make sure you use it below too
    type dmix
    ipc_key 1024
    slave {
        pcm "hw:0,0"     
        period_time 0
        period_size 1024
        buffer_size 8192
       #format "S32_LE"
       #periods 128
        rate 44100
    }
}

pcm.dsp0 {
    type plug
    slave.pcm "paul"
}

# This following device can fool some applications into using pulseaudio
pcm.dsp1 {
    type plug
    slave.pcm "pulse"
}

ctl.mixer0 {
    type hw
    card 0
}

# Part II directly from Pulseaudio Wiki

pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

# Optional, set defaults

pcm.!default {
    type pulse
}

ctl.!default {
    type pulse
}


This creates virtual devices in Alsa which applications which cannot use Pulseaudio directly to play sounds. The default device is still Pulseaudio however. The program I use that utilized the OpenAl system was Mednafen a Nintendo emulator. In order to get this to run, first you need the OpenAl utilities, which should already be taken care for you when you install whatever program utilizes OpenAl. (isn't automatic dependency resolution wonderful ) Anyway, if it isn't search through synaptic or some other package management system.

Then, try to force whatever program you are using to make use of the pcm.dsp1 device I created earlier in my asound.conf. In Mednafen I simply specify -sounddevice pcm.dsp1 and mednafen will then output through pulseaudio. However, sometime the audio can stutter and be poor, so what I do is increase the sound buffer size slightly. (The default buffersize in Mednafen is 32). This may not be needed in other applications that use OpenAl but I thought I would mention that here.

This is the command I use in Mednafen to use OpenAl through Pulseaudio

mednafen -sounddriver alsa -sounddevice pcm.dsp1 -soundbufsize 64 -vdriver 0 -nes.stretch 1 -fs 1 -nes.input.port1 gamepad "$rom"

If you are actually trying to use mednafen, you don't need to do any of this anymore. I'm just leaving the command up as an example for people who may be using legacy applications.

Avidemux

This is no longer necessary.

This one is easy, specify "Pulse" [no quotes] as the Alsa device in Edit,Preferences,Audio. Or you can tell Avidemux to use OSS and then start the application using "padsp Avidemux"
(Make sure you are using "Xvideo Accel" in Edit,Preferences,Video)

Audacity

Audacity now uses portaudio and runs with pulseaudio out of the box. Yay!

Iceweasel

Getting flash to work used to be a headache. It really isn't anymore even if you use 64bit. When Adobe temporarily removed the 64bit flash plugin I still used an old alpha version so that Pulseaudio would continue to work. I'm not too uptight about security. You'll never get pulseaudio to work with flash using nspluginwrapper.

I recommend using the newest version of flash, the beta of square is incredibly stable, it is fast, and uses less memory than previous incarnations.

To install flash player 10, is a pretty straight forward process, just go to the site, download the archive, extract it, and replace the flash plugin that is currently on your system. WARNING: You may want to back up flash player 9 before begining this upgrade.

Copy the plugin to /usr/lib/mozilla/plugins/libflashplayer.so, there is plenty of information on how to do this so I will not go into more detail. Just know that there should be no problems using the right version of flash.

Tinkering
Getting Applications to work with Pulseaudio.

If your application does not work with Pulseaudio, I would try the following steps in this order. But before you try on your own, check the applications section of this How-To and the Pulseaudio wiki http://pulseaudio.org/wiki/PerfectSetup for directions for specific applications.

1.Try to specify that the program use the device "Pulse" [no quotes]
2.Try to specify that the program use the device "pcm.pulse" [always without quotes]
3.Try to specify that the program use the device "pcm.dsp1" (You must have an asound.conf that I created (or similar))
4.Try to specify that the program use the device "pcm.paul" or "paul" (or whatever name you used in your asound.conf)
5.Try to specify that the program use "dmix"
6.Try to specify that the program use the OSS sound driver. Then wrap the program with "padsp" [no quotes] (padsp is similar to aoss, except that it outputs to Pulseaudio and it seems to work much faster.)
7.Use the pasuspender command

pasuspender program


Troubleshooting

1.Make sure the Pulseaudio Daemon is currently running. Check gstreamer-properties (Multimedia Systems Selector) to be sure. It may have crashed or whatever.
2.Make sure you copied the asound.conf exactly.
3.Try copying the asound.conf to /.asoundrc (this means make a file in your home directory called .asoundrc and put the same contents as you /etc/asound.conf into it.) The file will be a hidden file. For me only asound.conf works but it may be different for other people especially if you are not on debian.
4.Try a restart
5.Try the commands "sudo dpkg-reconfigure pulseaudio" and "sudo dpkg-reconfigure pulseaudio-utils" to set things back to default.
6.Try a different device as stated in the Tinkering section.
7."sudo apt-get alsa-utils gnome-audio" then type the command "aplay -D pulse /usr/share/sounds/startup3.wav" This will check if Pulseaudio is running and that your asound.conf or /.asoundrc is correct. Again, no quotes.

Notes

I have tried the oss2pulse daemon which emulates oss devices. It creates fake OSS devices that naturally output to Pulseaudio, which allows old OSS application to run easily through Pulseaudio. This is still alpha software, very much in the testing phase, but worth mentioning.

Pulseaudio and Jack

Pulseaudio and Jack are two seperate sound servers that have two completely different purposes. Pulseaudio is great for consumer audio and jack is great for commercial audio. As a musician I have actually created music using both, which for me is possible, but it is obviously not ideal for professional audio which will need jack. Lennart Pottering the developer of Pulseaudio wrote about this and gave at talk at the 2010 Linux Audio Conference.

http://0pointer.de/blog/projects/when-pa-and-when-not.html

Pulseaudio has the ability to connect to jack through it's module, however, this has to be done manually and it is not trivial. Pulseaudio will however get out of jack's way when it is started. I have no problems starting jack if I start it when no applications are running which is the norm when I'm doing a music project.

The only reason one would want pulseaudio to connect to jack is if you want the streams from pulseaudio. It requires jack_transport which isn't packaged, and the whole implementation in general is a bit finicky.

However, is an e-mail sent to me by CJ Van Den Berg on the pulseaudio discussing the procedure.

https://tango.0pointer.de/pipermail/pulseaudio-discuss/2007-March/000330.html

and here is an Ubuntu How-to based upon that e-mail that goes more in depth.

http://ubuntuforums.org/showthread.php?t=548178

Like I said, It's not something I use, but that shouldn't have kept me from posting the information sooner.

System Sounds

libcanberra has a pulseaudio library, which should make it easy to use pulseaudio to play system sounds. However, I an not currently get system sounds to work, partially because I use xfce mostly and don't use gnome often. You can however enable accessible login if you are using gdm and get sounds to play that way. You can also add a command to the autostarted applications that plays a sound on startup. For this I use the play command provided by the sox package.

play /path/to/sound.ogg

(It can be pretty much any format when you are using the play command, that's why I use it.)

EDIT: I can confirm on my gnome install, that alert sounds do work with pulseaudio. (11.09.10)

Acknowledgements/Sources

By the way, Pulseaudio is in rapid devleopment. It used to be a difficult task to get sound that originates on one computer, to play on another computer over the internet. Now that process, is really simple, and uses a great GUI. It's called Pulseaudio Device Chooser. It works really well if you have multiple computers using Pulseaudio. I just though I would mention how awesome that is, and acknowledge the great work the Pulseaudio developers are doing.

A special thanks to all the guys at the Pulseaudio Mailing List, without whom I would not even have Pulseaudio working.

Wednesday, October 6, 2010

Test

Hi, I'm just testing the blog. I should be ready to make a first post in a little bit.