System 76 review

November 15th, 2011

So when I started my new job at seatgeek.com, I got to chose my computer.  I asked for a system 76.  I wanted to support a company which made quality ubuntu machines.  I really wanted to like this machine.

Ordering experience

I decided that I was looking for the wilddog performance model.  I then had to tell my boss I wanted a computer named the “wilddog performance”.  Come on, I’m an adult, not a gamer.  I wanted a model with two dual-dvi out ports on the graphics card, it was hard to figure out which of the available cards from the website would have this feature.  The card that seemed most applicable – the system76 listed “nVidia GeForce GTS 550″ didn’t exist anywhere on nVidia’s site.  Eventually I figured out that this was a GTX 550 Ti, which did indeed have two dual dvi out ports.  I notified a salesperson from system76 about this via email, they still haven’t updated their website.  I placed my order, about 10 days later the machine came.

Build quality.

The machine was boxed without a manual and only a couple of pieces of styrofoam, I appreciated this. It would have been nice for them to send an ubuntu recovery USB stick, but no great loss. Overall, it seemed like a well built machine, simple but well built, which is fine.  I really don’t see much need for mini-towers anymore.  My machine has no cd drives and only a single ssd drive, I don’t need all that extra volume.  When I first picked up the machine I could hear something rattling around inside it, opening the access panel revealed an errant screw.

Initial startup experience

The machine started up into a fresh ubuntu install, with a very clean onboarding process.  The second reboot however resulted in a blank screen.  Ctrl-Alt-F2 to a terminal, and startx had me back into the windowing environment.   After some googling, I realized that I needed to run

$ sudo apt-get install --reinstall nvidia-current

With that, ubuntu booted normally and I had a reasonable ubuntu experience, system76 was out of the picture.

Overall impression

It worked, it’s a simple machine with (eventually) supported hardware. I don’t think that system76 actually did that much to make it a pleasant linux experience. I’m on the fence as to whether or not I would buy from them again. The machine is blazing fast, but that’s thanks to intel (ssd and quadcore processor), not system76.

XMonad on Ubuntu

January 17th, 2010

The biggest reason that I wanted to switch to Linux was tiling window managers. OS X is particularly bad at window management. I am constantly dragging this window here, changing the size from a single corner, rearranging my windows, and cursing. All of these actions are tedious, repetitive, slow, and theoretically scriptable. By default tiling window managers never overlap windows, and they provide good keyboard management for window arrangement. Alas they are only really available on X11.

There are many tiling window managers. Off the top of my head there is ratpoison, sawfish, awesome, xwem – written in elisp, stumpwm – written in Common Lisp, and xmonad – written in haskell. I really want to use stumpwm to get a chance to play with common lisp a bit more, but xmonad seems to be a lot more popular. So for now I am using xmonad.

installing xmonad was a simple “sudo apt-get install xmonad”, making it available as a window manager from the gnome-login was more complicated. X11 has a concept of display managers, from what I can tell display managers control your intial login to an x11 system. The standard x11 display manager is xdm, this runs your ~/.xinitrc and ~/.xsession . Most of the information about installing and customizing xmonad recommends editting these files. However under Ubuntu 9.10 gdm (Gnome Display Manager) doesn’t run your ~/.xinitrc . This is very frustrating. gdm does however have a concept of switchable sessions, when you see the login screen for ubuntu, after selecting the user, at the bottom of the screen there will be three drop downs (DRAWING A BLANK), (DRAWING A BLANK) and Session. By default under Session there is Gnome, Gnome-failsafe, and xterm. I ran some apt-get install command (DRAWING A BLANK) that added an option for xmonad to this list, and sure enough upon selecting it, xmonad started on login.

Starting xmonad in this way lets you play with it, but I of course wanted to customize my xmonad preferences. Piecing together from the xmonad faq and some blog posts I came up with this setup, it feels hackish, but it’s a start.

This setup starts nm-applet – the network monitor control thing, this make my laptop automatically connect to my wifi. It also starts emacs, firefox, and rxvt. Then it runs some xmodmap commands to map the key to the right of the right ctrl-key to mod5, my xmonad configuration uses mod5 as it’s hot-key. I will explain my experiences with x11 key mapping in my next post.

There is a directory /usr/share/xsessions/ which contains files that describe the session dropdown box for gdm. In this directory I made a file for xmonad2.desktop

/usr/share/xsessions/xmonad2.desktop

