Subscribe to: Posts Comments Photos Links 239 Posts and 368 Comments till now

A confession (more on Librarians and programming)

By flickr user dav

By flickr user dav

I have been following the replies to my post on teaching programming in library school, and I have a confession to make before I continue:

I am horribly biased.

I’ve wanted to learn to program for a long time, and actually learning how to has really opened my eyes to so many possibilities. I’m now teaching myself PHP so I can learn to write my own WordPress plugins.

But I can understand this comment by Susannah M.:

Why would I want to learn any of these? What does “ruby” actually DO? what does “PHP” actually DO? How would I use these in my job? I’ve never even heard of these before. My computer does what I want it to do - why would I want to re-program it? Neither this entry nor the comments have explained this to me.

By flickr user the mad LOLscientist

By flickr user the mad LOLscientist

Dorothea Salo and Meredith Farkas blogged  that programming isn’t what is needed, but better tech training in general. While I agree with this, I can attest that learning programming is a lot different from learning a lot of the other tech stuff. I’m lucky enough (and stubborn enough) to know a good amount about programming stuff. I run Linux at home (right now in fact) and I can accomplish a lot of things without understanding the programming involved.

Meredith said:

I’ve even done stuff with PHP and JavaScript, but it just involved messing around with stuff that already existed. I’d break it, figure out what I did and how it impacted things, and then fix it. Eventually I’d usually get it to do what I needed it to do.

This description really sounds familiar. I have managed to do a LOT without knowing a lick of programming, and I can attest that it is indeed possible. At the same time, I wish, oh I wish, that I had learned to program back in high school. I would have saved myself perhaps hundreds (if not more) of hours doing things that could have been accomplished much quicker if I actually knew how things worked.

But here’s the deal: programming is hard. Especially starting out. (Trevor Owens noted this as well.) I’m finding the second language easier to pick up because I can carry things over from the first language. But I honestly don’t know if I could have figured it out without a fantastic teacher that took the time to put things into context and explain things. It is all about context. Simply requiring library students to take a computer science course won’t do it. What library schools need are more library centered tech courses—like Dorothea’s and Meredith’s—that put technology in the context of librarianship.

One other point that has been rambling around my brain in the last week is how different library school student goals may be. What I think of librarianship—active and participatory maintenance and stewardship of information—isn’t everyone’s reason for going to library school. I suppose my definition leans toward the ‘information’ area of library school. In any case, I would urge anyone interested in information management/maintenance/finding in general to find a way to learn to program. It will change the way you think about computers.

And, it’s fun—if you’re the type that likes puzzles and brain teasers. :)

Why every Library Science student should learn programming

 by elliottcable

by elliottcable

The title is meant to incite a bit of discussion. I myself am not entirely convinced that every library student should be required to take a semester long course in programming, but I also think there are several very good reasons for librarians to learn programming:

  1. Information is increasingly in digital form and programming is the most powerful tool to search and work with digital information.
  2. Data migration will always be a problem, and learning programing can help one migrate data—or, at the very least understand why some forms are easier to migrate than others.
  3. Computers are possibly the most common piece of equipment in every librarian’s job. Learning to program gives one a way to take control of the machine, or at least not feel so much at its mercy.
  4. Programming librarians would allow libraries to develop more autonomy from outside vendors.
  5. Programming is becoming a basic skill, like reading, writing, and math.
  6. Information is increasingly electronic, and if librarians are going to be stewards of that information, we need to know how to manipulate it and preserve it.
  7. Many people would like programming if they tried, but if not forced to try, will hang on to the idea that it is “too hard.”
  8. Would teach future librarians that programmers are not superhuman and to understand a little what to expect when buying software.
  9. An army of programming librarians can do a great deal of good in the world.

During this, my last semester of library school (!), I took a class in which I learned the Ruby programming language (taught by Stephen Ramsay). While I feel I only scratched the surface of programming knowledge, the class really opened my eyes to the possibilities of  and limitations of programming. Even if I never went any further with programming, I have learned several important things:

