Tuesday, December 01, 2009

Library Budget Breakdown

I work part time at a university library, so I think a little bit about the roles the library fulfills for the university and the cost the university pays the library to provide services.

The traditional library roles as cataloger and archiver of scholarly research are anachronistic. Nearly all of our scholarly journal subscriptions are online, and we download catalog records for most of the books we purchase. The library continues to spend a large portion of its budget maintaining its book collection, but it is likely that in the near future services like "Google Books" may offer subscription services for institutions to access e-books online.

Like most research libraries Auburn's has sought out new roles to fill for the university. First, a large part of the main library building's space has been cleared of books to make room for a media and digital resource lab, learning commons, and coffee shop. Second, the library has developed a digital library for online collections of scanned historical material, and university intellectual property like electronic theses and dissertations. Finally, the library web site has evolved to be a better gateway to the online databases we subscribe to.

In many ways the library budget and personnel structure continue to reflect the library's past rather than its future. In 2008-2009 Auburn University Libraries spent a total budget over $12.76 million - about the same as the school of pharmacy, about 10% less than the college of education, and more than human sciences and forestry combined. Over $7 million of the library's $12.76 million budget paid salaries, and only about $5 million paid for books, journals, and database subscriptions. For every $1.00 the university pays for books and journals, Auburn pays the library $1.40 in salaries to take care of that book.

An overhead of $1.40 for every $1.00 of investment in materials gives a sense of the library's finances, but we can achieve a better understanding if we dig a little deeper into the budget. First, the library employs over 12 reference librarians whose primary job is to help students and faculty at the reference desk, so the university invests $1 million or so in salaries to provide a reference desk. Library staff and student employees are also responsible for opening and closing the three campus library buildings, so we can say the university pays at least $1 million a year to manage that space. We can also set aside $1 million for the systems department and software subscriptions to maintain the library web site, MDRL media computer lab, and computer network. Finally, about $1 million in salary goes to the dean's office.

After subtracting $4 million from the salary budget for reference and keeping the library buildings open the library now has $0.60 overhead for every $1.00 spent on books, journals, and databases: $3 million in salaries for $5 million in materials. That looks better at first, till we remember that over 70% of the materials budget pays for online journal and database subscriptions, so $3.5 million of the materials budget pays for online resources, and at most $1.5 million pays for books and other physical materials. The library staff is divided so that approximately $1 million of salary supports the $3.5 million in electronic materials, and $2 million in staff supports the $1.5 million physical material budget.

ServiceAnnual Salaries
Reference Desk $1 million
web site, computer support, and MDRL$1 million
Library Buildings $1 million
Dean's Office $1 million
support for $1.5 million physical material budget $2 million
support for $3.5 million e-resource material budget $1 million

Obviously these numbers are all back of the envelope - I don't have access to the real books.

Monday, November 23, 2009

Water Conservation Starts at Home

I attended a two hour rain barrel workshop hosted by the Alabama Cooperative Extension Service last weekend. The workshop started with a great presentation by Tia Gonzales describing environmental impact of storm water and runoff on watersheds followed by an introduction to rain water harvesting. Tia also sent us a link to this cool map of the watersheds around Auburn, AL.

I walked away from the workshop thinking that the building code ought to include requirements for storm water management in new construction and tax incentives to encourage water harvesting. That idea was re-enforced today by this front page article on the New York Times web site describing how even light rain generates enough storm water to overwhelm many city sewer systems which overflow sewage into watersheds, drinking water sources, and basements.

Mike Rogers Disappoints on Health Care

I was disappointed, but not surprised by Mike Rogers' (Congressional representative for Albama's 3rd district) recent press release opposing health care reform. The health care bills before the House and Senate address the systemic problems in our health system that include fast rising costs for employers and patients, a growing numbers of uninsured, and an insurance system that discriminates against an American with any pre-existing condition.

It is true that the health care legislation involves trade-offs, costs, and risks. Healthy American who do not currently cary health insurance will be required to buy insurance. The wasteful Government subsidies to private insurers for Medicare Advantage programs will decrease. Medicaid expansion will increase financial burdens on federal and state governments.

The financial and humanitarian jeopardy we leave ourselves vulnerable to by not pursuing health care reform far outweighs the risks and imperfections we accept with reform. We can see that the dam will burst if we do not attempt to re-enforce it. There are good sources of information online that describe the costs and benefits in detail including healthreform.gov and Wikipedia.

Sunday, November 08, 2009

Banana Muffins