[Desktop Entry]
Encoding=UTF-8
Name=XMonad2
Comment=Leightweight tiling window manager
Exec=xmonad.start
Icon=xmonad.png
Type=XSession

The exec line is the important one, it tells gdm to run xmonad.start. xmonad.start is what I am using instead of a ~/.xinitrc , this is the part that feels very hacky

/usr/local/bin/xmonad.start

#!/bin/bash

xrdb -merge .Xresources

#trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 15 --height 12 --transparent true --tint 0x000000 &

#gnome-screensaver

#gnome-settings-daemon

#if [ -x /usr/bin/gnome-power-manager ] ; then
#   sleep 1
#   gnome-power-manager
#fi

if [ -x /usr/bin/nm-applet ] ; then
   nm-applet --sm-disable &
fi

#kmix --keepvisibility
emacs &
xterm &
firefox &

#most basic xmodmap stuff
xmodmap -e 'remove Lock = Caps_Lock'
xmodmap -e 'keysym Caps_Lock = Control_L'
xmodmap -e 'add Control = Control_L'
xmodmap -e 'keycode 166 = Hyper_R'
xmodmap -e 'add mod5 = Hyper_R'

#feh --bg-scale /mnt/archivio/foto/2008-2009-dublino/2009-04-10-stefano/hapenny-desktop.jpg &
#exec ~/.xmonadrc
exec xmonad

The last file that I have editted is my xmonad.hs file. This is a haskell file that sets preferences for xmonad. For now all it really does is tell xmonad to use mod5 for it’s hyper-key

~/.xmonad/xmonad.hs

import XMonad

main = xmonad defaultConfig
         { modMask = mod5Mask
         , terminal = "urxvt"
         }

And with that I have a minimally usable xmonad setup. Xmonad’s default hot-key is mod1 which is mapped to alt/meta , an unusable meta key makes emacs useless, thus the change. Many people use the windows key, but I need that for super in emacs, I plan to use the document key for hyper in emacs, thus mod5 for xmonad.

All in all I am enjoying xmonad. I’m not completely familiar with it yet, but it seems incredibly powerful and fast.

My biggest gripe with the X11 graphical environment is the lack of sane keyboard shortcuts. OS X got this very right. CTRL-Q generally quits an app, Apple-Q always quit apps. The biggest thing I miss about OS X though is the input modifiers for text areas. In OS X, the default bindings for almost every text input box are very similar to emacs bindings. Try it. C-w, C-a, C-e, C-p, C-n, C-k all work as expected, if I had put in the time I could have made the meta bindings work too. I know of no equivalent for linux and I miss it. The upside though is, I only really use emacs and firefox, a media player, sometimes a terminal, a chat program, and an irc client. That is a small number of programs to customize, and if I get my act together, I could do chat and irc in emacs too.

Ubuntu and the t500

January 17th, 2010

I’m lucky I got the laptop on a Friday, I am spending this whole weekend setting it up to my liking.  It is very nice to be able to take the time to get things right the first time.  This post will detail the hardware and drivers issues that I have dealt with putting ubuntu on the t500.

For the most part everything just worked.  The install was quick and painless – as I have come to expect from ubuntu.  With one exception I didn’t have to do anything at the command line.

The only area where I may have run into trouble was with wireless drivers.  This laptop has an intel 5100 or 5300 wireless card, I’m not sure.  I say may have because I think the problem was really with my router not ubuntu drivers.

My laptop wouldn’t log into my old netgear router when I got it.  The netgear router showed up in the list of networks available, but after entering a password, the network icon just spun and finally failed.  Friends often have trouble logging into this router.  I changed the security on the router to wep from wpa, no luck.  Then I removed all security from the router, no luck.  I tried to login on my MBP, but that didn’t work either.  Finally I put the security on the router back to WPA and my MBP still couldn’t login, the t500 was never able to login to that router.

I bought a new D-Link dual band router.  I had a little trouble initially logging into the N network with the ubuntu and I ran.

sudo modprobe -r iwalgn
sudo modprobe iwalgn

those commands removed and reinstalled the linux wireless kernel module. After that, I was able to log into both networks with ubuntu. I’m not sure if that was a linux problem or a router problem, during the time when I was having trouble logging into the D-Link, my MBP had a little trouble too. Now everything works, and I’m happy.