Programming is everywhere! (photo by Mike Skalnik)

Programming is everywhere! (photo by Mike Skalnik)

  • How a search engine, in very simple terms, works.
  • How much of programming is  thinking, and how comparatively little can be spent actually writing code.
  • How much of programming is just finding bits of code to reuse.
  • How to conceptualize a program. I can think out the parts now. I can’t, at this point, just go put it all together, but I could talk to a programmer and explain it much more succinctly than before.
  • Programming isn’t as hard as it seems, practically.
  • Programming is much harder than it seems, conceptually.

While I think the benefits of taking a programming class are great, I also think few will actually take a programming class, even if t is offered, because it “is just too hard.” I think this is a shame, because often people will be surprised by what they can do when they have the right motivation and instruction. As an example, I was always a horrible math student in high school. I struggled with it constantly. I just didn’t get it. But when I moved to a new school district with better teachers, I understood it perfectly. I got A’s in math—easily—for the first time in my life. The point was further driven home when I later transferred back into my old school district and was making C’s in math again. This time, though, I knew that the problem wasn’t that I couldn’t learn math, just that I would have to find ways outside of class to do so (which is a sad commentary on education, but I digress).

My goal in library science is to work with technology, so it is hard for me to look at the programming question from other viewpoints. Programming is undoubtedly useful for me personally, but how useful would it be to someone who just wants to be a children’s librarian? I think programming can come in handy in many surprising ways, but it’s hard to think of an immediate practical application for some library jobs. How could a library school encourage future librarians to take programming without requiring it, especially knowing some people are terrified of the very idea of learning to code? I’m not sure I have an answer to this. Perhaps very basic programming concepts could be included in an intro to technology course—and presented in a non-scary way. Maybe the requirements of a library master’s aren’t the same for everyone, but depend on the student’s area of interest. Maybe programming is a pre-requisite to other tech based courses, such as digital libraries. In any case, I think the profession of librarianship would benefit greatly if the majority of future librarians learned something of it—even if they never took it further.

A few tips to someone who wants to learn how to program.

Pippy, a program that teaches the Python programming language, on the One Laptop Per Child (photo by Erik)

Unfortunately, not everyone can have a great teacher like I did. Like math teachers, I’m afraid good programming teachers may be few and far between. But there are a lot of good resources out there to learn programming on your own (list below) and you’d be surprised at how quickly you can pick stuff up.

One of the first questions you might ask yourself if you decide you want to learn to write code is “what language should I pick?” This turns out to be both difficult and easy to answer. My teacher said it doesn’t matter because the concepts you learn for one language carry over to others - and while that is true, I think it really does matter in some aspects. For me, I wanted to learn something that I could use right away, something that is fairly forgiving, and that there are a lot of good, beginning resources for. Ruby works for this, but there are others. As far as using it right away, if you have a blog or other web software written in PHP, by all means, learn PHP. You’ll be able to write something useful - like how to write a plugin for your blogging software - right away. Without classroom assignments (and grades) to drive you, you’ll need something else to drive you, something you are excited about.

Try to find several resources. Sometimes you’ll get stuck in one book/webpage and another will explain it another way. One of the best resources you can start with is code, which is another reason to try and pick a language you are already working with. Also, if you can, find someone you can ask for help. I have had tremendous help from people online.

Finally, here are a few sources I have found useful, though I have not worked through them all. A resource that’s great for someone else might not work for you,so try out a bunch.

Links

  • Alice is “an educational software that teaches students programming in a 3D environment.” I have not used this myself, but it has been recommended by many.
  • Processing is a computer language for programming images and animations.
  • Snipplr is a repository for code snippits. A great place to look if you are stuck.
  • Regular Expressions are a basic building block of programming that allow you to manipulate text. But Regular Expressions are useful by themselves, too- many text editors support RegEx search and replace.

Ruby

PHP

Python

Some Ideas

What can you do with programming? Try these projects:

If you have any additional links, please leave them in the comments.

Thanks to my Twitter and Friendfeed buddies for helping me solidify my own thoughts on this subject. :)