I prefer muffins to pan cakes - I always burn the pan cakes. This recipe evolved from Fannie Farmer's muffin recipe.

  • 4 Tbspn melted butter
  • 1/2 cup wheat flour
  • 3/2 cups flour
  • 1 ripe banana
  • 1 egg
  • 1 cup Soy milk
  • 1 Tbspn baking powder
  • 1 tspn cinamon
  • 1/2 cup chopped pecans
  • 1/2 cup sugar
  • 1 Tspn vanilla

Mash the banana with the egg and vanilla and mix everything up, then load into a greased muffin tin and bake 20 minutes at 380 degrees F. Muffins with coffee start the day with a smile!

Thursday, November 05, 2009

Publish javadoc to Google Code via Mercurial

I like Google code more and more the more I use it ... more. Why don't I have a vocabulary ? Anyway, I also like Mercurial, so combine Mercurial with Google Code and you have chocolate with peanut butter.

Here's how I managed to post javadoc to http://code.google.com/p/littleware/.

  • Clone the wiki mercurial repo:
        $ hg clone  https://wiki.littleware.googlecode.com/hg littleWiki
  • Copy your javadoc into littleWiki, and add it to the repo
        $ hg add -I 'glob:javadoc/**' 
        $ hg commit
  • Push the patch back up to google code
              hg push https://username:hg-password@wiki.littleware.googlecode.com/hg