Graphics worked off the bat. My t500 has switchable graphics, it has an ATI Mobility Radeon 3650 and built in Intel graphics. On vista the os will use the ATI chipset when you want better performance and the intel chipset when you want better battery life, it switches without rebooting, there are no drivers that accomplish this feat on linux, xp, or windows 7.

Next I wanted to test the different driver combinations for performance. I was only interested in 2d performance, so I used the gtkperf benchmark. I was running xmonad with the test window fullscreen when these results were produced.

Intel Drivers

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:51:08 2010

GtkEntry - time:  0.03
GtkComboBox - time:  0.24
GtkComboBoxEntry - time:  0.18
GtkSpinButton - time:  0.05
GtkProgressBar - time:  0.03
GtkToggleButton - time:  0.05
GtkCheckButton - time:  0.02
GtkRadioButton - time:  0.08
GtkTextView - Add text - time:  0.41
GtkTextView - Scroll - time:  0.01
GtkDrawingArea - Lines - time:  1.13
GtkDrawingArea - Circles - time:  1.47
GtkDrawingArea - Text - time:  1.05
GtkDrawingArea - Pixbufs - time:  0.14
 ---
Total time:  4.89

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:51:15 2010

GtkEntry - time:  0.03
GtkComboBox - time:  0.25
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.05
GtkProgressBar - time:  0.03
GtkToggleButton - time:  0.07
GtkCheckButton - time:  0.04
GtkRadioButton - time:  0.13
GtkTextView - Add text - time:  0.42
GtkTextView - Scroll - time:  0.02
GtkDrawingArea - Lines - time:  1.13
GtkDrawingArea - Circles - time:  1.37
GtkDrawingArea - Text - time:  1.45
GtkDrawingArea - Pixbufs - time:  0.14
 ---
Total time:  5.31

Ati Open Source drivers

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:54:06 2010

GtkEntry - time:  0.02
GtkComboBox - time:  0.30
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.06
GtkProgressBar - time:  0.05
GtkToggleButton - time:  0.05
GtkCheckButton - time:  0.03
GtkRadioButton - time:  0.05
GtkTextView - Add text - time:  0.38
GtkTextView - Scroll - time:  0.01
GtkDrawingArea - Lines - time:  1.00
GtkDrawingArea - Circles - time:  1.62
GtkDrawingArea - Text - time:  0.95
GtkDrawingArea - Pixbufs - time:  0.07
 ---
Total time:  4.78

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:54:12 2010

GtkEntry - time:  0.03
GtkComboBox - time:  0.29
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.05
GtkProgressBar - time:  0.04
GtkToggleButton - time:  0.08
GtkCheckButton - time:  0.04
GtkRadioButton - time:  0.08
GtkTextView - Add text - time:  0.41
GtkTextView - Scroll - time:  0.01
GtkDrawingArea - Lines - time:  1.01
GtkDrawingArea - Circles - time:  1.62
GtkDrawingArea - Text - time:  0.95
GtkDrawingArea - Pixbufs - time:  0.07
 ---
Total time:  4.87

Proprietary ATI Drivers

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:59:29 2010

GtkEntry - time:  0.02
GtkComboBox - time:  0.27
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.03
GtkProgressBar - time:  0.02
GtkToggleButton - time:  0.05
GtkCheckButton - time:  0.02
GtkRadioButton - time:  0.05
GtkTextView - Add text - time:  0.40
GtkTextView - Scroll - time:  0.01
GtkDrawingArea - Lines - time:  0.99
GtkDrawingArea - Circles - time:  1.18
GtkDrawingArea - Text - time: 19.52
GtkDrawingArea - Pixbufs - time:  1.97
 ---
Total time: 24.72

GtkPerf 0.40 - Starting testing: Sat Jan 16 18:59:56 2010

GtkEntry - time:  0.02
GtkComboBox - time:  0.28
GtkComboBoxEntry - time:  0.19
GtkSpinButton - time:  0.03
GtkProgressBar - time:  0.02
GtkToggleButton - time:  0.07
GtkCheckButton - time:  0.03
GtkRadioButton - time:  0.08
GtkTextView - Add text - time:  0.60
GtkTextView - Scroll - time:  0.02
GtkDrawingArea - Lines - time:  1.10
GtkDrawingArea - Circles - time:  1.28
GtkDrawingArea - Text - time: 20.11
GtkDrawingArea - Pixbufs - time:  1.98
 ---
Total time: 25.83