Embedding RSS into a webpage using PHP

Thing #6 on Nebraska Learns 2.0 is about using a feedreader to find feeds. In keeping with trying to learn something new, I decided to learn how to embed RSS into a web page for Thing #6. Turns out this is pretty easy.

There is an extremely easy way to do this: You can use Feed2JS Build JavaScript tool to embed an RSS feed on your website. But I wanted to learn how to do this naively, and, since I am trying to learn PHP, I wanted to learn to do it using PHP.

Why naively?

Well, I don’t like depending on an external site (beyond the RSS feed, of course) to display the content- it’s just one more thing that can break. If all the code resides on my own server, it will be up when my site is up. You can Download Feed2JS and host on your own server as well.

There are, as it turns out, lots of ways to do this, and as with most things I am learning, someone has already done all the hard work.

All I had to do was search for “rss php” and the very first thing that came up was a nice set of php scripts called Magpie RSS. Download the package, extract (I use portable 7-Zip for this) and copy these files to a new directory:

  • folder: extlib
  • rss_cache.inc
  • rss_fetch.inc
  • rss_parse.inc
  • rss_utils.inc

Then you need a php page in that same directory with something like the following code:

<?php
require_once('rss_fetch.inc');

$url = 'http://l2ne.blogspot.com/feeds/posts/default?alt=rss';
$rss = fetch_rss($url);

echo "Site: ", $rss->channel['title'], "<br>\n";
foreach ($rss->items as $item ) {
	$title = $item[title];
	$url   = $item[link];
	echo "<a href=$url>$title</a></li><br>\n";
}
?>

This will work as long as your php page is in the same directory as the scripts. If you want to store the scripts in another place on the server, you have to alter the first line slightly:

define('MAGPIE_DIR', '/path/to/your/directory/');
require_once(MAGPIE_DIR.'rss_fetch.inc');

And, of course, you have to change the URL to the RSS feed you want to display. There are lots of other options- the download comes with some sample files to play with. It’s easier than I thought it would be. :)

On digital projects

ooooold web pageIn the Digital Humanities, there is a lot of talk about digital projects. But what exactly is a digital project?

I came to this question while browsing through some of my old sites. One that’s still online is my Frida Kahlo site. I put this back up because it is one of the most consistently hit pages on my site. It is a digital project of sorts- a little collection of Frida Kahlo images, a little bit from her diary, and a biography. When I made this (in high school, please excuse the horrible HTML and proofing) I had visions of greatness. I was going to transcribe her diary, bring in collaborators who could speak Spanish and help me transcribe, write a huge and in depth biography. In the end, the project just didn’t go much of anywhere. I was just a high school student, back then there wasn’t a lot of interest in Frida Kahlo (the movie wasn’t out, and only a few biographies existed.)

The funny thing is, looking back on this tiny project, I see a lot of similarities to digital work today. The issues I faced with foreign language characters (which I never quite resolved) are still an issue, though we have more sophisticated and standard ways of dealing with them. I dealt with how to display the transcribed text, and was never satisfied with the result. I struggled with design. I thought about navigation. Later, I wondered about and dealt with migration. Obviously, at 17 I didn’t have everything figured out, but it’s interesting to me that some of the fundamental problems of digital projects are pretty similar.

Also interesting to me is the desire to make a digital project. I wouldn’t have called this a digital project back then- it was just a project, a web page, a fun way to spend my time. It was originally connected to a home page (now lost) on which I had a blog of sorts, which was mainly a place for me to put things I’d collected. In essence, my web presence was a digital project- I was trying to accurately portray who I was, or who I wanted to be, or at least what image I wanted to present to the world. The Frida Kahlo site was a part of that. I suppose the drive to make a website, digital project, whatever, is the same as the drive to write a book, make a painting, etc. It’s sort of refreshing to think back to the 17 year old me, who just wanted to make something. Even if it was small, and incomplete, it was there- and it still gets a lot of hits to this day. I didn’t spend a lot of time agonizing over details, I just made it.