BTW - I just tracked down how to tell blogger not to insert <br /> tags all over my post (http://www.google.com/support/forum/p/blogger/thread?tid=2dae985eba6f8c04&hl=en) in the HTML editor. What a stupid default!

Wednesday, October 21, 2009

The "I am Legend" Pitch

It's like "Castaway", but there are zombies on the island, right? Tom Hanks all alone on this desert island, but with zombies that come out at night.

Yeah - it's like "Castaway" meets "28 Days Later", but instead of Wilson the ball we have Sam the dog, so it's like "Marley and Me" too.

Yeah, I'm afraid Sam doesn't make it, and Tom Hanks probably wouldn't last long too, so it's Will Smith. Really buff Will Smith, and the island is Manhattan - post apocalyptic Manhattan - "Mad Max" style!

No - no women, just Will and the zombies, except there are female zombies - scary hot female zombies, and several scenes with mannequins.

Sure - we could add some flash backs with women, but it's really a cautionary tail about man's hubris and science gone wrong in the near future. Like "Terminator" except Schwartzenegger is a virus that turns people into zombies, and Sarah Connors is Will Smith.

No, I didn't think about that, but it's a good idea - "terminator zombies". Could be a sequel.

That's right - "Castaway" meets "28 Days Later" with "Marley and Me" meets "Terminator" in a "Mad Max" world with Will Smith in every scene and mannequins. It's a guaranteed block buster!

Friday, October 16, 2009

Public Option

I was thinking about arguments for and against the “public option” in health care reform. The argument in favor of a public option is that a non-profit national health insurance option would set an upper bound on premiums and prevent collusion between private insurers. The private health insurance industry has a history of inefficient resource management that spends 30% of premiums on overhead (including high executive salaries). The industry also prioritizes profits over patient well being in its efforts to avoid paying claims and over-pricing coverage for anyone that develops an ongoing health condition.

The argument against the public option reasons that the private insurance industry will not be able to compete with the public option, so the insurance industry will evolve into a single payer system run by the government. From that point public option opponents go on to argue that a government run single payer system is bad.

Spelling out the arguments for and against the public option in this way shows that both sides of the debate actually agree that a public option would more efficiently finance health care than private insurers do currently. The argument then becomes whether or not private insurers will be able to evolve and compete with an opponent that will not collude on price, the costs and benefits if we evolve toward a centralized single payer system; and if the government does not provide a private option, then how can we trust private insurers to change their behavior and become more efficient and more focused on patient well being.

Wednesday, October 07, 2009

Social Networking

I've been playing around with Twitter and Facebook lately. I'm surprised how well these sites work as communication tools. A bunch of people tracked me down on facebook in the last month, and it's fun to keep in touch. Crazy.

I'm now trying to figure out how we can wire up the feeds off some of our blogs and wikis at the Auburn libraries to auto-update the library twitter/facebook accounts. I thought there would be some open source tools we could download, but twitterfeed is the most promising thing I've come across so far. We'll see how it goes.

Sunday, October 04, 2009

Comments on Bill Marre

I watched Bill Marre the other night, and he took his usual jabs at religion and religious for inspiring terrorism, oppressing women and others, and generally doing bad stuff in God's name. I only disagree with Bill to the extent that he believes that the world would be a better place without religion. I rather tend to believe that religion is just a convenient excuse for the bad things that people will find a reason to do anyway. Bad guys like Hitler, Stalin, Mao, and Pol Pot did not need religion to justify their crimes - they just reasoned that their ends justified the means.

Anyway, that's the deep thought for the day.

Friday, July 03, 2009

Just read a good NYTimes article about China's investment in green power. China established green energy regulations two years ago stricter than the rules the United States Congress can't agree on today. Articles like this one show how we (the U.S.) don't compare well with China in energy policy where investments and sacrifices today can pay large dividends in the future. We have begun to address structural problems like financial regulation, health care costs, green house gas regulation, and energy policy, but from Wall Street to the A.M.A. to health insurance providers to oil companies to the average Joe eating a hamburger in his SUV driving to an air conditioned McMansion we're not quite ready to radically change the way we do business. We are slowly changing though - forced by the financial crisis and crisis to come (health care, global warming, etc.). It may make sense to stick with a system that has worked for years until disaster forces change, and at least we don't sell poison baby milk.

Monday, June 29, 2009

littleware on Google Code

I just setup my littleware code as a project on Google code: http://code.google.com/p/littleware/ .

What a great site! It was easy to setup the project, but here are a few tricks for interacting with the Mercurial repository.

  • To initialize the Google repository from an existing repository on your local machine:
    • hg clone googlerepo
    • hg bundle localrepo
    • cd googlerepo; hg unbundle localrepo.bundle
    Something like that.
  • Took me a while to realize that googlecode autogenerates a custom password for Mercurial push. You need to track down that custom password under the googlecode admin console to 'hg push' up to Google's repository.

Sunday, June 14, 2009

Guice, Read only POJO, and Builders

I often design java interfaces with methods that return POJOs with read-only properties like the following.

public interface Manager {
      public Info lookupInfo( String sKey );

public interface Info {
    public String getA();
    public int    getB();

I prefer to decouple Manager's implementation from Info's implementation via Guice injection like this:

public class SimpleManager implements Manager {
    public SimpleManager( Provider<Info> provideInfo ) { ...

The problem with injecting the Info provider is that provideInfo supplies read-only objects which SimpleManager cannot assign property values to. One fix to this problem is to introduce an Info builder interface, and inject that, and a nice way to implement the Builder is to nest the Builder interface within the Info interface, then nest the Info implementation within the Builder implementation. We wind up with something like this:

public interface Info {
    @ImplementedBy( SimpleInfoBuilder.class )
    public Interface Builder {
        public Builder putA( String val );
        public Builder putB( int val );
        public Info build();

public class SimpleInfoBuilder implements Info.Builder {
    private static class SimpleInfo implements Info {

    public Info build() { return new SimpleInfo( ... ); }

public class SimpleManager implements Manager {
    public SimpleManager( Provider<Info.Builder> provideInfo ) { ...

Tuesday, February 24, 2009

Design for Everything

The more code I write the complexity of what I want to do increases, and the number of design variables increase.  I find that I have to design for ...
  • testing - code to interfaces that lend themselves to unit testing
  • remote procedure call - remote APIs must be call by value
  • security - keep JAAS in mind for authentication and access control
  • user interaction - design APIs to provide hooks for user feedback, support user cancel requests, or implement the observable pattern to allow UI listeners for view changing events
  • monitoring - logging, JMX, timers
  • extensibility - OSGi implements a nice plugin architecture
  • transactions - ability to rollback multipart operations on failure after partial processing
  • cacheing - ability of client to cache data from server in a consistent way
  • injection and late binding - I like GUICE for dependency injection, but am lately struggling with marrying the GUICE's preference for data binding at application startup with a UI design that allows runtime definition of injectable parameters.

Saturday, January 10, 2009

Solaris X11 emulate 3 button mouse

Happy 2009!
I've almost got the OSGi+Guice based bootstrap of  my code running in a glassfish server - testing now to work through a few last issues.  I'm pretty happy with this setup - Guice injects dependencies, and OSGi manages module startup and shutdown.  We'll see how it works out over time.
The Glassfish J2EE server runs on an Open Solaris install which a VirtualBox virtual machine hosts on my Dell (Windows Vista) laptop.  Works great.  I've wanted to check out OpenSolaris for a while, and it's pretty slick, but  I'd be surprised if Solaris recovers the market it has lost to Linux.
Anyway - the Solaris X-server was not configured to emulate a 3 button mouse by default.  Fortunately, Google found the following easy 3-button emulation fix, so I can now happily cut and paste in the Solaris VM on my laptop.  The fix just adds an 'Emulate3Button' line to the mouse InputDevice block in /etc/X11/xorg.conf file:
Section "InputDevice"
        Identifier      "Mouse0"
    Driver      "vboxmouse"
    Option      "CorePointer"
    Option      "Device" "/dev/kdmouse"
        Option          "Protocol"              "auto"
        Option          "ZAxisMapping"          "4 5"
    Option      "Emulate3Buttons"   "true"