It seemed like the open source ATI driver was a little faster than the Intel driver, but not by a signficant amount. The proprietary ATI driver was atrocious for text. I don’t know that I would notice a difference in day to day use though, when I get a chance, I will run the same tests on my MBP through OS X and virtualized Ubuntu. For now I will be using the Intel drivers. Things will get interesting when my docking station comes in and I start playing with my 30 inch screen.

New laptop — the hardware

January 17th, 2010

On Friday my new laptop came in.  I got a Lenovo Thinkpad T500, with 8gb of ram, 3Ghz processor, and 120gb ssd drive — for $1612.  There are great deals at the Lenovo outlet store.

Thoughts

1. Wow is this fast.

  • I can boot, login, and have firefox reload 20 tabs in about 25 seconds.
  • I can run “find / | wc -l” in .5 seconds
  • Netbeans and eclipse start in 2 seconds

I attribute the speed to the ssd.  Linux helps some, but the ssd makes all the difference.  If you use a computer more than an hour a day, go out and buy an SSD now.  The speed is absolutely incredible

2. I like the build quality.   The screen doesn’t flex at all like my 2nd gen MBP pro did (first gen case).   I’ll see how it holds up.

3. The keyboard is awesome, except for the flex under the s,d,f,w,e,r,x,c keys.  When I press those keys, I can feel the key activation, than I hear a thump as the keyboard back hits another part of the case.  I will talk to Lenovo about this, I might be able to fix it with shims.  This has been discussed extensively http://www.thinkpadtoday.com/thinkpad-t400-and-t500-keyboard-stiffness-myth-busted.htm .

4. I don’t like the trackpad nearly as much as I did on the MBP.   Two finger scrolling on the MBP was awesome.   On this machine I have to use the right side of the trackpad for vertical scrolling.  This isn’t a huge deal, I am working very hard to set up my environment so that I don’t have to manipulate the pointer at all.  On the plus side, the trackpad buttons feel much better than the button on the MBP, that button was so wide that when I would slap one side of it with my thumb, sometimes it wouldn’t register, others it would twist down on that side instead of moving down in a straight path.

For the most part hardware is hardware.   Running linux on this machine is much more interesting, I’ll talk about that next

My side project list

December 20th, 2009

So I was trying to figure out tonight which side project I felt like hacking on. Here are the main ones I have.

Terminalcast.com

Ugh, where to start.  Terminalcast is cool, it impresses people, no one uses it, myself included.  Here is what I want to improve on it.

  • increased participation, I would really like some help developing it,  I’m the only one who plays with it.
  • better marketing, aside from the initial blip on reddit/hackernews, there has been little response from the community.  I would like to see a community form around terminalcast of users and consumers.  I want to encourage the craft of programming.
  • better recording,  I want recording to be much easier.  I would really like recording to be integrated into a terminal emulator, and integrated emacs.  It would be great if I could get it so that recording is the default (keep a one hour buffer of your past activity) and publishing is what you have to decide to do, rather than decide to record an interesting terminalcast and publish it.  I think programmers do interesting things all the time, if we lowered the bar to publishing those interesting things, we would all be better off.
  • better playback, right now sound sync on playback isn’t great, it works sometimes,  I would also like to get seeking to work reliably.
  • Color playback.  Currently color is recorded, but rxvt-js can’t interpret it on playback, that would help so much.  Right now emacs is very hard to follow, because the viewer has no idea where the cursor is.

pydbgr – emacs integration

Pydbgr is an amazing python debugger written by Rocky Bernstein.  It is leaps and bounds better than pdb, because it is debuggable (yes a debuggable debugger), componentized, and connection agnostic (it doesn’t care if you connect via STDIN or a socket).  I want to work on an emacs mode that allows me to set breakpoints without editing my code.  I can pretty much make this work for single threaded/single process python code.  It falls on it’s face especially with multi process code (think django runserver).   Making pydbgr read the breakpoints is fairly trivial (I may have even had it working at some point), I think I can deal with the concurrency issue with middleware fore django .

django unit testing

In the past couple of months I have really gotten into unit testing, well just testing, I don’t know if my tests are unit tests, integration tests, or regression tests, probably some combination.  I have found some things to be lacking though, primarily emacs integration.