Scholarly Digital Projects, of course, need more than this. In order to preserve the data, make the site future proof, and create a site with scholarly authority, things like markup and data structure and metadata and file types must be considered. It is important. But I’d like to find a way to capture the spontaneity of “oooo, isn’t this cool!” discoveries while keeping the scholarly aspects of the site. One way I can think of to do this is to work with a Center like ours. This way, a scholar can have ideas, and we can do the best we can to implement them. The more sites we do, the easier it gets (right?). However, not every scholar has access to a center like ours, and even in digital humanities centers some projects come along where we just don’t need to reinvent the wheel.

Another way to keep some of the spontaneity is to build the site using software that allows for this kind of thing. When I was building my Frida Kahlo site, I would have loved something like Wordpress to power it. Scholarly sites - at least object driven scholarly sites - can now use Omeka. Though it is still pretty new, it shows a lot of promise for getting projects out there quickly.  More of these tools will pop up, and eventually, we may not need to develop a custom framework for every project. Of course, the bigger projects will, but there are plenty of smaller projects that wouldn’t need to mess with hand coding, etc. My dream is that we’ll eventually have transcription systems that can generate needed markup and feed right into an Omeka-like program for display. There will also be the ability to add contents, easily invite and add collaborators, and tie projects together. and, of course, the search mechanisms will be awesome. (Software is pretty cool in my dreamland of a brain.)

Someone told me recently that they thought all this money going into tools is a bit of a waste. I disagree. Though there are many similar projects right now, that is the kind of activity is what is needed to come up with the best solution. Only time will tell if it will work.

Incidentally, this post is pretty timely because the “Tools for Data-Driven Scholarship” invitation only meeting, co-hosted by George Mason University’s Center for History and New Media (CHNM) and the Maryland Institute for Technology in the Humanities (MITH), starts today. Although the meeting is invitation only, the site is open to all, and it links to some nice resources.

IM & Me

Thing # 5 for Nebraska Learns 2.0 is to try instant messaging. Well, I already IM, and I have a Meebo account (even had a meebo widget at one point), so I thought I’d just ruminate about IM and texting for a while.

I have recently begun using instant messaging a bit more, for a few reasons. One because it is convenient to use at work (if nothing else I can check to see if someone is available to call.) Another is because I’ve made a few new friends that I enjoy IMing with, so I’ve been making an effort to turn it on at home too-though I forget to turn it on a lot. Or I forget to turn it back off (sorry people who IM me in the middle of the night!)

My deep dark secret:

I have avoided IM for a long time because I am a horrible typist. This surprises people when I tell them- because I am on the computer a lot. The truth is, I never took a real typing class in school - there were a few lessons here and there, but nothing consistent. As a result, I look at the keyboard when I type. I can type about 50 words per minute this way, but I *have* to look at the keyboard to go that fast. I am now rectifying this by working through an online typing program, but the going is slow.

Not looking at the screen while you IM makes it very difficult. While I am typing, the other person says something, and I don’t look up in time to see it. You can see the awkwardness here. As my touch typing skills improve I find I am enjoying IMing more.

Fairly new to me is texting. Texting is like IM, but on a phone. Unfortunately, I don’t have one of those cool phones with the keypad for entering letters, so I enter it using the numbers, which, for me, is painfully slow. I hope to upgrade to a phone with letters and an unlimited texting plan eventually.

I think texting has so many potential applications for libraries- I would love, for instance, to get a text message the day before my library books are due. (I can set up such a reminder myself using Google Calendar, but it’d be great if it were automatic.) It would also be nice to get a timely message that my holds are in, or if there’s an event at the library.

What I like best about texting and IM is the ease of it. In the case of IM, I can look and see who is online and start up a conversation. Or I can announce that I am online and ready to chat. With texting, I can send a message without worrying that I am interrupting - if the person is busy, they’ll look at or reply later, but if they’re not, they’ll usually get back right away. For someone as phone shy as me, it’s a great thing to have available.

Image: keyboard ~ blur by striatic

Next Page »