I already have code setup so that I can run any single unit test file in my code base with a simple keyboard shortcut, this is incredibly helpful.  I also have a shortcut to test my whole project.  What I really want are functions that allow me to run a single test in a unit test suite ( so that I don’t have to comment out or change the names of other test_* functions in a test class).  I also want a “run last test command” shortcut, so that I can fix a broken unit test, and rerun the last test command that made that break, without navigating back to the original test file.

I would also like to look into parallel django unit testing, so that I can run unit tests more quickly.  It would be especially cool if I could run all my tests on another box, in parallel, and have that box ship me back the results.  if I could have all my tests run in 5 seconds, and see any failures, that would allow me to avoid a bunch of errors, that are otherwise ignored because I don’t run my whole test suite as frequently as I should

django-multimatcher-widget

I can’t go into a lot of detail about this.  I have been working on a django Form.Field that lets me build word-definition (example) match relationships in an inline formset,  I know what I want to do, but it is often very obtuse to work through django’s metaclass hackery especially when you layer the admin system on top of the field metaclass system.

rope / ropemacs hacking

rope is a refactoring library for python.  It allows me to make awesome transforms on my python code.  It is mind numbingly slow though.  It is also incredibly opaque.  I use it through pymacs/ropemacs .  Pymacs is a library that allows python to expose objects to lisp and vice versa, it runs over a socket.  I have no idea how to debug or sanely develop on the rope codebase, I seem to have 5 minute loops as I make emacs reload the python module.  Rope seems to have slowed down a lot recently, probably because I have installed a lot of system packages.

Hopefully this blog post will motivate me to work on some of these problems.

Terminalcast.com is up and running

September 30th, 2009

I released a project that I have been working on in my free time today.  Since thanksgiving last year I have been playing with terminal emulators and javascript.  I wanted a better screencast tool.

I realized that if I captured the exact output of programs that was going to my terminal emulator, I could reanimate that in another terminal emulator.  The difference is, I wrote a terminal emulator in javascript so that it all is done on the web.

Terminal emulators are incredibly complex pieces of software.  After looking at a couple of them, I settled on rxvt.  Line for line I rewrote rxvt in javascript.  It works (kinda).

I’m proud of it.  I hope that people find it useful

Who the fuck is yaron shohat and why does he want my social security number

May 21st, 2009

I was trying to book a flight on jetblue.com yesterday, and I had a horrible experience. When you go to jetblue.com and search for a flight you are redirected to jetblueairways.com, initially I didn’t notice this. After I entered in my credit card information (with my Bank of America card) and hit submit, I was redirected to http://securesuite.com/bankofamerica , or a similar url. On this page I was asked for the last 6 digits of my social security number and my email address. I hesitated and looked up securesuite.com.

securesuite.com is apparently part of Visa’s “Verified by Visa” program. There were very few hits on google for the site, and most of them were people worried about phishing scams. I did a whois on securesuite.com and got these results.

   Registrant:
      cyota
      yaron shohat
      8200 Greensboro Drive Suite 1100
      Mclean, VA 22102

      Email: IAAG_DNS_Hostmaster@rsa.com

   Registrar Name....: REGISTER.COM, INC.
   Registrar Whois...: whois.register.com
   Registrar Homepage: www.register.com

   Domain Name: securesuite.net

      Created on..............: Fri, Aug 23, 2002
      Expires on..............: Sun, Aug 23, 2009
      Record last updated on..: Sun, Nov 09, 2008

   Administrative Contact:
      RSA, The Security Division of EMC
      IAAG DNS ADMIN
      8200 Greensboro Drive Suite 1100
      Mclean, Va 22102
      US
      Phone: +1.8665606153
      Email: IAAG_DNS_Admin@rsa.com

   Technical Contact:
      RSA, The Security Division of EMC
      IAAG DNS TECH
      8200 Greensboro Drive Suite 1100
      Mclean, Va 22102
      MS
      Phone: +1.8665606153
      Email: IAAG_DNS_Tech@rsa.com

   DNS Servers:

   pdns1.ultradns.net
   pdns5.ultradns.info
   pdns4.ultradns.org
   pdns6.ultradns.co.uk
   pdns2.ultradns.net
   pdns3.ultradns.org

Visit AboutUs.org for more information about securesuite.net

AboutUs: securesuite.net

Register your domain name at http://www.register.com

What the fuck. I don’t care if it is really sanctioned by Visa, and is a legitimate site, I won’t submit any information to such a poorly administered site. This is horrid, I don’t know who is responsible Visa, Bank of America, Jet Blue, a hacker who got into Jet Blue, or Jet Blue’s credit card processor, and frankly I don’t care.

At this point I went back to the previous page, and realized that I hadn’t been filing in my credit card information on jetblue.com, but jetblueairways.com. I opened a new browser and went to jetblue.com going through the same steps and I realized that searching for a flight on their home page redirects you to jetblueairways.com. Next I looked at the form on the last page from jetblueairways.com where I wrote in my credit card info, to see if it submitted to jetblueairways.com or securesuite.net,  apparently that page does submit to jetblueairways.com and the response gives an http redirect to securesuite.net.

I will call jetblue and my bank today to see what is going on.  Whatever the result, this was a horrible experience.  If this was legitimate, in some ways it is even more scary.  I had a hard time understanding what was happening, and I’m a programmer who deals with the web everyday, my parents are dead in the water.

Getting pdb to work with django on windows

May 5th, 2009

I was setting up django on Scott’s machine for django development.  In addition to the normal quirks
manage.py runserver
doesn’t work normally. You get no updates in the shell when you load a page, unlike on unix systems, where you see access logs. When you a save a file in your django project, it forces the webserver to reload, at which point you see all the previous logs.

This behaviour is annoying enough for access logs, but it makes pdb unusable, which in turn makes development much less fun. After digging through the django/manage.py/basehttp/wsgi/pdb/cmd.py source I stumbled onto the problem.

Django uses

sys.stdout.write("foo")

to write access logs and other information from the server to the shell.  Calling sys.stdout.flush(), will cause your shell to update with the most recent server output. When you save a file, it causes django to terminate the current server and start a new one. killing the current server causes stdout to flush. Making the server call flush in all the right places would require editting django code, or monkey patching, thankfully getting pdb to work under windows is much easier. use this function

import pdb
def set_trace():
    p = pdb.Pdb()
    p.use_rawinput = False
    p.set_trace(sys._getframe().f_back)
set_trace()

if you look at the code in cmd.py, when raw_input is True, sys.stdout.flush() isn’t called, otherwise it is.

Good luck, I hope this is helpful

making shell.el dirtrack mode really work

January 30th, 2009

I use shell.el on emacs.  After recently discovering pushd, popd, and wanting to write more cd aliases, I have grown tired of emacs’ dirtracking.  

 

So, I looked at the code for  

 shell-resync-dirs </pre>

This function uses


 

Citizen Aid Charity Event at Gallery Bar

December 11th, 2008

 

Citizen Aid event at Gallery Bar for Building With Books

Citizen Aid event at Gallery Bar for Building With Books

My girlfriend Jen cofounded a charity named Citizen Aid.  They are throwing an event tonight at Gallery Bar supporting Building With Books.  I will be there and I hope you can come to.  Here is the email announcement for it.

 

Thursday, December 11th at Gallery Bar, 6:30pm – 10pm.

120 Orchard St. $20 cover. All proceeds go to benefit Building With Books.

There will be an Absinthe Open Bar, from 7-8p, courtesy of our sponsor, Versinthe.

Please join us, and forward this invite to co-workers & friends!

Benefit yourself and others this holiday season and join us for a night of =
live music, cocktails, and a silent auction to raise money for an amazing charity that’s dedicated to increasing education and literacy around the globe.

All proceeds will go to benefit Building With Books, an organization that runs 130 after-school programs for inner-city youth in the US and has built 287 schools in developing countries. 100% of the funds we raise from this event will go directly to building a new school in Nicaragua, which will be the 34th school that Building With Books has built in that country. In addition
to the silent art auction, there will be entertainment by DJ Aleks and sing
er Matt Lenny, plus specials on beer and well drinks. The $20 admission and
$25 minimum bids are tax deductible.

This event is being hosted by Citizen Aid. Citizen Aid is a volunteer event-planning organization that plans events/fundraisers, from conception to execution, for registered non-profits & NGOs. Founded in 2006 by college friends Jen Charlton, Nicole Keating and Abbie Somma, Citizen Aid has organize
d events that have helped to raise money and awareness to increase literacy
in Haiti, support humanitarian aid in Sudan and to stop the practice of human trafficking.

 

 


>More information can be found at:

 

http://citizenaid.org/

http://www.buildingwithbooks.org/default.aspx

http://www.myspace.com/mattlenny

http://www.myspace.com/thegirliloveband

http://www.versinthe.net/